PDA

Просмотр полной версии : Помогите написать скрипт


Pusha
23.01.2009, 16:45
Напишите пож. скрит, а то я непойму или подсказку дайте как писать :cray:
Мне нужно чтоб выполнялось 2 действия 10раз подрят:
1)

begin
buf:=hstr('7C B1 19 00 00');
SendToClient;
end.

2)

begin
buf:=hstr('65 DE 7D 22 10 00 00 00 00 ');
SendToServer;
end.

И если я от сервера получю этот пакет 62 ED 05 00 00 00 00 00 00 то процедуру 1 и 2 нужно повторить.

PanAm
23.01.2009, 16:48
с каким интервалом? 2 пакета должны чередоватся или сначало 1 10 раз потом 2?

Pusha
23.01.2009, 16:54
2 пакета должны чередоватся, интервал 500 хватит думаю.

PanAm
23.01.2009, 17:38
примерно так
var
Timer : TTimer;
Counter : integer;
f : boolean;

procedure Init;
begin
Timer :=TTimer.Create(nil);
Timer.enabled :=false; //таймер выключен
Timer.OnTimer :=@SendPck; //адрес процедуры,
//которая будет выполнятся
Timer.interval :=500; //Задержка в мс
f := false;
end;

procedure Free;
begin
Timer.free;
end;

procedure SendPck(Sender: TObject);
begin
if (Counter mod 2) = 0 then begin
buf:=hstr('7C B1 19 00 00');
SendToClient;
end else begin
buf:=hstr('65 DE 7D 22 10 00 00 00 00');
SendToServer;
end;
Dec(Counter); //Уменьшаем счетчик
if Counter=0 then //Проверяем
Timer.enabled :=false; //и если надо выключаем
end;

var
S : string;
D1 : integer;
D2 : integer;
begin
if FromClient and (pck[1]=#$49) then begin //49=Say2
S :=ReadS(2); //считываем текст сообщения
if S='START' then begin //по START в чат включаем посылку
Counter := 20;
Timer.enabled :=true; //запускаем
f := true;
pck :=''; //не отправляем это на сервер
end
end;
if FromServer and (pck[1]=#$62) then begin
D1 := ReadD(2);
D2 := ReadD(6);
if (D1=1517) and (D2=0) and f then begin
Counter := 20;
Timer.enabled :=true; //опять запускаем
end;
end;
end.

Pusha
23.01.2009, 17:47
блин ругается "List index out of bounds (17)" незнаеш что это?
у меня хроники gracia part 2.

PanAm
23.01.2009, 18:10
тогда вроде (я у довно не играю в линейку грации нет)
if FromClient and (pck[1]=#$38)
заменить на
if FromClient and (pck[1]=#$49)

Добавлено через 8 минут
мб пакеты неправильно составлены? на грацию непохоже
7C B1 19 00 00 нехватает 2 Dword
7C=RequestAcquireSkill:d(SkillID)d(Level)d(Type)
65 DE 7D 22 10 00 00 00 00 а тут наоборот перебор
65=RequestPledgeInfo:d(ClanID)

Pusha
23.01.2009, 18:21
таже ошибка :(
мда я конечно нешарю во всём этом но (хз у меня 5 по паскалю) но за что отвечает (pck[1]=#$49) и нужно оно сдесь если я так полагаю что мне нужно отловить имено этот пакет 62 ED 05 00 00 00 00 00 00 и не какой другой. можно затать требования типа если мы палучем от сервера 62 ED 05 00 00 00 00 00 00 этот пакет то заного всё.
ЗЫ сори за то что парю тибе мозги.

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

мб пакеты неправильно составлены? на грацию непохоже
7C B1 19 00 00 нехватает 2 Dword
7C=RequestAcquireSkill:d(SkillID)d(Level)d(Type)
65 DE 7D 22 10 00 00 00 00 а тут наоборот перебор
65=RequestPledgeInfo:d(ClanID)


та не всё правильно если я беру пакет 7C B1 19 00 00 и просто вставляю его в раздел "Посылка" ставлю напростив галочку клиенту ну и послать кароче работает
и также с 65 DE 7D 22 10 00 00 00 00 может и перебор но работает же но тут тока я ставлю послать серверу.

PanAm
23.01.2009, 18:48
Сорь, недоглядел ))
конечно надо заменить
buf:=hstr('7C B1 19 00 00');
SendToServer;
на
buf:=hstr('7C B1 19 00 00');
SendToClient;

Добавлено через 4 минуты
if FromServer and (pck[1]=#$62) then begin
D := ReadD(2);
if (D=1517) and f then begin
Counter := 10;
Timer.enabled :=true; //опять запускаем
end;
end;можно конечно проверить пакет и на последний 0
if FromServer and (pck[1]=#$62) then begin
D := ReadD(2);
if (D=1517) and f then begin
D := ReadD(6);
if (D=0) then begin
Counter := 10;
Timer.enabled :=true; //опять запускаем
end;
end;
end;

Добавлено через 4 минуты
испарвил скрипт в 4 посте

Добавлено через 10 минут
мда я конечно нешарю во всём этом но (хз у меня 5 по паскалю) но за что отвечает
(pck[1]=#$49)
это отлавливает напмсаное в чат START и включает посылку пакетов

Pusha
23.01.2009, 18:52
тоже ошибка но другая (http://coderx.ru/attachment.php?attachmentid=238&stc=1&d=1232722284)

PanAm
23.01.2009, 18:54
if (D1=1517) and (D2=0) and f then begin

Pusha
23.01.2009, 18:58
спс что попытался но нехочет оно работать.

PanAm
23.01.2009, 19:03
В смысле? скрипт неработает или задуманное?
если скрипт - то тут может быть еше нюанс, скрипт должен работать только с одним запущенным окном. Запускается по START в любой чат.
ну и на конец -читерить можно только на достаточно кривом сервере... работать со своим инвентарум в обход сервера редко где проходит

Pusha
23.01.2009, 19:35
оО что то начало налаживатся после крит эрора запускаю ставлю галочку напротив скрипта всё норм ошибки нет пишу в основной чат START и нечего :o

Добавлено через 7 минут
о слушай начало работать тока я поменял

(pck[1]=#$49)
(pck[1]=#$38)

Добавлено через 16 минут
Блин всё работает всё правильно, ток просто когда я это праделываю в ручную отправляю пакеты по очереди всё работает, а тут 1 пакет отправляется и его действие происходит, тут срузу отправляется 2 но действие неприсходит, за ним я проследил от сервера идёт пакет типа ошибки ActionFailed 1F.

Если можеш сделай плз чтоб между 1 и 2 тоже был интервал.я думаю это решит проблему.

PanAm
26.01.2009, 16:17
Все можно )
попробуйте заменить процедуру SendPck
procedure SendPck(Sender: TObject);
begin
if (Counter mod 2) = 0 then begin
buf:=hstr('7C B1 19 00 00');
SendToClient;
end else begin
buf:=hstr('65 DE 7D 22 10 00 00 00 00');
SendToServer;
end;
Dec(Counter); //Уменьшаем счетчик
if Counter=0 then //Проверяем
Timer.enabled :=false; //и если надо выключаем
end;
и в 2 местах
Counter := 10; на Counter := 20;

Pusha
28.01.2009, 15:25
спс большое помогло :)