Показать сообщение отдельно
Старый 29.02.2008, 02:40   #272
Рыцарь
 
Аватар для VORON
 
Регистрация: 06.08.2007
Сообщений: 209
Сказал Спасибо: 6
Имеет 67 спасибок в 34 сообщенях
VORON пока неопределено
По умолчанию

выкладываю более менее универсальный скрипт на баферов.. у вас ШЕ ПП БИШ ЕЕ?
впринципе независимо от сотава- скрипт переделок не требует.. запускаете и всё работет..
но! ваши пожелания в (когда и каму хилить и каким скилом ) учитываются там.. я коменты вставил- где править надо..
скрипт хорош тем что нетребует переделок если увас нет ШЕ ПП БИШ и ЕЕ одновременно а есть кто то 1..
етот скрипт исползует и баф и реген и хил.. для любого состава бафера точнее он написан для состава БИШ+ПП+ШЕ+ЕЕ- но подрузумевает в себе что их нет одновременно..
Код:
var
Bot1X,Bot1Y,Bot1Z,Bot2X,Bot2Y,Bot2Z,Bot3X,Bot3Y,Bot3Z,Bot4X,Bot4Y,Bot4Z:string; //координаты баферов
IDAssistTarget:string; //таргет командира
rnd:integer;  // вспомогательная для случайного события

bafSE: array [1..100] of string; //список бафов ШЕ
bafPP: array [1..100] of string; //список бафов ПП
bafEE: 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; //указывает какой баф наложить на чара с помощью ПП
BafEEApplyChar: array [1..100] of string; //указывает ИД чара на которого нужно наложить баф с помощью ЕЕ
BafEEApplyBaf: array [1..100] of string;  //указывает какой баф наложить на чара с помощью ЕЕ

NameKom,NameBot1,NameBot2,NameBot3,NameBot4:string; //имена чаров учавствующих в процессе

MaxHPKom,MaxHPBot1,MaxHPBot2,MaxHPBot3,MaxHPBot4:integer; //максимальные уровни ХП (лимиты)
MaxMPKom,MaxMPBot1,MaxMPBot2,MaxMPBot3,MaxMPBot4:integer; //максимальные уровни МП (лимиты)

//текущее значение ХП и МП
CurHPKom,CurMPKom,CurHPbot1,CurMPbot1,CurHPbot2,CurMPbot2,CurHPbot3,CurMPbot3,CurHPbot4,CurMPbot4:integer;

IDKomandos,IDbot1,IDbot2,IDbot3,IDbot4:string; // идешники всех

timer3: TTimer; //для создания пати
timer4: TTimer; //мульти-баф, общий как для физика так и для мага.. нужные бафы указываются заранее в конце скрипта

BufEndSE,BufEndPP,BufEndEE:boolean;// используется в таймере (мультибаф) для указания на то что 1 из баферов закончил бафать

tick3,tick4:integer; // используется в таймере бафа для тиков.. каждый тик- новый баф..

i:integer;
tempD:integer;
tempS:String;

//**********************МУЛЬТИБАФ***********************************************************
procedure OnTimer4(Sender: TObject);
begin
//если очередной баф в списке бафов для бафера = '' (окончание процесса бафа) то значит бафер уже отбафал всё что нужно, хватит бафать..
if (BafPPApplyChar[tick4]='') then BufEndPP:=True;
if (BafSEApplyChar[tick4]='') then BufEndSE:=True;
if (BafEEApplyChar[tick4]='') then BufEndEE:=True;

//если все баферы закончили бафать то выключаем таймер мультибафа
//ну и счетчик тиков ставим в исходное положение
if (BufEndPP=True) and (BufEndSE=True) and (BufEndEE=True) then
 begin
    tick4:=1;
    timer4.enabled:=false;

    BufEndSE:=False;
    BufEndPP:=False;
    BufEndEE:=False;
//раз закончили бафать то не допускаем выполнение нижеследущего кода
    exit;
 end;

//бафаем чара.. используется переменные BafPPApplyChar[tick4],BafPPApplyBaf[tick4] для ПП и аналогичные для ШЕ и ЕЕ указывающие на то какому баферу ково бафать и каким бафом в текущий ТИК.
//ТИК- (tick4) - ето счетчик, который изменяется на 1 с каждым новым бафом.. т.е. каждые 4 секунды (интервал таймера) тик увеличивается на 1
//ТИКИ нужны чтоб каждый раз новый баф кастовать..
    buf:=hstr('04') + BafPPApplyChar[tick4] + Bot2X + Bot2Y + Bot2Z + hstr('00');
    if  (BufEndPP=False) and (IDbot2<>'') then SendToServerEX(NameBot2);
    buf:=BafPPApplyBaf[tick4];
    if  (BufEndPP=False) and (IDbot2<>'') then SendToServerEX(NameBot2);

    buf:=hstr('04') + BafSEApplyChar[tick4] + Bot3X + Bot3Y + Bot3Z + hstr('00');
    if  (BufEndSE=False) and (IDbot3<>'') then SendToServerEX(NameBot3);
    buf:=BafSEApplyBaf[tick4];
    if  (BufEndSE=False) and (IDbot3<>'') then SendToServerEX(NameBot3);

    buf:=hstr('04') + BafEEApplyChar[tick4] + Bot4X + Bot4Y + Bot4Z + hstr('00');
    if  (BufEndEE=False) and (IDbot4<>'') then SendToServerEX(NameBot4);
    buf:=BafEEApplyBaf[tick4];
    if  (BufEndEE=False) and (IDbot4<>'') then SendToServerEX(NameBot4);


tick4:=tick4+1;
end;

//****************************РАЗДАЧА ПРИГЛАШЕНИЙ НА ВСТУПЛЕНИЕ В ПАТИ*******************
procedure OnTimer3(Sender: TObject);
begin

if tick3 = 1 then
 begin
      buf:=hstr('2B');
//этот код закоментирован , для того чтобы не разрывать пати.. впринципе хз каму как.. если надо четко стабиильно пати создать быстро из своих ботов-баферов то раскоментить
//а если ты с баферами + другие чары с тобой бегают- то ненадо раскоменчивать.. хотя можно тока баферов раскоментить тогда они свою пати порвут и снова вступят к командиру (если он лидер пати)
//      if IDKomandos<>'' then SendToServerEX(NameKom);
//      if IDBot1<>'' then SendToServerEX(NameBot1);
//      if IDBot2<>'' then SendToServerEX(NameBot2);
//      if IDBot3<>'' then SendToServerEX(NameBot3);
//      if IDBot4<>'' then SendToServerEX(NameBot4);
 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
 begin
 buf:=hstr('29');
 writeS(namebot3);
 buf:=buf + hstr('00 00 00 00');
 SendToServerEX(NameKom);
 end;

if tick3 = 5 then
 begin
 buf:=hstr('29');
 writeS(namebot4);
 buf:=buf + hstr('00 00 00 00');
 SendToServerEX(NameKom);
 end;

tick3:=tick3+1;

//ну когда всем баферам приглашение отправили то вырубаем таймер
if tick3=6 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');
    if IDBot1<>'' then SendToServerEX(NameBot1);
    //бежим за командиром эмулируя повторный щелчек мыши по таргету
    buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
    if IDBot1<>'' then SendToServerEX(NameBot1);

    //выделяем командира, эмулируя щелчек мыши
    buf:=hstr('04') + IDKomandos + Bot2X + Bot2Y + Bot2Z + hstr('00');
    if IDBot2<>'' then SendToServerEX(NameBot2);
    //бежим за командиром эмулируя повторный щелчек мыши по таргету
    buf:=hstr('04') + IDKomandos + Bot2X + Bot2Y + Bot2Z + hstr('00');
    if IDBot2<>'' then SendToServerEX(NameBot2);

    //выделяем командира, эмулируя щелчек мыши
    buf:=hstr('04') + IDKomandos + Bot3X + Bot3Y + Bot3Z + hstr('00');
    if IDBot3<>'' then SendToServerEX(NameBot3);
    //бежим за командиром эмулируя повторный щелчек мыши по таргету
    buf:=hstr('04') + IDKomandos + Bot3X + Bot3Y + Bot3Z + hstr('00');
    if IDBot3<>'' then SendToServerEX(NameBot3);

    //выделяем командира, эмулируя щелчек мыши
    buf:=hstr('04') + IDKomandos + Bot4X + Bot4Y + Bot4Z + hstr('00');
    if IDBot4<>'' then SendToServerEX(NameBot4);
    //бежим за командиром эмулируя повторный щелчек мыши по таргету
    buf:=hstr('04') + IDKomandos + Bot4X + Bot4Y + Bot4Z + hstr('00');
    if IDBot4<>'' then SendToServerEX(NameBot4);
    end;
end;


procedure Init; //Вызывается при включении скрипта
begin
NameKom:='ИМЯ КОМАНДИРА';
NameBot1:='ИМЯ БИША';       //биш
NameBot2:='ИМЯ ПП';  //пп
NameBot3:='ИМЯ ШЕ';      //ше
NameBot4:='ИМЯ ЕЕ';    //ее

