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,185 @@
#include "stdafx.h"
#include "Billing.h"
#include "SessionData.h"
#include <Network/Stream/SendStream.h>
#include <Network/SendPacket/SendServerInfo.h>
#include <Utility/Setup/ServerSetup.h>
#include <Log/ServerLog.h>
namespace DBAgent
{
namespace DataStorage
{
enum BillingConst
{
SENDED_BILLING_TIMEOUT_NOTIFY = (1 << 0)
};
CBilling::CBilling()
: m_nLoginTime(0),
m_nPlayTime(0),
m_dwCRMIndex1(0),
m_cBillingType(0),
m_cFlags(0),
m_eWarnMsgType(WARN_BEFORE_1SEC)
{
}
CBilling::~CBilling()
{
}
void CBilling::StartBilling(int nPlayTime, unsigned long dwCRMIndex1, unsigned char cBillingType)
{
m_nLoginTime = time(0);
m_nPlayTime = nPlayTime;
m_dwCRMIndex1 = dwCRMIndex1;
m_cBillingType = cBillingType;
m_cFlags = 0;
}
void CBilling::ClearBilling()
{
m_nLoginTime = 0;
m_nPlayTime = 0;
m_dwCRMIndex1 = 0;
m_cBillingType = 0;
m_cFlags = 0;
}
void CBilling::AddYouxiLandPoint(int nAdditionalPoint, unsigned char cBillingType)
{
m_nPlayTime += nAdditionalPoint;
m_cBillingType = cBillingType;
m_cFlags &= ~SENDED_BILLING_TIMEOUT_NOTIFY;
}
bool CBilling::CheckBilling(const CSessionData& SessionData, time_t nCurrentTime)
{
// <20>α<EFBFBD><CEB1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>õǾ<C3B5><C7BE><EFBFBD>, PC<50><43><EFBFBD><EFBFBD> <20>ƴϰ<C6B4>,
// <20><><EFBFBD><EFBFBD> CHAR_ENABLED<45><44><EFBFBD><EFBFBD><EFBFBD>̰<EFBFBD>,
// <20>Ѱ<EFBFBD><D1B0><EFBFBD> <20><><EFBFBD>պ<EFBFBD><D5BA><EFBFBD><EFBFBD><EFBFBD> <20>ƴ<EFBFBD> <20><><EFBFBD><EFBFBD><ECBFA1> <20><><EFBFBD><EFBFBD> üũ.
if (0 != m_nLoginTime && 0 == m_dwCRMIndex1 &&
CSessionData::SE_CHAR_ENABLED == SessionData.GetSessionState() &&
CServerSetup::GamaUnitedBilling != CServerSetup::GetInstance().GetBillingType())
{
switch(m_cBillingType)
{
case 'T':
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. m_nPlayTime<6D><65> <20>д<EFBFBD><D0B4><EFBFBD>
{
// <20>߰<EFBFBD><DFB0>ð<EFBFBD> 20<32><30> <20><> <20><>.
int nRemainSecond = int(m_nPlayTime * 60 + m_nLoginTime - nCurrentTime) + 20;
// 5<><35> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
if (0 < nRemainSecond && nRemainSecond <= 300 && !(m_cFlags & SENDED_BILLING_TIMEOUT_NOTIFY))
{
// <20>÷<EFBFBD><C3B7><EFBFBD> <20><><EFBFBD><EFBFBD>(<28>ι<EFBFBD> <20><> <20><>ƾ<EFBFBD><C6BE><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϱ<EFBFBD> <20><><EFBFBD>ؼ<EFBFBD>..
m_cFlags |= SENDED_BILLING_TIMEOUT_NOTIFY;
// Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><> <20>и<EFBFBD><D0B8><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
SendPacket::BillingNotify(SessionData,
static_cast<unsigned char>((nRemainSecond + 30)/60), m_cBillingType);
}
else if (nRemainSecond <= 0)
{
DETLOG2(g_Log, "UID:%10u/CID:%10u/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD>",
SessionData.GetUID(), SessionData.GetCID());
return false;
}
}
break;
case 'D':
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. m_nPlayTime<6D><65> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><>
{
const struct tm CurrentTime = *localtime(&nCurrentTime);
const struct tm LoginTime = *localtime(&m_nLoginTime);
// <20>Ϸ<EFBFBD> <20><><EFBFBD>Ұ<EFBFBD>, <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 5<><35> <20><><EFBFBD≯<EFBFBD>, <20><> <20>и<EFBFBD><D0B8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
if(LoginTime.tm_yday + m_nPlayTime - 1 == CurrentTime.tm_yday &&
23 == CurrentTime.tm_hour && 55 <= CurrentTime.tm_min &&
!(m_cFlags & SENDED_BILLING_TIMEOUT_NOTIFY))
{
// <20>÷<EFBFBD><C3B7><EFBFBD> <20><><EFBFBD><EFBFBD>(<28>ι<EFBFBD> <20><> <20><>ƾ<EFBFBD><C6BE><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϱ<EFBFBD> <20><><EFBFBD>ؼ<EFBFBD>..
m_cFlags |= SENDED_BILLING_TIMEOUT_NOTIFY;
// Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><> <20>и<EFBFBD><D0B8><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
SendPacket::BillingNotify(SessionData,
static_cast<unsigned char>(60 - CurrentTime.tm_min), m_cBillingType);
}
else if(LoginTime.tm_yday + static_cast<long>(m_nPlayTime) <= CurrentTime.tm_yday)
{
DETLOG2(g_Log, "UID:%10u/CID:%10u/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD>",
SessionData.GetUID(), SessionData.GetCID());
return false;
}
}
break;
case 'Y':
// <20><20><><EFBFBD><EFBFBD>Ʈ. m_nPlayTime<6D><65> <20>д<EFBFBD><D0B4><EFBFBD>
{
// <20>߰<EFBFBD><DFB0>ð<EFBFBD> 1<><31> <20><> <20><>.
int nRemainSecond = int(m_nPlayTime * 60 + m_nLoginTime - nCurrentTime) + 60;
// <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> 1<><31><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> üŷ
if (0 < nRemainSecond && nRemainSecond <= 60 && !(m_cFlags & SENDED_BILLING_TIMEOUT_NOTIFY))
{
// <20>÷<EFBFBD><C3B7><EFBFBD> <20><><EFBFBD><EFBFBD>(<28>ι<EFBFBD> <20><> <20><>ƾ<EFBFBD><C6BE><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϱ<EFBFBD> <20><><EFBFBD>ؼ<EFBFBD>..
m_cFlags |= SENDED_BILLING_TIMEOUT_NOTIFY;
// Ű<>ۿ<EFBFBD> <20>ٽ<EFBFBD> <20>˾ƺ<CBBE><C6BA><EFBFBD>
DETLOG5(g_Log, "UID:%10u/CID:%10u/<2F><20><><EFBFBD><EFBFBD>Ʈ üũ<C3BC>մϴ<D5B4>. <20><><EFBFBD><EFBFBD> <20><>:%d, <20>α<EFBFBD><CEB1><EFBFBD>:%d <20><><EFBFBD><EFBFBD>:%d",
SessionData.GetUID(), SessionData.GetCID(), nRemainSecond, m_nLoginTime, nCurrentTime); // <20>ӽ<EFBFBD>
// Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><> <20>и<EFBFBD><D0B8><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
unsigned char cRemainMinute = static_cast<unsigned char>((nRemainSecond + 30) / 60);
if(WARN_BEFORE_1SEC == m_eWarnMsgType)
{
// <20>߱<EFBFBD> <20>̿<EFBFBD><CCBF><EFBFBD> <20><><EFBFBD>󿡸<EFBFBD> <20><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD> 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>޽<EFBFBD><DEBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
SendPacket::BillingCheckNotify(
SessionData, cRemainMinute, m_cBillingType);
}
// UID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ Ȯ<><C8AE> <20><>Ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendPacket::UpdateUIDTable(PktUUT::UpdateUIDTableBillingCheck,
SessionData.GetAccountName(), NULL, SessionData.GetUID(), SessionData.GetCID(),
SessionData.GetSessionID(), SessionData.GetServerID(), SessionData.GetRemoteAddress());
}
else if (nRemainSecond <= 0)
{
DETLOG6(g_Log, "UID:%10u/CID:%10u/<2F><20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD> "
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>:%d Ÿ<><C5B8>:%d, <20>α<EFBFBD><CEB1><EFBFBD>:%d <20><><EFBFBD><EFBFBD><EFBFBD>ð<EFBFBD>:%d",
SessionData.GetUID(), SessionData.GetCID(), nRemainSecond, m_nPlayTime, m_nLoginTime, nCurrentTime);
return false;
}
}
break;
}
}
return true;
}
}
}