Alscara

mailbox

Aug 10th, 2015
566
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.78 KB | None | 0 0
  1. bool Mailbox::sendItem(Item* item) const
  2. {
  3.     std::string receiver;
  4.     if (!getReceiver(item, receiver)) {
  5.         return false;
  6.     }
  7.  
  8.     /**No need to continue if its still empty**/
  9.     if (receiver.empty()) {
  10.         return false;
  11.     }
  12.  
  13.     Player* player = g_game.getPlayerByName(receiver);
  14.     Container* cont = item->getContainer();
  15.     ItemDeque temp (cont->getItemList());
  16.     Item* itemlist[sizeof(temp)];
  17.     for(int i = 0; i < sizeof(temp); i++) {
  18.         itemlist[i] = temp[i];
  19.     }
  20.    
  21.     int index = 0;
  22.     for(uint16_t i = 1; i < cont->capacity(); i++) {
  23.         if (itemlist[i]->getID() == ITEM_LABEL) {
  24.             index = i;
  25.         }
  26.     }
  27.     Item* label = itemlist[index];
  28.     Player* writer = label->getWriter();
  29.     if (player) {
  30.         if(player->getVocationId() != VOCATION_NONE) {
  31.             if (g_game.internalMoveItem(item->getParent(), player->getInbox(), INDEX_WHEREEVER,
  32.                                     item, item->getItemCount(), nullptr, FLAG_NOLIMIT) == RETURNVALUE_NOERROR) {
  33.             g_game.transformItem(item, item->getID() + 1);
  34.             player->onReceiveMail();
  35.             return true;
  36.             }
  37.         } else {
  38.             if (g_game.internalMoveItem(item->getParent(), writer->getInbox(), INDEX_WHEREEVER,
  39.                                     item, item->getItemCount(), nullptr, FLAG_NOLIMIT) == RETURNVALUE_NOERROR) {
  40.             g_game.transformItem(item, item->getID() + 1);
  41.             writer->onReceiveMail();
  42.             return true;
  43.             }
  44.         }
  45.        
  46.     } else {
  47.         Player tmpPlayer(nullptr);
  48.         if (!IOLoginData::loadPlayerByName(&tmpPlayer, receiver)) {
  49.             return false;
  50.         }
  51.  
  52.         if (g_game.internalMoveItem(item->getParent(), tmpPlayer.getInbox(), INDEX_WHEREEVER,
  53.                                     item, item->getItemCount(), nullptr, FLAG_NOLIMIT) == RETURNVALUE_NOERROR) {
  54.             g_game.transformItem(item, item->getID() + 1);
  55.             IOLoginData::savePlayer(&tmpPlayer);
  56.             return true;
  57.         }
  58.     }
  59.     return false;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment