Показать сообщение отдельно
Старый 28.10.2007, 02:04   #25
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Re:

Цитата:
Сообщение от DeVolf
Следуюший вопрос....
как мне сделать скрипт в котором будут отправлятся пакеты на сервер при условии что
1 ЦП менше чем...
2 МП менше чем...
3 ХП менше чем...
как условия написать я знаю
а вот как из пакета выделить количество ХП МП и ЦП я не знаю....
Если еще не разобрался, то примерно вот так (требуются незначительные доделки):
Воспользуемся мониторингом статов чара (хп, мп, цп и координаты) by Shura1oplot модифицировав его с помощью скрипта на автохилки.
Код:
Const
  Name='NLObP'; //имя чара
  heal=1218; //Greater Battle Heal
  potion=1060; //Healing potion

var
  CharObjID,MyCorX,MyCorY,MyCorZ: integer;
  MaxHP,CurHP,MaxMP,CurMP,MaxCP,CurCP: integer;
  CharName: string;
  TimerHP, TimerCP, TimerMP: TTimer;

procedure Init; //Вызывается при включении скрипта
begin
  timerHP:=TTimer.Create(nil);
  timerHP.OnTimer:=@OnTimerHP;
  timerHP.enabled:=False;
  timerHP.interval:=6000;

  timerCP:=TTimer.Create(nil);
  timerCP.OnTimer:=@OnTimerCP;
  timerCP.enabled:=False;
  timerCP.interval:=6000;

  timerMP:=TTimer.Create(nil);
  timerMP.OnTimer:=@OnTimerMP;
  timerMP.enabled:=False;
  timerMP.interval:=6000;
end;

procedure OnTimerHP(Sender: TObject);
begin
  //выбрать что нужно
  //MagicSkillUse(heal);
  //UseItem(potion);
end;
//по аналогии напиши для CP, MP
procedure OnTimerCP(Sender: TObject);
begin
end;
procedure OnTimerMP(Sender: TObject);
begin
end;

//используем магию
procedure MagicSkillUse(MagicID:integer);
begin
    buf:=#$2F;
    WriteD(MagicID);
    WriteD(00);
    WriteC(00);
    SendToServerEx(Name);
end;

//используем предметы
procedure UseItem(ObjID:integer);
begin
    buf:=#$14;
    WriteD(ObjID);
    WriteD(00);
    SendToServerEx(Name);
end;

procedure InitStats;
var
  i: integer;
begin
  CharObjID:=ReadD(18);
  MyCorX:=ReadD(2);
  MyCorY:=ReadD(6);
  MyCorZ:=ReadD(10);
  i:=22;
  CharName:=ReadS(i);
  i:=i+44;
  MaxHP:=ReadD(i);
  CurHP:=ReadD(i);
  MaxMP:=ReadD(i);
  CurMP:=ReadD(i);
  i:=i+363;
  MaxCP:=ReadD(i);
  CurCP:=ReadD(i);
  //добавляем проверки по вкусу
  if (CurHP<=MaxHP-500) then TimerHP.enabled:=true else TimerHP.enabled:=false;
  if (CurCP<=MaxCP-500) then TimerCP.enabled:=true else TimerCP.enabled:=false;
  if (CurMP<=MaxMP-500) then TimerMP.enabled:=true else TimerMP.enabled:=false;
end;

procedure StatsUpdate;
var
  i: integer;
begin
  for i:=0 to ReadD(6)-1 do
    case pck[i*8+10] of
      #$09: CurHP:=ReadD(i*8+14);
      #$0A: MaxHP:=ReadD(i*8+14);
      #$0B: CurMP:=ReadD(i*8+14);
      #$0C: MaxMP:=ReadD(i*8+14);
      #$21: CurCP:=ReadD(i*8+14);
      #$22: MaxCP:=ReadD(i*8+14);
    end;
  //добавляем проверки по вкусу
  if (CurHP<=MaxHP-500) then TimerHP.enabled:=true else TimerHP.enabled:=false;
  if (CurCP<=MaxCP-500) then TimerCP.enabled:=true else TimerCP.enabled:=false;
  if (CurMP<=MaxMP-500) then TimerMP.enabled:=true else TimerMP.enabled:=false;
end;

procedure CorsUpdate;
begin
  MyCorX:=ReadD(2);
  MyCorY:=ReadD(6);
  MyCorZ:=ReadD(10);
end;

BEGIN
  //--- STATS BEGIN ---//
  if FromServer and (ConnectName=Name) and (pck[1]=#$04) then InitStats;
  if FromServer and (ConnectName=Name) and (pck[1]=#$0E) and (CharObjID=ReadD(2)) then StatsUpdate;
  if FromClient and (ConnectName=Name) and (pck[1]=#$48) then CorsUpdate;
  //--- STATS END ---//
END.
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
За это сообщение NLObP нажился спасибкой от: