Игровые опции реализованы в UISystem. В логике их нет.
Опции устроены следующим образом. Есть описание в базе, которое задает "каркас". Расположено оно: /Interface/System/UIGameRoot.xdb, поле uioption. Опции сгруппированы в несколько уровней: страницы, группы, блоки, последние содержат собственно опции. Можно выполнять операции как над отдельными опциями, так и над целой коллекцией (страницей, группой, блоком). Информация об опциях выдается скрипту в унифицированном виде, детали реализации скрываются кодом и базой данных. Можно выполнять уникальную обработку для отдельных опций, для этого надо их соответствующим образом идентифицировать и проверять на этот идентификатор в скрипте.
Для автоматической обработки (типичная схема использования) опции привязываются к глобальным переменным. Соответствие типа опции и типа глобальной переменной:
UI_OPTION_DATA_FIXED - неизменяемая опция UI_OPTION_DATA_BOOLEAN - значение опции: 0 и 1, тип глобальной переменной: boolean UI_OPTION_DATA_DISCRETE - диапазон значений: [0..N], тип глобальной переменной: int UI_OPTION_DATA_DISCRETE_FLOAT - диапазон значений: [0..N], тип глобальной переменной: float
Перед работой с опциями надо вызвать функцию Update, которая получает актуальную информацию из системы и сбрасывает все сделанные (но не принятые) изменения в опциях. Динамического отслеживания состояния опций нет.
Функции Lua Api библиотеки options - игровые опции.
EventOptionChanged