Вернуться   CoderX :: Forums > Lineage II > L2PacketHack > Скриптинг
Войти через OpenID

Скриптинг Форум посвещенный созданию скриптов для L2PacketHack

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 14.03.2008, 01:12   #291
Местный
 
Аватар для nezabudkin
 
Регистрация: 06.03.2008
Сообщений: 154
Сказал Спасибо: 46
Имеет 130 спасибок в 38 сообщенях
nezabudkin
По умолчанию Re:

Цитата:
Сообщение от ASSA
НАрод а можно ли сымитировать нажатие клавиш в л2пкх?
Например каждые 30 сек F2?
%)

По моему никак нельзя! F2 ты жмешь в клиенте, а он уже подставляет заданную команду для F2 и отправляет на сервер... Но можно посмотреть какой пакетик уходит на сервер когда жмешь эту кнопку. И вот этот пакетик уже можно каждые 30 секунд отправлять серверу через пакетхак! Скриптик получается примитивнейший.
nezabudkin вне форума   Ответить с цитированием
Старый 14.03.2008, 02:21   #292
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Re: ДА БУДЕТ БОТ!

Залил рабочий скрипт бота. Пробуйте.
- поправил питьё Алакрити пошн
- показывает центр кача

Добавлено спустя 5 минут:
Re:
Цитата:
Сообщение от ASSA
НАрод а можно ли сымитировать нажатие клавиш в л2пкх?
Например каждые 30 сек F2?
%)
Вот посмотри, скрипт про клавиши. Сам не пробовал.
Код:
//// для активации скрипта советую создать макрос +panel
{
 Заготовка Cкрипта Управления

 DeVolf Вчера, 18:42
Вот давно мучался ... Собрал все что надо ... И седня сделал то что действительно хотел )
Поделюсь и с вами )
Это тот самы самый скрипт который я хотел тут viewtopic.php?f=9&t=30&st=0&sk=t&sd=a
Скрипт заготовочный тоесть не надо вырезать куски а только поставить свои условия и переименовать функции )
Коментарии и Спасибо высказаны в скрипте так что "Грайтесь малята"

Сори в скрипте могут быть грамматические ошибки , так что простите , голова уже давно болит

Для тех кто не знает как ставить условие тогда читайте внимательно
1 Запускаем скрипт
2 Используем ту клавишу к которой хотим привязать действие
3 Отлавливаем пакет от клиента он будет типа Бай Пас
4 добавляем в скрипте перед end. такие строчки
Код: Выделить всё
if fromclient and (pck=HStr('в етих скобках пишем пакет который поймали')) then begin
    buf:=#$0F;
    WriteD(5);
    WriteS(HTML2);
    SendToClient;
    buf:=hstr('а тут пишем пакет действия ,  которое присвоим клавише');
    pck:='';
    sendtoserver;
    end;
}
const
HTML2='<html>'+
        '<body>'+
        '<font color="FF9900">Изменено :</font>
   '+
        '1. Ничего 
'+
        '2. Ничего 
'+
        '3. Ничего 
'+
        '<font color="FF9900">Добавлено :</font>
  '+
        '1. Ничего 
'+
        '2. Ничего 
'+
        '3. Ничего 
'+
        '
<a action="bypass -h Beck"> Назад</a>'+
        '</body>'+
        '</html>';

HTML1='<html>'+
      '<body>   '+
      '<font color="FF9900">Большое спасибо: NLObP"у , QaK"е , xkor"у , VORON"у , mks"y и всему форуму xkorem.net ;) .
'+
      'Да и очень прошу не изменять ету константу, так как ето все сделать было не легко.
'+
      'Пользуйтесь на здорове ;) .
'+
      '
Powered by : DeVolf </font> '+
      '
<a action="bypass -h Beck"> Назад</a>'+
      '</body> '+
      '</html>';
HTML=' <html>   '+
'<body>   '+
'<center>    '+
'<font color="FF9900">Универсальный скрипт управления</font>
   '+
'<font color="FF0000">Ну чо будем делать?</font>     '+
'</center>    '+
'</td>       '+
'<td width=40>    '+
'</tr>       '+
'
      '+
