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

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

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

Ответ
Страница 181 из 260
 
Опции темы
#2701
Старый 28.05.2018, 15:21
  #2701
^
Gerter
 
Аватар для Gerter
📖
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 824
pegn0ly#9113
Выставка наград
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 824
pegn0ly#9113
Выставка наград
По умолчанию
Re: Скрипты

ну тогда OBJECT_TOUCH_TRIGGER повесить на каждый двелл и проверять, кто коснулся. Если ваш герой, то выдать нужное сообщение, если комп, то, например, скриптом добавлять ему юнитов с двеллинга.
__________________
Нет войне.
Нет войне.
Gerter сейчас на форуме
Ответить с цитированием
#2702
Старый 28.05.2018, 22:37
  #2702
^
LetoX
 
Аватар для LetoX
📖
Регистрация: 16.11.2017
Сообщения: 67
Регистрация: 16.11.2017
Сообщения: 67
По умолчанию
Re: Скрипты

я опять с вопросом: кто-нибудь знает как проверить изучение определённого заклинания, а то в документации я такого тригера не видел-
пример:
если герой изучил такое-то заклинание, то он получает +1 к колде
LetoX вне форума
Ответить с цитированием
#2703
Старый 29.05.2018, 01:28
  #2703
^
Jack_of_shadows
 
Аватар для Jack_of_shadows
📖
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
По умолчанию
Re: Скрипты

LetoX, триггера такого нет, но можно организовать поток, который будет постоянно проверять у героя наличие заклинания. Смотрите страницу-две назад примеры с потоками (функция startThread), только заменив условие на KnowHeroSpell(heroName, spell).
__________________
РПГ-сценарий для HoMM5: Путь героя

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

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

люди подскажите , в чём проблема: написал боевой скрипт для некроманта на каст массовых заклинаний тьмы в зависимости от уровня
function start()
lev = GetGameVar("level") + 0;
mana = GetUnitManaPoints(GetAttackerHero())
SetUnitManaPoints(GetAttackerHero(), 100);
if lev < 10 then
UnitCastGlobalSpell(GetAttackerHero(), 212)
elseif lev < 20 then
UnitCastGlobalSpell(GetAttackerHero(), 212)
UnitCastGlobalSpell(GetAttackerHero(), 215)
elseif lev < 30 then
UnitCastGlobalSpell(GetAttackerHero(), 212)
UnitCastGlobalSpell(GetAttackerHero(), 215)
UnitCastGlobalSpell(GetAttackerHero(), 210)
else
UnitCastGlobalSpell(GetAttackerHero(), 212)
UnitCastGlobalSpell(GetAttackerHero(), 215)
UnitCastGlobalSpell(GetAttackerHero(), 210)
UnitCastGlobalSpell(GetAttackerHero(), 213)
end
SetUnitManaPoints(GetAttackerHero(), mana);
end
в бою ничего не происходит(переменная задана, это проверено другим скриптом)
LetoX вне форума
Ответить с цитированием
#2705
Старый 31.05.2018, 01:08
  #2705
^
Gerter
 
Аватар для Gerter
📖
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 824
pegn0ly#9113
Выставка наград
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 824
pegn0ly#9113
Выставка наград
По умолчанию
Re: Скрипты

банальный вариант - добавить sleep после SetUnitManaPoints(). ну и консоль ругается на что-нибудь?(думаю там должно быть что-то типа 'attacker-hero cant cast spell..')
__________________
Нет войне.
Нет войне.
Gerter сейчас на форуме
Ответить с цитированием
#2706
Старый 31.05.2018, 12:21
  #2706
^
LetoX
 
Аватар для LetoX
📖
Регистрация: 16.11.2017
Сообщения: 67
Регистрация: 16.11.2017
Сообщения: 67
По умолчанию
Re: Скрипты

Консоль это вообще мой самый верный друг - она тупо не включается. Вроде в profiles написал нужную строчку(ctrl + C , ctrl + V), в input в моём профиле тоже написал show_console....... , однако консоль не включается, с ней конечно по проще
LetoX вне форума
Ответить с цитированием
#2707
Старый 31.05.2018, 22:28
  #2707
^
Jack_of_shadows
 
Аватар для Jack_of_shadows
📖
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
По умолчанию
Re: Скрипты

LetoX, возможные ошибки:
1. Функция start() кажется должна идти с большой буквы - Start(). Lua чувствителен к регистру.
2. Мана возможно не сразу будет дана герою, дождаться наверняка можно с помощью такой конструкции:
	SetUnitManaPoints(GetAttackerHero(), 100);
repeat sleep() until(GetUnitManaPoints(GetAttackerHero()) == 100);
3. Функции каста заклинаний в некоторых случаях могут зафэйлить и скрипт вывалится в этом месте. Есть более безопасный вариант их запускать через отдельный поток:
	startThread(UnitCastGlobalSpell, GetAttackerHero(), 212);
И ещё после функций каста и перед восстановлением прежней маны лучше поставить sleep(1), чтобы мана за каст успела отняться до её восстановления.
__________________
РПГ-сценарий для HoMM5: Путь героя

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

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

уже не знаю в чём проблема, пробовал простой скрипт на призыв существ числом уровень*2 - всё работает, вроде всё правильно , а ничего не происходит
function Start()
lev = GetGameVar("level") + 0;
mana = GetUnitManaPoints(GetAttackerHero())
SetUnitManaPoints(GetAttackerHero(), 100);
repeat sleep() until(GetUnitManaPoints(GetAttackerHero()) == 100);
if lev < 10 then
startThread(UnitCastGlobalSpell, GetAttackerHero(), 212);
elseif lev < 20 then
startThread(UnitCastGlobalSpell, GetAttackerHero(), 212);
startThread(UnitCastGlobalSpell, GetAttackerHero(), 215);
elseif lev < 30 then
startThread(UnitCastGlobalSpell, GetAttackerHero(), 212);
startThread(UnitCastGlobalSpell, GetAttackerHero(), 215);
startThread(UnitCastGlobalSpell, GetAttackerHero(), 210);
else
startThread(UnitCastGlobalSpell, GetAttackerHero(), 212);
startThread(UnitCastGlobalSpell, GetAttackerHero(), 215);
startThread(UnitCastGlobalSpell, GetAttackerHero(), 210);
startThread(UnitCastGlobalSpell, GetAttackerHero(), 213);
end
sleep(2);
SetUnitManaPoints(GetAttackerHero(), mana);
end
LetoX вне форума
Ответить с цитированием
#2709
Старый 01.06.2018, 00:45
  #2709
^
Jack_of_shadows
 
Аватар для Jack_of_shadows
📖
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
По умолчанию
Re: Скрипты

LetoX может вы в другом месте боевого скрипта ошибку допустили, и весь интерпретатор падает? Если есть рабочий вариант с другим заклинанием, и нерабочий текущий, попробуйте по чуть чуть переходить от одного к другому и смотреть на каком этапе перестанет работать.

Вот кусок моего похожего скрипта, который работает нормально:
	player_hero = '';

function Start()
  
  if(IsHuman(ATTACKER)) then
    player_hero = GetAttackerHero();
  else
    player_hero = GetDefenderHero();
  end

  combatSetPause(not nil);
  
  local last_mana = GetUnitManaPoints(player_hero);
  SetUnitManaPoints(player_hero, 100);
  repeat sleep() until(GetUnitManaPoints(player_hero) == 100);
  startThread(UnitCastGlobalSpell, player_hero, SPELL_MASS_STONESKIN);
  sleep(1);
  SetUnitManaPoints(player_hero, last_mana);
  repeat sleep() until(GetUnitManaPoints(player_hero) == last_mana);
  
  setATB(player_hero, 0.5);
  sleep(1);
  combatSetPause(nil);

end
__________________
РПГ-сценарий для HoMM5: Путь героя

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

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

Такой вопрос. Хочу, чтобы герой Ласло бегал поочерёдно по трём точкам. После срабатывания триггера он сразу идёт к последней, там и отдыхает. Что поправить?
	function Patrul ()
         MoveHero("Laszlo", 197, 184, GROUND)
         MoveHero("Laszlo", 159, 196, GROUND)
         MoveHero("Laszlo", 156, 158, GROUND)
Trigger(OBJECT_CAPTURE_TRIGGER, "derevo1", nil)
end;

Trigger(OBJECT_CAPTURE_TRIGGER, "derevo1", "Patrul")
OrnsteinDragonslayer вне форума
Ответить с цитированием
#2711
Старый 02.06.2018, 20:43
  #2711
^
Jack_of_shadows
 
Аватар для Jack_of_shadows
📖
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
По умолчанию
Re: Скрипты

OrnsteinDragonslayer, команды должны выполняться не все сразу, а сначала идти в одну точку, дождаться когда герой дойдёт (проверяя его координаты или поставив в эту точку регион с триггером), только после этого отправлять во второую точку и так далее.
__________________
РПГ-сценарий для HoMM5: Путь героя

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

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

