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:
185
Server/RylServerProject/RylDBAgentServer/DataStorage/Billing.cpp
Normal file
185
Server/RylServerProject/RylDBAgentServer/DataStorage/Billing.cpp
Normal 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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user