var
timer3: TTimer;
procedure Init;
begin//баффы
timer3:=TTimer.Create(nil);
timer3.OnTimer:=@OnBuff; //
timer3.enabled:=false; // таймер по умолчанию выключен
timer3.interval:=60000; // первый баф через 60 секend;
procedure OnBuff(Sender: TObject); //баффыbeginif(MyID<>0)and(sit=false)thenbegin
timer3.interval:=1200000; //каждые 20 мин (за вычетом времени самих бафов)
timer1.enabled:=true; //вкл. бафыend;
end;
Последний раз редактировалось NLObP, 04.05.2008 в 22:01.
20 мин баф так и не хочет работать, может кто подскажет где косячу
delphi Код:
var
Bot1X,Bot1Y,Bot1Z:string; //координаты варки
IDAssistTarget:string; //таргет командира
rnd:integer; // вспомогательная для случайного события
bafWC: array [1..100] ofstring; //список бафов WС
NameKom,NameBot1:string; //имена чаров учавствующих в процессе
MaxHPKom,MaxHPBot1:integer; //максимальные уровни ХП (лимиты)
CurHPKom,CurHPBot1:integer; //текущие значения ХП
IDKomandos,IDbot1:string; // идешники командира и варки
timer4,timer3:TTimer; //таймеры бафа
i,x:integer;
tempS:String;
///////////////////////////////////////// buff's//////////////////////////////////////////////procedure OnTimer4 (Sender: TObject);
begincase x of1: begin//выделяем командира, эмулируя щелчек мыши
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
buf:=bafWC[6];
SendToServerEx(NameBot1);
x:=x+1;
end;
2: begin
buf:=bafWC[1];
SendToServerEx(NameBot1);
x:=x+1;
end;
3: begin
buf:=bafWC[2];
SendToServerEx(NameBot1);
x:=x+1;
end;
4: begin
buf:=bafWC[3];
SendToServerEx(NameBot1);
x:=x+1;
end;
5: begin
buf:=bafWC[4];
SendToServerEx(NameBot1);
x:=x+1;
end;
6: begin
buf:=bafWC[5];
SendToServerEx(NameBot1);
x:=x+1;
end;
7: begin
buf:=bafWC[7];
SendToServerEx(NameBot1);
x:=0;
timer4.enabled:=false;
end;
end;
end;
/////////////////////////// buff 20minprocedure OnTimer3 (Sender: TObject); //баффы через 20 минbegin
timer3.interval:=1150000; //каждые 20 мин (за вычетом времени самих бафов)
timer4.enabled:=true;//вкл. бафыend;
//*************************БЕЖИМ ЗА ЛИДЕРОМ*******************************************//процедура заставляет бежать ботов за лидеромprocedure BotBeg;
begin//проверяем условие чтоб координаты ботов небыли равными '' и ИД был перехваченif IDKomandos <> ''thenbegin//выделяем командира, эмулируя щелчек мыши
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;
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;
//новый баф кастовать через 4 секунды
timer4:=TTimer.Create(nil);
timer4.OnTimer:=@OnTimer4; //
timer4.enabled:=false; //
timer4.interval:=5300; //5300 для варки// добавляем функцию что бы бафал сам каждые 20 мин ( NLobP )//баффы
timer3:=TTimer.Create(nil);
timer3.OnTimer:=@OnTimer3; //
timer3.enabled:=true; // таймер по умолчанию выключен
timer3.interval:=60000; // первый баф через 60 сек// ЗАПРОС НА ОТКРЫТИЕ ИНВЕНТОРЯ!!!! ДЛЯ ЗАХВАТА ИДЕШНИКА!// чтобы принудительно вызвать от сервера пакет ЮЗЕР ИНФО в котором ИД указан//а также для того чтобы захвватить ИД банок для питья
buf:=hstr('0F');
SendToServerEX(NameKom);
SendToServerEX(NameBot1);
end;
procedure Free; //Вызывается при выключении скриптаbegin
timer4.Free;
end;
//основная часть скрипта//вызывается при приходе каждого пакета если скрипт включенbegin//для тго чтоб 2-3 скрипта коректно работали одновременно..if pck=''thenexit; // нех пустые пакеты обрабатывать типа//*******************ЗАХВАТ КООРДИНАТ***************************************************//если принят пакет от клиента с кординатами бота тоif FromClient thenif ConnectName=NameBot1 thenif pck[1]=#$48thenbegin//запоминаем координаты
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;
//********************ОСТСЛЕЖИВАЕМ ТРУПАКИ********************************************************//если кто то умер то приходит пакет DIE.. то хилить его ненадо...//нефиг трупы хилить...//для того чтоб трупяков боты не хилили ставим кодом то что ХП (текущее) у них до жопы... т.е. 15кif FromServer thenif ConnectName=NameKom thenif pck[1]=#$06thenif pck[2] + pck[3] + pck[4] + pck[5] = IDKomandos then
CurHPKom:=15000;
if FromServer thenif ConnectName=NameBot1 thenif pck[1]=#$06thenif pck[2] + pck[3] + pck[4] + pck[5] = IDBot1 then
CurHPBot1:=15000;
//*************************УЗНАЕМ ЛИМИТЫ ХП и МП и ИД***********************************************//из пакета UserInfo который приходит во время бафа и не только//как тока скрипт начинает свою работу то он на все аки отправляет запрос на открытие ИНВЕНТОРЯ//вместе с ответом сервера всегда приходит пакет ЮЗЕР ИНФО.. из етого замечательного пакета мы считываем максимальные значения ХП и МП//а так жэ ИД чара (бота- бафера)//КОМАНДИРif FromServer thenif ConnectName = NameKom thenif pck[1]=#$04thenbegin
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;
//1-й ботif FromServer thenif ConnectName = NameBot1 thenif pck[1]=#$04thenbegin
IDBot1:=pck[18]+pck[19]+pck[20]+pck[21];
i:=22;
tempS:=readS(i);
i:=i+48;
MaxHPBot1:=readD(i);
CurHPBot1:=readD(i);
end;
//*************************СЛЕДИМ ЗА ХП и МП******************************************if FromServer thenif ConnectName = NameKom thenif pck[1]=#$0e thenif(pck[2] + pck[3] + pck[4] + pck[5] + pck[6] = IDKomandos + #$04)thenbegin//считываем текущее состояние ХП!!-)
CurHPKom:=ReadD(14);
//ну собственно ето уже можно править под желания каждого://если жизни текущие меньше 0,5 от шкалы (50%) то..if(CurHPKom < round(MaxHPKom*0.5))thenbegin
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;
//socialHELLO буф Война не по ассисту а по ИДкомандира т.е самого егоif FromClient thenif ConnectName=NameKom thenif pck[1]+pck[2]=hstr('1B 02')then// 02 - socialHELLObegin//убиваем этот пакет, чтоб сервер его не получил
pck:='';
// бафы
timer4.enabled:=true;
x:=1;
exit;
end;
end.
P.S велосипед не изобретал --> VORON, Grinch, NLOpP (c)
Последний раз редактировалось NLObP, 07.05.2008 в 01:10.
Причина: вставил тэги [HIGHLIGHT="delphi"]...[/HIGHLIGHT]
хм извени твой скрипт для меня великовать не могу концов найти для смотри скрипт БД танцует нонстоп:
delphi Код:
const//баффы
b1='2F 0F 01 00 00 00 00 00 00 00'; // Wариор
b2='2F 13 01 00 00 00 00 00 00 00 '; // Хаст БД
b3='2F 36 01 00 00 00 00 00 00 00';
var
IDPartyMember, IDAssistTarget: String; //ИД командира и ИД его таргета и Собственный ИД
CoordBufX, CoordBufY, CoordBufZ :String; //координаты бота
NameBuffer, NameKomandos : String; // Имена
x: integer;
timer1: TTimer;
timer2: TTimer;
// ну процедура бега как я понял тупо таргет по командиру :)procedure bRun;
beginif(CoordBufX <> '')and(IDPartyMember <> '')thenbegin//выделяем командира, эмулируя щелчек мыши
buf:=hstr('04') + IDPartyMember + CoordBufX + CoordBufY + CoordBufZ + hstr('00');
SendToServerEX(NameBuffer);
//бежим за командиром эмулируя повторный щелчек мыши по таргету
buf:=hstr('04') + IDPartyMember + CoordBufX + CoordBufY + CoordBufZ + hstr('00');
SendToServerEX(NameBuffer);
end;
end;
//сам ребаф таймер и колисество наращиваем сами только копируя под цифрой один и ставим перед// цифрой 3 ну и перебиваем соответвено что б не повторялись цыфрыprocedure OnTimer(Sender: TObject);
begincase x of1: begin
buf:=hstr(b1);
SendToServerEx(NameBuffer);
x:=x+1;
end;
2: begin
buf:=hstr(b2);
SendToServerEx(NameBuffer);
x:=x+1;
end;
3: begin
buf:=hstr(b3);
SendToServerEx(NameBuffer);
x:=x+1;
end;
4: begin
bRun;
SendToServerEx(NameBuffer);
x:=x+1;
timer1.enabled:=false;
end;
5: begin
SendToServerEx(NameBuffer);
x:=0;
timer2.enabled:=false;
timer1.enabled:=false;//стацевали самое смешное как мне казалось реденса не должно бытьend;
end;
end;
procedure OnTimer2(Sender: TObject);
begin
timer1.enabled:=true;
x:=1;
end;
procedure Init; //Вызывается при включении скриптаbegin
NameBuffer:='xxZZxxZZxx'; //ну имя БД или свс у кого что есть
NameKomandos:='yyZZyyZZyy'; //командоса имя
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer;
timer1.enabled:=false;
timer1.interval:=3000;
x:=0;
timer2:=TTimer.Create(nil);
timer2.OnTimer:=@OnTimer2;
timer2.enabled:=false;
timer2.interval:=127000; // тут короче по формуле что б мана не летела у свса или бд// кол. песен в бафе * 2000 +1000+120000 =2*2000+1000+120000=125000end;
procedure Free; //Вызывается при выключении скриптаbegin
timer1.Free;
timer2.Free;
end;
//основная часть скрипта//вызывается при приходе каждого пакета если скрипт включен// это часть для меня осталась тайнаbeginif pck=''thenexit;
//если от сервака принят пакет с ИД и Координатами членов пати тоif FromServer and(pck[1]=#$a7)thenbegin//запоминаем ИД командира
IDPartyMember:=pck[6] + pck[7] + pck[8] + pck[9];
end;
//если принят пакет от клиента с кординатами бафера тоif FromClient and(ConnectName=NameBuffer)and(pck[1]=#$48)thenbegin//запоминаем координаты
CoordBufX:= pck[6] + pck[7] + pck[8] + pck[9];
CoordBufY:= pck[10] + pck[11] + pck[12] + pck[13];
CoordBufZ:= pck[14] + pck[15] + pck[16] + pck[17];
end;
//далее идут управляющие команды// если КОМАНДИР пишет в пати чат цифру "4" (ребаф) как я понял это (pck[6]=#$03)// ксли убрать этот байт то в любой, но кому как мне так удобней if FromClient and(ConnectName=NameKomandos)and(pck[1]=#$38)thenif(pck[2]=#$31)and(pck[3]=#$00)and(pck[4]=#$00)and(pck[5]=#$00)and(pck[6]=#$03)thenbegin//убиваем этот пакет, чтоб сервер его не получил
pck:='';
//Бафер БЕЖИТ за КОМАНДИРОМ
bRun;
//выйти из рабочей части скрипта чтобы другие услови не проверяли убитый пакет нулевой длинныexit;
end;
// если КОМАНДИР пишет в пати чат цифру "4" (ребаф) как я понял это (pck[6]=#$03)// ксли убрать этот байт то в любой, но кому как мне так удобнейif FromClient and(ConnectName=NameKomandos)and(pck[1]=#$38)thenif(pck[2]=#$34)and(pck[3]=#$00)and(pck[4]=#$00)and(pck[5]=#$00)and(pck[6]=#$03)thenbegin//убиваем этот пакет, чтоб сервер его не получил
pck:='';
timer1.enabled:=true;
timer2.enabled:=true;
x:=1;
//выйти из рабочей части скрипта чтобы другие услови не проверяли убитый пакет нулевой длинныexit;
end;
// вырубаем скриптif FromClient and(ConnectName=NameKomandos)and(pck[1]=#$38)thenif(pck[2]=#$30)and(pck[3]=#$00)and(pck[4]=#$00)and(pck[5]=#$00)and(pck[6]=#$03)thenbegin//убиваем этот пакет, чтоб сервер его не получил
pck:='';
timer1.enabled:=false;
timer2.enabled:=false;
x:=1;
//выйти из рабочей части скрипта чтобы другие услови не проверяли убитый пакет нулевой длинныexit;
end;
end.[/code]
Добавлено через 8 минут
и по пунктам напиши что делает твой скрипт с первого приближения твои задачи можно проще реализовать.
Последний раз редактировалось Grinch, 21.05.2008 в 16:17.
Причина: Добавлено сообщение
вообщем весь прикол что при старте таймера на 20 мин баф , не передавал значение x:=1; вот и всё )) "смотрим в книгу , видим фигу"
работает вместе с LxAssistent )
надо отладить до конца, затем выложу
delphi Код:
var
Bot1X,Bot1Y,Bot1Z:string; //координаты варки
IDAssistTarget:string; //таргет командира
rnd:integer; // вспомогательная для случайного события
bafWC: array [1..100] ofstring; //список бафов WС
NameKom,NameBot1:string; //имена чаров учавствующих в процессе
MaxHPKom,MaxHPBot1:integer; //максимальные уровни ХП (лимиты)
CurHPKom,CurHPBot1:integer; //текущие значения ХП
IDKomandos,IDbot1:string; // идешники командира и варки
timer4,timer3,timer5:TTimer; //таймера бафа
i,x:integer;
tempS:String;
///////////////////////////////////////// buff's//////////////////////////////////////////////procedure OnTimer4 (Sender: TObject);
begincase x of1: begin//выделяем командира, эмулируя щелчек мыши
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
buf:=bafWC[6];
SendToServerEx(NameBot1);
x:=x+1;
end;
2: begin
buf:=bafWC[1];
SendToServerEx(NameBot1);
x:=x+1;
end;
3: begin
buf:=bafWC[2];
SendToServerEx(NameBot1);
x:=x+1;
end;
4: begin
buf:=bafWC[3];
SendToServerEx(NameBot1);
x:=x+1;
end;
5: begin
buf:=bafWC[4];
SendToServerEx(NameBot1);
x:=x+1;
end;
6: begin
buf:=bafWC[5];
SendToServerEx(NameBot1);
x:=x+1;
end;
7: begin
buf:=bafWC[7];
SendToServerEx(NameBot1);
x:=0;
timer4.enabled:=false;
end;
end;
end;
/////////////////////////// buff 20minprocedure Buff (Sender: TObject); //баффы через 20 минbegin
x:=1;
timer4.enabled:=true;//вкл. бафы
timer3.interval:=1150000; //каждые 20 мин (за вычетом времени самих бафов)end;
procedure heal (Sender: TObject);
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);
timer5.enabled:=false;
end;
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;
//новый баф кастовать через 4 секунды
timer4:=TTimer.Create(nil);
timer4.OnTimer:=@OnTimer4; //
timer4.enabled:=false; //
timer4.interval:=5300; //5300 для варки
timer5:=TTimer.Create(nil);
timer5.OnTimer:=@heal;
timer5.enabled:=false;
timer5.interval:=3000; // делаем задержку между лечениями 30 сек// добавляем функцию что бы бафал сам каждые 20 мин ( NLobP )//баффы
timer3:=TTimer.Create(nil);
timer3.OnTimer:=@Buff; //
timer3.enabled:=True; // таймер по умолчанию выключен
timer3.interval:=30000; // первый баф через 60 сек// ЗАПРОС НА ОТКРЫТИЕ ИНВЕНТОРЯ!!!! ДЛЯ ЗАХВАТА ИДЕШНИКА!// чтобы принудительно вызвать от сервера пакет ЮЗЕР ИНФО в котором ИД указан//а также для того чтобы захвватить ИД банок для питья
buf:=hstr('0F');
SendToServerEX(NameKom);
SendToServerEX(NameBot1);
end;
procedure Free; //Вызывается при выключении скриптаbegin
timer4.Free;
timer3.Free;
timer5.Free;
end;
//основная часть скрипта//вызывается при приходе каждого пакета если скрипт включенbegin//для тго чтоб 2-3 скрипта коректно работали одновременно..if pck=''thenexit; // нех пустые пакеты обрабатывать типа//*******************ЗАХВАТ КООРДИНАТ***************************************************//если принят пакет от клиента с кординатами бота тоif FromClient thenif ConnectName=NameBot1 thenif pck[1]=#$48thenbegin//запоминаем координаты
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;
//********************ОСТСЛЕЖИВАЕМ ТРУПАКИ********************************************************//если кто то умер то приходит пакет DIE.. то хилить его ненадо...//нефиг трупы хилить...//для того чтоб трупяков боты не хилили ставим кодом то что ХП (текущее) у них до жопы... т.е. 15кif FromServer thenif ConnectName=NameKom thenif pck[1]=#$06thenif pck[2] + pck[3] + pck[4] + pck[5] = IDKomandos then
CurHPKom:=15000;
if FromServer thenif ConnectName=NameBot1 thenif pck[1]=#$06thenif pck[2] + pck[3] + pck[4] + pck[5] = IDBot1 then
CurHPBot1:=15000;
//*************************УЗНАЕМ ЛИМИТЫ ХП и МП и ИД***********************************************//из пакета UserInfo который приходит во время бафа и не только//как тока скрипт начинает свою работу то он на все аки отправляет запрос на открытие ИНВЕНТОРЯ//вместе с ответом сервера всегда приходит пакет ЮЗЕР ИНФО.. из етого замечательного пакета мы считываем максимальные значения ХП и МП//а так жэ ИД чара (бота- бафера)//КОМАНДИРif FromServer thenif ConnectName = NameKom thenif pck[1]=#$04thenbegin
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;
//1-й ботif FromServer thenif ConnectName = NameBot1 thenif pck[1]=#$04thenbegin
IDBot1:=pck[18]+pck[19]+pck[20]+pck[21];
i:=22;
tempS:=readS(i);
i:=i+48;
MaxHPBot1:=readD(i);
CurHPBot1:=readD(i);
end;
//*************************СЛЕДИМ ЗА ХП и МП******************************************if FromServer thenif ConnectName = NameKom thenif pck[1]=#$0e thenif(pck[2] + pck[3] + pck[4] + pck[5] + pck[6] = IDKomandos + #$04)thenbegin//считываем текущее состояние ХП!!-)
CurHPKom:=ReadD(14);
//ну собственно ето уже можно править под желания каждого://если жизни текущие меньше 0,7 от шкалы (50%) то..if(CurHPKom < round(MaxHPKom*0.5))then
timer5.enabled:=true;
end;
//socialHELLO буф Война не по ассисту а по ИДкомандира т.е самого егоif FromClient thenif ConnectName=NameKom thenif pck[1]+pck[2]=hstr('1B 02')then// 02 - socialHELLObegin//убиваем этот пакет, чтоб сервер его не получил
pck:='';
// бафы
timer4.enabled:=true;
x:=1;
exit;
end;
//"Bow" (ПОКЛОН)- включаем автобафif FromClient thenif ConnectName=NameKom thenif pck[1]+pck[2]=hstr('1B 07')thenbegin
pck:='';
timer3.enabled:=true;
exit;
end;
end.
Щас орк подрастёт, добавлю весь баф ) привязывать следование за командиром и остальное не стал, хорошо работает LxAssistent так что вот Бот умеет только , сам лечить на 50% хп (можно поставить по желанию) и бафать каждые 20 мин ) Думаю кому надо , могут ввести проверки на наличие маны, не сидит ли бот , и т.п. возможно пойже выложу )
Последний раз редактировалось NLObP, 07.05.2008 в 01:14.
Причина: вставил тэги [HIGHLIGHT="delphi"]...[/HIGHLIGHT]
QaK, с мягким знаком =) точней Квак мягко выразился держать константы в масиве динамическом эт изврат я конечно не программер, но эт из зенитници по воробьям
да нет в нем ни каких извратов массив только ... остальное заимствовано, для лечения , и нормально работает ) ... осталось , как я уже говорил, добавить проверки на ману.
var
Bot1X,Bot1Y,Bot1Z:string; //координаты варки
IDAssistTarget:string; //таргет командира
rnd:integer; // вспомогательная для случайного события
bafWC: array [1..100] ofstring; //список бафов 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 20minprocedure Ontimer1 (Sender: TObject); //баффы через 20 минbegin
timer1.interval:=1200000; //каждые 20 мин (за вычетом времени самих бафов)
x:=1;
timer2.enabled:=true;//вкл. бафыend;
///////////////////////////////////////// buff's//////////////////////////////////////////////procedure Ontimer2 (Sender: TObject);
begincase x of1: 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 <> ''thenbegin//выделяем командира, эмулируя щелчек мыши
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=''thenexit; // нех пустые пакеты обрабатывать типа//****************************************************************************if(ConnectName=NameBot1)and FromClient thenbegincase 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: begincase ReadD(2)of//социальное действие Hello для начала ловли2: begin//вкл. бафы
timer1.enabled:=true;
//убиваем этот пакет, чтоб сервер его не получил
pck:='';
exit;
end;
end;
end;
end;
end;
//****************************************************************************if(ConnectName=NameKom)and FromServer thenbegincase pck[1] of//********************ОСТСЛЕЖИВАЕМ ТРУПАКИ********************************************************//если кто то умер то приходит пакет DIE.. то хилить его ненадо...//нефиг трупы хилить...//для того чтоб трупяков боты не хилили ставим кодом то что ХП (текущее) у них до жопы... т.е. 15к//КОМАНДИР
#$06: beginif 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: beginif(pck[2]+pck[3]+pck[4]+pck[5]+pck[6]=IDKomandos+#$04)thenbegin//считываем текущее состояние ХП!!-)
CurHPKom:=ReadD(14);
//ну собственно ето уже можно править под желания каждого://если жизни текущие меньше 0,5 от шкалы (50%) то..if(CurHPKom < round(MaxHPKom*0.5))thenbegin
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 thenbegincase pck[1] of//********************ОСТСЛЕЖИВАЕМ ТРУПАКИ********************************************************//если кто то умер то приходит пакет DIE.. то хилить его ненадо...//нефиг трупы хилить...//для того чтоб трупяков боты не хилили ставим кодом то что ХП (текущее) у них до жопы... т.е. 15к//БОТ1
#$06: beginif pck[2]+pck[3]+pck[4]+pck[5]=IDBot1 then CurHPBot1:=15000;
end;
//*************************УЗНАЕМ ЛИМИТЫ ХП и МП и ИД***********************************************//из пакета UserInfo который приходит во время бафа и не только//как тока скрипт начинает свою работу то он на все аки отправляет запрос на открытие ИНВЕНТОРЯ//вместе с ответом сервера всегда приходит пакет ЮЗЕР ИНФО.. из етого замечательного пакета мы считываем максимальные значения ХП и МП//а так жэ ИД чара (бота- бафера)//БОТ1
#$04: beginif pck[1]=#$04thenbegin
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.