Files
LGram16 dd97ddec92 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>
2025-11-29 20:17:20 +09:00

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