Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7
Обход препятствия в виде руды (Ore)
Обход препятствия в виде руды (Ore)
На нашем сервере руда не является препятствием, через нее свободно можно ходить, но при попытке стать на клетку с рудой или в случае заграждения пути кусками руды, стелс клиент пишет Point Not Passable или что типа того, вообщем проще говоря упирается в руду и категорически не хочет через нее идти. Подскажите пожалуйста как можно решить эту проблему.
Fields Of Fire
http://www.uo-fof.od.ua
http://www.uo-fof.od.ua
Да указан именно к той UO с которой я играю на этом шарде.Vizit0r wrote:'uo mul-files' - put' k pravilnomu uo-katalogu ukazan (esli ix bolshe odnoi) ?
Может у меня ходилка какая то кривая? потому как она очень часто ругается Point Not Passable, когда упирается в скалу одноклеточную в шахте или в другого персонажа
Code: Select all
procedure MoveXY(x,y,prec : integer; runflag : boolean);
// x,y - координаты, в которые идем
// prec - точность подхода
// runflag - бежать или идти
// v. 1.04 (с) Edred, скрипт портирован с инжекта
// оригинальная версия Yoko с доработкой AGRS и Edred.
var ld, ldc, dx, dy, mx, my : Integer;
begin
ld := 0; ldc := 0;
while true do
begin
// addtosystemjournal('Идем в: ' + inttostr(x) + ', ' + inttostr(y));
// addtosystemjournal('Счас в: ' + inttostr(GetX(self)) + ', ' + inttostr(GetY(self)));
dx := GetX(self) - x; if dx < 0 then dx := 0 - dx;
dy := GetY(self) - y; if dy < 0 then dy := 0 - dy;
if dy > dx then dx := dy;
if dx <= prec then exit;
mx := GetX(self); my := GetY(self);
dx := mx - x; if dx < 0 then dx := 0 - dx;
dy := my - y; if dy < 0 then dy := 0 - dy;
if dy > dx then dx := dy;
if dx <= prec then exit;
if ld = dx then begin
ldc := ldc + 1;
if ldc > 100 then begin addtosystemjournal( 'MoveXY: Cannot reach location!' );
Raw_Move(3,false);
Raw_Move(3,false);
exit;
end;
end
else ld := dx;
waitconnection(5000);
// addtosystemjournal('Отладка: перед шагом: myx, myy = ' + inttostr(mx) + ', ' + inttostr(my) + ' [MoveXY]');
if mx = x then begin
if my = y then exit;
// North
if my > y then begin Raw_Move(0,runflag); continue; end;
// South
Raw_Move(4,runflag); continue;
end;
if mx < x then begin
// Northeast
if my > y then begin Raw_Move(1,runflag); continue; end;
// East
if my = y then begin Raw_Move(2,runflag); continue; end;
// Southeast
Raw_Move(3,runflag); continue;
end;
// Southwest
if my < y then begin Raw_Move(5,runflag); continue; end;
// West
if my = y then begin Raw_Move(6,runflag); continue; end;
// Nortwest
Raw_Move(7,runflag); continue;
end;
end;
Блин, непойму зачем использовать "слепую" ходилку, когда есть классная встроенная ходилка, которая "видит" статику и не тыкается в нее?
убери эту старую ходилку и работай со встроенной.
http://stealth.od.ua/forum/viewtopic.php?t=1245
убери эту старую ходилку и работай со встроенной.
http://stealth.od.ua/forum/viewtopic.php?t=1245
с новой ходилкой не кричит, а со старой он ничего обходить не хотел, стоило ему на пути скинуть сундук или кусок руды тут же Point not passablegrundick wrote:Проблемы это не решает. Если стелс кричит ,что точка не доступна, значит беда...
Теперь осталось его заставить видеть гейты и не заходить в них

В том же топике есть ходилки основанные на новой, зовутся MoveInHide и easyMoveXY
у MoveInHide есть готовый массив BadObj просто добавь туда типы гейтов и замени условие на более подходящее.
у MoveInHide есть готовый массив BadObj просто добавь туда типы гейтов и замени условие на более подходящее.
Либо в easyMoveXY в основном теле функции...// если стамины меньше чем дексы, устанавливаем хумов и элемов в bad objects
Code: Select all
If Not IsWorldCellPassable(getX(self),getY(self),mPathArr[i].X,mPathArr[i].Y,WorldNum,getZ(self)) then Break;
If Что_нить_типа_FindGate then SetBadLocation(mPathArr[i].X,mPathArr[i].Y);<====вот типа проверка на гейт (Что_нить_типа_FindGate сам нарисуешь надеюсь)
If Not MoveToPoint(mPathArr[i].X,mPathArr[i].Y,Running) then Break;