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



Void SetAIHeroAttractor(sObjectName, sHeroName, nPriority)

 

Функция аналогичная SetAIPlayerAttractor, но работает только для одного героя с именем sHeroName.

Void EnableHeroAI(sHeroName, bEnable)

 

Включает/выключает AI героя.

void MoveHero(sHeroName, nX, nY, nFloorID = -1)  

 

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

bool CanMoveHero(sHeroName, nX, nY, nFloorID = -1)

 

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

Данная функция не работает с героями, находящимися внутри города. Если не указан этаж, то будет использован тот, на котором герой находится.

Void EnableAIHeroHiring(nPlayerID, sTownName, bEnable)

 

Разрешает или запрещает AI игроку nPlayerID найм героев в городе sTownName. По умолчанию найм разрешен.

Работа с героями.

 

Герои – один из видов объектов. Ввиду большого количества функций, которые работают именно с ними, я рассмотрю их в отдельном разделе.

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

NCount GetHeroStats(HeroName, nStatID)

Void ChangeHeroStat(sHeroName, nStatID, nDelta)

 

Получение/изменение того или иного стата героя. Соотв. константы для nStatID прописаны в /scripts/advmap-startup.lua и бывают такими:

STAT_EXPERIENCE = 0

STAT_ATTACK = 1

STAT_DEFENCE = 2

STAT_SPELL_POWER = 3

STAT_KNOWLEDGE = 4

STAT_LUCK = 5

STAT_MORALE = 6

STAT_MOVE_POINTS = 7

STAT_MANA_POINTS = 8

Обращаю внимание, что функция ChangeHeroStat не устанавливает, а изменяет стат. Т.е. третьим параметром передается не новое значение стата, а разница со старым (которая может быть и отрицательной). В отличие от прочих, STAT_EXPERIENCE не может быть уменьшен. STAT_MOVE_POINTS и STAT_MANA_POINTS представляют собой текущие значения соответствующих параметров, выставить их выше максимальных – нельзя.

Кроме указанных имеется, по крайней мере, еще один стат с ID = 9. Установить его нельзя, можно только получить. Что он из себя представляет, сказать затрудняюсь.

На основе функции ChangeHeroStat в файле /scripts/advmap-common.lua реализован примитив более высокого уровня – void GiveExp(sHeroName, nExp).

Bool HasHeroSkill(sHeroName, nSkillID)

Получение того или иного скилла/перка/фита героя. Соотв. константы SKILL_*, PERK_* и *_FEAT_* для nSkillID см. в /scripts/advmap-startup.lua. Сюда писать не буду ввиду большого объема. Как можно увидеть, способа получить уровень мастерства в скилле данная функция не предоставляет.

Bool GiveHeroSkill(sHeroName, nSkillID)

 

Ввыдача того или иного скилла/перка/фита герою. Соотв. константы SKILL_*, PERK_* и *_FEAT_* для nSkillID см. в /scripts/advmap-startup.lua. Сюда писать не буду ввиду большого объема. В случае удачной выдачи скилла GiveHeroSkill вернет true. В противном случае (например, герой уже имеет уровень мастерства expert в данном скилле) функция вернет nil.

Void KnowHeroSpell(sHeroName, nSpellID)

Void TeachHeroSpell(sHeroName, nSpellID)

 

Получение/выдача того или иного заклинания герою. Соотв. константы SPELL_* для nSpellID см. в /scripts/common.lua. Сюда писать не буду ввиду большого объема. Кстати, по крайней мере четыре заклинания в lua файл таки не попало – см. содержимое /types.xml.


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



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