PDA

Просмотр полной версии : Помогите,очень надо...


StKolya
13.10.2007, 06:21
Хелп!
Прога отличная,за создание огромный респект.
Скрипты готовые юзаю + некоторые нахожу и тоже успешно юзаю,надеюсь не забанят =)

лан,суть проблемы:
Я вот скачал у вас скрипт для управление ШЕ,и так как играю в три окна(Некр,ШЕ и ПП),он мне очень пригодился,но может у вас найдётся и скриптец для ПП,я так сам покопался в скрипте,но нечё толкового не сделал,но я так понимаю что изменения по сравнению со скриптом для ШЕ будут не велики...

вот главная проблемка(для меня) :o
//by vimin
//Скрипт для SE, чтобы бегал, лечил и бафал по команде от командира.

const //баффы
b1='2F 10 04 00 00 00 00 00 00 00'; // Shield
b2='2F 0B 04 00 00 00 00 00 00 00'; // Mental Shield
b3='2F 23 04 00 00 00 00 00 00 00'; // Empower
b4='2F B4 04 00 00 00 00 00 00 00'; // Wind Walk
b5='2F 36 04 00 00 00 00 00 00 00'; // Concentration


напишите пожалуйста коды к основным бафам ПП для магов: Блез на МП,ХП;Акум;Берс;
Или подскажите пожалуйста как вычислить эти значения.

Заранее благодарен за помощь.

Добавлено спустя 1 час 15 минут 49 секунд:
:Yahoo!: я вроде понял
вот так?!
b1='2F 26 04 00 00 00 00 00 00 00'; // Berserker Spirit
b2='2F 3D 04 00 00 00 00 00 00 00'; // Acumen
b3='2F 15 04 00 00 00 00 00 00 00'; // Bless the Body
b4='2F 18 04 00 00 00 00 00 00 00'; // Bless the Soul

NLObP
13.10.2007, 13:01
напишите пожалуйста коды к основным бафам ПП для магов: Блез на МП,ХП;Акум;Берс;
Или подскажите пожалуйста как вычислить эти значения.

Как я делаю в таких случаях, может тебе пригодиться. Делаю окно ла2 на пол экрана, окно пакетхака во весь экран. Ла2 поверх пакетхака. Пакетхак на странице "просмотр", стоит галочка "прокручивать", "пакеты от клиента", пакеты от сервера", "запоминать пакеты", фильтрация пакетов отменена (показывать все пакеты). В "список соединений" имя чара, которым будем управлять. Суть в том, что все твои действия с чаром отображаются пакетами, входящими/исходящими и их видно в пакетхаке. Юзаешь к примеру магию и видишь появился пакет RequestMagicSkillUse, тычешь в него мышкой и видешь какие конкретно данные пошли. Расшифровку пакета брать в Packets.ini (идет в компелкте с пакетхаком). Таким способом можно узнать практически все данные по пакетам и к каким действиям они привязаны.

StKolya
13.10.2007, 17:33
Юзнул Bless the Body,получил пакет с такой хнёй
48 92 CA 20 48 92 CA 20 48 0D 08 00 00 01 00 00 00 00 00 00 00 00 00 00 00 42 CF 02 00 4F 4F 00 00 A0 F3 FF FF 00 00 00 00

что и как не пойму,обьясните,плиз :shock:

Добавлено спустя 2 минуты 5 секунд:
Re: Помогите,очень надо...
То что я отредактикровал у меня работает,выкладываю код так,потому как виснет всё нах если прикрепляю файл

//by vimin переделано by St.Kolya
//Скрипт для PP, чтобы бегал, лечил и бафал по команде от командира.

const //баффы
b1='2F 10 04 00 00 00 00 00 00 00'; // Shield
b2='2F 26 04 00 00 00 00 00 00 00'; // Berserker Spirit
b3='2F 3D 04 00 00 00 00 00 00 00'; // Acumen
b4='2F B4 04 00 00 00 00 00 00 00'; // Wind Walk
b5='2F 36 04 00 00 00 00 00 00 00'; // Concentration
b6='2F 15 04 00 00 00 00 00 00 00'; // Bless the Body
b7='2F 18 04 00 00 00 00 00 00 00'; // Bless the Soul
b8='2F 14 04 00 00 00 00 00 00 00'; // Regeneration

var
IDPartyMember, IDAssistTarget: String; //ИД командира и ИД его таргета и Собственный ИД
CoordBufX, CoordBufY, CoordBufZ :String; //координаты бота
NameBuffer, NameKomandos : String; // Имена
x: integer;
timer1: TTimer;

procedure OnTimer(Sender: TObject);
begin
case x of
1: begin
//выделяем командира, эмулируя щелчек мыши
buf:=hstr('04') + IDPartyMember + CoordBufX + CoordBufY + CoordBufZ + hstr('00');
SendToServerEX(NameBuffer);

buf:=hstr(b1);
SendToServerEx(NameBuffer);
x:=x+1;
end;
2: begin
buf:=hstr(b2);
SendToServerEx(NameBuffer);
x:=x+1;
end;
3: begin
buf:=hstr(b3);
SendToServerEx(NameBuffer);
x:=x+1;
end;
4: begin
buf:=hstr(b4);
SendToServerEx(NameBuffer);
x:=x+1;
end;
5: begin
buf:=hstr(b5);
SendToServerEx(NameBuffer);
x:=x+1;
end;
6: begin
buf:=hstr(b6);
SendToServerEx(NameBuffer);
x:=x+1;
end;
7: begin
buf:=hstr(b7);
SendToServerEx(NameBuffer);
x:=x+1;
end;
8: begin
buf:=hstr(b8);
SendToServerEx(NameBuffer);
x:=0;
timer1.enabled:=false;
end;
end;
end;

procedure bRun;
begin
if (CoordBufX <> '') and (IDPartyMember <> '') then
begin
//выделяем командира, эмулируя щелчек мыши
buf:=hstr('04') + IDPartyMember + CoordBufX + CoordBufY + CoordBufZ + hstr('00');
SendToServerEX(NameBuffer);
//бежим за командиром эмулируя повторный щелчек мыши по таргету
buf:=hstr('04') + IDPartyMember + CoordBufX + CoordBufY + CoordBufZ + hstr('00');
SendToServerEX(NameBuffer);
end;
end;

procedure bHeal;
begin
if (CoordBufX <> '') and (IDPartyMember <> '') then
//if (IDPartyMember <> '') then
begin
//выделяем командира, эмулируя щелчек мыши
buf:=hstr('04') + IDPartyMember + CoordBufX + CoordBufY + CoordBufZ + hstr('00');
SendToServerEx(NameBuffer);

// хил
buf:=hstr('2F F7 03 00 00 00 00 00 00 00'); // Battle Heal

//отправляем пакет серваку
SendToServerEx(NameBuffer);
end;
end;

procedure Init; //Вызывается при включении скрипта
begin
NameBuffer:='HellProphet';
NameKomandos:='SpellPower';
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer;
timer1.enabled:=false;
timer1.interval:=2000;
x:=0;
end;

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

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

//если от сервака принят пакет с ИД и Координатами членов пати то
if FromServer and (pck[1]=#$a7) then
begin
//запоминаем ИД командира
IDPartyMember:=pck[6] + pck[7] + pck[8] + pck[9];
end;

//если принят пакет от клиента с кординатами бафера то
if FromClient and (ConnectName=NameBuffer) and (pck[1]=#$48) then
begin
//запоминаем координаты
CoordBufX:= pck[6] + pck[7] + pck[8] + pck[9];
CoordBufY:= pck[10] + pck[11] + pck[12] + pck[13];
CoordBufZ:= pck[14] + pck[15] + pck[16] + pck[17];
end;

//далее идут управляющие команды

//если КОМАНДИР пишет в любой чат цифру "1" (код "#$31 #$00" в юникоде (в юникоде под 1 символ используются 2 байта) я так понял) то
if FromClient and (ConnectName=NameKomandos)and (pck[1]=#$38) then
if (pck[2]=#$31) and (pck[3]=#$00) then
begin
//убиваем этот пакет, чтоб сервер его не получил
pck:='';
//Бафер БЕЖИТ за КОМАНДИРОМ
bRun;

//выйти из рабочей части скрипта чтобы другие услови не проверяли убитый пакет нулевой длинны
exit;
end;

// если КОМАНДИР пишет в любой чат цифру "2" (хил)
if FromClient and (ConnectName=NameKomandos)and (pck[1]=#$38) then
if (pck[2]=#$32) and (pck[3]=#$00) then
begin
//убиваем этот пакет, чтоб сервер его не получил
pck:='';
bHeal;
exit;
end;


// если КОМАНДИР пишет в любой чат цифру "4" (ребаф)
if FromClient and (ConnectName=NameKomandos)and (pck[1]=#$38) then
if (pck[2]=#$34) and (pck[3]=#$00) then
begin
//убиваем этот пакет, чтоб сервер его не получил
pck:='';

// бафы
timer1.enabled:=true;
x:=1;
exit;
end;

end.

Pirate
13.10.2007, 18:41
Ты смотриш пакет от сервера, он сообщает клиенту какую анимацию проиграть и тд. при касте скила. Зачем это тебе? примерный формат его:
IdCast // ID того кто кастует
TargetIdCast // Id цели
IdSkill; //ID скила
SkillLvl //уровень скила
TimeCast //время каста
ReuseDelay //Задержка перед повторным использованием
Это начиная с 2го байта по 4 на каждый пораметр.
Делай как NLObP говорил, тебе нужен пакет запроса на использование скила, от клиента к серверу RequestMagicSkillUse.

StKolya
14.10.2007, 01:25
ой,понял,щас гляну

Добавлено спустя 1 час 42 минуты:
ошибку насчёт Хила понял,исправил. 8)
Ещё такой вопросик:
У меня есть два скрипта 1) Помошник ШЕ (by vimin) 2) Помошник ПП (тот что я модифицировал)
Я понимаю что я могу два загружать сразу,но а можно это всё дело в один скрипт запихнуть?!
Если да,то хоть намёк дайте или помогите со всем кодом,бо я написал,но чёто не пашет %)

Добавлено спустя 4 часа 49 минут 14 секунд:
Кстати,юзаю скрипт для ловли и потрошения рыбы,всё гуд,проблема тока в Хиле,я делаю всё как написано,но когда на авторыбалке ловится моб,то хилки не идут,и ещё такой вопросик,можно ли поставить,когда вытягывается моб,вместо пития хилок(я отдельный скрипт попробую юзнуть на питие баанок ХП),автоюз самолечения,в моём случае,Greater Battle Heal,просто ловлю рыбку Бишем 62го лвл. =)

//Автоматизация ловли рыбы by NLObP и т.д.

Заранее благодарен за помощь.

NLObP
14.10.2007, 02:03
Ещё такой вопросик:
У меня есть два скрипта 1) Помошник ШЕ (by vimin) 2) Помошник ПП (тот что я модифицировал)
Я понимаю что я могу два загружать сразу,но а можно это всё дело в один скрипт запихнуть?!
Если да,то хоть намёк дайте или помогите со всем кодом,бо я написал,но чёто не пашет %)

По мне так лучше отдельные юзать, их проще настраивать и запускать. Разрешено до 64 одновременно.
А так тебе необходимо предусмотреть определение принадлежности пакетов конкретным чарам, типа такого:
if FromServer and (ConnectName=Name) and (pck[1]=#$1B) then CreateItemBase; //создание базы предметов
Здесь мы проверяем что пакет от сервера, что он послан чару под кодовым именем Name (в разных скриптах одинаковые переменные не пересекаются), и пакет этот ItemList (1B). Вот в разных скриптах везде пишешь Name, а в одном надо Name1, Name2 для разных чаров и не запутаться когда и где какое писать.

Кстати,юзаю скрипт для ловли и потрошения рыбы,всё гуд,проблема тока в Хиле,я делаю всё как написано,но когда на авторыбалке ловится моб,то хилки не идут

1) не забыть сменить на имя чара,
const
Name='NLObP';

2) затем можно сбросить Healing Potion на землю и подобрать, можно выпить его. Все зависит от того какие пакеты сервак шлет. Я настраиваю на локальном сервере с протоколом 660 - мне надо сбросить и поднять хилку. На протоколе 656 где я играю, достаточно выпить, можно когда начинают атаковать, для экономии хилок.
Скрипт шлет сообщение что готов:
Say('Автоматическое использование Нeal Рotion готово к работе!');
Обрабатываются два вида хилок 1060-Lesser Healing Potion, 1061-Healing Potion. Если у тебя другие надо исправить скрипт.

и ещё такой вопросик,можно ли поставить,когда вытягывается моб,вместо пития хилок(я отдельный скрипт попробую юзнуть на питие баанок ХП),автоюз самолечения,в моём случае,Greater Battle Heal,просто ловлю рыбку Бишем 62го лвл. =)
Очень даже можно. Попробуй воспользоваться процедурой. Код MagicID посмотри в пакетхаке, когда заеюзаешь его, у меня нет возможности.
//************************************************** ****************************
//2F=RequestMagicSkillUse:h(MagicID)d(CtrlPressed)b( ShiftPressed)
procedure MagicSkillUse(MagicID:integer);
begin
buf:=#$2F;
WriteD(MagicID);
WriteD(00);
WriteC(00);
SendToServerEx(Name);
end;

//Сам процесс использования в процедуре
procedure OnTimerHP(Sender: TObject);
begin
MagicSkillUse(MagicID);
end;
Вроде так.

StKolya
14.10.2007, 06:01
NLObP,
ок,буду пробовать...

Добавлено спустя 2 часа 50 минут 20 секунд:
промучался,сколько смог,вот что вышло,только не заработало:

//автоматическое использование НР пробирок by NLObP
// 1-Изменяем Name='NLObP';
// 2-бросаем, подбираем или выпиваем Heal Potion
//Работа проверена на L2C4 Protocol 660 LocalServer "L2J FORTRESS" и Protocol 656

const
Name='ViniPUF';
var
ColvoHP, CharObjID, ItemObjID: integer;
MaxHP, CurHP: integer;
TimerHP: TTimer;
Status: boolean;

//2F=RequestMagicSkillUse:h(MagicID)d(CtrlPressed)b( ShiftPressed)
procedure MagicSkillUse(MagicID:integer);
begin
buf:=#$2F;
WriteD(MagicID);
WriteD(00);
WriteC(00);
SendToServerEx(Name);
end;
//************************************************** ****************************
procedure OnTimerHP(Sender: TObject);
begin
MagicSkillUse(1218);
end;
//************************************************** ****************************
procedure Say(msg:string);
begin
buf:=hstr('4A 00 00 00 00');
WriteD(2);
WriteS(Name);
WriteS(msg);
SendToClientEx(Name);
end;
//************************************************** ****************************
procedure InitStats;
var
i: integer;
begin
//Запоминаем ИД
i:=18;
CharObjID:=ReadD(i);
//смещение переменное, зависит от имени (LenName*2+2)
i:=i+(Length(Name)*2+2)+44;
MaxHP:=ReadD(i);
CurHP:=ReadD(i);
//Say('MaxHP='+inttostr(MaxHP)+'CurHP='+inttostr(Cur HP));
if ItemObjID=0 then exit;
if (CurHP<MaxHP-600) then TimerHP.enabled:=true else TimerHP.enabled:=false;
end;
//************************************************** ****************************
procedure StatsUpdate;
var
i: integer;
begin
for i:=0 to ReadD(6)-1 do begin
case pck[i*8+10] of
#$09: CurHP:=ReadD(i*8+14);
#$0A: MaxHP:=ReadD(i*8+14);
end;
end;
if ItemObjID=0 then exit;
if (CurHP<=MaxHP-600) then TimerHP.enabled:=true else TimerHP.enabled:=false;
end;
//************************************************** ****************************
// Вызывается при включении скрипта
//************************************************** ****************************
procedure Init;
begin
status:=false;
CharObjID:=0;
ItemObjID:=0;
timerHP:=TTimer.Create(nil);
timerHP.OnTimer:=@OnTimerHP;
timerHP.enabled:=false;
timerHP.interval:=5000; //время отката лечения с помощью скила Greater Battle Heal
end;
//************************************************** ****************************
// Вызывается при выключении скрипта
//************************************************** ****************************
procedure Free;
begin
timerHP.Free;
end;
//************************************************** ****************************
// Вызывается при приходе каждого пакета, если скрипт включен
//************************************************** ****************************
begin
//************************************************** ****************************
//не обрабатываем пустые пакеты
if pck='' then exit;
//************************************************** ****************************
//UserInfo
if FromServer and (ConnectName=Name) and (pck[1]=#$04) then InitStats;
//************************************************** ****************************
//StatusUpdate
if FromServer and (ConnectName=Name) and (pck[1]=#$0E) and (CharObjID=ReadD(2)) then StatsUpdate;
end.

Я что-то не так исправил,только не пойму что именно :unknown:

NLObP
14.10.2007, 17:16
NLObP,
ок,буду пробовать...

Добавлено спустя 2 часа 50 минут 20 секунд:
промучался,сколько смог,вот что вышло,только не заработало:


Вот немного поправил.
//автоматическое лечение by NLObP
// 1-Изменяем Name='NLObP';
// 2- Изменяем корректно MagicID - скила Greater Battle Heal

const
//лучше в начало скрипта выносить все константы для облегчения настройки и модификации
Name='ViniPUF';
MagicID=1218; //MagicID - скила Greater Battle Heal
var
CharObjID: integer;
CurMP, MaxMP, MaxHP, CurHP: integer;
TimerHP: TTimer;

//2F=RequestMagicSkillUse:h(MagicID)d(CtrlPressed)b( ShiftPressed)
procedure MagicSkillUse(MagicID:integer);
begin
buf:=#$2F;
WriteD(MagicID);
WriteD(00);
WriteC(00);
SendToServerEx(Name);
end;
//************************************************** ****************************
procedure OnTimerHP(Sender: TObject);
begin
MagicSkillUse(MagicID);
end;
//************************************************** ****************************
procedure Say(msg:string);
begin
buf:=hstr('4A 00 00 00 00');
WriteD(2);
WriteS(Name);
WriteS(msg);
SendToClientEx(Name);
end;
//************************************************** ****************************
procedure InitStats;
var
i: integer;
begin
//Запоминаем ИД
i:=18;
CharObjID:=ReadD(i);
//смещение переменное, зависит от имени (LenName*2+2)
i:=i+(Length(Name)*2+2)+44;
MaxHP:=ReadD(i);
CurHP:=ReadD(i);
MaxMP:=ReadD(i);
CurMP:=ReadD(i);
//Say('MaxHP='+inttostr(MaxHP)+'CurHP='+inttostr(Cur HP)); //если раскоментировать то можно увидеть много
//полезного, например несоответствие реальным данным
//if ItemObjID=0 then exit; //здесь была проверка на готовность скрипта
//в нашем случае можно поставить проверку на количество маны
if CurMP<300 then Say('CurMP='+inttostr(CurMP)+'Заканчивается мана!');
if (CurHP<MaxHP-600) then TimerHP.enabled:=true else TimerHP.enabled:=false;
//не слишком ли много -600?
end;
//************************************************** ****************************
procedure StatsUpdate;
var
i: integer;
begin
for i:=0 to ReadD(6)-1 do begin
case pck[i*8+10] of
#$09: CurHP:=ReadD(i*8+14);
#$0A: MaxHP:=ReadD(i*8+14);
#$0B: CurMP:=ReadD(i*8+14);
#$0C: MaxMP:=ReadD(i*8+14);
end;
end;
//Say('MaxHP='+inttostr(MaxHP)+'CurHP='+inttostr(Cur HP)); //если раскоментировать то можно увидеть много
//полезного, например несоответствие реальным данным
//if ItemObjID=0 then exit; //здесь была проверка на готовность скрипта
//в нашем случае можно поставить проверку на количество маны
if CurMP<300 then Say('CurMP='+inttostr(CurMP)+'Заканчивается мана!');
if (CurHP<=MaxHP-600) then TimerHP.enabled:=true else TimerHP.enabled:=false;
end;
//************************************************** ****************************
// Вызывается при включении скрипта
//************************************************** ****************************
procedure Init;
begin
CharObjID:=0;
timerHP:=TTimer.Create(nil);
timerHP.OnTimer:=@OnTimerHP;
timerHP.enabled:=false;
timerHP.interval:=5000; //время отката лечения с помощью скила Greater Battle Heal
end;
//************************************************** ****************************
// Вызывается при выключении скрипта
//************************************************** ****************************
procedure Free;
begin
timerHP.Free;
end;
//************************************************** ****************************
// Вызывается при приходе каждого пакета, если скрипт включен
//************************************************** ****************************
begin
//************************************************** ****************************
//не обрабатываем пустые пакеты
if pck='' then exit;
//************************************************** ****************************
//UserInfo
if FromServer and (ConnectName=Name) and (pck[1]=#$04) then InitStats;
//************************************************** ****************************
//StatusUpdate
if FromServer and (ConnectName=Name) and (pck[1]=#$0E) and (CharObjID=ReadD(2)) then StatsUpdate;
end.

StKolya
14.10.2007, 17:44
NLObP, Спасибо большое,всё работает :good: ,только вот такая ещё просьба...
Когда идёт ловля рыбы я не могу юзать другие скилы,тойсть как сделать так чтобы когда моб появился и начал меня атаковать,прекращалась рыбалка ну и дальше я сам себя хилял,а когда моб исчезает уже то рыбалка продолжалась.

Я очень много всего перечитал на прошлом форуме и на этом,но снова могу допустить дето ошибку,так что буду благодарен если и тут мне поможешь. :wink: Я пока сам попробую чёта дописывать.

NLObP
14.10.2007, 18:54
NLObP, Спасибо большое,всё работает

Я у себя пробую этот скрипт, и мне приходиться себя в таргет брать для работы скила. Это так? (я гному сделеал скил)

только вот такая ещё просьба...
Когда идёт ловля рыбы я не могу юзать другие скилы,тойсть как сделать так чтобы когда моб появился и начал меня атаковать,прекращалась рыбалка ну и дальше я сам себя хилял,а когда моб исчезает уже то рыбалка продолжалась.
Издержки производства. :) Поэтому и был скрипт на питье хилок. Понадобиться переработать рыбалку и в нее внести лечение. Рыбалка прерывается использованием скила Fishin.

StKolya
15.10.2007, 01:35
Мде,как переработать рыбалку,фака,ааа...помоги :O:

Добавлено спустя 5 часов 24 минуты 42 секунды:
Я у себя пробую этот скрипт, и мне приходиться себя в таргет брать для работы скила. Это так? (я гному сделеал скил)

Да,для работы скила приходится держать на себе таргет,но скил нельзя использовать во время рыбалки,надо сначала чтобы когда вылазил моб,прекращалась рыбалка,но я тебя понял что для этого надо прописать ещё раз использование скила Fishin,но если не трудно подскажи этот код,бо у меня голова пока плохо варит в скриптах,но буду пробовать и сам что-то сделать.

Очередная благодарность за помощь :beer:

NLObP
15.10.2007, 01:56
По возможности я попробую поправить. Я сейчас скрипт на кач by Voron правлю под себя.

StKolya
15.10.2007, 08:50
млин :( ,ну лан,если что,отпиши,я пока сам пробовать буду...

P.S.Я вот щас по старому Форуму лажу,может чёт найду интересное =)

Добавлено спустя 5 часов 54 минуты 47 секунд:
я вот целую ночь изменял скриптец "BOT GNOM SPOILER by VORON",вроде бы удачно,лан,мне скоро на работу,прийду и выложу код,если есть ошибки,поправишь,плиз =)

15.10.2007, 09:50
народ а получается можно убрать анимацию скила? просто на олимпе проблема когда скил убрать сумона сробатывает и облако на 30 секунд появляется :) кто подскажет как его убрать или забить пакет от сервера о его появлении?

StKolya
16.10.2007, 04:06
Гость, На счёт убрать,вроде бы,не выйдет,почти на всех серверах уже пофиксили изменение пакетов...да и плюс ХЗ чё то облако появляется,не на олимпе оно же не появляется.
но я могу ошибаться,так как пакет от клиента к серверу на выполнения какогото действия отослать можно,и действие будет выполняться,но вот на появление облака поподробнее надо взглянуть в пакетхаке...тока чёта я не могу понять какой пакет идёт от клиента к серверу при использование скила Ансумон...был бы я щас дома,проверил бы,а так пока может кто-то другой сможет помочь раньше чем я =)





