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

Сообщения от Скрипты для начинающих

Аватар пользователя
А. Ну, то есть замечание номер 3 всё же сыграло, похоже. Боюсь, придётся усложнять скрипт -- задание gaz сделать во вкладке objectives, общим, но поначалу невидимым. Выдавать по OBJECT_TOUCH_TRIGGER с домиком, а домику стандартные функции отключить (сначала выдавать сообщение, потом -- задание).
Но сначала надо проверить -- если прописать gaz общим и доступным с самого начала, будет ли работать.
 

К А
Стикеры GBF в Telegram
Всем доброго времени суток. Тупой вопрос по MessageBox. Куда положить надо текстовый файл?
Аватар пользователя
Куда-нибудь в архив с картой. Путь к текстовому файлу в архиве с картой = тот путь, что Вы пишете в скриптах.
Обычно кладут туда, где лежат map.xdb, terrain.bin и прочее, что связано с данной конкретной картой.
 

К А
Стикеры GBF в Telegram
Я вот просто туплю, где этот архив. У меня в каталоге Maps лежит просто сама карта
Аватар пользователя
Это оно и есть. При старте редактора карт этот архив (который на самом деле zip, пусть и написано у него иначе) распаковывается, после закрытия редактора все изменения туда запаковываются.
 

К А
Стикеры GBF в Telegram
То есть когда я открываю карту в редакторе, в каталог Maps нужно засунуть текстовый файл?
Аватар пользователя
Не, там какой-то другой каталог... Не помню точно, вроде Editor -> H5mMods -> папка с названием карты
Но, чтобы не опростоволоситься, лучше закрыть редактор и открыть архив с картой с помощью WinRAR. И туда уже засунуть.
 

К А
Стикеры GBF в Telegram
Доброго времени суток, я вернулся к героям. И все еще не разобрался с MessageBox. Как zip файл открываться не хочет. Можете приложить пару скринов или снова разложить все по полочкам?
Аватар пользователя
Файл с расширением .h5m открываете же, верно?
 

К А
Стикеры GBF в Telegram
Да, я пытаюсь разархивировать название_карты.h5m . Но это чисто не выходит. Не могли бы вы описать другой способ подробнее?
Аватар пользователя
Здравствуйте,можно,пожалуйста,получить совет:у меня на карте есть строение, в котором хочу нанимать войска с помощью скриптовых функций,так вот, как сделать так,чтобы эти функции выполнялись последовательно,не перебивая друг-друга,вроде, согласно руководству, должно быть условие if во второй функции,но какое...
Вот функции:
--Начало--
--Naim1--
function Naim1(hero)
Naim1_hero = hero
MessageBox("/Maps/SingleMissions/Time of Troubles1/Naim1MB.txt")
QuestionBox("/Maps/SingleMissions/Time of Troubles1/Naim1QB.txt", "Naim1_ok");
end
function Naim1_ok()
local gold = GetPlayerResource(PLAYER_1, GOLD)
if gold >= 3000 then
Trigger(OBJECT_TOUCH_TRIGGER, "Tavern", nil)
SetPlayerResource(PLAYER_1, GOLD, gold - 3000)
AddHeroCreatures(Naim1_hero, 4, 30)
else
MessageBox("/Maps/SingleMissions/Time of Troubles1/Naim2MB.txt")
end
end
Trigger(OBJECT_TOUCH_TRIGGER, "Tavern", "Naim1")
--Naim2--
function Naim2(hero)
Naim2_hero = hero
MessageBox("/Maps/SingleMissions/Time of Troubles1/Naim3MB.txt")
QuestionBox("/Maps/SingleMissions/Time of Troubles1/Naim2QB.txt", "Naim2_ok");
end
function Naim2_ok()
local gold = GetPlayerResource(PLAYER_1, GOLD)
if gold >= 7000 then
Trigger(OBJECT_TOUCH_TRIGGER, "Tavern", nil)
SetPlayerResource(PLAYER_1, GOLD, gold - 7000)
AddHeroCreatures(Naim1_hero, 11, 3)
else
MessageBox("/Maps/SingleMissions/Time of Troubles1/Naim4MB.txt")
end
end
Trigger(OBJECT_TOUCH_TRIGGER, "Tavern", "Naim2")
--Конец--
В ответ пользователю Vladislav A-V
Аватар пользователя
Если нужно, чтобы вторая функция выполнялась только после того, как первые существа были наняты, то соответственно можно под условием "if gold >= 3000 then" заменить в триггере nil на "Naim2". Тогда так получится:

