2024-12-21 10:04:04 +08:00
|
|
|
|
#include "StdAfx.h"
|
|
|
|
|
|
#include "DNDonationScheduler.h"
|
|
|
|
|
|
#include "DNDBConnectionManager.h"
|
|
|
|
|
|
#include "DNDBConnection.h"
|
|
|
|
|
|
#include "TimeSet.h"
|
|
|
|
|
|
|
|
|
|
|
|
CDNDonationScheduler g_DonationScheduler;
|
|
|
|
|
|
|
|
|
|
|
|
const DWORD SCHEDULED_TICK = 10000;
|
|
|
|
|
|
const BYTE DONATION_BROADCAST_TIME = 7;
|
|
|
|
|
|
|
|
|
|
|
|
CDNDonationScheduler::CDNDonationScheduler()
|
|
|
|
|
|
: m_dwPrevTick(0), m_btNextHour(0)
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CDNDonationScheduler::~CDNDonationScheduler()
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNDonationScheduler::AddWorldID(char cWorldID)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_WorldIDs.insert(cWorldID);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNDonationScheduler::DoUpdate(DWORD dwCurTick)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (dwCurTick - m_dwPrevTick < SCHEDULED_TICK)
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
m_dwPrevTick = dwCurTick;
|
|
|
|
|
|
|
|
|
|
|
|
if (!PassedTime())
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
QueryTopRanker();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool CDNDonationScheduler::PassedTime()
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǵ<EFBFBD><C7B4><EFBFBD>
|
|
|
|
|
|
CTimeSet CurTime;
|
|
|
|
|
|
WORD wNextYear = (CurTime.GetMonth() < 12) ? CurTime.GetYear() : CurTime.GetYear() + 1;
|
|
|
|
|
|
WORD wNextMonth = (CurTime.GetMonth() < 12) ? CurTime.GetMonth() + 1 : 1;
|
|
|
|
|
|
CTimeSet NextTime(wNextYear, wNextMonth, 1, 0, 0, 0);
|
|
|
|
|
|
|
|
|
|
|
|
INT64 nInterval = (NextTime - CurTime) / 3600 / 24;
|
|
|
|
|
|
if (nInterval > DONATION_BROADCAST_TIME)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_btNextHour = 0;
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD>⺸<EFBFBD><E2BAB8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD>. <20><EFBFBD><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ű<EFBFBD><C5B0> ó<><C3B3><EFBFBD><EFBFBD> <20>ѹ<EFBFBD><D1B9><EFBFBD> <20><EFBFBD> <20>ɸ<EFBFBD><C9B8><EFBFBD>.)
|
|
|
|
|
|
if (m_btNextHour > CurTime.GetHour())
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
|
|
m_btNextHour = (CurTime.GetHour() < 24) ? CurTime.GetHour() + 1 : 0;
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CDNDonationScheduler::QueryTopRanker()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (m_WorldIDs.empty())
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
BYTE cThreadID;
|
|
|
|
|
|
CDNDBConnection* pDBCon = g_pDBConnectionManager->GetDBConnection(cThreadID);
|
|
|
|
|
|
if (!pDBCon)
|
|
|
|
|
|
{
|
|
|
|
|
|
_DANGER_POINT();
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#if defined (PRE_ADD_DONATION)
|
|
|
|
|
|
for each (char cWorldID in m_WorldIDs)
|
|
|
|
|
|
{
|
|
|
|
|
|
pDBCon->QueryDonationTopRanker(cThreadID, cWorldID);
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|
|
}
|