IchGVijiВсем доброго дня!
С помощью руководства решил я попробовать сделать боевой скрипт.
Возникло пару проблем по нему
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 do
print("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) соответственно. Из-за переопределенных констант, эти функции не могут отработать корректно, что и провоцирует ошибку. Остальной скрипт просто не отрабатывает из-за этих ошибок. Соответственно, решение простое - использовать другие названия для твоих констант имен героев.