'<center>   '+
'<table width=230>   '+
'<tr><td><font color="LEVEL">Управление</font></td><td><font color="LEVEL">Другое</font></td><td><font color="LEVEL">Вапще левое:</font></td></tr>   '+
'<tr><td><a action="bypass -h 1"><font color="FF9900">Функция №1</font></a></td><td><a action="bypass -h 13"><font color="FF9900">Функция №1</font></a></td><td><a action="bypass -h 25"><font color="FF9900">Функция №1</font></a></td></tr>  '+
'<tr><td><a action="bypass -h 2"><font color="FF9900">Функция №2</font></a></td><td><a action="bypass -h 14"><font color="FF9900">Функция №2</font></a></td><td><a action="bypass -h 26"><font color="FF9900">Функция №2</font></a></td></tr>  '+
'<tr><td><a action="bypass -h 3"><font color="FF9900">Функция №3</font></a></td><td><a action="bypass -h 15"><font color="FF9900">Функция №3</font></a></td><td><a action="bypass -h 27"><font color="FF9900">Функция №3</font></a></td></tr>     '+
'<tr><td><a action="bypass -h 4"><font color="FF9900">Функция №4</font></a></td><td><a action="bypass -h 16"><font color="FF9900">Функция №4</font></a></td><td><a action="bypass -h 28"><font color="FF9900">Функция №4</font></a></td></tr>     '+
'<tr><td><a action="bypass -h 5"><font color="FF9900">Функция №5</font></a></td><td><a action="bypass -h 17"><font color="FF9900">Функция №5</font></a></td><td><a action="bypass -h 29"><font color="FF9900">Функция №5</font></a></td></tr>   '+
'<tr><td><a action="bypass -h 6"><font color="FF9900">Функция №6</font></a></td><td><a action="bypass -h 18"><font color="FF9900">Функция №6</font></a></td><td><a action="bypass -h 30"><font color="FF9900">Функция №6</font></a></td></tr>    '+
'<tr><td><a action="bypass -h 7"><font color="FF9900">Функция №7</font></a></td><td><a action="bypass -h 19"><font color="FF9900">Функция №7</font></a></td><td><td><a action="bypass -h 31"><font color="FF9900">Функция №7</font></a></td></tr>  '+
'<tr><td><a action="bypass -h 8"><font color="FF9900">Функция №8</font></a></td><td><a action="bypass -h 20"><font color="FF9900">Функция №8</font></a></td><td><a action="bypass -h 32"><font color="FF9900">Функция №8</font></a></td></tr>   '+
'<tr><td><a action="bypass -h 9"><font color="FF9900">Функция №9</font></a></td><td><a action="bypass -h 21"><font color="FF9900">Функция №9</font></a></td><td><a action="bypass -h 33"><font color="FF9900">Функция №9</font></a></td></tr>      '+
'<tr><td><a action="bypass -h 10"><font color="FF9900">Функция №10</font></a></td><td><a action="bypass -h 22"><font color="FF9900">Функция №10</font></a></td><td><a action="bypass -h 34"><font color="FF9900">Функция №10</font></a></td></tr>   '+
'<tr><td><a action="bypass -h 11"><font color="FF9900">Функция №11</font></a></td><td><a action="bypass -h 23"><font color="FF9900">Функция №11</font></a></td><td><a action="bypass -h 35"><font color="FF9900">Функция №11</font></a></td></tr>  '+
'<tr><td><a action="bypass -h 12"><font color="FF9900">Функция №12</font></a></td><td><a action="bypass -h 24"><font color="FF9900">Функция №12</font></a></td><td><a action="bypass -h 36"><font color="FF9900">Функция №12</font></a></td></tr>    '+
'<tr><td></td><td></td><td></td></tr>    '+
'</table>       '+
'<table width=230>  '+
'<tr><td></td><td><a action="bypass -h Exit"><font color="LEVEL">Выход</font></a></td></tr> '+
'</table> '+
'</center>  '+
'
<a action="bypass -h Addons">Что нового?</a>
'+
'<a action="bypass -h Creators">Коментарии и Спасибки ;-)</a>
'+
'<font color="FF9900">Powered by : DeVolf                   Версия реализа:1.1</font> '+
'</body>'+
'</html>';
    begin
    if fromclient and (pck=HStr('38 70 00 61 00 6E 00 65 00 6C 00 00 00 08 00 00 00')) or (pck=HStr('21 42 00 65 00 63 00 6B 00 00 00'))  then begin
    buf:=#$0F;
    WriteD(5);
    WriteS(HTML);
    SendToClient;
    pck:='';
    end;
    if fromclient and (pck=HStr('21 43 00 72 00 65 00 61 00 74 00 6F 00 72 00 73 00 00 00')) then begin
    buf:=#$0F;
    WriteD(5);
    WriteS(HTML1);
    SendToClient;
    pck:='';
    end;
    if fromclient and (pck=HStr('21 41 00 64 00 64 00 6F 00 6E 00 73 00 00 00')) then begin
    buf:=#$0F;
    WriteD(5);
    WriteS(HTML2);
    SendToClient;
    pck:='';
    end;
    end.
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Старый 14.03.2008, 13:36   #293
Местный
 
Аватар для nezabudkin
 
Регистрация: 06.03.2008
Сообщений: 154
Сказал Спасибо: 46
Имеет 130 спасибок в 38 сообщенях
nezabudkin
По умолчанию Re: Re:

Цитата:
Сообщение от NLObP


Константы для ИЛ и С4

установить константы в зависимости от типа игры (С4 или Интерлюд)
//CreateItemBase
offs1=24; //16 для С4, 24 для IL
//InventoryUpdate
offs2=22; //14 для С4, 22 для IL
//UserInfo, основной цикл
offs3=48; //44 для С4, 48 для IL
//InventoryUpdate, основной цикл
offs4=41; //32 для С4, 41 для IL
//StatsUpdate
offs5=14; //одинаково для C4 и IL

Так и не смог моба в базу добавить (на интерлюде).
А в форму правильно отображались данные ID, здоровье, коорды, ID цели ?

Там алгоритм простой. Берем в таргет моба, пишем в чат "1" (без кавычек), там вылезет сообщение что "Добавляем моба 1", валим его, вылезает сообщение, что "Моб добавлен".
На следующей неделе начну тестировать на интерлюде!
nezabudkin вне форума   Ответить с цитированием
Старый 14.03.2008, 17:30   #294
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Re: Re:

Цитата:
Сообщение от nezabudkin
А в форму правильно отображались данные ID, здоровье, коорды, ID цели ?

Там алгоритм простой. Берем в таргет моба, пишем в чат "1" (без кавычек), там вылезет сообщение что "Добавляем моба 1", валим его, вылезает сообщение, что "Моб добавлен".
На следующей неделе начну тестировать на интерлюде!
Данные чара показывались верно. У моба ID показывался. Сообщение, что моб добавлен не появляется. Наверно еще где-то смещения править надо.
Что ты у этого моба запоминаешь? Ведь кроме objid и координат по таргету ничего не возвращает и objid каждый раз новое. Какой пакет используешь для сохранения мобов в базе?
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Старый 15.03.2008, 11:31   #295
Пользователь
 
Аватар для ASSA
 
Регистрация: 09.02.2008
Сообщений: 38
Сказал Спасибо: 1
Имеет 1 спасибку в 1 сообщении
ASSA
По умолчанию

2 NLobP
Sps большошое =))) будем пробовать...

Кстати я вроде первый раз завалил сервак, посылал 10 мс пакет на трейд, пытался дюп сделать в 2 окна...
я еще проверю разок, ляжет он или нет :good:

Добавлено спустя 1 минуту:
Жалко тока шотел поигратцо...как все повисло :sorry:

Добавлено спустя 11 часов 34 минуты 18 секунд:
Попробовал )))
Да не то не много..там клвиши к пакетам привязываются, хорошо было бы, чтоб при нажатии клавиши Л2пх както чтоли к кленту обращалась и нажимала на нужные кнопки, как макрос..

ЗЫ.
Тока вот обычные макросы оч сильно затормаживают систему
__________________
Пишите в асю если чего. 446-693-955
ASSA вне форума   Ответить с цитированием
Старый 15.03.2008, 11:42   #296
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Re:

