z0mbie86 Posted August 1, 2009 Posted August 1, 2009 ____________$$$$$$$*$______$$$$$$$$$ __________$$$$$$$$$*$$$__$$$$$$$__$$$$ _________$$$$$$$$$$*$$$$$$$$$$$$$$__$$$ _________$$$$$$$$$$*$$$$$$$$$$$$$$__$$$ _________$$$$$$$$$$*$$$$$$$$$$$$$$__$$$ __________$$$$$$$$$*$$$$$$$$$$$$$__$$$ ____________$$$$$$$*$$$$$$$$$$$$$$$$ _______________$$$$*$$$$$$$$$$$$$ _________________$$*$$$$$$$$$$$ ____________________$$$$$$$$ _____________________$$$$$ ______________________$$$ _______________________$ //****************************************************************************** {version 0.2 от 11.06.2009г. by NLObP 1.write NAME 2.run script 3.V folder \ scripts \ picture.txt should be based on the file with text or pictures 4.load command in the chat> load = picture 5.write how to write a chat, team chat> dest = 1, or chat = 1 (0 - general chat, etc.) 6.start for execution, the command in the chat> start or run 7.stop script, using chat> stop 8.posle output image script stops himself. } //****************************************************************************** program Risuem_w_chat2; const Name='NLObP'; //имя персонажа в игре Pathtxt='.\scripts\'; //путь к файлу NameTxt='picture.txt'; //имя файла с рисунком (текстом) debug=true; //true - чтобы видеть команды в чате DefaultExecuteDelay=500; //.............................................................................. var TextPic : TStringlist; //сюда загружаем текст из файла ExecuteTimer: Ttimer; //основной таймер ExecuteDelay: integer; //задержка между сообщениями в чат strIndex: integer; //номер строки chat: integer; //в какой чат слать //****************************************************************************** procedure Init; //Вызывается при включении скрипта var i, j :integer; begin TextPic:=TStringList.Create; //загружаем файл TextPic.LoadFromFile(PathTxt+NameTxt); strIndex:=0; //начинаем с первой строки ExecuteDelay:=DefaultExecuteDelay; //задержка между сообщениями в чат ExecuteTimer:=TTimer.Create(nil); ExecuteTimer.Enabled:=false; ExecuteTimer.Interval:=ExecuteDelay; //время задержки ExecuteTimer.OnTimer:=@OnExecute; end; //.............................................................................. procedure Free; //Вызывается при выключении скрипта begin ExecuteTimer.Enabled:=False; //остановим на всякий случай Executetimer.Free; TextPic.free; end; //****************************************************************************** { Вспомогательные процедуры и функции } //****************************************************************************** procedure debugMsg(msg: string); begin if debug then begin sendMSG(msg); SendMessage(msg); end; end; //****************************************************************************** { Посылаем пакеты } //****************************************************************************** //послать сообщение в чат (видим только мы) //use: SendMessage(msg); procedure SendMessage(msg:string); //отправка системных сообщений клиенту begin buf:=#$4A; WriteD(0); WriteD(10); WriteS(''); WriteS(msg); SendToClientEx(Name); end; //49=Say2:s(Text)d(Type)s(Target) procedure SendMs(msg: string; dest: integer); begin //buf:=#$49; //Грация buf:=#$38; //Интерлюдия WriteS(Msg); WriteD(dest); WriteS(''); SendToServerEx(Name); end; //.............................................................................. function ExtractValue(sData, sFind: string;): string; {возвращаем конец строки после найденного символа} var s: string; i,j: integer; begin i:=0; result:=''; i:=find(sData, sFind); if i>0 then result:=copy(sData, i+length(sFind), length(sData)); end; function RtrimEx(sData, sDelimiter: string): string; {Удаление из строки S заданные символы справа} var m,i : integer; s: string; begin s:=sData; i:=0; while i=0 do begin m:=length(s); if m>0 then begin if s[m]<>sDelimiter then i:=1; if s[m]=sDelimiter then delete(s,m,1); end; if m <= 0 then i:=1; end; result:=s; end; //.............................................................................. function LtrimEx(sData, sDelimiter:String): string; {Удаление из строки S заданные символы слева} var m,i : integer; s: string; begin s:=sData; i:=0; while i=0 do begin m := length(s); if m > 0 then begin if s[1]<>sDelimiter then i:=1; if s[1]=sDelimiter then delete(s,1,1); end; if m <= 0 then i:=1; end; result:=s; end; //.............................................................................. function Ltrim(sData:String): string; {Удаление из строки S заданные символы слева} begin result:=LtrimEx(sData,' '); end; //.............................................................................. function Rtrim(sData:String): string; {Удаление из строки S заданные символы слева} begin result:=RtrimEx(sData,' '); end; //.............................................................................. function AllTrimEx(sData, sDelimiterLeft, sDelimiterRight: String): string; {Удаление из строки S заданные символы слева и справа} begin result:=LtrimEx(RtrimEx(sData, sDelimiterRight), sDelimiterLeft); end; //.............................................................................. function AllTrim(sData: String): string; {Удаление из строки S заданные символы слева и справа} begin result:=Ltrim(Rtrim(sData)); end; //.............................................................................. function ExtractName(sData, sFind: string): string; {возвращаем строку до найденного символа} var i: integer; begin i:=0; result:=''; i:=find(sData, sFind); if i>0 then result:=copy(sData, 1, i-length(sFind)+1); end; //.............................................................................. function Find(const S, P: string): Integer; {Функция Find ищет подстроку P в строке S и возвращает индекс первого символа подстроки или 0, если подстрока не найдена. Хотя в общем случае этот метод, как и большинство методов грубой силы, малоэффективен, в некоторых ситуациях он вполне приемлем.} var i, j: Integer; begin Result:=0; if Length(P)>Length(S) then begin debugMSG('Несоответствие длин: p='+inttostr(Length(P))+' > S='+inttostr(Length(s))); debugMSG('Строка: '+inttostr(strIndex)); Exit; end; for i:=1 to Length(S)-Length(P)+1 do begin for j:=1 to Length(P) do begin if P[j]<>S[i+j-1] then Break else if j=Length(P) then begin Result:=i; Exit; end; end; end; end; //****************************************************************************** // Парсер/Исполнитель: главный цикл обработки команд Валкера //****************************************************************************** function OnExecute(Sender: TObject): integer; //CommandList: TStringList var s, cmd, param : string; begin try s:=TextPic[strIndex]; //считываем строку рисунка SendMs(s, chat); //выводим в чат inc(strIndex); //следующая строка except ExecuteTimer.Enabled:=False; //остановим end; end; procedure UserCommands; //комманды пользователя var s, cmd: string; begin //если комманда обработана удачно, то в чат сообщение не попадет, а будет выдано системное сообщение прямо в клиент s:=ReadS(2); debugMsg(s); s:=s+'='; //чтобы можно было взять число в конце cmd:=RTrimEx(ExtractName(s, '='), '='); //получили строку вплодь до найденного символа cmd:=UpperCase(alltrim(cmd)); case cmd of //команда загрузки скрипта> load=picture 'LOAD': begin s:=ExtractValue(s, '='); //получили остаток строки начиная с искомого символа s:=RTrimEx(ExtractName(s, '='), '='); //получили строку вплодь до найденного символа TextPic.clear; TextPic.LoadFromFile(PathTxt+s+'.txt'); //загружаем pck:=''; end; 'START','RUN': begin strIndex:=0; //начинаем с первой строки ExecuteDelay:=DefaultExecuteDelay; //задержка между выводом строк на экран ExecuteTimer.Enabled:=true; //включим таймер pck:=''; end; 'STOP': begin ExecuteTimer.Enabled:=false; //выключим интерпретацию скрипта валкера pck:=''; end; 'DEST','CHAT': begin s:=ExtractValue(s, '='); //получили остаток строки начиная с искомого символа s:=RTrimEx(ExtractName(s, '='), '='); //получили строку вплодь до найденного символа chat:=strtoint(s); //сохраним тип чата куда слать сообщение pck:=''; end; end; end; //****************************************************************************** { основная часть скрипта, вызывается при приходе каждого пакета, если скрипт включен } //****************************************************************************** begin //**************************************************************************** //не обрабатываем пустые пакеты if pck='' then exit; //**************************************************************************** if (ConnectName=Name) and FromClient then begin case pck[1] of //************************************************************************ //#$49: UserCommands; //Say2:s(Text)d(Type)s(Target) Gracia #$38: UserCommands; //Say2:s(Text)d(Type)s(Target) Interlud end; end; end. Quote
d0ds™ Posted August 1, 2009 Posted August 1, 2009 LOl, in my server, I will get ban if I use it in town? cuz it Obvious an exploit Quote
Versus Posted August 1, 2009 Posted August 1, 2009 Damn, that's really inspiring! +1 karma for your good job ;) Quote
Vazelos Posted August 1, 2009 Posted August 1, 2009 damn!! Fu^^ing cool !! I will share an other pic in this type from my collection as soon as get my pc back. Quote
shmeq Posted August 1, 2009 Posted August 1, 2009 nice but don't you need first to be able to use phx on the server? witch it's kinda hard for some ppl... Quote
~Sensei~ Posted August 1, 2009 Posted August 1, 2009 you do and lol.. this post just made me want to set it up again =P also make a script to change all my old irc pic codes to l2 =)) Quote
ĐarkSlayer Posted August 1, 2009 Posted August 1, 2009 nice but don't you need first to be able to use phx on the server? witch it's kinda hard for some ppl... lol its easier that stealing an icecream from a baby lol.Try it and u will see its nothing dificult if u have brain. Quote
~Sensei~ Posted August 1, 2009 Posted August 1, 2009 brain.. or a guide... whatever gets you there =P http://www.maxcheaters.com/forum/index.php?topic=51932.0 Quote
GrisoM Posted August 1, 2009 Posted August 1, 2009 Hahah look really good, shame you try to steal our accounts yesterday xD Quote
shmeq Posted August 2, 2009 Posted August 2, 2009 i know how to use phx man but from what reason i don't know it happens very rarely that it works and captures packets. Quote
ultrawolf Posted August 4, 2009 Posted August 4, 2009 ithis a exploit ? Yes, in the matter of facts it is... BTW: nice picture you've got there :D Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.