Перейти к содержанию

Сообщения от Скрипты

Аватар пользователя
8 лет назад
Есть правда еще один скрипт нового дня
Вот в этом и дело. Триггер нового дня это не список обработчиков, а одно название функции (как и все остальные триггеры). Если ставить несколько, работать будет только последний. Нужно слить их обработчики в один.
как листать консоль вверх-вниз?
Насколько я помню, PAGE_UP/PAGE_DOWN как-то мотал, но в небольших пределах.
Аватар пользователя
8 лет назад
Хм. Ща кину скрин второго.

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

Добавлено через 1 час 14 минут
Все заработало! Спасибо вам большое, Jack_of_shadows!
Карты для героев 5

"Плата за любовь"
"Путь некроманта"
"Темные грани"
"Рок Гримхейма"
В ответ пользователю AstralLein
8 лет назад
:smile45: Ребята помогите. Не работает вот это:

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), но она работала, когда у героя именно столько опыта, а не выше, что мне как раз и нужно.
Аватар пользователя
8 лет назад
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" );
Аватар пользователя
8 лет назад
Не знаю, задавался ли уже этот вопрос, но можно ли в случае поражения героя каким-то образом оставить его у игрока? Или сразу после боя разместить того же героя на стратегической карте, минуя условие "... должен выжить"?
Аватар пользователя
8 лет назад
Это в течении определенного квеста можно проиграть, а так в течении всей миссии оно нужно. В принципе можно просто в отдельный поток пустить проверку на существование героя и заблокировать ее на время квеста, но как тогда поместить того же героя на карту?
Или все же есть способ, чтобы герой остался после поражения?
Аватар пользователя
8 лет назад
Отдельный поток можно не делать, есть же специальный триггер на потерю героя - PLAYER_REMOVE_HERO_TRIGGER.
Ещё была функция, по которой герой автоматически появлялся в таверне после смерти - MakeHeroReturnToTavernAfterDeath.
Если же нужно, чтобы появился на карте, героя нужно поместить в резерв (в редакторе в настройках карты) и выводить его из резерва в начале карты и каждый раз после смерти - DeployReserveHero.
Аватар пользователя
8 лет назад
Спасибо, работает как надо, все оказалось действительно просто
Аватар пользователя
8 лет назад
Ребята, сори если такой вопрос уже был. можете подсказать как на картах включать скрипты?
Т.е - у меня есть скрипты по Data/scripts/ которые меняют некоторые абилки в игре. но они не работают на ГСК картах. Так вот как мне их активировать на карте?
В ответ пользователю SoloMidDazzle
Аватар пользователя
8 лет назад
SoloMidDazzle
есть скрипты по Data/scripts/
Если я правильно понял, что скрипты лежат в data.pak/scripts, или в папке data/scripts, то в обоих вариантах можно вручную вызвать нужный скрипт из консоли:
@doFile("/scripts/НАЗВАНИЕ_СКРИПТА.lua")
В ответ пользователю Jack_of_shadows
Аватар пользователя
8 лет назад
Jack_of_shadows
Если я правильно понял, что скрипты лежат в data.pak/scripts, или в папке data/scripts, то в обоих вариантах можно вручную вызвать нужный скрипт из консоли:
@doFile("/scripts/НАЗВАНИЕ_СКРИПТА.lua")
А нельзя дать ссылку где то в карте что бы они работали при запуске?
В IRMG скрипты сразу работают без посторонних вмешательств. В моде NHF есть прога посторонняя которая патчит карты(как оказалось она работает не только на их мод (и проблема уже решилась, но хочется понять суть)).
Аватар пользователя
8 лет назад
А нельзя дать ссылку где то в карте что бы они работали при запуске?
В любой карте есть (а если нет, то можно создать) файл MapScript.lua, который выполняется при старте карты. Туда можно прописать строчку, которую я давал, только без "@" в начале.
Аватар пользователя
8 лет назад
Подскажите, почему при использовании 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 - внешняя функция

Статистика

Приветствуем новейшего участника: recijeb