Скрипты - Страница 179 - Форум HeroesWorld-а

Быстрая навигация по основным разделам форума:
Турниры
КАРТЫ
Heroes 6
Heroes 5
Heroes 4
Heroes 3
Heroes 2
Heroes 1
Might&Magic

Герои Меча и Магии 5 - Картостроительство (Редактор карт) В этом разделе можно обсуждать все что касается редактора карт для Heroes of Might and Magic V. Так же здесь обсуждаем картостроительство.

Ответ
Страница 179 из 260
 
Опции темы
#2671
Старый 03.05.2018, 15:41
  #2671
^
DarkLordax
 
Аватар для DarkLordax
📖
Регистрация: 01.06.2017
Сообщения: 70
Регистрация: 01.06.2017
Сообщения: 70
По умолчанию
Re: Скрипты

OrnsteinDragonslayerЯ к тому, что этот СетОбжектив реализовывать как отдельную функцию, или можно и в эту пихнуть?
Прям сюда пихай
__________________
Кампания в разработке:

Название не придумал

Выполнено 5%
Кампания в разработке:

Название не придумал

Выполнено 5%
DarkLordax вне форума
Ответить с цитированием
#2672
Старый 09.05.2018, 00:12
  #2672
^
OrnsteinDragonslayer
 
Аватар для OrnsteinDragonslayer
📖
Регистрация: 10.01.2016
Сообщения: 172
Регистрация: 10.01.2016
Сообщения: 172
По умолчанию
Re: Скрипты

Вопрос такой. Хочу сделать, чтобы герой команды 1 (ИИ) патрулировал определенный путь. Я знаю, что подобное было на 1ой карте 3ей кампании (где Маркел должен не попадаться на патрули магов), но я посмотрел скрипты те и это какой то кошмар для меня, как новичка в скриптинге. Таков вопрос: можно ли как то упростить скрипт патруля магов из этой миссии? И там есть так же строка с радиусом обнаружения, при котором, видимо если маркел будет в радиусе, враж. герой будет его преследовать. Но в моей карте есть проблема здесь. Допустим я всё выставлю как надо, но герой патрульный из команды 1 будет проходить рядом с городом команды 2 (враждебной). Он захватит же захватит город и скрипт сломается? Заранее спасибо за ответы.
OrnsteinDragonslayer вне форума
Ответить с цитированием
#2673
Старый 13.05.2018, 02:08
  #2673
^
Gerter
 
Аватар для Gerter
📖
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 825
pegn0ly#9113
Выставка наград
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 825
pegn0ly#9113
Выставка наград
По умолчанию
Re: Скрипты

такой вопрос. у меня есть несколько одинаковых обьектов, с привязанными к ним триггерами. я написал функцию, которая может работать с любым из них и принимает номер обьекта. вызываю ее триггером касания типа: Trigger(OBJECT_TOUCH_TRIGGER, 'имя обьекта', 'функция(номер обьекта)'). Это работает, но при каждом срабатывании пишет в консоль ошибку: attempts to call a nil value. стоит ли игнорировать эту ошибку, ведь, по факту, все работает как задумывалось или она таки на что-то влияет?


UPD. Немного поэксперементировал, получилось так. Если написать что-то вроде:
	
str = 'функция(параметр)'
...
Trigger(OBJECT_TOUCH_TRIGGER, 'имя обьекта', 'parse(str)') 


то ошибки в консоли не будет. Правда, не до конца понимаю как это работает и стоит ли так делать...
__________________
Нет войне.
Нет войне.
Gerter вне форума
Ответить с цитированием
#2674
Старый 13.05.2018, 09:38
  #2674
^
32MeTpa
 
Аватар для 32MeTpa
📖
Регистрация: 06.08.2011
Сообщения: 178
Выставка наград
Регистрация: 06.08.2011
Сообщения: 178
Выставка наград
По умолчанию
Re: Скрипты