Скрипт для управления спойлером который находится во втором окне:

//BOT GNOM SPOILER by VORON
//ДЛЯ АДАПТАЦИИ: NICK- переправить в имя чара бота.
//PCK[24] заменить на PCK[xx] в зависимости от того сколько символов в нике персонажа
//который будет управлять ботом pck[24]- для имен состоящих из 6 символов.
//если ваш главный персонаж 5 символов в нике то будет pck[22], если 6 то pck[24]
//если 7 то pck[26], если 8 pck[28] и т.д.
//ДЛЯ РАБОТЫ СКРИПТА: БОТ- лидер пати, ГЛАВНЫЙ ПЕРС (командир) - на первом месте в пати после бота
//кнопки управления пишутся в ПАТИ ЧАТ
//ДЛЯ УПРАВЛЕНИЯ:
//цифра 1 в пати чат - означет бежать за командиром
//цифра 2 в пати чат - атакавать и спойлить врага по ассисту с коммандиром
//свип после смерти моба происходит- автоматически при условии что ТРУП- в таргете у командира
const
//лучше в начало скрипта выносить все константы для облегчения настройки и модификации
Name='HellSpoiler';
//Управляет SpellPower
var
IDPartyMember, IDAssistTarget, IDMy: String; //ИД командира и ИД его таргета
MyCoordX, MyCoordY, MyCoordZ :String; //координаты бота

