Работа с объективами (или с обжективами – кому как).

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 является выделенным, и используется для того, чтобы убрать данную логику. В официальном руководстве по скрипту имеется предупреждение, что данная функция может некорректно работать для подвижных объектов.


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