PDA

Просмотр полной версии : скрипт на покупку, глючит


iablondinko
19.05.2008, 23:49
есть один сервачек (http://la2.pvp-life.com/), где можно покупать за 1 адену 100кк, так вот пытаюсь сделать скрипт чтобы он автоматически при получении пакета 27 и итем ИД=57 закупал адену до 1ккк, но что то он непашет так как надо) помогите наити ошибку)

const
name='name'; //nick
msg1='04 31 19 10 48 C1 C1 01 00 9D 47 FD FF 76 FC FF FF 00'; //пакеты закупки адены
msg2='21 6D 00 65 00 6E 00 75 00 5F 00 73 00 65 00 6C 00 65 00 63 00 74 00 3F 00 61 00 73 00 6B 00 3D 00 2D 00 33 00 30 00 33 00 26 00 72 00 65 00 70 00 6C 00 79 00 3D 00 36 00 32 00 37 00 00 00';
msg3='A7 73 02 00 00 01 00 00 00 01 00 00 00';
var
d,i,k,l,x: integer;
f :TStringList;
m,t :String;
timer: TTimer;

procedure by(Sender: TObject); //сама процедура покупки адены
begin
case x of
1: begin
buf:=hstr(msg1);
SendToServerEx(name);
x:=x+1;
end;
2: begin
buf:=hstr(msg1);
SendToServerEx(name);
x:=x+1;
end;
3: begin
buf:=hstr(msg2);
SendToServerEx(name);
x:=x+1;
end;
4: begin
buf:=hstr(msg3);
SendToServerEx(name);
x:=x+1;
timer.enabled:=false;
end;
end;
end;

procedure Init; //вызывается при включении
begin
timer:=TTimer.Create(nil);
timer.OnTimer:=@by;
timer.enabled:=false;
timer.interval:=600;
x:=0;
end;

begin
if FromServer and (ConnectName=name)and (pck[1]=#$27)and (pck[12]=#$39)then
begin
i:=12;
k:=ReadD(i); //item ID
l:=ReadD(i); //количество адены
//=IntToStr(l);
//=IntToStr(k);
//=TStringList.Create();
//Add(t+': '+m);
//SaveToFile('c:\adena.txt');
//Free;
end;
if l<100000000 then
begin
timer.enabled:=true;
x:=1;
end;
end.

при включении скрипта чар тупа начинает брать в тагер нпс, т.е. постоянно отправляется первый пакет, а при выключении он все таки покупает 1 раз 100кк, непойму в чем дело

ChiterEPT
20.05.2008, 00:19
Обрати внимание на последнее If в твоем скрипте оно выполняется при каждом приходящем пакете.. так что х:=1 при каждом приходящем пакете... поэтому выполняется первый цикл постоянно :) . Попробуй последнее условие засунуть в обработку пакета #$27 или ввести дополнительную переменную лучше Boolean. Например так:

Добавлено через 3 минуты
const
name='name'; //nick
msg1='04 31 19 10 48 C1 C1 01 00 9D 47 FD FF 76 FC FF FF 00'; //пакеты закупки адены
msg2='21 6D 00 65 00 6E 00 75 00 5F 00 73 00 65 00 6C 00 65 00 63 00 74 00 3F 00 61 00 73 00 6B 00 3D 00 2D 00 33 00 30 00 33 00 26 00 72 00 65 00 70 00 6C 00 79 00 3D 00 36 00 32 00 37 00 00 00';
msg3='A7 73 02 00 00 01 00 00 00 01 00 00 00';
var
d,i,k,l,x: integer;
f :TStringList;
m,t :String;
timer: TTimer;
Zanyat: Boolean;
procedure by(Sender: TObject); //сама процедура покупки адены
begin
case x of
1: begin
buf:=hstr(msg1);
SendToServerEx(name);
x:=x+1;
end;
2: begin
buf:=hstr(msg1);
SendToServerEx(name);
x:=x+1;
end;
3: begin
buf:=hstr(msg2);
SendToServerEx(name);
x:=x+1;
end;
4: begin
buf:=hstr(msg3);
SendToServerEx(name);
x:=x+1;
Zanyat:=false;
timer.enabled:=false;
end;
end;
end;

procedure Init; //вызывается при включении
begin
timer:=TTimer.Create(nil);
timer.OnTimer:=@by;
timer.enabled:=false;
timer.interval:=600;
x:=0;
Zanyat:=false;
end;

begin
if FromServer and (ConnectName=name)and (pck[1]=#$27)and (pck[12]=#$39)then
begin
i:=12;
k:=ReadD(i); //item ID
l:=ReadD(i); //количество адены
//=IntToStr(l);
//=IntToStr(k);
//=TStringList.Create();
//Add(t+': '+m);
//SaveToFile('c:\adena.txt');
//Free;
end;
if (l<100000000) and (Zanyat=false) then
begin
timer.enabled:=true;
x:=1;
Zanyat:=true;
end;
end.

iablondinko
20.05.2008, 00:47
во, скрипт заработал как надо, только он начинает докупать при включении скрипта. почему? пакет 27 не приходит, каждый раз как включаю скрипт он начинает докупать

ChiterEPT
20.05.2008, 00:59
В процедуру Free пропиши "timer.free;"

Добавлено через 1 минуту
и L:=0;

Добавлено через 4 минуты
Все понятно... как же я сразу не заметил :) Все таки обработку переменной L переставь в обработку пакета 27. Дело в том что L у тебя изначально = 0 а нуль как ты понимаешь меньше 1000000 и таймер у тебя будет включатся как только цикл завершится и флаг Zanyat вернется в значение false

Добавлено через 1 минуту

begin
if FromServer and (ConnectName=name)and (pck[1]=#$27)and (pck[12]=#$39)then
begin
i:=12;
k:=ReadD(i); //item ID
l:=ReadD(i); //количество адены
//=IntToStr(l);
//=IntToStr(k);
//=TStringList.Create();
//Add(t+': '+m);
//SaveToFile('c:\adena.txt');
//Free;
if (l<100000000) and (Zanyat=false) then
begin
timer.enabled:=true;
x:=1;
Zanyat:=true;
end;
end;

end.