PDA

Просмотр полной версии : Скрипт, чтоб не флагаться.


Lynx
23.04.2009, 01:13
Скрипт для того, чтобы бить, не флагаясь, и не агря монстров.
var
Status, socialid: 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; //Отправил пакет дальше
delay(100);
buf:=#$73; //Открыть продажу
SendToServer;

buf:=#$76; //Закрыть продажу
SendToServer;
pck:='';
end;

end;
end.

alexteam
23.04.2009, 01:23
в данном случае, при приходе пакета атаки скрипт будет
открывать продажу. через 400мс закрывать продажу и уже далее пропустит пакет атаки на сервер.
поясняю.
pck не будет отправлен на сервер до того момента как скрипт не отработает полностью. если описаный мной порядок отправки пакетов неверен - требуется перенести pck в буффер либо временную а сам pck обнулить. переменную либо буффер отправить в нужный момент.

mks
23.04.2009, 01:27
Lynx, обзови процедуру SendMsg иначе и все будет путем, просто таковая уже существует:)

alexteam
23.04.2009, 01:34
а, ну и это тоже %)

mks
23.04.2009, 01:38
честно, вообще не понял что требуется от скрипта, при чем тут продажа, если надо что б не атаковал, не проще гасить пакет:
if FromClient and (pck[1]=#$0A) then pck:='';

Lynx
23.04.2009, 01:43
Исправиление в шапке, но всё равно не пашет.

Добавлено через 3 минуты
Там есть фишка, когда после атаки открываешь лавку, не флагаешься.
У меня l2ph 3.2 там sendmsg ешё нету, надо руками выводить

alexteam
23.04.2009, 01:50
а ты уверен что открытие и закрытие лавки ограничивается только request'ами ?

mks
23.04.2009, 01:55
да вообще не советовал бы использовать Delay, у тебя будет выходить лаг в 400мс, тут таймер надо бы сделать

Lynx
23.04.2009, 01:55
Снифаются только они
Не закрывает почему-то последним пакетом

mks
23.04.2009, 02:05
делай таймер для начала, просто подвисание всех пакетов на 400мс может на что-то и повлиять

Lynx
23.04.2009, 02:10
Всё, рабочая версия в шапке.

QaK
23.04.2009, 09:35
дамаг все равно не наносится, чисто декоративная весч, чтоб наод поразводить.

Lynx
23.04.2009, 17:31
Добавил код для прерывания каста на 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.

alexteam
23.04.2009, 17:43
мда...
При приходе пакета в пх он дешифровываеться и отправляеться скриптам. _после обработки скриптами_ (когда скрипт выполнен, т.е. курсор дошел до "end.") он шифруеться и отправляеться адрессату.
в данном случае наступакет 8секундный лаг. из за того что ты в обработчике делаешь 8секундную паузу.
новые пакеты в этот момент не поуступают, они остаються в стеке tcp.
когда настолько долгая пауза снимаеться может произойти чертешо %)

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

Velziv
23.04.2009, 17:44
непонимаю зачем нужен этот скрипт. Не проще ли было бы просто открывать окно трейда? я лично так справлялся)

Lynx
23.04.2009, 17:57
Так есть шанс флагнуться, да и скорость меньше. Обидно флагнуться, когда бьёшь рб, не правда ли?=) А на самом деле он не нужен, как и сама линейка.
В версии уже 3.4 можно таймер делать?

alexteam
23.04.2009, 18:07
да. можно.

Lynx
23.04.2009, 21:13
Сделал с таймером. Впринципе работает, но выдаёт ошибку перед кастом.http://s41.radikal.ru/i091/0904/86/f1074b6148d9.jpg
Вот новый код
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 Кстати, скрипт Хинта на инвиз на всех серваках работает?

Fer123
23.04.2009, 21:14
непонимаю зачем нужен этот скрипт. Не проще ли было бы просто открывать окно трейда? я лично так справлялся)

Так можно сказать зачем скрипт на автозаточку можно и так заточки покидать или бот зачем можно и так покачаться. Скрипты для того и нужны чтоб автоматизировать какойто процесс. ;)