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

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

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

Ответ
Страница 180 из 260
 
Опции темы
#2686
Старый 26.05.2018, 10:56
  #2686
^
32MeTpa
 
Аватар для 32MeTpa
📖
Регистрация: 06.08.2011
Сообщения: 178
Выставка наград
Регистрация: 06.08.2011
Сообщения: 178
Выставка наград
По умолчанию
Re: Скрипты

OrnsteinDragonslayerВот написал функцию по совету:
Но после уничтожения всех чертей ничего не происходит. Подскажите, где ошибка?

В startThread функция пишется без кавычек:

	startThread(cherti);
Возможно из-за этого и не работает.

OrnsteinDragonslayerИ еще. Возможно ли создать скрытую взаимосвязь между квестами? Попробую придумать простой пример:
Квест - уничтожить враж. героя
Вторичный квест - уничтожить нейтрала.

Когда подходишь к враж. герою, то проигрывается диалог №1, но если ты уничтожил нейтралов, то будет диалог №2.
Так же если просто сразиться с враж. героем, то в его армии будет 5 фениксов.
А если победил нейтралов, то будет 250 волков и надет какой-нибудь артефакт.
Возможно ли реализовать подобные штуки?
Создать взаимосвязь можно, но как - зависит от ситуации. Допустим в случае волков-фениксов при выполнении доп. квеста сразу можно у вражеского героя заменить армию и добавить артефакт.
С диалогом 2 варианта. Первый при выполнении доп. квеста подменять триггер на вражеском герое, который приведет ко второму диалогу.
Второй - с помощью функции GetObjectiveState проверять факт выполнения доп. квеста и в зависимости от выполнения условия выдавать тот или иной вариант.
Но я бы порекомендовал второй вариант, с первым сам намучился в свое время.
И кстати есть еще 3-й вариант - создать переменную, равную например 0, и при выполнении доп. квеста менять ее значение на 1. И при касании к вражескому герою проверять равна ли переменная 1. Но это по сути тот же второй вариант, только лишнюю переменную занимает
32MeTpa вне форума
Ответить с цитированием
#2687
Старый 26.05.2018, 20:33
  #2687
^
Jack_of_shadows
 
Аватар для Jack_of_shadows
📖
Регистрация: 08.09.2013
Сообщения: 509
Выставка наград
Регистрация: 08.09.2013
Сообщения: 509
Выставка наград
По умолчанию
Re: Скрипты

Но после уничтожения всех чертей ничего не происходит. Подскажите, где ошибка?
Ещё вместо функции Exists используйте IsObjectExists.
__________________
РПГ-сценарий для HoMM5: Путь героя

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

ЧаВо по созданию карт для HoMM5: ЧаВо
Jack_of_shadows вне форума
Ответить с цитированием
#2688
Старый 26.05.2018, 21:59
  #2688
^
OrnsteinDragonslayer
 
Аватар для OrnsteinDragonslayer
📖
Регистрация: 10.01.2016
Сообщения: 172
Регистрация: 10.01.2016
Сообщения: 172
По умолчанию
Re: Скрипты

Jack_of_shadowsЕщё вместо функции Exists используйте IsObjectExists.

Спасибо, но всё решилось удалением кавычек в старттреде. Не знал, что там они не нужны.
OrnsteinDragonslayer вне форума
Ответить с цитированием
#2689
Старый 27.05.2018, 12:59
  #2689
^
AlekseyS
📖
Регистрация: 02.04.2018
Адрес: Минск
Сообщения: 203
Регистрация: 02.04.2018
Адрес: Минск
Сообщения: 203
По умолчанию
Re: Скрипты

Здравствуйте. Можете написать функцию на двелинги: когда игрок посещает двелинги орков(допустим), выдавалось сообщение на их уничтожение, после чего игрок получает ресурсы, но компьютер до этого может с ними нормально взаимодействовать?
AlekseyS вне форума
Ответить с цитированием
#2690
Старый 28.05.2018, 04:41
  #2690
^
OrnsteinDragonslayer
 
Аватар для OrnsteinDragonslayer
📖
Регистрация: 10.01.2016
Сообщения: 172
Регистрация: 10.01.2016
Сообщения: 172
По умолчанию
Re: Скрипты

Существует враж. герой. Нужно, чтобы после его убийства он как бы "воскрешался". И эти воскрешения будут происходить, пока ГГ не захватит все шахты. Я написал несколько функций, но что-то не работает. Не знаю, как их связать между собой. Может вы подскажите?

	function ImmortalNecr ()
         while (1) do
             sleep(2);
             if (Exists('mine1') == nil) and (Exists('mine2') == nil) and (Exists('mine3') == nil) and (Exists('mine4') == nil) and (Exists('mine5') == nil) and (Exists('mine6') == nil) then
                DefeatNecr ();
                break
             end;
         end;
end;

startThread(ImmortalNecr);

function DefeatNecr ()
         RemoveObject("Aberrar");
end;

function RessurectNecr(heroname,winner)
	if heroname=='Aberrar' then
				DeployReserveHero('Aberrar', 46, 140, GROUND);
    end;
end;
OrnsteinDragonslayer вне форума
Ответить с цитированием
#2691
Старый 28.05.2018, 10:57
  #2691
^
AlekseyS
📖
Регистрация: 02.04.2018
Адрес: Минск
Сообщения: 203
Регистрация: 02.04.2018
Адрес: Минск
Сообщения: 203
По умолчанию
Re: Скрипты

OrnsteinDragonslayerСуществует враж. герой. Нужно, чтобы после его убийства он как бы "воскрешался". И эти воскрешения будут происходить, пока ГГ не захватит все шахты. Я написал несколько функций, но что-то не работает. Не знаю, как их связать между собой. Может вы подскажите?

Я в скриптах не очень разбираюсь, но вроде эта функция должна сработать, с учетом того, что у ИИ есть город и у шахт есть скриптовые имена:
	 function start()
MakeHeroReturnToTavernAfterDeath("Aberrar",1,1)
for i = 1,6 do
sleep(1)
Trigger(OBJECT_CAPTURE_TRIGGER,"mine"..i,"ImmortalNecr")
end
end

startThread(start)

function ImmortalNecr()
if GetObjectOwner("mine1") == 1 and GetObjectOwner("mine2") == 1 and GetObjectOwner("mine3") == 1 and GetObjectOwner("mine4") == 1 and  GetObjectOwner("mine5") == 1 and GetObjectOwner("mine6") == 1  then
RemoveObject("Aberrar")
MakeHeroReturnToTavernAfterDeath("Aberrar",nil)
end
end 
AlekseyS вне форума
Ответить с цитированием
#2692
Старый 28.05.2018, 11:32
  #2692
^
Gerter
 
Аватар для Gerter
📖
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 825
pegn0ly#9113
Выставка наград
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 825
pegn0ly#9113
Выставка наград
По умолчанию
Re: Скрипты

можно повесить COMBAT_RESULTS_TRIGGER и, если герой, которого нужно воскрешать, потерпит поражение в бою, то проверить владельца шахт и действовать относительно этой проверки. Как-то так:

	function fightResult(fightID)

local LooserName = GetSavedCombatArmyHero(fightID, 0)
if(LooserName == 'Aberrar') then
   if(GetObjectOwner("mine1") == 1) and
     (GetObjectOwner("mine2") == 1) and 
     (GetObjectOwner("mine3") == 1) and 
     (GetObjectOwner("mine4") == 1) and 
     (GetObjectOwner("mine5") == 1) and 
     (GetObjectOwner("mine6") == 1) then
   UnreserveHero('Aberrar')
   else
      DeployReserveHero('Aberrar', 46, 140, GROUND)
   end
end

end

Trigger(COMBAT_RESULTS_TRIGGER, 'fightResult')

Здравствуйте. Можете написать функцию на двелинги: когда игрок посещает двелинги орков(допустим), выдавалось сообщение на их уничтожение, после чего игрок получает ресурсы, но компьютер до этого может с ними нормально взаимодействовать?

Повесить OBJECT_CAPTURE_TRIGGER на двеллинг и при его срабатывании прописать нужные действия:

	function Capture(n1, n2, s1, s2)

if(n2 == 1) then
   MessageBox(...)
   SetPlayerResource(...)
   RemoveObject(...) или RazeBuilding(...), если нужно унчитожить
end

end

Trigger(OBJECT_CAPTURE_TRIGGER, 'имя объекта', 'Capture')
__________________
Нет войне.
Нет войне.
Gerter вне форума
Ответить с цитированием
#2693
Старый 28.05.2018, 12:10
  #2693
^
OrnsteinDragonslayer
 
Аватар для OrnsteinDragonslayer
📖
Регистрация: 10.01.2016
Сообщения: 172
Регистрация: 10.01.2016
Сообщения: 172
По умолчанию
Re: Скрипты

Gerterможно повесить COMBAT_RESULTS_TRIGGER и, если герой, которого нужно воскрешать, потерпит поражение в бою, то проверить владельца шахт и действовать относительно этой проверки. Как-то так:

	function fightResult(fightID)

local LooserName = GetSavedCombatArmyHero(fightID, 0)
if(LooserName == 'Aberrar') then
   if(GetObjectOwner("mine1") == 1) and
     (GetObjectOwner("mine2") == 1) and 
     (GetObjectOwner("mine3") == 1) and 
     (GetObjectOwner("mine4") == 1) and 
     (GetObjectOwner("mine5") == 1) and 
     (GetObjectOwner("mine6") == 1) then
   UnreserveHero('Aberrar')
   else
      DeployReserveHero('Aberrar', 46, 140, GROUND)
   end
end

end

Trigger(COMBAT_RESULTS_TRIGGER, 'fightResult')

Проверил и сразу несколько вопросов. Как сделать так, чтобы шахты изначально принадлежали какому-либо игроку?
И второе: скрипт сбоит, консоль пишет: Аберрар не принадлежит никакому игроку. Хотя в плейер пропертайс он в резервных героях ждёт своего часа. Втф?
OrnsteinDragonslayer вне форума
Ответить с цитированием
#2694
Старый 28.05.2018, 12:15
  #2694
^
Gerter
 
Аватар для Gerter
📖
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 825
pegn0ly#9113
Выставка наград
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 825
pegn0ly#9113
Выставка наград
По умолчанию
Re: Скрипты

В редакторе можно выставить владельца. В какой момент пишет, что никому не принадлежит? прямо при запуске карты или после боя уже?
__________________
Нет войне.
Нет войне.
Gerter вне форума
Ответить с цитированием
#2695
Старый 28.05.2018, 12:21
  #2695
^
OrnsteinDragonslayer
 
Аватар для OrnsteinDragonslayer
📖
Регистрация: 10.01.2016
Сообщения: 172
Регистрация: 10.01.2016
Сообщения: 172
По умолчанию
Re: Скрипты

GerterВ редакторе можно выставить владельца. В какой момент пишет, что никому не принадлежит? прямо при запуске карты или после боя уже?

Может я слепой, но где?



Ошибку об отсутствии пишет после боя.
OrnsteinDragonslayer вне форума
Ответить с цитированием
#2696
Старый 28.05.2018, 12:38
  #2696
^
Gerter
 
Аватар для Gerter
📖
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 825
pegn0ly#9113
Выставка наград
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 825
pegn0ly#9113
Выставка наград
По умолчанию
Re: Скрипты

да, для заброшенных нельзя в редакторе, для остальных можно... тогда через SetObjectOwner() выставить. А насчет ошибки после боя хз, только что у себя проверил, все сработало как надо...
__________________
Нет войне.
Нет войне.
Gerter вне форума
Ответить с цитированием
#2697
Старый 28.05.2018, 13:21
  #2697
^
OrnsteinDragonslayer
 
Аватар для OrnsteinDragonslayer
📖
Регистрация: 10.01.2016
Сообщения: 172
Регистрация: 10.01.2016
Сообщения: 172
По умолчанию
Re: Скрипты

Gerterда, для заброшенных нельзя в редакторе, для остальных можно... тогда через SetObjectOwner() выставить. А насчет ошибки после боя хз, только что у себя проверил, все сработало как надо...
Спасибо, с шахтами разобрался. Вот на всякий случай сама ошибка. Вдруг я как-то перевёл не правильно. Хотя есть ли разница, если у тебя её нет вообще? Не понимаю. Может можно как-то переписать скрипт? Костыль какой?

