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

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

В ответ пользователю Нибрус
Аватар пользователя
7 лет назад
Нибрус
Помогите мне!
Как-только создают скрипт(простой, на анимацию атаки) у меня вылетает редактор карт.

А ты пишешь скрипт внутри редактора? Советую юзать отдельную прогу для этого дела, потому что сам редактор собсна вылетает вечно. Называется HoMM5MapScriptsEditor.
Автор карт:
Долина расхитителей
Выбор мира
В ответ пользователю OrnsteinDragonslayer
Аватар пользователя
7 лет назад
лично мне не удобно пользоваться этой прогой, просто перед тем, как закрыть окно, копируй текст и, если вылетело, вставляй его обратно.
Аватар пользователя
7 лет назад
Всем Добра!

Есть код:
local slot = -1;
local i_count = 0;
local id, count;
local temp_name = NHF_tempName_F("Nemor");
local count_umertvie = GetHeroCreatures("Nemor", CREATURE_WIGHT);
if count_umertvie > 0 then
for i = 0,6 do
id, count = GetObjectArmySlotCreature(temp_name,i);
if id == CREATURE_WIGHT then
slot = i;
end;
if count == 0 then
i_count = i_count + 1;
end;
end;
if i_count == 6 then
AddHeroCreatures("Nemor", CREATURE_SKELETON , 1);
sleep();
RemoveHeroCreatures("Nemor", CREATURE_WIGHT, count_umertvie);
sleep();
AddHeroCreatures("Nemor", CREATURE_BANSHEE , count_umertvie,slot);
sleep();
RemoveHeroCreatures("Nemor", CREATURE_SKELETON, 1);
sleep();
else
RemoveHeroCreatures("Nemor", CREATURE_WIGHT, count_umertvie);
sleep();
AddHeroCreatures("Nemor", CREATURE_BANSHEE , count_umertvie,slot);
sleep();
end;
end;

В режиме мультиплеера Умертвия сразу же заменяются на Баньши. В режиме же одиночной, чтобы увидеть изменение, необходимо выходить из интерфейса героя и вновь заходить. Можно ли это вылечить?
Моды для HeroesV:
NHF 0.90 : NHF - группа в VK

Карты для HeroesV:
Путешествие , Условие крови , Рука судьбы.Часть 1: В поход , Рука судьбы.Часть 2: Отчаянье , Рука судьбы.Часть 3: Восхождение , Стойкость
Абсолютная власть , Иду на Вы! , Корона Ургаша , На задворках
Мир надо уничтожить... Чтобы создать свой...
7 лет назад
Подскажите пожалуйста: как заставить боевые скрипты работать в городе? Ставлю скрипт на враж. героя - ничего, на город- тоже ничего.
Карты: Экспедиция ГрувераНаследие ШантириВременной парадоксПоиски рунной сферыПуть возвращения
В ответ пользователю AstralLein
7 лет назад
AstralLein
нужно начинать осаду (команда SiegeTown) через скрипт и в настройках команды указать нужный скрипт.

Та я решил проблему: поставил скрипт на атакующего игрока.
Карты: Экспедиция ГрувераНаследие ШантириВременной парадоксПоиски рунной сферыПуть возвращения
7 лет назад
Есть код:
function dwellings()
for i, dw_type in {"FAIRIE_TREE", "WOOD_GUARD_QUARTERS", "HIGH_CABINS", "PRESERVE_MILITARY_POST"} do
for j, dw in GetObjectNamesByType(dw_type) do
ELF_DWLS[dw] = "откл"
SetObjectEnabled(dw, nil)
Trigger(4, dw, "TransformDwelling")
end
end
startThread(dwellings2)
end

startThread(dwellings)

function dwellings2()
while 1 do
repeat
sleep()
until IsPlayerCurrent(1)
for dwelling, state in ELF_DWLS do
if state == "вкл" then
ELF_DWLS[dwelling] = "откл"
SetObjectEnabled(dwelling, nil)
Trigger(4, dwelling, "TransformDwelling")
end
end
repeat
sleep()
until not IsPlayerCurrent(1)
for dwelling, state in ELF_DWLS do
if state == "откл" then
ELF_DWLS[dwelling] = "вкл"
SetObjectEnabled(dwelling, 1)
Trigger(4, dwelling, nil)
end
end
end
end

function TransformDwelling(hero, hut)
if GetCurrentPlayer() == 1 then
QuestionBox (path.."transformd.txt" , 'transformnok("'..hut..'")' );
end
end

function transformnok(hut)
if not (GetPlayerResource(1, CRYSTAL) >= 15 and GetPlayerResource(1,GEM) >= 10) then
ShowFlyingSign(path.."nores.txt",hut,-1,10)
return
end
SetPlayerResource(1,CRYSTAL, (GetPlayerResource(1,CRYSTAL) - 15))
SetPlayerResource(1,GEM, (GetPlayerResource(1,GEM) - 10))
PlayVisualEffect('/Effects/_(Effect)/Spells/Bless.xdb#xpointer(/Effect)', hut)
sleep(5)
Trigger(4, hut, nil)
ELF_DWLS[hut] = nil
ReplaceDwelling(hut,TOWN_HEAVEN)
sleep(1)
SetObjectOwner(hut,1)
SetObjectEnabled(hut,true)
sleep(1)
return function()
end
end

