PDA

Просмотр полной версии : RequestBuyItem, RequestMultiSellChoose.


Essential
10.11.2008, 16:16
В общем я сломал глаза и пальцы и покоцал моск.
Может кто поможет.
Дело в следующем:
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ккк аден на этот итем.
Наведите хотябы на мыслю.

NLObP
10.11.2008, 16:55
Затрудняюсь в составлеии пакета обмена 1ккк аден на этот итем.
Наведите хотябы на мыслю

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


//************************************************** *************
// Вся торговля здесь!!!
//************************************************** *************
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(i temcount<)w(pItemId)d(?)w(ptype2)d(pcount)w(penchant)w(iIte mId)w(itype2)d(icount)w(ienchant)
//5. FindItem(ID) найдем OID, Count нужной вещи по ID
//6. шлем cA7=RequestMultiSellChoose:h(ListID)d(EntryID)d(Am ount)
//************************************************** **************************
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(i temcount<)w(pItemId)d(?)w(ptype2)d(pcount)w(penchant)w(iIte mId)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(Am ount)
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) и отсылаешь на сервер.

Essential
10.11.2008, 17:34
Получился вот такой вот пакетыч
A7 9E 86 01 00 A0 86 01 00 01 00 00 00
Впринцыпе что то, на что то меняется, вот только в сист. чате пишет - неправильное кол-во предметов =(

NLObP
11.11.2008, 11:21
Получился вот такой вот пакетыч
A7 9E 86 01 00 A0 86 01 00 01 00 00 00
Впринцыпе что то, на что то меняется, вот только в сист. чате пишет - неправильное кол-во предметов =(

Для того, чтобы пробовать сделать пакет, для контроля сделай все действия в клиенте (можно несколько раз) и смотри какие пакеты и как формируются. Конкретно можешь уточнить длину пакета A7 (вроде 4 байт в конце не хватает) и можешь узнать EntryID конкретных, интересных тебе, предметов в Гмшопе. Не забывай, ListID при каждом запросе магазина, разный.

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

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

xkor
11.11.2008, 16:51
причём в L2phx ошибка в формате пакета BuyList (для русс оффа так точно, т.е. парт2 грация)
07=BuyList:...h(ItemType2)h(0)
Должен быть dв пакетхаке h это d в шестнадцатиричном виде, покрайней мере так я писал и вроде этого никто не менял потом...

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

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 (сбор данных).

xkor
11.11.2008, 21:08
AdDa, думаю для сбора БД на руофф лучше написать минибота (может и в режиме ИГ) чем скрипт для пакетхака + можно ещё сделать список вывесок трейдов в крупных городах и может ещё какуюнить статистику

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

dmitry501
12.11.2008, 05:59
Идея про l2wh мне нравится. Нужен хостинг, способный выдержать большую нагрузку.
Если даже тысяча человек в одно время будет отсылать данные - это неслабая нагрузка.
Хотя можно сделать локальный буфер и отсылать за один сеанс обмена с сервером например данные за сутки игры.
Реально нужно отсылать данные о спойле/дропе с мобов и их расположение.
ListID и пр. нужно получить один раз и вовсе не нужно забивать трафик неменяющимися данными.

Grinch
12.11.2008, 09:58
а разве бд руофф свой не будет делать? вроде разговор был об этом

Essential
12.11.2008, 16:55
а разве бд руофф свой не будет делать? вроде разговор был об этом
Такой разговор тоже слышал, но маловероятно, они скорее у вас купят то что вы насобираете. Они же ленивые.
З.ы. топик можно закрыть, с вопросом разобрался, спасибки тыкнул - кто помог.
Далле следует лиш оффтоп =\

Grinch
12.11.2008, 17:01
Essential, если они перевели игру, что удивило хотя хз на любителя думаю они и базу сделают

Essential
13.11.2008, 18:04
Grinch, ну впринципе может быть и сделают, я так то не против, но мне кажется у них помимо базы щас куча головняков.
Перевод действительно на любителя, особенно за некоторые профы обидно ^_^.
P.s. Кто нибудь слыхал чего нового про "фрост"?

CauKo
04.12.2008, 20:43
немного не понял. В этом посте пытались купленныю вещь в гм шопе продать там же за 1ккк?

CauKo
19.01.2009, 21:48
Прошёл месяц..... никто не смог ответить...

2Feky
19.01.2009, 23:41
Посмотри как организован обмен предметов в рыбалке:


//************************************************** *************
// Вся торговля здесь!!!
//************************************************** *************
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(i temcount<)w(pItemId)d(?)w(ptype2)d(pcount)w(penchant)w(iIte mId)w(itype2)d(icount)w(ienchant)
//5. FindItem(ID) найдем OID, Count нужной вещи по ID
//6. шлем cA7=RequestMultiSellChoose:h(ListID)d(EntryID)d(Am ount)
//************************************************** **************************
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(i temcount<)w(pItemId)d(?)w(ptype2)d(pcount)w(penchant)w(iIte mId)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(Am ount)
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 итема по какомуто Закону. Играю на Хб

b9ka
29.01.2009, 06:14
Ребята , извеняюсь за флуд , сегодян нашел прогу , у меян нет эфекта никакого просто RequestBuyItem когда отсылаю этот покет , поулчивший его с сервера , тоесть он даже тот же самы итемид не покупает сам ! и не подскажете ?

Grinch
29.01.2009, 08:02
b9ka, форум почитай 100500 раз писалось. И имхо самому незя догадаться сравнив 2 и более пакетов на покупку?

b9ka
29.01.2009, 14:55
Вот как всегда , ребята почему вы так относитись к людям котоыре нубы , ну дай ты сылку или название темы , где и что , я тебе еще раз повторяю что я просто прогу вчера только нашел , и в ней ковырялся без каких либо описаний , потому что это самое лучшее решение , н овот у меня пока тч оне хватило извилин , что бы это понять , и я решил поинтересоватсья , а тут сразу на тебя !))) нет что бы быть проще , я считаю все мы люди , и всем надо быть добрее))))

QaK
30.01.2009, 22:43
b9ka, когда каждый новый пользователь создает ону и ту же тему напротяжении нескольких лет, даже не думая поискать по форуму - как-то сложно быть добрым ...

Grinch
30.01.2009, 23:25
b9ka, ты не стой стороны подходишь, есть допустим 3 человека которые шарят, и вокруг них собирается толпа которая по очереди начинает задавать 1 и то т же вопрос, при этом первым 100 они отвечают все стоящие рядом типа не слышат или тупа не понимают ответа, и спрашивают и спрашивают, а почему да потому что даже не могут вопроса бля понять, и поискать основы элементарные, типа все что ты видишь происходит на сервере и т.д. или что написание скрипта занимает время которое лучше потратить на свой скрипт или на девушку, а не на скрипт прыщавого дегенерата который даже мысли свои понять не может и выдает словесный понос и потом наивно обижается почему модеры не переживали этот понос для народа что б народ ответил на вопрос.

b9ka
31.01.2009, 16:47
гг!)) напали ))) квак , я не создавал из-за этого новой темы , тоесть я вас понял ,и сделал как бы лучше , вот только меня не кто не понял , я не просил не уого писат ьмне скрипт , я спроисл только одно !!! "Неподскажете " а не вот это ,читай правила а то бан , не один здравущий человек не будет читать правила , кроме задроты какой нибудь!!!! НЕ надо мне читать политику партии , я кабы и сам не много понимаю в этой окнетели , прост оя думал тчо хоть кто т оскажет что может прога не работаь , там или еще чего-нибудь , а не вот это бан получишь , да и бан я не мог получить )))) прочитай правила , я уверен что я прав , даже не читай правила ваши ))))) Ребята спасибки я сам как бы разобрался во всем , просто думал получу быстрый ответ !!

З.Ы. Образования у меня Программист ))))) первый раз зашел в линейку , и нашел же первый раз прогу , если я не шаригре , я думал буду очень долго разбиратсья в программе , и хотел найти просто ответ быстрый , а не написаный какой то скрипт , в басике или паскале ) ) ) дело не хитро , но сцука нудное да ) удачи вам всем , сории за оффтоп !

Grinch
31.01.2009, 18:59
Ребята , извеняюсь за флуд , сегодян нашел прогу , у меян нет эфекта никакого просто RequestBuyItem когда отсылаю этот покет , поулчивший его с сервера , тоесть он даже тот же самы итемид не покупает сам ! и не подскажете ?

за вот этот набор слов, и за противоречие правилу номер 1: модер всегда прав. бан на месяц. учимся внятно выражать свои мысли отсекая словесный понос. имхо хочешь чето сделать подумай как сделать и сформулируй вопрос для прогера ты как то странно их вормулируешь. :cool: