ДОМАШНЯЯ | ФАЙЛЫ | СТАТЬИ | ГОСТЕВАЯ | АВТОРЫ

Использование конфигурационных файлов в модах.

Иногда необходимо, чтобы ваши настройки для какого-либо мода сохранялись при выходе из Unreal Tournament в конфигурационном файле. Существует очень простой способ, позволяющий классам UnrealScript сохранять и загружать данные, используя при этом INI-файлы. Это очень удобно, так как вы можете конфигурировать ваш класс (например, менять значения некоторых полей и свойств) без повторной компиляции. Такой механизм обращения к INI-файлам реализуется с помощью ключевого слова Config, которое и указывает, какую переменную и в каком файле сохранять. Итак, приступим.

Посмотрите на описание данного класса:

Class MyClass Extends Actor;

Var String MyString;
Var Int MyInt;
Var Float MyFloat;

DefaultProperties
{
}

Это достаточно простой класс без методов, содержащий только три переменных. Первая переменная MyString имеет тип String. Это означает, что эта переменная содержит строчку символов. Переменные MyInt и MyFloat имеют типы Int и Float соответственно. То есть они представляют собой целое и вещественное числа. Раздел DefaultProperties, как видите, пустой. Это означает, что переменным класса MyClass не будут присваиваться значения по умолчанию при создании экземпляра этого класса. Простота данного класса обусловлена тем, что на его примере легко показать механизм взаимодействия UnrealScript и INI-файлов.
Допустим, что нам необходимо сохранять содержимое переменной MyString в конфигурационном файле. Для этого нам нужно заменить текст скрипта на следующий:

Class MyClass Extends Actor Config;

Var Config String MyString;
Var Int MyInt;
Var Float MyFloat;

DefaultProperties
{
}

Как видите, нужно просто добавить ключевое слово Config после объявления класса (Class MyClass Extends Actor Config;) и перед указанием типа переменной (Var Config String MyString;). Добавлением этого слова, мы указали Unreal, что:
1. в этом классе содержатся данные, которые необходимо сохранить в конфигурационном файле;
2. мы хотим, чтобы содержимое переменной MyString сохранялось/загружалось.
Заметьте, что сохраняться будет только MyString. Вы должны поместить ключевое слово Config перед описанием каждой переменной, которую вы хотите сохранить.
Теперь вы можете открыть конфигурационный файл (в нашем случае UnrealTournament.ini – он ставится по умолчанию) и присвоить нашей переменной какое-либо значение:

[MyPackage.MyClass]
MyString="This is a test string"

Unreal будет автоматически загружать это значение и устанавливать его для каждого экземпляра класса MyClass, который мы описали.
Допустим, что мы хотим сохранять наши данные в процессе исполнения кода скрипта. Для этого нужно описать функцию, подобную этой:

Function SaveMyString(Coerce String NewString)
{
MyString = NewString;
SaveConfig();
}

Ключевое слово Coerce в описании параметров функции отвечает за передачу параметру NewString правильного типа. В общем случае ключевое слово Coerce служит для приведения вызванного параметра к заданному типу (даже если UnrealScript не производит этого автоматически). Это удобно для функций, которые используют строки в качестве параметров. Таким образом параметры будут автоматически переводится в строки.
Теперь при каждом вызове функции SaveMyString() значение переменной MyString меняется на новое и сохраняется в конфигурационном файле для последующего использования. За это отвечает функция SaveConfig(), описанная разработчиками и сохраняющая все переменные данного класса (те которые определяются со словом Config) в INI-файле.
Вы также можете задавать имя конфигурационного файла. Для этого нужно изменить строчку, в которой определяется ваш класс на подобную этой:

Class MyClass Extends Actor Config(Test);

Теперь ваш класс будет сохранять все свои конфигурируемые данные в файле Test.ini и таким же образом вы можете задавать любое имя конфигурационного файла. Если после ключевого слова Config в строке определения класса нет скобок с указанным в них именем конфигурационного файла, то ваши данные будут автоматически сохраняться в файле UnrealTournament.ini в секции с именем, состоящим из названия вашего пакаджа и имени класса:

[<Имя пакаджа>.<Имя класса>]

Также существует функция ResetConfig(), которая сбрасывает значения конфигурируемых переменных класса и присваивает им значения, указанные в INI-файле.

Теперь вы можете использовать конфигурационные INI-файлы для хранения любых настроек своих модов или мутаторов.

Надеюсь, вы узнали из этого гайда что-нибудь интересное для себя. Если у вас возникнут какие-либо вопросы – присылайте письма на мой E-Mail: Sand@ua.fm.

/> О всех ошибках, найденных в статье, прошу сообщать мне по почте.
Hosted by uCoz