Показать сообщение отдельно
Старый 14.09.2009, 14:23   #4
Рыцарь
 
Аватар для TAMBIK
 
Регистрация: 03.03.2009
Сообщений: 773
Сказал Спасибо: 361
Имеет 300 спасибок в 168 сообщенях
TAMBIK на пути к лучшему
По умолчанию

недоделано
Код:
 const
  myName = 'TAMBIK';  // Имя 

  var
  Timer1: TTimer;
  Timer2: TTimer;

 npcID,npcX,npcY,npcZ:integer;
 myXpos,myYpos,myZpos:integer;
 xpos, ypos,zpos: integer;
 krX, krY, krZ: integer;
function rastoyanie(xpos1, ypos1, xpos2, ypos2:extended):integer;
begin
  result:= Round(Sqrt(((xpos1-xpos2)*(xpos1-xpos2))+((ypos1-ypos2)*(ypos1-ypos2))));
end;
function rastoyanieNPC(xpos1, ypos1, xpos2, ypos2:extended):integer; 
begin
  result:= Round(Sqrt(((xpos1-xpos2)*(xpos1-xpos2))+((ypos1-ypos2)*(ypos1-ypos2))));
end;
procedure SendMsg2(msg:string);
begin 
  buf:=#$4A;
  WriteD(0);
  WriteD(10);
  WriteS('');
  WriteS(msg);
  SendToClientEx( myName);
end;
procedure Action;
begin
  buf:=#$1F;
  WriteD(npcID); // npcID наверно получаем из пакета разговора с нпс
  WriteD(myXpos);
  WriteD(myYpos);
  WriteD(myzpos); 
  SendToServerEx(myName);
end;
procedure OnTimer1(Sender: TObject);
begin
  buf:=#$0F;
   WriteD(krX);
   WriteD(krY);
   WriteD(krZ); 
        WriteD(myxpos);
        WriteD(myypos);
        WriteD(myzpos);
        WriteD(0);
        SendToServerEx(myName);
 end;
// бежим к НПС
procedure OnTimer2(Sender: TObject);
begin
   buf:=#$0F;
   WriteD(npcX);
   WriteD(npcY);
   WriteD(npcZ);
        WriteD(myxpos);
        WriteD(myypos);
        WriteD(myzpos);
        WriteD(0);
        SendToServerEx(myName);
 end;
procedure  RequestSocialAction;
begin   
  CASE ReadD(2) OF
3:begin  // соцдействие ----запоминаем место у НПС
   npcX:=MyXpos;// запомним
   npcY:=MyYpos;// кординаты
   npcZ:=MyZpos;// у НПС
   SendMsg2('npcX:='+IntToStr(npcX)+' npcY:='+IntToStr(npcY)+' npcZ:='+IntToStr(npcZ)+'');
  pck:='';
  exit;
  end;
4:begin  // соцдействие ----запоминаем место у крепости
   krX:=MyXpos;// запомним
   krY:=MyYpos;// кординаты
   krZ:=MyZpos;// у крепости
   SendMsg2('krX:='+IntToStr(krX)+' krY:='+IntToStr(krY)+' krZ:='+IntToStr(krZ)+'');
  pck:='';
  exit;
  end;
5:begin // стоп
 
  pck:='';
  exit;
end;
6:begin // старт

  pck:='';
  exit;
end;
end;
end;
 procedure startNPC;
  begin
  Action;
   // пакет регистрации должен быть
timer1.enabled:=true;// бежим к крепости 
  end;
 procedure startKR;
  begin

timer2.enabled:=true;// бежим к НПС
  end;
 procedure stopGAME;
 begin

 end;
procedure  ValidatePosition;
begin
  myXpos:=ReadD(2);
  myYpos:=ReadD(6);
  myZpos:=ReadD(10); 
 //рядом c NPC
 if (rastoyanieNPC(MyXpos, MyYpos,npcX,npcY)<=100) then startNPC;

 //рядом c крепостью 
 if (rastoyanie(MyXpos, MyYpos,krX,krY)<=100) then startKR;

 end;
procedure Init;
begin
 timer1:=TTimer.Create(nil);
  timer1.OnTimer:=@OnTimer1;
  timer1.enabled:=false;
  timer1.interval:=0;//  60 мин

  timer2:=TTimer.Create(nil);
  timer2.OnTimer:=@OnTimer2;
  timer2.enabled:=false;
  timer2.interval:=0;//  57 мин
end;
procedure Free; 
begin
  timer1.free;
  Timer2.free;
end;
begin
if pck = '' then exit;
if FromClient then    
 CASE  pck[1] OF
 #$59:ValidatePosition;
 #$34:RequestSocialAction; 
end;
__________________
Тут не форум гадалок, если ты делаешь все правильно и по пунктам - то все должно работать
TAMBIK вне форума   Ответить с цитированием