Вот фрагмент из моей карты:
	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, 'имя объекта', 'функция'), без каких-либо параметров в скобках
32MeTpa вне форума
Ответить с цитированием
#2675
Старый 13.05.2018, 15:20
  #2675
^
Gerter
 
Аватар для Gerter
📖
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 825
pegn0ly#9113
Выставка наград
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 825
pegn0ly#9113
Выставка наград
По умолчанию
Re: Скрипты

спасибо, лучше не буду придумывать костылей, а то мало ли что...
__________________
Нет войне.
Нет войне.
Gerter вне форума
Ответить с цитированием
#2676
Старый 17.05.2018, 04:27
  #2676
^
OrnsteinDragonslayer
 
Аватар для OrnsteinDragonslayer
📖
Регистрация: 10.01.2016
Сообщения: 172
Регистрация: 10.01.2016
Сообщения: 172
По умолчанию
Re: Скрипты

Такой вопрос по триггерам. У меня есть 2 региона, которые активируют разные события. Вот герой встал в 1 регион и сделалась штука, но как теперь удалить возможность активации события второго региона? Костыль типа "заблокировать второй регион для игрока" не может быть реализован.
OrnsteinDragonslayer вне форума
Ответить с цитированием
#2677
Старый 17.05.2018, 04:42
  #2677
^
Gerter
 
Аватар для Gerter
📖
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 825
pegn0ly#9113
Выставка наград
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 825
pegn0ly#9113
Выставка наград
По умолчанию
Re: Скрипты

Обнулить триггер второго региона. Trigger(ТИП_ТРИГГЕРА, 'имя региона', nil)
__________________
Нет войне.
Нет войне.
Gerter вне форума
Ответить с цитированием
#2678
Старый 20.05.2018, 17:27
  #2678
^
OrnsteinDragonslayer
 
Аватар для OrnsteinDragonslayer
📖
Регистрация: 10.01.2016
Сообщения: 172
Регистрация: 10.01.2016
Сообщения: 172
По умолчанию
Re: Скрипты

Такой вопрос. Делаю задание, где нужно уничтожить опред. героя(Орсона). Но хочу предоставить игроку выбор, поэтому идёт развилка, а значит 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");
OrnsteinDragonslayer вне форума
Ответить с цитированием
#2679
Старый 20.05.2018, 17:57
  #2679
^
Gerter
 
Аватар для Gerter
📖
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 825
pegn0ly#9113
Выставка наград
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 825
pegn0ly#9113
Выставка наград
По умолчанию
Re: Скрипты

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")
__________________
Нет войне.
Нет войне.
Gerter вне форума
Ответить с цитированием
#2680
Старый 25.05.2018, 09:37
  #2680
^
OrnsteinDragonslayer
 
Аватар для OrnsteinDragonslayer
📖
Регистрация: 10.01.2016
Сообщения: 172
Регистрация: 10.01.2016
Сообщения: 172
По умолчанию
Re: Скрипты

Вопрос про треды. Я про них мало, что знаю, но здесь они мне видимо нужны, потому прошу помощи.
Существуют несколько особенных нейтралов. После того, как они будут уничтожены, должен срабатывать триггер(наверное), мол приходит резервный герой.
Как это осуществляется?
И второй вопрос не по тредам: может ли один триггер активировать несколько функций? Как это написать?
Например, будет ли работать такой триггер - Trigger(REGION_ENTER_AND_STOP_TRIGGER , "dialog", "Dialog1", "функция2", "функция3", "функция228"); ?
OrnsteinDragonslayer вне форума
Ответить с цитированием
#2681
Старый 25.05.2018, 18:42
  #2681
^
32MeTpa
 
Аватар для 32MeTpa
📖
Регистрация: 06.08.2011
Сообщения: 178
Выставка наград
Регистрация: 06.08.2011
Сообщения: 178
Выставка наград
По умолчанию
Re: Скрипты