//список бафов:
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');  //  резист к ветру
bafPP[20]:=hstr('2F 9E 04 00 00 00 00 00 00 00');  //  резист к воде
bafPP[21]:=hstr('2F DA 04 00 00 00 00 00 00 00');  //  деф виспер
bafPP[22]:=hstr('2F D8 04 00 00 00 00 00 00 00');  //  гвиданс
bafPP[23]:=hstr('2F 18 04 00 00 00 00 00 00 00');  //  блесс МП
bafPP[24]:=hstr('2F DB 04 00 00 00 00 00 00 00');  //  ЩИТ РЕЙТ

bafSE[1]:=hstr('2F 0B 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 2C 04 00 00 00 00 00 00 00');  // ПА
bafSE[4]:=hstr('2F F4 04 00 00 00 00 00 00 00');  // ВАМП
bafSE[5]:=hstr('2F 23 04 00 00 00 00 00 00 00');  // ЕМП
bafSE[6]:=hstr('2F 17 05 00 00 00 00 00 00 00');  // М.КРИТ
bafSE[7]:=hstr('2F 35 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 D8 04 00 00 00 00 00 00 00');  // гвиданс
bafSE[10]:=hstr('2F B4 04 00 00 00 00 00 00 00');  // ВВ

bafEE[1]:=hstr('2F EB 04 00 00 00 00 00 00 00');  // резист ШОК
bafEE[2]:=hstr('2F 3F 04 00 00 00 00 00 00 00');  //  ЭВЕЙШН

CurHPKom:=15000;
CurHPBot1:=15000;
CurHPBot2:=15000;
CurHPBot3:=15000;
CurHPBot4:=15000;

CurMPKom:=15000;
CurMPBot1:=15000;
CurMPBot2:=15000;
CurMPBot3:=15000;
CurMPBot4:=15000;

MaxHPKom:=10;
MaxHPBot1:=10;
MaxHPBot2:=10;
MaxHPBot3:=10;
MaxHPBot4:=10;


tick3:=1;
tick4:=1;

BufEndSE:=False;
BufEndPP:=False;
BufEndEE:=False;

  timer4:=TTimer.Create(nil);
  timer4.OnTimer:=@OnTimer4; //
  timer4.enabled:=false; //
  timer4.interval:=4000;

  timer3:=TTimer.Create(nil);
  timer3.OnTimer:=@OnTimer3; //
  timer3.enabled:=false; //
  timer3.interval:=1000;

// ЗАПРОС НА ОТКРЫТИЕ ИНВЕНТОРЯ!!!! ДЛЯ ЗАХВАТА ИДЕШНИКА!
// чтобы принудительно вызвать от сервера пакет ЮЗЕР ИНФО в котором ИД указан
    buf:=hstr('0F');
    SendToServerEX(NameKom);
    SendToServerEX(NameBot1);
    SendToServerEX(NameBot2);
    SendToServerEX(NameBot3);
    SendToServerEX(NameBot4);

end;

procedure Free; //Вызывается при выключении скрипта
begin
timer3.Free;
timer4.Free;
end;

//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
//для тго чтоб 2-3 скрипта коректно работали  одновременно..
if pck='' then exit;

//******************************АВТОСОГЛАШЕНИЕ НА ВСТУПЛЕНИЕ В ПАТИ************************
//******************************ПРИ УСЛОВИИ ЧТО ПАТИ ДАЕТ- КОМАНДИР************************
//ну тут тупо считываем имя кто нам шлет пати из пакета на предложение в него вступить
//ну и если имя- командир то вступаем в ету пати автоматом..
if FromServer then
if ConnectName=NameBot1 then
if pck[1]=#$39 then
if ReadS(2)=NameKom then
 begin
 buf:=hstr('2A 01 00 00 00');
 sendtoserverex(NameBot1);
 end;

if FromServer then
if ConnectName=NameBot2 then
if pck[1]=#$39 then
if ReadS(2)=NameKom then
 begin
 buf:=hstr('2A 01 00 00 00');
 sendtoserverex(NameBot2);
 end;

if FromServer then
if ConnectName=NameBot3 then
if pck[1]=#$39 then
if ReadS(2)=NameKom then
 begin
 buf:=hstr('2A 01 00 00 00');
 sendtoserverex(NameBot3);
 end;

if FromServer then
if ConnectName=NameBot4 then
if pck[1]=#$39 then
if ReadS(2)=NameKom then
 begin
 buf:=hstr('2A 01 00 00 00');
 sendtoserverex(NameBot4);
 end;

//*******************ЗАХВАТ КООРДИНАТ***************************************************
//если принят пакет от клиента с кординатами бота то
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;

//если принят пакет от клиента с кординатами бота то
if FromClient then
if ConnectName=NameBot2 then
if 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;

//если принят пакет от клиента с кординатами бота то
if FromClient then
if ConnectName=NameBot3 then
if pck[1]=#$48 then
    begin
//запоминаем координаты
    Bot3X:= pck[2] + pck[3] + pck[4] + pck[5];
    Bot3Y:= pck[6] + pck[7] + pck[8] + pck[9];
    Bot3Z:= pck[10] + pck[11] + pck[12] + pck[13];
    end;

//если принят пакет от клиента с кординатами бота то
if FromClient then
if ConnectName=NameBot4 then
if pck[1]=#$48 then
    begin
//запоминаем координаты
    Bot4X:= pck[2] + pck[3] + pck[4] + pck[5];
    Bot4Y:= pck[6] + pck[7] + pck[8] + pck[9];
    Bot4Z:= 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;

if FromServer then
if ConnectName=NameBot2 then
if pck[1]=#$06 then
if pck[2] + pck[3] + pck[4] + pck[5] = IDBot2 then
  CurHPBot2:=15000;

if FromServer then
if ConnectName=NameBot3 then
if pck[1]=#$06 then
if pck[2] + pck[3] + pck[4] + pck[5] = IDBot3 then
  CurHPBot3:=15000;

if FromServer then
if ConnectName=NameBot4 then
if pck[1]=#$06 then
if pck[2] + pck[3] + pck[4] + pck[5] = IDBot3 then
  CurHPBot4:=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);
  MaxMPKom:=readD(i);
  CurMPKOM:=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);
  MaxMPBot1:=readD(i);
  CurMPBot1:=readD(i);
  end;

//2-й бот
if FromServer then
if ConnectName = NameBot2 then
if pck[1]=#$04 then
  begin
  IDBot2:=pck[18]+pck[19]+pck[20]+pck[21];
  i:=22;
  tempS:=readS(i);
  i:=i+48;
  MaxHPBot2:=readD(i);
  CurHPBot2:=readD(i);
  MaxMPBot2:=readD(i);
  CurMPBot2:=readD(i);
  end;

//3-й бот
if FromServer then
if ConnectName = NameBot3 then
if pck[1]=#$04 then
  begin
  IDBot3:=pck[18]+pck[19]+pck[20]+pck[21];
  i:=22;
  tempS:=readS(i);
  i:=i+48;
  MaxHPBot3:=readD(i);
  CurHPBot3:=readD(i);
  MaxMPBot3:=readD(i);
  CurMPBot3:=readD(i);
  end;

//4-й бот
if FromServer then
if ConnectName = NameBot4 then
if pck[1]=#$04 then
  begin
  IDBot4:=pck[18]+pck[19]+pck[20]+pck[21];
  i:=22;
  tempS:=readS(i);
  i:=i+48;
  MaxHPBot4:=readD(i);
  CurHPBot4:=readD(i);
  MaxMPBot4:=readD(i);
  CurMPBot4:=readD(i);
  end;

//*************************СЛЕДИМ ЗА ХП и МП******************************************
//а ету часть кода требуется под ваши жэлания настроить..
//тут указываются значения при которых ПП ШШ ЕЕ БИШ будут вам ману лить и ХП заливать и каким именно скилом
//следим за ХП КОМАНДИРА
//отлавливаем СТАТУС АПДЕЙТ!!!!!
//как выяснилось статус апдейта бывает 2 разных..
//1 для ХП, 2 для МП
//етот пакет приходит при любом изменении ХП и МП у чара..
//чтоб их отличить сервак использует индекс.. в 6-м байте присылает либо 4 либо 2..
//если в 6-м байте СТАТУС АПДЕЙТ цифра #$04 то значит реч в етом пакете про ХП
//а если #$02 то реч в етом пакете про МП..
//возможно что для ЦП есть еще другой указатель но скрипт не учитывает ЦП никак..
  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,7 от шкалы (70%) и при етом больше (0,25 = 25%)25% от шкалы то..
//то биш использует свой любимый скил МАЖОР ХИЛ за спирит оре (в интерлюде) (для ц4 такого скила нету)
     if (CurHPKom < round(MaxHPKom*0.7)) and (CurHPKom > round(MaxHPKom*0.25))  then
     begin
      buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
      if (IDBot1 <> '') then SendToServerEX(NameBot1);
      buf:=hstr('2F 79 05 00 00 00 00 00 00 00'); // МАЖОР ХИЛ
      if (IDBot1 <> '') then SendToServerEX(NameBot1);
     end;
//если жизни опустились меньше чем 25% то надо хилить бишем очень быстро поетому используем БЕТЛ ХИЛ
//(чтоб из жопы вытащить)
     if (CurHPKom < round(MaxHPKom*0.2)) then
     begin
      buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
      if (IDBot1 <> '') then SendToServerEX(NameBot1);
      buf:=hstr('2F C2 04 00 00 00 00 00 00 00');  // БЭТЛ ХИЛ
      if (IDBot1 <> '') then SendToServerEX(NameBot1);
     end;
// при желании можно еще чтоб ПП хилил.. лимит при котором он будет хилить БЕТЛ ХИЛОМ устанавливаем..
     if (CurHPKom < round(MaxHPKom*0.7)) then
     begin
      buf:=hstr('04') + IDKomandos + Bot2X + Bot2Y + Bot2Z + hstr('00');
      if (IDBot2 <> '') then SendToServerEX(NameBot2);
      buf:=hstr('2F F7 03 00 00 00 00 00 00 00');  //ПП ХИЛИТ
      if (IDBot2 <> '') then SendToServerEX(NameBot2);
     end;

//ШЕ НЕ ХИЛИТ но вставивив сюда 6 строк аналогичных предыдущим будет и ШЕ хилить..
//но зато хилит ЕЕ.. смотрите.. аналогично может и ШЕ хилить...
//вы уже поняли что ЕЕ включит хил на 50% ХП командира
     if (CurHPKom < round(MaxHPKom*0.5)) then
     begin
      buf:=hstr('04') + IDKomandos + Bot4X + Bot4Y + Bot4Z + hstr('00');
      if (IDBot4 <> '') then SendToServerEX(NameBot4);
      buf:=hstr('2F C1 04 00 00 00 00 00 00 00 ');  //ЕЕ ХИЛИТ
      if (IDBot4 <> '') then SendToServerEX(NameBot4);
     end;


  end;



