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.