Цитата:
Сообщение от ASSA
Попробовал )))
Да не то не много..там клвиши к пакетам привязываются, хорошо было бы, чтоб при нажатии клавиши Л2пх както чтоли к кленту обращалась и нажимала на нужные кнопки, как макрос..

ЗЫ.
Тока вот обычные макросы оч сильно затормаживают систему
Попробуй ACTools. Тоже нужно писать скрипты.
Код:
What is AC Tool?

AC Tool is a utility that allows you to list a series of keystrokes and mouse clicks in advance and send them to Asheron's Call at a later time. The list of keystrokes and mouse clicks is called a macro or a script.

AC Tool does not intercept data returned by Asheron's Call. That means a macro cannot tell when you are attacked, if you have run out of something needed by the macro, etc, however there is a Decal Companion for AC Tool can be used to intercept data and perform other useful functions.  See the CHANGE THIS section on AC Tool Companion.
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Старый 16.03.2008, 05:48   #297
Рыцарь
 
Аватар для VORON
 
Регистрация: 06.08.2007
Сообщений: 209
Сказал Спасибо: 6
Имеет 67 спасибок в 34 сообщенях
VORON пока неопределено
По умолчанию

ДРУЗЬЯ, частично перечитал топ.. и с ужасом обнаружил что нет нормальной реализации глотания банок ХП, ГХП, ГЦП... тот вариант что предложил МКС предполагает предварительную подготовку скрипта.. т.е. после запуска скрипта следуют самому ручками глотнуть банки в нужной последовательности..
спешу исправить етот пробел в наших знаниях.. хотя тут дело не в знаниях а просто лень было делать многим.. но!.. спешу представиить вышеупомянутый скрипт в более продвинутой модификации.. теперь если у вас даже и нет вовсе ПП ШЕ ЕЕ или БИША то и вы совсем один то всё равно скрипт вам будет полезен ибо он нетребует никаких настроек и будет пить банки ХП ГЦП ГХП при условии что они есть в инвенторе у вас.. скрипт также настроен на то что ети зелья будут пить ваши баферы- (если они у них есть..).. плиз неспрашивайте меня почему не работают елексиры- я пока не разбирался.. в сыром виде их реализовал но они не пашут.. незнаю почему но они никак не влеяют на работоспособность скрипта.. для подготовки скрипта к работе требуется лиш имена поменять на реальные.. в 4-х строчках (188-192), после етого скрипт щитается полностью рабочим и готовым к использованию.. но если вам хочется изменить уровни ХП и МП при которых срабатывает ХИЛ и ЗАЛИВКА МП и ХП то там просто значения исправте.. ну я думаю понятно что в конце скрипта написан код- какие бафы на ково класть там весде вбито АСИСТ ТАРГЕТ. т.е. если вас кто то просит: "БАФНИ ПЛЗ" то просто береш его в таргет и жмеш NO или UNWARE от кнопки будет зависеть буф мага или физика.. нужные бафы перечисляются в конце скрипта кому и что бафать.. вопщем.. отличие етого скрипта от того что я раньше дал в том что командир и баферы глотают банки ГЦП,ХП,ГХП сами- автоматом.. при етом ненужно никаких подготовок скрипта.. ето реализуется очень просто.. 1 умный человек в етом топе сказал что пакет ЮЗЕР ИНФО можно вызвать если отправиить запрос на открытие инвенторя.. я проверил- ето правда.. когда скрипт начинает свою работу на все аки отсылается запрос на открытие инвенторя (автоматически).. из попутного пакета ЮЗЕР ИНФО скрипт сам узнает ИДешники всех.. а из инвенторя скрипт сам ищет БАНКИ с ХП,ГХП и ГЦП.. запоминает их OID и потом когда надо использует..
Код:
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; //максимальные уровни МП (лимиты)
MaxCPKom,MaxCPBot1,MaxCPBot2,MaxCPBot3,MaxCPBot4:integer; //максимальные уровни ЦП (лимиты)

CurHPKom,CurHPBot1,CurHPBot2,CurHPBot3,CurHPBot4:integer; //текущие значения ХП
CurMPKom,CurMPBot1,CurMPBot2,CurMPBot3,CurMPBot4:integer; //текущие значения МП
CurCPKom,CurCPBot1,CurCPBot2,CurCPBot3,CurCPBot4:integer; //текущие значения ЦП

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

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

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

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

OidHPPotion0,OidGCPPotion0,OidGHPPotion0,OidHPLexir0,OidCPLexir0:string; //обжэкт ИД зелий разных у командира
OidHPPotion1,OidGCPPotion1,OidGHPPotion1,OidHPLexir1,OidCPLexir1:string; //обжэкт ИД зелий разных у первого бота
OidHPPotion2,OidGCPPotion2,OidGHPPotion2,OidHPLexir2,OidCPLexir2:string; //обжэкт ИД зелий разных у второго
OidHPPotion3,OidGCPPotion3,OidGHPPotion3,OidHPLexir3,OidCPLexir3:string; //обжэкт ИД зелий разных
OidHPPotion4,OidGCPPotion4,OidGHPPotion4,OidHPLexir4,OidCPLexir4:string; //обжэкт ИД зелий разных

i,x: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');  //  ЭВЕЙШН
bafEE[3]:=hstr('2F 75 05 00 00 00 00 00 00 00');  //  РАСХОД МАНЫ

//при старте скрипта значения переменных =0
//поетому скрипт подумает что у всех 0 ХП и начнется хаос.. все начнут друг друга хилить без остановки
//чтоб избежать етого выставим начальные значения.. то что ХП у нас- дожопы.. много.. 15к.. т.е. хилить ненадо.
//а потом скрипт сам захватит текущее знасение.. и всё коректно будет...
CurHPKom:=15000;
CurHPBot1:=15000;
CurHPBot2:=15000;
CurHPBot3:=15000;
CurHPBot4:=15000;

//для маны аналогичная ситуация
CurMPKom:=15000;
CurMPBot1:=15000;
CurMPBot2:=15000;
CurMPBot3:=15000;
CurMPBot4:=15000;

//дело в том что скрипт расчитывает хилить или нет в зависимости от % от шкалы.. если вся шкала =0 (по дефолту)
//то ето както некоректно там будет хотя вроде пофиг..
//но для коректности понимания процесса мы пишем что максимальная шкала ХП у нас оч маленькая а текущие значения- оч большие..
//поетому никакие хилы небудут происходить при старте скрипта..
MaxHPKom:=10;
MaxHPBot1:=10;
MaxHPBot2:=10;
MaxHPBot3:=10;
MaxHPBot4:=10;

//тики для таймеров
tick3:=1;
tick4:=1;

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

//новый баф кастовать через 4 секунды
  timer4:=TTimer.Create(nil);
  timer4.OnTimer:=@OnTimer4; //
  timer4.enabled:=false; //
  timer4.interval:=4000;

//в пати баферов пинимать с интервалом 1 сек
  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;

//********************ЗАХВАТ OID ЗЕЛИЙ************************************************************
//при старте скрипта отправляется запрос на открытие инвенторя автоматически
//в ответе сервера содержится всё содердимое инвенторя.. ищем доступные для использования зелья там
//и запоминаем их OID для дальнейшего использования.. если какието банки кончились и вы их докупили
//то следует перезапустить скрипт.. чтоб заного ИД захватить..
//тут вот в скобачках 2 байта ето ИТЕМ ИД.. он константа.. с помощью итем ИД клинт знает какую текстуру подстовлять для визуализации и т.д.
//но для использования предмета- есть ОБЖЕКТ ИД..  например у вас 3 пушки одинаковых в инвенторе.. при етом ИТЕМ ИД у всех будет одинаковый..
//вы наденете то одну то другую.. ето еще лучше на примере бижи объяснять.. 3 кольца у вас одинаковых..
//2 надето а 1 в инвенторе лежит.. вы тыкаете по нему.. (по инвентарю- кольцу) и вродебы ничего для вас не происходит..
// но сервер у себя в мозгах меняет одно на другое кольцо..просто они одинаковые на вид и вы етого не видите..
//но на самом деле ИД у всех 3-х колец разный.. вопщем ОБЖЕКТ ИД- ето предмет который можно юзать каким либо способом в игре..
//самостоятельяная единица.. а ИТЕМ ИД- чисто сопостовление что такойто ОБЖЭКТ- визуализировать- такто..
// с помощью манипуляций с етими числами мы можем увидеть что в место НГ пухи у вас будет нарисован- зарич..
//или вместо моба 12 лвл нарисован АНТАРАС.. и вы его геройски убиваете..
//так вот (заболтался) наша задача соспоставить ИТЕМ ИД к ОБЖЭКТ ИД.. (в скобочках там ИТЕМ ИД)
//для етого мы перебираем пакет с инвентарем и ишем там среди кучи предметов тока те которые нас интерисуют и запоминаем их ОБЖЭКТ ИД..
//у командира:
if FromServer then
if ConnectName=NameKom then
if pck[1]=#$1B then
 begin
  for i:= 0 to round(length(pck)/36) do
   begin
   if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('25 04')) then OidHPPotion0:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8]; // 2504 - это итем ИД банки с ХП обычной с магазина
   if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('03 06')) then OidGHPPotion0:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
   if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('B2 21')) then OidHPLexir0:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
   if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('BE 21')) then OidHPLexir0:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
   if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('D8 15')) then OidGCPPotion0:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
   end
 end;

//у БОТА1:
if FromServer then
if ConnectName=NameBot1 then
if pck[1]=#$1B then
 begin
  for i:= 0 to round(length(pck)/36) do
   begin
   if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('25 04')) then OidHPPotion1:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8]; // 2504 - это итем ИД банки с ХП обычной с магазина
   if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('03 06')) then OidGHPPotion1:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
   if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('B2 21')) then OidHPLexir1:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
   if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('BE 21')) then OidHPLexir1:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
   if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('D8 15')) then OidGCPPotion1:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
   end
 end;

//у БОТА2:
if FromServer then
if ConnectName=NameBot2 then
if pck[1]=#$1B then
 begin
  for i:= 0 to round(length(pck)/36) do
   begin
   if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('25 04')) then OidHPPotion2:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8]; // 2504 - это итем ИД банки с ХП обычной с магазина
   if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('03 06')) then OidGHPPotion2:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
   if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('B2 21')) then OidHPLexir2:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
   if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('BE 21')) then OidHPLexir2:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
   if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('D8 15')) then OidGCPPotion2:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
   end
 end;


//у БОТА3:
if FromServer then
if ConnectName=NameBot3 then
if pck[1]=#$1B then
 begin
  for i:= 0 to round(length(pck)/36) do
   begin
   if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('25 04')) then OidHPPotion3:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8]; // 2504 - это итем ИД банки с ХП обычной с магазина
   if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('03 06')) then OidGHPPotion3:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
   if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('B2 21')) then OidHPLexir3:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
   if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('BE 21')) then OidHPLexir3:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
   if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('D8 15')) then OidGCPPotion3:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
   end
 end;

//у БОТА4:
if FromServer then
if ConnectName=NameBot4 then
if pck[1]=#$1B then
 begin
  for i:= 0 to round(length(pck)/36) do
   begin
   if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('25 04')) then OidHPPotion4:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8]; // 2504 - это итем ИД банки с ХП обычной с магазина
   if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('03 06')) then OidGHPPotion4:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
   if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('B2 21')) then OidHPLexir4:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
   if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('BE 21')) then OidHPLexir4:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
   if (pck[i*36+4+8]+pck[i*36+5+8] = hstr('D8 15')) then OidGCPPotion4:=pck[i*36+8]+pck[i*36+1+8]+pck[i*36+2+8]+pck[i*36+3+8];
   end
 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);
  MaxCPKom:=round(MaxHPKom/2);
  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);
  MaxCPBot1:=round(MaxHPBot1/2);
  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);
  MaxCPBot2:=round(MaxHPBot2/2);
  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);
  MaxCPBot3:=round(MaxHPBot3/2);
  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);
  MaxCPBot4:=round(MaxHPBot4/2);
  end;

//*************************СЛЕДИМ ЗА ХП и МП******************************************
//а ету часть кода требуется под ваши жэлания настроить..
//тут указываются значения при которых ПП ШШ ЕЕ БИШ будут вам ману лить и ХП заливать и каким именно скилом
//следим за ХП КОМАНДИРА
//отлавливаем СТАТУС АПДЕЙТ!!!!!
//как выяснилось статус апдейта бывает 2 разных..
//1 для ХП, 2 для МП
//етот пакет приходит при любом изменении ХП и МП у чара..
//чтоб их отличить сервак использует индекс.. в 6-м байте присылает либо 4 либо 2..
//если в 6-м байте СТАТУС АПДЕЙТ цифра #$04 то значит реч в етом пакете про ХП
//а если #$02 то реч в етом пакете про МП..
//ДЛЯ ЦП используется дурацкая формула: базовое ХП/2 .. в пакете нигде не указывается максимальное кол-во ЦП поетому мы его вот так вот высчитываем.. спросите почиму дурацкая?.. потомучто бафните от ПП блесс ХП и пипец..
//я долго не мог понять почеу у меня скрипт сам бухал ЦП банки под бафом без надобности.. пока не понял что ЦП от базового ХП расщитывается без учета бафа..
  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);
//считываем текущее состояние ЦП!!-)
    CurCPKom:=ReadD(30);
//ну собственно ето уже можно править под желания каждого:
//если жизни текущие меньше 0,7 от шкалы (70%) то..
//то биш использует свой любимый скил МАЖОР ХИЛ за спирит оре (в интерлюде) (для ц4 такого скила нету)
     if (CurHPKom < round(MaxHPKom*0.7)) 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;

     if (CurHPKom < round(MaxHPKom*0.4)) 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;

     if (CurHPKom < round(MaxHPKom*0.75)) then
     begin
      buf:=hstr('04') + IDKomandos + Bot4X + Bot4Y + Bot4Z + hstr('00');
      if (IDBot4 <> '') then SendToServerEX(NameBot4);
      buf:=hstr('2F 79 05 00 00 00 00 00 00 00');  //ЕЕ ХИЛИТ
      if (IDBot4 <> '') then SendToServerEX(NameBot4);
     end;

     if (CurHPKom < round(MaxHPKom*0.6)) then
     begin
      buf:=hstr('04') + IDKomandos + 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(NameBot3);
     end;

//КОМАНДИР БУХАЕТ ЗЕЛЬЯ
     if (CurHPKom < round(MaxHPKom*0.90)) and (CurCPKom < round(MaxCPKom*0.6)) then
     begin
      buf:= hstr('14') + OidGHPPotion0 + hstr('00 00 00 00'); // гритер хилку
      if (OidGHPPotion0 <> '') then SendToServerEX(NameKom);
     end;

     if (CurHPKom < round(MaxHPKom*0.8)) then
     begin
      buf:= hstr('14') + OidHPPotion0 + hstr('00 00 00 00'); // обычную хилку
      if (OidHPPotion0 <> '') then SendToServerEX(NameKom);
     end;

     if (CurHPKom < round(MaxHPKom*0.3)) then
     begin
      buf:= hstr('14') + OidHPLexir0 + hstr('00 00 00 00'); // лексир ХП
      if (OidHPPotion0 <> '') then SendToServerEX(NameKom);
     end;

///ТУТ МЕНЯЙТЕ ЗНАЧЕНИЕ ОЧ АКУРАТНО.. 1,0 ето не 100% шкалы изза бафа на блесс ХП.. 
// поетому ставьте немного меньше с учетом возможного бафа на блес ХП..
     if (CurCPKom < round(MaxCPKom*0.6)) then
     begin
      buf:= hstr('14') + OidGCPPotion0 + hstr('00 00 00 00'); // ГЦП БАНКУ
      if (OidGCPPotion0 <> '') then SendToServerEX(NameKom);
     end;

     if (CurCPKom < round(MaxCPKom*0.1)) then
     begin
      buf:= hstr('14') + OidCPLexir0 + hstr('00 00 00 00'); // лексир ЦП
      if (OidGCPPotion0 <> '') then SendToServerEX(NameKom);
     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);
    CurCPbot1:=ReadD(30);
//на 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;

//БОТ1 БУХАЕТ ЗЕЛЬЯ
     if (CurHPBot1 < round(MaxHPBot1*0.90)) and (CurCPBot1 < round(MaxCPBot1*0.6)) then
     begin
      buf:= hstr('14') + OidGHPPotion1 + hstr('00 00 00 00'); // гритер хилку
      if (OidGHPPotion1 <> '') then SendToServerEX(NameBot1);
     end;

     if (CurHPBot1 < round(MaxHPBot1*0.8)) then
     begin
      buf:= hstr('14') + OidHPPotion1 + hstr('00 00 00 00'); // обычную хилку
      if (OidHPPotion1 <> '') then SendToServerEX(NameBot1);
     end;

     if (CurHPBot1 < round(MaxHPBot1*0.3)) then
     begin
      buf:= hstr('14') + OidHPLexir1 + hstr('00 00 00 00'); // лексир ХП
      if (OidHPLexir1 <> '') then SendToServerEX(NameBot1);
     end;

     if (CurCPBot1 < round(MaxCPBot1*0.6)) then
     begin
      buf:= hstr('14') + OidGCPPotion1 + hstr('00 00 00 00'); // ГЦП БАНКУ
      if (OidGCPPotion1 <> '') then SendToServerEX(NameBot1);
     end;

     if (CurCPBot1 < round(MaxCPBot1*0.1)) then
     begin
      buf:= hstr('14') + OidCPLexir1 + hstr('00 00 00 00'); // лексир ЦП
      if (OidCPLexir1 <> '') 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);
    CurCPbot2:=ReadD(30);

     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;

//БОТ2 БУХАЕТ ЗЕЛЬЯ
     if (CurHPBot2 < round(MaxHPBot2*0.90)) and (CurCPBot2 < round(MaxCPBot2*0.6)) then
     begin
      buf:= hstr('14') + OidGHPPotion2 + hstr('00 00 00 00'); // гритер хилку
      if (OidGHPPotion2 <> '') then SendToServerEX(NameBot2);
     end;

     if (CurHPBot2 < round(MaxHPBot2*0.8)) then
     begin
      buf:= hstr('14') + OidHPPotion2 + hstr('00 00 00 00'); // обычную хилку
      if (OidHPPotion2 <> '') then SendToServerEX(NameBot2);
     end;

     if (CurHPBot2 < round(MaxHPBot2*0.3)) then
     begin
      buf:= hstr('14') + OidHPLexir2 + hstr('00 00 00 00'); // лексир ХП
      if (OidHPLexir2 <> '') then SendToServerEX(NameBot2);
     end;

     if (CurCPBot2 < round(MaxCPBot2*0.6)) then
     begin
      buf:= hstr('14') + OidGCPPotion2 + hstr('00 00 00 00'); // ГЦП БАНКУ
      if (OidGCPPotion2 <> '') then SendToServerEX(NameBot2);
     end;

     if (CurCPBot2 < round(MaxCPBot2*0.1)) then
     begin
      buf:= hstr('14') + OidCPLexir2 + hstr('00 00 00 00'); // лексир ЦП
      if (OidCPLexir2 <> '') then SendToServerEX(NameBot2);
     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);
    CurCPbot3:=ReadD(30);

     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(NameBot3);
     end;

//БОТ3 БУХАЕТ ЗЕЛЬЯ
     if (CurHPBot3 < round(MaxHPBot3*0.90)) and (CurCPBot3 < round(MaxCPBot3*0.6)) then
     begin
      buf:= hstr('14') + OidGHPPotion3 + hstr('00 00 00 00'); // гритер хилку
      if (OidGHPPotion3 <> '') then SendToServerEX(NameBot3);
     end;

     if (CurHPBot3 < round(MaxHPBot3*0.8)) then
     begin
      buf:= hstr('14') + OidHPPotion3 + hstr('00 00 00 00'); // обычную хилку
      if (OidHPPotion3 <> '') then SendToServerEX(NameBot3);
     end;

     if (CurHPBot3 < round(MaxHPBot3*0.3)) then
     begin
      buf:= hstr('14') + OidHPLexir3 + hstr('00 00 00 00'); // лексир ХП
      if (OidHPLexir3 <> '') then SendToServerEX(NameBot3);
     end;

     if (CurCPBot3 < round(MaxCPBot3*0.6)) then
     begin
      buf:= hstr('14') + OidGCPPotion3 + hstr('00 00 00 00'); // ГЦП БАНКУ
      if (OidGCPPotion3 <> '') then SendToServerEX(NameBot3);
     end;

     if (CurCPBot3 < round(MaxCPBot3*0.1)) then
     begin
      buf:= hstr('14') + OidCPLexir3 + hstr('00 00 00 00'); // лексир ЦП
      if (OidCPLexir3 <> '') then SendToServerEX(NameBot3);
     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);
    CurCPbot4:=ReadD(30);

     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 79 05 00 00 00 00 00 00 00');
      if (IDBot4 <> '') then SendToServerEX(NameBot4);
     end;

//БОТ4 БУХАЕТ ЗЕЛЬЯ
     if (CurHPBot4 < round(MaxHPBot4*0.90)) and (CurCPBot4 < round(MaxCPBot4*0.6)) then
     begin
      buf:= hstr('14') + OidGHPPotion4 + hstr('00 00 00 00'); // гритер хилку
      if (OidGHPPotion4 <> '') then SendToServerEX(NameBot4);
     end;

     if (CurHPBot4 < round(MaxHPBot4*0.8)) then
     begin
      buf:= hstr('14') + OidHPPotion4 + hstr('00 00 00 00'); // обычную хилку
      if (OidHPPotion4 <> '') then SendToServerEX(NameBot4);
     end;

     if (CurHPBot4 < round(MaxHPBot4*0.3)) then
     begin
      buf:= hstr('14') + OidHPLexir4 + hstr('00 00 00 00'); // лексир ХП
      if (OidHPLexir4 <> '') then SendToServerEX(NameBot4);
     end;

     if (CurCPBot4 < round(MaxCPBot4*0.6)) then
     begin
      buf:= hstr('14') + OidGCPPotion4 + hstr('00 00 00 00'); // ГЦП БАНКУ
      if (OidGCPPotion4 <> '') then SendToServerEX(NameBot4);
     end;

     if (CurCPBot4 < round(MaxCPBot4*0.1)) then
     begin
      buf:= hstr('14') + OidCPLexir4 + hstr('00 00 00 00'); // лексир ЦП
      if (OidCPLexir4 <> '') 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);
    rnd:=round(random*100);
     if (CurMPkom < round(MaxMPkom*0.5)) and (rnd<15) 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);
    rnd:=round(random*100);
     if (CurMPkom < round(MaxMPkom*0.5)) and (rnd<15) 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) or (pck[2]+pck[3]+pck[4]+pck[5]=IDBOT4) 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('14') + OidgcpPotion0 + hstr('00 00 00 00'); // обычную хилку
      if (OidgcpPotion0 <> '') then SendToServerEX(NameKom);


{      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[24];
    BafPPApplyChar[2]:=IDAssistTarget;
    BafPPApplyBaf[2]:=bafPP[5];
    BafPPApplyChar[3]:=IDAssistTarget;
    BafPPApplyBaf[3]:=bafPP[2];
    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[1];
    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[16]:='';
    BafPPApplyBaf[16]:='';

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

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

     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[2];
    BafEEApplyChar[2]:=IDAssistTarget;
    BafEEApplyBaf[2]:=bafEE[1];
    BafEEApplyChar[3]:='';
    BafEEApplyBaf[3]:='';


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


end.
__________________
Цитата:
Сообщение от pybukon
прежде чета попросить я немнога раскажу чтоб вы понили как мне плоха
Цитата:
Сообщение от Byrger
А как сделать мой скрипт бесконечным?
Цитата:
Сообщение от XKOR
.. каждый день ионизированной ногой протирает больную)
Цитата:
Сообщение от PsyR
Вылоджите пожалуйста скрипт на рыбалку желательно что бы сам в ВХ клал адаптированый под шоки и так же скрипт на ТТ рец, тоже с диалогами
VORON вне форума   Ответить с цитированием
За это сообщение VORON нажился 2 спасибками от:
Старый 16.03.2008, 10:12   #298
Пользователь
 
Аватар для APXAHGEJI
 
Регистрация: 08.03.2008
Сообщений: 77
Сказал Спасибо: 31
Имеет 19 спасибок в 15 сообщенях
APXAHGEJI
По умолчанию

