Files
Sun1602/Server/GameServer/SunRanking/SunRankingPlayer.cpp
T
2022-10-26 12:25:11 +08:00

80 lines
3.0 KiB
C++

#include "stdafx.h"
#ifdef _NA_008012_20150204_SUN_RANKING_SYSTEM
#include "SunRanking.h"
#include "SunRankingPlayer.h"
#include "SunRankingManager.h"
#include "SunRankingParser.h"
#include "Player.h"
SunRankingPlayer::SunRankingPlayer()
{
for (eSUN_RANKING_TYPE type = eSUN_RANKING_TYPE_START; type < eSUN_RANKING_TYPE_END; ++type)
{
m_sun_ranking_score[type] = 0;
}
m_char_guid = 0;
m_class_code = eCHAR_NONE;
m_guild_guid = 0;
memset(m_char_name, 0, MAX_CHARNAME_LENGTH);
}
void SunRankingPlayer::Initialize( SunRankingPlayerInfo& info )
{
m_char_guid = info.char_guid;
m_class_code = info.class_code;
m_guild_guid = info.guild_guid;
strncpy(m_char_name, info.char_name, MAX_CHARNAME_LENGTH);
}
SCORE* SunRankingPlayer::GetSunRankingScore( eSUN_RANKING_TYPE ranking_type )
{
if ( ranking_type < eSUN_RANKING_TYPE_BEST_OF_BEST ||
ranking_type >= eSUN_RANKING_TYPE_END)
{
SUNLOG(eCRITICAL_LOG, __FUNCTION__ "invalid ranking type(%d)", ranking_type);
return NULL;
}
return &m_sun_ranking_score[ranking_type];
}
SCORE SunRankingPlayer::GetBestOfBestScore()
{
static SunRankingParser* sun_ranking_parser = SunRankingParser::Instance();
SCORE fame =
m_sun_ranking_score[eSUN_RANKING_TYPE_ELETE_WARRIOR] * sun_ranking_parser->GetWeight(eSUN_RANKING_TYPE_ELETE_WARRIOR)
+ m_sun_ranking_score[eSUN_RANKING_TYPE_LEVEL_KING] * sun_ranking_parser->GetWeight(eSUN_RANKING_TYPE_LEVEL_KING)
+ m_sun_ranking_score[eSUN_RANKING_TYPE_LEGEND_EQUIP] * sun_ranking_parser->GetWeight(eSUN_RANKING_TYPE_LEGEND_EQUIP)
+ m_sun_ranking_score[eSUN_RANKING_TYPE_STRONG_ONE_SHOT] * sun_ranking_parser->GetWeight(eSUN_RANKING_TYPE_STRONG_ONE_SHOT)
+ m_sun_ranking_score[eSUN_RANKING_TYPE_BEST_ATTACKER] * sun_ranking_parser->GetWeight(eSUN_RANKING_TYPE_BEST_ATTACKER)
+ m_sun_ranking_score[eSUN_RANKING_TYPE_MASTER_OF_HEAL] * sun_ranking_parser->GetWeight(eSUN_RANKING_TYPE_MASTER_OF_HEAL)
#ifdef _NA_008679_20160202_REWORK_BATTLEGROUND
+ m_sun_ranking_score[eSUN_RANKING_TYPE_BATTLEGROUND_WIN_COUNT] * sun_ranking_parser->GetWeight(eSUN_RANKING_TYPE_BATTLEGROUND_WIN_COUNT)
+ m_sun_ranking_score[eSUN_RANKING_TYPE_BATTLEGROUND_KILL_COUNT] * sun_ranking_parser->GetWeight(eSUN_RANKING_TYPE_BATTLEGROUND_KILL_COUNT)
#endif //_NA_008679_20160202_REWORK_BATTLEGROUND
;
return fame;
}
void SunRankingPlayer::GetSunRankingPlayerInfo( SunRankingPlayerInfo& out_info )
{
strncpy(out_info.char_name, GetCharName(), MAX_CHARNAME_LENGTH);
out_info.char_guid = GetCharGuid();
out_info.guild_guid = GetGuildGuid();
out_info.class_code = GetCharClass();
for (eSUN_RANKING_TYPE type = eSUN_RANKING_TYPE_START; type < eSUN_RANKING_TYPE_END; ++type)
{
SCORE* score = GetSunRankingScore(type);
out_info.score[type] = 0;
if (score != NULL)
{
out_info.score[type] = *score;
}
}
}
#endif // _NA_008012_20150204_SUN_RANKING_SYSTEM