Показать сообщение отдельно
Старый 07.05.2008, 01:00   #370
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

cat, проверь скрипт плиз
delphi Код:
var     Bot1X,Bot1Y,Bot1Z:string; //координаты варки     IDAssistTarget:string; //таргет командира     rnd:integer// вспомогательная для случайного события     bafWC: array [1..100] of string; //список бафов WС     NameKom,NameBot1 : string; //имена чаров учавствующих в процессе     MaxHPKom,MaxHPBot1 : integer; //максимальные уровни ХП (лимиты)     CurHPKom,CurHPBot1 : integer; //текущие значения ХП     IDKomandos,IDbot1:string; // идешники командира и варки     timer1,timer2 : TTimer; //таймеры бафа     i,x:integer;     tempS:String; procedure Init; //Вызывается при включении скрипта begin   NameKom:='XXX';        //командир   NameBot1:='XXX';       //варка   //список бафов:   //само собой вы его можете расширить новыми бафами которых тут нет..   //это те бафы кторые я использую от ПП   bafWC[1]:=hstr('2F EF 03 00 00 00 00 00 00 00')//chant of battle   bafWC[2]:=hstr('2F E5 04 00 00 00 00 00 00 00')//chant of rage   bafWC[3]:=hstr('2F F1 03 00 00 00 00 00 00 00')//chant of sheilding   bafWC[4]:=hstr('2F E4 04 00 00 00 00 00 00 00')//chant of evansion   bafWC[5]:=hstr('2F EE 03 00 00 00 00 00 00 00')//chant of fire ( m def )   bafWC[6]:=hstr('2F EA 03 00 00 00 00 00 00 00')//flame chant ( acum )   bafWC[7]:=hstr('2F 1E 05 00 00 00 00 00 00 00')//vampiric   //при старте скрипта значения переменных =0   //поэтому скрипт подумает что у всех 0 ХП и начнется хаос.. все начнут друг друга хилить без остановки   //чтоб избежать етого выставим начальные значения.. то что ХП у нас- дожопы.. много.. 15к.. т.е. хилить ненадо.   //а потом скрипт сам захватит текущее знасение.. и всё коректно будет...   CurHPKom:=15000;   CurHPBot1:=15000;   //дело в том что скрипт расчитывает хилить или нет в зависимости от % от шкалы.. если вся шкала =0 (по дефолту)   //то ето както некоректно там будет хотя вроде пофиг..   //но для коректности понимания процесса мы пишем что максимальная шкала ХП у нас оч маленькая а текущие значения- оч большие..   //поетому никакие хилы небудут происходить при старте скрипта..   MaxHPKom:=10;   MaxHPBot1:=10;   // добавляем функцию что бы бафал сам каждые 20 мин ( NLobP )   //баффы   timer1:=TTimer.Create(nil);   timer1.OnTimer:=@Ontimer1;   timer1.enabled:=true; // таймер по умолчанию выключен   timer1.interval:=60000; // первый баф через 60 сек   //новый баф кастовать через 4 секунды   timer2:=TTimer.Create(nil);   timer2.OnTimer:=@Ontimer2; //   timer2.enabled:=false; //   timer2.interval:=5300//5300 для варки   // ЗАПРОС НА ОТКРЫТИЕ ИНВЕНТОРЯ!!!! ДЛЯ ЗАХВАТА ИДЕШНИКА!   // чтобы принудительно вызвать от сервера пакет ЮЗЕР ИНФО в котором ИД указан   //а также для того чтобы захвватить ИД банок для питья   buf:=hstr('0F');   SendToServerEX(NameKom);   SendToServerEX(NameBot1); end; procedure Free; //Вызывается при выключении скрипта begin   timer1.Free;   timer2.Free; end; ///////////////////////// // buff 20min procedure Ontimer1 (Sender: TObject); //баффы через 20 мин begin   timer1.interval:=1200000; //каждые 20 мин (за вычетом времени самих бафов)   x:=1;   timer2.enabled:=true;//вкл. бафы end; ///////////////////////////////////////// buff's////////////////////////////////////////////// procedure Ontimer2 (Sender: TObject); begin   case x of     1: begin       //выделяем командира, эмулируя щелчек мыши       buf:=hstr('04')+IDKomandos+Bot1X+Bot1Y+Bot1Z+hstr('00');       SendToServerEX(NameBot1);       buf:=bafWC[6];       SendToServerEx(NameBot1);       inc(x);     end;     2: begin       buf:=bafWC[1];       SendToServerEx(NameBot1);       inc(x);     end;     3: begin       buf:=bafWC[2];       SendToServerEx(NameBot1);       inc(x);     end;     4: begin       buf:=bafWC[3];       SendToServerEx(NameBot1);       inc(x);     end;     5: begin       buf:=bafWC[4];       SendToServerEx(NameBot1);       inc(x);     end;     6: begin       buf:=bafWC[5];       SendToServerEx(NameBot1);       inc(x);     end;     7: begin       buf:=bafWC[7];       SendToServerEx(NameBot1);       x:=0;       timer2.enabled:=false;     end;   end; end; //*************************БЕЖИМ ЗА ЛИДЕРОМ******************************************* //процедура заставляет бежать ботов за лидером procedure BotBeg; begin   //проверяем условие чтоб координаты ботов небыли равными '' и ИД был перехвачен   if  IDKomandos <> '' then  begin     //выделяем командира, эмулируя щелчек мыши     buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');     if IDBot1<>'' then SendToServerEX(NameBot1);     //бежим за командиром эмулируя повторный щелчек мыши по таргету     buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');     if IDBot1<>'' then SendToServerEX(NameBot1);   end; end; //основная часть скрипта //вызывается при приходе каждого пакета если скрипт включен begin   //****************************************************************************   //для того чтоб 2-3 скрипта коректно работали  одновременно..   if pck='' then exit// нех пустые пакеты обрабатывать типа   //****************************************************************************   if (ConnectName=NameBot1) and FromClient then begin     case pck[1] of       //*******************ЗАХВАТ КООРДИНАТ***************************************************       //если принят пакет от клиента с кординатами бота то       #$48: begin         //запоминаем координаты         Bot1X:= pck[2] + pck[3] + pck[4] + pck[5];         Bot1Y:= pck[6] + pck[7] + pck[8] + pck[9];         Bot1Z:= pck[10] + pck[11] + pck[12] + pck[13];       end;       #$1B: begin         case ReadD(2) of           //социальное действие Hello для начала ловли           2: begin             //вкл. бафы             timer1.enabled:=true;             //убиваем этот пакет, чтоб сервер его не получил             pck:='';             exit;           end;         end;       end;     end;   end;   //****************************************************************************   if (ConnectName=NameKom) and FromServer then begin     case pck[1] of       //********************ОСТСЛЕЖИВАЕМ ТРУПАКИ********************************************************       //если кто то умер то приходит пакет DIE.. то хилить его ненадо...       //нефиг трупы хилить...       //для того чтоб трупяков боты не хилили ставим кодом то что ХП (текущее) у них до жопы... т.е. 15к       //КОМАНДИР       #$06: begin         if pck[2]+pck[3]+pck[4]+pck[5]=IDKomandos then CurHPKom:=15000;       end;       //*************************УЗНАЕМ ЛИМИТЫ ХП и МП и ИД***********************************************       //из пакета UserInfo который приходит во время бафа и не только       //как тока скрипт начинает свою работу то он на все аки отправляет запрос на открытие ИНВЕНТОРЯ       //вместе с ответом сервера всегда приходит пакет ЮЗЕР ИНФО.. из етого замечательного пакета мы считываем  максимальные значения ХП и МП       //а так жэ  ИД чара (бота- бафера)       //КОМАНДИР       #$04: begin         IDKomandos:=pck[18]+pck[19]+pck[20]+pck[21]; //тут выдергиваем ИД чара         i:=22;         tempS:=readS(i); //ето используем для удобства.. имя типа пропускаем.. потому как каждый раз оно из разного кол-ва букв состоит.. в скобках переменная автоматом увеличивается на кол-во букв (ну там по формуле.. в юникоде 1 буква=2 байта, и символ окончания строки еще 00 00)         i:=i+48; //через 48 байтофъ после имени указывается лимиты и текущие значения для ХП и МП         //запоминаем их.. тут нам не особо важны текущие значения.. хотя лишний раз не помешают         //но важно- максимальное значение- ЛИМИТЫ         MaxHPKom:=readD(i);         CurHPKOM:=readD(i);       end;       //*************************СЛЕДИМ ЗА ХП и МП******************************************       #$0E: begin         if (pck[2]+pck[3]+pck[4]+pck[5]+pck[6]=IDKomandos+#$04) then begin           //считываем текущее состояние ХП!!-)           CurHPKom:=ReadD(14);           //ну собственно ето уже можно править под желания каждого:           //если жизни текущие меньше 0,5 от шкалы (50%) то..           if (CurHPKom < round(MaxHPKom*0.5)) then begin             buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');             SendToServerEX(NameBot1);             buf:=hstr('2F CD 04 00 00 00 00 00 00 00'); //chant of life             SendToServerEX(NameBot1);           end;         end;       end;     end;   end;   //****************************************************************************   if (ConnectName=NameBot1) and FromServer then begin     case pck[1] of       //********************ОСТСЛЕЖИВАЕМ ТРУПАКИ********************************************************       //если кто то умер то приходит пакет DIE.. то хилить его ненадо...       //нефиг трупы хилить...       //для того чтоб трупяков боты не хилили ставим кодом то что ХП (текущее) у них до жопы... т.е. 15к       //БОТ1       #$06: begin         if pck[2]+pck[3]+pck[4]+pck[5]=IDBot1 then CurHPBot1:=15000;       end;       //*************************УЗНАЕМ ЛИМИТЫ ХП и МП и ИД***********************************************       //из пакета UserInfo который приходит во время бафа и не только       //как тока скрипт начинает свою работу то он на все аки отправляет запрос на открытие ИНВЕНТОРЯ       //вместе с ответом сервера всегда приходит пакет ЮЗЕР ИНФО.. из етого замечательного пакета мы считываем  максимальные значения ХП и МП       //а так жэ  ИД чара (бота- бафера)       //БОТ1       #$04: begin         if pck[1]=#$04 then begin           IDBot1:=pck[18]+pck[19]+pck[20]+pck[21];           i:=22;           tempS:=readS(i);           i:=i+48;           MaxHPBot1:=readD(i);           CurHPBot1:=readD(i);         end;       end;     end;   end; end.
NLObP вне форума   Ответить с цитированием