Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7
ошибка в getdistance
ошибка в getdistance
когда чар находиться по диагонали от объекта, то на расстоянии в 2 тайла, дистанция высвечивается 3 а не 2. ну и дальше отходя по диагонали, функция не правильно считает дистанцию.
Re: ошибка в getdistance
Описание функции:
Вообще-то, если исходить из описания функция, то она считает все правильно, только возвращаемый результат должен быть Double, а не Integer. Это во-первых, а во-вторых, как замечает автор топика, растояния в ultime таким способом (гипотенуза от двух катетов) мало на каких шардах используется (я такого не встерчал), обычно растояние между соседними тайлами равно 1, будь то по горизонтали, вертикали или диагонали. Но, к счастью, в Stealth'е есть еще одна функция для определения растояния:
Вот она-то определяет так как надо.
Code: Select all
function GetDistance(ObjID: Cardinal): Integer;
гипотенуза от двух катетов. 0 - обьект под вами. -1 - Обьект не существует. (При определении игнорирует координату Z)
Code: Select all
function Dist(X1, Y1, X2, Y2: Word): Word
Возвращает расстояние между точками (X1, Y1) и (X2, Y2).
Re: ошибка в getdistance
я так решил вопрос:
Code: Select all
function get_distance(objectid : cardinal) : integer;
var
distx,disty : integer;
begin
distx := (getx(objectid) - getx(self));
if distx < 0 then distx := (distx * -1);
disty := (gety(objectid) - gety(self));
if disty < 0 then disty := (disty * -1);
if distx > disty then
result := distx
else
result := disty;
if result > 30 then result := -1;
end;
Re: ошибка в getdistance
Используя Dist можно сделать еще проще:
Code: Select all
function get_distance(objectid : cardinal) : integer;
begin
result := Dist(GetX(self), GetY(self), GetX(objectid), GetY(objectid));
end;