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

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

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

Ответ
Страница 182 из 260
 
Опции темы
#2716
Старый 04.06.2018, 17:59
  #2716
^
OrnsteinDragonslayer
 
Аватар для OrnsteinDragonslayer
📖
Регистрация: 10.01.2016
Сообщения: 172
Регистрация: 10.01.2016
Сообщения: 172
По умолчанию
Re: Скрипты

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


Работает?

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

OrnsteinDragonslayerНе работает
А консоль ошибку какую выдает?
Kartoha вне форума
Ответить с цитированием
#2718
Старый 04.06.2018, 18:48
  #2718
^
OrnsteinDragonslayer
 
Аватар для OrnsteinDragonslayer
📖
Регистрация: 10.01.2016
Сообщения: 172
Регистрация: 10.01.2016
Сообщения: 172
По умолчанию
Re: Скрипты

KartohaА консоль ошибку какую выдает?

Никакую, всё чисто. Но методом проб и ошибок я узнал, что косячная функция - 3. Не так написал там триггер. Вроде всё окей.
OrnsteinDragonslayer вне форума
Ответить с цитированием
#2719
Старый 04.06.2018, 18:50
  #2719
^
Kartoha
📖
Регистрация: 10.03.2018
Сообщения: 64
Регистрация: 10.03.2018
Сообщения: 64
По умолчанию
Re: Скрипты

OrnsteinDragonslayerНикакую, всё чисто. Но методом проб и ошибок я узнал, что косячная функция - 3. Не так написал там триггер. Вроде всё окей.
Ну вот и отлично)
Kartoha вне форума
Ответить с цитированием
#2720
Старый 05.06.2018, 08:05
  #2720
^
OrnsteinDragonslayer
 
Аватар для OrnsteinDragonslayer
📖
Регистрация: 10.01.2016
Сообщения: 172
Регистрация: 10.01.2016
Сообщения: 172
По умолчанию
Re: Скрипты

	function Turma ()
         while (1) do
         if b == 0 and w == 0 then
            MessageBox("/Maps/SingleMissions/rework (4)/turmaLOCK.txt");
         end
         if b == 1 and w == 1 and var == 1 then
            MessageBox("/Maps/SingleMissions/rework (4)/turmaUNLOCK.txt");
            SetObjectiveState("suppDruid", OBJECTIVE_COMPLETE);
            RemoveObject("druid");
            RemoveObject("elf1");
            RemoveObject("elf2");
            RemoveObject("elf3");
            RemoveObject("elf4");
            RemoveObject("elf5");
            RemoveObject("elf6");
            RemoveObject("elf7");
            RemoveObject("elf8");
            MessageBox("/Maps/SingleMissions/rework (4)/unicorn.txt");
            OpenCircleFog(198, 64, 0, 2, PLAYER_1)
            MoveCamera(198, 64, 0, 30, 1.3, 1, 1, 1, 1);
            sleep(5)
            PlayObjectAnimation("unicorn", "happy", ONESHOT_STILL);
            sleep(15)
            RemoveObject("unicorn");
         end
         if b == 1 and w == 1 and a == 1 then
            MessageBox("/Maps/SingleMissions/rework (4)/turmaDEAD.txt")
         end
Trigger(OBJECT_TOUCH_TRIGGER, "turma");
break
end
end;

Trigger(OBJECT_TOUCH_TRIGGER, "turma", "Turma" );

Вопрос про многоусловонсть. Есть обьект "Turma". Нужно, чтобы при касании всплывало опред. сообщение, зависящее от условий приведённых в скрипте. У меня проблема такова, что при первом касании всё окей (первое условие, когда b and w == 0), а когда b == 1, w == 1, var == 1 выдаёт ошибку. Когда b == 1, w == 1, a == 1 тоже.
Вот ошибка

Условия, которые выставляют коэфф:
	function QochComplete ()
         while (1) do
             sleep(2);
             if (Exists('white') == nil) then
                SetObjectiveState("Qo-ch", OBJECTIVE_COMPLETED);
             w = 1
             break
             end
         end
end

startThread(QochComplete)


function QobComplete ()
         while (1) do
               sleep (2)
               if (Exists('black') == nil) then
                  SetObjectiveState("Qo-b", OBJECTIVE_COMPLETED);
               b = 1
               break
               end
         end
end

startThread(QobComplete)
         
OrnsteinDragonslayer вне форума
Ответить с цитированием
#2721
Старый 05.06.2018, 14:05
  #2721
^
RedHeavenHero
 
Аватар для RedHeavenHero
📖
Регистрация: 10.02.2012
Сообщения: 2378
Выставка наград
Регистрация: 10.02.2012
Сообщения: 2378
Выставка наград
По умолчанию
Re: Скрипты

OrnsteinDragonslayer
	function Turma ()
         while (1) do
         if b == 0 and w == 0 then
            MessageBox("/Maps/SingleMissions/rework (4)/turmaLOCK.txt");
         end
         if b == 1 and w == 1 and var == 1 then
            MessageBox("/Maps/SingleMissions/rework (4)/turmaUNLOCK.txt");
            SetObjectiveState("suppDruid", OBJECTIVE_COMPLETE);
            RemoveObject("druid");
            RemoveObject("elf1");
            RemoveObject("elf2");
            RemoveObject("elf3");
            RemoveObject("elf4");
            RemoveObject("elf5");
            RemoveObject("elf6");
            RemoveObject("elf7");
            RemoveObject("elf8");
            MessageBox("/Maps/SingleMissions/rework (4)/unicorn.txt");
            OpenCircleFog(198, 64, 0, 2, PLAYER_1)
            MoveCamera(198, 64, 0, 30, 1.3, 1, 1, 1, 1);
            sleep(5)
            PlayObjectAnimation("unicorn", "happy", ONESHOT_STILL);
            sleep(15)
            RemoveObject("unicorn");
         end
         if b == 1 and w == 1 and a == 1 then
            MessageBox("/Maps/SingleMissions/rework (4)/turmaDEAD.txt")
         end
Trigger(OBJECT_TOUCH_TRIGGER, "turma");
break
end
end;

Trigger(OBJECT_TOUCH_TRIGGER, "turma", "Turma" );

Вопрос про многоусловонсть. Есть обьект "Turma". Нужно, чтобы при касании всплывало опред. сообщение, зависящее от условий приведённых в скрипте. У меня проблема такова, что при первом касании всё окей (первое условие, когда b and w == 0), а когда b == 1, w == 1, var == 1 выдаёт ошибку. Когда b == 1, w == 1, a == 1 тоже.
Вот ошибка

Условия, которые выставляют коэфф:
	function QochComplete ()
         while (1) do
             sleep(2);
             if (Exists('white') == nil) then
                SetObjectiveState("Qo-ch", OBJECTIVE_COMPLETED);
             w = 1
             break
             end
         end
end

startThread(QochComplete)


function QobComplete ()
         while (1) do
               sleep (2)
               if (Exists('black') == nil) then
                  SetObjectiveState("Qo-b", OBJECTIVE_COMPLETED);
               b = 1
               break
               end
         end
end

startThread(QobComplete)
         
GetHeroName - функция, вызвавшая ошибку - боевого скрипта, поэтому стоит искать ошибку в боевом скрипте.
Насчет самого скрипта: не ясно, зачем цикл, триггер написан неверно - нет имени функции или nil.
__________________
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
RedHeavenHero вне форума
Ответить с цитированием
#2722
Старый 05.06.2018, 20:17
  #2722
^
OrnsteinDragonslayer
 
Аватар для OrnsteinDragonslayer
📖
Регистрация: 10.01.2016
Сообщения: 172
Регистрация: 10.01.2016
Сообщения: 172
По умолчанию
Re: Скрипты

RedHeavenHeroGetHeroName - функция, вызвавшая ошибку - боевого скрипта, поэтому стоит искать ошибку в боевом скрипте.
Насчет самого скрипта: не ясно, зачем цикл, триггер написан неверно - нет имени функции или nil.

Спасибо, пофиксил.
OrnsteinDragonslayer вне форума
Ответить с цитированием
#2723
Старый 16.06.2018, 01:24
  #2723
^
OrnsteinDragonslayer
 
Аватар для OrnsteinDragonslayer
📖
Регистрация: 10.01.2016
Сообщения: 172
Регистрация: 10.01.2016
Сообщения: 172
По умолчанию
Re: Скрипты

Хочу вызвать из резерва героя "Sarge", но консоль пишет ошибку, что герой не принадлежит ни к какому игроку. Собсна вопрос, почему он лучше других 10 зарезервированных героев?
Так же на всякий скину код, с которого он вызывается.

function TheEnd ()
while (1) do
sleep(2);
if (Exists("Zehir") == nil) and (Exists("Eruina") == nil) then
SuperTheEnd ()
break
end
end
end

function SuperTheEnd ()
DeployReserveHero("Sarge", 14, 134, GROUND)
sleep(2)
EnableHeroAI("Sarge", nil)
sleep(2)
StartAdvMapDialog(8)
sleep(25)
Win()
end

(разбил на 2 функции, потому что пытался хоть как-то починить и изменить код, чтобы работал. В итоге никак не работает, ни в одной функции, ни в двух).
OrnsteinDragonslayer вне форума
Ответить с цитированием
#2724
Старый 16.06.2018, 09:55
  #2724
^
AstralLein
 
Аватар для AstralLein
📖
Регистрация: 02.06.2017
Адрес: В Империи Незанхельм.
Сообщения: 3900
Регистрация: 02.06.2017
Адрес: В Империи Незанхельм.
Сообщения: 3900
По умолчанию
Re: Скрипты

Хм. Он у какого игрока в резерве находится? Вообще игра может тупить из-за числа зарезервированных героев у одного игрока.
__________________
Ох это сладостное, поглощающее разум безумие! 

Готовые проекты:


Карты для героев 5:
"Плата за любовь"
"Путь некроманта"
"Темные грани"

Карты для Disciples 3:
"Противостояние"

Проекты в разработке:

Моды для Disciples 3:
"Астельнаир" - разработка возобновлена в мае 2019 год

Карты для героев 5:
"Рок Гримхейма" - в активной разработке
Ох это сладостное, поглощающее разум безумие! 

Готовые проекты:


Карты для героев 5:
"Плата за любовь"
"Путь некроманта"
"Темные грани"

Карты для Disciples 3:
"Противостояние"

Проекты в разработке:

Моды для Disciples 3:
"Астельнаир" - разработка возобновлена в мае 2019 год

Карты для героев 5:
"Рок Гримхейма" - в активной разработке
AstralLein вне форума
Ответить с цитированием
#2725
Старый 16.06.2018, 13:17
  #2725
^
OrnsteinDragonslayer
 
Аватар для OrnsteinDragonslayer
📖
Регистрация: 10.01.2016
Сообщения: 172
Регистрация: 10.01.2016
Сообщения: 172
По умолчанию
Re: Скрипты

AstralLeinХм. Он у какого игрока в резерве находится? Вообще игра может тупить из-за числа зарезервированных героев у одного игрока.

Анрезерв лишних героев не спасает положение. Герой в резерве у игрока 2.
OrnsteinDragonslayer вне форума
Ответить с цитированием
#2726
Старый 17.06.2018, 19:27
  #2726
^
AlekseyS
📖
Регистрация: 02.04.2018
Адрес: Минск
Сообщения: 203
Регистрация: 02.04.2018
Адрес: Минск
Сообщения: 203
По умолчанию
Re: Скрипты

Есть проблема: Эрлингу я задал идти в отчку 15, 9 и если он по какой-то причине не сможет туда пойти, тогда в 121,22, но если ему что-то мешает пройти, допустим герой с большой армией, тогда он просто убегает обратно. Как сделать так, чтобы он, несмотря ни на что, бежал в точку 15,9.
Функция написана через NEW_DAY_TRIGGER

	if GetDate(DAY) ==  DayErlingAttack and ErlingAttack == 1 then
