Что такое токены?
Токен — это именованный параметр-заполнитель, который объявляется в стандартном родительском объекте данных и автоматически заменяется на конкретное значение во всех наследуемых объектах.
Зачем использовать токены мне?
Токены для вас значительно упростят работу с данными, сокращая их объем и облегчая их управление.
Вместо того, чтобы собственно ручно указывать одно и то же значение во множестве свойств для множества подобных данных, вы можете сделать общий родительский объект, в котором заведёте токен и один раз пропишете свойства с указанным значением токена.
Благодаря этому, вам для перенастройки объекта потребуется лишь изменить пару значений в токенах.
А вдобавок, свойства в которые подставляются значения из токена НЕ БУДУТ записываться в xml данные вашего конкретного объекта, что сделает ваши данные гораздо чище
токеном в синтаксисе xml является любой объявленный атрибут тега данных: CActor, CAbil, CUnit и т.д.
Например токеном является стандартные id, parent, а также и другие токены, которые вы объявите.
Объявление и использование токена
Для глобального использования токена во многих объектах, его нужно создать в дефолтном родителе такик образом:
Создаётся токен через особый синтаксис тегов
в xml такой синтаксис называется текстовая декларация
в xml такой синтаксис называется текстовая декларация
<CUnit default="1" id="Base">
<?token id="tokenid" type="tokentype" value=""?>
</CUnit>id: айди токена, по которому будет искаться свойства для автозамены
type: тип поля, в котором можно указать любой интересующий тип данных, можно указать как числа, строки, так и игровые данные из каталогов, например CRaceLink, CUnitLink
value: значение по умолчанию, которое будет использоваться для токена если дочерний объект не переопределит его в своём атрибуте
type: тип поля, в котором можно указать любой интересующий тип данных, можно указать как числа, строки, так и игровые данные из каталогов, например CRaceLink, CUnitLink
value: значение по умолчанию, которое будет использоваться для токена если дочерний объект не переопределит его в своём атрибуте
Токен в xml-данных представляет собой именованный атрибут значение которого записывается после "=" в двойных кавычках, И которое будет автоматически подставлять в свойства этого объекта где указан синтаксис ##tokenid##
Пример того, как должен объявляться новый токен
<CUnit default="1" id="BaseUnit">
<?token id="race" type="CRaceLink" value="Terr"?>
<Race val="##race##"/>
<GlossaryCategory val="Category/Glossary/##race##"/>
<HotkeyCategory val="Category/Hotkey/##race##"/>
</CUnit>В базовый дефолтный родительский объект добавлена строка объявления токена, с прописанным id, типом и значением по умолчанию.
А в свойствах этого родительского объекта перечислены все необходимые стандартные значения, которые для вашего типового объекта данных нужны (Например, значения по умолчанию для базовой единицы вашей расы).
В некоторые свойства, которые должны меняться по общим признакам, добавлен синтаксис ##tokenid##, который уже в дочернем объекте (например, актуальный юнит вашей расы) заменятся на значение указанного в таком токене этого объекта
Пример с использованием токена в конкретных объектах данных
<CUnit id="CustomUnit" parent="BaseUnit" race="CustomRace">
<LifeStart val="250"/>
<LifeMax val="250"/>
<Attribute index="Light" val="1"/>
<!--
Во всех свойствах в которых есть ##race## будут заменены значением
из атрибута "race" текущего тега, то есть на значение "CustomRace"
-->
<!-- свойства с произведенной заменой токена, не будут добавлены в данных объекта -->
</CUnit>При необходимости создания нового типового объекта (например новой боевой единицы вашей расы), вы создаёте его по созданному родительскому элементу, в котором определены токены.
Для этого нового объекта, в его таком токене, указываете нужное значение, которое автоматически подставится во все необходимые поля, не создав при этом лишних данных в самом объекте.
В этом конкретном объекте будет определено только то, что нужно для работы этого объекта.
Использование без родителя
Допускается использовать токены без родителя, но только для конкретных объектов данных.
К примеру, если у какой-то конкретной боевой единицы, слишком много повторяющихся данных внутри себя, то можно вывести это значение в атрибут на уровне тега
<CUnit id="anyUnit" yourtoken="10">
<Sight val="##yourtoken##"/>
<Speed val="##yourtoken##"/>
<EnergyRegenRate val="##yourtoken##"/>
</CUnit>
Создание токенов из редактора
В самом редакторе можно создавать токены лишь как атрибуты к тегам. с помощью комбинации клавиш Shift Alt A
Но вам ничего не мешает вручную через XML-вид вписать декларацию <!-- <?token id=""?> --> в стандартный родитель.

SC2








