20 мин баф так и не хочет работать, может кто подскажет где косячу
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; // идешники командира и варки
timer4,timer3:TTimer; //таймеры бафа
i,x:integer;
tempS:String;
///////////////////////////////////////// buff's//////////////////////////////////////////////
procedure OnTimer4 (Sender: TObject);
begin
case x of
1: 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 20min
procedure OnTimer3 (Sender: TObject); //баффы через 20 мин
begin
timer3.interval:=1150000; //каждые 20 мин (за вычетом времени самих бафов)
timer4.enabled:=true;//вкл. бафы
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;
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='' then exit; // нех пустые пакеты обрабатывать типа
//*******************ЗАХВАТ КООРДИНАТ***************************************************
//если принят пакет от клиента с кординатами бота то
if FromClient then
if ConnectName=NameBot1 then
if pck[1]=#$48 then
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;
//********************ОСТСЛЕЖИВАЕМ ТРУПАКИ********************************************************
//если кто то умер то приходит пакет DIE.. то хилить его ненадо...
//нефиг трупы хилить...
//для того чтоб трупяков боты не хилили ставим кодом то что ХП (текущее) у них до жопы... т.е. 15к
if FromServer then
if ConnectName=NameKom then
if pck[1]=#$06 then
if pck[2] + pck[3] + pck[4] + pck[5] = IDKomandos then
CurHPKom:=15000;
if FromServer then
if ConnectName=NameBot1 then
if pck[1]=#$06 then
if pck[2] + pck[3] + pck[4] + pck[5] = IDBot1 then
CurHPBot1:=15000;
//*************************УЗНАЕМ ЛИМИТЫ ХП и МП и ИД***********************************************
//из пакета UserInfo который приходит во время бафа и не только
//как тока скрипт начинает свою работу то он на все аки отправляет запрос на открытие ИНВЕНТОРЯ
//вместе с ответом сервера всегда приходит пакет ЮЗЕР ИНФО.. из етого замечательного пакета мы считываем максимальные значения ХП и МП
//а так жэ ИД чара (бота- бафера)
//КОМАНДИР
if FromServer then
if ConnectName = NameKom then
if pck[1]=#$04 then
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;
//1-й бот
if FromServer then
if ConnectName = NameBot1 then
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;
//*************************СЛЕДИМ ЗА ХП и МП******************************************
if FromServer then
if ConnectName = NameKom then
if pck[1]=#$0e then
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;
//socialHELLO буф Война не по ассисту а по ИДкомандира т.е самого его
if FromClient then
if ConnectName=NameKom then
if pck[1]+pck[2]=hstr('1B 02') then // 02 - socialHELLO
begin
//убиваем этот пакет, чтоб сервер его не получил
pck:='';
// бафы
timer4.enabled:=true;
x:=1;
exit;
end;
end.
P.S велосипед не изобретал
--> VORON, Grinch, NLOpP (c)