Void commandDoSpell( sUnitName, nSpellID, nX, nY )

 

Аналог UnitCastAreaSpell.

void commandShot(sUnitName, sVictimName, bDontShowScene = false)   

 

Функция заставляет юнит с именем sUnitName выполнить выстрел по юниту sVictimName. Если последний параметр true, то соответствующая кинематографическая сценка «юнит натужно замахивается и что-то кидает» показана не будет. По своим стрелять нельзя. При отсутствии снарядов стрелять нельзя. Оба случая приводят к ошибке скрипта.

void commandMove(sUnitName, nX, nY, bCheckPath = false)

 

Функция заставляет юнит с именем sUnitName переместиться на клетку с указанными координатами. Если последний параметр true, то будет учитываться длина хода юнита. При нехватке хода юнит с места не сдвинется, а вызов функции приведет к ошибке. Если клетка недостижима (т.е. занята другим юнитом или на пути к ней есть непреодолимые препятсятвия), то в любом случае никто никуда не пойдет, а вызов функции приведет к ошибке. Функция имеет алиас с именем MoveCombatUnit.

void commandMoveAttack(sAttacker, sVictim, nX = -1, nY = -1, bCheckPath = false)

 

Функция заставляет юнит с именем sUnitName атаковать юнит sVictim в melee режиме. Если указаны положительные координаты, то юнит сначала дойдет до требуемой клетки, а потом произведет атаку с нее (да-да, несмотря на то, что melee, и между юнитами пол-поля – ударит, да еще и сдачи получит). В противном случае юнит подбежит к атакуемому вплотную. Если последний параметр true, то будет учитываться длина хода юнита. При нехватке хода юнит с места не сдвинется, а вызов функции приведет к ошибке. Если клетка недостижима (т.е. занята другим юнитом или на пути к ней есть непреодолимые препятсятвия), то в любом случае никто никуда не пойдет, а вызов функции приведет к ошибке. Функция имеет алиас с именем AttackCombatUnit.

void commandDoSpecial(sUnitName, nAbilityID, nX = -1, nY = -1, bCheckPath = false)

 

Функция заставляет юнит с именем sUnitName использовать спецспособность по клетке с указанными координатами (если они заданы – некоторые спецспособности не требуют координат). Если последний параметр true, то будет учитываться длина хода юнита. При нехватке хода юнит с места не сдвинется, а вызов функции приведет к ошибке. Если клетка недостижима (т.е. занята другим юнитом или на пути к ней есть непреодолимые препятсятвия), то в любом случае никто никуда не пойдет, а вызов функции приведет к ошибке. Константы ABILITY_* nAbilityID прописаны в /scripts/combat-startup.lua, приводить полный список не буду. На этот раз не из-за большого объема. А из-за того, что они там некорректные. Нормальные значения констант SPELL_ABILITY_* нужно смотреть в файле /types.xml. Принципиальных ограничений на использование «неродных» абилок, в принципе, нет – так, например, суккуб вполне может изображать BATTLE_DIVE. Однако, все возможные сочетания я, конечно, не проверял.

Функция имеет алиас с именем UseCombatAbility.



Void displace(sUnitName, nX, nY)

 

Функция мгновенно телепортирует юнит на требуемую клетку. Никакими эффектами процесс не сопровождается. Если клетка уже занята кем-либо или чем-либо, то вызов функции приведет к ошибке.

Функция имеет алиас с именем SetCombatPosition.

void playAnimation(sUnitName, sAnimType, nActionTypeID = ONESHOT)

 

Функция заставляет юнит с именем sUnitName проигрывать анимацию sAnimType способом nActionTypeID. Возможные sAnimType следует смотреть в xdb файле определения анимации для существ. Например, для импов это файл _(AnimSet)\Creatures\Inferno\Imp-arena.(AnimSet).xdb. Как правило, анимация типа «death» существует для всех. Остальное зависит от типа существа. Константы для nActionTypeID прописаны в /scripts/combat-startup.lua и могут быть

IDLE = 1 -- проигрывается циклически

ONESHOT_STILL = 2 -- проигрывается один раз, и последний фрейм фиксируется

ONESHOT = 3 -- проигрывается один раз, потом юнит возвращается в прежнюю позу

NON_ESSENTIAL = 5 -- не знаю, что такое.

Void combatPlayEmotion(nSideID, n1)

 

Функция заставляет юниты стороны nSideID проигрывать эмоцию. Полагаю, второй параметр должен определять ее тип, но эксперименты ничего не дали – независимо от значения параметра все ведут себя одинаково – радуются и чего-то голосят.

Void RemoveAllUnits()

 

Функция удаляет все стеки с поля боя. У обоих сторон. Ввиду чего полезность ее под вопросом.

Void setATB(sUnitName, n1)

 

Функция позволяет управлять положением юнита на ATB. Значения второго параметра большие нуля приводят к сдвигу юнита по ATB в начало шкалы, прочие – в конец. Вероятно, существует какая-то количественная интерпретация параметра, но я ее не уловил. Следует вызывать только из хуков, т.к. в противном случае можно получить рассинхронизацию ATB с действительным порядком ходов.



Информационные и прочие функции.

TsUnits GetUnits(nSideID, nType)

 

Возвращает таблицу имен юнитов типа nType для стороны nSideID. Константы nType прописаны в /scripts/combat-startup.lua и могут быть

HERO = 0

CREATURE = 1

WAR_MACHINE = 2

BUILDING = 3

С использованием данной функции в файле /scripts/combat-startup.lua реализованы примитивы более высокого уровня:

sHeroName GetHero(nSideID)

tsUnits GetCreatures(nSideID)

tsUnits GetWarMachines(nSideID)

tsUnits GetBuildings(nSideID)

sHeroName GetAttackerHero()

sHeroName GetDefenderHero()

tsUnits GetAttackerCreatures()

tsUnits GetDefenderCreatures()

tsUnits GetAttackerWarMachines()

tsUnits GetDefenderWarMachines()

tsUnits GetAttackerBuildings()

tsUnits GetDefenderBuildings()

NCreatureID GetCreatureType(sCreatureName)

 

Возвращает тип существ в стеке с именем sCreatureName.

NX, nY pos(sUnitName)

 

Возвращает координаты юнита с именем sCreatureName. Функция имеет алиас с именем GetCombatPosition.

Bool combatStarted()

 

Возвращает false до тех пор, пока не началась былинная битва. Имеет смысл использовать только вне хуков.

SHeroName GetHeroName(sUnitName)

 

Возвращает «стратегическое» имя героя sUnitName. Если передано не имя героя – вызов приведет к ошибке.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: