Просмотр полной версии : Скрипт, чтоб не флагаться.
Скрипт для того, чтобы бить, не флагаясь, и не агря монстров.
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 обнулить. переменную либо буффер отправить в нужный момент.
Lynx, обзови процедуру SendMsg иначе и все будет путем, просто таковая уже существует:)
alexteam
23.04.2009, 01:34
а, ну и это тоже %)
честно, вообще не понял что требуется от скрипта, при чем тут продажа, если надо что б не атаковал, не проще гасить пакет:
if FromClient and (pck[1]=#$0A) then pck:='';
Исправиление в шапке, но всё равно не пашет.
Добавлено через 3 минуты
Там есть фишка, когда после атаки открываешь лавку, не флагаешься.
У меня l2ph 3.2 там sendmsg ешё нету, надо руками выводить
alexteam
23.04.2009, 01:50
а ты уверен что открытие и закрытие лавки ограничивается только request'ами ?
да вообще не советовал бы использовать Delay, у тебя будет выходить лаг в 400мс, тут таймер надо бы сделать
Снифаются только они
Не закрывает почему-то последним пакетом
делай таймер для начала, просто подвисание всех пакетов на 400мс может на что-то и повлиять
Всё, рабочая версия в шапке.
дамаг все равно не наносится, чисто декоративная весч, чтоб наод поразводить.
Добавил код для прерывания каста на 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.
когда настолько долгая пауза снимаеться может произойти чертешо %)
делай через таймер.
всунув в его обработчик деактивацию таймера и назначив ему требуемый интервал.
включай таймер когда нужно блокировать определенный тип пакетов
и блокируй пакеты если таймер активен.
непонимаю зачем нужен этот скрипт. Не проще ли было бы просто открывать окно трейда? я лично так справлялся)
Так есть шанс флагнуться, да и скорость меньше. Обидно флагнуться, когда бьёшь рб, не правда ли?=) А на самом деле он не нужен, как и сама линейка.
В версии уже 3.4 можно таймер делать?
alexteam
23.04.2009, 18:07
да. можно.
Сделал с таймером. Впринципе работает, но выдаёт ошибку перед кастом.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 Кстати, скрипт Хинта на инвиз на всех серваках работает?
непонимаю зачем нужен этот скрипт. Не проще ли было бы просто открывать окно трейда? я лично так справлялся)
Так можно сказать зачем скрипт на автозаточку можно и так заточки покидать или бот зачем можно и так покачаться. Скрипты для того и нужны чтоб автоматизировать какойто процесс. ;)
vBulletin® v3.6.11, Copyright ©2000-2024, Jelsoft Enterprises Ltd. Перевод: zCarot