Bool RemoveHeroWarMachine( sHeroName, nWarMachineID )

 

Функции выдают/проверяют наличие/удаляют машину nWarMachineID у героя с именем sHeroName. Соотв. константы для nWarMachineID прописаны в /scripts/common.lua и бывают такими:

       WAR_MACHINE_BALLISTA = 1

       WAR_MACHINE_CATAPULT = 2

       WAR_MACHINE_FIRST_AID_TENT = 3

       WAR_MACHINE_AMMO_CART = 4

Попытка удалить несуществующую машину к ошибке не приводит. Удалить катапульту в любом случае не удастся. В случае успеха функция возвращает true, иначе – nil.

void StartCombat(sHeroName, sEnemyHeroName, nEnemyIDCount, nCreatureID1, nCount1, nCreatureID2, nCount2,..., spScriptXDB, sFinishProc, spAdventureFlybySceneXDB = nil)

 

Одна из трех возможностей инициировать переход на тактическую карту непосредственно из скрипта стратегического режима. О параметрах подробнее:

sHeroName – атакующий герой.

sEnemyHeroName – защищающийся герой. Может быть nil в случае атаки нейтралов без героя.

nEnemyIDCount – количество стеков в армии защищающегося. Должно быть больше нуля.

Далее перечисляются nEnemyIDCount пар вида

nCreatureID – тип существа и nCount – количество существ в стеке.

spScriptXDB – путь к XDB файлу тактического скрипта, либо nil, если дело происходит «на автомате».

sFinishProc – имя функции, которой будет передано управлении после окончания боя (с уведомлением о результате). Обращаю внимание, что это именно строка, а не параметр типа функция. Данный callback имеет следующий прототип:

void combatDone(sHeroName, bWin)

где sHeroName – имя атакующего героя, а bWin – статус сражения относительно атакующего (nil – поражение, иначе – победа).

spAdventureFlybySceneXDB – путь к xdb, определяющему арену, на которой будет происходить сражение. Если nil, то будет взята арена, тип которой соответствует типу местности, на которой находится атакующий герой на стратегической карте.

В официальном руководстве по скриптам утверждается, что у функции есть еще один параметр – allowQuickCombat, при выставлении которого в true битва будет происходить в режиме QuickCombat (если настройки игры это позволяют). Насколько я понимаю, это является ошибкой, такого параметра нет.

Void SetHeroCombatScript(sHeroName, spScriptXDB)

 

Функция выставляет герою с именем sHeroName скрипт, который будет работать в последующих тактических боях. Если происходит эпическая битва между двумя героями, оба из которых имеют установленный скрипт, то работает скрипт атакующего. В официальном руководстве по скрипту сказано, что навешенный скрипт будет работать только для героя под управлением АИ – это не так.

Void ResetHeroCombatScript(sHeroName)

 

Функция сбрасывает навешенный ранее на героя скрипт. Если ничего навешено не было, то ошибки не происходит.

void SiegeTown(sHeroName, spAdvMapTownXDB, spAdventureFlybySceneXDB = nil)

 

Собственно, стартует осада города, путь к xdb с описанием которого задан во втором параметре, на арене, заданной третьим параметром. Если последний параметр nil, то берется арена по умолчанию.

Работа с городами.

 

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

NLevel GetTownBuildingLevel(sTownName, nBuildingID)

NLevel GetTownBuildingLimitLevel(sTownName, nBuildingID)

NLevel GetTownBuildingMaxLevel(sTownName, nBuildingID)

 

Функции позволяют узнать уровень/лимит на развитие/максимальный уровень здания nBuildingID в городе с именем sTownName. Соотв. константы TOWN_BUILDING_* для nBuildingID см. в /scripts/advmap-startup.lua. Сюда писать не буду ввиду большого объема.

Уровень 0 означает, что соответствующее здание отсутствует.

Void SetTownBuildingLimitLevel(sTownName, nBuildingID, nLevel)

 

Функция позволяет выставить лимит на уровень развития здания nBuildingID в городе с именем sTownName. При попытке выставить уровень больше максимально возможного вызов функции приводит к ошибке. Уровень 0 означает запрет на строительство здания.

Void TransformTown(sTownName, nTownTypeID)

 

Трансформирует тип города с именем sTownName. Соотв. константы для nTownTypeID прописаны в /scripts/advmap-startup.lua и бывают такими:

     TOWN_HEAVEN = 0

   TOWN_PRESERVE = 1

   TOWN_ACADEMY = 2

   TOWN_DUNGEON = 3

   TOWN_NECROMANCY = 4

   TOWN_INFERNO = 5

Если в момент трансформации в городе находится герой, он погибнет.

Void RazeTown(sTownName)

 

Разрушает город с именем sTownName. Только в том случае, если при дизайне карты город помечен как «разрушаемый» (т.е. поле razed в его свойствах корректно заполнено). Иначе вызов данной функции приводит к ошибке. Фактически город удаляется с карты и заменяется на статический объект, который занимает столько же тайлов, сколько и оригинал.

Работа с объектами.

 

Под объектом понимается практически все, что угодно – это здания, города, монстры, герои и т.п. Правда, некоторые функции работают только с определенными видами объектов (например, про работу с героями рассказано выше). Если объект, имя которого передано в функцию, отсутствует, то вызов функции приводит к ошибке.

NX, nY, nFloorID GetObjectPosition(sObjectName)

 

Функция возвращает позицию объекта. Функция имеет алиас с именем GetObjectPos. На основе данной функции в файле /scripts/advmap-startup.lua реализован примитив более высокого уровня – bool IsInDungeon(sObjectName).

В качестве объекта может выступать, например, герой.

void SetObjectPosition(sObjectName, nX, nY, nFloorID = -1)

 

Функция устанавливает позицию объекта. Объект должен быть перемещаемым, что определяется при дизайне этого самого объекта. Например, города перемещать нельзя.

В качестве объекта может выступать, например, герой. Если не указан этаж, то будет использован текущий, т.е. тот, на котором объект уже находится. Попытка переместить объект на уже занятый тайл приведет к ошибке.

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

Void RemoveObject(sObjectName)

 

Удаляет объект с карты. Объект должен быть перемещаемым и присутствовать на карте. Т.е., например, город удалить нельзя.

В качестве объекта может выступать, например, герой.


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



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