Config переменные
Возможности unrealscript`a для работы с файлами весьма ограничены, практически единственный способ - это работа с config переменными посредством ini файла. Способ, надо сказать, "не супер", но вполне годится для большинства задач решаемых ускриптером. В единичных случаях, когда вы уж сильно "зарываетесь" в движок, работу с файлами можно организовать только в native коде, но это материал для отдельной статьи, так что мы рассмотрим только работу с config переменными.
Сохранение значений переменных
Все что нам надо сделать - поставить слово config в заголовке нашего класса и добавить config напротив каждой переменной, значение которой мы хотим сохранить, т.е. что-то типа:
class MyClass extends SomeClass config; var config byte SomeVar; var config string SomeString; ... |
Теперь, для того чтобы сохранить значения переменных, вы должны вызвать фукнцию SaveConfig(). По умолчанию значения переменных сохраняются в системном ini файле (для УТ это UnrealTournament.ini). Однако вы можете указать свой ini файл:
class MyClass extends SomeClass config(MyIni); var config byte SomeVar; var config string SomeString; ... |
В вышеприведенном примере, значения переменных будут хранится в файле MyIni.ini
Формат хранения данных следующий:
[YourPackage.YourClass] Var1=Value1 Var2=Value2 ... |
YourClass - класс который объявлен как config, YourPackage - пак, в котором находится YourClass. Var1,Var2 - config переменные, Value1,Value2 - соответственно их значения.
Также возможно объявление переменных как globalconfig, т.е. значение переменной в ini файл сохраняется ТОЛЬКО для данного класса. Классы-потомки не смогут повлиять на globalconfig переменные. В остальном объявление и действия аналогичны:
class Parent extends SomeClass config(Main); var globalconfig byte SomeMainVar; var config byte SomeLocal; |
class Child extends Parent config(Local); var config byte LocalVar; |
В вышеприведенном примере, SomeMainVar будет хранится ТОЛЬКО в Main.ini, LocalVar - только в Local.ini, а SomeLocal как в Main.ini так и в Local.ini
Тут все просто. При инициализации вашего config класса (а это происходит при каждой загрузке уровня в котором присутствует ваш класс), движок сам находит и присваивает сохраненные значения переменных. Единственно что тут вам может понадобиться - функция ResetConfig() - восстановление значений всех config переменных на их значения в ini файле.
... function RestoreSomeValues() { ResetConfig(); } ... |
Возможно также сохранять значения config переменных не только по классу, но и по каждому экземпляру класса (объекту) в пределах уровня. Для этого существует специальная директива PerObjectConfig:
class SomeClass extends SomeActor PerObjectConfig; |
Имя ini файла будет совпадать с именем уровня, в этом ini файле для каждого объекта будет свой раздел (типа [SomeClass0], [SomeClass1] и т.д.) где и будут хранится значения config переменных. Например, вы запустили карту DM-DECK16][ и саммоните трех акторов SomeClass. Созданный ini файл будет называться DM-DECK16][.ini в котором будет три раздела [SomeClassXXX] со значениями config переменных. XXX - соответствующие номера экземпляров класса (нумерация начинается с нуля при старте движка).
[SomeClass0] SomeVar1=SomeValue1 ... [SomeClass1] SomeVar1=SomeValue2 ... [SomeClass2] SomeVar1=SomeValue3 ... |
PerObjectConfig имеет более высокий приоритет чем просто директива config или config(someinifile) и также наследуется потомками.
Хранение значений переменных в ini файлах отлично дополняется возможностью указания значений "по умолчанию" (defaultproperties). Тут возможны следующие случаи:
В том случае если у вас есть только ссылка на класс, но не сам экземпляр класса вы можете также вызывать статический метод StaticSaveConfig(), например:
... class'MyClass'.static.StaticSaveConfig(); ... |
Также замечание насчет сетевой игры:
Значения config переменных из ini файла на сервере не будут передаваться автоматически клиенту в сетевой игре. В таком случае вам надо либо написать специальную simulated функцию и вызывать ее на серверной стороне, либо объявить новые не config переменные и присваивать им значения config переменных.
Автор: Shadow
Mail: shadow_m777@mail.ru
Замечание от автора: этот туториал будет обновляться.