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,345 @@
#include "stdafx.h"
#include "ParseMoveZone.h"
#include <Creature/CreatureManager.h>
#include <Network/Dispatch/GameDispatch.h>
#include <Network/SendPacket/SendMoveZone.h>
#include <Network/Packet/PacketStruct/ServerInfo.h>
#include <Network/Packet/PacketStruct/ServerPacket.h>
#include <DataStorage/CharacterData.h>
#include <DataStorage/SessionData.h>
#include <DataStorage/SessionDataMgr.h>
#include <Log/ServerLog.h>
#include <Utility/Setup/ServerSetup.h>
#include <GameTime/GameTimeDBMgr.h>
namespace DBAgent
{
namespace ParseMoveZone
{
bool CharMoveZone(CSendStream& SendStream, PktSZMvD* lpPktSZMvD);
bool ServerZone(CSendStream& SendStream, PktSA* lpPktSA);
bool ServerZoneEnd(CSendStream& SendStream, PktDD* lpPktDD);
bool Parse(CSendStream& SendStream, PktBase* lpPktBase)
{
bool bResult = false;
PktDD* lpPktDD = static_cast<PktDD*>(lpPktBase);
switch (lpPktDD->m_wCmd)
{
case PktDD::SCmdCharMoveZone:
bResult = CharMoveZone(SendStream, static_cast<PktSZMvD*>(lpPktDD));
break;
case PktDD::SCmdServerZone:
bResult = ServerZone(SendStream, static_cast<PktSA*>(lpPktDD));
break;
case PktDD::SCmdServerZoneEnd:
bResult = ServerZoneEnd(SendStream, lpPktDD);
break;
default:
ERRLOG1(g_Log, "ZoneMove <20><>Ŷ ó<><C3B3> <20><><EFBFBD><EFBFBD> : <20><> <20><> <20><><EFBFBD><EFBFBD> <20><>Ŷ CMD:0x%02X<32><58> <20>޾ҽ<DEBE><D2BD>ϴ<EFBFBD>.",
lpPktDD->m_wCmd);
bResult = true;
break;
}
return bResult;
}
class CFindGameServerDispatch
{
public:
CFindGameServerDispatch(CGameDispatch*& lpGameDispatch, SERVER_ID serverID)
: m_lpGameDispatch(lpGameDispatch), m_serverID(serverID)
{
m_lpGameDispatch = 0;
}
bool operator() (unsigned long dwServerID, CPacketDispatch& packetDispatch)
{
if(0 == m_lpGameDispatch)
{
SERVER_ID serverID;
serverID.dwID = dwServerID;
// <20><><EFBFBD><EFBFBD> ID<49><44> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20>ٸ<EFBFBD><D9B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, ä<>θ<EFBFBD> -1<>̰<EFBFBD> <20>ٸ<EFBFBD><D9B8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
if ((serverID.dwID == m_serverID.dwID) ||
(-1 == m_serverID.GetChannel() &&
serverID.GetZone() == m_serverID.GetZone() &&
serverID.GetGroup() == m_serverID.GetGroup() &&
serverID.GetType() == m_serverID.GetType()))
{
m_lpGameDispatch = &static_cast<CGameDispatch&>(packetDispatch);
}
}
return true;
}
private:
CGameDispatch*& m_lpGameDispatch;
SERVER_ID m_serverID;
};
bool CharMoveZone(CSendStream& SendStream, PktSZMvD* lpPktSZMvD)
{
unsigned long dwRequestKey = lpPktSZMvD->m_dwRequestKey;
unsigned long dwUID = lpPktSZMvD->m_dwUserID;
const POS& Pos = lpPktSZMvD->m_NewPos;
char cZone = lpPktSZMvD->m_cZone;
char cChannel = lpPktSZMvD->m_cChannel;
#ifdef ENABLE_PACKET_LOG
DETLOG4(g_PacketLog, "ParseMoveZone::CharMoveZone : UID:%10u / CID:%10u / SessionID:%10u / ServerID:0x%08X / ",
dwUID, 0, 0, 0);
#endif
unsigned short usError = 0;
using namespace DataStorage;
CSessionData* lpSessionData = CSessionDataMgr::GetInstance().GetOpenSession(dwUID);
CCharacterData* lpCharacterData = 0;
SERVER_ID serverID;
serverID.sID.Type = CServerSetup::GameServer;
serverID.sID.Group = CServerSetup::GetInstance().GetServerGroup();
serverID.sID.Channel = cChannel;
serverID.sID.ID = cZone;
CGameDispatch* lpGameDispatch = 0;
CGameDispatch::GetDispatchTable().Process(
CFindGameServerDispatch(lpGameDispatch, serverID));
if (0 == lpSessionData)
{
ERRLOG1(g_Log, "UID:%10u / ij<><C4B3><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>.", dwUID);
usError = PktSZMvDAck::FAIL_INVALID_CHAR;
}
else if (0 == (lpCharacterData = lpSessionData->GetCharacterData()))
{
ERRLOG1(g_Log, "UID:%10u / ij<><C4B3><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD> : ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> <20>ʾҽ<CABE><D2BD>ϴ<EFBFBD>.", dwUID);
usError = PktSZMvDAck::FAIL_INVALID_CHAR;
}
else if (0 == lpGameDispatch)
{
ERRLOG2(g_Log, "UID:%10u / ServerID:0x%08X / ij<><C4B3><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.",
dwUID, serverID.dwID);
usError = PktSZMvDAck::FAIL_INVALID_ZONE;
}
else if (0 == lpSessionData->GetAdminLevel())
{
// edith 2009.06.13 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> üũ
if(SERVER_ID::STONE_WAR1 <= cZone && cZone <= SERVER_ID::STONE_WAR3)
{
if (CServerSetup::GetInstance().GetBattleLimit() < lpGameDispatch->GetCharNum())
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʹ<EFBFBD> <20><><EFBFBD><EFBFBD>.
ERRLOG2(g_Log, "UID:%10u / ServerID:0x%08X / ij<><C4B3><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.",
dwUID, serverID.dwID);
usError = PktSZMvDAck::FAIL_PERSONNEL_OVER;
}
else
{
int maxDefaultUser = 10;
float limitPer = (float)CServerSetup::GetInstance().GetBattleLimitPer()/100.f;
if(limitPer < 1.0f)
limitPer = 1.0f;
int akhanUser = lpGameDispatch->GetCharNum(CClass::AKHAN);
int humanUser = lpGameDispatch->GetCharNum(CClass::HUMAN);
// <20><><EFBFBD><EFBFBD> <20>ΰ<EFBFBD><CEB0>̰<EFBFBD>, <20>ΰ<EFBFBD><CEB0><EFBFBD> <20><>ĭ<EFBFBD><C4AD><EFBFBD><EFBFBD> 1.5<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ȳ<EFBFBD≯<EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ұ<EFBFBD>.
if (CClass::HUMAN == lpCharacterData->GetRace())
{
int overCount = (int)((float)akhanUser * limitPer) - akhanUser;
if(overCount < maxDefaultUser)
overCount = maxDefaultUser;
int overUser = akhanUser + overCount;
if(overUser < lpGameDispatch->GetCharNum(CClass::HUMAN))
{
ERRLOG2(g_Log, "UID:%10u / ServerID:0x%08X / ij<><C4B3><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD> : <20>ΰ<EFBFBD><CEB0><EFBFBD><EFBFBD><EFBFBD> <20>ұ<EFBFBD><D2B1><EFBFBD>.",
dwUID, serverID.dwID);
usError = PktSZMvDAck::FAIL_PERSONNEL_OVER;
}
}
// <20><><EFBFBD><EFBFBD> <20><>ĭ<EFBFBD>̰<EFBFBD>, <20><>ĭ<EFBFBD><C4AD> <20>ΰ<EFBFBD><CEB0><EFBFBD><EFBFBD><EFBFBD> 1.5<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ȳ<EFBFBD≯<EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ұ<EFBFBD>.
else if (CClass::AKHAN == lpCharacterData->GetRace())
{
int overCount = (int)((float)humanUser * limitPer) - humanUser;
if(overCount < maxDefaultUser)
overCount = maxDefaultUser;
int overUser = humanUser + overCount;
if(overUser < lpGameDispatch->GetCharNum(CClass::AKHAN))
{
ERRLOG2(g_Log, "UID:%10u / ServerID:0x%08X / ij<><C4B3><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD> : <20><>ĭ<EFBFBD><C4AD><EFBFBD><EFBFBD> <20>ұ<EFBFBD><D2B1><EFBFBD>.",
dwUID, serverID.dwID);
usError = PktSZMvDAck::FAIL_PERSONNEL_OVER;
}
}
}
}
else if (SERVER_ID::ZONE3 == cZone)
{
// <20><>Ʋ<EFBFBD>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ο<EFBFBD> <20><><EFBFBD><EFBFBD> üũ
// 2008.10.12 ZONE3<45><33> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
ERRLOG3(g_Log, "UID:%10u / 3<><33> <20><> <20><><EFBFBD><EFBFBD> <20>õ<EFBFBD> : Zone(%d,%d)", dwUID, cZone, cChannel);
usError = PktSZMvDAck::FAIL_INVALID_CHAR;
/*
SYSTEMTIME systemTime;
GetSystemTime(&systemTime);
// <20><>Ʋ <20>׶<EFBFBD><D7B6><EFBFBD><EFBFBD><EFBFBD> <20>޽<EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>.
if ((systemTime.wMinute >= STATUE_REST_TIME_1ST_START && systemTime.wMinute <= STATUE_REST_TIME_1ST_END) ||
(systemTime.wMinute >= STATUE_REST_TIME_2ND_START && systemTime.wMinute <= STATUE_REST_TIME_2ND_END))
{
cZone = lpDataSession->GetCharDataSession().GetCharStartZone(lpCharacterData->GetRace());
}
*/
/* SERVER_ID serverID;
serverID.sID.Type = CServerSetup::GameServer;
serverID.sID.Group = CServerSetup::GetInstance().GetServerGroup();
serverID.sID.Channel = cChannel;
serverID.sID.ID = cZone;
CGameDispatch* lpGameDispatch = 0;
CGameDispatch::GetDispatchTable().Process(
CFindGameServerDispatch(lpGameDispatch, serverID));
if (0 == lpGameDispatch)
{
ERRLOG2(g_Log, "UID:%10u / ServerID:0x%08X / ij<><C4B3><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.",
dwUID, serverID.dwID);
usError = PktSZMvDAck::FAIL_INVALID_ZONE;
}
else if (CServerSetup::GetInstance().GetBattleLimit() > lpGameDispatch->GetCharNum())
{
// <20><><EFBFBD><EFBFBD> <20>ΰ<EFBFBD><CEB0>̰<EFBFBD>, <20>ΰ<EFBFBD><CEB0><EFBFBD> <20><>ĭ<EFBFBD><C4AD><EFBFBD><EFBFBD> 1.5<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ȳ<EFBFBD≯<EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ұ<EFBFBD>.
if (CClass::HUMAN == lpCharacterData->GetRace() &&
lpGameDispatch->GetCharNum(CClass::AKHAN) * 1.5 < lpGameDispatch->GetCharNum(CClass::HUMAN))
{
usError = PktSZMvDAck::FAIL_PERSONNEL_OVER;
}
// <20><><EFBFBD><EFBFBD> <20><>ĭ<EFBFBD>̰<EFBFBD>, <20><>ĭ<EFBFBD><C4AD> <20>ΰ<EFBFBD><CEB0><EFBFBD><EFBFBD><EFBFBD> 1.5<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ȳ<EFBFBD≯<EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ұ<EFBFBD>.
else if (CClass::AKHAN == lpCharacterData->GetRace() &&
lpGameDispatch->GetCharNum(CClass::HUMAN ) * 1.5 < lpGameDispatch->GetCharNum(CClass::AKHAN))
{
usError = PktSZMvDAck::FAIL_PERSONNEL_OVER;
}
}
*/
}
}
// if(SERVER_ID::STONE_WAR1 <= cZone && cZone <= SERVER_ID::STONE_WAR3)
// usError = PktSZMvDAck::FAIL_PERSONNEL_OVER;
if(0 == usError && 0 != lpSessionData)
{
// <20≯<EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD>
if (!lpSessionData->SetMoveZone(cZone, Pos))
{
/*
if(SERVER_ID::ZONE5 == cZone && !CGameTimeDBMgr::GetInstance().IsEnterTime())
{
// <20>׼<EFBFBD><D7BC><EFBFBD> <20>ű<EFBFBD><C5B1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѿ<EFBFBD> <20>ɷ<EFBFBD><C9B7><EFBFBD>.
DETLOG5(g_Log, "UID:%10u / Zone:%2u / X:%f / Y:%f / Z:%f / ij<><C4B3><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD> : <20>ű<EFBFBD><C5B1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.",
dwUID, cZone, Pos.fPointX, Pos.fPointY, Pos.fPointZ);
}
else
{
ERRLOG5(g_Log, "UID:%10u / Zone:%2u / X:%f / Y:%f / Z:%f / ij<><C4B3><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD> : <20>߸<EFBFBD><DFB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20>õ<EFBFBD>.",
dwUID, cZone, Pos.fPointX, Pos.fPointY, Pos.fPointZ);
}
*/
ERRLOG5(g_Log, "UID:%10u / Zone:%2u / X:%f / Y:%f / Z:%f / ij<><C4B3><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD> : <20>߸<EFBFBD><DFB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20>õ<EFBFBD>.",
dwUID, cZone, Pos.fPointX, Pos.fPointY, Pos.fPointZ);
usError = PktSZMvDAck::FAIL_INVALID_ZONE;
}
}
// edith 2009.06.28 <20><><EFBFBD>̵<EFBFBD><CCB5><EFBFBD><EFBFBD>н<EFBFBD> <20><><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7>׸<EFBFBD> <20><><EFBFBD>ش<EFBFBD>.
// gameserver<65><72><EFBFBD><EFBFBD> dbagnet<65><74> <20><>Ŷ <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>ҽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
if(0 != usError)
{
if(SERVER_ID::STONE_WAR1 <= cZone && cZone <= SERVER_ID::STONE_WAR3)
lpCharacterData->SetRealmWarFlag(Creature::WAR_OFF);
else if(SERVER_ID::CAPITAL == cZone)
lpCharacterData->SetGuildWarFlag(Creature::WAR_OFF);
}
return (-1 == cChannel || 0 != usError) ?
// ä<><C3A4><EFBFBD><EFBFBD> -1<>̰ų<CCB0>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD>.
SendPacket::CharMoveZone(SendStream, dwRequestKey, cZone, usError)
: SendPacket::ServerZone(SendStream, dwRequestKey, cZone, cChannel);
}
bool ServerZone(CSendStream& SendStream, PktSA* lpPktSA)
{
unsigned long dwUID = lpPktSA->m_dwUserID;
unsigned short usError = 0;
#ifdef ENABLE_PACKET_LOG
DETLOG4(g_PacketLog, "ParseMoveZone::ServerZone : UID:%10u / CID:%10u / SessionID:%10u / ServerID:0x%08X / ",
dwUID, 0, 0, 0);
#endif
using namespace DataStorage;
CSessionData* lpSessionData = CSessionDataMgr::GetInstance().GetOpenSession(dwUID);
if (0 == lpSessionData)
{
ERRLOG1(g_Log, "UID:%10u / ServerZone <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>.", dwUID);
usError = PktSAAck::SERVER_ERROR;
}
return SendPacket::ServerZone(SendStream,
lpPktSA->m_dwRequestKey, lpPktSA->m_cZone, lpPktSA->m_cChannel, usError);
}
bool ServerZoneEnd(CSendStream& SendStream, PktDD* lpPktDD)
{
#ifdef ENABLE_PACKET_LOG
DETLOG4(g_PacketLog, "ParseMoveZone::ServerZoneEnd : UID:%10u / CID:%10u / SessionID:%10u / ServerID:0x%08X / ",
0, 0, 0, 0);
#endif
return SendPacket::ServerZoneEnd(SendStream, lpPktDD->m_dwRequestKey);
}
}
}