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

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

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

Ответ
Страница 160 из 260
 
Опции темы
#2386
Старый 18.10.2017, 22:01
  #2386
^
Jack_of_shadows
 
Аватар для Jack_of_shadows
📖
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
По умолчанию
Re: Скрипты

Есть правда еще один скрипт нового дня
Вот в этом и дело. Триггер нового дня это не список обработчиков, а одно название функции (как и все остальные триггеры). Если ставить несколько, работать будет только последний. Нужно слить их обработчики в один.
как листать консоль вверх-вниз?
Насколько я помню, PAGE_UP/PAGE_DOWN как-то мотал, но в небольших пределах.
Jack_of_shadows вне форума
Ответить с цитированием
#2387
Старый 18.10.2017, 23:42
  #2387
^
AstralLein
 
Аватар для AstralLein
📖
Регистрация: 02.06.2017
Адрес: В Империи Незанхельм.
Сообщения: 3900
Регистрация: 02.06.2017
Адрес: В Империи Незанхельм.
Сообщения: 3900
По умолчанию
Re: Скрипты

Хм. Ща кину скрин второго.

Добавлено через 24 минуты
В общем имеется такой скрипт. Он в начале дня проверяет ряд условий и если они правдивы отработает функция парочка функций вырубится. По идее его можно кинуть в отдельный поток, только я ее умею их делать.

Добавлено через 1 час 14 минут
Все заработало! Спасибо вам большое, Jack_of_shadows!
__________________
Ох это сладостное, поглощающее разум безумие! 

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


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

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

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

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

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

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


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

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

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

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

Карты для героев 5:
"Рок Гримхейма" - в активной разработке
AstralLein сейчас на форуме
Ответить с цитированием
#2388
Старый 01.11.2017, 15:59
  #2388
^
sergejez
📖
Регистрация: 08.01.2017
Сообщения: 20
Регистрация: 08.01.2017
Сообщения: 20
По умолчанию
Re: Скрипты

Ребята помогите. Не работает вот это:

function ZehirFlev1 (hero)
if IsHeroAlive("Zehir") == not nil and GetHeroLevel ("Zehir") >= 1 then
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 320);
end;
end;

Trigger(NEW_DAY_TRIGGER, "ZehirFlev1" );


function ZehirFlev3 (hero)
if IsHeroAlive("Zehir") == not nil and GetHeroLevel ("Zehir") >= 3 then
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 600);
end;
end;

Trigger(NEW_DAY_TRIGGER, "ZehirFlev3" );

function ZehirFlev5 (hero)
if IsHeroAlive("Zehir") == not nil and GetHeroLevel ("Zehir") >= 5 then
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 750);
end;
end;

Trigger(NEW_DAY_TRIGGER, "ZehirFlev5" );

function ZehirFlev7 (hero)
if IsHeroAlive("Zehir") == not nil and GetHeroLevel ("Zehir") >= 7 then
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 950);
end;
end;

Trigger(NEW_DAY_TRIGGER, "ZehirFlev7" );

function ZehirFlev10 (hero)
if IsHeroAlive("Zehir") == not nil and GetHeroLevel ("Zehir") >= 10 then
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 400);
end;
end;

Trigger(NEW_DAY_TRIGGER, "ZehirFlev10" );

function ZehirFlev12 (hero)
if IsHeroAlive("Zehir") == not nil and GetHeroLevel ("Zehir") >= 12 then
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 700);
end;
end;

Trigger(NEW_DAY_TRIGGER, "ZehirFlev12" );

function ZehirFlev14 (hero)
if IsHeroAlive("Zehir") == not nil and GetHeroLevel ("Zehir") >= 14 then
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 820);
end;
end;

Trigger(NEW_DAY_TRIGGER, "ZehirFlev14" );

function ZehirFlev16 (hero)
if IsHeroAlive("Zehir") == not nil and GetHeroLevel ("Zehir") >= 16 then
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
end;
end;

Trigger(NEW_DAY_TRIGGER, "ZehirFlev16" );

function ZehirFlev18 (hero)
if IsHeroAlive("Zehir") == not nil and GetHeroLevel ("Zehir") >= 18 then
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 350);
end;
end;

Trigger(NEW_DAY_TRIGGER, "ZehirFlev18" );

function ZehirFlev20 (hero)
if IsHeroAlive("Zehir") == not nil and GetHeroLevel ("Zehir") >= 20 then
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 830);
end;
end;

Trigger(NEW_DAY_TRIGGER, "ZehirFlev20" );

function ZehirFlev22 (hero)
if IsHeroAlive("Zehir") == not nil and GetHeroLevel ("Zehir") >= 22 then
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 400);
end;
end;

Trigger(NEW_DAY_TRIGGER, "ZehirFlev22" );

function ZehirFlev25 (hero)
if IsHeroAlive("Zehir") == not nil and GetHeroLevel ("Zehir") >= 25 then
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
end;
end;

