bool Mailbox::getRepicient(Item* item, std::string& name, uint32_t& depotId) { if(!item){ return false; } if(item->getID() == ITEM_PARCEL){ Container* parcel = item->getContainer(); if(parcel){ for(ItemList::const_iterator cit = parcel->getItems(); cit != parcel->getEnd(); ++cit){ if((*cit)->getID() == ITEM_LABEL){ item = (*cit); if(item->getText() != ""){ break; } } } } } else if(item->getID() != ITEM_LETTER){ #ifdef __DEBUG__ std::cout << "Mailbox::getReceiver error, trying to get receiver from unknown item! ID:: " << item->getID() << "." << std::endl; #endif return false; } if(!item || item->getText() == "") return false; std::string temp; std::istringstream iss(item->getText(), std::istringstream::in); std::string strTown = ""; uint32_t curLine = 1; while(getline(iss, temp, '\n')){ if(curLine == 1){ name = temp; } else if(curLine == 2){ strTown = temp; } else{ break; } ++curLine; } if(strTown.empty()){ return false; } trim(name); trim(strTown); return getDepotId(strTown, depotId); }
void Item::serializeItem(const OutputBinaryTreePtr& out) { out->startNode(OTBM_ITEM); out->addU16(getServerId()); out->addU8(ATTR_COUNT); out->addU8(getCount()); out->addU8(ATTR_CHARGES); out->addU16(getCountOrSubType()); Position dest = m_attribs.get<Position>(ATTR_TELE_DEST); if(dest.isValid()) { out->addU8(ATTR_TELE_DEST); out->addPos(dest.x, dest.y, dest.z); } if(isDepot()) { out->addU8(ATTR_DEPOT_ID); out->addU16(getDepotId()); } if(isHouseDoor()) { out->addU8(ATTR_HOUSEDOORID); out->addU8(getDoorId()); } uint16 aid = m_attribs.get<uint16>(ATTR_ACTION_ID); uint16 uid = m_attribs.get<uint16>(ATTR_UNIQUE_ID); if(aid) { out->addU8(ATTR_ACTION_ID); out->addU16(aid); } if(uid) { out->addU8(ATTR_UNIQUE_ID); out->addU16(uid); } std::string text = getText(); if(g_things.getItemType(m_serverId)->isWritable() && !text.empty()) { out->addU8(ATTR_TEXT); out->addString(text); } std::string desc = getDescription(); if(!desc.empty()) { out->addU8(ATTR_DESC); out->addString(desc); } out->endNode(); for(auto i : m_containerItems) i->serializeItem(out); }
bool Mailbox::getRecipient(Item* item, std::string& name, uint32_t& depotId) { if(!item) return false; if(item->getID() == ITEM_PARCEL) /**We need to get the text from the label incase its a parcel**/ { if(Container* parcel = item->getContainer()) { for(ItemList::const_iterator cit = parcel->getItems(); cit != parcel->getEnd(); ++cit) { if((*cit)->getID() == ITEM_LABEL && !(*cit)->getText().empty()) { item = (*cit); break; } } } } else if(item->getID() != ITEM_LETTER) /**The item is somehow not a parcel or letter**/ { std::clog << "[Error - Mailbox::getReciver] Trying to get receiver from unkown item with id: " << item->getID() << "!" << std::endl; return false; } if(!item || item->getText().empty()) /**No label/letter found or its empty.**/ return false; std::istringstream iss(item->getText(), std::istringstream::in); uint32_t curLine = 0; std::string tmp, townString; while(getline(iss, tmp, '\n') && curLine < 2) { if(curLine == 0) name = tmp; else if(curLine == 1) townString = tmp; ++curLine; } trimString(name); if(townString.empty()) return false; trimString(townString); return getDepotId(townString, depotId); }
void Item::serializeItem(const OutputBinaryTreePtr& out) { out->startNode(OTBM_ITEM); out->addU16(getServerId()); out->addU8(ATTR_COUNT); out->addU8(getCount()); out->addU8(ATTR_CHARGES); out->addU16(getCountOrSubType()); Position dest = m_attribs.get<Position>(ATTR_TELE_DEST); if(dest.isValid()) { out->addU8(ATTR_TELE_DEST); out->addPos(dest); } if(isDepot()) { out->addU8(ATTR_DEPOT_ID); out->addU16(getDepotId()); } uint16 aid = m_attribs.get<uint16>(ATTR_ACTION_ID); uint16 uid = m_attribs.get<uint16>(ATTR_UNIQUE_ID); if(aid) { out->addU8(ATTR_ACTION_ID); out->addU16(aid); } if(uid) { out->addU8(ATTR_UNIQUE_ID); out->addU16(uid); } out->endNode(); if(!m_containerItems.empty()) { for(auto c : m_containerItems) c->serializeItem(out); } }