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