Работа с объективами (или с обжективами – кому как).
nState GetObjectiveState( sObjectiveName, nPlayerID = PLAYER_1 )
Возвращает статус объективы sObjectiveName. Соотв. константы прописаны в /scripts/advmap-startup.lua и бывают такими:
OBJECTIVE_SCENARIO_INFO = 0
OBJECTIVE_UNKNOWN = 1
OBJECTIVE_ACTIVE = 2
OBJECTIVE_COMPLETED = 3
OBJECTIVE_FAILED = 4
void SetObjectiveState( sObjectiveName, nState, nPlayerID = PLAYER_1 )
Устанавливает статус объективы с именем sObjectiveName. Следует понимать, что не у всех объектив статус можно установить вручную – можно или нельзя, определяется дизайном карты. Если таки нельзя, то вызов ни к чему, кроме выдачи ошибки в консоль, не приведет.
Кроме того, то, какой статус можно установить объективе зависит от текущего статуса объективы. Матрица переходов следующая:
OBJECTIVE_SCENARIO_INFO -> none
OBJECTIVE_UNKNOWN -> OBJECTIVE_ACTIVE, OBJECTIVE_FAILED
OBJECTIVE_ACTIVE -> OBJECTIVE_COMPLETED, OBJECTIVE_FAILED
OBJECTIVE_COMPLETED -> OBJECTIVE_ACTIVE, OBJECTIVE_FAILED
OBJECTIVE_FAILED -> none
Если объективе выставляется статус OBJECTIVE_ACTIVE она автоматически становится видимой игроку (см. IsObjectiveVisible/SetObjectiveVisible)
nProgress GetObjectiveProgress( sObjectiveName, nPlayerID = PLAYER_1 )
void SetObjectiveProgress( sObjectiveName, nProgress, nPlayerID = PLAYER_1 )
Возвращает и устанавливает степень прогресса в выполнении объективы sObjectiveName в случае, если дизайн это позволяет. Типичный пример – директива «наберите армию из 1000 лучников».
bool IsObjectiveVisible( sObjectiveName, nPlayerID = PLAYER_1 )
void SetObjectiveVisible( sObjectiveName, bVisible, nPlayerID = PLAYER_1 )
Функции возвращают и устанавливают видимость на интерфейсе объективы с именем sObjectiveName.
Работа с ключами.
Bool HasBorderguardKey( nPlayerID, nKeyID )
Void GiveBorderguardKey( nPlayerID, nKeyID )
Функции проверяют наличие и выдают игроку ключ должного цвета. Соотв. константы для nKeyID прописаны в /scripts/advmap-startup.lua и бывают такими:
RED_KEY = 1
BLUE_KEY = 2
GREEN_KEY = 3
YELLOW_KEY = 4
ORANGE_KEY = 5
TEAL_KEY = 6
PURPLE_KEY = 7
TAN_KEY = 8
Работа с регионами.
void SetRegionBlocked( sRegionName, bEnable, nPlayerID = -1 )
Блокирует/разблокирует регион sRegionName для игрока nPlayerID. Если последний параметр не указан, то данное действие производится для всех игроков.
Bool IsRegionBlocked( sRegionName, nPlayerID )
Возвращает, заблокирован ли регион sRegionName для игрока nPlayerID.
TsObjects GetObjectsInRegion( sRegionName, nObjectsTypeID )
Возвращает массив имен объектов в регионе с именем sRegionName. На настоящий момент второй параметр может быть только OBJECT_HERO = 0, а соотв. массив будет содержать только информацию о героях. На основе данной функции в файле /scripts/advmap-common.lua реализован примитив более высокого уровня –
bool IsPlayerHeroesInRegion( nPlayerID, sRegionName )
NX, nY, nFloorID RegionToPoint( sRegionName )
Возвращает координаты региона в том случае, если регион состоит из одного тайла. Если нет – ничего полезного не вернет, а ошибку таки вызовет.
Bool IsObjectInRegion( sHeroName, sRegionName )
Проверяет, находится ли объект sHeroName внутри региона sRegionName. На настоящий момент функция работает только для объектов одного типа – для героев.
Void OpenRegionFog( nPlayerID, sRegionName )
Открывает для игрока nPlayerID туман войны, скрывающий регион sRegionName.
Работа с AI.
Для не AI игрока перечисленные ниже функции смысла не имеют, и при вызове приводят к ошибке.
Void SetAIPlayerAttractor( sObjectName, nPlayerID, nPriority )
Устанавливает для игрока nPlayerID «точку притяжения» на объекте с именем sObjectName. Герои игрока будут бегать вокруг объекта, периодически к нему возвращаясь и пытаясь им овладеть. (Да-да, Вы правильно подумали, в качестве имени объекта в данной функции может выступать и имя героя). Поведение игрока будет тем агрессивнее, чем больше nPriority. Последний может принимать значения от -1 до 2. Значение nPriority = 0 является выделенным, и используется для того, чтобы убрать данную логику. В официальном руководстве по скрипту имеется предупреждение, что данная функция может некорректно работать для подвижных объектов.