Я к тому, что этот СетОбжектив реализовывать как отдельную функцию, или можно и в эту пихнуть?
Сообщения от Скрипты
Вопрос такой. Хочу сделать, чтобы герой команды 1 (ИИ) патрулировал определенный путь. Я знаю, что подобное было на 1ой карте 3ей кампании (где Маркел должен не попадаться на патрули магов), но я посмотрел скрипты те и это какой то кошмар для меня, как новичка в скриптинге. Таков вопрос: можно ли как то упростить скрипт патруля магов из этой миссии? И там есть так же строка с радиусом обнаружения, при котором, видимо если маркел будет в радиусе, враж. герой будет его преследовать. Но в моей карте есть проблема здесь. Допустим я всё выставлю как надо, но герой патрульный из команды 1 будет проходить рядом с городом команды 2 (враждебной). Он захватит же захватит город и скрипт сломается? Заранее спасибо за ответы.
такой вопрос. у меня есть несколько одинаковых обьектов, с привязанными к ним триггерами. я написал функцию, которая может работать с любым из них и принимает номер обьекта. вызываю ее триггером касания типа: Trigger(OBJECT_TOUCH_TRIGGER, 'имя обьекта', 'функция(номер обьекта)'). Это работает, но при каждом срабатывании пишет в консоль ошибку: attempts to call a nil value. стоит ли игнорировать эту ошибку, ведь, по факту, все работает как задумывалось или она таки на что-то влияет?
UPD. Немного поэксперементировал, получилось так. Если написать что-то вроде:
то ошибки в консоли не будет. Правда, не до конца понимаю как это работает и стоит ли так делать...
UPD. Немного поэксперементировал, получилось так. Если написать что-то вроде:
str = 'функция(параметр)'
...
Trigger(OBJECT_TOUCH_TRIGGER, 'имя обьекта', 'parse(str)')
то ошибки в консоли не будет. Правда, не до конца понимаю как это работает и стоит ли так делать...
Вот фрагмент из моей карты:
Trigger(OBJECT_TOUCH_TRIGGER, "monum1", "monumtext");
Trigger(OBJECT_TOUCH_TRIGGER, "monum2", "monumtext");
Trigger(OBJECT_TOUCH_TRIGGER, "monum3", "monumtext");
Trigger(OBJECT_TOUCH_TRIGGER, "monum4", "monumtext");
function monumtext (hero, obj)
if obj == 'monum1' then
MessageBox(mpath.. 'monum1.txt');
elseif obj == 'monum2' then
MessageBox(mpath.. 'monum2.txt');
elseif obj == 'monum3' then
MessageBox(mpath.. 'monum3.txt');
elseif obj == 'monum4' then
MessageBox(mpath.. 'monum4.txt');
end;
end;Триггер object_touch в любом случае передает 2 параметра в функцию (неважно используете вы их или нет): имя притронувшегося героя и имя объекта к которому притронулись. Т.е. надо писать Trigger(OBJECT_TOUCH_TRIGGER, 'имя объекта', 'функция'), без каких-либо параметров в скобках
спасибо, лучше не буду придумывать костылей, а то мало ли что...
Такой вопрос по триггерам. У меня есть 2 региона, которые активируют разные события. Вот герой встал в 1 регион и сделалась штука, но как теперь удалить возможность активации события второго региона? Костыль типа "заблокировать второй регион для игрока" не может быть реализован.
Обнулить триггер второго региона. Trigger(ТИП_ТРИГГЕРА, 'имя региона', nil)
Такой вопрос. Делаю задание, где нужно уничтожить опред. героя(Орсона). Но хочу предоставить игроку выбор, поэтому идёт развилка, а значит 2 функции, "принятия" задания или его "отказа". Отказ работает, а вот выполнение не очень. Может я где ошибся? Посмотрите, пжалста. А, да. Консоль вроде не матерится ни на что. Просто ничего не происходит. Хотя триггер верный вроде стоит.
function SuppGlutt ()
SetObjectiveState("Qnecro", OBJECTIVE_COMPLETED);
RemoveObject("Isher");
SetObjectOwner("gorodZemlya", 1);
ChangeHeroStat("RedHeavenHero04", STAT_EXPERIENCE, 15000);
ChangeHeroStat("RedHeavenHero04", STAT_MORALE, 1);
ChangeHeroStat("RedHeavenHero04", STAT_LUCK, 1);
Trigger (PLAYER_REMOVE_HERO_TRIGGER, "Straker", nil);
end;
Trigger (PLAYER_REMOVE_HERO_TRIGGER, "Straker", "SuppGlutt");
REMOVE_HERO_TRIGGER немного по другому работает.
т.е, должно быть как-то так:
Trigger(PLAYER_REMOVE_HERO_TRIGGER, номер игрока, 'функция, в которую будут переданы имена потерянного героя и его победителя(или nil)')т.е, должно быть как-то так:
function SuppGlutt (looser, winner)
if(looser == "Straker") then
SetObjectiveState("Qnecro", OBJECTIVE_COMPLETED);
RemoveObject("Isher");
SetObjectOwner("gorodZemlya", 1);
ChangeHeroStat("RedHeavenHero04", STAT_EXPERIENCE, 15000);
ChangeHeroStat("RedHeavenHero04", STAT_MORALE, 1);
ChangeHeroStat("RedHeavenHero04", STAT_LUCK, 1);
Trigger (PLAYER_REMOVE_HERO_TRIGGER, номер, nil);
end;
end;
Trigger (PLAYER_REMOVE_HERO_TRIGGER, номер игрока, которому принадлежит нужный герой, "SuppGlutt")
Вопрос про треды. Я про них мало, что знаю, но здесь они мне видимо нужны, потому прошу помощи.
Существуют несколько особенных нейтралов. После того, как они будут уничтожены, должен срабатывать триггер(наверное), мол приходит резервный герой.
Как это осуществляется?
И второй вопрос не по тредам: может ли один триггер активировать несколько функций? Как это написать?
Например, будет ли работать такой триггер - Trigger(REGION_ENTER_AND_STOP_TRIGGER , "dialog", "Dialog1", "функция2", "функция3", "функция228"); ?
Существуют несколько особенных нейтралов. После того, как они будут уничтожены, должен срабатывать триггер(наверное), мол приходит резервный герой.
Как это осуществляется?
И второй вопрос не по тредам: может ли один триггер активировать несколько функций? Как это написать?
Например, будет ли работать такой триггер - Trigger(REGION_ENTER_AND_STOP_TRIGGER , "dialog", "Dialog1", "функция2", "функция3", "функция228"); ?
Вопрос про треды. Я про них мало, что знаю, но здесь они мне видимо нужны, потому прошу помощи.
Существуют несколько особенных нейтралов. После того, как они будут уничтожены, должен срабатывать триггер(наверное), мол приходит резервный герой.
Как это осуществляется?
Примерно так:
function fun()
while (1) do
sleep(2);
if (Exists('neutral1') == nil) and (Exists('neutral2') == nil) then
fun2();
break
end;
end;
end;
startThread(fun);Функция fun в цикле проверяет содержатся ли объекты neutral 1 и 2, как только они исчезают выполняется функция fun2(). startThread можно написать сразу после загрузки карты, или когда вам это будет нужно (например, при получении квеста на нейтралов).
И второй вопрос не по тредам: может ли один триггер активировать несколько функций? Как это написать?
Например, будет ли работать такой триггер - Trigger(REGION_ENTER_AND_STOP_TRIGGER , "dialog", "Dialog1", "функция2", "функция3", "функция228"); ?
Быть может как-то и можно, я бы запустил их по цепочке:
Trigger(REGION_ENTER_AND_STOP_TRIGGER , "dialog", "Dialog1")
function Dialog1 ()
...
функция2();
end;
function функция2 ()
...
функция3();
end;
и т.д.
Быть может как-то и можно, я бы запустил их по цепочке:
Trigger(REGION_ENTER_AND_STOP_TRIGGER , "dialog", "Dialog1")
function Dialog1 ()
функция1();
функция2();
функция3();
end
если кто-нибудь знает можете подсказать как в боевой скрипт перенести уровень героя:confused: :
function start()
if уровень героя нападающего >=1
каст одного закла
if уровень героя нападающего >=10
каст одного закла
if уровень героя нападающего >=20
каст одного закла
end:rolleyes:
function start()
if уровень героя нападающего >=1
каст одного закла
if уровень героя нападающего >=10
каст одного закла
if уровень героя нападающего >=20
каст одного закла
end:rolleyes:
если кто-нибудь знает можете подсказать как в боевой скрипт перенести уровень героя:confused: :
function start()
if уровень героя нападающего >=1
каст одного закла
if уровень героя нападающего >=10
каст одного закла
if уровень героя нападающего >=20
каст одного закла
end:rolleyes:
через глобальную переменную:
x = GetHeroLevel('имя нужно героя')
SetGameVar('Level', x)в комбат скрипте получить ее значение:
function Start()
HeroLevel = GetGameVar('Level') + 0
if(HeroLevel >= 1) then
... и т.д
Вот написал функцию по совету:
Но после уничтожения всех чертей ничего не происходит. Подскажите, где ошибка?
Добавлено через 23 минуты
И еще. Возможно ли создать скрытую взаимосвязь между квестами? Попробую придумать простой пример:
Квест - уничтожить враж. героя
Вторичный квест - уничтожить нейтрала.
Когда подходишь к враж. герою, то проигрывается диалог №1, но если ты уничтожил нейтралов, то будет диалог №2.
Так же если просто сразиться с враж. героем, то в его армии будет 5 фениксов.
А если победил нейтралов, то будет 250 волков и надет какой-нибудь артефакт.
Возможно ли реализовать подобные штуки?
function cherti ()
while (1) do
sleep(2);
if (Exists('chert1') == nil) and (Exists('chert2') == nil) and (Exists('chert3') == nil) and (Exists('chert4') == nil) and (Exists('chert5') == nil) and (Exists('chert6') == nil) and (Exists('chert7') == nil) and (Exists('chert8') == nil) then
Quelaag ();
break
end;
end;
end;
startThread("cherti");
function Quelaag ()
DeployReserveHero( "Oddrema", 60, 36, GROUND );
end;Но после уничтожения всех чертей ничего не происходит. Подскажите, где ошибка?
Добавлено через 23 минуты
И еще. Возможно ли создать скрытую взаимосвязь между квестами? Попробую придумать простой пример:
Квест - уничтожить враж. героя
Вторичный квест - уничтожить нейтрала.
Когда подходишь к враж. герою, то проигрывается диалог №1, но если ты уничтожил нейтралов, то будет диалог №2.
Так же если просто сразиться с враж. героем, то в его армии будет 5 фениксов.
А если победил нейтралов, то будет 250 волков и надет какой-нибудь артефакт.
Возможно ли реализовать подобные штуки?
Статистика
Приветствуем новейшего участника:
recijeb