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

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

В ответ пользователю Победитель
Аватар пользователя
15 лет назад
Гильраен
О Господи! Это MoveHero тоже не работает!! Я могу понять этих двух героев- на смерть идти не хочется, но со скриптами они же должны работать!!! У меня герои врага либо желают что хотят (пока я не посавил блоки) или просто стоят (как в последних трёх случаях). Я их уже и. MoveHero зову, и AiAttractorom тоже приманиваю, но нет же - упёрлись рогом!
Возможно MoveHero работает только, когда путь к объекту полностью свободен, т.е. не заблокирован монстром или вражеским героем. А проверить это можно функцией CanMoveHero(heroName,x,y,floorID)
Аватар пользователя
15 лет назад
MoveHero -- хитрая вообще такая вещь. Он может не работать, если точка предназначения у героя находится на "зелёной" клетке. Пример: в Гномании не получилось заставить с помощью этой функции напасть героями на гарнизон. Делал так: посылал на соседнюю клетку, а там стоит регион, и для него прописан триггер:
function Gar(hero)
if hero=="bla-bla" then
MakeHeroInteractWithObject("bla-bla","Garnison");
end;
end;
Аватар пользователя
15 лет назад
Ну я уже разобрался. Просто герои в упор не хотели атаковать города. Просто посатвил героев из городов на соседнюю клетку (кстати в город я их запихивал телепортом; есть ли способ посавить героя "в гости" и выключить его?). И можно теперь всё же поподробнее о заданиях? Где из настроить, как добавить описания? Как сделать "пустое" задание (есть только описание, выполняется скриптом)?
Аватар пользователя
15 лет назад
Ну я уже разобрался. Просто герои в упор не хотели атаковать города. Просто посатвил героев из городов на соседнюю клетку
блин, как же у меня герои атакуют города в Астралии? :D
разве у меня особенные скрипты? :)
Аватар пользователя
15 лет назад
На скриншоте к сообщ. ном. 32 видно дерево свойств карты. Раскрываешь, как там. Потом заполняешь name,captionFileRef (название)и descriptionFileRef (описание). Если нужно, чтобы не было видно вначале, IsHidden и IsInitalyVisible на false. Усё.
В ответ пользователю Ment
Аватар пользователя
15 лет назад
Ment
MoveHero -- хитрая вообще такая вещь. Он может не работать, если точка предназначения у героя находится на "зелёной" клетке. Пример: в Гномании не получилось заставить с помощью этой функции напасть героями на гарнизон. Делал так: посылал на соседнюю клетку, а там стоит регион, и для него прописан триггер:
function Gar(hero)
if hero=="bla-bla" then
MakeHeroInteractWithObject("bla-bla","Garnison");
end;
end;

А эта функция работает только если герой находится рядом с объектом?
Если нет, то можно даже не ставить регион и триггер.
Аватар пользователя
15 лет назад
Можно подсказать, как выглядит условие, которое срабатывает при гибели отряда или вражеского героя?
В ответ пользователю Победитель
Аватар пользователя
15 лет назад
Победитель
Можно подсказать, как выглядит условие, которое срабатывает при гибели отряда или вражеского героя?
Пример с моей карты:

if GetSavedCombatArmyHero(a1,0)=="Giovanni" then
Loose();
end;
if (GetSavedCombatArmyHero(a1,1)=="Giovanni") and (GetSavedCombatArmyHero(a1,0)=="Zehir") then
MessageBox(GetMapDataPath().."talk_of_grigorio_6.txt");
SetObjectiveState("kill_pl5", OBJECTIVE_COMPLETED, PLAYER_1 );
SetPlayerResource(PLAYER_1 ,GOLD, GetPlayerResource(PLAYER_1 , GOLD)+20000);
end;
if  flag_bad_grig==1 then
if (GetSavedCombatArmyHero(a1,1)=="Giovanni") and (GetSavedCombatArmyHero(a1,0)=="Duncan") then
SetObjectiveState("kill_pl6", OBJECTIVE_COMPLETED, PLAYER_1 );
MessageBox(GetMapDataPath().."talk_of_grigorio_5.txt");
SetObjectEnabled("portal1", true);
end;
else
if (GetSavedCombatArmyHero(a1,1)=="Giovanni") and (flag_britt==1) then
count_stacks = GetSavedCombatArmyCreaturesCount(a1,0);
for i=0,count_stacks-1 do
cr, numer, dead = GetSavedCombatArmyCreatureInfo(a1,0,i);
if cr==cr_ded then
Strelki_dead= Strelki_dead + dead;
end;
end;
Вот примеры кода. Если разбираешься -поймёшь, если нет - потребуй объяснения.
Пример частный, в котором один герой побеждает другого, либо валит отряд и собирает их численность.
Или надо чтобы он учитывал любое умирание врага?
Тогда вот:
Формат вызываемой процедуры:
void sProc( sHeroName )
Останов:
Trigger(PLAYER_REMOVE_HERO_TRIGGER, nPlayerID, nil)
Процедура вызывается, когда игрок nPlayerID теряет героя. Имя данного героя передается в процедуру в качестве параметра
Аватар пользователя
15 лет назад
Спасибо, Dyrman. Самый нижний вариант подошёл. Только у меня появилась большая проблема. Скрипты работаю через строчку. Вот, например:
OpenCircleFog(83, 14, 0, 4, PLAYER_1); -- работает,
а тремя строчками ниже:
SetPlayerResource(PLAYER_1, GOLD, 5000); -- нет. Обе строчки без функций, как они работаю, видел в чужих картах. В чём может быть проблема?

P.S.: Не работает всё, начиная со строчки
SetRegionBlocked("AntiAI", true, PLAYER_2);
Могла она "испортить" всё, что идёт после неё?
В ответ пользователю Победитель
Аватар пользователя
15 лет назад
Победитель

P.S.: Мне показалось, что код не работает после строчки
MessageBox("/Maps/SingleMissions/***********/msg1.txt");
Если она некорректна, может ли она заблокировать всё, что идёт после неё?
Именно так. После неправильной строчки в функции все последующие не работают.
Смотрим кодировку в текстовом файле, проверяем правильность пути(смотрим и правильность написания других функций), и лучше пользуемся функцией GetMapDataPath(), т.к. если поменять название файла карты, то обозначенные пути перестанут существовать.
GetMapDataPath() - определяет путь к основным файлам карты.
.. - строковое объединение
пример:
MessageBox(GetMapDataPath().."talk_of_grigorio_6.txt");


Добавлено через 17 минут
Победитель

P.S.: Не работает всё, начиная со строчки
SetRegionBlocked("AntiAI", true, PLAYER_2);
Могла она "испортить" всё, что идёт после неё?
Что идёт после этой строки?
Выложи весь скрипт.
Что пишет консоль? Консоль - хороший помощник в выловлении багов ;)
И ещё просьба: редактить сообщения обычно , а не как моддер, а то времени изменения не видно, а я получаются, отвечаю на несуществующие вопросы(( :(
Аватар пользователя
15 лет назад
Можно поподробнее объяснить, как оформлять функцию, которую вы выкладывали в предыдуще сообщении?

void -название функции?- ( -имя убитого героя- )
-то, что происходит при смерти героя?-
Trigger(PLAYER_REMOVE_HERO_TRIGGER, nPlayerID, nil)
end;
end;
-ещё раз триггер с именем процедуры?-

P.S.: Ошибки в предыдущем коде исправил, спасибо ещё раз за помощь.
В ответ пользователю Победитель
Аватар пользователя
15 лет назад
Победитель
Можно поподробнее объяснить, как оформлять функцию, которую вы выкладывали в предыдуще сообщении?

void -название функции?- ( -имя убитого героя- )
-то, что происходит при смерти героя?-
Trigger(PLAYER_REMOVE_HERO_TRIGGER, nPlayerID, nil)
end;
end;
-ещё раз триггер с именем процедуры?-

P.S.: Ошибки в предыдущем коде исправил, спасибо ещё раз за помощь.
Пример:
DedF (GGDed)
if GGded == "Zosya" then
..........тут код
end;
end;
Trigger(PLAYER_REMOVE_HERO_TRIGGER, 1, "DedF")

Как-то так вроде
Аватар пользователя
15 лет назад
Консоль ругается :(. Говорит:
Script ERROR: attempt to call a nil value
Идёт это в самом конце - похоже, это обсуждаемая функция.
P.S.: На второй end редактор скриптов ругается, я его убрал. Может, надо какое-нибудь else прописать?
В ответ пользователю Победитель
Аватар пользователя
15 лет назад
Победитель
Консоль ругается :(. Говорит:
Script ERROR: attempt to call a nil value
Идёт это в самом конце - похоже, это обсуждаемая функция.
P.S.: На второй end редактор скриптов ругается, я его убрал. Может, надо какое-нибудь else прописать?
Тупо копирнул или переделал на свой лад? С ЭНДами всё нормально. Добавь определитель функции - слово function Ну это и так понятно, думаю. Вряд ли ты тупо копирнул.
Вызываешь nil вместо чего-то. Проверяй, существует ли герой, функция, параметры, если же, конечно, не это слово - function :)

"Zosya" - естесственно вымышленное имя. Там должно быть имя вражеского героя, если имя вражеского героя любое, то просто убери условие.
15 лет назад
Здравствуйте, я новичок в heroesworldе. Немного покопался в самых простых скриптах, некоторые получились. Но все же это неизмеримо мало по сравнению с теми, что прописаны в некоторых картах, поэтому надеюсь на сотрудничество с Вами.

Статистика

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

Сейчас на сайте 5 пользователей 1258 гостей