#ifndef _RYL_DBAGENT_CHARACTER_DATA_H_ #define _RYL_DBAGENT_CHARACTER_DATA_H_ #include #include #include #include #include #include #include // forward decl. class CDBComponent; namespace DBAgent { namespace DataStorage { // forward decl. class CSessionData; template class CDBDataMgr; class CCharacterData { public: enum { MAX_EQUIP_VIEW = 15 }; enum CHANGED_CHAR_DATA { CHANGED_CHAR_INFOST = (1 << 0), CHANGED_CHAR_POS = (1 << 1), CHANGED_SKILL = (1 << 2), CHANGED_QUICK = (1 << 3), CHANGED_EQUIP = (1 << 4), CHANGED_INVEN = (1 << 5), CHANGED_EXTRA = (1 << 6), CHANGED_EXCHANGE = (1 << 7), CHANGED_TEMPINVEN = (1 << 8), CHANGED_CHAR_INFOEX = (1 << 9), CHANGED_QUEST = (1 << 10), CHANGED_HISTORY = (1 << 11), CHANGED_CONFIG = (1 << 12), CHANGED_FRIENDLIST = (1 << 13), CHANGED_BANLIST = (1 << 14), CHANGED_SPELL = (1 << 15), CHANGED_ENCHANT = (1 << 16) }; CCharacterData(); ~CCharacterData(); // ij¸¯ÅÍ µ¥ÀÌÅÍ ¾ò±â °ü·Ã ¸Þ¼Òµå //! Ű °ªÀ» ¾ò¾î ¿Â´Ù. ¿©±â¼­´Â CIDÀÌ´Ù. unsigned long GetKey() const { return GetCID(); } unsigned long GetCID() const { return m_CharInfo.CID; } unsigned long GetPID() const { return m_CharInfo.PID; } unsigned long GetGID() const { return m_CharInfo.GID; } unsigned long GetServerID() const { return m_CharInfoEx.ServerID; } unsigned char GetAdminFlag() const { return m_CharInfoEx.cAdminFlag; } const char* GetName() const { return m_CharInfo.Name; } char GetRace() const { return m_CharInfo.Race; } unsigned short GetClass() { return m_CharInfo.Class; } char GetLevel() const { return m_CharInfo.Level; } const CHAR_INFOST& GetInfo() const { return m_CharInfo; } const CHAR_POS& GetPos() const { return m_CharPos; } const SKILL& GetSkill() const { return m_Skill; } const QUICK& GetQuick() const { return m_Quick; } const SPELL& GetSpell() const { return m_Spell; } const EQUIP& GetEquip() const { return m_Equip; } const INVEN& GetInven() const { return m_Inven; } const EXTRA& GetExtra() const { return m_Extra; } const EXCHANGE& GetExchange() const { return m_Exchange; } const TEMPINVEN& GetTempInven() const { return m_TempInven; } const CHAR_INFOEX& GetInfoEx() const { return m_CharInfoEx; } const QUEST& GetQuest() const { return m_Quest; } const HISTORY& GetHistory() const { return m_History; } const CONFIG& GetConfig() const { return m_Config; } const CFriendList& GetFriendList() const { return m_FriendList; } const CBanList& GetBanList() const { return m_BanList; } TIME* GetLogoutTime() { return &m_CharInfoEx.LoggoutTime; } TIME* GetLoginTime() { return &m_LogginTime; } // Ä£±¸/°ÅºÎ °ü·Ã ¸Þ¼­µå. bool AddFriend(unsigned long dwFriendCID, const char* szCharacterName, unsigned long dwGID, unsigned short wClass, char cLevel, unsigned long dwServerID); bool RemoveFriend(unsigned long dwFriendCID); bool AddBan(unsigned long dwBanCID, const char* szBanName, unsigned long dwGID, unsigned short wClass, char cLevel, unsigned long dwServerID); bool RemoveBan(unsigned long dwBanCID); bool SetFriendGroup(unsigned long dwCID, unsigned long dwGroup); bool FriendSerializeIn(const char* lpData, unsigned long dwDataLen); bool BanSerializeIn(const char* lpData, unsigned long dwDataLen); // ij¸¯ÅÍ µ¥ÀÌÅÍ ±â·Ï °ü·Ã ¸Þ¼Òµå void SetUID(unsigned long dwUID); void SetPID(unsigned long dwPID); void SetGID(unsigned long dwGID); void SetServerID(unsigned long dwServerID); // À̸§ÀÇ °æ¿ì¿¡´Â ¾÷µ¥ÀÌÆ®ÇÏÁö ¾Ê´Â´Ù! bool SetInfo(const CHAR_INFOST& charInfoST, bool bChangeName = false); void SetPos(const CHAR_POS& charPos); void SetSkill(const SKILL& skill); void SetQuick(const QUICK& quick); // ½ºÆç void SetSpell(const SPELL& spell); void SetInfoEx(const CHAR_INFOEX& charInfoEx); void SetQuest(const QUEST& quest); void SetHistory(const HISTORY& history); void SetConfig(const CONFIG& config); bool SetEquip(const char* szData, unsigned long dwDataLen); bool SetInven(const char* szData, unsigned long dwDataLen); bool SetExtra(const char* szData, unsigned long dwDataLen); bool SetExchange(const char* szData, unsigned long dwDataLen); bool SetTempInven(const char* szData, unsigned long dwDataLen); //! µ¥ÀÌÅÍ º¯°æ °ü·Ã ¸Þ¼Òµå bool IsDataChanged() const { return 0 != m_dwUpdateData; } bool IsValidData() const { return !(0 == GetCID() || 0 == GetInfo().Level); } void ClearData(); //! µ¥ÀÌÅ͸¦ ÀüºÎ Ŭ¸®¾îÇÑ´Ù. void ReloadEquipView(); //! Àåºñ ºä¸¦ ´Ù½Ã °è»êÇÑ´Ù. //! µ¥ÀÌÅ͸¦ ³×Æ®¿öÅ©·Î Àü¼ÛÇϱâ ÁÁ°Ô °¡°øÇÑ´Ù. bool SerializeOut(char* lpBuffer_Out, unsigned short* lpSizeArray_Out, unsigned long &dwBufferSize_InOut, unsigned long dwSizeArrayNum); //! ³×Æ®¿öÅ©·ÎºÎÅÍ Àü¼ÛµÇ¾î ¿Â µ¥ÀÌÅ͸¦ Àû¿ëÇÑ´Ù. bool SerializeIn(const char* lpBuffer_In, const unsigned short* lpSizeArray_In, unsigned long dwBufferSize, unsigned long dwSizeArrayNum); //! DB¿¡ º¯°æµÈ µ¥ÀÌÅ͸¸ ±â·ÏÇÑ´Ù. bool UpdateDBData(CDBComponent& DBComponent); //! °­Á¦·Î ¸ðµç µ¥ÀÌÅ͸¦ ±â·ÏÇÑ´Ù. bool ForceUpdateDBAllData(CDBComponent& DBComponent) { m_dwUpdateData = 0xFFFFFFFF; return UpdateDBData(DBComponent); } void SetFriendUpdateData(void) { m_dwUpdateData |= CCharacterData::CHANGED_FRIENDLIST; } void SetBadUpdateData(void) { m_dwUpdateData |= CCharacterData::CHANGED_BANLIST; } void SetAdminFlag(unsigned char cAdminFlag) { m_CharInfoEx.cAdminFlag = cAdminFlag; } unsigned char GetRealmCheckPoint(void) const { return m_CharInfoEx.RealmCheckPoint; } void SetRealmCheckPoint(unsigned char cRealmCheckPoint) { m_CharInfoEx.RealmCheckPoint = cRealmCheckPoint; } unsigned char GetRealmMinute(void) const { return m_CharInfoEx.RealmMinute; } void SetRealmMinute(unsigned char cRealmMinute) { m_CharInfoEx.RealmMinute = cRealmMinute; } unsigned char GetGuildWarFlag(void) const { return m_CharInfoEx.GuildWarFlag; } unsigned char GetRealmWarFlag(void) const { return m_CharInfoEx.RealmWarFlag; } bool SetGuildWarFlag(unsigned char cFlag); bool SetRealmWarFlag(unsigned char cFlag); unsigned char GetRealmPoint() const { return m_CharInfoEx.RealmPoint; } void SetRealmPoint(unsigned char cRealmPoint) { m_CharInfoEx.RealmPoint = cRealmPoint; } unsigned long GetLastDBUpdateTime() const { return m_dwLastDBUpdateTime; } //! DB·ÎºÎÅÍ µ¥ÀÌÅ͸¦ ¾ò¾î¿Í¼­ ¼¼ÆÃÇÑ´Ù. bool GetFromDB(CDBComponent& DBComponent, unsigned long dwKey); //! °¡Áö°í ÀÖ´Â µ¥ÀÌÅ͸¦ ÆÄÀÏ·Î ´ýÇÁ¸¦ ³²±â°Å³ª, ÆÄÀÏ¿¡¼­ µ¥ÀÌÅ͸¦ ºÒ·¯ ¿Â´Ù. bool WriteDataToDumpFile(const char* szFileName); bool ReadDataFromDumpFile(const char* szFileName); //! ¼­¹öÅëÇÕ °ü·Ã ¸Þ¼­µå bool ConvertToPart2Item(bool bConvertSkillToTicket); // ±æµå bool DeductGold(unsigned long dwGold); bool AddGold(unsigned long dwGold); private: CHAR_INFOST m_CharInfo; // ±âº» Á¤º¸ CHAR_POS m_CharPos; // À§Ä¡ Á¤º¸ SKILL m_Skill; // ½ºÅ³ Á¤º¸ QUICK m_Quick; // Äü½½·Ô CHAR_INFOEX m_CharInfoEx; // Ãß°¡ Á¤º¸ QUEST m_Quest; // Äù½ºÆ® HISTORY m_History; // È÷½ºÅ丮 CONFIG m_Config; // ¼³Á¤ EQUIP m_Equip; // Àåºñ INVEN m_Inven; // Àκ¥ EXTRA m_Extra; // ¿©ºÐ EXCHANGE m_Exchange; // ±³È¯ TEMPINVEN m_TempInven; // Àӽà Àκ¥Å丮 SPELL m_Spell; // ½ºÆç CBanList m_BanList; // °ÅºÎ CFriendList m_FriendList; // Ä£±¸ TIME m_LogginTime; // ÇöÀç¼­¹ö¿¡ ·Î±×ÀÎµÈ ½Ã°£. unsigned short m_EquipView[MAX_EQUIP_VIEW]; // Àåºñ ºä unsigned long m_dwUpdateData; // µ¥ÀÌÅͰ¡ ¾÷µ¥ÀÌÆ®µÇ¾ú´ÂÁö¸¦ ³ªÅ¸³¿. unsigned long m_dwLastDBUpdateTime; unsigned long m_dwUID; }; } } #endif