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:
2025-11-29 20:17:20 +09:00
parent 5d3cd64a25
commit dd97ddec92
11602 changed files with 1446576 additions and 0 deletions

View File

@@ -0,0 +1,329 @@
#ifndef _CCELL_H_
#define _CCELL_H_
#pragma once
#pragma warning(disable:4800)
#include <list>
#include <algorithm>
#include <climits>
#include <boost/pool/pool_alloc.hpp>
#include <Creature/CreatureStructure.h>
#include <Network/Packet/PacketStruct/CharMovepacket.h>
#include <Network/Packet/PacketStruct/AddressPacket.h>
#include <Network/Packet/PacketStruct/CharAttackPacketStruct.h>
#include <Network/Packet/PacketStruct/CharItemPacketStruct.h>
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
class CParty;
class CCreature;
class CAggresiveCreature;
class CMonster;
class CCharacter;
class CSiegeObject;
class CBuffer;
struct PktBase;
struct PktMVEx;
namespace Item
{
class CItem;
};
class CCell
{
public:
enum ErrorCode
{
S_SUCCESS = 0,
S_AUTO_ROUTING = 1,
E_NOT_ENOUGH_MEMORY = 2,
E_NOT_OWNER_OF_ITEM = 3,
E_NOT_ITEM = 4,
E_CREATE_ITEM_FAIL = 5,
E_NOT_EXIST_GUILD = 6,
E_GOLD_OVERFLOW = 7
};
enum Const
{
CONNECT_NUM = 9,
CHECK_TIME = 100, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϴ<EFBFBD><CFB4><EFBFBD> üũ<C3BC>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> (10<31><30>)
ITEM_RIGHT_TIME = 1600, // <20>÷<EFBFBD><C3B7>̾ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 10<31><30>, <20>ٽ<EFBFBD> 2<><32> 30<33><30> <20>Ŀ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
ITEM_LIFE_TIME = 1800, // <20>ʿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD> <20>ð<EFBFBD> (3<><33>)
NO_OWNER_TIME = 1500, // <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> (2<><32> 30<33><30>)
BROADCASTING_TIME = 10, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ε<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> Ÿ<><C5B8> (1<><31>)
MONEY_BIT = 0x80000000,
TYPE_CHECK_BIT = 0xF0000000,
ITEM_PROTOTYPE_ID_BIT = 0x0000FFFF,
MAX_MONEY_AMOUNT = 0x0FFFFFFF
};
enum TurnConst
{
TURN_OF_CHARACTER = 0,
TURN_OF_SIEGE_OBJECT = 1,
TURN_OF_MONSTER = 2,
TURN_END = 3
};
enum Weather
{
WEATHER_FINE = 0, // <20><><EFBFBD><EFBFBD>
WEATHER_RAIN = 1, // <20><>
WEATHER_SNOW = 2, // <20><>
MAX_WEATHER = 3
};
enum ItemAutoRouting
{
NONE = 0, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
PARTY = 1, // <20><>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
GUILD = 2, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
};
enum ConnectCell
{
NO = 0,
UP = 1,
DOWN = 2,
LEFT = 3,
RIGHT = 4,
UPPERLEFT = 5,
UPPERRIGHT = 6,
LOWERLEFT = 7,
LOWERRIGHT = 8
};
enum CellSize
{
CELL_SIZE_DEFAULT = 128,
CELL_SIZE_BATTLE_SERVER = 70,
CELL_DISTANCE = 32,
CELL_RESOLUTION = 5
};
static unsigned char ms_CellSize;
struct IDField
{
enum
{
MAX_UID = UCHAR_MAX
};
unsigned long dwUID; // <20><><EFBFBD><EFBFBD>ũ ID (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ʴ<EFBFBD><CAB4><EFBFBD>...)
unsigned short wMapIndex; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ε<EFBFBD><CEB5><EFBFBD>
unsigned char cCellX; // <20><> <20>ε<EFBFBD><CEB5><EFBFBD> X
unsigned char cCellZ; // <20><> <20>ε<EFBFBD><CEB5><EFBFBD> Z
};
struct ItemInfo
{
Position m_Pos; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ġ
union
{
unsigned __int64 m_nUniqueID; // <20><><EFBFBD><EFBFBD>ũ ID
IDField m_Field;
} UID;
Item::CItem* m_lpItem; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned long m_dwGold; // <20><>
unsigned long m_dwOwnerID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned short m_wPulse; // <20>Ҹ<EFBFBD><D2B8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>޽<EFBFBD>
unsigned char m_cAutoRouting; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΰ<EFBFBD>? (ItemAutoRouting enum <20><><EFBFBD><EFBFBD>)
ItemInfo();
void MakeFieldObject(FieldObject& fieldObject);
};
typedef std::list<CMonster*, boost::fast_pool_allocator<CMonster*> > MonsterList;
typedef std::list<CCharacter*, boost::fast_pool_allocator<CCharacter*> > CharacterList;
typedef std::list<ItemInfo, boost::fast_pool_allocator<ItemInfo> > ItemList;
typedef std::list<CSiegeObject*, boost::fast_pool_allocator<CSiegeObject*> > SiegeObjectList;
//--------------------------------------------------------------------------------------------
// <20>ʱ<EFBFBD>ȭ
CCell();
~CCell();
void Initialize(unsigned char cIndexX, unsigned char cIndexZ); // <20><> <20><>ǥ<EFBFBD><C7A5> <20>ʱ<EFBFBD>ȭ<EFBFBD>ϰ<EFBFBD>, <20><>Ʈ<EFBFBD><C6AE> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
void SetMapIndex(unsigned short wMapIndex) { m_wMapIndex = wMapIndex; }
unsigned short GetMapIndex() { return m_wMapIndex; }
//--------------------------------------------------------------------------------------------
// interface
CCell* GetConnectCell(unsigned int Dir);
void SetConnectCell(unsigned int Dir, CCell* lpConnectedCell);
bool IsNearCell(CCell* lpNearCell);
//--------------------------------------------------------------------------------------------
// <20><> <20><><EFBFBD><EFBFBD>
unsigned char GetIndexX() const { return m_cIndexX; }
unsigned char GetIndexZ() const { return m_cIndexZ; }
size_t GetMonsterNum() const { return m_lstMonster.size(); }
size_t GetCharacterNum() const { return m_lstCharacter.size(); }
size_t GetItemNum() const { return m_lstItem.size(); }
size_t GetSiegeObjectNum() const { return m_lstSiegeObject.size(); }
size_t GetNearCellCharacterNum() const;
//--------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD> ũ<><C5A9><EFBFBD><EFBFBD> <20>߰<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
void SetCreature(unsigned long dwCID, CCreature* lpCreature, CCell* lpLastLogoutCell = 0);
void DeleteCreature(unsigned long dwCID, CCell* lpPrepareLoginCell = 0);
CCreature* GetCreature(unsigned long dwCID);
CAggresiveCreature* GetFirstAggresiveCreature();
CAggresiveCreature* GetNextAggresiveCreature();
void KillAll(CCharacter* lpAttacker);
//--------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ó<><C3B3>
bool IsMonster() const { return !(m_lstMonster.empty()); }
CMonster* GetFirstMonster();
CMonster* GetNextMonster() { return (++m_MonsterIt != m_lstMonster.end()) ? *m_MonsterIt : NULL; }
void LogoutAllMonster() { m_lstMonster.clear(); }
//--------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> ó<><C3B3>
bool IsSiegeObject() { return !(m_lstSiegeObject.empty()); }
CSiegeObject* GetFirstAirShip();
CSiegeObject* GetNextAirShip();
CSiegeObject* GetFirstSiegeObject();
CSiegeObject* GetNextSiegeObject();
void UpgradeByEmblem(unsigned long dwCID);
void DegradeByEmblem();
bool IsDetectionCell() { return ( 0 != m_dwCastleEmblemCID ); }
void DetectionAttack(CSiegeObject* lpEmblem, CAggresiveCreature* lpTargetCreature);
bool SendStealthInfo(CCharacter& character, bool bUseStealth);
//--------------------------------------------------------------------------------------------
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ó<><C3B3>
bool IsCharacter() { return !(m_lstCharacter.empty()); }
CCharacter* GetFirstCharacter();
CCharacter* GetNextCharacter() { return (++m_CharacterIt != m_lstCharacter.end()) ? *m_CharacterIt : NULL; }
template<typename FnProcess>
inline void ProcessAllMonster(FnProcess fnProcess)
{
std::for_each(m_lstMonster.begin(), m_lstMonster.end(), fnProcess);
}
template<typename FnProcess>
inline void ProcessAllCharacter(FnProcess fnProcess)
{
std::for_each(m_lstCharacter.begin(), m_lstCharacter.end(), fnProcess);
}
void RespawnAllCharacter(unsigned char cExceptNation);
//--------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ó<><C3B3>
bool IsItem(void) { return !(m_lstItem.empty()); }
void SetItem(const Position& Pos, Item::CItem* lpItem, unsigned long dwGold,
unsigned long dwOwnerID, unsigned char cAutoRouting, CCell::ItemInfo& cellItemInfo);
CCell::ErrorCode GetItem(unsigned long dwCreatureID, unsigned __int64 nItemInfoID,
Item::CItem** lppItem, unsigned long& dwMoney_Out);
void CheckDeleteItem(void);
void DeleteAllItem(void);
//--------------------------------------------------------------------------------------------
// <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ε<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD>
void PrepareBroadCast();
void BroadCast(unsigned long dwCurrentPulse);
// <20><><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6>, Wrap<61><70><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD>ο<EFBFBD><CEBF><EFBFBD> Wrap<61><70>. srvState<74><65> usError<6F><72> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.)
// <20><>Ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
void SendAllNearCellCharacter(const PktBase* lpPktBase, unsigned short usLength, unsigned char cCMD);
void SendAllCharacter(const PktBase* lpPktBase, unsigned short usLength, unsigned char cCMD);
void SendNowAllNearCellCharacter(const char* szData, unsigned short usLength, unsigned char cCMD);
void SendNowAllCharacter(const char* szData, unsigned short usLength, unsigned char cCMD);
void SendAttackInfo(unsigned long AttackerID_In, const AtType &AtType_In,
unsigned char DefenserNum_In, DefenserNode* lpNode_In);
void SendCastObjectInfo(unsigned long SenderID, unsigned long ReceiverID, CastObject& CastObject_In);
private:
//--------------------------------------------------------------------------------------------
// <20><>Ŷ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD>ο<EFBFBD><CEBF><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>ϴ<EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD>)
void SendPullDownInfo(unsigned long dwOwnerID, ItemInfo& itemInfo);
void SendPickUpInfo(unsigned long dwCreatureID, unsigned __int64 nItemInfoID);
void SendCellLogin(CAggresiveCreature* lpAggresiveCreature, CCell* lpLastLogoutCell);
void SendCellLogout(CAggresiveCreature* lpAggresiveCreature, CCell* lpPrepareLoginCell);
// <20><><EFBFBD>۸<EFBFBD> <20><><EFBFBD><EFBFBD> Release<73>Ѵ<EFBFBD>.
static void ReleaseAllBuffer(CBuffer*& lpBuffer);
//--------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CCell* m_lpConnectCell[CONNECT_NUM]; // <20>ֺ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ. <20>ڱ<EFBFBD> <20>ڽŵ<DABD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
CCell* m_lpSortedConnectedCell[CONNECT_NUM]; // <20>ֺ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>迭.
CharacterList m_lstCharacter;
MonsterList m_lstMonster;
ItemList m_lstItem;
SiegeObjectList m_lstSiegeObject; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> CSiegeObjectMgr <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
MonsterList::iterator m_MonsterIt; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>... <20><> <20><EFBFBD><E0BCAE> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> <20><EFBFBD><E0BCAE> <20>޶<EFBFBD><DEB6><EFBFBD> <20>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
CharacterList::iterator m_CharacterIt; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>... <20><> <20><EFBFBD><E0BCAE> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> <20><EFBFBD><E0BCAE> <20>޶<EFBFBD><DEB6><EFBFBD> <20>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
SiegeObjectList::iterator m_SiegeObjectIt; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>... <20><> <20><EFBFBD><E0BCAE> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> <20><EFBFBD><E0BCAE> <20>޶<EFBFBD><DEB6><EFBFBD> <20>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
CBuffer* m_lpBroadcast2ndBuffer; // <20><><EFBFBD>ε<EFBFBD>ij<EFBFBD><C4B3>Ʈ 2nd<6E><64><EFBFBD><EFBFBD>(<28><> <20><><EFBFBD>ε<EFBFBD>ij<EFBFBD><C4B3>Ʈ <20><><EFBFBD><EFBFBD>, ij<><C4B3><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD>)
unsigned long m_dwCastleEmblemCID; // <20><> <20><>¡<EFBFBD><C2A1><EFBFBD><EFBFBD> <20><><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD≯<EFBFBD> <20><>¡<EFBFBD><C2A1><EFBFBD><EFBFBD> CID<49><44> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD>.
unsigned short m_wMapIndex; // <20><> <20>ε<EFBFBD><CEB5><EFBFBD>
unsigned char m_cIndexX; // <20><> X<><58>ǥ
unsigned char m_cIndexZ; // <20><> Z<><5A>ǥ
unsigned char m_cTurnOfGetAggresiveCreature;
CCell::Weather m_eWeather; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
};
#endif