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); } }
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); }