SetHeroCombatScript(heroname, script) heroname - скриптовое имя героя, script - файл xdb с указанием на файл lua. Остаётся только зациклить её с условием или поставить на триггер PLAYER_ADD_HERO_TRIGGER.
А как быть с привязкой баттлскрипта к герою? Дело в том, что мне хотелось бы нанимать такого героя, скажем, в таверне, но в этом случае он появляется на карте без привязанного скрипта и теряет свои функции.
Прописать Вашу функцию в общем комбат-скрипте (в виде мода), с проверкой на имя героя. Думаю, так. --- А, ну вариант РедХевена проще, пожалуй.
А как быть с привязкой баттлскрипта к герою? Дело в том, что мне хотелось бы нанимать такого героя, скажем, в таверне, но в этом случае он появляется на карте без привязанного скрипта и теряет свои функции. Есть ли функция, чтобы, если на карте появился такой герой, автоматически привязывать к нему баттлскрипт? Или есть другой путь?
SetHeroCombatScript(heroname, script)
- это не самый лучший вариант. Скрипт будет работать только если герой находится под управлением ИИ + к этому будет сбрасываться при потере этого героя.
Уже описывал в соседней теме :
делается путем добавления нескольких строк скрипта в файл 'combat-common.lua' - файл запускается игрой при старте любого боя.
Если надо могу расписать подробнее. Но как всегда лучший вариант - это повскрывать чужие карты, с использованием боевых скриптов.
- это не самый лучший вариант. Скрипт будет работать только если герой находится под управлением ИИ + к этому будет сбрасываться при потере этого героя.
Да, будет сбрасываться, но это можно исправить с помощью цикла или триггера, а функция нормально работает и с героями игрока-человека.
Да, будет сбрасываться, но это можно исправить с помощью цикла или триггера, а функция нормально работает и с героями игрока-человека.
Косяк в мануале или гугл неверно переводит?
Эта функция позволяет сказать, какой сценарий будет выполняться при борьбе с этим героем.Скрипт работает только если герой находится под контролем AI игроков, и никаких других сценариев установлен на месте, гдебоевые происходит (город, гарнизон и т.д.).Сценарий сбрасывается автоматически, когда игрок теряет как-то этого героя.
В мануале много чего написано, но далеко не всё из этого правда. Хотя, может быть, что патчи этот косяк исправили, а руководство так и осталось, каким было.
спасибо за ответы, а я нашел интереснейшую старую-добрую карту "беженец" и немного заигрался =) ---
а) SetHeroCombatScript(heroname, script) --- т.е вешает на вашего героя комбат триггер до конца его жизни? Просто у меня герой с комбат триггером является основным, т.е при его смерти все-равно будет loooooose, так что если повесить 1 раз в начале игры, это то, что мне нужно. б) Что касается 'combat-common.lua' , я так и не нашел в той теме пояснений. Что именно считается, как "несколько строк" ? Хотелось бы по-подробнее, если можно.
SetHeroCombatScript('Alaric', CombatScript.lua) --- не пашет. пишет ошибку value was nill. В мануле надо было писать .lua ,но я сначала .xdb тоже писал, все-равно.
SetHeroCombatScript('Alaric', 'CombatScript.lua') --- script doesnt exists как-то так. Аналогично с окончанием .xdb Может быть, надо путь по-длиннее указывать?
Что касается 'combat-common.lua' , я так и не нашел в той теме пояснений. Что именно считается, как "несколько строк" ? Хотелось бы по-подробнее, если можно.
1.В основном файле 'MapScript.lua' прописываем строки. (введем переменную 'vasya')
vasya = "Скриптовое имя героя";
SetGameVar("vasya", vasya);
2.Создадим новый lua файл в архиве карты в папке 'scripts' . Пусть будет 'battle.lua' 3.Копируем файл 'combat-common.lua' в архив с картой и дописываем несколько строк.
sleep(1);
vasya = GetGameVar("vasya");
if GetHeroName(GetAttackerHero()) == vasya then
doFile("/scripts/battle.lua");
print("Вася вступил в бой!");
else if GetHeroName(GetDefenderHero()) == vasya then
doFile("/scripts/battle.lua");
print("Вася вступил в бой!");
end;
end;
4.открываем созданный файл 'battle.lua' и пишем следующее:
vasya = GetGameVar("vasya");
if GetHeroName(GetAttackerHero()) == vasya then
human = ATTACKER;
comp = DEFENDER;
human_hero = GetAttackerHero();
print("игрок - атакующий");
else human = DEFENDER;
comp = ATTACKER;
human_hero = GetDefenderHero();
print("игрок - обороняющийся");
end;
Переменные 'human','comp','human_hero','comp_hero' введены для удобства - они потребуются практически во всех функциях боевого скрипта, независимо от того, игрок нападает или обороняется. Также для удобства print-ы для вывода инфы в консоль. Осталось лишь добавить доп условия и их следствия в функции Prepare() или Start() - тут уже фантазия автора карт :)
Ps: Из пункта 3 видно, что боевой скрипт не будет запускатся, если герой 'vasya' в нем не учавствует.
Pss: Такой подход является более универсальным, в отличие от SetHeroCombatScript, в котором потерей героя может считаться и его сбегание с поля боя с последующим выкупом его в таверне.