Проблема такова: хочу, чтобы квест "uderzhatG" активировался, после захвата города "gorodSvyat". Так же, если этот город принадлежит игроку 2, то тогда квест проваливался и игрок проигрывал миссию. Так же, после уничтожения героя "Nemor", квест выполняется. Но после того, как я добавляю в свой код функции ниже, то всё ломается и не триггериться (хотя начальные настройки выставляются). В чём проблема?


	function uderzhat ()
         SetObjectiveState("uderzhatG", OBJECTIVE_ACTIVE);
Trigger(OBJECT_CAPTURE_TRIGGER, "gorodSvyat", nil );
end;

Trigger(OBJECT_CAPTURE_TRIGGER, "gorodSvyat", "uderzhat" );

function CheckSvyat ()
         while (1) do
             sleep(2);
             if GetObjectOwner("gorodSvyat")==PLAYER_2 then
             sleep (2)
             SetObjectiveState("uderzhatG", OBJECTIVE_FAILED);
             sleep (15)
                Loose ();
                break
             end;
         end;
end;

startThread (CheckSvyat)


function UderzhatComplete ()
         SetObjectiveState("uderzhatG", OBJECTIVE_COMPLETED);
         Trigger (PLAYER_REMOVE_HERO_TRIGGER, "Nemor", nil)
end

Trigger (PLAYER_REMOVE_HERO_TRIGGER, "Nemor", "UderzhatComplete")
OrnsteinDragonslayer вне форума
Ответить с цитированием
#2713
Старый 04.06.2018, 15:04
  #2713
^
Kartoha
📖
Регистрация: 10.03.2018
Сообщения: 64
Регистрация: 10.03.2018
Сообщения: 64
По умолчанию
Re: Скрипты

OrnsteinDragonslayerПроблема такова: хочу, чтобы квест "uderzhatG" активировался, после захвата города "gorodSvyat". Так же, если этот город принадлежит игроку 2, то тогда квест проваливался и игрок проигрывал миссию. Так же, после уничтожения героя "Nemor", квест выполняется. Но после того, как я добавляю в свой код функции ниже, то всё ломается и не триггериться (хотя начальные настройки выставляются). В чём проблема?


	function uderzhat ()
         SetObjectiveState("uderzhatG", OBJECTIVE_ACTIVE);
Trigger(OBJECT_CAPTURE_TRIGGER, "gorodSvyat", nil );
end;

Trigger(OBJECT_CAPTURE_TRIGGER, "gorodSvyat", "uderzhat" );

function CheckSvyat ()
         while (1) do
             sleep(2);
             if GetObjectOwner("gorodSvyat")==PLAYER_2 then
             sleep (2)
             SetObjectiveState("uderzhatG", OBJECTIVE_FAILED);
             sleep (15)
                Loose ();
                break
             end;
         end;
end;

startThread (CheckSvyat)


function UderzhatComplete ()
         SetObjectiveState("uderzhatG", OBJECTIVE_COMPLETED);
         Trigger (PLAYER_REMOVE_HERO_TRIGGER, "Nemor", nil)
end

Trigger (PLAYER_REMOVE_HERO_TRIGGER, "Nemor", "UderzhatComplete")

Может буду не прав, но возможно поставить триггер: Trigger(OBJECT_CAPTURE_TRIGGER, "gorodSvyat", "CheckSvyat" );
Kartoha вне форума
Ответить с цитированием
#2714
Старый 04.06.2018, 15:42
  #2714
^
OrnsteinDragonslayer
 
Аватар для OrnsteinDragonslayer
📖
Регистрация: 10.01.2016
Сообщения: 172
Регистрация: 10.01.2016
Сообщения: 172
По умолчанию
Re: Скрипты

KartohaМожет буду не прав, но возможно поставить триггер: Trigger(OBJECT_CAPTURE_TRIGGER, "gorodSvyat", "CheckSvyat" );

Вместо старттреда или куда?
OrnsteinDragonslayer вне форума
Ответить с цитированием
#2715
Старый 04.06.2018, 15:53
  #2715
^
Kartoha
📖
Регистрация: 10.03.2018
Сообщения: 64
Регистрация: 10.03.2018
Сообщения: 64
По умолчанию
Re: Скрипты

OrnsteinDragonslayerВместо старттреда или куда?


После этой строки :Trigger(OBJECT_CAPTURE_TRIGGER, "gorodSvyat", nil )


Работает?
Kartoha вне форума
Ответить с цитированием
Ответ
Страница 181 из 260


Опции темы



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


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

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