Новости/News | | Туториалы/Tutorials | | Форум/Forum | | ЧаВо/FAQ | | Файлы/Downloads | | Ссылки/Links | | Авторы/About |

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();
}
...

PerObjectConfig

Возможно также сохранять значения 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

Замечание от автора: этот туториал будет обновляться.

Хостинг от uCoz