procedure bRun;
begin
if (MyCoordX <> '') and (IDPartyMember <> '') then
begin
//выделяем командира, эмулируя щелчек мыши
buf:=hstr('04') + IDPartyMember + MyCoordX + MyCoordY + MyCoordZ + hstr('00');
SendToServerEX('Name');
//бежим за командиром эмулируя повторный щелчек мыши по таргету
buf:=hstr('04') + IDPartyMember + MyCoordX + MyCoordY + MyCoordZ + hstr('00');
SendToServerEX('Name');
end;
end;

procedure bSpoil;
begin
if (MyCoordX <> '') and (IDPartyMember <> '') then
//if (IDPartyMember <> '') then
begin
//берем в таргет вражину по ассисту
buf:=hstr('04') + IDAssistTarget + MyCoordX + MyCoordY + MyCoordZ + hstr('00');
SendToServerEX('Name');
//юзаем спойл
buf:=hstr('2F FE 00 00 00 00 00 00 00 00');
SendToServerEX('Name');
end;
end;

procedure bSweep;
begin
begin
//юзаем cвип (предполагая что в таргет брать ненужно, т.к. мы его спойлили и
//труп остался в таргете у бота)
buf:=hstr('2F 2A 00 00 00 00 00 00 00 00');
SendToServerEX('Name');
end;
end;
begin
//если от сервака принят пакет с ИД и Координатами членов пати то
if FromServer and (ConnectName='Name') and (pck[1]=#$a7) then
begin
//запоминаем ИД члена пати чье имя первое в списке пати (ИД командира)
IDPartyMember:=pck[22] + pck[23] + pck[32] + pck[25];
//Запоминаем собственный ИД (ИД бота)
IDMy:=pck[6] + pck[7] + pck[8] + pck[9];
end;

//если принят пакет со сменой таргета у командира то
if FromServer and (ConnectName='Name') and (pck[1]=#$29) then
if (pck[2]+pck[3]+pck[4]+pck[5]=IDPartyMember) then
begin
//запоминаем ИД таргета командира для ассиста
IDAssistTarget:= pck[6]+pck[7]+pck[8]+pck[9];
end;

//если принят пакет от клиента с моими кординатами то
if FromClient and (ConnectName='Name') and (pck[1]=#$48) then
begin
//запоминаем мои координаты
MyCoordX:= pck[6] + pck[7] + pck[8] + pck[9];
MyCoordY:= pck[10] + pck[11] + pck[12] + pck[13];
MyCoordZ:= pck[14] + pck[15] + pck[16] + pck[17];
end;

//далее идут управляющие команды

//если КОМАНДИР пишет в любой чат цифру "1" (код "#$31 #$00" в юникоде (в юникоде под 1 символ используются 2 байта) я так понял) то
if FromClient and (ConnectName='Name')and (pck[1]=#$38) then
if (pck[2]=#$31) and (pck[3]=#$00) then
begin
//убиваем этот пакет, чтоб сервер его не получил
pck:='';
//гном бежит за КОМАНДИРОМ
bRun;
//выйти из рабочей части скрипта чтобы другие услови не проверяли убитый пакет нулевой длинны
exit;
end;

//СПОЙЛИМ ПО АССИСТУ
//если принято сообщение
//если оно в написано в патичат
//если отправитель- командир
//если текст в нем- цифра "2"
//если скрипт уже перехватил координаты и все значения для переменных
if FromServer and (ConnectName='Name') and (pck[1]=#$4a) then
if (pck[6]=#$03) and (pck[2]+pck[3]+pck[4]+pck[5] = IDPartyMember) then
if (pck[32] = #$32) then
if (MyCoordX<>'') then
begin
pck:='';
bSpoil;
exit;
end;

//СВИПАЕМ АВТОМАТИЧЕСКИ
//если принят пакет DIE для моба (моб умер)
//если труп моба в таргете у командира
//если скрипт уже перехватил координаты и все значения для переменных
if FromServer and (ConnectName='Name') and (pck[1]=#$06) then
if (pck[2]+pck[3]+pck[4]+pck[5] = IDAssistTarget) then
if (MyCoordX<>'') then
begin
//юзаем cвип (предполагая что в таргет брать ненужно, т.к. мы его спойлили и
//труп остался в таргете у бота)
bSweep;
end;

end.

Вобщем могут быть ошибки,если что помогите =)

P.S. Исправлял я его потомучто перечитав скрипт VORON-a я заметил что пакеты не убиваются и доходят до сервера.Если я не прав - поправте меня(Критику уважаю и внимательно выслушываю,так как она заставляет меня работать над поставленой задачей)

Вот сейчас буду склеивать бафы ПП и ШЕ в один скрипт,гляним что выйдет.

Добавлено спустя 6 часов 43 минуты 49 секунд:
Гость, понял,вот пакет отвечающий за юзание скила Ансумон(тойсть это пакет который шлёт клиент серверу во время того как ты юзаешь скил Ансумон),опишу его строение

45=RequestActionUse:d(ActionID)d(CtrlPressed)d(Shi ftPressed)

Добавлено спустя 1 час 6 минут 10 секунд:
Кстате,протокол версион у меня Version: 656