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

Сообщения от Текущие вопросы и ответы по редактору карт

Аватар пользователя
Годрикова впадина, ваш скрипт будет неправильно работать в случае недостатка ресурсов. Но это мелочь. Разрушение замка происходит функцией RazeTown(), с этим всё правильно. Я с ней не эксперементировал, поэтому практических советов дать не могу, но в официальной документации она достаточно подробно описана, и вроде бы ничего сложного не имеет (кроме создания модельки разрушенного замка):
RazeTown

RazeTown – raze a town on the map

Syntax

RazeTown(townName);

Description

Removes the specified town from the map and replaces it with a static object – razed town. The
‘razed town’ object is determined by the razedfield in AdvMapTownShared. If this field is
empty, the town can’t be razed. The set of blocking tiles of the razed town must be the same as
those of the original one’s. The razed town, as any other static object, must have no interactive
tiles.

townName– town name

Warning!

The modifications made in the "Shared" properties ofan object will affect all the objects of that
kind in the game.
If you want your modification to be effective only on a specific map follow these steps:
1)Place on the map the desired object.
2)Go to the Shared field of that object.
3)In the Objects list create a new folder (Right click-New Folder) with the name of your
map.
4)Place in this folder a copy of the object you want to modify.
5)Make the desired modifications to the copy.
For the modifications to be in effect makesure that the path of the shared property leads to
the copy.
РПГ-сценарий для HoMM5: Путь героя
ЧаВо по созданию карт для HoMM5: ЧаВо
В ответ пользователю Jack_of_shadows
Про то что неправильно я знаю, это основной кусок, а так там ещё строчек 10-15. Но вот ключевая проблема какраз с заменой модельки замка. Ибо потом я хочу ещё подобной функцией из руин нормальный замок сделать. Ладно, буду тыкаться и пробовать, может что то да выйдет.

Добавлено через 1 минуту
Руководство тоже читал, ладно завтра прочитаю ещё может додумаюсь.
В ответ пользователю Годрикова впадина
Как мне сделать проверку того что бой проведён? В моём случае если бой был проведён, то при прикосновении к другому объекту задание выполняется.
Аватар пользователя
Годрикова впадина, если это бой с монстром, то проще всего проверять наличие монстра на карте с помощью IsObjectExists(). Если с героем, то есть триггер на смерть героя.
РПГ-сценарий для HoMM5: Путь героя
ЧаВо по созданию карт для HoMM5: ЧаВо
В ответ пользователю Jack_of_shadows
Нет, бой не с монстром, а скриптовый при прикосновению к объекту. С монстром я знаю как, а вот с этим пока гадаю.
Аватар пользователя
Годрикова впадина, у StartCombat есть параметр, принимающий название функции, вызываемой по окончанию битвы.
РПГ-сценарий для HoMM5: Путь героя
ЧаВо по созданию карт для HoMM5: ЧаВо
В ответ пользователю Jack_of_shadows
Это будет что то типо: if function X end? Или как мне проверку сделать? А так я понял спасибо.
Написал скрипт, тред который проверяет посещены ли определенные хранители ключей и в зависимости от условий выдаёт сообщение. Он работает так как мне надо, но почему-то полностью засирает консоль варнингами. Помогите разобраться, что не так.
Скрипты:

function StartKeyMasterObserv()
Trigger(NEW_DAY_TRIGGER, "StartKeyMasterObserv", nil );
print("Start keymaster observe thread");
startThread(CheckKeyMasterFoundThread);
end;
function CheckKeyMasterFoundThread()
GreenKeymasterMessageNotShow = true;
RedKeymasterMessageNotShow = true;
TanKeymasterMessageNotShow = true;
repeat
if HasBorderguardKey(PLAYER_1, GREEN_KEY) and GreenKeymasterMessageNotShow then
GreenKeymasterMessageNotShow = false;
MessageBox(GetMapDataPath().."KeymasterMessage/Green.txt");
end;
if HasBorderguardKey(PLAYER_1, RED_KEY) and RedKeymasterMessageNotShow then
RedKeymasterMessageNotShow = false;
MessageBox(GetMapDataPath().."KeymasterMessage/Red.txt");
end;
if HasBorderguardKey(PLAYER_1, TAN_KEY) and TanKeymasterMessageNotShow then
TanKeymasterMessageNotShow = false;
MessageBox(GetMapDataPath().."KeymasterMessage/Tan.txt");
end;
sleep(5);
until(HasAllKeymasterFound())
end;
function HasAllKeymasterFound()
if HasBorderguardKey(PLAYER_1, GREEN_KEY) and HasBorderguardKey(PLAYER_1, RED_KEY) and HasBorderguardKey(PLAYER_1, TAN_KEY) then
MessageBox(GetMapDataPath().."KeymasterMessage/All.txt");
print("Keymaster thread finish");
return true;
end;
return false;
end;
Варнинги:
В ответ пользователю am-wrag
Аватар пользователя
am-wrag
Написал скрипт, тред который проверяет посещены ли определенные хранители ключей и в зависимости от условий выдаёт сообщение. Он работает так как мне надо, но почему-то полностью засирает консоль варнингами. Помогите разобраться, что не так.
Скрипты:

function StartKeyMasterObserv()
Trigger(NEW_DAY_TRIGGER, "StartKeyMasterObserv", nil );
print("Start keymaster observe thread");
startThread(CheckKeyMasterFoundThread);
end;
function CheckKeyMasterFoundThread()
GreenKeymasterMessageNotShow = true;
RedKeymasterMessageNotShow = true;
TanKeymasterMessageNotShow = true;
repeat
if HasBorderguardKey(PLAYER_1, GREEN_KEY) and GreenKeymasterMessageNotShow then
GreenKeymasterMessageNotShow = false;
MessageBox(GetMapDataPath().."KeymasterMessage/Green.txt");
end;
if HasBorderguardKey(PLAYER_1, RED_KEY) and RedKeymasterMessageNotShow then
RedKeymasterMessageNotShow = false;
MessageBox(GetMapDataPath().."KeymasterMessage/Red.txt");
end;
if HasBorderguardKey(PLAYER_1, TAN_KEY) and TanKeymasterMessageNotShow then
TanKeymasterMessageNotShow = false;
MessageBox(GetMapDataPath().."KeymasterMessage/Tan.txt");
end;
sleep(5);
until(HasAllKeymasterFound())
end;
function HasAllKeymasterFound()
if HasBorderguardKey(PLAYER_1, GREEN_KEY) and HasBorderguardKey(PLAYER_1, RED_KEY) and HasBorderguardKey(PLAYER_1, TAN_KEY) then
MessageBox(GetMapDataPath().."KeymasterMessage/All.txt");
print("Keymaster thread finish");
return true;
end;
return false;
end;
Варнинги:
Замените глобальные переменные так, чтобы они не принимали значение nil, например, на 1 и 0. И false везде замените на nil.

В итоге, если уберутся все обращения к пустым глобальным переменным (со значением nil), то уйдут и предупреждения.
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
Спасибо.
Странновато тут конечно с построением кода.
Проблема в HasBorderguardKey(PLAYER_1, RED_KEY). Если обращаться по названию то функция возвращает nil, если ключник не посещен, когда посещен - всё нормально. Когда я заменил имя на номер( HasBorderguardKey(PLAYER_1, 1) ), вкупе с остальными рекомендациями - оповещения пропали.
В ответ пользователю am-wrag
Может кто то написать как примерно будет выглядеть проверка определённого скриптового боя?:confused:
Аватар пользователя
Такой вопрос возник. Поиск по теме не дал результатов. Собственно, вопрос. Сделал задание, но хочу, чтобы изначально его не было видно, а показывалось только при "активации" так сказать. Сделал скрипт, всё работает, но сама активация задания происходит без оповещения звукового и нет иконки вверху экрана, мол задачи обновлены. Как это решить? (само задание в дневнике показывается корректно).
Так же заметил, что при выполнении условий задания (убийстве враж. героя) задание само не выполняется, а остаётся висеть. Вот настройки этого задания.
Автор карт:
Долина расхитителей
Выбор мира
Аватар пользователя
isInitialyActive поставить false и ShowCompleted тоже, чтобы убиралось после выполнения
Нет войне.
В ответ пользователю Gerter
Аватар пользователя
Gerter
isInitialyActive поставить false и ShowCompleted тоже, чтобы убиралось после выполнения

Теперь вместо названия и описания задания пустые поля, и всё равно не засчитывает выполнение.
Я вот думаю, мб дело в скрипте? Я там юзал команду SetObjectiveVisible. Мб стоит изменить на GetObjectiveState, что это изменит?
Автор карт:
Долина расхитителей
Выбор мира
Аватар пользователя
SetObjectiveVisible() по идее влияет на видимость задания в интерфейсе, мб если там второй параметр nil у тебя, то что то может неправильно показываться. Еще, есть вариант, что задания типа KIND_DEFEAT_HERO не могут обрабатываться скриптом, если верить гайду от Jack_of_Shadows, то для этого нужен KIND_MANUAL. Но насчет этого не уверен
Нет войне.

Статистика

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