//следим за ХП у БОТ1
//если злой хренко решит наших баферов бить, а потом нас- то мы просто так не сдадимся..
//баферам ХИЛ дадим.. чтоб хренко били били и не убили...
//я сделал тупо- чтоб тока сам себя хилял бафер.. добавьте аналогичные строки сюда и будет так что все баферы будут хилить баф-бота
//ето надо полюбасу- но пока руки не дошли.. и вам немного задачи- доделать скрипт..
//но я етого не сделал еще по одной причине.. в реальных условиях мой командир бегает оч шустро..
//баферы отстают.. если 1 бафер на пвп отстанет- да и хер с ним.. а если етого отстающего бьют..
//и все мои баферы кинутся его хилить (если его бьют) то я через 15 сек буду оч далеко и меня уже баферы не догонят
//и я буду- (командир пати) без хила.. поетому если бафера атакуют то я сделал чтоб он сам себя лечил..
// но чтоб другие не лечили, чтоб другие за мной бежали..
if FromServer then
if ConnectName = NameBot1 then
if pck[1]=#$0e then
if (pck[2] + pck[3] + pck[4] + pck[5] + pck[6] = IDbot1 + #$04) then
  begin
    CurHPbot1:=ReadD(14);
//на 70% шкалы хилит бафер сам себя (бишоп)  скилом мажор хил
     if (CurHPbot1 < round(MaxHPBot1*0.7)) then
     begin
      buf:=hstr('04') + IDbot1 + Bot1X + Bot1Y + Bot1Z + hstr('00');
      if (IDBot1 <> '') then SendToServerEX(NameBot1);
      buf:=hstr('2F 79 05 00 00 00 00 00 00 00');   //скил бишопа: можор хил
      if (IDBot1 <> '') then SendToServerEX(NameBot1);
     end;
  end;

//следим за ХП у БОТ2
  if FromServer then
  if pck[1]=#$0e then
  if ConnectName = NameBot2 then
  if (pck[2] + pck[3] + pck[4] + pck[5] + pck[6] = IDbot2 + #$04) then
  begin
    CurHPbot2:=ReadD(14);

     if (CurHPbot2 < round(MaxHPBot2*0.7)) then
     begin
      buf:=hstr('04') + IDbot2 + Bot1X + Bot1Y + Bot1Z + hstr('00');
      if (IDBot1 <> '') and (IDBot2 <> '') then SendToServerEX(NameBot1);
      buf:=hstr('2F 79 05 00 00 00 00 00 00 00');
      if (IDBot1 <> '') and (IDBot2 <> '') then SendToServerEX(NameBot1);
     end;
  end;

//следим за ХП у БОТ3
  if FromServer then
  if pck[1]=#$0e then
  if ConnectName = NameBot3 then
  if (pck[2] + pck[3] + pck[4] + pck[5] + pck[6] = IDbot3 + #$04) then
  begin
    CurHPbot3:=ReadD(14);

     if (CurHPbot3 < round(MaxHPBot3*0.7)) then
     begin
      buf:=hstr('04') + IDbot3 + Bot3X + Bot3Y + Bot3Z + hstr('00');
      if (IDBot3 <> '') then SendToServerEX(NameBot3);
      buf:=hstr('2F C1 04 00 00 00 00 00 00 00');
      if (IDBot3 <> '') then SendToServerEX(NameBot1);
     end;
  end;

//следим за ХП у БОТ4
  if FromServer then
  if pck[1]=#$0e then
  if ConnectName = NameBot4 then
  if (pck[2] + pck[3] + pck[4] + pck[5] + pck[6] = IDbot4 + #$04) then
  begin
    CurHPbot4:=ReadD(14);

     if (CurHPbot4 < round(MaxHPBot4*0.7)) then
     begin
      buf:=hstr('04') + IDbot4 + Bot4X + Bot4Y + Bot4Z + hstr('00');
      if (IDBot4 <> '') and (IDBot4 <> '') then SendToServerEX(NameBot4);
      buf:=hstr('2F C1 04 00 00 00 00 00 00 00');
      if (IDBot4 <> '') then SendToServerEX(NameBot4);
     end;
  end;

//следим за МП у КОМАНДИРА (ШЕ следит)
  if FromServer then
  if pck[1]=#$0e then
  if ConnectName = NameKom then
  if (pck[2] + pck[3] + pck[4] + pck[5] + pck[6] = IDKomandos + #$02) then
  begin
    CurMPkom:=ReadD(14);

     if (CurMPkom < round(MaxMPkom*0.5)) then
     begin
      buf:=hstr('04') + IDKomandos + Bot3X + Bot3Y + Bot3Z + hstr('00');
      if (IDBot3 <> '') then SendToServerEX(NameBot3);
      buf:=hstr('2F F5 03 00 00 00 00 00 00 00');
      if (IDBot3 <> '') then SendToServerEX(NameBot3);
     end;
  end;

//следим за МП у КОМАНДИРА (ЕЕ следит)
  if FromServer then
  if pck[1]=#$0e then
  if ConnectName = NameKom then
  if (pck[2] + pck[3] + pck[4] + pck[5] + pck[6] = IDKomandos + #$02) then
  begin
    CurMPkom:=ReadD(14);

     if (CurMPkom < round(MaxMPkom*0.5)) then
     begin
      buf:=hstr('04') + IDKomandos + Bot4X + Bot4Y + Bot4Z + hstr('00');
      if (IDBot4 <> '') then SendToServerEX(NameBot4);
      buf:=hstr('2F F5 03 00 00 00 00 00 00 00');
      if (IDBot4 <> '') then SendToServerEX(NameBot4);
     end;
  end;

//следим за МП у БИША
//этот кусок кода вполне альтернативный..
  if FromServer then
  if pck[1]=#$0e then
  if ConnectName = NameBot1 then
  if (pck[2] + pck[3] + pck[4] + pck[5] + pck[6] = IDbot1 + #$02) then
  begin
    CurMPBot1:=ReadD(14);

     if (CurMPBot1 < round(MaxMPBot1*0.9)) then
     begin
      buf:=hstr('04') + IDBot1 + Bot3X + Bot3Y + Bot3Z + hstr('00');
      if (IDBot3 <> '') then SendToServerEX(NameBot3);
      buf:=hstr('2F F5 03 00 00 00 00 00 00 00');
      if (IDBot3 <> '') then SendToServerEX(NameBot3);
     end;
  end;

//**********************СЛЕДИМ ЗА ТАРГЕТАМИ****************************************
//КОМАНДИР
//если принят пакет со сменой таргета у командира то
if FromServer then
if ConnectName = NameKom then
if pck[1]=#$A6 then
   begin
//запоминаем ИД таргета командира для ассиста
   IDAssistTarget:= pck[2]+pck[3]+pck[4]+pck[5];
   end;

//**********************САЖАЕМ ВСЮ ПАТИ ЧЕРЕЗ КОНТРОЛ****************************************
//если принят пакет на сажание с контролом то сажаем всю пати
  if FromClient then
  if (ConnectName = NameKom) then
  if (pck[1]+pck[2]+pck[6]=hstr('45 00 01')) then
   begin
      buf:=hstr('45 00 00 00 00 01 00 00 00 00');
      if IDBot1<>'' then SendToServerEX(NameBot1);
      if IDBot2<>'' then SendToServerEX(NameBot2);
      if IDBot3<>'' then SendToServerEX(NameBot3);
      if IDBot4<>'' then SendToServerEX(NameBot4);
   end;
//*******************БЕЖИМ ЗА КОМАНДИРОМ ПОСЛЕ ИСПОЛЬЗОВАНИЯ СКИЛА***************************
//ловим пакет МАДЖИКСКИЛЮЗ
if FromServer then
if pck[1] = #$48 then
if (pck[2]+pck[3]+pck[4]+pck[5]=IDBOT1) or (pck[2]+pck[3]+pck[4]+pck[5]=IDBOT2) or (pck[2]+pck[3]+pck[4]+pck[5]=IDBOT3) then
  begin
  BotBeg;
  end;
//**************************УПРАВЛЕНИЕ************************************************
//"Bow" (ПОКЛОН)- БЕЖАТЬ за КОМАНДИРОМ
  if FromClient then
  if ConnectName=NameKom then
  if pck[1]+pck[2]=hstr('1B 07') then
    begin
     pck:='';
     BotBeg;
     exit;
    end;

//ADVANCE- В АТАКУ - пати быстрое создание (3-я кнопка)
  if FromClient then
  if ConnectName=NameKom then
  if pck[1]+pck[2]=hstr('1B 04') then
    begin
     pck:='';
     //сразу рвем пати у всех чаров и командир раздает пати поновому
     //чары автоматически принимают пати
     //используется таймер т.к. одновременно 2-м чарам пати кинуть нельзя
      timer3.enabled:=true;
     exit;
    end;

//YES-  РУТ ПО АССИСТУ (4-я кнопка) либо переделать в какойто дебаф от каждого бафера он свой.. по ассисту все баферы какуюто куйню кинут на цель по ассисту..
  if FromClient then
  if ConnectName=NameKom then
  if pck[1]+pck[2]=hstr('1B 06') then
    begin
     pck:='';
      buf:=hstr('04') + IDAssistTarget + Bot1X + Bot1Y + Bot1Z + hstr('00');
      if NameBot1<>'' then SendToServerEX(NameBot1);
      buf:=hstr('04') + IDAssistTarget + Bot2X + Bot2Y + Bot2Z + hstr('00');
      if NameBot2<>'' then SendToServerEX(NameBot2);
      buf:=hstr('04') + IDAssistTarget + Bot3X + Bot3Y + Bot3Z + hstr('00');
      if NameBot3<>'' then SendToServerEX(NameBot3);

      buf:=hstr('2F 72 05 00 00 01 00 00 00 00');
      if NameBot1<>'' then SendToServerEX(NameBot1);
      buf:=hstr('2F B1 04 00 00 01 00 00 00 00');
      if NameBot2<>'' then SendToServerEX(NameBot2);
      buf:=hstr('2F B1 04 00 00 00 00 00 00 00');
      if NameBot3<>'' then SendToServerEX(NameBot3);
     exit;
    end;



//NO буф МАГА по ассисту
  if FromClient then
  if ConnectName=NameKom then
  if pck[1]+pck[2]=hstr('1B 05') then
    begin

    BafPPApplyChar[1]:=IDAssistTarget;
    BafPPApplyBaf[1]:=bafPP[1];
    BafPPApplyChar[2]:=IDAssistTarget;
    BafPPApplyBaf[2]:=bafPP[2];
    BafPPApplyChar[3]:=IDAssistTarget;
    BafPPApplyBaf[3]:=bafPP[5];
    BafPPApplyChar[4]:=IDAssistTarget;
    BafPPApplyBaf[4]:=bafPP[6];
    BafPPApplyChar[5]:=IDAssistTarget;
    BafPPApplyBaf[5]:=bafPP[7];
    BafPPApplyChar[6]:=IDAssistTarget;
    BafPPApplyBaf[6]:=bafPP[8];
    BafPPApplyChar[7]:=IDAssistTarget;
    BafPPApplyBaf[7]:=bafPP[9];
    BafPPApplyChar[8]:=IDAssistTarget;
    BafPPApplyBaf[8]:=bafPP[23];
    BafPPApplyChar[9]:=IDAssistTarget;
    BafPPApplyBaf[9]:=bafPP[13];
    BafPPApplyChar[10]:=IDAssistTarget;
    BafPPApplyBaf[10]:=bafPP[14];
    BafPPApplyChar[11]:=IDAssistTarget;
    BafPPApplyBaf[11]:=bafPP[16];
    BafPPApplyChar[12]:=IDAssistTarget;
    BafPPApplyBaf[12]:=bafPP[18];
    BafPPApplyChar[13]:=IDAssistTarget;
    BafPPApplyBaf[13]:=bafPP[19];
    BafPPApplyChar[14]:=IDAssistTarget;
    BafPPApplyBaf[14]:=bafPP[20];
    BafPPApplyChar[15]:='';
    BafPPApplyBaf[15]:='';

    BafSEApplyChar[1]:=IDAssistTarget;
    BafSEApplyBaf[1]:=bafSE[5];
    BafSEApplyChar[2]:=IDAssistTarget;
    BafSEApplyBaf[2]:=bafSE[6];
    BafSEApplyChar[3]:='';
    BafSEApplyBaf[3]:='';

    BafEEApplyChar[1]:=IDAssistTarget;
    BafEEApplyBaf[1]:=bafEE[1];
    BafEEApplyChar[2]:=IDAssistTarget;
    BafEEApplyBaf[2]:=bafEE[2];
    BafEEApplyChar[3]:='';
    BafEEApplyBaf[3]:='';

     timer4.enabled:=true;
     pck:='';
     exit;
    end;

//UNAWARE буф ФИЗИКА по ассисту
  if FromClient then
  if ConnectName=NameKom then
  if pck[1]+pck[2]=hstr('1B 08') then
    begin

    BafPPApplyChar[1]:=IDAssistTarget;
    BafPPApplyBaf[1]:=bafPP[1];
    BafPPApplyChar[2]:=IDAssistTarget;
    BafPPApplyBaf[2]:=bafPP[2];
    BafPPApplyChar[3]:=IDAssistTarget;
    BafPPApplyBaf[3]:=bafPP[3];
    BafPPApplyChar[4]:=IDAssistTarget;
    BafPPApplyBaf[4]:=bafPP[4];
    BafPPApplyChar[5]:=IDAssistTarget;
    BafPPApplyBaf[5]:=bafPP[7];
    BafPPApplyChar[6]:=IDAssistTarget;
    BafPPApplyBaf[6]:=bafPP[8];
    BafPPApplyChar[7]:=IDAssistTarget;
    BafPPApplyBaf[7]:=bafPP[9];
    BafPPApplyChar[8]:=IDAssistTarget;
    BafPPApplyBaf[8]:=bafPP[22];
    BafPPApplyChar[9]:=IDAssistTarget;
    BafPPApplyBaf[9]:=bafPP[12];
    BafPPApplyChar[10]:=IDAssistTarget;
    BafPPApplyBaf[10]:=bafPP[13];
    BafPPApplyChar[11]:=IDAssistTarget;
    BafPPApplyBaf[11]:=bafPP[14];
    BafPPApplyChar[12]:=IDAssistTarget;
    BafPPApplyBaf[12]:=bafPP[15];
    BafPPApplyChar[13]:=IDAssistTarget;
    BafPPApplyBaf[13]:=bafPP[18];
    BafPPApplyChar[14]:=IDAssistTarget;
    BafPPApplyBaf[14]:=bafPP[19];
    BafPPApplyChar[15]:=IDAssistTarget;
    BafPPApplyBaf[15]:=bafPP[20];
    BafPPApplyChar[16]:=IDAssistTarget;
    BafPPApplyBaf[16]:=bafPP[21];
    BafPPApplyChar[17]:='';
    BafPPApplyBaf[17]:='';

    BafSEApplyChar[1]:=IDAssistTarget;
    BafSEApplyBaf[1]:=bafSE[4];
    BafSEApplyChar[2]:='';
    BafSEApplyBaf[2]:='';

    BafEEApplyChar[1]:=IDAssistTarget;
    BafEEApplyBaf[1]:=bafEE[1];
    BafEEApplyChar[2]:=IDAssistTarget;
    BafEEApplyBaf[2]:=bafEE[2];
    BafEEApplyChar[3]:='';
    BafEEApplyBaf[3]:='';


     timer4.enabled:=true;
     pck:='';
     exit;
    end;


end.
__________________
Цитата:
Сообщение от pybukon
прежде чета попросить я немнога раскажу чтоб вы понили как мне плоха
Цитата:
Сообщение от Byrger
А как сделать мой скрипт бесконечным?
Цитата:
Сообщение от XKOR
.. каждый день ионизированной ногой протирает больную)
Цитата:
Сообщение от PsyR
Вылоджите пожалуйста скрипт на рыбалку желательно что бы сам в ВХ клал адаптированый под шоки и так же скрипт на ТТ рец, тоже с диалогами
VORON вне форума   Ответить с цитированием