Слегка поправил выложенный ранее АвтоСвип. Упростил запись мобов, свипает стабильнее.
Код:
//Автоматизация sweep'а by APXAHGEJI
//Свип производится тока при условии что моб был ,хоть один раз, ударен ВАМИ и
//находится в списке нужных мобов.
//Возможность работы нескольких одновременных скриптов
//Социальное действие YES - запусстить/приостановить запись/АвтоСвип мобов
//Социальное действие NO остановиться - завершить запись мобов и перейтии к АвтоСвип
//После того как скрипт запущен нажимаете Yes и атакуете мобов
//которых собираетесь спойлить. Атакуете до тех пор пока не появилась запись
//что моб записан. Для удобства процесс записи можно приостановить нажатие той же
//клавиши Yes. После того как все нужные мобы записаны жмакаете NO, запись мобов
//завершается, АвтоСвип запускается, можете приступать к спойлу. АвтоСвип можно
//приостановить нажав всю туже клавишу соцдействия Yes, но запись мобов под АвтоСвип
//не остановится, и снова активировав, все нужные мобы просвипятся.

Const
  Name='Ник перса';
  Sweep='2F 2A 00 00 00 00 00 00 00 00';
Var
  TimerSweep,TimerDel: TTimer;
  N,M,i,NpcNum: Byte;
  X,Y,Z,CharID: Integer;
  NpcTypeID,TargetID: array of Integer;
  NeedSweep,Dead: array of Boolean;
  Switch,SaveID,HaveNpc: Boolean;
//******************************************************************************
//                      Вызывается при включении скрипта
//******************************************************************************
Procedure Init;
begin
  N:= 1;
  M:= 1;
  Switch:= False;
  SaveID:= True;
  SetLength( NpcTypeID, N );
  SetLength( TargetID, N );
  TimerSweep:=TTimer.Create(nil);
  TimerSweep.OnTimer:=@Sweeper;
  TimerSweep.Enabled:= False;
  TimerSweep.Interval:= 1000;
  TimerDel:=TTimer.Create(nil);
  TimerDel.OnTimer:=@Del;
  TimerDel.Enabled:= False;
  TimerDel.Interval:= 5000;
  Say('Нажмите Yes, чтобы начать/приостановить');
  Say('запись мобов или АвтоСвип.');
  Say('Нажмите No, чтобы завершить запись мобов');
  Say('и приступить к сполйу.');
end;
//******************************************************************************

//******************************************************************************
//                        Вызывается при выключении скрипта
//******************************************************************************
Procedure Free;
begin
  TimerSweep.Free;
  TimerDel.Free;
end;
//******************************************************************************

//******************************************************************************
//             Посылаем сообщение, которое видно только в окне бота
//******************************************************************************
Procedure Say(msg:string);
begin
  buf:=hstr('4A 00 00 00 00');
  WriteD(2);
  WriteS(Name);
  WriteS(msg);
  SendToClientEx(Name);
end;
//******************************************************************************

//******************************************************************************
//                     Проверка наличия ИД моба в массиве
//******************************************************************************
Procedure FindMob(ObjectID: Integer);
begin
  HaveNpc:= False;
  NpcNum:= M;
  For i:=0 to (M-1) do
   If (ObjectID=TargetID[i]) then begin
     NpcNum:= i;
     HaveNpc:= True;
     break;
   end Else
     If (TargetID[i]= 0) and (NpcNum = M) then NpcNum:= i;
end;
//******************************************************************************

//******************************************************************************
// Запуск свипа каждые n секунд (n= Timer.Interval)
//******************************************************************************
Procedure Sweeper(Sender: TObject);
begin
  For i:=0 to (M-1) do
    If NeedSweep[i] and Dead[i] then begin
      buf:= #$04;
      WriteD(TargetID[i]);
      WriteD(X);
      WriteD(Y);
      WriteD(Z);
      WriteC(00);
      SendToServerEx(Name);
      buf:=HStr(Sweep);
      SendToServerEx(Name);
      NeedSweep[i]:= False;
      exit;
    end;
end;
//******************************************************************************

//******************************************************************************
//Удаление списка при отстуствии записей о мобах
//******************************************************************************
Procedure Del(Sender: TObject);
begin
  For i:=0 to (M-1) do
    If (TargetID[i]<>0) then exit;
  M:= 0;
  SetLength(TargetID, M);
  SetLength(NeedSweep, M);
  SetLength(Dead, M);
  TimerDel.Enabled:= False;
  TimerSweep.Enabled:= False;
end;
//******************************************************************************

