Показать сообщение отдельно
Старый 19.01.2009, 23:41   #17
Новичок
 
Аватар для 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 вне форума   Ответить с цитированием