serovoy, когда создаешь нового героя, ему нужно присвоить уникальное системное имя, по которому потом к нему и обращаешься из скриптов.
hhtp0
10 лет назад
Совсем недавно начал осваивать скрипты, даже самые простейшие которые расписанны по 5 раз подряд выхывают трудности, однако вроде разобрался. Нужна помощь в данном вопросе. Не могу понять как правильно пользоваться командой : "ShowFlyingSign"
к тому же смогу ли я к "ShowFlyingSign" добавить "PLAYERFLT_1"?? Так как создаю мультиплеерную карту , хочу что бы сообщение выдавало первому игроку чуть выше использовал :
В ShowFlyingSign есть еще параметры: имя объекта, от которого будет отлетать сообщение; номер игрока, которому будет сообщение видно (-1, если всем); длительность полета сообщения в секундах. Порядок лучше проверить в мануале по скриптовым функциям.
hhtp0
10 лет назад
в общем нашел я синтаксис
ShowFlyingSign(messageName, objectName, targetPlayerID = -1, time = 1.0);
начал его прописывать и "скриптэдишн" начал ругаться я его "изменил" и он отстал , однако мой вариант не сработал и выглядел так:
P.s. скрипт работает до части где в нужном регионе герой останавливаеться)
Jack_of_shadows
10 лет назад
Регион не есть объект, объект это герой, замок или скажем куст с именем. В функцию триггера передается имя героя, ступившего в регион, проще всего его и использовать. Player_1 вероятно не сработает, поскольку это совсем не то же самое, что PLAYER_1. Я бы рекомендовал скачать любую сюжетную карту, достаточно насыщенную скриптами, и по любой непонятной функции просто искать пример использования в ней.
hhtp0
10 лет назад
Спасибо за ответы) Думаю поищу карту со скриптами , но в данной ситуации решил не мучаться а воспользоваться шаблоном из руководства "OGO" через "тоуч обьект"
Рыцарь Бездны
10 лет назад
Подскажите,а возможно ли сделать так чтобы один герой компьютера каждый ход отслеживал кординаты другого героя компьютера)
Ну как бы заплатил герою через QuestionBox,и он с EnableHeroAl и MoveHero побежал твоего врага убивать. Как сделать чтобы первый герой в начале каждого хода запрагивал кординаты второго героя и двигался в них? . До тех пор пока сам не погибнет.
Городов и гарнизонов нет,MoveHero работает отлично. Заранее огромное спасибо.
Jack_of_shadows
10 лет назад
Вот сокращенный вариант из моей карты, только комп за игроком гонится, поэтому может будет не совсем так выглядеть, как вам хотелось. 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
else break end sleep(5); end
end
Dyrman
10 лет назад
Есть ли скрипт, который определяет, выполняется ли данная функция или уже нет? (без использования флага в самой функции) Например, есть:
for i=1,100 do startThread(Func); end
Получается так, что могут запуститься несколько функций Func, даже не смотря на то, что могла бы не завершиться предыдущая.
Есть ли скрипт, который определяет, выполняется ли данная функция или уже нет? (без использования флага в самой функции) Например, есть:
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 проверяет запущена ли функция в данный момент.
Рыцарь Бездны
10 лет назад
Извините за банальный вопрос но всёже:
Итак,напишите пожалуста кому не трудно 100% рабочий пример скрипта StartCombat . Всего 1 строчку. Ато сколько мануалов не перелистал - везде разное описание этого скрипта,и почемуто ни одно не работает.Заранее спасибо.
serovoy, когда создаешь нового героя, ему нужно присвоить уникальное системное имя, по которому потом к нему и обращаешься из скриптов.
А если я играю в чужую авторскую карту с созданным на ней героем, как узнать его системное имя? Есть консольная команда какая-то или что-то в этом роде?
Jack_of_shadows
10 лет назад
serovoy, быстрее всего наверное открыть карту архиватором и глянуть в файле описания героя.
upd: хотя чего это я, есть же GetPlayerHeroes(player_id), которая выдает массив имен героев по ID игрока.
serovoy
10 лет назад
Здорово! А в синглплеере оно работает? Просто начинаю кампанию, ввожу сие добро, а эффекта ноль. :eek: