Skip to content

Кастомные объекты

Утилита поддерживает кастомные объекты в модулях и отдельной папке data/. В модулях разработчики могут создавать готовые способности, героев или целые расы. А разработчики карт, использующие эти модули, могут переопределять части параметров этих объектов.

Создание кастомных обьедков

Для обьедков используется формат lni из w3x2lni или обычный JSON. Вы можете создавать что-либо в соответствующих директориях в папке data/:

custom objects list

data/abilities/test.json
{
    "abob" : {
        "_parent": "Agyb",
        "Name": "Тестовое имя",
        "Health" : 12,
        "list" : [
            "test", "test2", "test3"
        ]
    }
}

Преимуществом является возможность полностью рассортировать обьекты по папкам, а также возможность использовать наследование и форматирование полей.

Однако тот же JSON формат просто автоматически конвертируется в lni файл, так что в них доступно лишь то, что будет доступно в lni.

Для проверки корректности написанного файла вы можете использовать команду:

$ kw tool parse <файл.ini/.json>

Если файл написан корректно, вы увидите вариант на .lni, который будет в итоге записан в карту, ежели в файле обнаружатся ошибки, команда укажет вам на них.

Проверка также будет происходить и при компиляции карты.

Наследование

kuniwar позволяет использовать наследование, чтобы сократить количество самоповторов в коде, а также упростить создание обьедков.

custom objects inheritance

Для этого в любом обьекте может добавлено поле _customParent = 'айдивашегообьекта'. Все параметры, которых у вашего текущего обьекта нет, будут заимствованы из параметров обьекта с указанным айди. Может быть достаточно удобно, когда у вас много обьектов с большим количеством одинаковых параметров.

Форматирование

Если вам, также как и мне, не нравится постоянное редактирование описаний обьедков, вонючий варкрафтавский хекс и тому подобное, вы можете воспользоваться форматированием строковых полей.

Цвета

Вы можете задействовать стандартные цвета для форматирования текста, поместив нужный текст в следующую конструкцию:

{c=ЦВЕТ} текст {/c}

Для примера:

custom objects colors

На данный момент доступны HEX (c=00FFAA), RGB (c=rgb(12, 100, 255)) и следующие заготовленные цвета:

  • black: (000000)
  • white: (FFFFFF)
  • red: (FF0000)
  • green: (00FF00)
  • blue: (0000FF)
  • yellow: (FFFF00)
  • cyan: (00FFFF)
  • magenta: (FF00FF)
  • gray: (808080)
  • orange: (FFA500)
  • purple: (800080)
  • pink: (FFC0CB)
  • brown: (A52A2A)
  • navy: (000080)
  • teal: (008080)
  • lime: (00FF00)

Все они автоматически преобразовываются в варкрафтовский хекс при компиляции карты.

Русские символы

Как известно, русские символы занимают больше места и бывает возникают проблемы с тем, что у вас просто не влазит описание в строку. Многие частично решают эту проблему тем, что незаметно заменяют в описаниях русские символы на схожие английские. kuniwar делает то же самое, но автоматически. Нет нужды использовать сторонние программы, поскольку все кастомные обьедки изкаропки это поддерживают.

Вставка полей

В стандартном форматировании варкрафта есть возможность вставлять в текстовые поля параметры из других обьедков, например: <Abil,DataA> и тому подобное. В kuniwar вы можете использовать похожий конструкт - {f=Abil.DataA}.

Кастомные поля

Структура файлов позволяет добавлять кастомные поля, которые в дальнейшем можно вставлять в текст или использовать в коде карты, о чем речь пойдет ниже. Например:

data/abilities/test.ini
-- Gold mined
goldmined = 12
data/abilities/test.json
"goldmined": 12

Перезапись полей

Представим ситуацию, вы добавили в свой проект модуль с кастомной благодатью, всё четко, сразу абилка есть, но, к примеру хотите поменять стоимость маны у спела. Как же это сделать?

В проекте есть отдельная папка data, с различными папками под разные объекты. К примеру, присутствует папка abilities, в которой вы можете создавать свои способности не прибегая к редактированию самой карты. В этой же папке может быть создана папка overwrite, в которой уже будут хранится переопределения.

Пример .ini файла в модуле:

[SHhb]
_parent = "ANcl"
-- Cooldown
Cool = 1.0
-- Mana Cost
Cost = 0
-- Follow Through Time
DataA = 0.01
-- Target Type
DataB = 1
-- Options
DataC = 1
-- Art Duration
DataD = 0.01
-- Disable Other Abilities
DataE = 0
-- Base Order ID
DataF = "corrosivebreath"
-- Editor Suffix
EditorSuffix = "[Paladin]"
-- Name
Name = "Holybolt"
-- Tooltip - Normal
Tip = "Holybolt"
-- Hero Ability
hero = 0
-- Levels
levels = 1
-- Targets Allowed
targs = "enemies,friend,notself,organic,allies"

Предположим, что я хочу заменить стоимость маны, ведь она тут ваще нулевая. Для этого мне необходимо создать файл data/abilities/overwrite/название.ini. Название файла ни на что не влияет и может быть любым.

Файл будет содержать следующее:

[SHhb]
-- Mana Cost
Cost = 100

Таким образом в объекте с айди SHhb заменится параметр Cost с 0 на 100. При компилировании утилита также предупредит вас о том, что происходит замена.

Подсказка

Комментарии (строки начинающиеся на --) использовать необязательно, это лишь пометка для вас, чтобы было легче ориентироваться.

Генерация файлов с обьектами

kuniwar позволяет автогенерировать файлы с обьектами:

$ kw datagen        # Генерирует раздельные файлы в папку data/ на основе файлов из map/table/
$ kw datagen -j     # Генерирует vJASS файл с данными обьектов, что позволит доставать поля в триггерах