Example #1
0
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;
}
Example #2
0
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;
}
Example #3
0
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;
  }
}
Example #4
0
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;
}
Example #5
0
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;
}