Показать сообщение отдельно
Старый 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 нажился спасибкой от: