forked from metin2/server
fix db header encoding
This commit is contained in:
parent
82317e6c4d
commit
248205ae01
|
@ -243,7 +243,7 @@ private:
|
||||||
TItemInfoCacheMap item_cache_map;
|
TItemInfoCacheMap item_cache_map;
|
||||||
};
|
};
|
||||||
|
|
||||||
// pc가 입찰에 참여했던 경매를 관리.
|
// pc가 입찰에 참여했던 경매를 관리.
|
||||||
class MyBidBoard
|
class MyBidBoard
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -255,7 +255,7 @@ public:
|
||||||
|
|
||||||
int GetMoney (DWORD player_id, DWORD item_id);
|
int GetMoney (DWORD player_id, DWORD item_id);
|
||||||
bool Delete (DWORD player_id, DWORD item_id);
|
bool Delete (DWORD player_id, DWORD item_id);
|
||||||
// 이미 있으면 덮어 씌운다.
|
// 이미 있으면 덮어 씌운다.
|
||||||
void Insert (DWORD player_id, DWORD item_id, int money);
|
void Insert (DWORD player_id, DWORD item_id, int money);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -267,11 +267,11 @@ private:
|
||||||
class AuctionManager : public singleton <AuctionManager>
|
class AuctionManager : public singleton <AuctionManager>
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
// auction에 등록된 아이템들.
|
// auction에 등록된 아이템들.
|
||||||
typedef std::unordered_map<DWORD, CItemCache *> TItemCacheMap;
|
typedef std::unordered_map<DWORD, CItemCache *> TItemCacheMap;
|
||||||
TItemCacheMap auction_item_cache_map;
|
TItemCacheMap auction_item_cache_map;
|
||||||
|
|
||||||
// auction에 등록된 정보 중 가격, 등등 아이템 테이블에 포함되지 않는 정보들을 관리하는 것들
|
// auction에 등록된 정보 중 가격, 등등 아이템 테이블에 포함되지 않는 정보들을 관리하는 것들
|
||||||
AuctionBoard Auction;
|
AuctionBoard Auction;
|
||||||
SaleBoard Sale;
|
SaleBoard Sale;
|
||||||
WishBoard Wish;
|
WishBoard Wish;
|
||||||
|
|
|
@ -29,7 +29,7 @@ class CPlayerTableCache : public cache<TPlayerTable>
|
||||||
// MYSHOP_PRICE_LIST
|
// MYSHOP_PRICE_LIST
|
||||||
/**
|
/**
|
||||||
* @class CItemPriceListTableCache
|
* @class CItemPriceListTableCache
|
||||||
* @brief 개인상점의 아이템 가격정보 리스트에 대한 캐시 class
|
* @brief 개인상점의 아이템 가격정보 리스트에 대한 캐시 class
|
||||||
* @version 05/06/10 Bang2ni - First release.
|
* @version 05/06/10 Bang2ni - First release.
|
||||||
*/
|
*/
|
||||||
class CItemPriceListTableCache : public cache< TItemPriceListTable >
|
class CItemPriceListTableCache : public cache< TItemPriceListTable >
|
||||||
|
@ -38,20 +38,20 @@ class CItemPriceListTableCache : public cache< TItemPriceListTable >
|
||||||
|
|
||||||
/// Constructor
|
/// Constructor
|
||||||
/**
|
/**
|
||||||
* 캐시 만료 시간을 설정한다.
|
* 캐시 만료 시간을 설정한다.
|
||||||
*/
|
*/
|
||||||
CItemPriceListTableCache(void);
|
CItemPriceListTableCache(void);
|
||||||
|
|
||||||
/// 리스트 갱신
|
/// 리스트 갱신
|
||||||
/**
|
/**
|
||||||
* @param [in] pUpdateList 갱신할 리스트
|
* @param [in] pUpdateList 갱신할 리스트
|
||||||
*
|
*
|
||||||
* 캐시된 가격정보를 갱신한다.
|
* 캐시된 가격정보를 갱신한다.
|
||||||
* 가격정보 리스트가 가득 찼을 경우 기존에 캐싱된 정보들을 뒤에서 부터 삭제한다.
|
* 가격정보 리스트가 가득 찼을 경우 기존에 캐싱된 정보들을 뒤에서 부터 삭제한다.
|
||||||
*/
|
*/
|
||||||
void UpdateList(const TItemPriceListTable* pUpdateList);
|
void UpdateList(const TItemPriceListTable* pUpdateList);
|
||||||
|
|
||||||
/// 가격정보를 DB 에 기록한다.
|
/// 가격정보를 DB 에 기록한다.
|
||||||
virtual void OnFlush(void);
|
virtual void OnFlush(void);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -48,10 +48,10 @@ class CClientManager : public singleton<CClientManager>
|
||||||
typedef std::unordered_map<short, BYTE> TChannelStatusMap;
|
typedef std::unordered_map<short, BYTE> TChannelStatusMap;
|
||||||
|
|
||||||
// MYSHOP_PRICE_LIST
|
// MYSHOP_PRICE_LIST
|
||||||
/// 아이템 가격정보 리스트 요청 정보
|
/// 아이템 가격정보 리스트 요청 정보
|
||||||
/**
|
/**
|
||||||
* first: Peer handle
|
* first: Peer handle
|
||||||
* second: 요청한 플레이어의 ID
|
* second: 요청한 플레이어의 ID
|
||||||
*/
|
*/
|
||||||
typedef std::pair< DWORD, DWORD > TItemPricelistReqInfo;
|
typedef std::pair< DWORD, DWORD > TItemPricelistReqInfo;
|
||||||
// END_OF_MYSHOP_PRICE_LIST
|
// END_OF_MYSHOP_PRICE_LIST
|
||||||
|
@ -77,7 +77,7 @@ class CClientManager : public singleton<CClientManager>
|
||||||
pAccountTable = NULL;
|
pAccountTable = NULL;
|
||||||
player_id = dwPID;
|
player_id = dwPID;
|
||||||
};
|
};
|
||||||
//독일선물기능용 생성자
|
//독일선물기능용 생성자
|
||||||
ClientHandleInfo(DWORD argHandle, DWORD dwPID, DWORD accountId)
|
ClientHandleInfo(DWORD argHandle, DWORD dwPID, DWORD accountId)
|
||||||
{
|
{
|
||||||
dwHandle = argHandle;
|
dwHandle = argHandle;
|
||||||
|
@ -116,7 +116,7 @@ class CClientManager : public singleton<CClientManager>
|
||||||
void SetChinaEventServer(bool flag) { m_bChinaEventServer = flag; }
|
void SetChinaEventServer(bool flag) { m_bChinaEventServer = flag; }
|
||||||
bool IsChinaEventServer() { return m_bChinaEventServer; }
|
bool IsChinaEventServer() { return m_bChinaEventServer; }
|
||||||
|
|
||||||
DWORD GetUserCount(); // 접속된 사용자 수를 리턴 한다.
|
DWORD GetUserCount(); // 접속된 사용자 수를 리턴 한다.
|
||||||
|
|
||||||
void SendAllGuildSkillRechargePacket();
|
void SendAllGuildSkillRechargePacket();
|
||||||
void SendTime();
|
void SendTime();
|
||||||
|
@ -136,23 +136,23 @@ class CClientManager : public singleton<CClientManager>
|
||||||
void UpdateItemCache();
|
void UpdateItemCache();
|
||||||
|
|
||||||
// MYSHOP_PRICE_LIST
|
// MYSHOP_PRICE_LIST
|
||||||
/// 가격정보 리스트 캐시를 가져온다.
|
/// 가격정보 리스트 캐시를 가져온다.
|
||||||
/**
|
/**
|
||||||
* @param [in] dwID 가격정보 리스트의 소유자.(플레이어 ID)
|
* @param [in] dwID 가격정보 리스트의 소유자.(플레이어 ID)
|
||||||
* @return 가격정보 리스트 캐시의 포인터
|
* @return 가격정보 리스트 캐시의 포인터
|
||||||
*/
|
*/
|
||||||
CItemPriceListTableCache* GetItemPriceListCache(DWORD dwID);
|
CItemPriceListTableCache* GetItemPriceListCache(DWORD dwID);
|
||||||
|
|
||||||
/// 가격정보 리스트 캐시를 넣는다.
|
/// 가격정보 리스트 캐시를 넣는다.
|
||||||
/**
|
/**
|
||||||
* @param [in] pItemPriceList 캐시에 넣을 아이템 가격정보 리스트
|
* @param [in] pItemPriceList 캐시에 넣을 아이템 가격정보 리스트
|
||||||
*
|
*
|
||||||
* 캐시가 이미 있으면 Update 가 아닌 replace 한다.
|
* 캐시가 이미 있으면 Update 가 아닌 replace 한다.
|
||||||
*/
|
*/
|
||||||
void PutItemPriceListCache(const TItemPriceListTable* pItemPriceList);
|
void PutItemPriceListCache(const TItemPriceListTable* pItemPriceList);
|
||||||
|
|
||||||
|
|
||||||
/// Flush 시간이 만료된 아이템 가격정보 리스트 캐시를 Flush 해주고 캐시에서 삭제한다.
|
/// Flush 시간이 만료된 아이템 가격정보 리스트 캐시를 Flush 해주고 캐시에서 삭제한다.
|
||||||
void UpdateItemPriceListCache(void);
|
void UpdateItemPriceListCache(void);
|
||||||
// END_OF_MYSHOP_PRICE_LIST
|
// END_OF_MYSHOP_PRICE_LIST
|
||||||
|
|
||||||
|
@ -170,8 +170,8 @@ class CClientManager : public singleton<CClientManager>
|
||||||
|
|
||||||
void SendNotice(const char * c_pszFormat, ...);
|
void SendNotice(const char * c_pszFormat, ...);
|
||||||
|
|
||||||
std::string GetCommand(char* str); //독일선물기능에서 명령어 얻는 함수
|
std::string GetCommand(char* str); //독일선물기능에서 명령어 얻는 함수
|
||||||
void ItemAward(CPeer * peer, char* login); //독일 선물 기능
|
void ItemAward(CPeer * peer, char* login); //독일 선물 기능
|
||||||
|
|
||||||
CPeer * AddPeer(bufferevent* bufev, sockaddr* addr);
|
CPeer * AddPeer(bufferevent* bufev, sockaddr* addr);
|
||||||
void RemovePeer(CPeer * pPeer);
|
void RemovePeer(CPeer * pPeer);
|
||||||
|
@ -199,9 +199,9 @@ class CClientManager : public singleton<CClientManager>
|
||||||
bool InitializeObjectTable();
|
bool InitializeObjectTable();
|
||||||
bool InitializeMonarch();
|
bool InitializeMonarch();
|
||||||
|
|
||||||
// mob_proto.txt, item_proto.txt에서 읽은 mob_proto, item_proto를 real db에 반영.
|
// mob_proto.txt, item_proto.txt에서 읽은 mob_proto, item_proto를 real db에 반영.
|
||||||
// item_proto, mob_proto를 db에 반영하지 않아도, 게임 돌아가는데는 문제가 없지만,
|
// item_proto, mob_proto를 db에 반영하지 않아도, 게임 돌아가는데는 문제가 없지만,
|
||||||
// 운영툴 등에서 db의 item_proto, mob_proto를 읽어 쓰기 때문에 문제가 발생한다.
|
// 운영툴 등에서 db의 item_proto, mob_proto를 읽어 쓰기 때문에 문제가 발생한다.
|
||||||
bool MirrorMobTableIntoDB();
|
bool MirrorMobTableIntoDB();
|
||||||
bool MirrorItemTableIntoDB();
|
bool MirrorItemTableIntoDB();
|
||||||
|
|
||||||
|
@ -260,20 +260,20 @@ class CClientManager : public singleton<CClientManager>
|
||||||
// END_PLAYER_INDEX_CREATE_BUG_FIX
|
// END_PLAYER_INDEX_CREATE_BUG_FIX
|
||||||
|
|
||||||
// MYSHOP_PRICE_LIST
|
// MYSHOP_PRICE_LIST
|
||||||
/// 가격정보 로드 쿼리에 대한 Result 처리
|
/// 가격정보 로드 쿼리에 대한 Result 처리
|
||||||
/**
|
/**
|
||||||
* @param peer 가격정보를 요청한 Game server 의 peer 객체 포인터
|
* @param peer 가격정보를 요청한 Game server 의 peer 객체 포인터
|
||||||
* @param pMsg 쿼리의 Result 로 받은 객체의 포인터
|
* @param pMsg 쿼리의 Result 로 받은 객체의 포인터
|
||||||
*
|
*
|
||||||
* 로드된 가격정보 리스트를 캐시에 저장하고 peer 에게 리스트를 보내준다.
|
* 로드된 가격정보 리스트를 캐시에 저장하고 peer 에게 리스트를 보내준다.
|
||||||
*/
|
*/
|
||||||
void RESULT_PRICELIST_LOAD(CPeer* peer, SQLMsg* pMsg);
|
void RESULT_PRICELIST_LOAD(CPeer* peer, SQLMsg* pMsg);
|
||||||
|
|
||||||
/// 가격정보 업데이트를 위한 로드 쿼리에 대한 Result 처리
|
/// 가격정보 업데이트를 위한 로드 쿼리에 대한 Result 처리
|
||||||
/**
|
/**
|
||||||
* @param pMsg 쿼리의 Result 로 받은 객체의 포인터
|
* @param pMsg 쿼리의 Result 로 받은 객체의 포인터
|
||||||
*
|
*
|
||||||
* 로드된 정보로 가격정보 리스트 캐시를 만들고 업데이트 받은 가격정보로 업데이트 한다.
|
* 로드된 정보로 가격정보 리스트 캐시를 만들고 업데이트 받은 가격정보로 업데이트 한다.
|
||||||
*/
|
*/
|
||||||
void RESULT_PRICELIST_LOAD_FOR_UPDATE(SQLMsg* pMsg);
|
void RESULT_PRICELIST_LOAD_FOR_UPDATE(SQLMsg* pMsg);
|
||||||
// END_OF_MYSHOP_PRICE_LIST
|
// END_OF_MYSHOP_PRICE_LIST
|
||||||
|
@ -353,7 +353,7 @@ class CClientManager : public singleton<CClientManager>
|
||||||
void SendAllLoginToBilling();
|
void SendAllLoginToBilling();
|
||||||
void SendLoginToBilling(CLoginData * pkLD, bool bLogin);
|
void SendLoginToBilling(CLoginData * pkLD, bool bLogin);
|
||||||
|
|
||||||
// 결혼
|
// 결혼
|
||||||
void MarriageAdd(TPacketMarriageAdd * p);
|
void MarriageAdd(TPacketMarriageAdd * p);
|
||||||
void MarriageUpdate(TPacketMarriageUpdate * p);
|
void MarriageUpdate(TPacketMarriageUpdate * p);
|
||||||
void MarriageRemove(TPacketMarriageRemove * p);
|
void MarriageRemove(TPacketMarriageRemove * p);
|
||||||
|
@ -363,19 +363,19 @@ class CClientManager : public singleton<CClientManager>
|
||||||
void WeddingEnd(TPacketWeddingEnd * p);
|
void WeddingEnd(TPacketWeddingEnd * p);
|
||||||
|
|
||||||
// MYSHOP_PRICE_LIST
|
// MYSHOP_PRICE_LIST
|
||||||
// 개인상점 가격정보
|
// 개인상점 가격정보
|
||||||
|
|
||||||
/// 아이템 가격정보 리스트 업데이트 패킷(HEADER_GD_MYSHOP_PRICELIST_UPDATE) 처리함수
|
/// 아이템 가격정보 리스트 업데이트 패킷(HEADER_GD_MYSHOP_PRICELIST_UPDATE) 처리함수
|
||||||
/**
|
/**
|
||||||
* @param [in] pPacket 패킷 데이터의 포인터
|
* @param [in] pPacket 패킷 데이터의 포인터
|
||||||
*/
|
*/
|
||||||
void MyshopPricelistUpdate(const TPacketMyshopPricelistHeader* pPacket);
|
void MyshopPricelistUpdate(const TPacketMyshopPricelistHeader* pPacket);
|
||||||
|
|
||||||
/// 아이템 가격정보 리스트 요청 패킷(HEADER_GD_MYSHOP_PRICELIST_REQ) 처리함수
|
/// 아이템 가격정보 리스트 요청 패킷(HEADER_GD_MYSHOP_PRICELIST_REQ) 처리함수
|
||||||
/**
|
/**
|
||||||
* @param peer 패킷을 보낸 Game server 의 peer 객체의 포인터
|
* @param peer 패킷을 보낸 Game server 의 peer 객체의 포인터
|
||||||
* @param [in] dwHandle 가격정보를 요청한 peer 의 핸들
|
* @param [in] dwHandle 가격정보를 요청한 peer 의 핸들
|
||||||
* @param [in] dwPlayerID 가격정보 리스트를 요청한 플레이어의 ID
|
* @param [in] dwPlayerID 가격정보 리스트를 요청한 플레이어의 ID
|
||||||
*/
|
*/
|
||||||
void MyshopPricelistRequest(CPeer* peer, DWORD dwHandle, DWORD dwPlayerID);
|
void MyshopPricelistRequest(CPeer* peer, DWORD dwHandle, DWORD dwPlayerID);
|
||||||
// END_OF_MYSHOP_PRICE_LIST
|
// END_OF_MYSHOP_PRICE_LIST
|
||||||
|
@ -413,7 +413,7 @@ class CClientManager : public singleton<CClientManager>
|
||||||
typedef std::unordered_map<DWORD, CLoginData *> TLoginDataByAID;
|
typedef std::unordered_map<DWORD, CLoginData *> TLoginDataByAID;
|
||||||
TLoginDataByAID m_map_pkLoginDataByAID;
|
TLoginDataByAID m_map_pkLoginDataByAID;
|
||||||
|
|
||||||
// Login LoginData pair (실제 로그인 되어있는 계정)
|
// Login LoginData pair (실제 로그인 되어있는 계정)
|
||||||
typedef std::unordered_map<std::string, CLoginData *> TLogonAccountMap;
|
typedef std::unordered_map<std::string, CLoginData *> TLogonAccountMap;
|
||||||
TLogonAccountMap m_map_kLogonAccount;
|
TLogonAccountMap m_map_kLogonAccount;
|
||||||
|
|
||||||
|
@ -445,14 +445,14 @@ class CClientManager : public singleton<CClientManager>
|
||||||
|
|
||||||
bool m_bShutdowned;
|
bool m_bShutdowned;
|
||||||
|
|
||||||
TPlayerTableCacheMap m_map_playerCache; // 플레이어 id가 key
|
TPlayerTableCacheMap m_map_playerCache; // 플레이어 id가 key
|
||||||
|
|
||||||
TItemCacheMap m_map_itemCache; // 아이템 id가 key
|
TItemCacheMap m_map_itemCache; // 아이템 id가 key
|
||||||
TItemCacheSetPtrMap m_map_pkItemCacheSetPtr; // 플레이어 id가 key, 이 플레이어가 어떤 아이템 캐쉬를 가지고 있나?
|
TItemCacheSetPtrMap m_map_pkItemCacheSetPtr; // 플레이어 id가 key, 이 플레이어가 어떤 아이템 캐쉬를 가지고 있나?
|
||||||
|
|
||||||
// MYSHOP_PRICE_LIST
|
// MYSHOP_PRICE_LIST
|
||||||
/// 플레이어별 아이템 가격정보 리스트 map. key: 플레이어 ID, value: 가격정보 리스트 캐시
|
/// 플레이어별 아이템 가격정보 리스트 map. key: 플레이어 ID, value: 가격정보 리스트 캐시
|
||||||
TItemPriceListCacheMap m_mapItemPriceListCache; ///< 플레이어별 아이템 가격정보 리스트
|
TItemPriceListCacheMap m_mapItemPriceListCache; ///< 플레이어별 아이템 가격정보 리스트
|
||||||
// END_OF_MYSHOP_PRICE_LIST
|
// END_OF_MYSHOP_PRICE_LIST
|
||||||
|
|
||||||
TChannelStatusMap m_mChannelStatus;
|
TChannelStatusMap m_mChannelStatus;
|
||||||
|
@ -490,7 +490,7 @@ class CClientManager : public singleton<CClientManager>
|
||||||
|
|
||||||
//BOOT_LOCALIZATION
|
//BOOT_LOCALIZATION
|
||||||
public:
|
public:
|
||||||
/* 로컬 정보 초기화
|
/* 로컬 정보 초기화
|
||||||
**/
|
**/
|
||||||
bool InitializeLocalization();
|
bool InitializeLocalization();
|
||||||
|
|
||||||
|
|
|
@ -12,28 +12,28 @@
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// \class cCsvAlias
|
/// \class cCsvAlias
|
||||||
/// \brief CSV 파일을 수정했을 때 발생하는 인덱스 문제를 줄이기 위한
|
/// \brief CSV 파일을 수정했을 때 발생하는 인덱스 문제를 줄이기 위한
|
||||||
/// 별명 객체.
|
/// 별명 객체.
|
||||||
///
|
///
|
||||||
/// 예를 들어 0번 컬럼이 A에 관한 내용을 포함하고, 1번 컬럼이 B에 관한 내용을
|
/// 예를 들어 0번 컬럼이 A에 관한 내용을 포함하고, 1번 컬럼이 B에 관한 내용을
|
||||||
/// 포함하고 있었는데...
|
/// 포함하고 있었는데...
|
||||||
///
|
///
|
||||||
/// <pre>
|
/// <pre>
|
||||||
/// int a = row.AsInt(0);
|
/// int a = row.AsInt(0);
|
||||||
/// int b = row.AsInt(1);
|
/// int b = row.AsInt(1);
|
||||||
/// </pre>
|
/// </pre>
|
||||||
///
|
///
|
||||||
/// 그 사이에 C에 관한 내용을 포함하는 컬럼이 끼어든 경우, 하드코딩되어 있는
|
/// 그 사이에 C에 관한 내용을 포함하는 컬럼이 끼어든 경우, 하드코딩되어 있는
|
||||||
/// 1번을 찾아서 고쳐야 하는데, 상당히 에러가 발생하기 쉬운 작업이다.
|
/// 1번을 찾아서 고쳐야 하는데, 상당히 에러가 발생하기 쉬운 작업이다.
|
||||||
///
|
///
|
||||||
/// <pre>
|
/// <pre>
|
||||||
/// int a = row.AsInt(0);
|
/// int a = row.AsInt(0);
|
||||||
/// int c = row.AsInt(1);
|
/// int c = row.AsInt(1);
|
||||||
/// int b = row.AsInt(2); <-- 이 부분을 일일이 신경써야 한다.
|
/// int b = row.AsInt(2); <-- 이 부분을 일일이 신경써야 한다.
|
||||||
/// </pre>
|
/// </pre>
|
||||||
///
|
///
|
||||||
/// 이 부분을 문자열로 처리하면 유지보수에 들어가는 수고를 약간이나마 줄일 수
|
/// 이 부분을 문자열로 처리하면 유지보수에 들어가는 수고를 약간이나마 줄일 수
|
||||||
/// 있다.
|
/// 있다.
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
class cCsvAlias
|
class cCsvAlias
|
||||||
|
@ -47,51 +47,51 @@ private:
|
||||||
typedef std::map<size_t, std::string> INDEX2NAME_MAP;
|
typedef std::map<size_t, std::string> INDEX2NAME_MAP;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
NAME2INDEX_MAP m_Name2Index; ///< 셀 인덱스 대신으로 사용하기 위한 이름들
|
NAME2INDEX_MAP m_Name2Index; ///< 셀 인덱스 대신으로 사용하기 위한 이름들
|
||||||
INDEX2NAME_MAP m_Index2Name; ///< 잘못된 alias를 검사하기 위한 추가적인 맵
|
INDEX2NAME_MAP m_Index2Name; ///< 잘못된 alias를 검사하기 위한 추가적인 맵
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/// \brief 생성자
|
/// \brief 생성자
|
||||||
cCsvAlias() {}
|
cCsvAlias() {}
|
||||||
|
|
||||||
/// \brief 소멸자
|
/// \brief 소멸자
|
||||||
virtual ~cCsvAlias() {}
|
virtual ~cCsvAlias() {}
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/// \brief 셀을 액세스할 때, 숫자 대신 사용할 이름을 등록한다.
|
/// \brief 셀을 액세스할 때, 숫자 대신 사용할 이름을 등록한다.
|
||||||
void AddAlias(const char* name, size_t index);
|
void AddAlias(const char* name, size_t index);
|
||||||
|
|
||||||
/// \brief 모든 데이터를 삭제한다.
|
/// \brief 모든 데이터를 삭제한다.
|
||||||
void Destroy();
|
void Destroy();
|
||||||
|
|
||||||
/// \brief 숫자 인덱스를 이름으로 변환한다.
|
/// \brief 숫자 인덱스를 이름으로 변환한다.
|
||||||
const char* operator [] (size_t index) const;
|
const char* operator [] (size_t index) const;
|
||||||
|
|
||||||
/// \brief 이름을 숫자 인덱스로 변환한다.
|
/// \brief 이름을 숫자 인덱스로 변환한다.
|
||||||
size_t operator [] (const char* name) const;
|
size_t operator [] (const char* name) const;
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// \brief 복사 생성자 금지
|
/// \brief 복사 생성자 금지
|
||||||
cCsvAlias(const cCsvAlias&) {}
|
cCsvAlias(const cCsvAlias&) {}
|
||||||
|
|
||||||
/// \brief 대입 연산자 금지
|
/// \brief 대입 연산자 금지
|
||||||
const cCsvAlias& operator = (const cCsvAlias&) { return *this; }
|
const cCsvAlias& operator = (const cCsvAlias&) { return *this; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// \class cCsvRow
|
/// \class cCsvRow
|
||||||
/// \brief CSV 파일의 한 행을 캡슐화한 클래스
|
/// \brief CSV 파일의 한 행을 캡슐화한 클래스
|
||||||
///
|
///
|
||||||
/// CSV의 기본 포맷은 엑셀에서 보이는 하나의 셀을 ',' 문자로 구분한 것이다.
|
/// CSV의 기본 포맷은 엑셀에서 보이는 하나의 셀을 ',' 문자로 구분한 것이다.
|
||||||
/// 하지만, 셀 안에 특수 문자로 쓰이는 ',' 문자나 '"' 문자가 들어갈 경우,
|
/// 하지만, 셀 안에 특수 문자로 쓰이는 ',' 문자나 '"' 문자가 들어갈 경우,
|
||||||
/// 모양이 약간 이상하게 변한다. 다음은 그 변화의 예이다.
|
/// 모양이 약간 이상하게 변한다. 다음은 그 변화의 예이다.
|
||||||
///
|
///
|
||||||
/// <pre>
|
/// <pre>
|
||||||
/// 엑셀에서 보이는 모양 | 실제 CSV 파일에 들어가있는 모양
|
/// 엑셀에서 보이는 모양 | 실제 CSV 파일에 들어가있는 모양
|
||||||
/// ---------------------+----------------------------------------------------
|
/// ---------------------+----------------------------------------------------
|
||||||
/// ItemPrice | ItemPrice
|
/// ItemPrice | ItemPrice
|
||||||
/// Item,Price | "Item,Price"
|
/// Item,Price | "Item,Price"
|
||||||
|
@ -101,9 +101,9 @@ private:
|
||||||
/// Item",Price | "Item"",Price"
|
/// Item",Price | "Item"",Price"
|
||||||
/// </pre>
|
/// </pre>
|
||||||
///
|
///
|
||||||
/// 이 예로서 다음과 같은 사항을 알 수 있다.
|
/// 이 예로서 다음과 같은 사항을 알 수 있다.
|
||||||
/// - 셀 내부에 ',' 또는 '"' 문자가 들어갈 경우, 셀 좌우에 '"' 문자가 생긴다.
|
/// - 셀 내부에 ',' 또는 '"' 문자가 들어갈 경우, 셀 좌우에 '"' 문자가 생긴다.
|
||||||
/// - 셀 내부의 '"' 문자는 2개로 치환된다.
|
/// - 셀 내부의 '"' 문자는 2개로 치환된다.
|
||||||
///
|
///
|
||||||
/// \sa cCsvFile
|
/// \sa cCsvFile
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -111,51 +111,51 @@ private:
|
||||||
class cCsvRow : public std::vector<std::string>
|
class cCsvRow : public std::vector<std::string>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/// \brief 기본 생성자
|
/// \brief 기본 생성자
|
||||||
cCsvRow() {}
|
cCsvRow() {}
|
||||||
|
|
||||||
/// \brief 소멸자
|
/// \brief 소멸자
|
||||||
~cCsvRow() {}
|
~cCsvRow() {}
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/// \brief 해당 셀의 데이터를 int 형으로 반환한다.
|
/// \brief 해당 셀의 데이터를 int 형으로 반환한다.
|
||||||
int AsInt(size_t index) const { return atoi(at(index).c_str()); }
|
int AsInt(size_t index) const { return atoi(at(index).c_str()); }
|
||||||
|
|
||||||
/// \brief 해당 셀의 데이터를 double 형으로 반환한다.
|
/// \brief 해당 셀의 데이터를 double 형으로 반환한다.
|
||||||
double AsDouble(size_t index) const { return atof(at(index).c_str()); }
|
double AsDouble(size_t index) const { return atof(at(index).c_str()); }
|
||||||
|
|
||||||
/// \brief 해당 셀의 데이터를 문자열로 반환한다.
|
/// \brief 해당 셀의 데이터를 문자열로 반환한다.
|
||||||
const char* AsString(size_t index) const { return at(index).c_str(); }
|
const char* AsString(size_t index) const { return at(index).c_str(); }
|
||||||
|
|
||||||
/// \brief 해당하는 이름의 셀 데이터를 int 형으로 반환한다.
|
/// \brief 해당하는 이름의 셀 데이터를 int 형으로 반환한다.
|
||||||
int AsInt(const char* name, const cCsvAlias& alias) const {
|
int AsInt(const char* name, const cCsvAlias& alias) const {
|
||||||
return atoi( at(alias[name]).c_str() );
|
return atoi( at(alias[name]).c_str() );
|
||||||
}
|
}
|
||||||
|
|
||||||
/// \brief 해당하는 이름의 셀 데이터를 int 형으로 반환한다.
|
/// \brief 해당하는 이름의 셀 데이터를 int 형으로 반환한다.
|
||||||
double AsDouble(const char* name, const cCsvAlias& alias) const {
|
double AsDouble(const char* name, const cCsvAlias& alias) const {
|
||||||
return atof( at(alias[name]).c_str() );
|
return atof( at(alias[name]).c_str() );
|
||||||
}
|
}
|
||||||
|
|
||||||
/// \brief 해당하는 이름의 셀 데이터를 문자열로 반환한다.
|
/// \brief 해당하는 이름의 셀 데이터를 문자열로 반환한다.
|
||||||
const char* AsString(const char* name, const cCsvAlias& alias) const {
|
const char* AsString(const char* name, const cCsvAlias& alias) const {
|
||||||
return at(alias[name]).c_str();
|
return at(alias[name]).c_str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// \brief 복사 생성자 금지
|
/// \brief 복사 생성자 금지
|
||||||
cCsvRow(const cCsvRow&) {}
|
cCsvRow(const cCsvRow&) {}
|
||||||
|
|
||||||
/// \brief 대입 연산자 금지
|
/// \brief 대입 연산자 금지
|
||||||
const cCsvRow& operator = (const cCsvRow&) { return *this; }
|
const cCsvRow& operator = (const cCsvRow&) { return *this; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// \class cCsvFile
|
/// \class cCsvFile
|
||||||
/// \brief CSV(Comma Seperated Values) 파일을 read/write하기 위한 클래스
|
/// \brief CSV(Comma Seperated Values) 파일을 read/write하기 위한 클래스
|
||||||
///
|
///
|
||||||
/// <b>sample</b>
|
/// <b>sample</b>
|
||||||
/// <pre>
|
/// <pre>
|
||||||
|
@ -179,8 +179,8 @@ private:
|
||||||
/// file.save("test.csv", false);
|
/// file.save("test.csv", false);
|
||||||
/// </pre>
|
/// </pre>
|
||||||
///
|
///
|
||||||
/// \todo 파일에서만 읽어들일 것이 아니라, 메모리 소스로부터 읽는 함수도
|
/// \todo 파일에서만 읽어들일 것이 아니라, 메모리 소스로부터 읽는 함수도
|
||||||
/// 있어야 할 듯 하다.
|
/// 있어야 할 듯 하다.
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
class cCsvFile
|
class cCsvFile
|
||||||
|
@ -188,55 +188,55 @@ class cCsvFile
|
||||||
private:
|
private:
|
||||||
typedef std::vector<cCsvRow*> ROWS;
|
typedef std::vector<cCsvRow*> ROWS;
|
||||||
|
|
||||||
ROWS m_Rows; ///< 행 컬렉션
|
ROWS m_Rows; ///< 행 컬렉션
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/// \brief 생성자
|
/// \brief 생성자
|
||||||
cCsvFile() {}
|
cCsvFile() {}
|
||||||
|
|
||||||
/// \brief 소멸자
|
/// \brief 소멸자
|
||||||
virtual ~cCsvFile() { Destroy(); }
|
virtual ~cCsvFile() { Destroy(); }
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/// \brief 지정된 이름의 CSV 파일을 로드한다.
|
/// \brief 지정된 이름의 CSV 파일을 로드한다.
|
||||||
bool Load(const char* fileName, const char seperator=',', const char quote='"');
|
bool Load(const char* fileName, const char seperator=',', const char quote='"');
|
||||||
|
|
||||||
/// \brief 가지고 있는 내용을 CSV 파일에다 저장한다.
|
/// \brief 가지고 있는 내용을 CSV 파일에다 저장한다.
|
||||||
bool Save(const char* fileName, bool append=false, char seperator=',', char quote='"') const;
|
bool Save(const char* fileName, bool append=false, char seperator=',', char quote='"') const;
|
||||||
|
|
||||||
/// \brief 모든 데이터를 메모리에서 삭제한다.
|
/// \brief 모든 데이터를 메모리에서 삭제한다.
|
||||||
void Destroy();
|
void Destroy();
|
||||||
|
|
||||||
/// \brief 해당하는 인덱스의 행을 반환한다.
|
/// \brief 해당하는 인덱스의 행을 반환한다.
|
||||||
cCsvRow* operator [] (size_t index);
|
cCsvRow* operator [] (size_t index);
|
||||||
|
|
||||||
/// \brief 해당하는 인덱스의 행을 반환한다.
|
/// \brief 해당하는 인덱스의 행을 반환한다.
|
||||||
const cCsvRow* operator [] (size_t index) const;
|
const cCsvRow* operator [] (size_t index) const;
|
||||||
|
|
||||||
/// \brief 행의 갯수를 반환한다.
|
/// \brief 행의 갯수를 반환한다.
|
||||||
size_t GetRowCount() const { return m_Rows.size(); }
|
size_t GetRowCount() const { return m_Rows.size(); }
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// \brief 복사 생성자 금지
|
/// \brief 복사 생성자 금지
|
||||||
cCsvFile(const cCsvFile&) {}
|
cCsvFile(const cCsvFile&) {}
|
||||||
|
|
||||||
/// \brief 대입 연산자 금지
|
/// \brief 대입 연산자 금지
|
||||||
const cCsvFile& operator = (const cCsvFile&) { return *this; }
|
const cCsvFile& operator = (const cCsvFile&) { return *this; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// \class cCsvTable
|
/// \class cCsvTable
|
||||||
/// \brief CSV 파일을 이용해 테이블 데이터를 로드하는 경우가 많은데, 이 클래스는
|
/// \brief CSV 파일을 이용해 테이블 데이터를 로드하는 경우가 많은데, 이 클래스는
|
||||||
/// 그 작업을 좀 더 쉽게 하기 위해 만든 유틸리티 클래스다.
|
/// 그 작업을 좀 더 쉽게 하기 위해 만든 유틸리티 클래스다.
|
||||||
///
|
///
|
||||||
/// CSV 파일을 로드하는 경우, 숫자를 이용해 셀을 액세스해야 하는데, CSV
|
/// CSV 파일을 로드하는 경우, 숫자를 이용해 셀을 액세스해야 하는데, CSV
|
||||||
/// 파일의 포맷이 바뀌는 경우, 이 숫자들을 변경해줘야한다. 이 작업이 꽤
|
/// 파일의 포맷이 바뀌는 경우, 이 숫자들을 변경해줘야한다. 이 작업이 꽤
|
||||||
/// 신경 집중을 요구하는 데다가, 에러가 발생하기 쉽다. 그러므로 숫자로
|
/// 신경 집중을 요구하는 데다가, 에러가 발생하기 쉽다. 그러므로 숫자로
|
||||||
/// 액세스하기보다는 문자열로 액세스하는 것이 약간 느리지만 낫다고 할 수 있다.
|
/// 액세스하기보다는 문자열로 액세스하는 것이 약간 느리지만 낫다고 할 수 있다.
|
||||||
///
|
///
|
||||||
/// <b>sample</b>
|
/// <b>sample</b>
|
||||||
/// <pre>
|
/// <pre>
|
||||||
|
@ -259,63 +259,63 @@ private:
|
||||||
class cCsvTable
|
class cCsvTable
|
||||||
{
|
{
|
||||||
public :
|
public :
|
||||||
cCsvFile m_File; ///< CSV 파일 객체
|
cCsvFile m_File; ///< CSV 파일 객체
|
||||||
private:
|
private:
|
||||||
cCsvAlias m_Alias; ///< 문자열을 셀 인덱스로 변환하기 위한 객체
|
cCsvAlias m_Alias; ///< 문자열을 셀 인덱스로 변환하기 위한 객체
|
||||||
int m_CurRow; ///< 현재 횡단 중인 행 번호
|
int m_CurRow; ///< 현재 횡단 중인 행 번호
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/// \brief 생성자
|
/// \brief 생성자
|
||||||
cCsvTable();
|
cCsvTable();
|
||||||
|
|
||||||
/// \brief 소멸자
|
/// \brief 소멸자
|
||||||
virtual ~cCsvTable();
|
virtual ~cCsvTable();
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/// \brief 지정된 이름의 CSV 파일을 로드한다.
|
/// \brief 지정된 이름의 CSV 파일을 로드한다.
|
||||||
bool Load(const char* fileName, const char seperator=',', const char quote='"');
|
bool Load(const char* fileName, const char seperator=',', const char quote='"');
|
||||||
|
|
||||||
/// \brief 셀을 액세스할 때, 숫자 대신 사용할 이름을 등록한다.
|
/// \brief 셀을 액세스할 때, 숫자 대신 사용할 이름을 등록한다.
|
||||||
void AddAlias(const char* name, size_t index) { m_Alias.AddAlias(name, index); }
|
void AddAlias(const char* name, size_t index) { m_Alias.AddAlias(name, index); }
|
||||||
|
|
||||||
/// \brief 다음 행으로 넘어간다.
|
/// \brief 다음 행으로 넘어간다.
|
||||||
bool Next();
|
bool Next();
|
||||||
|
|
||||||
/// \brief 현재 행의 셀 숫자를 반환한다.
|
/// \brief 현재 행의 셀 숫자를 반환한다.
|
||||||
size_t ColCount() const;
|
size_t ColCount() const;
|
||||||
|
|
||||||
/// \brief 인덱스를 이용해 int 형으로 셀값을 반환한다.
|
/// \brief 인덱스를 이용해 int 형으로 셀값을 반환한다.
|
||||||
int AsInt(size_t index) const;
|
int AsInt(size_t index) const;
|
||||||
|
|
||||||
/// \brief 인덱스를 이용해 double 형으로 셀값을 반환한다.
|
/// \brief 인덱스를 이용해 double 형으로 셀값을 반환한다.
|
||||||
double AsDouble(size_t index) const;
|
double AsDouble(size_t index) const;
|
||||||
|
|
||||||
/// \brief 인덱스를 이용해 std::string 형으로 셀값을 반환한다.
|
/// \brief 인덱스를 이용해 std::string 형으로 셀값을 반환한다.
|
||||||
const char* AsStringByIndex(size_t index) const;
|
const char* AsStringByIndex(size_t index) const;
|
||||||
|
|
||||||
/// \brief 셀 이름을 이용해 int 형으로 셀값을 반환한다.
|
/// \brief 셀 이름을 이용해 int 형으로 셀값을 반환한다.
|
||||||
int AsInt(const char* name) const { return AsInt(m_Alias[name]); }
|
int AsInt(const char* name) const { return AsInt(m_Alias[name]); }
|
||||||
|
|
||||||
/// \brief 셀 이름을 이용해 double 형으로 셀값을 반환한다.
|
/// \brief 셀 이름을 이용해 double 형으로 셀값을 반환한다.
|
||||||
double AsDouble(const char* name) const { return AsDouble(m_Alias[name]); }
|
double AsDouble(const char* name) const { return AsDouble(m_Alias[name]); }
|
||||||
|
|
||||||
/// \brief 셀 이름을 이용해 std::string 형으로 셀값을 반환한다.
|
/// \brief 셀 이름을 이용해 std::string 형으로 셀값을 반환한다.
|
||||||
const char* AsString(const char* name) const { return AsStringByIndex(m_Alias[name]); }
|
const char* AsString(const char* name) const { return AsStringByIndex(m_Alias[name]); }
|
||||||
|
|
||||||
/// \brief alias를 포함해 모든 데이터를 삭제한다.
|
/// \brief alias를 포함해 모든 데이터를 삭제한다.
|
||||||
void Destroy();
|
void Destroy();
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// \brief 현재 행을 반환한다.
|
/// \brief 현재 행을 반환한다.
|
||||||
const cCsvRow* const CurRow() const;
|
const cCsvRow* const CurRow() const;
|
||||||
|
|
||||||
/// \brief 복사 생성자 금지
|
/// \brief 복사 생성자 금지
|
||||||
cCsvTable(const cCsvTable&) {}
|
cCsvTable(const cCsvTable&) {}
|
||||||
|
|
||||||
/// \brief 대입 연산자 금지
|
/// \brief 대입 연산자 금지
|
||||||
const cCsvTable& operator = (const cCsvTable&) { return *this; }
|
const cCsvTable& operator = (const cCsvTable&) { return *this; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -2,9 +2,9 @@
|
||||||
#ifndef __INC_METIN2_DB_DBMANAGER_H__
|
#ifndef __INC_METIN2_DB_DBMANAGER_H__
|
||||||
#define __INC_METIN2_DB_DBMANAGER_H__
|
#define __INC_METIN2_DB_DBMANAGER_H__
|
||||||
|
|
||||||
// 디비 커넥션 클래스의 목적은... 디비에 접속해서 쿼리보내고 결과 받아오는
|
// 디비 커넥션 클래스의 목적은... 디비에 접속해서 쿼리보내고 결과 받아오는
|
||||||
// 모든 일들을 처리한다.
|
// 모든 일들을 처리한다.
|
||||||
// 코드 by 꼬붕 후로그래머 아노아~ = _=)b
|
// 코드 by 꼬붕 후로그래머 아노아~ = _=)b
|
||||||
#include <libsql/include/CAsyncSQL.h>
|
#include <libsql/include/CAsyncSQL.h>
|
||||||
|
|
||||||
#define SQL_SAFE_LENGTH(size) (size * 2 + 1)
|
#define SQL_SAFE_LENGTH(size) (size * 2 + 1)
|
||||||
|
|
|
@ -150,7 +150,7 @@ class CGuildWarReserve
|
||||||
void SetLastNoticeMin(int iMin) { m_iLastNoticeMin = iMin; }
|
void SetLastNoticeMin(int iMin) { m_iLastNoticeMin = iMin; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CGuildWarReserve(); // 기본 생성자를 사용하지 못하도록 의도적으로 구현하지 않음
|
CGuildWarReserve(); // 기본 생성자를 사용하지 못하도록 의도적으로 구현하지 않음
|
||||||
|
|
||||||
TGuildWarReserve m_data;
|
TGuildWarReserve m_data;
|
||||||
// <login, <guild, gold>>
|
// <login, <guild, gold>>
|
||||||
|
@ -235,7 +235,7 @@ class CGuildManager : public singleton<CGuildManager>
|
||||||
std::map<DWORD, TGuild> m_map_kGuild;
|
std::map<DWORD, TGuild> m_map_kGuild;
|
||||||
std::map<DWORD, std::map<DWORD, time_t> > m_mapGuildWarEndTime;
|
std::map<DWORD, std::map<DWORD, time_t> > m_mapGuildWarEndTime;
|
||||||
|
|
||||||
std::set<TGuildDeclareInfo> m_DeclareMap; // 선전 포고 상태를 저장
|
std::set<TGuildDeclareInfo> m_DeclareMap; // 선전 포고 상태를 저장
|
||||||
std::map<DWORD, std::map<DWORD, TGuildWarInfo> > m_WarMap;
|
std::map<DWORD, std::map<DWORD, TGuildWarInfo> > m_WarMap;
|
||||||
|
|
||||||
typedef std::pair<time_t, TGuildWarPQElement *> stPairGuildWar;
|
typedef std::pair<time_t, TGuildWarPQElement *> stPairGuildWar;
|
||||||
|
|
|
@ -49,7 +49,7 @@ namespace marriage
|
||||||
DWORD pid2;
|
DWORD pid2;
|
||||||
int love_point;
|
int love_point;
|
||||||
DWORD time;
|
DWORD time;
|
||||||
BYTE is_married; // false : 약혼 상태, true : 결혼 상태
|
BYTE is_married; // false : 약혼 상태, true : 결혼 상태
|
||||||
std::string name1;
|
std::string name1;
|
||||||
std::string name2;
|
std::string name2;
|
||||||
|
|
||||||
|
|
|
@ -64,9 +64,9 @@ class CPeer : public CPeerBase
|
||||||
BYTE m_bChannel;
|
BYTE m_bChannel;
|
||||||
DWORD m_dwHandle;
|
DWORD m_dwHandle;
|
||||||
DWORD m_dwUserCount;
|
DWORD m_dwUserCount;
|
||||||
WORD m_wListenPort; // 게임서버가 클라이언트를 위해 listen 하는 포트
|
WORD m_wListenPort; // 게임서버가 클라이언트를 위해 listen 하는 포트
|
||||||
WORD m_wP2PPort; // 게임서버가 게임서버 P2P 접속을 위해 listen 하는 포트
|
WORD m_wP2PPort; // 게임서버가 게임서버 P2P 접속을 위해 listen 하는 포트
|
||||||
LONG m_alMaps[MAP_ALLOW_MAX_LEN]; // 어떤 맵을 관장하고 있는가?
|
LONG m_alMaps[MAP_ALLOW_MAX_LEN]; // 어떤 맵을 관장하고 있는가?
|
||||||
|
|
||||||
TItemIDRangeTable m_itemRange;
|
TItemIDRangeTable m_itemRange;
|
||||||
TItemIDRangeTable m_itemSpareRange;
|
TItemIDRangeTable m_itemSpareRange;
|
||||||
|
|
|
@ -23,7 +23,7 @@ struct TPrivEmpireData
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @version 05/06/08 Bang2ni - 지속시간 추가
|
* @version 05/06/08 Bang2ni - 지속시간 추가
|
||||||
*/
|
*/
|
||||||
struct TPrivGuildData
|
struct TPrivGuildData
|
||||||
{
|
{
|
||||||
|
@ -33,7 +33,7 @@ struct TPrivGuildData
|
||||||
DWORD guild_id;
|
DWORD guild_id;
|
||||||
|
|
||||||
// ADD_GUILD_PRIV_TIME
|
// ADD_GUILD_PRIV_TIME
|
||||||
time_t end_time_sec; ///< 지속시간
|
time_t end_time_sec; ///< 지속시간
|
||||||
|
|
||||||
TPrivGuildData(BYTE type, int value, DWORD guild_id, time_t _end_time_sec)
|
TPrivGuildData(BYTE type, int value, DWORD guild_id, time_t _end_time_sec)
|
||||||
: type(type), value(value), bRemoved(false), guild_id(guild_id), end_time_sec(_end_time_sec )
|
: type(type), value(value), bRemoved(false), guild_id(guild_id), end_time_sec(_end_time_sec )
|
||||||
|
@ -53,7 +53,7 @@ struct TPrivCharData
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @version 05/06/08 Bang2ni - Guild privilege 관련 함수 지속 시간 추가
|
* @version 05/06/08 Bang2ni - Guild privilege 관련 함수 지속 시간 추가
|
||||||
*/
|
*/
|
||||||
class CPrivManager : public singleton<CPrivManager>
|
class CPrivManager : public singleton<CPrivManager>
|
||||||
{
|
{
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
|
|
||||||
#include "CsvReader.h"
|
#include "CsvReader.h"
|
||||||
|
|
||||||
//csv 파일을 읽어와서 아이템 테이블에 넣어준다.
|
//csv 파일을 읽어와서 아이템 테이블에 넣어준다.
|
||||||
void putItemIntoTable(); //(테이블, 테스트여부)
|
void putItemIntoTable(); //(테이블, 테스트여부)
|
||||||
|
|
||||||
int get_Item_Type_Value(std::string inputString);
|
int get_Item_Type_Value(std::string inputString);
|
||||||
int get_Item_SubType_Value(int type_value, std::string inputString);
|
int get_Item_SubType_Value(int type_value, std::string inputString);
|
||||||
|
@ -19,7 +19,7 @@ int get_Item_LimitType_Value(std::string inputString);
|
||||||
int get_Item_ApplyType_Value(std::string inputString);
|
int get_Item_ApplyType_Value(std::string inputString);
|
||||||
|
|
||||||
|
|
||||||
//몬스터 프로토도 읽을 수 있다.
|
//몬스터 프로토도 읽을 수 있다.
|
||||||
int get_Mob_Rank_Value(std::string inputString);
|
int get_Mob_Rank_Value(std::string inputString);
|
||||||
int get_Mob_Type_Value(std::string inputString);
|
int get_Mob_Type_Value(std::string inputString);
|
||||||
int get_Mob_BattleType_Value(std::string inputString);
|
int get_Mob_BattleType_Value(std::string inputString);
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#define __INC_METIN_II_DB_QID_H__
|
#define __INC_METIN_II_DB_QID_H__
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @version 05/06/10 Bang2ni - 아이템 가격정보 쿼리 추가(QID_ITEMPRICE_XXX)
|
* @version 05/06/10 Bang2ni - 아이템 가격정보 쿼리 추가(QID_ITEMPRICE_XXX)
|
||||||
*/
|
*/
|
||||||
enum QID
|
enum QID
|
||||||
{
|
{
|
||||||
|
@ -29,10 +29,10 @@ enum QID
|
||||||
QID_GUILD_RANKING, // 20
|
QID_GUILD_RANKING, // 20
|
||||||
|
|
||||||
// MYSHOP_PRICE_LIST
|
// MYSHOP_PRICE_LIST
|
||||||
QID_ITEMPRICE_SAVE, ///< 21, 아이템 가격정보 저장 쿼리
|
QID_ITEMPRICE_SAVE, ///< 21, 아이템 가격정보 저장 쿼리
|
||||||
QID_ITEMPRICE_DESTROY, ///< 22, 아이템 가격정보 삭제 쿼리
|
QID_ITEMPRICE_DESTROY, ///< 22, 아이템 가격정보 삭제 쿼리
|
||||||
QID_ITEMPRICE_LOAD_FOR_UPDATE, ///< 23, 가격정보 업데이트를 위한 아이템 가격정보 로드 쿼리
|
QID_ITEMPRICE_LOAD_FOR_UPDATE, ///< 23, 가격정보 업데이트를 위한 아이템 가격정보 로드 쿼리
|
||||||
QID_ITEMPRICE_LOAD, ///< 24, 아이템 가격정보 로드 쿼리
|
QID_ITEMPRICE_LOAD, ///< 24, 아이템 가격정보 로드 쿼리
|
||||||
// END_OF_MYSHOP_PRICE_LIST
|
// END_OF_MYSHOP_PRICE_LIST
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue