El Man
«لَا إِلَٰهَ إِلَّا ٱللَّٰهُ»
- Joined
- Mar 23, 2013
- Messages
- 161
- Reaction score
- 33
C++:bool Game::playerRequestTrade(Player* player, const Position& pos, uint8_t stackPos, uint32_t playerId, uint16_t spriteId) { OTSYS_THREAD_LOCK_CLASS lockClass(gameLock, "Game::playerRequestTrade()"); if(player->isRemoved()) return false; Player* tradePartner = getPlayerByID(playerId); if(!tradePartner || tradePartner == player) { player->sendTextMessage(MSG_INFO_DESCR, "Sorry, not possible."); return false; } if(!Position::areInRange<2,2,0>(tradePartner->getPosition(), player->getPosition())){ std::stringstream ss; ss << tradePartner->getName() << " tells you to move closer."; player->sendTextMessage(MSG_INFO_DESCR, ss.str()); return false; } Item* tradeItem = dynamic_cast<Item*>(internalGetThing(player, pos, stackPos, spriteId, STACKPOS_USE)); if(!tradeItem || tradeItem->getClientID() != spriteId || !tradeItem->isPickupable()) { player->sendCancelMessage(RET_NOTPOSSIBLE); return false; } else if(player->getPosition().z > tradeItem->getPosition().z){ player->sendCancelMessage(RET_FIRSTGOUPSTAIRS); return false; } else if(player->getPosition().z < tradeItem->getPosition().z){ player->sendCancelMessage(RET_FIRSTGODOWNSTAIRS); return false; } else if(!Position::areInRange<1,1,0>(tradeItem->getPosition(), player->getPosition())){ player->sendCancelMessage(RET_TOOFARAWAY); return false; } std::map<Item*, unsigned long>::const_iterator it; const Container* container = NULL; for(it = tradeItems.begin(); it != tradeItems.end(); it++) { if(tradeItem == it->first || ((container = dynamic_cast<const Container*>(tradeItem)) && container->isHoldingItem(it->first)) || ((container = dynamic_cast<const Container*>(it->first)) && container->isHoldingItem(tradeItem))) { player->sendTextMessage(MSG_INFO_DESCR, "This item is already being traded."); return false; } } Container* tradeContainer = tradeItem->getContainer(); if(tradeContainer && tradeContainer->getItemHoldingCount() + 1 > 100){ player->sendTextMessage(MSG_INFO_DESCR, "You can not trade more than 100 items."); return false; } return internalStartTrade(player, tradePartner, tradeItem); }
Last edited: