Добавил код для прерывания каста на 7990 мс. Не подскажите, почему вылетает? Потом напишу автоопределение, когда прерывать
Код:
var
Status, socialid, Magic1: Integer;
procedure SAY(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClient;
end;
begin
if FromClient and (pck[1]=#$1B) then //социальное действие
begin
SocialID:=ReadD(2);
case ord(pck[2]) of
$06:begin //socialyes
Status:=1;
SAY('Без флага');
end;
$05:begin //socialno
Status:=0;
SAY('Выключено');
end;
end;
end;
if Status=1 then
begin
if FromClient and ((pck[1]=#$0A) or(pck[1]=#$04)) then //Если атакуем, то:
begin
buf:=pck;
SendToServer; //Отправил пакет дальше
buf:=#$73; //Открыть продажу
SendToServer;
buf:=#$76; //Закрыть продажу
SendToServer;
pck:='';
end;
//Добавил
if FromClient and (pck[1]=#$2f) then
begin
buf:=pck;
SendToServer;
delay(7990);
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1#$FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
buf:=#$30#$00#$00;
SendToServer;
pck:='';
end;
end;
end.
Последний раз редактировалось Lynx, 23.04.2009 в 17:38.
мда...
При приходе пакета в пх он дешифровываеться и отправляеться скриптам. _после обработки скриптами_ (когда скрипт выполнен, т.е. курсор дошел до "end.") он шифруеться и отправляеться адрессату.
в данном случае наступакет 8секундный лаг. из за того что ты в обработчике делаешь 8секундную паузу.
новые пакеты в этот момент не поуступают, они остаються в стеке tcp.
когда настолько долгая пауза снимаеться может произойти чертешо %)
делай через таймер.
всунув в его обработчик деактивацию таймера и назначив ему требуемый интервал.
включай таймер когда нужно блокировать определенный тип пакетов
и блокируй пакеты если таймер активен.
__________________
L2Ext - project closed.
Последний раз редактировалось alexteam, 23.04.2009 в 17:46.
За это сообщение alexteam нажился 2 спасибками от:
Так есть шанс флагнуться, да и скорость меньше. Обидно флагнуться, когда бьёшь рб, не правда ли?=) А на самом деле он не нужен, как и сама линейка.
В версии уже 3.4 можно таймер делать?
Последний раз редактировалось Lynx, 23.04.2009 в 18:00.
Status, socialid, Magic1: Integer;
timer1: TTimer;
procedure SAY(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClient;
end;
procedure Init; //Вызывается при включении скрипта
begin
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer; //
timer1.enabled:=false; //
timer1.interval:=7400; //
end;
procedure OnTimer(Sender: TObject);
begin
timer1.enabled:=false;
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1#$FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
buf:=#$30#$00#$00;
SendToServer;
end;
begin
if FromClient and (pck[1]=#$1B) then //социальное действие
begin
SocialID:=ReadD(2);
case ord(pck[2]) of
$06:begin //socialyes
Status:=1;
SAY('Без флага');
end;
$05:begin //socialno
Status:=0;
SAY('Выключено');
end;
end;
end;
if Status=1 then
begin
if FromClient and ((pck[1]=#$0A) or(pck[1]=#$04)) then //Если атакуем, то:
begin
buf:=pck;
SendToServer; //Отправил пакет дальше
buf:=#$73; //Открыть продажу
SendToServer;
buf:=#$76; //Закрыть продажу
SendToServer;
pck:='';
end;
if FromClient and (pck[1]=#$2f) then timer1.enabled:=true;
end;
end.
В чём теперь ошибка? Лезть за отладчиком?
ps. Версия 3.2
pps Кстати, скрипт Хинта на инвиз на всех серваках работает?
Последний раз редактировалось Lynx, 23.04.2009 в 21:19.
непонимаю зачем нужен этот скрипт. Не проще ли было бы просто открывать окно трейда? я лично так справлялся)
Так можно сказать зачем скрипт на автозаточку можно и так заточки покидать или бот зачем можно и так покачаться. Скрипты для того и нужны чтоб автоматизировать какойто процесс.