Exemplo n.º 1
0
bool Item::unserialize(xmlNodePtr nodeItem)
{
	int intValue;
	std::string strValue;

	if(readXMLInteger(nodeItem, "id", intValue)){
		id = intValue;
	}
	else{
		return false;
	}

	if(readXMLInteger(nodeItem, "count", intValue)){
		setSubType(intValue);
	}

	if(readXMLString(nodeItem, "special_description", strValue)){
		setSpecialDescription(strValue);
	}

	if(readXMLString(nodeItem, "text", strValue)){
		setText(strValue);
	}

	if(readXMLInteger(nodeItem, "written_date", intValue)){
		setWrittenDate(intValue);
	}

	if(readXMLString(nodeItem, "writer", strValue)){
		setWriter(strValue);
	}

	if(readXMLInteger(nodeItem, "actionId", intValue)){
		setActionId(intValue);
	}

	if(readXMLInteger(nodeItem, "uniqueId", intValue)){
		setUniqueId(intValue);
	}

	if(readXMLInteger(nodeItem, "duration", intValue)){
		setDuration(intValue);
	}

	if(readXMLInteger(nodeItem, "decayState", intValue)){
		ItemDecayState_t decayState = (ItemDecayState_t)intValue;
		if(decayState != DECAYING_FALSE){
			setDecaying(DECAYING_PENDING);
		}
	}

	return true;
}
Exemplo n.º 2
0
Attr_ReadValue Item::readAttr(const AttrTypes_t& attr, PropStream& propStream)
{
	switch (attr)
	{
		case ATTR_COUNT:
		{
			uint8_t _count = 0;

			if (!propStream.GET_UINT8(_count))
			{
				return ATTR_READ_ERROR;
			}

			setSubType(_count);
			break;
		}
		case ATTR_ACTION_ID:
		{
			uint16_t _actionid = 0;

			if (!propStream.GET_UINT16(_actionid))
			{
				return ATTR_READ_ERROR;
			}

			setActionId(_actionid);
			break;
		}
		case ATTR_UNIQUE_ID:
		{
			uint16_t _uniqueid;

			if (!propStream.GET_UINT16(_uniqueid))
			{
				return ATTR_READ_ERROR;
			}

			setUniqueId(_uniqueid);
			break;
		}
		case ATTR_TEXT:
		{
			std::string _text;

			if (!propStream.GET_STRING(_text))
			{
				return ATTR_READ_ERROR;
			}

			setText(_text);
			break;
		}
		case ATTR_WRITTENDATE:
		{
			uint32_t _writtenDate;

			if (!propStream.GET_UINT32(_writtenDate))
			{
				return ATTR_READ_ERROR;
			}

			setWrittenDate(_writtenDate);
			break;
		}
		case ATTR_WRITTENBY:
		{
			std::string _writer;

			if (!propStream.GET_STRING(_writer))
			{
				return ATTR_READ_ERROR;
			}

			setWriter(_writer);
			break;
		}
		case ATTR_DESC:
		{
			std::string _text;

			if (!propStream.GET_STRING(_text))
			{
				return ATTR_READ_ERROR;
			}

			setSpecialDescription(_text);
			break;
		}
		case ATTR_RUNE_CHARGES:
		{
			uint8_t _charges = 1;

			if (!propStream.GET_UINT8(_charges))
			{
				return ATTR_READ_ERROR;
			}

			setSubType(_charges);
			break;
		}
		case ATTR_CHARGES:
		{
			uint16_t _charges = 1;

			if (!propStream.GET_UINT16(_charges))
			{
				return ATTR_READ_ERROR;
			}

			setSubType(_charges);
			break;
		}
		case ATTR_DURATION:
		{
			uint32_t duration = 0;

			if (!propStream.GET_UINT32(duration))
			{
				return ATTR_READ_ERROR;
			}

			if (((int32_t)duration) < 0)
			{
				duration = 0;
			}

			setDuration(duration);
			break;
		}
		case ATTR_DECAYING_STATE:
		{
			uint8_t state = 0;

			if (!propStream.GET_UINT8(state))
			{
				return ATTR_READ_ERROR;
			}

			if (state != DECAYING_FALSE)
			{
				setDecaying(DECAYING_PENDING);
			}

			break;
		}
		//these should be handled through derived classes
		//If these are called then something has changed in the items.xml since the map was saved
		//just read the values
		//Depot class
		case ATTR_DEPOT_ID:
		{
			uint16_t _depotId;

			if (!propStream.GET_UINT16(_depotId))
			{
				return ATTR_READ_ERROR;
			}

			return ATTR_READ_CONTINUE;
		}
		//Door class
		case ATTR_HOUSEDOORID:
		{
			uint8_t _doorId;

			if (!propStream.GET_UINT8(_doorId))
			{
				return ATTR_READ_ERROR;
			}

			return ATTR_READ_CONTINUE;
		}
		//Bed class
		case ATTR_SLEEPERGUID:
		{
			uint32_t _guid;

			if (!propStream.GET_UINT32(_guid))
			{
				return ATTR_READ_ERROR;
			}

			return ATTR_READ_CONTINUE;
		}
		case ATTR_SLEEPSTART:
		{
			uint32_t sleep_start;

			if (!propStream.GET_UINT32(sleep_start))
			{
				return ATTR_READ_ERROR;
			}

			return ATTR_READ_CONTINUE;
		}
		//Teleport class
		case ATTR_TELE_DEST:
		{
			TeleportDest tele_dest;

			if (!propStream.GET_UINT16(tele_dest._x) ||
			        !propStream.GET_UINT16(tele_dest._y) ||
			        !propStream.GET_UINT8(tele_dest._z))
			{
				return ATTR_READ_ERROR;
			}

			return ATTR_READ_CONTINUE;
		}
		//Container class
		case ATTR_CONTAINER_ITEMS:
		{
			uint32_t count;

			if (!propStream.GET_UINT32(count))
			{
				return ATTR_READ_ERROR;
			}

			//We cant continue parse attributes since there is
			//container data after this attribute.
			return ATTR_READ_ERROR;
		}
		default:
			return ATTR_READ_ERROR;
			break;
	}

	return ATTR_READ_CONTINUE;
}
Exemplo n.º 3
0
bool Item::readAttr(AttrTypes_t attr, PropStream& propStream)
{
	switch(attr){
		case ATTR_COUNT:
		{
			uint8_t _count = 0;
			if(!propStream.GET_UCHAR(_count)){
				return false;
			}

			setSubType(_count);
			break;
		}

		case ATTR_ACTION_ID:
		{
			uint16_t _actionid = 0;
			if(!propStream.GET_USHORT(_actionid)){
				return false;
			}

			setActionId(_actionid);
			break;
		}

		case ATTR_UNIQUE_ID:
		{
			uint16_t _uniqueid;
			if(!propStream.GET_USHORT(_uniqueid)){
				return false;
			}

			setUniqueId(_uniqueid);
			break;
		}

		case ATTR_TEXT:
		{
			std::string _text;
			if(!propStream.GET_STRING(_text)){
				return false;
			}

			setText(_text);
			break;
		}

		case ATTR_WRITTENDATE:
		{
			uint32_t _writtenDate;
			if(!propStream.GET_ULONG(_writtenDate)){
				return false;
			}

			setWrittenDate(_writtenDate);
			break;
		}

		case ATTR_WRITTENBY:
		{
			std::string _writer;
			if(!propStream.GET_STRING(_writer)){
				return false;
			}

			setWriter(_writer);
			break;
		}

		case ATTR_DESC:
		{
			std::string _text;
			if(!propStream.GET_STRING(_text)){
				return false;
			}

			setSpecialDescription(_text);
			break;
		}

		case ATTR_RUNE_CHARGES:
		{
			uint8_t _charges = 1;
			if(!propStream.GET_UCHAR(_charges)){
				return false;
			}

			setSubType(_charges);
			break;
		}

		case ATTR_CHARGES:
		{
			uint16_t _charges = 1;
			if(!propStream.GET_USHORT(_charges)){
				return false;
			}

			setSubType(_charges);
			break;
		}

		case ATTR_DURATION:
		{
			uint32_t duration = 0;
			if(!propStream.GET_ULONG(duration)){
				return false;
			}
			setDuration(duration);
			break;
		}

		case ATTR_DECAYING_STATE:
		{
			uint8_t state = 0;
			if(!propStream.GET_UCHAR(state)){
				return false;
			}

			if(state != DECAYING_FALSE){
				setDecaying(DECAYING_PENDING);
			}
			break;
		}

		//these should be handled through derived classes
		//If these are called then something has changed in the items.otb since the map was saved
		//just read the values

		//Depot class
		case ATTR_DEPOT_ID:
		{
			uint16_t _depotId;
			if(!propStream.GET_USHORT(_depotId)){
				return false;
			}

			return true;
		}

		//Door class
		case ATTR_HOUSEDOORID:
		{
			uint8_t _doorId;
			if(!propStream.GET_UCHAR(_doorId)){
				return false;
			}

			return true;
		}

		//Teleport class
		case ATTR_TELE_DEST:
		{
			TeleportDest* tele_dest;
			if(!propStream.GET_STRUCT(tele_dest)){
				return false;
			}

			return true;
		}

		default:
			return false;
		break;
	}

	return true;
}