Герои Меча и Магии 5 - Картостроительство (Редактор карт)В этом разделе можно обсуждать все что касается редактора карт для Heroes of Might and Magic V. Так же здесь обсуждаем картостроительство.
Совсем недавно начал осваивать скрипты, даже самые простейшие которые расписанны по 5 раз подряд выхывают трудности, однако вроде разобрался. Нужна помощь в данном вопросе. Не могу понять как правильно пользоваться командой : "ShowFlyingSign"
к тому же смогу ли я к "ShowFlyingSign" добавить "PLAYERFLT_1"?? Так как создаю мультиплеерную карту , хочу что бы сообщение выдавало первому игроку чуть выше использовал :
В ShowFlyingSign есть еще параметры: имя объекта, от которого будет отлетать сообщение; номер игрока, которому будет сообщение видно (-1, если всем); длительность полета сообщения в секундах. Порядок лучше проверить в мануале по скриптовым функциям.
Регион не есть объект, объект это герой, замок или скажем куст с именем. В функцию триггера передается имя героя, ступившего в регион, проще всего его и использовать. Player_1 вероятно не сработает, поскольку это совсем не то же самое, что PLAYER_1. Я бы рекомендовал скачать любую сюжетную карту, достаточно насыщенную скриптами, и по любой непонятной функции просто искать пример использования в ней.
Спасибо за ответы) Думаю поищу карту со скриптами , но в данной ситуации решил не мучаться а воспользоваться шаблоном из руководства "OGO" через "тоуч обьект"
Подскажите,а возможно ли сделать так чтобы один герой компьютера каждый ход отслеживал кординаты другого героя компьютера)
Ну как бы заплатил герою через QuestionBox,и он с EnableHeroAl и MoveHero побежал твоего врага убивать. Как сделать чтобы первый герой в начале каждого хода запрагивал кординаты второго героя и двигался в них? . До тех пор пока сам не погибнет.
Городов и гарнизонов нет,MoveHero работает отлично. Заранее огромное спасибо.
Вот сокращенный вариант из моей карты, только комп за игроком гонится, поэтому может будет не совсем так выглядеть, как вам хотелось. hero герой компьютера, player_hero соответственно герой игрока. Запускать как поток. Комп пытается допрыгать до игрока в начале хода, плюс если игрок за это время быстро отойдет в сторону, это тоже корректно обработается.
function MainKnightSavedHeroReturnWithPlayerThread()
local hero = quest_main_knight.AttackParam('hero'); local start_date = GetDate(ABSOLUTE_DAY); local move_date = 0; local curr_date; local hx_last, hy_last, hf_last = -1, -1, -1; local hx_curr, hy_curr, hf_curr;
while(1) do if(IsObjectExists(hero)) then
if(IsObjectExists(player_hero)) then hx_curr, hy_curr, hf_curr = GetObjectPosition(player_hero); if((hx_last ~= hx_curr) or (hy_last ~= hy_curr) or (hf_last ~= hf_curr)) then hx_last, hy_last, hf_last = hx_curr, hy_curr, hf_curr; MoveHeroRealTime(hero, hx_curr, hy_curr, hf_curr); end end
-- в начале каждого хода добавляются очки передвижения curr_date = GetDate(ABSOLUTE_DAY); if(move_date ~= curr_date) then move_date = curr_date; ChangeHeroStat(hero, STAT_MOVE_POINTS, 2500); sleep(1); if(IsObjectExists(player_hero)) then hx_curr, hy_curr, hf_curr = GetObjectPosition(player_hero); MoveHeroRealTime(hero, hx_curr, hy_curr, hf_curr); end end
DyrmanЕсть ли скрипт, который определяет, выполняется ли данная функция или уже нет? (без использования флага в самой функции) Например, есть:
for i=1,100 do
startThread(Func);
end
Получается так, что могут запуститься несколько функций Func, даже не смотря на то, что могла бы не завершиться предыдущая.
local threads = {}
local startExec = function(func)
local threads = threads
errorHook(function()
%threads[%func] = nil
end)
threads[func] = 1
func()
threads[func] = nil
end
function startThreadOnce(func)
if not %threads[func] then
startThread(%startExec, func)
end
end
function isFunctionRunning(func)
return %threads[func]
end
В данном примере startThreadOnce запускает функцию только если она не запущена в данный момент. isFunctionRunning проверяет запущена ли функция в данный момент.
Итак,напишите пожалуста кому не трудно 100% рабочий пример скрипта StartCombat . Всего 1 строчку. Ато сколько мануалов не перелистал - везде разное описание этого скрипта,и почемуто ни одно не работает.Заранее спасибо.
Jack_of_shadowsserovoy, когда создаешь нового героя, ему нужно присвоить уникальное системное имя, по которому потом к нему и обращаешься из скриптов.
А если я играю в чужую авторскую карту с созданным на ней героем, как узнать его системное имя? Есть консольная команда какая-то или что-то в этом роде?