Мне нужно сделать, что если одно задание активно или невыполненное, тогда перестройку строений разрешить, а если выполнено, то нет. Так вот, можете подсказать, пожалуйста, куда мне написать саму проверку?
Карты: Экспедиция ГрувераНаследие ШантириВременной парадоксПоиски рунной сферыПуть возвращения
Аватар пользователя
7 лет назад
function TransformDwelling(hero, hut)
local state = GetObjectiveState('нужное_задание')
if GetCurrentPlayer() == 1 and (state == OBJECTIVE_ACTIVE or state == OBJECTIVE_FAILED) then
QuestionBox (path.."transformd.txt" , 'transformnok("'..hut..'")' );
end
end

как-то так, если правильно понял условия
Нет войне.
В ответ пользователю Gerter
7 лет назад
Gerter
function TransformDwelling(hero, hut)
local state = GetObjectiveState('нужное_задание')
if GetCurrentPlayer() == 1 and (state == OBJECTIVE_ACTIVE or state == OBJECTIVE_FAILED) then
QuestionBox (path.."transformd.txt" , 'transformnok("'..hut..'")' );
end
end

как-то так, если правильно понял условия

Все работает, спасибо.
Карты: Экспедиция ГрувераНаследие ШантириВременной парадоксПоиски рунной сферыПуть возвращения
Аватар пользователя
7 лет назад
Приветствую. Может кто найдётся для указания нужного решения по скрипту:
В общем, есть определённая группа существ, которых по заданию надо будет уничтожить, при этом надо в определённый игровой день провести проверку их существования, чтобы указать на выполнение/невыполнение задания и, в случае, если какие-то из этих существ ещё находятся на карте, то передать их в армию определённого героя. Знаю, что нечто подобное реализовывалось в первой миссии кампании Фриды, однако как там это реализовано я, к сожалению, не понимаю
В ответ пользователю Grigoriy
Аватар пользователя
7 лет назад
Grigoriy
Приветствую. Может кто найдётся для указания нужного решения по скрипту:
В общем, есть определённая группа существ, которых по заданию надо будет уничтожить, при этом надо в определённый игровой день провести проверку их существования, чтобы указать на выполнение/невыполнение задания и, в случае, если какие-то из этих существ ещё находятся на карте, то передать их в армию определённого героя. Знаю, что нечто подобное реализовывалось в первой миссии кампании Фриды, однако как там это реализовано я, к сожалению, не понимаю

так, я не знаю, какие у вас общие познания в скриптах, поэтому попробую на пальцах:

Сначала нужно задать скриптовые имена нужным отрядам в редакторе и настроить их так, чтобы они гарантированно присоединялись к героям нужного вам игрока(нужные пункты выделены на скрине)



Затем, уже в скрипте, для удобства запилить таблицу, через которую будет определять наличие отрядов на карте:
stacks = {'скриптовое_имя_отряда_1', 'скриптовое_имя_отряда_2'... и т.д}

Потом использовать триггер нового дня для ежедневной проверки на существование отрядов:
function NewDay()
if GetDate(DAY) == 'день, когда нужно произвести проверку' then
-- далее проверка существования отрядов и передача нужному герою
for i, stack in stacks do
if IsObjectExists(stack) then
MakeHeroInteractWithObject('Скриптовое_имя_нужного_героя', stack)
end
end
end
end

Trigger(NEW_DAY_TRIGGER, 'NewDay')
Вложения 1
1 файл • Общий размер: 9,9 KB
Нет войне.
В ответ пользователю Gerter
Аватар пользователя
7 лет назад
Gerter
так, я не знаю, какие у вас общие познания в скриптах, поэтому попробую на пальцах:

Сначала нужно задать скриптовые имена нужным отрядам в редакторе и настроить их так, чтобы они гарантированно присоединялись к героям нужного вам игрока(нужные пункты выделены на скрине)



Затем, уже в скрипте, для удобства запилить таблицу, через которую будет определять наличие отрядов на карте:
stacks = {'скриптовое_имя_отряда_1', 'скриптовое_имя_отряда_2'... и т.д}

Потом использовать триггер нового дня для ежедневной проверки на существование отрядов:
function NewDay()
if GetDate(DAY) == 'день, когда нужно произвести проверку' then
-- далее проверка существования отрядов и передача нужному герою
for i, stack in stacks do
if IsObjectExists(stack) then
MakeHeroInteractWithObject('Скриптовое_имя_нужного_героя', stack)
end
end
end
end

Trigger(NEW_DAY_TRIGGER, 'NewDay')

Благодарю за ответ
То, что можно задать разное отношение существа к разным игрокам, я не знал
Таблицу из существ показанную выше я создал, но указанные существа, по квесту, могут быть уничтожены до указанного времени, то бишь, как я со своей дурной головушкой это понимаю, мне ещё нужна функция на проверку существования этих существ в принципе, для выполнения задания до указанного дня
Аватар пользователя
7 лет назад
ну это просто, делаете поток проверки:
function CheckStacks()
while 1 do
local x
for i, stack in stacks do
if IsObjectExists(stack) then
x = not nil
end
end
if not x then
SetObjectiveState('нужное_задание', OBJECTIVE_COMPLETED)
break
end
if GetDate(DAY) == нужный_день then
break
end
sleep()
end
end

startThread(CheckStacks)
Нет войне.
В ответ пользователю Gerter
Аватар пользователя
7 лет назад
Gerter
ну это просто, делаете поток проверки:
function CheckStacks()
while 1 do
local x
for i, stack in stacks do
if IsObjectExists(stack) then
x = not nil
end
end
if not x then
SetObjectiveState('нужное_задание', OBJECTIVE_COMPLETED)
break
end
if GetDate(DAY) == нужный_день then
break
end
sleep()
end
end

startThread(CheckStacks)

Ага. Большое спасибо

Статистика

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