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

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

В ответ пользователю Dogenator
Аватар пользователя
Dogenator

Всем здравствуйте!

Возникла такая проблема:

Установил скрипт по смене дня-ночи, все работает, но...

При смене дневного освещения на ночное - становится недоступно меню героев, причем только для игрока №1

В чем может быть проблема?

Вот код:

curr_light = 'day'

function DayNight()
if curr_light == 'day' then
SetAmbientLight(GROUND, 'NIGHT', 1, 5.0)
curr_light = 'night'
else
SetAmbientLight(GROUND, 'DAY', 1, 5.0)
curr_light = 'day'
end
end

Это только при запуске карты через мультиплеер? в сингл плеере всё нормально? У меня был подобный баг при вызове showFlyingSign(), пока на экране всех игроков надпись не появится, доступа к меню героя не будет, точнее будет но по нажатию на иконку героя меню будет открываться у последнего игрока (ставил всех под управление человека и тестил). Крч есть функции для правильной работы которых нужно чтоб они были на экране каждого игрока человека. PEST фиксит это в мультиплеере
Мои карты: Белый Храм, Поменяться местами, Судьба королевства, Стихийные острова.
В ответ пользователю Долгий
Аватар пользователя

Да, при запуске в мультиплеере, но под управлением вторым игроком.

То есть я правильно понимаю, что когда у меня наступила ночь, то у второго игрока еще день, поэтому получается такой рассинхрон.

Завтра попробую с товарищем попробовать, посмотрю как там будет и отпишусь

В ответ пользователю Dogenator
Аватар пользователя

Наконец, смог протестировать этот скрипт в онлайне.

Вы правы, Pest решает эту проблему, все работает

Спасибо за помощь!

В ответ пользователю Dogenator
Аватар пользователя

Всем добрый день!

Встала такая задача: через скрипт выдавать заклинание "Ускорение" при прокачке навыка "Волшебство скорости" из нападения. И удалять, если навык был скручен у ментора. Нужно это так как я изменил тир заклинания "Ускорения" с 1-го на 3-ий и при прокачке "ВС", в бою заклинание становится недоступно

В файлах по скриптам я нашел пару функций, которые за это отвечают

HasHeroSkill(heroName, skillID); - проверяет наличие навыка

TeachHeroSpell(heroName, spell);  - выдает заклинание 

Забирает заклинание - ?

Единственное, что меня смущает, так это скриптовое имя героя. Если я хочу, чтобы эта функция работала на всех героев, то как следует поступить?

 

И отдельный вопрос, Триггер касания работает с первого дня или можно задать так, чтобы он работал с определенного?

 

 

Аватар пользователя
Dogenator, нужно крутить отдельный поток, который будет пробегать по всем героям игрока
while(1) do
local heroes = GetPlayerHeroes(ID_игрока);
for i, hero in heroes do
if(HasHeroSkill(hero, ID_скилла) and (not KnowHeroSpell(hero, ID_спелла))) then
TeachHeroSpell(hero, ID_спелла);
end
end
sleep(50);
end
Но на отнимание заклинания кажется функции нет, может читом разве что?
Dogenator
Триггер касания работает с первого дня или можно задать так, чтобы он работал с определенного?
Можно в обработчике касания проверять какой сейчас день, или можно вешать триггер касания не сразу по старту, а в триггере нового дня когда наступит нужный день. Триггер работает с момента когда выполнится функция Trigger().
РПГ-сценарий для HoMM5: Путь героя
ЧаВо по созданию карт для HoMM5: ЧаВо
Аватар пользователя
Если заклинание недоступно для каста (недостаточный уровень магии света), то даже выданное скриптом оно кастоваться не будет, к сожалению
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________
В ответ пользователю Jack_of_shadows
Аватар пользователя

Сделал так, как вы сказали, все получилось

Но, почему то, у меня перестали работать абсолютно все другие скрипты, помещенные в функцию нового дня. В чем может быть проблема?

Так выглядит функция, которая запускается с NEW_DAY_TRIGGER

function new_day_trigger()
haste_p1 ()
haste_p2 ()
if (GetDate(ABSOLUTE_DAY) == 2) then
Spawn_army()
end
if (GetDate(ABSOLUTE_DAY) == 3) then
day_3rd()
mentor_off ()
Trigger(OBJECT_TOUCH_TRIGGER, 'mentor_1', 'mentor_message_p1' );
Trigger(OBJECT_TOUCH_TRIGGER, 'mentor_2', 'mentor_message_p2' );
end
end

А эта функция, что вы мне прислали, которая ломает все то, что выше

function haste_p1 ()
while(1) do
local heroes = GetPlayerHeroes(PLAYER_1);
for i, hero in heroes do
if(HasHeroSkill(hero, 143) and (not KnowHeroSpell(hero, SPELL_HASTE))) then
TeachHeroSpell(hero, SPELL_HASTE);
end
end
sleep(50);
end
end

Возможно я неправильно поместил саму эту функцию haste, что до всех остальных функций обработка скрипта просто не доходит?

 



Добавлено через 2 минуты

}{0TT@6bI4
Если заклинание недоступно для каста (недостаточный уровень магии света), то даже выданное скриптом оно кастоваться не будет, к сожалению

Как ни странно, но это работает, но заклинание кастуется только на искусном уровне школы света, хотя света даже нет в прокачке

Но ломает почему то все другие скрипты

Аватар пользователя
Конструкции вида while(1) do ... end - это цикл, если в нём нет команды выхода из цикла, то он бесконечный. Когда вы вызываете haste_p1(), скрипт крутится внутри этой функции бесконечно. Для таких вещей нужно использовать отдельные потоки, функция startThread(название функции). Запустить один раз, можно прямо при старте карты, и они вечно работают.
РПГ-сценарий для HoMM5: Путь героя
ЧаВо по созданию карт для HoMM5: ЧаВо
В ответ пользователю Jack_of_shadows
Аватар пользователя

Jack_of_shadows
Конструкции вида while(1) do ... end - это цикл, если в нём нет команды выхода из цикла, то он бесконечный. Когда вы вызываете haste_p1(), скрипт крутится внутри этой функции бесконечно. Для таких вещей нужно использовать отдельные потоки, функция startThread(название функции). Запустить один раз, можно прямо при старте карты, и они вечно работают.

Спасибо вам, вот теперь все работает как надо.

Всем добра! Подскажите, пожалуйста, как сделать проверку на уровень существа? Идея следующая: когда вражеский герой дохнет, он повторно нанимается ИИ, при этом ему выдается армия своей фракции, количество существ и их уровень в ней соответствуют таковым в армии героя игрока.
Аватар пользователя
_BlackKnight_, насколько мне известно, такой готовой функции нет. Как вариант, набить табличку какому существу игрока соответствует какое существо компа и по ней вычислять.
РПГ-сценарий для HoMM5: Путь героя
ЧаВо по созданию карт для HoMM5: ЧаВо
В ответ пользователю Jack_of_shadows
Jack_of_shadows
_BlackKnight_, насколько мне известно, такой готовой функции нет. Как вариант, набить табличку какому существу игрока соответствует какое существо компа и по ней вычислять.
Не совсем понимаю, как это можно сделать, хотелось бы увидеть реализацию на конкретном примере.
Аватар пользователя
_BlackKnight_, например если игрок строго рыцарь, а ИИ строго демон, то
-- таблица соответствия, внес только пару существ, остальных по аналогии
creatures_conversion_table =
{
{CREATURE_PEASANT, CREATURE_FAMILIAR},
{CREATURE_MILITIAMAN, CREATURE_IMP},
{CREATURE_LANDLORD, CREATURE_QUASIT},
};

-- функция проверки, без обвязки касающейся в какой момент ее вызывать
-- на вход подаются имена героев игрока и ИИ.
function CheckCreaturesConversion(hero_player, hero_enemy)
for i, cr in creatures_conversion_table do
local cr_num = GetHeroCreatures(hero_player, cr[1]);
if (cr_num > 0) then
AddHeroCreatures(hero_enemy, cr[2], cr_num);
end
end
end
Если замки рандомные, то конечно всё будет чуть сложнее.
Код не проверял, мог где-то ошибиться.
РПГ-сценарий для HoMM5: Путь героя
ЧаВо по созданию карт для HoMM5: ЧаВо
Jack_of_shadows, скрипт рабочий, спасибо, только существ придется всех перечислять. поскольку на карте замки всех фракций. Немного не по теме: скачал последнюю версию героев 5.5, на ней скрипты отказываются работать, на старой версии все нормально. Пытаюсь понять, в чем проблема. 
Еще вопрос. Допустим, герой заходит в гарнизон, выставляет существ, выскакивает предложение преобразовать этих существ в существ соответствующего тира и степени грейда. Для преобразования доступны существа 5, 6 и 7 тиров. Получены могут быть существа только тех фракций, к мировоззрению которых относится игрок.  Мировоззрение определяется стартовым героем.  За преобразование взимается плата, которая рассчитывается исходя из стоимости полученного существа. Существ 7 тира Некрополиса для получения соответствующего количества существ других фракций требуется на 50% больше.  Хотелось бы увидеть реализацию на примере существ злых фракций. Стало быть, условные ангелы могут быть преобразованы в дьяволов, циклопов и иже с ними. 

Статистика

Приветствуем новейшего участника: Вязов Анатолий Аркадьевич