Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,236 @@
|
||||
#ifndef _RYL_DBAGENT_CHARACTER_DATA_H_
|
||||
#define _RYL_DBAGENT_CHARACTER_DATA_H_
|
||||
|
||||
#include <DB/DBdefine.h>
|
||||
#include <Community/FriendList.h>
|
||||
#include <Community/BanList.h>
|
||||
#include <Skill/Spell/Affected.h>
|
||||
|
||||
#include <map>
|
||||
#include <boost/pool/object_pool.hpp>
|
||||
#include <boost/pool/pool_alloc.hpp>
|
||||
|
||||
// forward decl.
|
||||
class CDBComponent;
|
||||
|
||||
namespace DBAgent
|
||||
{
|
||||
namespace DataStorage
|
||||
{
|
||||
// forward decl.
|
||||
class CSessionData;
|
||||
|
||||
template<typename Key, typename Data, typename Pred>
|
||||
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();
|
||||
|
||||
// 캐릭터 데이터 얻기 관련 메소드
|
||||
|
||||
//! 키 값을 얻어 온다. 여기서는 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);
|
||||
|
||||
// 캐릭터 데이터 기록 관련 메소드
|
||||
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
|
||||
Reference in New Issue
Block a user