Всем доброго дня!
С помощью руководства решил я попробовать сделать боевой скрипт.
Возникло пару проблем по нему
1) функция GetDefenderCreatures() выдает ошибку: "Wrong type of argument 1 when calling function GetUnits" в независимости, где я в файле скрипта ее вызову. Пробовал аналогичную функцию, но для атакующего - GetAttackerCreatures(). Первый раз сработала, второй раз та же проблема, что и с Defender.
2) хуки DefenderHeroMove(heroName) и AttackerHeroMove(heroName) при ходе героев не запускаются - в консоли даже нет сообщения, что скрипт вошел в тело функции, и даже ошибки никакой не выдает. Один раз даже было, что хук AttackerHeroMove(heroName) просто зациклился. Стабильно работают только хуки Prepare() и Start().
Можете, пожалуйста, подсказать, как эти проблемы разрешить?Содержимое скрипта (пока просто логи, чтобы понять, что работает, что нет):
print("inside combat file");DEFENDER = GetDefenderHero();print(DEFENDER);ATTACKER = GetAttackerHero();print(ATTACKER);defenderCreatures = {0};attackerCreatures = {0};function Prepare()print("inside Prepare function");print("Prepare function has ended");end;function Start()print("inside Start function");ShowFlyingSign(GetMapDataPath().."CombatMessage.txt", DEFENDER, 200);defenderCreatures = GetDefenderCreatures();attackerCreatures = GetAttackerCreatures();print(1);for key, creature in defenderCreatures doprint("key=", key, ", creature=", creature);end;print(attackerCreatures);print("Start function has ended");end;function DefenderHeroMove(heroName)print("inside DefenderHeroMove function");ShowFlyingSign(GetMapDataPath().."CombatMessage.txt", DEFENDER, 200);print("DefenderHeroMove function has ended");end;function AttackerHeroMove(heroName)print("inside AttackerHeroMove function");ShowFlyingSign(GetMapDataPath().."CombatMessage.txt", DEFENDER, 200);print("AttackerHeroMove function has ended");end;
вероятно, проблема в этих двух строчках:
DEFENDER = GetDefenderHero();print(DEFENDER);ATTACKER = GetAttackerHero();print(ATTACKER);суть в чем - в игре определены 2 константы ATTACKER и DEFENDER, которые соответственно определяют атакующую и защищающуюся стороны боя. Этими строчками ты по сути перезаписываешь эти константы, назначая в них имена юнитов героев вместо стандартных сторон. Дальнейшие ошибки очевидны - GetAttackerCreatures() и GetDefenderCreatures() это просто обертки над функцией более низкого уровня - внутри них происходит вызов GetCreatures(ATTACKER) и GetCreatures(DEFENDER) соответственно. Из-за переопределенных констант, эти функции не могут отработать корректно, что и провоцирует ошибку. Остальной скрипт просто не отрабатывает из-за этих ошибок. Соответственно, решение простое - использовать другие названия для твоих констант имен героев.