L2PacketHackФорум программы L2PacketHack, всё что с ней связано находится тут.
Правила раздела!
Категорически запрещено:
* Просить пакеты/скрипты на шмот/адену/другие вещи;
* Просить (помочь) взломать/сломать сервак/аккаунт или раздеть/наказать кого-то на любом серваке;
* Просить научить работать с программой, если не понимаете элементарных вещей в отношениях клиент-сервер (так как, если вы их понимаете, то вопросов по основным возможностям программы быть недолжно);
* Все посты не удовлетворяющие этим запретам, а так же не относящиеся к теме будут удаляться при первой возможности.
* Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы.
* Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
* Данные запреты неподлежат обсуждению.
Хелп!
Прога отличная,за создание огромный респект.
Скрипты готовые юзаю + некоторые нахожу и тоже успешно юзаю,надеюсь не забанят =)
лан,суть проблемы:
Я вот скачал у вас скрипт для управление ШЕ,и так как играю в три окна(Некр,ШЕ и ПП),он мне очень пригодился,но может у вас найдётся и скриптец для ПП,я так сам покопался в скрипте,но нечё толкового не сделал,но я так понимаю что изменения по сравнению со скриптом для ШЕ будут не велики...
вот главная проблемка(для меня) :o
Цитата:
//by vimin
//Скрипт для SE, чтобы бегал, лечил и бафал по команде от командира.
напишите пожалуйста коды к основным бафам ПП для магов: Блез на МП,ХП;Акум;Берс;
Или подскажите пожалуйста как вычислить эти значения.
Как я делаю в таких случаях, может тебе пригодиться. Делаю окно ла2 на пол экрана, окно пакетхака во весь экран. Ла2 поверх пакетхака. Пакетхак на странице "просмотр", стоит галочка "прокручивать", "пакеты от клиента", пакеты от сервера", "запоминать пакеты", фильтрация пакетов отменена (показывать все пакеты). В "список соединений" имя чара, которым будем управлять. Суть в том, что все твои действия с чаром отображаются пакетами, входящими/исходящими и их видно в пакетхаке. Юзаешь к примеру магию и видишь появился пакет RequestMagicSkillUse, тычешь в него мышкой и видешь какие конкретно данные пошли. Расшифровку пакета брать в Packets.ini (идет в компелкте с пакетхаком). Таким способом можно узнать практически все данные по пакетам и к каким действиям они привязаны.
Юзнул 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, чтобы бегал, лечил и бафал по команде от командира.
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);
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:='';
Ты смотриш пакет от сервера, он сообщает клиенту какую анимацию проиграть и тд. при касте скила. Зачем это тебе? примерный формат его:
IdCast // ID того кто кастует
TargetIdCast // Id цели
IdSkill; //ID скила
SkillLvl //уровень скила
TimeCast //время каста
ReuseDelay //Задержка перед повторным использованием
Это начиная с 2го байта по 4 на каждый пораметр.
Делай как NLObP говорил, тебе нужен пакет запроса на использование скила, от клиента к серверу RequestMagicSkillUse.
Добавлено спустя 1 час 42 минуты:
ошибку насчёт Хила понял,исправил. 8)
Ещё такой вопросик:
У меня есть два скрипта 1) Помошник ШЕ (by vimin) 2) Помошник ПП (тот что я модифицировал)
Я понимаю что я могу два загружать сразу,но а можно это всё дело в один скрипт запихнуть?!
Если да,то хоть намёк дайте или помогите со всем кодом,бо я написал,но чёто не пашет %)
Добавлено спустя 4 часа 49 минут 14 секунд:
Кстати,юзаю скрипт для ловли и потрошения рыбы,всё гуд,проблема тока в Хиле,я делаю всё как написано,но когда на авторыбалке ловится моб,то хилки не идут,и ещё такой вопросик,можно ли поставить,когда вытягывается моб,вместо пития хилок(я отдельный скрипт попробую юзнуть на питие баанок ХП),автоюз самолечения,в моём случае,Greater Battle Heal,просто ловлю рыбку Бишем 62го лвл. =)
Ещё такой вопросик:
У меня есть два скрипта 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;
Добавлено спустя 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(CurHP));
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:
Добавлено спустя 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(CurHP)); //если раскоментировать то можно увидеть много
//полезного, например несоответствие реальным данным
//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(CurHP)); //если раскоментировать то можно увидеть много
//полезного, например несоответствие реальным данным
//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.
NLObP, Спасибо большое,всё работает :good: ,только вот такая ещё просьба...
Когда идёт ловля рыбы я не могу юзать другие скилы,тойсть как сделать так чтобы когда моб появился и начал меня атаковать,прекращалась рыбалка ну и дальше я сам себя хилял,а когда моб исчезает уже то рыбалка продолжалась.
Я очень много всего перечитал на прошлом форуме и на этом,но снова могу допустить дето ошибку,так что буду благодарен если и тут мне поможешь. :wink: Я пока сам попробую чёта дописывать.
Я у себя пробую этот скрипт, и мне приходиться себя в таргет брать для работы скила. Это так? (я гному сделеал скил)
Цитата:
только вот такая ещё просьба...
Когда идёт ловля рыбы я не могу юзать другие скилы,тойсть как сделать так чтобы когда моб появился и начал меня атаковать,прекращалась рыбалка ну и дальше я сам себя хилял,а когда моб исчезает уже то рыбалка продолжалась.
Издержки производства. :) Поэтому и был скрипт на питье хилок. Понадобиться переработать рыбалку и в нее внести лечение. Рыбалка прерывается использованием скила Fishin.