PDA

Просмотр полной версии : Помощ в скрипте


afonbka
20.11.2010, 17:00
Всем доброго дня. Переписал скрипт из под ИЛ на грацию фрею. Скрипт автоматически отслеживает хп и если хп меньше заданого, то начинает пить банки. Все вродебы хорошо, но он их начинает пить только после какогонито действия, либо бафа скила, либо зажигания ауры, (либо когда ударят но не вегда) Хотелось бы узнать, что может быть такого. как сделать чтобы он пил банки до указаного предела, без всяких действий. Так как ОИД банок он не определял, я вписал прямо так.

Вот собственно сам скрипт.

//автоматическое использование НР пробирок
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. Но лучше другой скрипт поищи - этот спамить будет.

afonbka
20.11.2010, 18:11
Взял вот етот скрипт, но теперь он вообще нечего не делает...

//после активации скрипта необходимо выпить сначала банку 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.