DeployReserveHero(Erling,RegionToPoint("Erling_deploy"))
sleep(5)
local x, y = 15, 9
if CanMoveHero(Erling,x,y,0) then
MoveHero(Erling, x, y,0)
elseif CanMoveHero(Erling,121,22)  then
MoveHero(Erling, 121, 22,0)
end
startThread(ErlingUpgrade)
end
end
AlekseyS вне форума
Ответить с цитированием
#2727
Старый 18.06.2018, 01:34
  #2727
^
Gerter
 
Аватар для Gerter
📖
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 824
pegn0ly#9113
Выставка наград
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 824
pegn0ly#9113
Выставка наград
По умолчанию
Re: Скрипты

во первых, стоит выключить AI у героя. во вторых, лучше сделать отдельную функцию, которая будет проверять, что наступил ход нужного игрока и запускать перемещение героя, т.к. триггер нового дня не совсем для этого подходит
__________________
Нет войне.
Нет войне.
Gerter сейчас на форуме
Ответить с цитированием
#2728
Старый 18.06.2018, 11:22
  #2728
^
AlekseyS
📖
Регистрация: 02.04.2018
Адрес: Минск
Сообщения: 203
Регистрация: 02.04.2018
Адрес: Минск
Сообщения: 203
По умолчанию
Re: Скрипты

Gerterво первых, стоит выключить AI у героя. во вторых, лучше сделать отдельную функцию, которая будет проверять, что наступил ход нужного игрока и запускать перемещение героя, т.к. триггер нового дня не совсем для этого подходит

Все равно если ему что-то мешает пройти, он,теперь, будет стоять на месте. Функцию писал через startThread:

	functionErlingMove()
local x, y = 15, 9
if CanMoveHero(Erling,x,y,0) then
MoveHero(Erling, x, y,0)
end
end
AlekseyS вне форума
Ответить с цитированием
#2729
Старый 18.06.2018, 12:30
  #2729
^
Gerter
 
Аватар для Gerter
📖
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 824
pegn0ly#9113
Выставка наград
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 824
pegn0ly#9113
Выставка наград
По умолчанию
Re: Скрипты

мешает пройти = нужная клетка недоступна? тогда логично, что не двигается, нет?

попробуй что-то типа этого:

	function ErlingMove()

  while 1 do
    if(GetCurrentPlayer() == 'номер игрока, которому принадлежит Эрлинг') then
      if CanMoveHero(Erling, 15 , 9, 0) then
        MoveHero(Erling, 15, 9, 0)
      elseif CanMoveHero(Erling, 121, 22, 0) then
        MoveHero(Erling, 121, 22,0)
      end
    end
    sleep(2)
  end
end
__________________
Нет войне.
Нет войне.
Gerter сейчас на форуме
Ответить с цитированием
#2730
Старый 18.06.2018, 18:45
  #2730
^
AlekseyS
📖
Регистрация: 02.04.2018
Адрес: Минск
Сообщения: 203
Регистрация: 02.04.2018
Адрес: Минск
Сообщения: 203
По умолчанию
Re: Скрипты

Gerterмешает пройти = нужная клетка недоступна? тогда логично, что не двигается, нет?

попробуй что-то типа этого:

	function ErlingMove()

  while 1 do
    if(GetCurrentPlayer() == 'номер игрока, которому принадлежит Эрлинг') then
      if CanMoveHero(Erling, 15 , 9, 0) then
        MoveHero(Erling, 15, 9, 0)
      elseif CanMoveHero(Erling, 121, 22, 0) then
        MoveHero(Erling, 121, 22,0)
      end
    end
    sleep(2)
  end
end

Если ему заградит путь мой герой, тогда он просто стоит на месте. Это единственная проблема. Попробовал твою функцию- проблем та же.
AlekseyS вне форума
Ответить с цитированием
Ответ
Страница 182 из 260


Опции темы



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


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

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