Вот сокращенный вариант из моей карты, только комп за игроком гонится, поэтому может будет не совсем так выглядеть, как вам хотелось. 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