Форум HeroesWorld-а - Показать сообщение отдельно - Скрипты
Тема: Скрипты
Показать сообщение отдельно
#3472
Старый 25.08.2021, 05:55
  #3472
^
Марта
📖
Регистрация: 31.01.2020
Сообщения: 80
Регистрация: 31.01.2020
Сообщения: 80
По умолчанию
Re: Скрипты

Огромное спасибо. Я передрала скрипты с присланной моей же карты, и ошибка стала как вы написали, - сейчас попробую добавить цель для заклинания.

Добавлено через 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й?

И дополнительный вопрос, - как это вы все вставляете сюда такие разноцветные скрипты?
В моей однотонной крокозябре хрен разберёшься, надо бы мне её по-другому оформлять.
Марта вне форума
Ответить с цитированием