Trigger(NEW_DAY_TRIGGER, "ZehirFlev25" );

function ZehirFlev28 (hero)
if IsHeroAlive("Zehir") == not nil and GetHeroLevel ("Zehir") >= 28 then
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 525);
end;
end;

Trigger(NEW_DAY_TRIGGER, "ZehirFlev28" );

function ZehirFlev30 (hero)
if IsHeroAlive("Zehir") == not nil and GetHeroLevel ("Zehir") >= 30 then
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
end;
end;

Trigger(NEW_DAY_TRIGGER, "ZehirFlev30" );

function ZehirFlev33 (hero)
if IsHeroAlive("Zehir") == not nil and GetHeroLevel ("Zehir") >= 33 then
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 650);
end;
end;

Trigger(NEW_DAY_TRIGGER, "ZehirFlev33" );

function ZehirFlev35 (hero)
if IsHeroAlive("Zehir") == not nil and GetHeroLevel ("Zehir") >= 35 then
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
sleep(5);
ChangeHeroStat("Zehir", STAT_EXPERIENCE, 900);
end;
end;

Trigger(NEW_DAY_TRIGGER, "ZehirFlev35" );

До этого писал специализацию через проверку стат опыта(GetHeroStat), но она работала, когда у героя именно столько опыта, а не выше, что мне как раз и нужно.
sergejez вне форума
Ответить с цитированием
#2389
Старый 01.11.2017, 19:50
  #2389
^
Jack_of_shadows
 
Аватар для Jack_of_shadows
📖
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
По умолчанию
Re: Скрипты

sergejez, триггер нового дня может быть только один, поэтому скрипт не работает. Если отбросить выдачу опыта в несколько шагов, а оставить только логику "каждый день Зехир получает опыт, пропорциональный своему уровню", то можно написать так:
	-- таблица уровней и величины опыта
zehir_lvl_and_exp = {от большего уровня к меньшему, {3,600}, {1,320}};

function NewDay()
  if IsHeroAlive("Zehir") == not nil then
    local zehir_level = GetHeroLevel("Zehir");
    for lvl_and_exp in zehir_lvl_and_exp do
      if zehir_level >= lvl_and_exp[1] then
        ChangeHeroStat("Zehir", STAT_EXPERIENCE, lvl_and_exp[2]);
        break
      end
    end
  end
end

Trigger(NEW_DAY_TRIGGER, "NewDay" );
Jack_of_shadows вне форума
Ответить с цитированием
#2390
Старый 01.11.2017, 21:07
  #2390
^
sergejez
📖
Регистрация: 08.01.2017
Сообщения: 20
Регистрация: 08.01.2017
Сообщения: 20
Хорошо
Re: Скрипты

Спасибо! Помогли
sergejez вне форума
Ответить с цитированием
#2391
Старый 04.11.2017, 13:45
  #2391
^
32MeTpa
 
Аватар для 32MeTpa
📖
Регистрация: 06.08.2011
Сообщения: 178
Выставка наград
Регистрация: 06.08.2011
Сообщения: 178
Выставка наград
По умолчанию
Re: Скрипты

Не знаю, задавался ли уже этот вопрос, но можно ли в случае поражения героя каким-то образом оставить его у игрока? Или сразу после боя разместить того же героя на стратегической карте, минуя условие "... должен выжить"?
32MeTpa вне форума
Ответить с цитированием
#2392
Старый 04.11.2017, 17:01
  #2392
^
AstralLein
 
Аватар для AstralLein
📖
Регистрация: 02.06.2017
Адрес: В Империи Незанхельм.
Сообщения: 3900
Регистрация: 02.06.2017
Адрес: В Империи Незанхельм.
Сообщения: 3900
По умолчанию
Re: Скрипты

Хм. А зачем задание "нельзя сдохнуть ГГ", если не будет проигрыша если он откинет копыта?

Добавлено через 31 секунду
А так можно, конечно
__________________
Ох это сладостное, поглощающее разум безумие! 

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


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

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

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

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

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

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


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

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

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

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

Карты для героев 5:
"Рок Гримхейма" - в активной разработке
AstralLein сейчас на форуме
Ответить с цитированием
#2393
Старый 04.11.2017, 17:51
  #2393
^
32MeTpa
 
Аватар для 32MeTpa
📖
Регистрация: 06.08.2011
Сообщения: 178
Выставка наград
Регистрация: 06.08.2011
Сообщения: 178
Выставка наград
По умолчанию
Re: Скрипты

Это в течении определенного квеста можно проиграть, а так в течении всей миссии оно нужно. В принципе можно просто в отдельный поток пустить проверку на существование героя и заблокировать ее на время квеста, но как тогда поместить того же героя на карту?
Или все же есть способ, чтобы герой остался после поражения?
32MeTpa вне форума
Ответить с цитированием
#2394
Старый 05.11.2017, 13:37
  #2394
