Skip to content

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

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

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

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

custom objects list

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

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

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

custom objects inheritance

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

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

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

Цвета

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

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

Для примера:

custom objects colors

На данный момент доступны следующие цвета:

  • 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)

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

Глобальные переменные (только vJASS)

Бывает ситуация, когда надо показывать параметры способности, которые также описываются и в коде. Например, поставили урон в коде, приходится менять и в описании. В тестовом варианте kuniwar решает эту проблему, добавляя возможность использовать вставку переменных (по аналогии с Python):

custom objects globals

Это автоматически вставит параметр из следующего кода:

scope 

  globals
    private constant integer damage = 10
  endglobals

endscope

Есть несколько особенностей:

  • Работает только со скопами vJASS
  • Происходит в момент компиляции, так что это не динамические описания
  • Может вставлять не только integer, но также и real, boolean, string.

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

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

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

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

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

Алярм!

На данный момент все кастомные .ini файлы должны содержать только один объект, парсер для множества объектов пока не доработан.

Пример .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. При компилировании утилита также предупредит вас о том, что происходит замена.

Подсказка

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