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

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

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

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

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

Та я решил проблему: поставил скрипт на атакующего игрока.
Карты: Экспедиция ГрувераНаследие ШантириВременной парадоксПоиски рунной сферыПуть возвращения
Есть код:
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

Мне нужно сделать, что если одно задание активно или невыполненное, тогда перестройку строений разрешить, а если выполнено, то нет. Так вот, можете подсказать, пожалуйста, куда мне написать саму проверку?
Карты: Экспедиция ГрувераНаследие ШантириВременной парадоксПоиски рунной сферыПуть возвращения
Аватар пользователя
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
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

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

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

Благодарю за ответ
То, что можно задать разное отношение существа к разным игрокам, я не знал
Таблицу из существ показанную выше я создал, но указанные существа, по квесту, могут быть уничтожены до указанного времени, то бишь, как я со своей дурной головушкой это понимаю, мне ещё нужна функция на проверку существования этих существ в принципе, для выполнения задания до указанного дня
Аватар пользователя
ну это просто, делаете поток проверки:
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
Аватар пользователя
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)

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

Статистика

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