bool Item::serializeAttr(PropWriteStream& propWriteStream) const { if (isStackable() || isFluidContainer() || isSplash()) { uint8_t _count = getSubType(); propWriteStream.ADD_UCHAR(ATTR_COUNT); propWriteStream.ADD_UCHAR(_count); } if (hasCharges()) { uint16_t _count = getCharges(); propWriteStream.ADD_UCHAR(ATTR_CHARGES); propWriteStream.ADD_USHORT(_count); } if (!isNotMoveable()) { uint16_t _actionId = getActionId(); if (_actionId) { propWriteStream.ADD_UCHAR(ATTR_ACTION_ID); propWriteStream.ADD_USHORT(_actionId); } } const std::string& _text = getText(); if (!_text.empty()) { propWriteStream.ADD_UCHAR(ATTR_TEXT); propWriteStream.ADD_STRING(_text); } const time_t _writtenDate = getDate(); if (_writtenDate > 0) { propWriteStream.ADD_UCHAR(ATTR_WRITTENDATE); propWriteStream.ADD_ULONG(_writtenDate); } const std::string& _writer = getWriter(); if (!_writer.empty()) { propWriteStream.ADD_UCHAR(ATTR_WRITTENBY); propWriteStream.ADD_STRING(_writer); } const std::string& _specialDesc = getSpecialDescription(); if (!_specialDesc.empty()) { propWriteStream.ADD_UCHAR(ATTR_DESC); propWriteStream.ADD_STRING(_specialDesc); } if (hasAttribute(ATTR_ITEM_DURATION)) { uint32_t duration = getDuration(); propWriteStream.ADD_UCHAR(ATTR_DURATION); propWriteStream.ADD_ULONG(duration); } ItemDecayState_t decayState = getDecaying(); if (decayState == DECAYING_TRUE || decayState == DECAYING_PENDING) { propWriteStream.ADD_UCHAR(ATTR_DECAYING_STATE); propWriteStream.ADD_UCHAR(decayState); } return true; }
bool Condition::serialize(PropWriteStream& propWriteStream) { propWriteStream.ADD_UCHAR(*CONDITIONATTRIBUTE_MECHANIC); propWriteStream.ADD_VALUE(mechanicType.value()); propWriteStream.ADD_UCHAR(*CONDITIONATTRIBUTE_COMBAT); propWriteStream.ADD_VALUE(combatType.value()); propWriteStream.ADD_UCHAR(*CONDITIONATTRIBUTE_SOURCE); propWriteStream.ADD_VALUE(sourceId); propWriteStream.ADD_UCHAR(*CONDITIONATTRIBUTE_TICKS); propWriteStream.ADD_VALUE(ticks); propWriteStream.ADD_UCHAR(*CONDITIONATTRIBUTE_NAME); propWriteStream.ADD_STRING(name); propWriteStream.ADD_UCHAR(*CONDITIONATTRIBUTE_FLAGS); propWriteStream.ADD_VALUE(flags); for(std::list<ConditionEffect>::iterator it = effectList.begin(); it != effectList.end(); ++it){ ConditionEffect& effect = (*it); effect.serialize(propWriteStream); } return true; }
void ItemAttributes::serializeAttributeMap(PropWriteStream& stream) const { // maximum of 65535 attributes per item stream.ADD_USHORT(std::min((size_t)0xFFFF, attributes->size())); AttributeMap::const_iterator attribute = attributes->begin(); int i = 0; while(attribute != attributes->end() && i <= 0xFFFF){ const std::string& key = attribute->first; if(key.size() > 0xFFFF) stream.ADD_STRING(key.substr(0, 65535)); else stream.ADD_STRING(key); attribute->second.serialize(stream); ++attribute, ++i; } }
bool Item::serializeAttr(PropWriteStream& propWriteStream) { if(isStackable() || isSplash() || isFluidContainer()){ unsigned char _count = getItemCountOrSubtype(); propWriteStream.ADD_UCHAR(ATTR_COUNT); propWriteStream.ADD_UCHAR(_count); } if(isRune()){ unsigned char _count = getItemCharge(); propWriteStream.ADD_UCHAR(ATTR_RUNE_CHARGES); propWriteStream.ADD_UCHAR(_count); } if(!isNotMoveable() /*moveable*/){ if(actionId){ unsigned short _actionId = getActionId(); propWriteStream.ADD_UCHAR(ATTR_ACTION_ID); propWriteStream.ADD_USHORT(_actionId); } } /*we are not saving unique ids if(uniqueId){ unsigned short _uniqueId = getUniqueId(); propWriteStream.ADD_UCHAR(ATTR_UNIQUE_ID); propWriteStream.ADD_USHORT(_uniqueId); } */ const std::string& _text = getText(); if(_text.length() > 0){ propWriteStream.ADD_UCHAR(ATTR_TEXT); propWriteStream.ADD_STRING(_text); } const std::string& _specialDesc = getSpecialDescription(); if(_specialDesc.length() > 0){ propWriteStream.ADD_UCHAR(ATTR_DESC); propWriteStream.ADD_STRING(_specialDesc); } return true; }
bool ConditionEffect::serialize(PropWriteStream& propWriteStream) { propWriteStream.ADD_UCHAR(*CONDITIONATTRIBUTE_EFFECT); propWriteStream.ADD_VALUE((uint32_t)type); propWriteStream.ADD_VALUE(interval); switch(type){ case ConditionEffect::PERIODIC_HEAL: case ConditionEffect::PERIODIC_DAMAGE: { ConditionEffect::ModPeriodicDamage& mod = getModEffect<ConditionEffect::ModPeriodicDamage>(); propWriteStream.ADD_USHORT(1); //revision propWriteStream.ADD_VALUE((uint32_t)mod.type.value()); propWriteStream.ADD_VALUE(mod.min); propWriteStream.ADD_VALUE(mod.max); propWriteStream.ADD_VALUE(mod.value); propWriteStream.ADD_VALUE(mod.total); propWriteStream.ADD_VALUE(mod.percent); propWriteStream.ADD_VALUE(mod.first); propWriteStream.ADD_VALUE(mod.rounds); break; } case ConditionEffect::PERIODIC_MOD_STAMINA: { ConditionEffect::ModPeriodicStamina& mod = getModEffect<ConditionEffect::ModPeriodicStamina>(); propWriteStream.ADD_USHORT(1); //revision propWriteStream.ADD_VALUE(mod.value); break; } case ConditionEffect::REGEN_HEALTH: case ConditionEffect::REGEN_MANA: case ConditionEffect::REGEN_SOUL: { ConditionEffect::ModRegen& mod = getModEffect<ConditionEffect::ModRegen>(); propWriteStream.ADD_USHORT(1); //revision propWriteStream.ADD_VALUE((uint32_t)mod.type.value()); propWriteStream.ADD_VALUE(mod.percent); propWriteStream.ADD_VALUE(mod.value); break; } case ConditionEffect::MOD_SPEED: { ConditionEffect::ModSpeed& mod = getModEffect<ConditionEffect::ModSpeed>(); propWriteStream.ADD_USHORT(1); //revision propWriteStream.ADD_VALUE(mod.percent); propWriteStream.ADD_VALUE(mod.value); propWriteStream.ADD_VALUE(mod.delta); break; } case ConditionEffect::MOD_STAT: { ConditionEffect::ModStat& mod = getModEffect<ConditionEffect::ModStat>(); propWriteStream.ADD_USHORT(1); //revision propWriteStream.ADD_VALUE((uint32_t)mod.type.value()); propWriteStream.ADD_VALUE(mod.percent); propWriteStream.ADD_VALUE(mod.value); propWriteStream.ADD_VALUE(mod.delta); break; } case ConditionEffect::MOD_SKILL: { ConditionEffect::ModSkill& mod = getModEffect<ConditionEffect::ModSkill>(); propWriteStream.ADD_USHORT(1); //revision propWriteStream.ADD_VALUE((uint32_t)mod.type.value()); propWriteStream.ADD_VALUE(mod.percent); propWriteStream.ADD_VALUE(mod.value); propWriteStream.ADD_VALUE(mod.delta); break; } case ConditionEffect::SHAPESHIFT: { ConditionEffect::ModShapeShift& mod = getModEffect<ConditionEffect::ModShapeShift>(); propWriteStream.ADD_USHORT(1); //revision propWriteStream.ADD_VALUE(mod.lookType); propWriteStream.ADD_VALUE(mod.lookTypeEx); propWriteStream.ADD_VALUE(mod.lookHead); propWriteStream.ADD_VALUE(mod.lookBody); propWriteStream.ADD_VALUE(mod.lookLegs); propWriteStream.ADD_VALUE(mod.lookFeet); propWriteStream.ADD_VALUE(mod.lookAddons); break; } case ConditionEffect::LIGHT: { ConditionEffect::ModLight& mod = getModEffect<ConditionEffect::ModLight>(); propWriteStream.ADD_USHORT(1); //revision propWriteStream.ADD_VALUE(mod.level); propWriteStream.ADD_VALUE(mod.color); break; } case ConditionEffect::DISPEL: { ConditionEffect::ModDispel& mod = getModEffect<ConditionEffect::ModDispel>(); propWriteStream.ADD_USHORT(1); //revision propWriteStream.ADD_STRING(mod.name); break; } case ConditionEffect::SCRIPT: { ConditionEffect::ModScript& mod = getModEffect<ConditionEffect::ModScript>(); propWriteStream.ADD_USHORT(1); //revision propWriteStream.ADD_STRING(mod.name); break; } default: return false; } return true; }