Огромное спасибо. Я передрала скрипты с присланной моей же карты, и ошибка стала как вы написали, - сейчас попробую добавить цель для заклинания.
Добавлено через 4 минуты
ЗЫ Да, всё, наконец-то, работает. Спасибо ещё раз)
Добавлено через 3 минуты
Хоттабыч, и вам тоже спасибо. Постараюсь внимательно изучить ваше руководство, но пока я мало в нём понимаю, - это что-то вроде магии).
Добавлено через 5 часов 31 минуту
Господа, у меня к вам новый вопрос, - как всегда, уже можно сказать.
Как мне передать информацию об уровне моего ГГ в боевой режим?
Вот в этой теме написано:
https://forum.heroesworld.ru/showthread.php?t=7934&page=247
"Можно сохранять уровень героя в общеигровую переменную с помощью SetGameVar и получать ее значение в бою, используя GetGameVar"(c)
-------------------------------------------------------------
В MapScript я пишу:
path = '/'..GetMapDataPath()
main_hero = 'Raelag'
SetHeroCombatScript('Raelag', path.."CombatScript.xdb#xpointer(/Script)");
SetGameVar("LevR", 1);
print("Установили что LevR это Сет Гейм Вар");
LevR = GetHeroLevel('Raelag');
print("LevR установлен как определитель уровня Раилага");
function ProbaF() -- Я её пишу только затем, чтобы проверить, что LevR корректно работает, - и он работает.
if LevR < 20 then
print("уровень меньше 20");
else
print("уровень 20 или больше");
end;
end;
Trigger(OBJECT_TOUCH_TRIGGER, "Proba", "ProbaF" );
-------------------------------------------------------------
В CombatScript я пишу:
function Start()
Level_R = GetGameVar("LevR") + 0;
print("Level_R установлен как определитель уровня Раилага мать его в бою и зависит от LevR через Сет и Гет Гейм Вар");
if GetHeroName(GetAttackerHero()) == 'Raelag' then
print("если ГГ агрессор");
local mana = GetUnitManaPoints(GetAttackerHero());
SetUnitManaPoints(GetAttackerHero(), 200);
repeat sleep(1) until GetUnitManaPoints(GetAttackerHero())==200;
sleep(1);
if Level_R < 20 then
print("если уровень меньше 20и то");
for i, creature in GetDefenderCreatures() do
startThread(UnitCastAimedSpell, GetAttackerHero(), 4, creature);
print("кастуем глыбу");
SetUnitManaPoints(GetAttackerHero(), mana);
print("возвращаем ману");
end;
else
print("если уровень 20 и больше");
for i, creature in GetDefenderCreatures() do
startThread(UnitCastAimedSpell, GetAttackerHero(), 5, creature);
print("кастуем шар");
SetUnitManaPoints(GetAttackerHero(), mana);
print("возвращаем ману");
end;
end;
-------------------------------------------------------------
Но Раилаг, с упорством, достойным лучшего применения, кастует не шар, а ледяную глыбу, хотя он 20го уровня!
И консоль пишет, что он меньше 20го по уровню.
То есть, CombatScript в упор не видит GetGameVar?
Или он видит, - ведь Раилаг кастует, - но почему-то не видит if Level_R < 20 then?
Как донести до боевого режима, что ГГ уже 20й?
И дополнительный вопрос, - как это вы все вставляете сюда такие разноцветные скрипты?
В моей однотонной крокозябре хрен разберёшься, надо бы мне её по-другому оформлять.