Так же еще спрошу довольно странный вопрос, но... почему это не работает?

	function HelpSin ()
         MessageBox("/Maps/SingleMissions/rework (4)/sin.txt");
         RemoveObject("sin");
Trigger(REGION_ENTER_AND_STOP_TRIGGER , "sinRegion", nil);
end;

Trigger(REGION_ENTER_AND_STOP_TRIGGER , "sinRegion", "HelpSin");

У меня подобных функций куча, а конкретно эта не работает...

Добавлено через 8 минут
А, вторая проблема решилась просто тем, что регион был окружён вокруг юнита на карте и т.к. эта область считается уже как бы... агро к этому юниту и герой непосредственно туда не наступает... вообщем просто расстянул регион и всё окей.
OrnsteinDragonslayer вне форума
Ответить с цитированием
#2698
Старый 28.05.2018, 13:23
  #2698
^
Gerter
 
Аватар для Gerter
📖
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 825
pegn0ly#9113
Выставка наград
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 825
pegn0ly#9113
Выставка наград
По умолчанию
Re: Скрипты

так трудно сказать, конечно, если бы карту целиком посмотреть, может какой - то другой участок кода влияет...

еще альтернативно, можно попробовать через PLAYER_REMOVE_HERO_TRIGGER :

	function RemoveHero(looser, winner)
   if(looser == 'Aberrar') then
   --проверки шахт и тд
   end
end

Trigger(PLAYER_REMOVE_HERO_TRIGGER, id нужного игрока, 'RemoveHero')
__________________
Нет войне.
Нет войне.
Gerter вне форума
Ответить с цитированием
#2699
Старый 28.05.2018, 13:45
  #2699
^
OrnsteinDragonslayer
 
Аватар для OrnsteinDragonslayer
📖
Регистрация: 10.01.2016
Сообщения: 172
Регистрация: 10.01.2016
Сообщения: 172
По умолчанию
Re: Скрипты

Gerterтак трудно сказать, конечно, если бы карту целиком посмотреть, может какой - то другой участок кода влияет...

еще альтернативно, можно попробовать через PLAYER_REMOVE_HERO_TRIGGER :

	function RemoveHero(looser, winner)
   if(looser == 'Aberrar') then
   --проверки шахт и тд
   end
end

Trigger(PLAYER_REMOVE_HERO_TRIGGER, id нужного игрока, 'RemoveHero')

В этом случае вообще ничего не происходит после убийства героя. Даже ошибки нет. И проверь лс своё.
OrnsteinDragonslayer вне форума
Ответить с цитированием
#2700
Старый 28.05.2018, 14:32
  #2700
^
AlekseyS
📖
Регистрация: 02.04.2018
Адрес: Минск
Сообщения: 203
Регистрация: 02.04.2018
Адрес: Минск
Сообщения: 203
По умолчанию
Re: Скрипты

Попробуйте это тогда
	function RemoveHero()
while 1 do
if not IsHeroAlive("Aberrar) then
if GetObjectOwner("mine1") == 1 and GetObjectOwner("mine2") == 1 and GetObjectOwner("mine3") == 1 and GetObjectOwner("mine4") == 1 and  GetObjectOwner("mine5") == 1 and GetObjectOwner("mine6") == 1  then
UnreserveHero("Aberrar")
else DeployReserveHero("Aberra", координаты)
end
end
end
end

startThread (RemoveHero)



Добавлено через 8 минут
Gerter
Повесить OBJECT_CAPTURE_TRIGGER на двеллинг и при его срабатывании прописать нужные действия:

	function Capture(n1, n2, s1, s2)

if(n2 == 1) then
   MessageBox(...)
   SetPlayerResource(...)
   RemoveObject(...) или RazeBuilding(...), если нужно унчитожить
end

end

Trigger(OBJECT_CAPTURE_TRIGGER, 'имя объекта', 'Capture')

Спасибо конечно, но тут две проблемы: двелиногов много и комп с ними совсем не взаимодействует. Я имел ввиду функцию где я дотрагиваюсь до двела и мне предлагают, что с ними делать. При этом он не захватывается, а комп может с ним взаимодействовать как обычно.
AlekseyS вне форума
Ответить с цитированием
Ответ
Страница 180 из 260


Опции темы



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


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

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