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-common.lua реализован примитив более высокого уровня – bool IsInDungeon( sObjectName ).

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

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

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

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

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

Void RemoveObject( sObjectName )

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

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

Bool IsObjectExists( sObjectName )

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

Bool IsObjectEnabled( sObjectName )

Возвращает, находится ли объект с именем sObjectName в состоянии enabled. Если да, то объект будет взаимодействовать с героем игрока обычным образом (т.е. для города – зарядится интерфейс города, для героя противника – стартует битва и т.п.) В противном случае «атоматом» ничего происходить не будет. Это удобно, когда на объект навешен триггер OBJECT_TOUCH_TRIGGER, который должен среагировать на «тырканье» нестандартным образом.

Void SetObjectEnabled( sObjectName, bEnable )

Выставляет или снимает с объекта sObjectName состояние enabled.

TsObjects GetObjectNamesByType( sObjectTypeSubstr )

Выдает массив имен объектов на карте в соответствии с подстройкой sObjectNameSubstr, которая встречается в наименовании его типа. Полностью список соответствующих строк BUILDING_*, TOWN_*, CREATURE_* и HERO_CLASS_* можно найти в файле /types.xml, ветка /Base/Tables. Обращаю внимание, что 1) параметр – именно строка и к константам в /scripts/common.lua имеет весьма опосредованное отношение 2) полного совпадения имени не требуется, достаточно совпадения куска. Например, вызовы

GetObjectNamesByType(“SAWMILL”) и GetObjectNamesByType(“BUILDING_SAWMILL”) вернут один и тот же массив.

Наши рекомендации