function f()
MessageBox ("/Maps/SingleMissions/FunnyFantasy/Rumour.txt");
SetObjectiveState("Q", OBJECTIVE_COMPLETED)
end
function f1()
MessageBox ("/Maps/SingleMissions/FunnyFantasy/Rumour.txt");
end
Trigger(REGION_ENTER_AND_STOP_TRIGGER, "kamilla", "f");
Сообщения от Скрипты
Прошу прощения за использование английского языка, я не очень хорошо владею русским :(.
Я хотел бы рассказать о патче, который позволяет использовать скрипты для боёв и городов в многопользовательских играх и играх с одним компьютером!
Вы можете скачать файл патча отсюда: здесь.
Чтобы применить патч к EXE-файлу, скачайте инструмент Deflaktor отсюда: здесь. На этой странице также есть руководство по использованию.
Патч работает как с оригинальным EXE-файлом ToTe, так и с EXE-файлом Quantomas.
На самом деле, я тоже начинаю интересоваться написанием скриптов. Я вижу, что сообщество добилось больших успехов! Я хотел узнать, есть ли у вас список функций скриптов для боевых действий?
Некоторые из них есть в файле "Editor Documentation\HOMM5_A2_Script_Functions.pdf", но, судя по тому, что я нашел здесь, существует гораздо больше функций, которые не задокументированы. Буду благодарен за любые советы, уроки и ссылки!
@dredknight - there is a good tutorial from Novik - https://yadi.sk/i/9xfu8mh0Acq0kg. It's in russian, but that's best tutorial for combat functions, and it has all functions that avaliable in combat mode
Добавлено через 14 минут
but maybe now it time to make a more complex tutorial about combat functions... i use lots of combat scripts in my maps so maybe i can do it, if it'll be useful.
Я быстро учусь на примерах, так что если у вас есть какие-либо работы, которые я мог бы изучить, это тоже будет полезно!
Всего хорошего!
Первое: если город эльфов захватил игрок 2, то ты должен проиграть, но игра продолжается.
function CheckAnpossal()
if GetObjectOwner ('houseElf') == 2 then
sleep(10)
SetObjectiveState('q4', OBJECTIVE_FAILED, 1);
sleep(10)
Loose()
end
end
startThread (CheckAnpossal)Второе: в течении игры отслеживается, не умер ли юнит в армии героя. Если у героя его нет - проигрыш. Работает. Но после определённого момента сюжета этот юнит должен быть убран из армии и игра должна продолжиться. Не продолжается - проигрываешь. Консоль опять же вроде не материлась.
отслеживание юнита в армии героя (работает):
function lostDragon() ---- Проверка потери дракона
while 1 do
sleep ( 10 );
if GetHeroCreatures("Ohtarig", 83) == 0 and dragon == 1 then
if SetRegionBlocked('CheckAstrid', false) then
SetObjectiveState("q5", OBJECTIVE_FAILED, 1);
sleep ( 10 );
Loose();
break
end;
end;
end;
end
startThread (lostDragon)Ключевой момент сюжета(не работает, как нужно):
function PokaAstrida()
SetRegionBlocked ('CheckAstrid', false, 1)
dragon = 0
RemoveHeroCreatures('Ohtarig', 83, 1)
StartDialogScene("/Maps/SingleMissions/ChoiseOTW1/Test/DialogScene.xdb#xpointer(/DialogScene)")
sleep(5)
StartCombat('Ohtarig', nil, 1, 41, 1, nil, nil, nil, nil)
sleep(5)
MessageBox("/Maps/SingleMissions/ChoiseOTW1/MagiPoka.txt");
sleep(5)
SetObjectiveState("q5", OBJECTIVE_FAILED);
Trigger(REGION_ENTER_AND_STOP_TRIGGER , "Corrupted", nil);
sleep(5)
RemoveObject('lich1')
RemoveObject('lich2')
RemoveObject('lich3')
end
Trigger(REGION_ENTER_AND_STOP_TRIGGER , "Corrupted", 'PokaAstrida');Подскажите пожалуйста, где я не в ту сторону подумал
Первое: если город эльфов захватил игрок 2, то ты должен проиграть, но игра продолжается.
Не продолжается - проигрываешь
Ну и хорошо бы сделать так, чтобы в функции lostDragon выходить из цикла, когда dragon==0, чтобы не было постоянных бессмысленных проверок.
While забыли, у вас однократная проверка там.
А настройки квеста q5 правильные? Может, он сам инициирует проигрыш.
Ну и хорошо бы сделать так, чтобы в функции lostDragon выходить из цикла, когда dragon==0, чтобы не было постоянных бессмысленных проверок.
Во истину, теперь когда город ЛЭ захвачен - и кв проваливается и игра проиграна.
Но другую проблему я так и не решил. Задание q5 в редакторе корректное, кайнд_мануал в условиях, не думаю, что корень проблемы там.
А как мне остановить цикл этот?
Так де немного подредактировал эту фунцкию в надежде на исправление, однако провал. На всякий случай скину еще раз, чтобы не искать.
SetRegionBlocked ('CheckAstrid', true)
function lostDragon() ---- Проверка потери дракона
while 1 do
sleep ( 10 );
if GetHeroCreatures("Ohtarig", 83) == 0 and dragon == 1 and
SetRegionBlocked('CheckAstrid', false) then
SetObjectiveState("q5", OBJECTIVE_FAILED, 1);
sleep ( 10 );
Loose();
break
end;
end;
end;
startThread (lostDragon)И, собственно момент, когда дракон должен пропасть из армии, квест по его сохранению провалится, но игра должна продолжиться.
function PokaAstrida()
SetRegionBlocked ('CheckAstrid', false, 1)
dragon = 0
RemoveHeroCreatures('Ohtarig', 83, 1)
StartDialogScene("/Maps/SingleMissions/ChoiseOTW1/Test/DialogScene.xdb#xpointer(/DialogScene)")
sleep(5)
StartCombat('Ohtarig', nil, 1, 41, 1, nil, nil, nil, nil)
sleep(5)
MessageBox("/Maps/SingleMissions/ChoiseOTW1/MagiPoka.txt");
sleep(5)
SetObjectiveState("q5", OBJECTIVE_FAILED);
Trigger(REGION_ENTER_AND_STOP_TRIGGER , "Corrupted", nil);
sleep(5)
RemoveObject('lich1')
RemoveObject('lich2')
RemoveObject('lich3')
end
Trigger(REGION_ENTER_AND_STOP_TRIGGER , "Corrupted", 'PokaAstrida');Здесь всё работает до того момента, когда ты выходишь из боя. Далее, как я полагаю, идёт проверка наличия юнита - его нет - проиграл.
and SetRegionBlocked('CheckAstrid', false)не оч понимаю суть этой проверки. здесь всегда будет 1, если регион существует
настройку задания 'q5' CanUncomplete чекни. Кажется, нужно true, чтобы не было луза при провале.and SetRegionBlocked('CheckAstrid', false)
не оч понимаю суть этой проверки. здесь всегда будет 1, если регион существует
Действительно, было false, поставил на true. Но бтв это проблему не решило. Вот чо консоль говорит в этот момент (EWA стоит если шо).

А про проверку региона - я уж отчаился и какой-то кривой костыль поставил, чтобы вместе с коэфф. менялся, но как-то бесполезно.
function MakeHeroes()
DeployReserveHero("Mardigo", 17, 161, 0);
end;
Trigger(REGION_ENTER_AND_STOP_TRIGGER, "Start", "MakeHeroes");
function podkrep()
MessageBox(Вы обнаружили отряд союзных мятежников, которые уничтожили пограничный город.);
MoveCamera(28, 148, 0, 50, 0, 0, 1, 1);
end;
Trigger(REGION_ENTER_AND_STOP_TRIGGER, "gorod", "podkrep");
Что должен сделать скрипт?
1. При входе на определенную локацию спавнит ласло
2. При входе на определенную локацию показывает месседж бокс в котором написанно о том что вы нашли подкрепление, и камера плавно летит на указанные координаты
В игре в скрипте выбивает ошибку