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

L2PacketHack Форум программы L2PacketHack, всё что с ней связано находится тут.
Правила раздела! Обсуждение багов Lineage ЗАПРЕЩЕНО!

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 12.04.2009, 14:30   #1
Новичок
 
Регистрация: 09.03.2009
Сообщений: 2
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
T][P пока неопределено
По умолчанию

Прошу помочь разобраться, пишу скрипт (бота) он должен при первом сообщении в пм (в примере это 2356 ), сохранять ид отправителя и реагировать на команды в пм тока с этим ид.
Вот рабочий пример :
Код:
if FromServer and  (ConnectName=name)
  and (pck[1]=#$4A) and (pck[18]=#$37) and (pck[19]=#$04) and (pck[20]=#$34) and  (pck[21]=#$04) and (pck[22]=#$61) and (pck[23]=#$00) and (pck[24]=#$70) and (pck[25]=#$00) and (pck[26]=#$6F) and (pck[27]=#$00) and (pck[28]=#$32) and (pck[29]=#$04) and (pck[30]=#$00) and (pck[31]=#$00) then
   begin
idi1:=pck[2];
idi2:=pck[3];
idi3:=pck[4];
idi4:=pck[5];
end;
if FromServer and  (ConnectName=name)
  and (pck[1]=#$4A) and (pck[18]=#$31) and (pck[19]=#$00) and (pck[20]=#$00) and (pck[21]=#$00) and (pck[2]=idi1) and (pck[3]=idi2) and (pck[4]=idi3) and (pck[5]=idi4)  then
   begin
buf:=Hstr('46');
SendTOServerEx(name);
end;
Всё работало нормально для ника jeklin748 а для других не работало а дело в том что длина пакета 4А(входящего пм) зависит от ника точней его длины и букв написавшего его, как заделать так чтобы присваивание значений шло с конца пакета ? А ещё если допустим ник присвоить name:=Reads(10) как заделать так чтобы следующее присваивание было после Reads(10) то есть присваивало следующий байт.
Прошу помочь разобраться если вопрос не понять то что непонятно?

Последний раз редактировалось T][P, 13.04.2009 в 00:22.
T][P вне форума   Ответить с цитированием
Старый 13.04.2009, 14:59   #2
Местный
 
Аватар для PanAm
 
Регистрация: 18.01.2008
Сообщений: 286
Сказал Спасибо: 24
Имеет 133 спасибок в 80 сообщенях
PanAm
По умолчанию

T][P,
delphi Код:
Const   BotName = 'Имя бота';   Password = '2356'; var   MasterID : integer;   //ID хозяина   MasterName : string//Гик хохяина   Command :string;      //Команда   i : integer;   Name : string; begin   if FromServer and  (ConnectName=BotName) and (pck[1]=#$4A) then begin     i :=10//Устанавливаем смещение до ника     Name :=ReadS(i); //Сохраняем ник     Command :=ReadS(i);   //Считываем текст     if Command=Password then begin  //если это пароль       MasterID :=ReadD(2)//Сохраняем ID написавшего       MasterName := Name;   //и его ник     end;   end; end.

Добавлено через 3 минуты
Цитата:
Сообщение от T][P Посмотреть сообщение
А ещё если допустим ник присвоить name:=Reads(10) как заделать так чтобы следующее присваивание было после Reads(10) то есть присваивало следующий байт.
как в примере - надо использовать переменную, функция ReadS увеличит ее на длину строки
delphi Код:
i :=10;      Name :=ReadS(i);     Command :=ReadS(i);

Добавлено через 18 минут
T][P,
buf:=Hstr('46'); лучше buf:=#$46;
не знаю как это будет работать, но иожно попробывать сразу слать и клиенту 7E=LogOutOk:

Последний раз редактировалось PanAm, 13.04.2009 в 14:59. Причина: Добавлено сообщение
PanAm вне форума   Ответить с цитированием
За это сообщение PanAm нажился 2 спасибками от:
Старый 13.04.2009, 20:30   #3
Новичок
 
Регистрация: 09.03.2009
Сообщений: 2
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
T][P пока неопределено
По умолчанию

PanAm спс впринципи всё понял.
Цитата:
buf:=Hstr('46'); лучше buf:=#$46;
не знаю как это будет работать, но иожно попробывать сразу слать и клиенту 7E=LogOutOk:
Пакет 46 выкидывает в меню выбора чара. Попробую использовать 7Е.
Да хотел ещё спросить какой процедурой или функцией можно пакетник от клиента отсоединить, не теряя подключения? Где-то видел, но не магу вспомнить где.
T][P вне форума   Ответить с цитированием
Старый 16.04.2009, 11:04   #4
Пользователь
 
Регистрация: 11.04.2009
Адрес: lameriy
Сообщений: 34
Сказал Спасибо: 9
Имеет 1 спасибку в 1 сообщении
lamer пока неопределено
По умолчанию

Код:
{БОТ - Воин помошник от Alexus
версия: 0.3 (бета)
дата: 08.04.08

Описание:
Универсальный скрипт для война - помошника в каче.
Помошник бегает за вами куда бы вы не пошли и атакует ваши цели по ассисту,
как только вы сами начнете атаку (двойным кликом мыши по цели).
Либо может быть вагончиком в паровозе ботов и бегать за Локомотивом

Возможности:
1. Может бегать и за живим игроком и за ботом - локомотивом (от Alexus)
1. Бегает за Вами, не отлипает.
2. Помогает бить врагов.
3. Умеет лечиться (тип банки легко настраивается).
4. Скрипту неважно, находятся ли персы в пати или нет.
5. Работает на С4 и С6 серверах.

Инструкция:
1. Запускаем ПакетХак.
2. Если используем совместно с ботом - Локомотивом (от Alexus), то в "Списке скриптов" ставим этот скрипт ниже локомотива.
2. Запускаем оба клиента игры.
3. Задаем (ниже) реальные имена командира и помошника.
4. Внимательно настраиваем остальные константы в Секции настройки.
5. Запускаем скрипт.
}
//######################## Секция настройки ######################################################
const
 interlude = true;   // C6 - true,  C4 - false;
 CommanderName = 'x';           // Ник командира
 AssistantName = 'x';           // Ник помошника
 CommanderBot = true;             // Командир - это "бот - Локомотив", или человек?
 HPMedium = 70;                   // % с которого начинаем лечиться банками
 HPBottleID = 1061;               //  ItemID 1060=Lesser Healing Potion;    1061=Healing Potion;   1539=Greater Healing Potion;
 DrinkDelay = 14;                 // минимальное время задержки повторного питься бутылки (10 - 20 сек)
 InvRazmer = 79;                  // Размер инвенторя у ассистента -1 (если инвентарь 80, то писать надо 79, если 100, то писать 99)
//#################################################################################################

var
 CommanderX, CommanderY, CommanderZ : integer;            // Мои статы
 CommanderID, CommanderHP, CommanderMaxHP: integer;

 AssistX, AssistY, AssistZ : integer;                     // Статы помошника
 AssistID, AssistHP, AssistMaxHP: integer;
 AssistMP, AssistMaxMP : integer;
 AssistHPlevelProcent : integer;

 TargetID : integer;
 time1: integer;
 Inventory: array[0..InvRazmer, 0..9] of integer;  // инвентарь (itemType1, ObjectID, ItemID, count, itemType2, CustType1, isEquipped, BodyPart, EnchantLevel, CustType2)
 HPBottleObjID: integer;                           // ObjectID бутыли
 HpBottleCount: integer;                           // количество бутылей

procedure Init; //Вызывается при включении скрипта
 begin
  CommanderID:= 0;        // обнуляем ВСЕ данные
  CommanderX:= 0;
  CommanderY:= 0;
  CommanderZ:= 0;
  CommanderID:= 0;
  CommanderHP:= 0;
  CommanderMaxHP:= 0;
//  MyMP:= 0;
//  MyMaxMP:= 0;
  AssistID:= 0;
  AssistX:= 0;
  AssistY:= 0;
  AssistZ:= 0;
  AssistID:= 0;
  AssistHP:= 0;
  AssistMaxHP:= 0;
  AssistMP:= 0;
  AssistMaxMP:= 0;
  TargetID:=0;
  time1:=1;
  buf:= #$14;                            //запрашиваем пакеты с инвентарем и userinfo
  SendToServerEx(AssistantName);
  SendToServerEx(CommanderName);
 end;

function Wait(var tick: integer;Timewait: Integer): Boolean; // сквозная проверка без остановки скрипта (c)dmitry501, modifed by Sh00rGo
 var
  t: integer;
 begin
  result:=false;
  t:=Round(Time*86400);
  if t>(tick+Timewait) then begin
    if tick>0 then result:=true;
    tick:=t;
  end;
 end;

//############################## Модуль работы с Инвентарем ###########################
procedure InventoryCreate;
var
  i,k, offset : integer;
begin
  if interlude then offset:= 8 else offset:=0;
  for i:=0 to InvRazmer do
    if (i<ReadH(4)) then begin
      Inventory[i,0]:=ReadH(i*(28+offset)+6);  // itemType1
      Inventory[i,1]:=ReadD(i*(28+offset)+8);  // ObjectId
      Inventory[i,2]:=ReadD(i*(28+offset)+12); // ItemID
      Inventory[i,3]:=ReadD(i*(28+offset)+16); // count
      Inventory[i,4]:=ReadH(i*(28+offset)+20); // itemType2
      Inventory[i,5]:=ReadH(i*(28+offset)+22); // CustType1
      Inventory[i,6]:=ReadH(i*(28+offset)+24); // isEquipped
      Inventory[i,7]:=ReadD(i*(28+offset)+26); // BodyPart
      Inventory[i,8]:=ReadH(i*(28+offset)+30); // EnchantLevel
      Inventory[i,9]:=ReadH(i*(28+offset)+32); // CustType2
    end else
      for k:=0 to 9 do Inventory[i,k]:=0; // забиваем нулями
end;

function GetInv(obj,up,down:integer): integer; // up и down не проверяются
   var // 0-itemType1, 1-ObjectId, 2-ItemID, 3-count, 4-itemType2, 5-CustType1, 6-isEquipped, 7-BodyPart, 8-EnchantLevel, 9-CustType2
    i: integer;
 begin
  for i:=0 to InvRazmer do if (Inventory[i,up]=obj) then
   begin
    Result:=Inventory[i,down];
    exit;
   end;
  Result:=-1;
end;

procedure UseItemObjID(ItemObjID:integer);       //Использовать предмет с заданным ItemID
 begin
  buf:=#$19;
  WriteD(ItemObjID);
  WriteD(0);
  SendToServerEx(AssistantName);;
 end;
//############################################################################################

procedure AssistUserInfo;                  // обновление данных о ассистенте
 var
  i:word;
 begin
  AssistID:=ReadD(18);
  AssistX:=ReadD(2);
  AssistY:=ReadD(6);
  AssistZ:=ReadD(10);
  i:=22;
  ReadS(i);
  if interlude then i:=i+48 else i:=i+44;
  AssistMaxHP:=ReadD(i);
  AssistHP:=ReadD(i);
  AssistMaxMP:=ReadD(i);        // чисто информативно
  AssistMP:=ReadD(i);
//  i:=i+363;               пока не используется
//  MyMaxCP:=ReadD(i);
//  MyCP:=ReadD(i);
 end;

procedure AssistStatusUpdate;       // обновление данных о ассистенте
 var
  i:integer;
 begin
  for i:=0 to ReadD(6)-1 do
   case pck[i*8+10] of
    #$00: AssistHP:=ReadD(i*8+14);
    #$01: AssistMaxHP:=ReadD(i*8+14);
    #$0C: AssistMP:=ReadD(i*8+14);
    #$0D: AssistMaxMP:=ReadD(i*8+14);
//    #$23: MyCP:=ReadD(i*8+14);          пока не используется
//    #$24: MyMaxCP:=ReadD(i*8+14);
   end;
  if AssistMaxHP > 0 then AssistHPlevelProcent:= Round((AssistMaxHP/100)*HPMedium);
 end;

procedure CommanderUserInfo;             //   обновление данных о себе
 var
  i:word;
 begin
  CommanderID:=ReadD(18);
  CommanderX:=ReadD(2);
  CommanderY:=ReadD(6);
  CommanderZ:=ReadD(10);
  i:=22;
  ReadS(i);
  if interlude then i:=i+48 else i:=i+44;
  CommanderMaxHP:=ReadD(i);
  CommanderHP:=ReadD(i);
 end;

procedure Action;          // команда действия
 begin
  buf:=#$1F;                //action
  WriteD(TargetID);
  WriteD(AssistX);
  WriteD(AssistY);
  WriteD(AssistZ);
  WriteC(0);
  SendToServerEx(AssistantName);
 end;

procedure DrinkBottle;          // пьем бутылки и следим за их количеством
 begin
  if HPBottleCount > 0 then
   begin
    UseItemObjID(HPBottleObjID);
    dec (HPBottleCount);
   end;
 end;

begin                   // Далее обработка входящих пакетов
 if pck = '' then exit;

 if (ConnectName = CommanderName) and FromServer then
  case pck[1] of
   #$31: if ReadS(22) = CommanderName then CommanderUserInfo;
  end;

 if (ConnectName = AssistantName) and FromServer then
  case pck[1] of
   #$31: if ReadS(22) = AssistantName then AssistUserInfo;
   #$18: if AssistID=ReadD(2) then     //   StatusUpdate:h(ObjectID)d(Attributes)
           begin
            AssistStatusUpdate;
            if (AssistHP > 0) and (AssistHP < AssistHPlevelProcent) then if Wait(time1, DrinkDelay) then DrinkBottle;     // пьем бутылки с интервалом в 19 сек
            if (AssistHP > 0) and (AssistHP > AssistHPlevelProcent) then time1:=1;
           end;
   #$11: begin
          InventoryCreate;  // Инвентарь
          HPBottleObjID:= getinv(HPBottleID, 2,1);
          HPBottleCount:= getinv(HPBottleID, 2,3);
         end;
   //#$21: InventoryUpdate;
  end;

 if (ConnectName = AssistantName) and FromServer and CommanderBot then
  case pck[1] of
   #$2F: if CommanderID = ReadD(2) then
         begin
          TargetID:= CommanderID;
          Action; Action;
         end;
   #$33, #$72 : if CommanderID = ReadD(2) then            //Attack:d(AttackerID)d(TargetID)d(Damage)b(Flags)d(X)d(Y)d(Z)h(Hits)
          begin
           TargetID:= ReadD(6);
           Action; Action;
          end;
  end;

 if (ConnectName = CommanderName) and FromClient and (not CommanderBot) then
  case pck[1] of
   #$2F: begin
          TargetID:= CommanderID;
          Action; Action;
         end;
   #$31: begin
          TargetID:= ReadD(2);            //  Action:h(ObjectID)d(OriginX)d(OriginY)d(OriginZ)b(ActionID)
          Action;
         end;
  end;

end.__________________
уже пробовал править ИД пакетов, но чтото не очень получилось.
PanAm,если этот милый человек вновь мне поможет, то буду рад выложить отредоктированный под ХБ скриптик.
Загвозда как всегда, по всему скрипту искал пакеты эти, а в одном месте даже не понял что это за пакет. Отсутствие знания паскаля даёт свои отпечатки.

Добавлено через 2 минуты
Код:
procedure UseItemObjID(ItemObjID:integer);       //Использовать предмет с заданным ItemID
 begin
  buf:=#$14;
вот что это за пакетик???

Последний раз редактировалось lamer, 16.04.2009 в 21:52. Причина: Добавлено сообщение
lamer вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Lineage II > L2PacketHack



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

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


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

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

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