//******************************************************************************
//     Вызывается при приходе каждого пакета, если скрипт включен
//******************************************************************************
Begin

  //****************************************************************************
  //Не обрабатываем пустые пакеты
  If pck='' then exit;
  //****************************************************************************

  //****************************************************************************
  //Если от сервака принят пакет UserInfo. Запоминаем собственный ИД.
  If FromServer and (ConnectName=Name) and (pck[1]=#$04) then CharID:= ReadD(18);
  //****************************************************************************

  //****************************************************************************
  //Переключение между записью ИД и АвтоСвипом
  If SaveID then begin
    //**************************************************************************
    //Делаем выборку нужных для свипа видов мобов
    //**************************************************************************
    if Switch then
      if FromServer and (ConnectName=Name) then
        if (pck[1]=#$05) and (ReadD(2)=CharID) then begin
          FindMob(ReadD(6));
          If not HaveNpc then begin
            TargetID[N-1]:= ReadD(6);
            Inc(M);
            SetLength( TargetID, M );
          end;
        end;
        If (pck[1]=#$16) then
          For i:=0 to (M-1) do
            if (ReadD(2) = TargetID[i]) then begin
              For NpcNum:= 0 to (N-1) do
                If (ReadD(6)= NpcTypeID[NpcNum]) then exit;
              NpcTypeID[N-1]:= ReadD(6);
              Say(IntToStr(N)+' вид мобов записан');
              Inc(N);
              SetLength( NpcTypeID, N );
              exit;
            end;
    //**************************************************************************
    //Управление записью мобов
    //**************************************************************************
    If FromClient and (ConnectName=Name) and (pck[1]=#$1B) then begin
      If (ReadD(2)=6) then
        if Switch then begin
          pck:='';
          Switch:= False;
          Say('Запись мобов приостановлена');
        end
        else begin
          pck:='';
          Switch:= True;
          Say('Начата запись мобов, атакуйте нужных мобов');
        end;
      If (ReadD(2)=5) then begin
        pck:='';
        Dec(N);
        M:= 0;
        SetLength(NpcTypeID, N);
        SetLength(TargetID, M);
        SetLength(NeedSweep, M);
        SetLength(Dead, M);
        SaveID:= False;
        Switch:= True;
        Say('Запись мобов завершена, АвтоСвип активирован');
        Say('Удачного спойла');
      end;
    end;
    //**************************************************************************
  end
  //****************************************************************************

  //****************************************************************************
  //Переходим от записи нужных мобов к АвтоСвипу
  Else begin
  //****************************************************************************

    //**************************************************************************
    //Записываем текущие координаты
    if FromClient and (ConnectName=Name) and (pck[1]=#$48) then begin
      X:= ReadD(2);
      Y:= ReadD(6);
      Z:= ReadD(10);
    end;
    //**************************************************************************

     //**************************************************************************
    //Анализ мобов :=))
    If FromServer and (ConnectName=Name) then begin
      //************************************************************************
      //Записываем всех атакованых нами мобов (пакет Attack, причем Attacker=CharID)
      If ((pck[1]= #$05) and (ReadD(2)= CharID)) then begin
        FindMob(ReadD(6));
        If not HaveNpc then
          If (NpcNum <> M) then begin
            TargetID[NpcNum]:= ReadD(6);
            NeedSweep[NpcNum]:= False;
            Dead[NpcNum]:= False
          end Else begin
            Inc(M);
            SetLength(TargetID, M);
            SetLength(NeedSweep, M);
            SetLength(Dead, M);
            TargetID[M-1]:= ReadD(6);
            NeedSweep[M-1]:= False;
            Dead[M-1]:= False;
            If Switch then TimerSweep.Enabled:= True;
            TimerDel.Enabled:= True;
          end;
      end;
      //************************************************************************
      //Проверяем есть ли в списке мобы
      if (M <> 0) then begin
        //**********************************************************************
        //Проверяем тот ли вид моба атакован (пакет NpcInfo)
        If (pck[1]= #$16) then begin
          FindMob(ReadD(2));
          If HaveNpc and (not NeedSweep[NpcNum]) then begin
            For i:=0 to (N-1) do
              If (ReadD(6)= NpcTypeID[i]) then begin
                HaveNpc:= False;
                Break;
              end;
            If not HaveNpc then NeedSweep[NpcNum]:= True;
          end;
        end;
        //**********************************************************************
        //Записываем что атакованый моб умер (пакет Die, причем Sweepable=1)
        If (pck[1]= #$06) and (pck[22]= #$01) then begin
          FindMob(ReadD(2));
          If HaveNpc then Dead[NpcNum]:= True;
        end;
        //**********************************************************************
        //Удаляем записи об атакованом мобе (пакет DeleteObject)
        If (pck[1]= #$12) then  begin
          FindMob(ReadD(2));
          If HaveNpc then begin
            TargetID[NpcNum]:= 0;
            NeedSweep[NpcNum]:= False;
            Dead[NpcNum]:= False;
          end;
        end;
        //**********************************************************************
      end;
      //************************************************************************
    end;
    //**************************************************************************

    //**************************************************************************
    //Запускаем/приостанавливаем АвтоСвип
    //**************************************************************************
    If FromClient and (ConnectName=Name) and (pck[1]=#$1B) and (ReadD(2)=6) then
      if Switch then begin
        pck:='';
        TimerSweep.Enabled:= False;
        Switch:= False;
        Say('АвтоСвип приостановлен');
      end
      else begin
        pck:='';
        TimerSweep.Enabled:= True;
        Switch:= True;
        Say('АвтоСвип запущен');
      end;
    //**************************************************************************
  end;
  //****************************************************************************
End.
//******************************************************************************
Добавлено спустя 5 минут 19 секунд:
И кстати у меня еще вопросик назрел.
Мне крайне ненравятся все эти извращения с вводом чего либо в чат или использования соцдействия.
Нельзяли аткивировать некоторый код при нажатии ,например, клавиши W?
APXAHGEJI вне форума   Ответить с цитированием
За это сообщение APXAHGEJI нажился спасибкой от:
Старый 16.03.2008, 12:26   #299
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию Re:

Цитата:
Сообщение от APXAHGEJI
И кстати у меня еще вопросик назрел.
Мне крайне ненравятся все эти извращения с вводом чего либо в чат или использования соцдействия.
Нельзяли аткивировать некоторый код при нажатии ,например, клавиши W?
Выше по теме лежит скрипт DeVolf'a. Я сам не пробовал применять его, но вроде он про присвоение действий клавишам.
Код:
1 Запускаем скрипт
2 Используем ту клавишу к которой хотим привязать действие
3 Отлавливаем пакет от клиента он будет типа Бай Пас
4 добавляем в скрипте перед end. такие строчки
Код: Выделить всё
if fromclient and (pck=HStr('в етих скобках пишем пакет который поймали')) then begin
    buf:=#$0F;
    WriteD(5);
    WriteS(HTML2);
    SendToClient;
    buf:=hstr('а тут пишем пакет действия ,  которое присвоим клавише');
    pck:='';
    sendtoserver;
    end;
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Старый 16.03.2008, 18:09   #300
Пользователь
 
Аватар для APXAHGEJI
 
Регистрация: 08.03.2008
Сообщений: 77
Сказал Спасибо: 31
Имеет 19 спасибок в 15 сообщенях
APXAHGEJI
По умолчанию

Это не то что мне нужно. Аналогия команд в чат и соц действий.
Кароч тот же хрен тока в левой руке.
Допустим это еще покатит для взятой в пример клавишей W, так как к ней идет привязка покета передвижения.
А как задействовать клавищу которая на клиент не действеут и соответственно не отправляет никаких
пакетов.
Блин я читал что вроде есть в Л2ПНХ обработчик событий.
Нельзя ли перехватывать нажатие клавиши?
(Я нифига в этом деле не шарю. Пытался в инете на эту тему найти какую нить инфу, но безрезультатно, тока денег угрохал.)
Если такое есть, выложите код как это работает с описанием, ну или хотя бы ссылку дайте где мона найти инфу по этому
делу.
APXAHGEJI вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Lineage II > L2PacketHack > Скриптинг



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 10:42.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!