Местный
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
|
фобос, ты че-то не то написал)
во-первых просто делить на сто это получится если линия маленькая - промежутки мелкие, если длинная - промежутки большие
А у меня промежутки зависят от длинны пути.
и вообще это нихрена не то что я просил, линия получается КРИВОЙ. Надо понять почему...
Добавлено через 19 минут
delphi Код:
const
Name='1';
var
Path,ID,itemid:integer;
Speed,MoveMul: double;
dx,dy,dz:integer;
dx1,dy1,dz1:integer;
timer:TTimer;
i:integer;
procedure Init; //Вызывается при включении скрипта
begin
timer:=TTimer.Create(nil);
timer.OnTimer:=@Prishel;
timer.enabled:=false;
end;
procedure Free; //Вызывается при выключении скрипта
begin
timer.free;
end;
procedure Say(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(3);
WriteS('Инфо');
WriteS(msg);
SendToClientEx(Name);
end;
procedure Prishel(Sender: TObject);
begin
ClearPath;
timer.enabled:=false;
end;
procedure ClearPath;
begin
for i:=0 to itemid do DeleteObject(i);
itemid:=0;
end;
procedure DeleteObject(l:integer);
begin
buf:=#$08;
WriteD(l);
SendToClientEx(Name);
end;
function MyRound(r:double) : double;
begin
result:=Round(r*10)/10;
end;
procedure dropItem(x1,y1,z1:integer);
begin
buf:=#$16;
WriteD(id);
WriteD(itemid);
WriteD(57);
WriteD(x1);
WriteD(y1);
WriteD(z1);
WriteD(0);
WriteQ(0);
WriteD(0);
SendToClientEx(Name);
Inc(itemid);
end;
procedure PaintMyWay(x11,y11,z11,x21,y21,z21:integer);
begin
if ((Round(GetTimeFromPath(x21,y21,z21,x11,y11,z11,'path')) div 10)=0) then
begin
exit;
end;
dx1:=(x21 - x11) div Round(Round(GetTimeFromPath(x21,y21,z21,x11,y11,z11,'path')) div 10);
dy1:=(y21 - y11) div Round(Round(GetTimeFromPath(x21,y21,z21,x11,y11,z11,'path')) div 10);
dz1:=(z21 - z11) div Round(Round(GetTimeFromPath(x21,y21,z21,x11,y11,z11,'path')) div 10);
while (dx1>0) or (dx1<0) or (dy1>0) or (dy1<0) or (dz1>0) or (dz1<0) do
begin
x11:=x11+dx1;
y11:=y11+dy1;
z11:=z11+dz1;
dropItem(x11,y11,z11);
if ((Round(GetTimeFromPath(x21,y21,z21,x11,y11,z11,'path')) div 10)=0) then
begin
exit;
end;
dx1:=(x21 - x11) div Round(Round(GetTimeFromPath(x21,y21,z21,x11,y11,z11,'path')) div 10);
dy1:=(y21 - y11) div Round(Round(GetTimeFromPath(x21,y21,z21,x11,y11,z11,'path')) div 10);
dz1:=(z21 - z11) div Round(Round(GetTimeFromPath(x21,y21,z21,x11,y11,z11,'path')) div 10);
end;
end;
function GetTimeFromPath(x1,y1,z1,x2,y2,z2:integer;keyword:string) : double;
begin
if (keyword='time') then result:=Round((sqrt(((x2-x1)*(x2-x1))+((y2-y1)*(y2-y1))+((z2-z1)*(z2-z1)))) / Speed);
if (keyword='path') then result:=Round((sqrt(((x2-x1)*(x2-x1))+((y2-y1)*(y2-y1))+((z2-z1)*(z2-z1)))));
end;
//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if FromServer and (ConnectName=Name) and (pck[1]=#$2F) and (ReadD(2)=ID) then
begin
timer.enabled:=false;
ClearPath;
//Say('Твой путь равен '+vartostr(GetTimeFromPath(ReadD(14),ReadD(18),ReadD(22),ReadD(2),ReadD(6),ReadD(10)))+'.');
Say('Вы пройдете этот путь за '+vartostr(GetTimeFromPath(ReadD(18),ReadD(22),ReadD(26),ReadD(6),ReadD(10),ReadD(14),'time'))+' секунд.');
PaintMyWay(ReadD(18),ReadD(22),ReadD(26),ReadD(6),ReadD(10),ReadD(14));
timer.interval:=(Round(GetTimeFromPath(ReadD(18),ReadD(22),ReadD(26),ReadD(6),ReadD(10),ReadD(14),'time')))*1000;
timer.enabled:=true;
end;
if FromServer and (ConnectName=Name) and (pck[1]=#$32) then
begin
ID:=ReadD(18);
Speed:=(ReadD(470+(length(ReadS(22))*2+2)))*(ReadF(502+(length(ReadS(22))*2+2)));
end;
end.
Добавлено через 47 секунд
вот фул код смотри
__________________
Начало.
Последний раз редактировалось supernewbie, 20.09.2010 в 23:00.
Причина: Добавлено сообщение
|