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

Пакеты Форум о форматах отдельных пакетов или групп пакетов

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 10.11.2008, 16:16   #1
Новичок
 
Аватар для Essential
 
Регистрация: 16.10.2008
Сообщений: 10
Сказал Спасибо: 7
Имеет 3 спасибок в 3 сообщенях
Essential пока неопределено
По умолчанию RequestBuyItem, RequestMultiSellChoose.

В общем я сломал глаза и пальцы и покоцал моск.
Может кто поможет.
Дело в следующем:
1F 00 00 00 00 01 00 00 00 0F 27 00 00 01 00 00 00 01 00 00 00
Цитата:
Tип: 0x1F (RequestBuyItem
Pазмер: 21+2

0002 d ListID: 0 (0x00000000)
0006 d BuyCount: 1 (0x00000001)
[Начало повторяющегося блока 1/1]
000A d ItemID: Unknown Items ID:9999(270F)
000E d Count: 1
[Конец повторяющегося блока 1/1]
Пакет на покупку итема с ИД = 9999
A7 9E 86 01 00 E0 93 04 00 01 00 00 00 00 00 00 00 00 00 00 00
Цитата:
Tип: 0xA7 (RequestMultiSellChoose
Pазмер: 21+2

0002 d ListID: 99998 (0x0001869E)
0006 d EntryID: 300000 (0x000493E0)
000A d Amount: 1 (0x00000001)
000E h ench: 0 (0x0000)
Пакет обмена этого же итема на 1ккк адены.
1E 00 00 00 00 01 00 00 00 94 53 09 10 0F 27 00 00 01 00 00 00
Цитата:
Tип: 0x1E (RequestSellItem
Pазмер: 21+2

0002 d ListID: 0 (0x00000000)
0006 d SellCount: 1 (0x00000001)
[Начало повторяющегося блока 1/1]
000A d ObjectID: 269046676
000E d ItemID: Unknown Items ID:9999(270F)
0012 d Count: 1
[Конец повторяющегося блока 1/1]
пакет на подажу этого итема в гм-шоп.
Затрудняюсь в составлеии пакета обмена 1ккк аден на этот итем.
Наведите хотябы на мыслю.

Последний раз редактировалось Essential, 10.11.2008 в 16:38.
Essential вне форума   Ответить с цитированием
Старый 10.11.2008, 16:55   #2
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Цитата:
Сообщение от Essential Посмотреть сообщение
Затрудняюсь в составлеии пакета обмена 1ккк аден на этот итем.
Наведите хотябы на мыслю
Посмотри как организован обмен предметов в рыбалке:

delphi Код:
//*************************************************************** // Вся торговля здесь!!! //*************************************************************** procedure OnTrade(Sender: TObject); begin   case trade of ...     //-------------------------------------------------     //обмениваем у фишермана на пруфы     //-------------------------------------------------     400: begin       if ReadyToMultiSell then exit; //если еще не обменяли предыдущую вещь, то выходим сразу       //мы у фишермана, обмениваем всё на пруфы       if FishermanOID=0 then begin         Trade1.enabled:=false; //останавливаем торговлю         msg.Lines.Add('Не готовы к торговле, нет OID фишермана! Требуется отбежать подальше и вернуться.');         exit; //выходим       end;       if TradeCount=TradeMultiItemCount then begin //проверка на выход из массива         Trade1.enabled:=false; //останавливаем торговлю         msg.Lines.Add('Всё обменяли!');         case MestoLovli of           1: begin cmd:='fishing'; MestoLovli1; end;           2: begin cmd:='fishing'; MestoLovli2; end;           3: begin cmd:='fishing'; MestoLovli3; end;         end;         msg.Lines.Add('Бежим на берег...');         TradeCount:=0;       end else begin         if (TradeMultiItem[TradeCount]<>FO) and (TradeMultiItem[TradeCount]<>GFO) then begin           if FindItem(TradeMultiItem[TradeCount])<>0 then begin             TargetAttacker(FishermanOID); //фишермана в таргет             msg.Lines.Add('Готовы обменять:'+inttostr(TradeMultiItem[TradeCount]));             ReadyToMultiSell:=true; //готовы обменивать           end else msg.Lines.Add('Нет такого предмета:'+inttostr(TradeMultiItem[TradeCount]));           Trd:=TradeCount;         end;         inc(TradeCount);         msg.Lines.Add('TradeCount/TradeMultiItemCount:'+inttostr(TradeCount)+'/'+inttostr(TradeMultiItemCount-1));       end;     end;   end; end; //...................................... ... //*************************************************************** // вызывается при приходе каждого пакета, если скрипт включен //*************************************************************** begin     //****************************************************************************     //не обрабатываем пустые пакеты     if pck='' then exit; ...     //****************************************************************************     //обмен состоит из следующих шагов:     //1. таргет  на продавце, пауза, снова таргет (c04=Action, c04=Action)     //2. приходит s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)     //3. шлем выбранный пункт из меню c21=RequestBypassToServer:s(Cmd)     //4. приходит sD0=MultiSellList:d(listId)d(page_beg)d(page_end)d(onpage)d(entrycount)d(EntryId)b(?)w(prodcount)w(itemcount<)w(pItemId)d(?)w(ptype2)d(pcount)w(penchant)w(iItemId)w(itype2)d(icount)w(ienchant)     //5. FindItem(ID) найдем OID, Count нужной вещи по ID     //6. шлем cA7=RequestMultiSellChoose:h(ListID)d(EntryID)d(Amount)     //****************************************************************************     if ReadyToMultiSell and (FishermanOID<>0) then begin       if (ConnectName=Name) and FromServer then begin         case pck[1] of           //после того как мы взяли в таргет продавца приходит этот пакет           //s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)           #$0F: begin             msg.Lines.Add('S>Пакет NpcHtmlMessage #$0F');             if ReadD(2)=FishermanOID then begin               //шлем запрос выбора пункта - продажа               //c21=RequestBypassToServer:s(Cmd)               delay(1000);               RequestByPassToServer(getmultisell);               msg.Lines.Add('C>Пакет RequestBypassToServer #$21 (multisell)');             end;           end;           //после выбора пункта - обмен, приходит этот пакет           //sD0=MultiSellList:d(listId)d(page_beg)d(page_end)d(onpage)d(entrycount)d(EntryId)b(?)w(prodcount)w(itemcount<)w(pItemId)d(?)w(ptype2)d(pcount)w(penchant)w(iItemId)w(itype2)d(icount)w(ienchant)           #$D0: begin             msg.Lines.Add('S>Пакет MultiSellList #$D0');             ListID:=ReadD(2); //запоминаем, он все время разный             msg.Lines.Add('ListID='+inttostr(ListID));             //шлем запрос на обмен             //cA7=RequestMultiSellChoose:h(ListID)d(EntryID)d(Amount)             msg.Lines.Add('C>Пакет RequestMultiSellChoose #$A7(ListId:'+IntToStr(ListId)+' EntryId:'+IntToStr(Trd*2+1)+' Count:'+IntToStr(ItemBase2[3,1])+')');             delay(1000);             //в java -> EntryId * k=100000             RequestMultiSellItem(ListId,Trd*2+1,ItemBase2[3,1]);             ReadyToMultiSell:=false;           end;         end;       end;     end; ... end.

Если в двух словах, то заранее определяешь из пакета sD0=MultiSellList - EntryId, оно постоянно для твоего предмета и каждый раз при обмене определяешь из этого же пакета sD0=MultiSellList - ListID.
Затем формируешь по полученным данным cA7=RequestMultiSellChoose:h(ListID)d(EntryID)d(Am ount) и отсылаешь на сервер.
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
За это сообщение NLObP нажился спасибкой от:
Старый 19.01.2009, 23:41   #3
Новичок
 
Аватар для 2Feky
 
Регистрация: 18.01.2009
Сообщений: 2
Сказал Спасибо: 1
Имеет 0 спасибок в 0 сообщенях
2Feky пока неопределено
По умолчанию

Цитата:
Сообщение от NLObP Посмотреть сообщение
Посмотри как организован обмен предметов в рыбалке:

delphi Код:
//*************************************************************** // Вся торговля здесь!!! //*************************************************************** procedure OnTrade(Sender: TObject); begin   case trade of ...     //-------------------------------------------------     //обмениваем у фишермана на пруфы     //-------------------------------------------------     400: begin       if ReadyToMultiSell then exit; //если еще не обменяли предыдущую вещь, то выходим сразу       //мы у фишермана, обмениваем всё на пруфы       if FishermanOID=0 then begin         Trade1.enabled:=false; //останавливаем торговлю         msg.Lines.Add('Не готовы к торговле, нет OID фишермана! Требуется отбежать подальше и вернуться.');         exit; //выходим       end;       if TradeCount=TradeMultiItemCount then begin //проверка на выход из массива         Trade1.enabled:=false; //останавливаем торговлю         msg.Lines.Add('Всё обменяли!');         case MestoLovli of           1: begin cmd:='fishing'; MestoLovli1; end;           2: begin cmd:='fishing'; MestoLovli2; end;           3: begin cmd:='fishing'; MestoLovli3; end;         end;         msg.Lines.Add('Бежим на берег...');         TradeCount:=0;       end else begin         if (TradeMultiItem[TradeCount]<>FO) and (TradeMultiItem[TradeCount]<>GFO) then begin           if FindItem(TradeMultiItem[TradeCount])<>0 then begin             TargetAttacker(FishermanOID); //фишермана в таргет             msg.Lines.Add('Готовы обменять:'+inttostr(TradeMultiItem[TradeCount]));             ReadyToMultiSell:=true; //готовы обменивать           end else msg.Lines.Add('Нет такого предмета:'+inttostr(TradeMultiItem[TradeCount]));           Trd:=TradeCount;         end;         inc(TradeCount);         msg.Lines.Add('TradeCount/TradeMultiItemCount:'+inttostr(TradeCount)+'/'+inttostr(TradeMultiItemCount-1));       end;     end;   end; end; //...................................... ... //*************************************************************** // вызывается при приходе каждого пакета, если скрипт включен //*************************************************************** begin     //****************************************************************************     //не обрабатываем пустые пакеты     if pck='' then exit; ...     //****************************************************************************     //обмен состоит из следующих шагов:     //1. таргет  на продавце, пауза, снова таргет (c04=Action, c04=Action)     //2. приходит s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)     //3. шлем выбранный пункт из меню c21=RequestBypassToServer:s(Cmd)     //4. приходит sD0=MultiSellList:d(listId)d(page_beg)d(page_end)d(onpage)d(entrycount)d(EntryId)b(?)w(prodcount)w(itemcount<)w(pItemId)d(?)w(ptype2)d(pcount)w(penchant)w(iItemId)w(itype2)d(icount)w(ienchant)     //5. FindItem(ID) найдем OID, Count нужной вещи по ID     //6. шлем cA7=RequestMultiSellChoose:h(ListID)d(EntryID)d(Amount)     //****************************************************************************     if ReadyToMultiSell and (FishermanOID<>0) then begin       if (ConnectName=Name) and FromServer then begin         case pck[1] of           //после того как мы взяли в таргет продавца приходит этот пакет           //s0F=NpcHtmlMessage:d(MessageID)s(HTML)d(d)           #$0F: begin             msg.Lines.Add('S>Пакет NpcHtmlMessage #$0F');             if ReadD(2)=FishermanOID then begin               //шлем запрос выбора пункта - продажа               //c21=RequestBypassToServer:s(Cmd)               delay(1000);               RequestByPassToServer(getmultisell);               msg.Lines.Add('C>Пакет RequestBypassToServer #$21 (multisell)');             end;           end;           //после выбора пункта - обмен, приходит этот пакет           //sD0=MultiSellList:d(listId)d(page_beg)d(page_end)d(onpage)d(entrycount)d(EntryId)b(?)w(prodcount)w(itemcount<)w(pItemId)d(?)w(ptype2)d(pcount)w(penchant)w(iItemId)w(itype2)d(icount)w(ienchant)           #$D0: begin             msg.Lines.Add('S>Пакет MultiSellList #$D0');             ListID:=ReadD(2); //запоминаем, он все время разный             msg.Lines.Add('ListID='+inttostr(ListID));             //шлем запрос на обмен             //cA7=RequestMultiSellChoose:h(ListID)d(EntryID)d(Amount)             msg.Lines.Add('C>Пакет RequestMultiSellChoose #$A7(ListId:'+IntToStr(ListId)+' EntryId:'+IntToStr(Trd*2+1)+' Count:'+IntToStr(ItemBase2[3,1])+')');             delay(1000);             //в java -> EntryId * k=100000             RequestMultiSellItem(ListId,Trd*2+1,ItemBase2[3,1]);             ReadyToMultiSell:=false;           end;         end;       end;     end; ... end.

Если в двух словах, то заранее определяешь из пакета sD0=MultiSellList - EntryId, оно постоянно для твоего предмета и каждый раз при обмене определяешь из этого же пакета sD0=MultiSellList - ListID.
Затем формируешь по полученным данным cA7=RequestMultiSellChoose:h(ListID)d(EntryID)d(Am ount) и отсылаешь на сервер.



ЕТ оможет быть причиной того что.
Кна сервре покупаю вещь. копирую ето пакет( с покупокой ето й вещи, в отсылку пакета серверу) и рпинажатии "отослать". открываеться оконо с нпк. но итем сам не покупаеться, Потому что... Каждый новый пакет приходящий от сервера про покупку какого ибо итема имеет измененный Id итема по какомуто Закону. Играю на Хб
2Feky вне форума   Ответить с цитированием
Старый 10.11.2008, 17:34   #4
Новичок
 
Аватар для Essential
 
Регистрация: 16.10.2008
Сообщений: 10
Сказал Спасибо: 7
Имеет 3 спасибок в 3 сообщенях
Essential пока неопределено
По умолчанию

Получился вот такой вот пакетыч
A7 9E 86 01 00 A0 86 01 00 01 00 00 00
Впринцыпе что то, на что то меняется, вот только в сист. чате пишет - неправильное кол-во предметов =(
Essential вне форума   Ответить с цитированием
Старый 11.11.2008, 11:21   #5
Рыцарь
 
Аватар для NLObP
 
Регистрация: 25.02.2008
Адрес: г.Волгоград
Сообщений: 2,009
Сказал Спасибо: 1,285
Имеет 1,458 спасибок в 793 сообщенях
NLObP пока неопределено
По умолчанию

Цитата:
Сообщение от Essential Посмотреть сообщение
Получился вот такой вот пакетыч
A7 9E 86 01 00 A0 86 01 00 01 00 00 00
Впринцыпе что то, на что то меняется, вот только в сист. чате пишет - неправильное кол-во предметов =(
Для того, чтобы пробовать сделать пакет, для контроля сделай все действия в клиенте (можно несколько раз) и смотри какие пакеты и как формируются. Конкретно можешь уточнить длину пакета A7 (вроде 4 байт в конце не хватает) и можешь узнать EntryID конкретных, интересных тебе, предметов в Гмшопе. Не забывай, ListID при каждом запросе магазина, разный.
__________________
| Для самых ленивый | Телепаты в отпуске |Мы работаем над этим |
Не умеешь - учись, не хочешь учиться - плати © Суровый Закон Жизни


NLObP вне форума   Ответить с цитированием
Старый 11.11.2008, 12:58   #6
Новичок
 
Регистрация: 15.09.2008
Сообщений: 10
Сказал Спасибо: 1
Имеет 1 спасибку в 1 сообщении
AdDa пока неопределено
По умолчанию

Почему это ListID разный? ListId для мультиселлов один и тот же (работал как я явой, так и с русс оффом). Имеется в виду, что ListID не меняется, если работать с одним и тем же мультиселлом
A7 ListID EntryID Count
Причём EntryID включает номер вещи по порядку в multisell листе + четыре нуля + и в конце дописывается заточка вещи.
После Count ещё один dword параметр равный 0 не обязателен

З.Ы. ListID разный тока для BuyList'ов. причём в L2phx ошибка в формате пакета BuyList (для русс оффа так точно, т.е. парт2 грация)
07=BuyList:...h(ItemType2)h(0)
Должен быть d

Последний раз редактировалось AdDa, 11.11.2008 в 13:32.
AdDa вне форума   Ответить с цитированием
За это сообщение AdDa нажился спасибкой от:
Старый 11.11.2008, 16:51   #7
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Цитата:
Сообщение от AdDa Посмотреть сообщение
причём в L2phx ошибка в формате пакета BuyList (для русс оффа так точно, т.е. парт2 грация)
07=BuyList:...h(ItemType2)h(0)
Должен быть d
в пакетхаке h это d в шестнадцатиричном виде, покрайней мере так я писал и вроде этого никто не менял потом...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 11.11.2008, 17:39   #8
Новичок
 
Регистрация: 15.09.2008
Сообщений: 10
Сказал Спасибо: 1
Имеет 1 спасибку в 1 сообщении
AdDa пока неопределено
По умолчанию

Ну если h - это 4-ре байта, то всё гуд
Просто... l2phx выкидывает ошибку на русс офф, когда пытаемся просмотреть пакет BuyList. Обработка идёт в цикле (от кол-ва итемов в листе) и как я понимаю происходит выход за цикл.
з.ы. можно ещё и multisell листов нормальную обрабатку сделать. Вот пример с русс оффа(часть скрипта):

delphi Код:
if pck[1] = #$D0 then begin      fle := TStringList.Create;      fle.add('<?xml version=''1.0'' encoding=''utf-8''?>');      fle.add('<list>');      Position := 2;      MultisellListID := ReadD(Position);      Fake := ReadD(Position);      Fake := ReadD(Position);      Fake := ReadD(Position);      MultisellSize := ReadD(Position);      i := 0;      while (i < MultisellSize) do      begin           fle.add('<item>');           EntryID := ReadD(Position);           Fake := ReadC(Position);           Fake := ReadH(Position);           Fake := ReadD(Position);           Fake := ReadD(Position);           Fake := ReadD(Position);           Fake := ReadD(Position);           Fake := ReadD(Position);           Fake := ReadD(Position);           Fake := ReadD(Position);           Fake := ReadD(Position);           Fake := ReadD(Position);           Fake := ReadD(Position);           ProductionSize := ReadH(Position);           IngredientSize := ReadH(Position);           ProdID := 0;           while (ProdID < ProductionSize) do           begin                ItemID := ReadD(Position);                Fake := ReadD(Position);                Fake := ReadH(Position);                Count := ReadD(Position);                Fake := ReadH(Position);                Fake := ReadD(Position);                Fake := ReadD(Position);                Fake := ReadD(Position);                Fake := ReadD(Position);                Fake := ReadD(Position);                Fake := ReadD(Position);                Fake := ReadD(Position);                Fake := ReadD(Position);                Fake := ReadD(Position);                Fake := ReadD(Position);                fle.add('<production id="'+IntToStr(ItemID)+'" count="'+IntToStr(Count)+'"/>');                Inc(ProdID);           end;           IngrID := 0;           while (IngrID < IngredientSize) do           begin                ItemID := ReadD(Position);                Fake := ReadH(Position);                Count := ReadD(Position);                Fake := ReadH(Position);                Fake := ReadD(Position);                Fake := ReadD(Position);                Fake := ReadD(Position);                Fake := ReadD(Position);                Fake := ReadD(Position);                Fake := ReadD(Position);                Fake := ReadD(Position);                Fake := ReadD(Position);                Fake := ReadD(Position);                Fake := ReadD(Position);                fle.add('<ingredient id="'+IntToStr(ItemID)+'" count="'+IntToStr(Count)+'"/>');                Inc(IngrID);           end;           fle.add('</item>');           Inc(i);      end;      fle.add('</list>');      fle.SaveToFile('MultiSell/'+IntToStr(MultisellListID)+'.xml');      fle.Free; end;

Добавлено через 7 минут
А если были бы желающие - я не прочь сделать чё-нить вроде l2wh.com + hIngame.
Собирать базу русс оффа (дропа, координат мобов, buy и multisell листов ну и прочую хрень). А-ля hInGame, чтобы игроки могли иметь хоть какую-то пользу, а остальным - аналог l2wh.com (сбор данных).

Последний раз редактировалось AdDa, 11.11.2008 в 17:39. Причина: Добавлено сообщение
AdDa вне форума   Ответить с цитированием
Старый 11.11.2008, 21:08   #9
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

AdDa, думаю для сбора БД на руофф лучше написать минибота (может и в режиме ИГ) чем скрипт для пакетхака + можно ещё сделать список вывесок трейдов в крупных городах и может ещё какуюнить статистику
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 11.11.2008, 22:03   #10
Новичок
 
Регистрация: 15.09.2008
Сообщений: 10
Сказал Спасибо: 1
Имеет 1 спасибку в 1 сообщении
AdDa пока неопределено
По умолчанию

Если бот - то в режиме иг.
Чем лучше l2phx, чем Бот. Кол-во людей шаряших в написании скриптов больше гораздо, чем тех, кто может написать бота и для этого нужны знания только протола ла2. Если продумать архитектуру + переделать l2phx под неё, то принять участие могут многие.
AdDa вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Lineage II > L2PacketHack > Пакеты



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

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


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

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

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