Attr_ReadValue BedItem::readAttr(AttrTypes_t attr, PropStream& propStream) { switch (attr) { case ATTR_SLEEPERGUID: { uint32_t guid; if (!propStream.read<uint32_t>(guid)) { return ATTR_READ_ERROR; } if (guid != 0) { std::string name = IOLoginData::getNameByGuid(guid); if (!name.empty()) { setSpecialDescription(name + " is sleeping there."); g_game.setBedSleeper(this, guid); sleeperGUID = guid; } } return ATTR_READ_CONTINUE; } case ATTR_SLEEPSTART: { uint32_t sleep_start; if (!propStream.read<uint32_t>(sleep_start)) { return ATTR_READ_ERROR; } sleepStart = static_cast<uint64_t>(sleep_start); return ATTR_READ_CONTINUE; } default: break; } return Item::readAttr(attr, propStream); }
void BedItem::internalSetSleeper(const Player* player) { std::string desc_str = player->getName() + " is sleeping there."; setSleeper(player->getGUID()); setSleepStart(time(NULL)); setSpecialDescription(desc_str); }
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; }
Attr_ReadValue BedItem::readAttr(AttrTypes_t attr, PropStream& propStream) { switch(attr) { case ATTR_SLEEPERGUID: { uint32_t _sleeper; if(!propStream.GET_ULONG(_sleeper)) return ATTR_READ_ERROR; if(_sleeper) { std::string name; if(IOLoginData::getInstance()->getNameByGuid(_sleeper, name)) { setSpecialDescription(name + " is sleeping there."); Beds::getInstance().setBedSleeper(this, _sleeper); } } sleeper = _sleeper; return ATTR_READ_CONTINUE; } case ATTR_SLEEPSTART: { uint32_t _sleepStart; if(!propStream.GET_ULONG(_sleepStart)) return ATTR_READ_ERROR; sleepStart = (time_t)_sleepStart; return ATTR_READ_CONTINUE; } default: break; } return Item::readAttr(attr, propStream); }
void BedItem::internalRemoveSleeper() { setSleeper(0); setSleepStart(0); setSpecialDescription("Nobody is sleeping there."); }
Attr_ReadValue Item::readAttr(AttrTypes_t attr, PropStream& propStream) { switch (attr) { case ATTR_COUNT: { uint8_t _count = 0; if (!propStream.GET_UCHAR(_count)) { return ATTR_READ_ERROR; } setSubType(_count); break; } case ATTR_ACTION_ID: { uint16_t _actionid = 0; if (!propStream.GET_USHORT(_actionid)) { return ATTR_READ_ERROR; } setActionId(_actionid); break; } case ATTR_UNIQUE_ID: { uint16_t _uniqueid; if (!propStream.GET_USHORT(_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_ULONG(_writtenDate)) { return ATTR_READ_ERROR; } setDate(_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_UCHAR(_charges)) { return ATTR_READ_ERROR; } setSubType(_charges); break; } case ATTR_CHARGES: { uint16_t _charges = 1; if (!propStream.GET_USHORT(_charges)) { return ATTR_READ_ERROR; } setSubType(_charges); break; } case ATTR_DURATION: { uint32_t duration = 0; if (!propStream.GET_ULONG(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_UCHAR(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_USHORT(_depotId)) { return ATTR_READ_ERROR; } return ATTR_READ_CONTINUE; } //Door class case ATTR_HOUSEDOORID: { uint8_t _doorId; if (!propStream.GET_UCHAR(_doorId)) { return ATTR_READ_ERROR; } return ATTR_READ_CONTINUE; } //Bed class case ATTR_SLEEPERGUID: { uint32_t _guid; if (!propStream.GET_ULONG(_guid)) { return ATTR_READ_ERROR; } return ATTR_READ_CONTINUE; } case ATTR_SLEEPSTART: { uint32_t sleep_start; if (!propStream.GET_ULONG(sleep_start)) { return ATTR_READ_ERROR; } return ATTR_READ_CONTINUE; } //Teleport class case ATTR_TELE_DEST: { TeleportDest* tele_dest; if (!propStream.GET_STRUCT(tele_dest)) { return ATTR_READ_ERROR; } return ATTR_READ_CONTINUE; } //Container class case ATTR_CONTAINER_ITEMS: { uint32_t count; if (!propStream.GET_ULONG(count)) { return ATTR_READ_ERROR; } return ATTR_READ_ERROR; } default: return ATTR_READ_ERROR; } return ATTR_READ_CONTINUE; }
bool Item::readAttr(AttrTypes_t attr, PropStream& propStream) { switch(attr){ case ATTR_COUNT: { unsigned char _count = 0; if(!propStream.GET_UCHAR(_count)){ return false; } setItemCountOrSubtype(_count); break; } case ATTR_ACTION_ID: { unsigned short _actionid = 0; if(!propStream.GET_USHORT(_actionid)){ return false; } setActionId(_actionid); break; } case ATTR_UNIQUE_ID: { unsigned short _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_DESC: { std::string _text; if(!propStream.GET_STRING(_text)){ return false; } setSpecialDescription(_text); break; } case ATTR_RUNE_CHARGES: { unsigned char _charges = 1; if(!propStream.GET_UCHAR(_charges)){ return false; } setItemCountOrSubtype(_charges); 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: { unsigned short _depotId; if(!propStream.GET_USHORT(_depotId)){ return false; } return true; } //Door class case ATTR_HOUSEDOORID: { unsigned char _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; }
void BedItem::internalRemoveSleeper() { sleeper = 0; eraseAttribute("sleepstart"); setSpecialDescription("Nobody is sleeping there."); }
void BedItem::internalSetSleeper(const Player* player) { sleeper = player->getGUID(); setAttribute("sleepstart", (int32_t)time(NULL)); setSpecialDescription(player->getName() + " is sleeping there."); }