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,389 @@
#define NOMINMAX
#include "stdafx.h"
#include <Item/Item.h>
#include "BroadcastCharacterData.h"
#include <utility>
#include "GMMemory.h"
namespace Broadcast2nd
{
const unsigned char CNetworkEquipGrade::TransferNetworkEquipGrade(Item::CItem* lpItem)
{
Item::CEquipment* lpEquip = Item::CEquipment::DowncastToEquipment(lpItem);
if (NULL != lpEquip)
{
Item::Grade::GradeInfo gradeInfo = lpEquip->GetItemGrade();
// A <20>׷<EFBFBD><D7B7>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> ǥ<><C7A5><EFBFBD>Ѵ<EFBFBD>.
if (Item::EquipType::B_GRADE > gradeInfo.m_eItemGrade)
{
return (Item::EquipType::B_GRADE - gradeInfo.m_eItemGrade);
}
}
return 0;
}
CAggresiveCreatureData::CAggresiveCreatureData()
: m_dwCID(0), m_usHP(0), m_dwDataFlag(0), m_dwLastUpdatedPulse(0)
{
}
CAggresiveCreatureData::~CAggresiveCreatureData()
{
}
void CAggresiveCreatureData::SetEnchantInfo(const EnchantInfo& enchantInfo)
{
std::copy(enchantInfo.m_dwStatusFlag,
enchantInfo.m_dwStatusFlag + EnchantInfo::MAX_ARRAY, m_EnchantInfo.m_dwStatusFlag);
}
void CAggresiveCreatureData::ClearData()
{
m_dwCID = 0;
m_usHP = 0;
m_dwDataFlag = 0;
m_dwLastUpdatedPulse = 0;
m_NetworkPos.Initialize(0, 0, 0, 0, 0);
m_EnchantInfo.ClearFlag();
}
CCharacterData::CCharacterData()
{
memset(m_szName, 0, sizeof(char) * MAX_NAME);
memset(m_szStallName, 0, sizeof(char) * StallNode::MAX_STALL_NAME);
memset(m_dwDoubleEquipsID, 0, sizeof(unsigned long) * HALF_EQUIP_POS);
memset(&m_CommunityInfo, 0, sizeof(CommunityInfo));
memset(&m_StatusInfo, 0, sizeof(bcStatusInfo));
memset(&m_NetworkEquipGrade, 0, sizeof(CNetworkEquipGrade));
memset(&m_WarFlagInfo, 0, sizeof(WarFlagInfo));
memset(&m_cRealmPoint, 0, sizeof(unsigned char));
}
CCharacterData::~CCharacterData()
{
}
void CCharacterData::ClearData()
{
CAggresiveCreatureData::ClearData();
memset(m_szName, 0, sizeof(char) * MAX_NAME);
memset(m_szStallName, 0, sizeof(char) * StallNode::MAX_STALL_NAME);
memset(m_dwDoubleEquipsID, 0, sizeof(unsigned long) * HALF_EQUIP_POS);
memset(&m_CommunityInfo, 0, sizeof(CommunityInfo));
memset(&m_StatusInfo, 0, sizeof(bcStatusInfo));
memset(&m_NetworkEquipGrade, 0, sizeof(CNetworkEquipGrade));
memset(&m_WarFlagInfo, 0, sizeof(WarFlagInfo));
memset(&m_cRealmPoint, 0, sizeof(unsigned char));
}
void CCharacterData::GetEquipmentsID(unsigned short* lpEquipmentsID_Out, unsigned char nIDNum) const
{
unsigned short* dupEquipsID = (unsigned short*)m_dwDoubleEquipsID;
std::copy(dupEquipsID, dupEquipsID +
std::min(nIDNum, unsigned char(Item::EquipmentPos::MAX_EQUPMENT_POS)), lpEquipmentsID_Out);
}
void CCharacterData::SetEquipmentsID(unsigned short* lpEquipmentsID_In, const unsigned char nIDNum)
{
std::copy(lpEquipmentsID_In, lpEquipmentsID_In +
std::min(nIDNum, unsigned char(Item::EquipmentPos::MAX_EQUPMENT_POS)), reinterpret_cast<unsigned short*>(m_dwDoubleEquipsID));
}
void Broadcast2nd::CCharacterData::SetEquipmentsID(unsigned long dwEquipmentsID_In, const unsigned char nIDIndex)
{
if (nIDIndex < HALF_EQUIP_POS)
{
m_dwDoubleEquipsID[nIDIndex] = dwEquipmentsID_In;
}
}
void CCharacterData::SetName(const char* szName, const size_t nNameLen)
{
memcpy(m_szName, szName, std::min(size_t(MAX_NAME), nNameLen));
}
void CCharacterData::SetStallName(const char* szStallName, const size_t nStallNameLen)
{
memcpy(m_szStallName, szStallName, std::min(size_t(StallNode::MAX_STALL_NAME), nStallNameLen));
}
bool CCharacterData::UpdateData(unsigned long dwCID, unsigned long dwCurrentPulse,
const char* szData, int& nBufferSize_InOut)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
// UpdateFlag(4byte)
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(16<31><36> * 2byte = 32byte)
// <20≯<EFBFBD>(16byte)
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD>(32byte)
// <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD> (public addr/private addr 12byte)
// Ŀ<>´<EFBFBD>Ƽ <20><><EFBFBD><EFBFBD> ( <20><><EFBFBD><EFBFBD>ID / <20><>ƼID / <20>뺴 / <20><><EFBFBD><EFBFBD> / <20><><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD> )
// <20><> <20><><EFBFBD><EFBFBD> ( 4byte )
// <20><><EFBFBD><EFBFBD> <20><>
// Total 138 Bytes
unsigned long dwUpdateFlag = 0;
const char* szDataPos = szData;
const int nBufferSize = nBufferSize_InOut;
if (nBufferSize < sizeof(unsigned long))
{
return false;
}
COPY_AND_ADVANCE_SRC(&dwUpdateFlag, szDataPos, sizeof(unsigned long));
// <20>о<EFBFBD><D0BE><EFBFBD> UpdateFlag<61><67>, <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߻<EFBFBD><DFBB>Ѵ<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>´<EFBFBD>.
int nEstimateBufferSize = EstimateBufferSize(dwUpdateFlag);
if (nBufferSize < nEstimateBufferSize )
{
// <20><><EFBFBD><EFBFBD> ũ<><20>߻<EFBFBD><DFBB><EFBFBD> <20><><EFBFBD>̺<EFBFBD><CCBA><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
return false;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2><EFBFBD> <20>״´<D7B4>!!.
m_dwCID = dwCID;
if (0 != dwCurrentPulse)
{
// Pulse<73><65> 0<><30><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> CellLogin<69>̴<EFBFBD>. Pulse<73><65> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
m_dwLastUpdatedPulse = dwCurrentPulse;
}
int nCount = 0;
for (; nCount < HALF_EQUIP_POS; ++nCount)
{
if (dwUpdateFlag & (1 << nCount))
{
COPY_AND_ADVANCE_SRC(m_dwDoubleEquipsID + nCount, szDataPos, sizeof(unsigned long));
}
}
if (dwUpdateFlag & CHAR_DELTA_CHAR_NAME) { COPY_AND_ADVANCE_SRC(m_szName, szDataPos, sizeof(unsigned char) * MAX_NAME); }
if (dwUpdateFlag & CHAR_DELTA_STALL_NAME) { COPY_AND_ADVANCE_SRC(m_szStallName, szDataPos, sizeof(unsigned char) * StallNode::MAX_STALL_NAME); }
if (dwUpdateFlag & CHAR_DELTA_GUILD_ID) { COPY_AND_ADVANCE_SRC(&m_CommunityInfo.m_dwGuild_ID, szDataPos, sizeof(unsigned long)); }
if (dwUpdateFlag & CHAR_DELTA_GUILD_ID) { COPY_AND_ADVANCE_SRC(&m_CommunityInfo.m_cTacticsFlag, szDataPos, sizeof(unsigned char)); }
if (dwUpdateFlag & CHAR_DELTA_PARTY_ID) { COPY_AND_ADVANCE_SRC(&m_CommunityInfo.m_dwParty_ID, szDataPos, sizeof(unsigned long)); }
if (dwUpdateFlag & CHAR_DELTA_FAME) { COPY_AND_ADVANCE_SRC(&m_CommunityInfo.m_dwFame, szDataPos, sizeof(unsigned long)); }
if (dwUpdateFlag & CHAR_DELTA_FAME) { COPY_AND_ADVANCE_SRC(&m_CommunityInfo.m_dwMileage, szDataPos, sizeof(unsigned long)); }
if (dwUpdateFlag & CHAR_DELTA_BODYINFO) { COPY_AND_ADVANCE_SRC(&m_StatusInfo.m_dwBodyInfo, szDataPos, sizeof(unsigned long)); }
if (dwUpdateFlag & CHAR_DELTA_CLASS) { COPY_AND_ADVANCE_SRC(&m_StatusInfo.m_cClass, szDataPos, sizeof(unsigned char)); }
if (dwUpdateFlag & CHAR_DELTA_LEVEL) { COPY_AND_ADVANCE_SRC(&m_StatusInfo.m_cLevel, szDataPos, sizeof(unsigned char)); }
for (nCount = 0; nCount < EnchantInfo::MAX_ARRAY; ++nCount)
{
if (dwUpdateFlag & (CHAR_DELTA_ENCHANT_INFO << nCount))
{
COPY_AND_ADVANCE_SRC(m_EnchantInfo.m_dwStatusFlag + nCount, szDataPos, sizeof(unsigned long));
}
}
if (dwUpdateFlag & CHAR_DELTA_NETWORK_POS) { COPY_AND_ADVANCE_SRC(&m_NetworkPos, szDataPos, sizeof(CNetworkPos));}
if (dwUpdateFlag & CHAR_DELTA_HP) { COPY_AND_ADVANCE_SRC(&m_usHP, szDataPos, sizeof(unsigned short)); }
if (dwUpdateFlag & CHAR_DELTA_EQUIP_GRADE) { COPY_AND_ADVANCE_SRC(&m_NetworkEquipGrade, szDataPos, sizeof(CNetworkEquipGrade)); }
if (dwUpdateFlag & CHAR_DELTA_WAR_FLAG) { COPY_AND_ADVANCE_SRC(&m_WarFlagInfo, szDataPos, sizeof(WarFlagInfo)); }
if (dwUpdateFlag & CHAR_DELTA_REALM_POINT) { COPY_AND_ADVANCE_SRC(&m_cRealmPoint, szDataPos, sizeof(unsigned char)); }
nBufferSize_InOut = static_cast<int>(szDataPos - szData);
if (0 != dwUpdateFlag)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD> <20><><EFBFBD>ǰ<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
SetDataFlag(CHARDATA_CHANGED);
}
return true;
}
int CCharacterData::EstimateBufferSize(unsigned long dwUpdateFlag)
{
// CID<49><44> UpdateFlag<61><67> <20><><EFBFBD≯<EFBFBD>ŭ <20><><EFBFBD>Ѵ<EFBFBD>.
int nEstimateBufferSize = 0;
int nCount = 0;
for (; nCount < Broadcast2nd::CCharacterData::HALF_EQUIP_POS; ++nCount)
{
if (dwUpdateFlag & (1 << nCount))
{
nEstimateBufferSize += sizeof(unsigned long);
}
}
if (dwUpdateFlag & CHAR_DELTA_CHAR_NAME) { nEstimateBufferSize += sizeof(unsigned char) * MAX_NAME; }
if (dwUpdateFlag & CHAR_DELTA_STALL_NAME) { nEstimateBufferSize += sizeof(unsigned char) * StallNode::MAX_STALL_NAME; }
if (dwUpdateFlag & CHAR_DELTA_GUILD_ID) { nEstimateBufferSize += sizeof(unsigned long); }
if (dwUpdateFlag & CHAR_DELTA_GUILD_ID) { nEstimateBufferSize += sizeof(unsigned char); }
if (dwUpdateFlag & CHAR_DELTA_PARTY_ID) { nEstimateBufferSize += sizeof(unsigned long); }
if (dwUpdateFlag & CHAR_DELTA_FAME) { nEstimateBufferSize += sizeof(unsigned long) * 2; }
if (dwUpdateFlag & CHAR_DELTA_BODYINFO) { nEstimateBufferSize += sizeof(unsigned long); }
if (dwUpdateFlag & CHAR_DELTA_CLASS) { nEstimateBufferSize += sizeof(unsigned char); }
if (dwUpdateFlag & CHAR_DELTA_LEVEL) { nEstimateBufferSize += sizeof(unsigned char); }
for (nCount = 0; nCount < EnchantInfo::MAX_ARRAY; ++nCount)
{
if (dwUpdateFlag & (CHAR_DELTA_ENCHANT_INFO << nCount))
{
nEstimateBufferSize += sizeof(unsigned long);
}
}
if (dwUpdateFlag & CHAR_DELTA_NETWORK_POS) { nEstimateBufferSize += sizeof(CNetworkPos); }
if (dwUpdateFlag & CHAR_DELTA_HP) { nEstimateBufferSize += sizeof(unsigned short); }
if (dwUpdateFlag & CHAR_DELTA_EQUIP_GRADE) { nEstimateBufferSize += sizeof(CNetworkEquipGrade); }
if (dwUpdateFlag & CHAR_DELTA_WAR_FLAG) { nEstimateBufferSize += sizeof(WarFlagInfo); }
if (dwUpdateFlag & CHAR_DELTA_REALM_POINT) { nEstimateBufferSize += sizeof(unsigned char); }
return nEstimateBufferSize;
}
void CMonsterData::ClearData()
{
CAggresiveCreatureData::ClearData();
m_dwMasterCID = 0;
}
CMonsterData::CMonsterData()
: m_dwMasterCID(0)
{
}
CMonsterData::~CMonsterData()
{
}
bool CMonsterData::UpdateData(unsigned long dwCID, unsigned long dwCurrentPulse,
const char* szData, int& nBufferSize_InOut)
{
const char* szDataPos = szData;
const int nBufferSize = nBufferSize_InOut;
if (nBufferSize < sizeof(unsigned char))
{
return false;
}
unsigned char cUpdateFlag =
*reinterpret_cast<const unsigned char*>(szDataPos);
++szDataPos;
// <20>о<EFBFBD><D0BE><EFBFBD> UpdateFlag<61><67>, <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>߻<EFBFBD><DFBB>Ѵ<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>´<EFBFBD>.
int nEstimateBufferSize = EstimateBufferSize(cUpdateFlag);
if (nBufferSize < nEstimateBufferSize)
{
// <20><><EFBFBD><EFBFBD> ũ<><20>߻<EFBFBD><DFBB><EFBFBD> <20><><EFBFBD>̺<EFBFBD><CCBA><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
return false;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2><EFBFBD> <20>״´<D7B4>!!.
m_dwCID = dwCID;
if (0 != dwCurrentPulse)
{
// Pulse<73><65> 0<><30><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> CellLogin<69>̴<EFBFBD>. Pulse<73><65> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
m_dwLastUpdatedPulse = dwCurrentPulse;
}
for (int nCount = 0; nCount < EnchantInfo::MAX_ARRAY; ++nCount)
{
if (cUpdateFlag & (MON_DELTA_ENCHANT_INFO << nCount))
{
COPY_AND_ADVANCE_SRC(
m_EnchantInfo.m_dwStatusFlag + nCount,
szDataPos, sizeof(unsigned long));
}
}
const CNetworkPos oldNetPos = m_NetworkPos;
if (cUpdateFlag & MON_DELTA_NETWORK_POS) { COPY_AND_ADVANCE_SRC(&m_NetworkPos, szDataPos, sizeof(CNetworkPos)); }
if (cUpdateFlag & MON_DELTA_HP) { COPY_AND_ADVANCE_SRC(&m_usHP, szDataPos, sizeof(unsigned short)); }
if (cUpdateFlag & MON_DELTA_MASTERCID) { COPY_AND_ADVANCE_SRC(&m_dwMasterCID, szDataPos, sizeof(unsigned long)); }
/*
// TODO : REMOVE HERE
if (49 < oldNetPos.GetSquaredRange(CNetworkPos(0, 0, 0)) &&
49 < oldNetPos.GetSquaredRange(m_NetworkPos))
{
const int MAX_BUFFER = 256;
char szBuffer[MAX_BUFFER];
if (0 < _snprintf(szBuffer, MAX_BUFFER - 1,
"PktBroadcast2nd : CID:0x%08x : <20><><EFBFBD><EFBFBD><EFBFBD>̵<EFBFBD><CCB5>ϳ<EFBFBD>?.. %f<>Ÿ<EFBFBD><C5B8><EFBFBD> <20><><EFBFBD>տ<EFBFBD><D5BF><EFBFBD> <20>̵<EFBFBD><CCB5>ߴ<EFBFBD>!"
"/CurrentPulse:%d (%f,%f,%f)->(%f,%f,%f)\n",
m_dwCID, oldNetPos.GetSquaredRange(m_NetworkPos), dwCurrentPulse,
oldNetPos.GetXPos(), oldNetPos.GetYPos(), oldNetPos.GetZPos(),
m_NetworkPos.GetXPos(), m_NetworkPos.GetYPos(), m_NetworkPos.GetZPos()))
{
szBuffer[MAX_BUFFER - 1] = 0;
OutputDebugString(szBuffer);
}
}
*/
nBufferSize_InOut = static_cast<int>(szDataPos - szData);
if (0 != cUpdateFlag)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD> <20><><EFBFBD>ǰ<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
SetDataFlag(CHARDATA_CHANGED);
}
return true;
}
int CMonsterData::EstimateBufferSize(unsigned char cUpdateFlag)
{
// CID<49><44> UpdateFlag<61><67> <20><><EFBFBD≯<EFBFBD>ŭ <20><><EFBFBD>Ѵ<EFBFBD>.
int nEstimateBufferSize = 0;
int nCount = 0;
for (nCount = 0; nCount < EnchantInfo::MAX_ARRAY; ++nCount)
{
if (cUpdateFlag & (MON_DELTA_ENCHANT_INFO << nCount))
{
nEstimateBufferSize += sizeof(unsigned long);
}
}
if (cUpdateFlag & MON_DELTA_NETWORK_POS) { nEstimateBufferSize += sizeof(CNetworkPos); }
if (cUpdateFlag & MON_DELTA_HP) { nEstimateBufferSize += sizeof(unsigned short); }
if (cUpdateFlag & MON_DELTA_MASTERCID) { nEstimateBufferSize += sizeof(unsigned long); }
return nEstimateBufferSize;
}
}