^
Jack_of_shadows
 
Аватар для Jack_of_shadows
📖
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
По умолчанию
Re: Скрипты

Отдельный поток можно не делать, есть же специальный триггер на потерю героя - PLAYER_REMOVE_HERO_TRIGGER.
Ещё была функция, по которой герой автоматически появлялся в таверне после смерти - MakeHeroReturnToTavernAfterDeath.
Если же нужно, чтобы появился на карте, героя нужно поместить в резерв (в редакторе в настройках карты) и выводить его из резерва в начале карты и каждый раз после смерти - DeployReserveHero.
Jack_of_shadows вне форума
Ответить с цитированием
#2395
Старый 05.11.2017, 15:01
  #2395
^
32MeTpa
 
Аватар для 32MeTpa
📖
Регистрация: 06.08.2011
Сообщения: 178
Выставка наград
Регистрация: 06.08.2011
Сообщения: 178
Выставка наград
По умолчанию
Re: Скрипты

Спасибо, работает как надо, все оказалось действительно просто
32MeTpa вне форума
Ответить с цитированием
#2396
Старый 16.11.2017, 22:47
  #2396
^
SoloMidDazzle
 
Аватар для SoloMidDazzle
📖
Регистрация: 29.07.2017
Сообщения: 26
Регистрация: 29.07.2017
Сообщения: 26
По умолчанию
Re: Скрипты

Ребята, сори если такой вопрос уже был. можете подсказать как на картах включать скрипты?
Т.е - у меня есть скрипты по Data/scripts/ которые меняют некоторые абилки в игре. но они не работают на ГСК картах. Так вот как мне их активировать на карте?
SoloMidDazzle вне форума
Ответить с цитированием
#2397
Старый 16.11.2017, 23:06
  #2397
^
Jack_of_shadows
 
Аватар для Jack_of_shadows
📖
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
По умолчанию
Re: Скрипты

SoloMidDazzleесть скрипты по Data/scripts/
Если я правильно понял, что скрипты лежат в data.pak/scripts, или в папке data/scripts, то в обоих вариантах можно вручную вызвать нужный скрипт из консоли:
	@doFile("/scripts/НАЗВАНИЕ_СКРИПТА.lua")
Jack_of_shadows вне форума
Ответить с цитированием
#2398
Старый 16.11.2017, 23:11
  #2398
^
SoloMidDazzle
 
Аватар для SoloMidDazzle
📖
Регистрация: 29.07.2017
Сообщения: 26
Регистрация: 29.07.2017
Сообщения: 26
По умолчанию
Re: Скрипты

Jack_of_shadowsЕсли я правильно понял, что скрипты лежат в data.pak/scripts, или в папке data/scripts, то в обоих вариантах можно вручную вызвать нужный скрипт из консоли:
	@doFile("/scripts/НАЗВАНИЕ_СКРИПТА.lua")
А нельзя дать ссылку где то в карте что бы они работали при запуске?
В IRMG скрипты сразу работают без посторонних вмешательств. В моде NHF есть прога посторонняя которая патчит карты(как оказалось она работает не только на их мод (и проблема уже решилась, но хочется понять суть)).
SoloMidDazzle вне форума
Ответить с цитированием
#2399
Старый 16.11.2017, 23:29
  #2399
^
Jack_of_shadows
 
Аватар для Jack_of_shadows
📖
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
По умолчанию
Re: Скрипты

А нельзя дать ссылку где то в карте что бы они работали при запуске?
В любой карте есть (а если нет, то можно создать) файл MapScript.lua, который выполняется при старте карты. Туда можно прописать строчку, которую я давал, только без "@" в начале.
Jack_of_shadows вне форума
Ответить с цитированием
#2400
Старый 22.11.2017, 17:28
  #2400
^
32MeTpa
 
Аватар для 32MeTpa
📖
Регистрация: 06.08.2011
Сообщения: 178
Выставка наград
Регистрация: 06.08.2011
Сообщения: 178
Выставка наград
По умолчанию
Re: Скрипты

Подскажите, почему при использовании StartCombat вражеский герой, поставленный из резерва, становится нейтралом? Можно это как-то исправить?
По сути код выглядит так:
	DeployReserveHero('Skeggy', 27, 145, 0, 0);
sleep(1);
local ENA = crtables(random(3)+1);
StartCombat(hero, 'Skeggy', 5, ENA[1][1], ENA[1][2], ENA[2][1], ENA[2][2], ENA[3][1], 
ENA[3][2], ENA[4][1], ENA[4][2], ENA[5][1], ENA[5][2], nil, 'AC', 
'/Arenas/Arena.AdventureFlybyScene).xdb#xpointer(/AdventureFlybyScene)');
crtables - внешняя функция
32MeTpa вне форума
Ответить с цитированием
Ответ
Страница 160 из 260


Опции темы



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


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

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