Просмотр полной версии : Помощ в скрипте
Всем доброго дня. Переписал скрипт из под ИЛ на грацию фрею. Скрипт автоматически отслеживает хп и если хп меньше заданого, то начинает пить банки. Все вродебы хорошо, но он их начинает пить только после какогонито действия, либо бафа скила, либо зажигания ауры, (либо когда ударят но не вегда) Хотелось бы узнать, что может быть такого. как сделать чтобы он пил банки до указаного предела, без всяких действий. Так как ОИД банок он не определял, я вписал прямо так.
Вот собственно сам скрипт.
//автоматическое использование НР пробирок
const
    Name = 'UberWark';
var MyID:Word;
    OID:String;
begin
 if FromServer and (pck[1]=#$21) and (ReadD(12)=1539) then
   OID:=pck[8]+pck[9]+pck[10]+pck[11];
 if FromServer and (pck[1]=#$32) then  MyID:=ReadD(18);
 if FromServer and (pck[1]=#$18) and (ReadD(2)=MyID) then
  if ReadD(6)=4 then
   if (ReadD(14)<=3200) then
    begin
     SendToServerEx(Name);
     buf:=HStr('19 D9 03 21 10 00 00 00 00');
     SendToServer;
    end;
end.
Breadfan
20.11.2010, 17:37
в StatusUpdate не всегда приходит инфа лишь о хп, потому у тебя и не срабатывает периодически, вроде както так://автоматическое использование НР пробирок
const
    Name = 'UberWark';
var MyID:Word;
    OID:String;
    i,j:integer;
begin
 if FromServer and (pck[1]=#$21) and (ReadD(12)=1539) then
   OID:=pck[8]+pck[9]+pck[10]+pck[11];
 if FromServer and (pck[1]=#$32) then  MyID:=ReadD(18);
 if FromServer and (pck[1]=#$18) and (ReadD(2)=MyID) then begin
    i:=ReadD(6);
    for j:=1 to i do begin
        if (ReadD(i*8+2)=9) and (ReadD(i*8+6)<3200) then begin
            SendToServerEx(Name);
            buf:=HStr('19 D9 03 21 10 00 00 00 00');
            SendToServer;
            end;
        end;
  end;
end. Но лучше другой скрипт поищи - этот спамить будет.
Взял вот етот скрипт, но теперь он вообще нечего не делает...
//после активации скрипта необходимо выпить сначала банку CP, потом HP для получения их ID
const
   Name='UberWark';  //ник перса
var
   CurHP,MaxHP,CurCP,MaxCP: integer;
   CPuse,HPuse: string;
   TimerCP,TimerHP: TTimer;
procedure Init; //Вызывается при включении скрипта
begin
  TimerCP:=TTimer.Create(nil);
  TimerCP.OnTimer:=@OnTimerCP;
  TimerCP.enabled:=false;
  TimerCP.interval:=1000;  //интервал 1сек, т.к. чаще пить CP всеравно не будет, дабы не засорять трафик
  TimerHP:=TTimer.Create(nil);
  TimerHP.OnTimer:=@OnTimerHP;
  TimerHP.enabled:=false;
  TimerHP.interval:=15000; //интервал 15сек, т.к. действие одной бутылки = 15сек
end;
procedure OnTimerCP(Sender: TObject);
begin
  buf:=CPuse;
  SendToServerEx(Name);
end;
procedure OnTimerHP(Sender: TObject);
begin
  buf:=HPuse;
  SendToServerEx(Name);
end;
procedure Free; //Вызывается при выключении скрипта
begin
  TimerCP.free;
  TimerHP.free;
  HPuse:='';
  CPuse:='';
end;
//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
//пьем сначала CP, потом HP банку что б запомнить их ID(я решил взять эти пакеты целиком, дабы не усложнять)
  if FromClient and (ConnectName=Name) and (pck[1]=#$19#$E2#$50#$20#$10#$00#$00#$00#$00) and (CPuse='') then CPuse:=pck;
  if FromClient and (ConnectName=Name) and (pck[1]=#$19#$D9#$03#$21#$10#$00#$00#$00#$00) and (CPuse<>pck) and (HPuse='') then HPuse:=pck;
//считываем текущие и максимальные значения CP и HP
if FromServer and (pck[1]+pck[6]=#$18#$32) then
  begin
    CurHP:=ReadD(14);
    MaxHP:=ReadD(22);
    CurCP:=ReadD(30);
    MaxCP:=ReadD(38);
  end;
//если вы используете не грэйтер CP то вместо 200 подставьте кол-во CP сколько восстанавливает 1 банка
if (CurCP<MaxCP-200) and (CPuse<>'') then TimerCP.enabled:=true else TimerCP.enabled:=false;
if (CurHP<MaxHP) and (HPuse<>'') then TimerHP.enabled:=true else TimerHP.enabled:=false;
end.
vBulletin® v3.6.11, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot