Files
2026-06-01 12:46:52 +02:00

104 lines
4.2 KiB
C++

#include <ctime>
#include <toolkit/XConsole.h>
#include <logging/FileLog.h>
#include "ContentLoader.h"
#include "GameDBUtil.h"
#include "RankingManager.h"
struct dbRankingInfo : public CADORecordBinding
{
BEGIN_ADO_BINDING(dbRankingInfo)
ADO_VARIABLE_LENGTH_ENTRY4( 1, adInteger, ranking_id, sizeof( ranking_id ), FALSE )
ADO_VARIABLE_LENGTH_ENTRY4( 2, adDBTimeStamp, next_settling_time, sizeof( next_settling_time ), FALSE )
END_ADO_BINDING()
int ranking_id;
DBTIMESTAMP next_settling_time;
};
struct dbRankingScore : public CADORecordBinding
{
BEGIN_ADO_BINDING(dbRankingScore)
ADO_VARIABLE_LENGTH_ENTRY4( 1, adInteger, ranking_id, sizeof( ranking_id ), FALSE )
ADO_VARIABLE_LENGTH_ENTRY4( 2, adInteger, owner_id, sizeof( owner_id ), FALSE )
ADO_VARIABLE_LENGTH_ENTRY4( 3, adVarChar, player_name, _countof( player_name ), FALSE )
ADO_NUMERIC_ENTRY2( 4, adDecimal, dv_score, 18, 4, FALSE)
ADO_VARIABLE_LENGTH_ENTRY4( 5, adBoolean, is_valid, sizeof( is_valid ), FALSE )
END_ADO_BINDING()
int ranking_id;
int owner_id;
char player_name[ 31 ];
_decimal_variant dv_score;
bool is_valid;
};
void onRankingInfo( dbRankingInfo * emprs )
{
struct tm next_settling_time;
next_settling_time.tm_year = emprs->next_settling_time.year - 1900;
next_settling_time.tm_mon = emprs->next_settling_time.month - 1;
next_settling_time.tm_mday = emprs->next_settling_time.day;
next_settling_time.tm_hour = emprs->next_settling_time.hour;
next_settling_time.tm_min = emprs->next_settling_time.minute;
next_settling_time.tm_sec = emprs->next_settling_time.second;
next_settling_time.tm_isdst = -1;
time_t tNextSettling = mktime( &next_settling_time );
_cprint( "RankingInfo: id(%d), next_settling_time(%04d-%02d-%02d %02d:%02d:%02d, %04d-%02d-%02d %02d:%02d:%02d,%d = %I64d)\n", emprs->ranking_id,
emprs->next_settling_time.year, emprs->next_settling_time.month, emprs->next_settling_time.day,
emprs->next_settling_time.hour, emprs->next_settling_time.minute, emprs->next_settling_time.second,
next_settling_time.tm_year + 1900, next_settling_time.tm_mon + 1, next_settling_time.tm_mday,
next_settling_time.tm_hour, next_settling_time.tm_min, next_settling_time.tm_sec,
next_settling_time.tm_isdst, tNextSettling );
FILELOG( "RankingInfo: id(%d), next_settling_time(%04d-%02d-%02d %02d:%02d:%02d, %04d-%02d-%02d %02d:%02d:%02d,%d = %I64d)", emprs->ranking_id,
emprs->next_settling_time.year, emprs->next_settling_time.month, emprs->next_settling_time.day,
emprs->next_settling_time.hour, emprs->next_settling_time.minute, emprs->next_settling_time.second,
next_settling_time.tm_year + 1900, next_settling_time.tm_mon + 1, next_settling_time.tm_mday,
next_settling_time.tm_hour, next_settling_time.tm_min, next_settling_time.tm_sec,
next_settling_time.tm_isdst, tNextSettling );
if( tNextSettling == -1 )
tNextSettling = 0;
RankingManager::Instance().SetNextSettlingTime( static_cast< RankingManager::_RANKING_TYPE >( emprs->ranking_id ), tNextSettling );
}
void onRankingScore( dbRankingScore * emprs )
{
c_fixed10 fScore;
fScore.set( emprs->dv_score.getMultipleInteger( 10000 ) );
RankingManager::Instance().SetRankingScore( static_cast< RankingManager::_RANKING_TYPE >( emprs->ranking_id ), emprs->owner_id, emprs->player_name, fScore, emprs->is_valid );
}
bool RankingLoader::onProcess( int nThreadNum )
{
#ifdef FRAUN_PERFORMANCE_LOG
DWORD dwTime = GetSafeTickCount();
#endif
_ConnectionPtr ConnPtr = NULL;
InitUserDbConnection( ConnPtr );
size_t nRankingInfoCnt = LoadDbResource< dbRankingInfo >( "RankingInfo", ConnPtr, onRankingInfo );
size_t nRankingScoreCnt = LoadDbResource< dbRankingScore >( "smp_read_ranking_score", ConnPtr, onRankingScore, adCmdStoredProc );
#ifdef FRAUN_PERFORMANCE_LOG
DWORD loadingTime = GetSafeTickCount() - dwTime;
_cprint("Total %d RankingInfo, %d RankingScore loaded; time taken: %d\n", nRankingInfoCnt, nRankingScoreCnt, loadingTime);
FILELOG("Total %d RankingInfo, %d RankingScore loaded; time taken: %d", nRankingInfoCnt, nRankingScoreCnt, loadingTime);
#else
_cprint( "Total %d RankingInfo, %d RankingScore loaded...\n", nRankingInfoCnt, nRankingScoreCnt );
FILELOG( "Total %d RankingInfo, %d RankingScore loaded...", nRankingInfoCnt, nRankingScoreCnt );
#endif
return true;
}