Перейти к содержанию

Сообщения от Скрипты

В ответ пользователю Heroist
Аватар пользователя
13 лет назад
SetHeroCombatScript(heroname, script)
heroname - скриптовое имя героя,
script - файл xdb с указанием на файл lua.
Остаётся только зациклить её с условием или поставить на триггер PLAYER_ADD_HERO_TRIGGER.
Аватар пользователя
13 лет назад
А как быть с привязкой баттлскрипта к герою? Дело в том, что мне хотелось бы нанимать такого героя, скажем, в таверне, но в этом случае он появляется на карте без привязанного скрипта и теряет свои функции.
Прописать Вашу функцию в общем комбат-скрипте (в виде мода), с проверкой на имя героя. Думаю, так.
---
А, ну вариант РедХевена проще, пожалуй.
В ответ пользователю Heroist
13 лет назад
Heroist

А как быть с привязкой баттлскрипта к герою? Дело в том, что мне хотелось бы нанимать такого героя, скажем, в таверне, но в этом случае он появляется на карте без привязанного скрипта и теряет свои функции.
Есть ли функция, чтобы, если на карте появился такой герой, автоматически привязывать к нему баттлскрипт? Или есть другой путь?
SetHeroCombatScript(heroname, script)
- это не самый лучший вариант. Скрипт будет работать только если герой находится под управлением ИИ + к этому будет сбрасываться при потере этого героя.

Уже описывал в соседней теме :
делается путем добавления нескольких строк скрипта в файл 'combat-common.lua' - файл запускается игрой при старте любого боя.
Если надо могу расписать подробнее. Но как всегда лучший вариант - это повскрывать чужие карты, с использованием боевых скриптов.
В ответ пользователю JonnyP
Аватар пользователя
13 лет назад
JonnyP
- это не самый лучший вариант. Скрипт будет работать только если герой находится под управлением ИИ + к этому будет сбрасываться при потере этого героя.
Да, будет сбрасываться, но это можно исправить с помощью цикла или триггера, а функция нормально работает и с героями игрока-человека.
В ответ пользователю RedHeavenHero
13 лет назад
RedHeavenHero
Да, будет сбрасываться, но это можно исправить с помощью цикла или триггера, а функция нормально работает и с героями игрока-человека.
Косяк в мануале или гугл неверно переводит?
Эта функция позволяет сказать, какой сценарий будет выполняться при борьбе с этим героем.Скрипт работает только если герой находится под контролем AI игроков, и никаких других сценариев установлен на месте, гдебоевые происходит (город, гарнизон и т.д.).Сценарий сбрасывается автоматически, когда игрок теряет как-то этого героя.
В ответ пользователю JonnyP
Аватар пользователя
13 лет назад
В мануале много чего написано, но далеко не всё из этого правда. Хотя, может быть, что патчи этот косяк исправили, а руководство так и осталось, каким было.
Аватар пользователя
13 лет назад
спасибо за ответы, а я нашел интереснейшую старую-добрую карту "беженец" и немного заигрался =)
---

а) SetHeroCombatScript(heroname, script) --- т.е вешает на вашего героя комбат триггер до конца его жизни? Просто у меня герой с комбат триггером является основным, т.е при его смерти все-равно будет loooooose, так что если повесить 1 раз в начале игры, это то, что мне нужно.
б) Что касается 'combat-common.lua' , я так и не нашел в той теме пояснений. Что именно считается, как "несколько строк" ? Хотелось бы по-подробнее, если можно.
В ответ пользователю Heroist
Аватар пользователя
13 лет назад
SetHeroCombatScript вешает скрипт на героя на то время, пока он есть на карте.
Аватар пользователя
13 лет назад
SetHeroCombatScript('Alaric', CombatScript.lua) --- не пашет. пишет ошибку value was nill.
В мануле надо было писать .lua ,но я сначала .xdb тоже писал, все-равно.
В ответ пользователю Heroist
Аватар пользователя
13 лет назад
Так путь к файлу должен быть в кавычках и со слешем.
'/CombatScript.xdb#xpointer(/Script)'
Аватар пользователя
13 лет назад
SetHeroCombatScript('Alaric', 'CombatScript.lua') --- script doesnt exists как-то так. Аналогично с окончанием .xdb
Может быть, надо путь по-длиннее указывать?
В ответ пользователю Heroist
13 лет назад
Heroist

Что касается '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, в котором потерей героя может считаться и его сбегание с поля боя с последующим выкупом его в таверне.
В ответ пользователю JonnyP
Аватар пользователя
13 лет назад
Heroist, я написал правильный путь к файлу сообщением выше.
JonnyP, сбегание - тоже поражение в игре => никакого последующего выкупа.
В ответ пользователю RedHeavenHero
13 лет назад
RedHeavenHero

JonnyP, сбегание - тоже поражение в игре => никакого последующего выкупа.
Ну почему ж. Похитранил героя - сбежал, докупил армию - снова напал. Не обязательно делать задание 'герой должен выжить'
Аватар пользователя
13 лет назад
RedHeavenHero - SetHeroCombatScript('Alaric', '/CombatScript.xdb#xpointer(/Script)') --- все та же ошибка.

JonnyP - сейчас попробую сделать на другой карте.

Добавлено через 2 часа 1 минуту
печально...отчего-же не работает...

Статистика

Приветствуем новейшего участника: recijeb

Сейчас на сайте 6 пользователей 1299 гостей