NSoundID Play3DSound( spSoundXDB, nX, nY, nFloorID )
Проигрывает 3D звук по указанным координатам. Результат используется исключительно в функции StopPlaySound в том случае, если звук циклический. Если нет, то возвращается -1 и вызов StopPlaySound c этим параметром приведет к ошибке.
NSoundID Play2DSound( spSoundXDB )
Проигрывает 2D звук. Результат используется исключительно в функции StopPlaySound в том случае, если звук циклический. Если нет, то возвращается -1 и вызов StopPlaySound c этим параметром приведет к ошибке.
Void StopPlaySound( nSoundID )
Останавливает проигрывание циклического звука.
Работа с освещением.
Void SetCombatAmbientLight( spAmbientLightXDB )
Меняет освещение всех тактических арен карты. Функция имеет алиас с именем SetCombatLight.
Void SetObjectFlashlight( sObjectName, sLightID )
Функция устанавливает точечную подсветку объекта. В sLightID должна идти ссылка на соответствующий ресурс, определяемый при дизайне карты (см. поле resources-> pointLights)
Выдача второго параметра в виде пустой строки приводит к удалению подсветки, алиас для данного варианта – ResetObjectFlashlight – прописан в scripts\advmap-common.lua.
void SetAmbientLight( nFloorID, sLightID, bFade = false, nTime = 1)
Функция меняет освещение выбранного этажа. Если bFade = true, то смена происходит постепенно, с fade эффектом, иначе – моментально. nTime определяет время смены (насколько я понял, имеет смысл только при bFade = true).
Функция имеет алиас с именем SetLight.
Всякие непонятки.
Number CalcAverageMonstersTier()
Возвращает некое дробное число. Полагаю, используется для отладки. При чем здесь слеза (Асхи?) – не понял. Функция имеет алиас с именем CalcAverageTier.
TnTier GetGuardsTier( sObjectName )
Возвращает массив целых чисел.
Void SetStandState( sStandName, nState )
Number GetStandState( sStandName )
Number GetStandStatesCount( sStandName )
Чем управляют данные три функции, не догадался. Т.к. понятия не имею, что это за тип объекта - “Stand”. Вычитанное в ресурсах игры определение «stand - several visual objects on same place switching by script» ясности не добавляет. Желающие могут посмотреть на 4-ю миссию 5-й кампании (там присутствует объект типа stand с именем TieruHut) и попытаться разобраться, чего же эти функции с ним делают.
Void StopTrigger()
Что за триггер стопорит данная функция, есть ли у нее параметры – «науке пока не известно».
Void PlayObjectAnimation( sObjectID, sAnimID, nAction )
Данная функция отсутствует в API, хотя официальное руководство по скриптам утверждает обратное.
Тактический режим.
При старте тактического режима игра делает следующее:
1. Загружает файл /scripts/combat-startup.lua и все прописанные в нем с помощью doFile скрипты
2. Вызывает функции createCombatAliases() и createTutorialAliases()
3. Приступает к интерпретации файла тактического скрипта. Упомянутый тактический скрипт может появиться в результате
· Использования примитивов StartCombat или SetHeroCombatScript
· Дизайна файла карты (AdvMapDesc)
· Дизайна файла определения героя (AdvMapHero)
4. Так или иначе, если файл скрипта в наличии, то интерпретатор последовательно выполняет из него строки, не являющиеся телами функций, после чего приступает к последовательному вызову хуков в зависимости от ситуации. Всего в наличии четыре хука.
Общее положение дел.
Итак, имеется две армии. Собственно различие между ними скрипт проводит по признаку атакующий/обороняющийся. Атакующая сторона всегда содержит в своем составе героя. Обороняющаяся может героя не иметь. Имена героев и стеков не имеют никакого отношения к именам использующимся на стратегической карте. Существует единственный примитив, позволяющий соотносить имена героев между стратегическим и тактическим режимом – GetHeroName.
Хуки.
Bool DoPrepare()
Вызывается на этапе расстановки стеков игроком. На данном этапе состав армии игрока не определен, соотв. функции будут показывать, что в наличии есть только собственно герой. Возвращаемое значение роли не играет. В файле /scripts/combat-startup.lua данный хук заменен на void Prepere(), пользуйтесь либо одним либо другим по собственному разумению.
Bool DoStart()
Вызвается на старте сражения непосредственно после расстановки войск обеими сторонами. Возвращаемое значение роли не играет. В файле /scripts/combat-startup.lua данный хук заменен на void Start(), пользуйтесь либо одним либо другим по собственному разумению.
Bool UnitMove(sUnitName)
Вызывается перед каждым ходом стека AI игрока. Имя стека передается в качестве параметра. Если функция возвращает true, то AI не предпринимает над стеком к/л осмысленных действий, считая, что Вы позаботились об этом в теле хука. Кстати, по поводу «true». В файле /scripts/combat-startup.lua в отличие от файла /scripts/advmap-startup.lua отсутствует определение константы true, поэтому ее нужно либо доопределить самостоятельно, либо пользовать вместо нее not nil.
В файле /scripts/combat-startup.lua данный хук заменен на целый набор функций:
bool AttackerUnitMove(sUnitName)
bool AttackerHeroMove(sUnitName)
bool AttackerCreatureMove(sUnitName)
bool AttackerWarMachineMove(sUnitName)
bool AttackerBuildingMove(sUnitName)
bool DefenderUnitMove(sUnitName)
bool DefenderHeroMove(sUnitName)
bool DefenderCreatureMove(sUnitName)
bool DefenderWarMachineMove(sUnitName)
bool DefenderBuildingMove(sUnitName)
Опять таки, пользуйтесь тем, чем Вам удобнее.
Void UnitDeath(sUnitName)
Вызывается при смерти стека существ. Имя стека передается в качестве параметра.
В файле /scripts/combat-startup.lua данный хук заменен на целый набор функций:
void AttackerUnitDeath(unitName)
void AttackerHeroDeath(sUnitName)
void AttackerCreatureDeath(sUnitName)
void AttackerWarMachineDeath(sUnitName)
void AttackerBuildingDeath(sUnitName)
void DefenderUnitDeath(sUnitName)
void DefenderHeroDeath(sUnitName)
void DefenderCreatureDeath(sUnitName)
void DefenderWarMachineDeath(sUnitName)
void DefenderBuildingDeath(sUnitName)
Общие функции контроля боя.