OrnsteinDragonslayerВопрос про треды. Я про них мало, что знаю, но здесь они мне видимо нужны, потому прошу помощи.
Существуют несколько особенных нейтралов. После того, как они будут уничтожены, должен срабатывать триггер(наверное), мол приходит резервный герой.
Как это осуществляется?

Примерно так:
	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 можно написать сразу после загрузки карты, или когда вам это будет нужно (например, при получении квеста на нейтралов).

OrnsteinDragonslayerИ второй вопрос не по тредам: может ли один триггер активировать несколько функций? Как это написать?
Например, будет ли работать такой триггер - 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;

и т.д.

32MeTpa вне форума
Ответить с цитированием
#2682
Старый 25.05.2018, 19:48
  #2682
^
Jack_of_shadows
 
Аватар для Jack_of_shadows
📖
Регистрация: 08.09.2013
Сообщения: 509
Выставка наград
Регистрация: 08.09.2013
Сообщения: 509
Выставка наград
По умолчанию
Re: Скрипты

Быть может как-то и можно, я бы запустил их по цепочке:
Более традиционный подход такой:
	Trigger(REGION_ENTER_AND_STOP_TRIGGER , "dialog", "Dialog1")

function Dialog1 ()
  функция1();
  функция2();
  функция3();
end
__________________
РПГ-сценарий для HoMM5: Путь героя

ЧаВо по созданию карт для HoMM5: ЧаВо
РПГ-сценарий для HoMM5: Путь героя

ЧаВо по созданию карт для HoMM5: ЧаВо
Jack_of_shadows вне форума
Ответить с цитированием
#2683
Старый 25.05.2018, 21:11
  #2683
^
LetoX
 
Аватар для LetoX
📖
Регистрация: 16.11.2017
Сообщения: 67
Регистрация: 16.11.2017
Сообщения: 67
По умолчанию
Re: Скрипты

если кто-нибудь знает можете подсказать как в боевой скрипт перенести уровень героя :
function start()
if уровень героя нападающего >=1
каст одного закла
if уровень героя нападающего >=10
каст одного закла
if уровень героя нападающего >=20
каст одного закла
end
LetoX вне форума
Ответить с цитированием
#2684
Старый 25.05.2018, 23:59
  #2684
^
Gerter
 
Аватар для Gerter
📖
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 825
pegn0ly#9113
Выставка наград
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 825
pegn0ly#9113
Выставка наград
По умолчанию
Re: Скрипты

LetoXесли кто-нибудь знает можете подсказать как в боевой скрипт перенести уровень героя :
function start()
if уровень героя нападающего >=1
каст одного закла
if уровень героя нападающего >=10
каст одного закла
if уровень героя нападающего >=20
каст одного закла
end

через глобальную переменную:

	x = GetHeroLevel('имя нужно героя')
SetGameVar('Level', x)

в комбат скрипте получить ее значение:

	function Start()
   HeroLevel = GetGameVar('Level') + 0
   if(HeroLevel >= 1) then
   ...
и т.д
__________________
Нет войне.
Нет войне.
Gerter вне форума
Ответить с цитированием
#2685
Старый 26.05.2018, 01:14
  #2685
^
OrnsteinDragonslayer
 
Аватар для OrnsteinDragonslayer
📖
Регистрация: 10.01.2016
Сообщения: 172
Регистрация: 10.01.2016
Сообщения: 172
По умолчанию
Re: Скрипты

Вот написал функцию по совету:
	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 волков и надет какой-нибудь артефакт.
Возможно ли реализовать подобные штуки?
OrnsteinDragonslayer вне форума
Ответить с цитированием
Ответ
Страница 179 из 260


Опции темы



Часовой пояс GMT +4, время: 09:43.


vBulletin v3.5.0, Copyright ©2000-2024, Jelsoft Enterprises Ltd. (Русский)

Яндекс цитирование    Top.Mail.Ru