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>
147 lines
3.9 KiB
C++
147 lines
3.9 KiB
C++
#ifndef _RYL_REBALANCE_LIB_REBALANCE_H_
|
|
#define _RYL_REBALANCE_LIB_REBALANCE_H_
|
|
|
|
#pragma once
|
|
#pragma warning(disable:4800)
|
|
|
|
#include <map>
|
|
#include <boost/pool/pool_alloc.hpp>
|
|
#include <RylDBLibrary/RylDBLibrary.h>
|
|
#include <Item/RebalanceConvert/RebalanceItem.h>
|
|
|
|
// forward decl.
|
|
class CSkillMgr;
|
|
|
|
namespace Item
|
|
{
|
|
// forward decl.
|
|
class CItemMgr;
|
|
}
|
|
|
|
namespace OldItem
|
|
{
|
|
// forward decl.
|
|
class CItemMgr;
|
|
}
|
|
|
|
namespace RebalanceLib
|
|
{
|
|
|
|
// forward decl.
|
|
class CItemChecker;
|
|
|
|
|
|
// Key 는 UID 혹은 CID
|
|
// Value 는 스킬 개수
|
|
typedef std::map<unsigned long, SkillBookInfo, std::less<unsigned long>,
|
|
boost::fast_pool_allocator<std::pair<unsigned long, SkillBookInfo> > > SkillDataMap;
|
|
|
|
// Key 는 UID 혹은 CID
|
|
// Value 는 추가할 금액
|
|
typedef std::map<unsigned long, unsigned long, std::less<unsigned long>,
|
|
boost::fast_pool_allocator<std::pair<unsigned long, unsigned long> > > GoldDataMap;
|
|
|
|
|
|
// 스킬 읽기
|
|
class CDBReadSkill : public IDBCharSkillProcess
|
|
{
|
|
public:
|
|
|
|
CDBReadSkill(SkillDataMap& CIDSkillDataMap, bool bClearSkill = false);
|
|
virtual ConvertResult operator()(RylDBCommand::CSkillData& charSkillData_InOut);
|
|
|
|
private:
|
|
|
|
SkillDataMap& m_CIDSkillDataMap;
|
|
bool m_bClearSkill;
|
|
};
|
|
|
|
|
|
// 남은 스킬북 로그로 남기기
|
|
void LogRemainSkillBook(SkillDataMap& SkillDataMap, const char* szHeader);
|
|
|
|
// 남은 돈 로그로 남기기
|
|
void LogRemainGold(GoldDataMap& GoldDataMap, const char* szHeader);
|
|
|
|
|
|
// 스킬북 제거 및 카운팅 / 장비 컨버팅
|
|
class CDBItemConvert :
|
|
public IDBCharItemProcess,
|
|
public IDBCharItemExProcess,
|
|
public IDBStoreProcess
|
|
{
|
|
public:
|
|
|
|
// SkillDataMap을 넣으면, 스킬북을 제거하고 컨버팅한다.
|
|
CDBItemConvert(
|
|
CDBItemSerialMgr& dbItemSerialMgr,
|
|
Item::CItemMgr& newItemMgr, OldItem::CItemMgr& oldItemMgr,
|
|
SkillDataMap* lpUIDSkillDataMap, SkillDataMap* lpCIDSkillDataMap,
|
|
bool bConvertRebalanceItem = true, bool bRenumberingItemUID = true);
|
|
|
|
virtual ConvertResult operator()(RylDBCommand::CCharItem& charItem_InOut);
|
|
virtual ConvertResult operator()(RylDBCommand::CCharItemEx& charItemEx_InOut);
|
|
virtual ConvertResult operator()(RylDBCommand::CUnifiedStore1& unifiedStore1_InOut);
|
|
virtual ConvertResult operator()(RylDBCommand::CUnifiedStore2& unifiedStore2_InOut);
|
|
|
|
// 컨테이너를 컨버트한다.
|
|
bool ConvertData(unsigned long dwUID, unsigned long dwCID,
|
|
CItemChecker* lpItemChecker,
|
|
const char* szOriginalData, unsigned long dwOriginalSize,
|
|
char* szChangedData, unsigned long& dwChangedSize_InOut);
|
|
|
|
// 1/2단계 스킬북을 돈으로 바꿔 준다.
|
|
static void ChangeSkillBookToGold(SkillDataMap& skillDataMap, GoldDataMap& goldDataMap);
|
|
|
|
// 3/4단계 스킬북을 빈 컨테이너에 삽입한다.
|
|
static void GiveSkillBook(unsigned long dwUID, unsigned long dwCID,
|
|
CDBItemSerialMgr& DBItemSerialMgr, SkillBookInfo& skillData,
|
|
CItemChecker& itemChecker, const char* szPosition,
|
|
char* szData_InOut, unsigned long& dwDataSize_InOut);
|
|
|
|
private:
|
|
|
|
CDBItemSerialMgr& m_DBItemSerialMgr;
|
|
Item::CItemMgr& m_newItemMgr;
|
|
OldItem::CItemMgr& m_oldItemMgr;
|
|
|
|
SkillDataMap* m_lpUIDSkillDataMap;
|
|
SkillDataMap* m_lpCIDSkillDataMap;
|
|
|
|
bool m_bConvertRebalanceItem;
|
|
bool m_bRenumberingItemUID;
|
|
};
|
|
|
|
|
|
// 캐릭터에 돈 넣어주기
|
|
class CDBAddCharGold : public IDBCharInfoProcess
|
|
{
|
|
public:
|
|
|
|
CDBAddCharGold(GoldDataMap& CIDGoldDataMap);
|
|
virtual ConvertResult operator()(RylDBCommand::CCharData& charData_InOut);
|
|
|
|
private:
|
|
|
|
GoldDataMap& m_CIDGoldDataMap;
|
|
};
|
|
|
|
|
|
// 통합서버 창고에 돈 넣어주기
|
|
class CDBAddUnifiedStoreGold : public IDBStoreProcess
|
|
{
|
|
public:
|
|
|
|
CDBAddUnifiedStoreGold(GoldDataMap& UIDGoldDataMap);
|
|
|
|
virtual ConvertResult operator()(RylDBCommand::CUnifiedStore1& unifiedStore1_InOut);
|
|
virtual ConvertResult operator()(RylDBCommand::CUnifiedStore2& unifiedStore2_InOut);
|
|
|
|
private:
|
|
|
|
GoldDataMap& m_UIDGoldDataMap;
|
|
};
|
|
|
|
}
|
|
|
|
#endif |