2F EF 03 00 00 00 00 00 00 00 chant of battle
48 A0 C7 00 00 9B 98 02 00 91 EC FF FF C1 92 00 00 00 00 00 00 chant of sheilding
это из пакета реквест меджик скилл юс... то это или я где то ошибся?
Добавлено через 8 часов 23 минуты
всё понял ошибку , для начинающих , каждый скил начинаеться с "2F", затем в 16-ом код скила
Последний раз редактировалось cat, 03.05.2008 в 22:56.
Причина: Добавлено сообщение
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]
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.
хм извени твой скрипт для меня великовать не могу концов найти для смотри скрипт БД танцует нонстоп:
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]