Boyan1, целая страница топа посвещена тому чтоб тебе объяснить как свое ХП и МП и ИД считать.. хотя на первой странице в готовых скриптах ето уже милион раз сделано разными способами..
давай я тебе покажу если тебе лень разбираться:
возьмём для примера скрипт:
Код:
var
Bot1X,Bot1Y,Bot1Z,Bot2X,Bot2Y,Bot2Z:string;
IDAssistTarget:string;
rnd:integer;
bafSE: array [1..100] of string;
bafPP: array [1..100] of string;
BafSEApplyChar: array [1..100] of string;
BafSEApplyBaf: array [1..100] of string;
BafPPApplyChar: array [1..100] of string;
BafPPApplyBaf: array [1..100] of string;
NameKom,NameBot1,NameBot2:string;
MaxHPKom,MaxHPBot1,MaxHPBot2:integer;
MaxMPKom,MaxMPBot1,MaxMPBot2:integer;
CurHPKom,CurMPKom,CurHPbot1,CurMPbot1,CurHPbot2,CurMPbot2:integer;
IDKomandos,IDbot1,IDbot2:string;
ChekIdKom,ChekIdBot1,ChekIdBot2:boolean;
timer1: TTimer; //баф БОТ1
timer2: TTimer; //баф БОТ2
timer3: TTimer; //для создания пати
tick1,tick2,tick3:integer;
i:integer;
tempD:integer;
tempS:String;
//*********************БУФ ШЕ******************************************************************
procedure OnTimer1(Sender: TObject);
begin
bafSE[1]:=hstr('2F 2C 04 00 00 00 00 00 00 00'); //па
bafSE[2]:=hstr('2F 10 04 00 00 00 00 00 00 00'); //пд
bafSE[3]:=hstr('2F 35 04 00 00 00 00 00 00 00'); //фокус
bafSE[4]:=hstr('2F B4 04 00 00 00 00 00 00 00'); //вв
bafSE[5]:=hstr('2F 0B 04 00 00 00 00 00 00 00'); //ментал
bafSE[6]:=hstr('2F A5 04 00 00 00 00 00 00 00'); //резист к ветру
bafSE[7]:=hstr('2F D8 04 00 00 00 00 00 00 00'); //гвиданс-акураси
bafSE[8]:=hstr('2F DA 04 00 00 00 00 00 00 00'); //деф виспер- сила крита
bafSE[9]:=hstr('2F 36 04 00 00 00 00 00 00 00'); //кон
bafSE[10]:=hstr('2F 23 04 00 00 00 00 00 00 00'); //емповер
bafSE[11]:=hstr('2F F4 04 00 00 00 00 00 00 00'); //вамп
bafSE[12]:=hstr('2F 70 05 00 00 00 00 00 00 00'); //скаред атак реезист
BafSEApplyChar[1]:=IDKomandos;
BafSEApplyBaf[1]:=bafSE[1];
BafSEApplyChar[2]:=IDKomandos;
BafSEApplyBaf[2]:=bafSE[2];
BafSEApplyChar[3]:=IDKomandos;
BafSEApplyBaf[3]:=bafSE[3];
BafSEApplyChar[4]:=IDKomandos;
BafSEApplyBaf[4]:=bafSE[8];
BafSEApplyChar[5]:=IDKomandos;
BafSEApplyBaf[5]:=bafSE[4];
BafSEApplyChar[6]:=IDKomandos;
BafSEApplyBaf[6]:=bafSE[7];
BafSEApplyChar[7]:=IDKomandos;
BafSEApplyBaf[7]:=bafSE[5];
BafSEApplyChar[8]:=IDKomandos;
BafSEApplyBaf[8]:=bafSE[6];
BafSEApplyChar[9]:=IDBot1;
BafSEApplyBaf[9]:=bafSE[2];
BafSEApplyChar[10]:=IDBot1;
BafSEApplyBaf[10]:=bafSE[9];
BafSEApplyChar[11]:=IDBot1;
BafSEApplyBaf[11]:=bafSE[4];
BafSEApplyChar[12]:=IDBot1;
BafSEApplyBaf[12]:=bafSE[5];
BafSEApplyChar[13]:=IDBot1;
BafSEApplyBaf[13]:=bafSE[6];
BafSEApplyChar[14]:=IDBot1;
BafSEApplyBaf[14]:=bafSE[10];
BafSEApplyChar[15]:=IDBot1;
BafSEApplyBaf[15]:=bafSE[12];
BafSEApplyChar[16]:=IDBot2;
BafSEApplyBaf[16]:=bafSE[10];
buf:=hstr('04') + BafSEApplyChar[tick1] + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
buf:=BafSEApplyBaf[tick1];
SendToServerEX(NameBot1);
tick1:=tick1+1;
if tick1=17 then
begin
tick1:=1;
timer1.enabled:=false;
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
end;
end;
//*********************БУФ ПП******************************************************************
procedure OnTimer2(Sender: TObject);
begin
//список бафов:
bafPP[1]:=hstr('2F 0B 04 00 00 00 00 00 00 00'); //ментал
bafPP[2]:=hstr('2F 10 04 00 00 00 00 00 00 00'); // щит
bafPP[3]:=hstr('2F 2C 04 00 00 00 00 00 00 00'); // па
bafPP[4]:=hstr('2F 35 04 00 00 00 00 00 00 00'); // фокус
bafPP[5]:=hstr('2F 36 04 00 00 00 00 00 00 00'); // кон
bafPP[6]:=hstr('2F 3D 04 00 00 00 00 00 00 00'); // акумен
bafPP[7]:=hstr('2F A7 04 00 00 00 00 00 00 00'); // резист к огню
bafPP[8]:=hstr('2F B4 04 00 00 00 00 00 00 00'); // вв
bafPP[9]:=hstr('2F 26 04 00 00 00 00 00 00 00'); // берс
bafPP[10]:=hstr('2F 14 04 00 00 00 00 00 00 00'); // ХП реген
bafPP[12]:=hstr('2F 3E 04 00 00 00 00 00 00 00'); // хаст
bafPP[13]:=hstr('2F 15 04 00 00 00 00 00 00 00'); // блесс ХП
bafPP[14]:=hstr('2F 0C 04 00 00 00 00 00 00 00'); // маджик барьер
bafPP[15]:=hstr('2F 6C 05 00 00 00 00 00 00 00'); // гритер ПА
bafPP[16]:=hstr('2F 6D 05 00 00 00 00 00 00 00'); // гритер ПД
bafPP[17]:=hstr('2F 70 05 00 00 00 00 00 00 00'); // скаред атак резист
bafPP[18]:=hstr('2F 71 05 00 00 00 00 00 00 00'); // дарк атак резист
bafPP[19]:=hstr('2F A5 04 00 00 00 00 00 00 00'); // резист к ветру
BafPPApplyChar[1]:=IDKomandos;
BafPPApplyBaf[1]:=bafPP[6];
BafPPApplyChar[2]:=IDKomandos;
BafPPApplyBaf[2]:=bafPP[7];
BafPPApplyChar[3]:=IDKomandos;
BafPPApplyBaf[3]:=bafPP[9];
BafPPApplyChar[4]:=IDKomandos;
BafPPApplyBaf[4]:=bafPP[10]; //
BafPPApplyChar[5]:=IDKomandos;
BafPPApplyBaf[5]:=bafPP[12];
BafPPApplyChar[6]:=IDKomandos;
BafPPApplyBaf[6]:=bafPP[13];
BafPPApplyChar[7]:=IDKomandos;
BafPPApplyBaf[7]:=bafPP[14];
BafPPApplyChar[8]:=IDKomandos;
BafPPApplyBaf[8]:=bafPP[15];
BafPPApplyChar[9]:=IDKomandos;
BafPPApplyBaf[9]:=bafPP[18];
BafPPApplyChar[10]:=IDBot2;
BafPPApplyBaf[10]:=bafPP[1];
BafPPApplyChar[11]:=IDBot2;
BafPPApplyBaf[11]:=bafPP[2];
BafPPApplyChar[12]:=IDBot2;
BafPPApplyBaf[12]:=bafPP[5];
BafPPApplyChar[13]:=IDBot2;
BafPPApplyBaf[13]:=bafPP[6];
BafPPApplyChar[14]:=IDBot2;
BafPPApplyBaf[14]:=bafPP[7];
BafPPApplyChar[15]:=IDBot2;
BafPPApplyBaf[15]:=bafPP[8];
BafPPApplyChar[16]:=IDBot2;
BafPPApplyBaf[16]:=bafPP[13];
BafPPApplyChar[17]:=IDBot2;
BafPPApplyBaf[17]:=bafPP[14];
BafPPApplyChar[18]:=IDBot2;
BafPPApplyBaf[18]:=bafPP[16];
BafPPApplyChar[19]:=IDBot2;
BafPPApplyBaf[19]:=bafPP[17];
BafPPApplyChar[20]:=IDBot2;
BafPPApplyBaf[20]:=bafPP[18];
BafPPApplyChar[21]:=IDBot2;
BafPPApplyBaf[21]:=bafPP[19];
BafPPApplyChar[22]:=IDBot1;
BafPPApplyBaf[22]:=bafPP[6];
BafPPApplyChar[23]:=IDBot1;
BafPPApplyBaf[23]:=bafPP[7];
BafPPApplyChar[24]:=IDBot1;
BafPPApplyBaf[24]:=bafPP[13];
BafPPApplyChar[25]:=IDBot1;
BafPPApplyBaf[25]:=bafPP[14];
BafPPApplyChar[26]:=IDBot1;
BafPPApplyBaf[26]:=bafPP[16];
BafPPApplyChar[27]:=IDBot1;
BafPPApplyBaf[27]:=bafPP[18];
buf:=hstr('04') + BafPPApplyChar[tick2] + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot2);
buf:=BafPPApplyBaf[tick2];
SendToServerEX(NameBot2);
tick2:=tick2+1;
if tick2=28 then
begin
tick2:=1;
timer2.enabled:=false;
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot2);
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot2);
end;
end;
//****************************РАЗДАЧА ПРИГЛАШЕНИЙ НА ВСТУПЛЕНИЕ В ПАТИ*******************
//*********************А ТАКЖЕ ПОСЫЛКА ТЕКСТА Я1 Я2 Я3 для захвата ИДешников************
procedure OnTimer3(Sender: TObject);
begin
if tick3 = 1 then
begin
buf:=hstr('2B');
SendToServerEX(NameKom);
SendToServerEX(NameBot1);
SendToServerEX(NameBot2);
end;
if tick3 = 2 then
begin
buf:=hstr('29');
writeS(namebot1);
buf:=buf + hstr('00 00 00 00');
SendToServerEX(NameKom);
end;
if tick3 = 3 then
begin
buf:=hstr('29');
writeS(namebot2);
buf:=buf + hstr('00 00 00 00');
SendToServerEX(NameKom);
end;
if tick3 = 4 then
//if (IDKomandos = '') or (IDBot1 = '') or (IDBot2 = '') then
begin
buf:=hstr('38');
writes('я1');
buf:=buf + hstr('03 00 00 00'); ///9- али // 3-пати // 01 - общий
sendtoserverex(NameKom);
buf:=hstr('38');
writes('я2');
buf:=buf + hstr('03 00 00 00'); ///9- али // 3-пати // 01 - общий
sendtoserverex(NameBot1);
buf:=hstr('38');
writes('я3');
buf:=buf + hstr('03 00 00 00'); ///9- али // 3-пати // 01 - общий
sendtoserverex(NameBot2);
end;
tick3:=tick3+1;
if tick3=5 then
begin
tick3:=1;
timer3.enabled:=false;
end;
end;
//*************************БЕЖИМ ЗА ЛИДЕРОМ*******************************************
//процедура заставляет бежать ботов за лидером
procedure BotBeg;
begin
//проверяем условие чтоб координаты ботов небыли равными '' и ИД был перехвачен
if IDKomandos <> '' then
begin
//выделяем командира, эмулируя щелчек мыши
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
//бежим за командиром эмулируя повторный щелчек мыши по таргету
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
//выделяем командира, эмулируя щелчек мыши
buf:=hstr('04') + IDKomandos + Bot2X + Bot2Y + Bot2Z + hstr('00');
SendToServerEX(NameBot2);
//бежим за командиром эмулируя повторный щелчек мыши по таргету
buf:=hstr('04') + IDKomandos + Bot2X + Bot2Y + Bot2Z + hstr('00');
SendToServerEX(NameBot2);
end;
end;
procedure Init; //Вызывается при включении скрипта
begin
NameKom:='VORON7';
NameBot1:='Volya';
NameBot2:='MasterBuf';
CurHPKom:=15000;
CurHPBot1:=15000;
CurHPBot2:=15000;
CurMPKom:=15000;
CurMPBot1:=15000;
CurMPBot2:=15000;
MaxHPKom:=10;
MaxHPBot1:=10;
MaxHPBot2:=10;
ChekIDKom:=false;
ChekIDBot1:=false;
ChekIDBot2:=false;
tick1:=1;
tick2:=1;
tick3:=1;
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer1; //
timer1.enabled:=false; //
timer1.interval:=4000;
timer2:=TTimer.Create(nil);
timer2.OnTimer:=@OnTimer2; //
timer2.enabled:=false; //
timer2.interval:=4000;
timer3:=TTimer.Create(nil);
timer3.OnTimer:=@OnTimer3; //
timer3.enabled:=false; //
timer3.interval:=1000;
end;
procedure Free; //Вызывается при выключении скрипта
begin
timer1.Free;
timer2.Free;
timer3.Free;
end;
//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if pck='' then exit;
//******************************АВТОСОГЛАШЕНИЕ НА ВСТУПЛЕНИЕ В ПАТИ************************
//******************************ПРИ УСЛОВИИ ЧТО ПАТИ ДАЕТ- КОМАНДИР************************
if FromServer and (ConnectName=NameBot1) and (pck[1]=#$39) then
if ReadS(2)=NameKom then
begin
buf:=hstr('2A 01 00 00 00');
sendtoserverex(NameBot1);
end;
if FromServer and (ConnectName=NameBot2) and (pck[1]=#$39) then
if ReadS(2)=NameKom then
begin
buf:=hstr('2A 01 00 00 00');
sendtoserverex(NameBot2);
end;
//******************************БЛОК ДЛЯ ЗАПОМИНАНИЯ ИДЕШНИКОВ БОТОВ***********************
//******************************ОТЛАВЛИВАЕМ Я1 Я2 Я3***************************************
if FromServer and (ConnectName=NameKom) and (pck[1]=#$4A) then
begin
i:=10;
tempS:=readS(i);
if tempS=NameKom then
begin
tempS:=ReadS(i);
if tempS='я1' then
begin
IDKomandos:=pck[2]+pck[3]+pck[4]+pck[5];
end;
end;
end;
if FromServer and (ConnectName=NameBot1) and (pck[1]=#$4A) then
begin
i:=10;
tempS:=readS(i);
if tempS=NameBot1 then
begin
tempS:=ReadS(i);
if tempS='я2' then
begin
IDBot1:=pck[2]+pck[3]+pck[4]+pck[5];
end;
end;
end;
if FromServer and (ConnectName=NameBot2) and (pck[1]=#$4A) then
begin
i:=10;
tempS:=readS(i);
if tempS=NameBot2 then
begin
tempS:=ReadS(i);
if tempS='я3' then
begin
IDBot2:=pck[2]+pck[3]+pck[4]+pck[5];
end;
end;
end;
//*******************ЗАХВАТ КООРДИНАТ***************************************************
//если принят пакет от клиента с кординатами бота то
if FromClient and (ConnectName=NameBot1) and (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;
//если принят пакет от клиента с кординатами бота то
if FromClient and (ConnectName=NameBot2) and (pck[1]=#$48) then
begin
//запоминаем координаты
Bot2X:= pck[2] + pck[3] + pck[4] + pck[5];
Bot2Y:= pck[6] + pck[7] + pck[8] + pck[9];
Bot2Z:= pck[10] + pck[11] + pck[12] + pck[13];
end;
//********************ОСТСЛЕЖИВАЕМ ТРУПАКИ********************************************************
//если кто то умер.. пакет DIE.. то хилить его ненадо...
//нефиг трупы хилить...
if FromServer and (pck[1]=#$06) then
if (pck[2]+pck[3]+pck[4]+pck[5] = IDKomandos) then CurHPKom:=15000;
if FromServer and (pck[1]=#$06) then
if (pck[2]+pck[3]+pck[4]+pck[5] = IDBot1) then CurHPBot1:=15000;
if FromServer and (pck[1]=#$06) then
if (pck[2]+pck[3]+pck[4]+pck[5] = IDBot2) then CurHPBot2:=15000;
//*************************УЗНАЕМ ЛИМИТЫ ХП и МП***********************************************
//из пакета UserInfo который приходит во время бафа и не только
//КОМАНДИР
if FromServer and (pck[1]=#$04) and (ConnectName = NameKom) then
begin
i:=22;
tempS:=readS(i);
i:=i+48;
MaxHPKom:=readD(i);
CurHPKOM:=readD(i);
MaxMPKom:=readD(i);
CurMPKOM:=readD(i);
end;
//1-й бот
if FromServer and (pck[1]=#$04) and (ConnectName = NameBot1) then
begin
i:=22;
tempS:=readS(i);
i:=i+48;
MaxHPBot1:=readD(i);
CurHPBot1:=readD(i);
MaxMPBot1:=readD(i);
CurMPBot1:=readD(i);
end;
//2-й бот
if FromServer and (pck[1]=#$04) and (ConnectName = NameBot2) then
begin
i:=22;
tempS:=readS(i);
i:=i+48;
MaxHPBot2:=readD(i);
CurHPBot2:=readD(i);
MaxMPBot2:=readD(i);
CurMPBot2:=readD(i);
end;
//*************************СЛЕДИМ ЗА ХП и МП******************************************
//следим за ХП КОМАНДИРА
if FromServer and (pck[1]=#$0e) and (ConnectName = NameKom) then
if (pck[2] + pck[3] + pck[4] + pck[5] = IDKomandos) and (pck[6]=#$04) then
begin
CurHPKom:=(ord(pck[15]) * 256 + ord(pck[14]));
if (CurHPKom < round(MaxHPKom*0.7)) then
if (tick1 = 1) then
begin
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
buf:=hstr('2F C1 04 00 00 00 00 00 00 00');
SendToServerEX(NameBot1);
delay(500);
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
end;
if (CurHPKom < round(MaxHPKom*0.8)) then
if (tick2 = 1) then
begin
buf:=hstr('04') + IDKomandos + Bot2X + Bot2Y + Bot2Z + hstr('00');
SendToServerEX(NameBot2);
buf:=hstr('2F F7 03 00 00 00 00 00 00 00');
SendToServerEX(NameBot2);
delay(500);
buf:=hstr('04') + IDKomandos + Bot2X + Bot2Y + Bot2Z + hstr('00');
SendToServerEX(NameBot2);
end;
end;
//следим за МП КОМАНДИРА
if FromServer and (pck[1]=#$0e) and (ConnectName = NameKom) then
if (pck[2] + pck[3] + pck[4] + pck[5] = IDKomandos) and (pck[6]=#$02) then
begin
CurMPKom:=(ord(pck[15]) * 256 + ord(pck[14]));
RND:=round(random*100);
if (CurMPKom < round(MaxMPKom*0.8)) and (rnd<15) then
if (tick1 = 1) then
begin
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
buf:=hstr('2F F5 03 00 00 00 00 00 00 00');
SendToServerEX(NameBot1);
delay(500);
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
end;
end;
//следим за ХП у БОТ1
if FromServer and (pck[1]=#$0e) and (ConnectName = NameBot1) then
if (pck[2] + pck[3] + pck[4] + pck[5] = IDbot1) and (pck[6]=#$04) then
begin
CurHPbot1:=(ord(pck[15]) * 256 + ord(pck[14]));
if (CurHPbot1 < round(MaxHPBot1*0.8)) then
if (tick1 = 1) then
begin
buf:=hstr('04') + IDbot1 + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
buf:=hstr('2F C1 04 00 00 00 00 00 00 00');
SendToServerEX(NameBot1);
delay(500);
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
end;
if (CurHPbot1 < round(MaxHPBot1*0.6)) then
if (tick1 = 1) then
begin
buf:=hstr('04') + IDbot1 + Bot2X + Bot2Y + Bot2Z + hstr('00');
SendToServerEX(NameBot2);
buf:=hstr('2F F7 03 00 00 00 00 00 00 00');
SendToServerEX(NameBot2);
delay(500);
buf:=hstr('04') + IDKomandos + Bot2X + Bot2Y + Bot2Z + hstr('00');
SendToServerEX(NameBot2);
buf:=hstr('04') + IDKomandos + Bot2X + Bot2Y + Bot2Z + hstr('00');
SendToServerEX(NameBot2);
end;
end;
//следим за ХП у БОТ2
if FromServer and (pck[1]=#$0e) and (ConnectName = NameBot2) then
if (pck[2] + pck[3] + pck[4] + pck[5] = IDbot2) and (pck[6]=#$04) then
begin
CurHPbot2:=(ord(pck[15]) * 256 + ord(pck[14]));
if (CurHPbot2 < round(MaxHPBot2*0.8)) then
if (tick2 = 1) then
begin
buf:=hstr('04') + IDbot2 + Bot2X + Bot2Y + Bot2Z + hstr('00');
SendToServerEX(NameBot2);
buf:=hstr('2F C1 04 00 00 00 00 00 00 00');
SendToServerEX(NameBot2);
delay(500);
buf:=hstr('04') + IDKomandos + Bot2X + Bot2Y + Bot2Z + hstr('00');
SendToServerEX(NameBot2);
buf:=hstr('04') + IDKomandos + Bot2X + Bot2Y + Bot2Z + hstr('00');
SendToServerEX(NameBot2);
end;
if (CurHPbot2 < round(MaxHPBot2*0.6)) then
if (tick2 = 1) then
begin
buf:=hstr('04') + IDbot2 + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
buf:=hstr('2F F7 03 00 00 00 00 00 00 00');
SendToServerEX(NameBot1);
delay(500);
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
end;
end;
//**********************СЛЕДИМ ЗА ТАРГЕТАМИ****************************************
//КОМАНДИР
//если принят пакет со сменой таргета у командира то
if FromServer and (pck[1]=#$A6) and (ConnectName = NameKom) then
begin
//запоминаем ИД таргета командира для ассиста
IDAssistTarget:= pck[2]+pck[3]+pck[4]+pck[5];
end;
//**********************САЖАЕМ ВСЮ ПАТИ ЧЕРЕЗ КОНТРОЛ****************************************
//если принят пакет на сажание с контролом то сажаем всю пати
if FromClient and (pck=hstr('45 00 00 00 00 01 00 00 00 00')) and (ConnectName = NameKom) then
begin
buf:=hstr('45 00 00 00 00 01 00 00 00 00');
SendToServerEX(NameBot1);
buf:=hstr('45 00 00 00 00 01 00 00 00 00');
SendToServerEX(NameBot2);
end;
//**************************УПРАВЛЕНИЕ************************************************
//ПОКЛОН- БЕЖАТЬ за КОМАНДИРОМ
if FromClient and (ConnectName=NameKom) and (pck=hstr('1B 07 00 00 00')) then
begin
pck:='';
BotBeg;
exit;
end;
//ПРИВЕТСТВИЕ- БАФ ПЕРВЫМ БОТОМ (первая кнопка)
if FromClient and (ConnectName=NameKom) and (pck=hstr('1B 02 00 00 00')) then
begin
pck:='';
timer1.enabled:=true;
exit;
end;
//ГРИИТЕРИНГ - ПОБЕДА - баф ПП (вторая кнопка)
if FromClient and (ConnectName=NameKom) and (pck=hstr('1B 03 00 00 00')) then
begin
pck:='';
timer2.enabled:=true;
exit;
end;
//ADVANCE- В АТАКУ - пати быстрое создание (3-я кнопка)
if FromClient and (ConnectName=NameKom) and (pck=hstr('1B 04 00 00 00')) then
begin
pck:='';
//сразу рвем пати у всех чаров и командир раздает пати поновому
//чары автоматически принимают пати
//используется таймер т.к. одновременно 2-м чарам пати кинуть нельзя
timer3.enabled:=true;
exit;
end;
//YES- ШАКЛЯ ПО АССИСТУ (4-я кнопка)
if FromClient and (ConnectName=NameKom) and (pck=hstr('1B 06 00 00 00')) then
begin
pck:='';
buf:=hstr('04') + IDAssistTarget + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
buf:=hstr('04') + IDAssistTarget + Bot2X + Bot2Y + Bot2Z + hstr('00');
SendToServerEX(NameBot2);
buf:=hstr('2F B6 04 00 00 00 00 00 00 00');
SendToServerEX(NameBot1);
buf:=hstr('2F B1 04 00 00 00 00 00 00 00');
SendToServerEX(NameBot2);
exit;
end;
end.
разбираемся, прри старте скрипта самое главное захватить ИД у всех кто принимает участие в скрипте.. за ето отвечает следущие кусочки:
Код:
var
NameKom,NameBot1,NameBot2:string;
IDKomandos,IDbot1,IDbot2:string;
ChekIdKom,ChekIdBot1,ChekIdBot2:boolean;
... ...
procedure Init; //Вызывается при включении скрипта
begin
NameKom:='ОСНОВА';
NameBot1:='ШЕник';
NameBot2:='ППНик';
... .. ..
end;
... .... ..
//ADVANCE- В АТАКУ - пати быстрое создание (3-я кнопка)
if FromClient and (ConnectName=NameKom) and (pck=hstr('1B 04 00 00 00')) then
begin
pck:='';
//сразу рвем пати у всех чаров и командир раздает пати поновому
//чары автоматически принимают пати
//используется таймер т.к. одновременно 2-м чарам пати кинуть нельзя
timer3.enabled:=true;
exit;
end;
... ... ..
//****************************РАЗДАЧА ПРИГЛАШЕНИЙ НА ВСТУПЛЕНИЕ В ПАТИ*******************
//*********************А ТАКЖЕ ПОСЫЛКА ТЕКСТА Я1 Я2 Я3 для захвата ИДешников************
procedure OnTimer3(Sender: TObject);
begin
if tick3 = 1 then
begin
buf:=hstr('2B');
SendToServerEX(NameKom);
SendToServerEX(NameBot1);
SendToServerEX(NameBot2);
end;
if tick3 = 2 then
begin
buf:=hstr('29');
writeS(namebot1);
buf:=buf + hstr('00 00 00 00');
SendToServerEX(NameKom);
end;
if tick3 = 3 then
begin
buf:=hstr('29');
writeS(namebot2);
buf:=buf + hstr('00 00 00 00');
SendToServerEX(NameKom);
end;
if tick3 = 4 then
//if (IDKomandos = '') or (IDBot1 = '') or (IDBot2 = '') then
begin
buf:=hstr('38');
writes('я1');
buf:=buf + hstr('03 00 00 00'); ///9- али // 3-пати // 01 - общий
sendtoserverex(NameKom);
buf:=hstr('38');
writes('я2');
buf:=buf + hstr('03 00 00 00'); ///9- али // 3-пати // 01 - общий
sendtoserverex(NameBot1);
buf:=hstr('38');
writes('я3');
buf:=buf + hstr('03 00 00 00'); ///9- али // 3-пати // 01 - общий
sendtoserverex(NameBot2);
end;
tick3:=tick3+1;
if tick3=5 then
begin
tick3:=1;
timer3.enabled:=false;
end;
end;
... ... ... ... ...
//******************************АВТОСОГЛАШЕНИЕ НА ВСТУПЛЕНИЕ В ПАТИ************************
//******************************ПРИ УСЛОВИИ ЧТО ПАТИ ДАЕТ- КОМАНДИР************************
if FromServer and (ConnectName=NameBot1) and (pck[1]=#$39) then
if ReadS(2)=NameKom then
begin
buf:=hstr('2A 01 00 00 00');
sendtoserverex(NameBot1);
end;
if FromServer and (ConnectName=NameBot2) and (pck[1]=#$39) then
if ReadS(2)=NameKom then
begin
buf:=hstr('2A 01 00 00 00');
sendtoserverex(NameBot2);
end;
.... ... ... ... ...
//******************************БЛОК ДЛЯ ЗАПОМИНАНИЯ ИДЕШНИКОВ БОТОВ***********************
//******************************ОТЛАВЛИВАЕМ Я1 Я2 Я3***************************************
if FromServer and (ConnectName=NameKom) and (pck[1]=#$4A) then
begin
i:=10;
tempS:=readS(i);
if tempS=NameKom then
begin
tempS:=ReadS(i);
if tempS='я1' then
begin
IDKomandos:=pck[2]+pck[3]+pck[4]+pck[5];
end;
end;
end;
if FromServer and (ConnectName=NameBot1) and (pck[1]=#$4A) then
begin
i:=10;
tempS:=readS(i);
if tempS=NameBot1 then
begin
tempS:=ReadS(i);
if tempS='я2' then
begin
IDBot1:=pck[2]+pck[3]+pck[4]+pck[5];
end;
end;
end;
if FromServer and (ConnectName=NameBot2) and (pck[1]=#$4A) then
begin
i:=10;
tempS:=readS(i);
if tempS=NameBot2 then
begin
tempS:=ReadS(i);
if tempS='я3' then
begin
IDBot2:=pck[2]+pck[3]+pck[4]+pck[5];
end;
end;
end;
итак.. после запуска скрипта.. жмем социальное действие.. при етом автоматически создается пати и в ету пати в чат все боты и командир пишут автоматически "я1" "я2" "я3".. последний блок в коде отлавливает етот текст из чата, проверяет кто автор етого текста.. и если имя автора совпадает с именем бота и текст совпадает с заданным "я2" то из етого пакета (сообщение в чат-ответ сервера) выдирается ИД отправителя.. т.е. мы имеем 3 ИДешника.. 1- ИД главного перса которого надо хилить и 2 ИДешника ботов (ШЕ и ПП)..
теперь приступаем к слежению за состоянием ХП и собственно хилу..
Код:
procedure Init; //Вызывается при включении скрипта
begin
NameKom:='ОСНОВА';
NameBot1:='ШЕник';
NameBot2:='ППник';
CurHPKom:=15000;
CurHPBot1:=15000;
CurHPBot2:=15000;
CurMPKom:=15000;
CurMPBot1:=15000;
CurMPBot2:=15000;
MaxHPKom:=10;
MaxHPBot1:=10;
MaxHPBot2:=10;
... ... ...
end;
при старте скрипта задаем значения с потолка лимитивные.. т.е. максимальные уровни.. в работе скрипт их сам подкоректирует на реальные значения.. ето нужно для того чтобы исключить хил при старте скрипта, пока еще скрипт не вычислил значения лимитов ХП и МП нужно ручками их 1 раз в начале вписать..
и вот собственно слежение за лимитами и текущими значениями:
Код:
//*************************УЗНАЕМ ЛИМИТЫ ХП и МП***********************************************
//из пакета UserInfo который приходит во время бафа и не только
//КОМАНДИР
if FromServer and (pck[1]=#$04) and (ConnectName = NameKom) then
begin
i:=22;
tempS:=readS(i);
i:=i+48;
MaxHPKom:=readD(i);
CurHPKOM:=readD(i);
MaxMPKom:=readD(i);
CurMPKOM:=readD(i);
end;
//1-й бот
if FromServer and (pck[1]=#$04) and (ConnectName = NameBot1) then
begin
i:=22;
tempS:=readS(i);
i:=i+48;
MaxHPBot1:=readD(i);
CurHPBot1:=readD(i);
MaxMPBot1:=readD(i);
CurMPBot1:=readD(i);
end;
//2-й бот
if FromServer and (pck[1]=#$04) and (ConnectName = NameBot2) then
begin
i:=22;
tempS:=readS(i);
i:=i+48;
MaxHPBot2:=readD(i);
CurHPBot2:=readD(i);
MaxMPBot2:=readD(i);
CurMPBot2:=readD(i);
end;
... ... ... ...
//*************************СЛЕДИМ ЗА ХП и МП******************************************
//следим за ХП КОМАНДИРА
if FromServer and (pck[1]=#$0e) and (ConnectName = NameKom) then
if (pck[2] + pck[3] + pck[4] + pck[5] = IDKomandos) and (pck[6]=#$04) then
begin
CurHPKom:=(ord(pck[15]) * 256 + ord(pck[14]));
if (CurHPKom < round(MaxHPKom*0.7)) then
if (tick1 = 1) then
begin
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
buf:=hstr('2F C1 04 00 00 00 00 00 00 00');
SendToServerEX(NameBot1);
delay(500);
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
end;
if (CurHPKom < round(MaxHPKom*0.8)) then
if (tick2 = 1) then
begin
buf:=hstr('04') + IDKomandos + Bot2X + Bot2Y + Bot2Z + hstr('00');
SendToServerEX(NameBot2);
buf:=hstr('2F F7 03 00 00 00 00 00 00 00');
SendToServerEX(NameBot2);
delay(500);
buf:=hstr('04') + IDKomandos + Bot2X + Bot2Y + Bot2Z + hstr('00');
SendToServerEX(NameBot2);
end;
end;
//следим за МП КОМАНДИРА
if FromServer and (pck[1]=#$0e) and (ConnectName = NameKom) then
if (pck[2] + pck[3] + pck[4] + pck[5] = IDKomandos) and (pck[6]=#$02) then
begin
CurMPKom:=(ord(pck[15]) * 256 + ord(pck[14]));
RND:=round(random*100);
if (CurMPKom < round(MaxMPKom*0.8)) and (rnd<15) then
if (tick1 = 1) then
begin
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
buf:=hstr('2F F5 03 00 00 00 00 00 00 00');
SendToServerEX(NameBot1);
delay(500);
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
end;
end;
//следим за ХП у БОТ1
if FromServer and (pck[1]=#$0e) and (ConnectName = NameBot1) then
if (pck[2] + pck[3] + pck[4] + pck[5] = IDbot1) and (pck[6]=#$04) then
begin
CurHPbot1:=(ord(pck[15]) * 256 + ord(pck[14]));
if (CurHPbot1 < round(MaxHPBot1*0.8)) then
if (tick1 = 1) then
begin
buf:=hstr('04') + IDbot1 + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
buf:=hstr('2F C1 04 00 00 00 00 00 00 00');
SendToServerEX(NameBot1);
delay(500);
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
end;
if (CurHPbot1 < round(MaxHPBot1*0.6)) then
if (tick1 = 1) then
begin
buf:=hstr('04') + IDbot1 + Bot2X + Bot2Y + Bot2Z + hstr('00');
SendToServerEX(NameBot2);
buf:=hstr('2F F7 03 00 00 00 00 00 00 00');
SendToServerEX(NameBot2);
delay(500);
buf:=hstr('04') + IDKomandos + Bot2X + Bot2Y + Bot2Z + hstr('00');
SendToServerEX(NameBot2);
buf:=hstr('04') + IDKomandos + Bot2X + Bot2Y + Bot2Z + hstr('00');
SendToServerEX(NameBot2);
end;
end;
//следим за ХП у БОТ2
if FromServer and (pck[1]=#$0e) and (ConnectName = NameBot2) then
if (pck[2] + pck[3] + pck[4] + pck[5] = IDbot2) and (pck[6]=#$04) then
begin
CurHPbot2:=(ord(pck[15]) * 256 + ord(pck[14]));
if (CurHPbot2 < round(MaxHPBot2*0.8)) then
if (tick2 = 1) then
begin
buf:=hstr('04') + IDbot2 + Bot2X + Bot2Y + Bot2Z + hstr('00');
SendToServerEX(NameBot2);
buf:=hstr('2F C1 04 00 00 00 00 00 00 00');
SendToServerEX(NameBot2);
delay(500);
buf:=hstr('04') + IDKomandos + Bot2X + Bot2Y + Bot2Z + hstr('00');
SendToServerEX(NameBot2);
buf:=hstr('04') + IDKomandos + Bot2X + Bot2Y + Bot2Z + hstr('00');
SendToServerEX(NameBot2);
end;
if (CurHPbot2 < round(MaxHPBot2*0.6)) then
if (tick2 = 1) then
begin
buf:=hstr('04') + IDbot2 + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
buf:=hstr('2F F7 03 00 00 00 00 00 00 00');
SendToServerEX(NameBot1);
delay(500);
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
end;
end;
проблема с переходом с ц на интерлюд случается в етом блоке:
Код:
//КОМАНДИР
if FromServer and (pck[1]=#$04) and (ConnectName = NameKom) then
begin
i:=22;
tempS:=readS(i);
i:=i+48;
MaxHPKom:=readD(i);
CurHPKOM:=readD(i);
MaxMPKom:=readD(i);
CurMPKOM:=readD(i);
end;
конкретно в строке i:=i+48; 48 - ето для интерлюда.. но я етот скрипт разрабатывал на ц4.. и там было непомню сколько.. либо 44 либо 52.. при переходе на интерлюд пакет чуть чуть изменился етот на 4 байта съехало расположение ХМ и МП относительно имени..
ну вопщем я думаю разберешся теперь? а то раздули пустяк на 2 страници уже..