Показать сообщение отдельно
Старый 20.09.2010, 23:00   #6
Местный
 
Аватар для supernewbie
 
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
supernewbie пока неопределено
По умолчанию

фобос, ты че-то не то написал)
во-первых просто делить на сто это получится если линия маленькая - промежутки мелкие, если длинная - промежутки большие

А у меня промежутки зависят от длинны пути.

и вообще это нихрена не то что я просил, линия получается КРИВОЙ. Надо понять почему...

Добавлено через 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. Причина: Добавлено сообщение
supernewbie вне форума   Ответить с цитированием