...
if gold >= 3000 then
Trigger(OBJECT_TOUCH_TRIGGER, "Tavern", "Naim2")
SetPlayerResource(PLAYER_1, GOLD, gold - 3000)
AddHeroCreatures(Naim1_hero, 4, 30)
else ...
А Trigger(OBJECT_TOUCH_TRIGGER, "Tavern", "Naim2") в самом конце убрать.
В таком случае в начале активируется триггер на "Naim1", после найма он заменится на "Naim2", а после найма вторых существ обнулится.
Аватар пользователя
Спасибо,большое,помогло.Можно ли,пожалуйста,ещё совет? Как реализовать такую задумку:изначально нельзя отстроить в городе определённое здание,но его можно разблокировать и улучшить,выполнив второстепенный квест. Первоначальное диалоговое окно с NPC, я сделал,задание тоже настроил(уничтожение отряда нейтралов),Но возникли вопросы - как при выполнении задания,вернувшись к NPC заблокировать первоначальную функцию с диалогом №1,и запустить функцию с диалогом №2 в том же регионе,и разблокировать здание в качестве награды?
----
Функция вступление, с диалогом №1
----
function Barracks_build(hero)
Barracks_hero = hero
MessageBox("/Maps/SingleMissions/Time of Troubles1/Barracks_building.txt",nil)
QuestionBox("/Maps/SingleMissions/Time of Troubles1/Barracks_buildingQB.txt", "Barracks_build_ok",nil);
end
Trigger(REGION_ENTER_AND_STOP_TRIGGER, "QuestSword", "Barracks_build",nil)
----
Функция согласия, с диалогом №2
----
function Barracks_build_ok()
MessageBox("/Maps/SingleMissions/Time of Troubles1/Barracks_building1.txt");
SetObjectiveState("zadanie1", OBJECTIVE_ACTIVE,1);
Trigger(REGION_ENTER_AND_STOP_TRIGGER, "QuestSword", "Barracks_build",nil)
end
----
Аватар пользователя
Как вариант, в функции Barracks_build_ok можно написать:
function Barracks_build_ok()
MessageBox("/Maps/SingleMissions/Time of Troubles1/Barracks_building1.txt");
SetObjectiveState("zadanie1", OBJECTIVE_ACTIVE,1);
Trigger(REGION_ENTER_AND_STOP_TRIGGER, "QuestSword", nil)
startThread( _Barracks_build_mob_monitor);
end
И сама функция _Barracks_build_mob_monitor:
function  _Barracks_build_mob_monitor ()
while 1 do
sleep(2);
if not Exists("Neutral") then
Trigger(REGION_ENTER_AND_STOP_TRIGGER, "QuestSword", "Barracks_build_2");
break
end;
end;
end;

Она в отдельном потоке проверяет, существует ли отряд 'Neutal' (Exists("Neutral")). Если в какой-то момент его победили, то триггер на регион меняется на "Barracks_build_2" - функция с диалогом №2.
Выполнение квеста зависит от того, какой у него тип (kind) стоит. Если OBJECTIVE_KIND_MANUAL, то его можно завершить строчкой:
SetObjectiveState('zadanie1', OBJECTIVE_COMPLETED);
Поставить его надо под условие if not Exists("Neutral") then до триггера.
Если не OBJECTIVE_KIND_MANUAL, а настроенный на уничтожение отряда, то должен сам засчитаться.
С разблокировкой зданий не сталкивался, но тут скорее всего поможет SetTownBuildingLimitLevel.
Аватар пользователя
Спасибо вам большое,основное условие прекрасно работает,эх, теперь искать дальше теперь этот скрипт с разблокировкой здания,такое встречал во второй миссии за некромантов в кампании ToE, что то связанное с вампирами.

Статистика

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