Paulix
Active Member
- Joined
- Sep 13, 2012
- Messages
- 129
- Solutions
- 7
- Reaction score
- 26
Currently highscores on my server is working as it should, but it shows every player skill including god and gms characters, how can i hide characters with access 3 or more from appearing on highscores? here is what i found on sources:
Lua:
Highscore Game::getHighscore(uint16_t skill)
{
Highscore hs;
Database* db = Database::getInstance();
DBResult* result;
DBQuery query;
if(skill >= SKILL__MAGLEVEL)
{
if(skill == SKILL__MAGLEVEL)
query << "SELECT `maglevel`, `name` FROM `players` ORDER BY `maglevel` DESC, `manaspent` DESC LIMIT " << g_config.getNumber(ConfigManager::HIGHSCORES_TOP);
else
query << "SELECT `level`, `name` FROM `players` ORDER BY `level` DESC, `experience` DESC LIMIT " << g_config.getNumber(ConfigManager::HIGHSCORES_TOP);
if(!(result = db->storeQuery(query.str())))
return hs;
do
{
uint32_t level;
if(skill == SKILL__MAGLEVEL)
level = result->getDataInt("maglevel");
else
level = result->getDataInt("level");
std::string name = result->getDataString("name");
if(name.length() > 0)
hs.push_back(std::make_pair(name, level));
}
while(result->next());
result->free();
}
else
{
query << "SELECT `player_skills`.`value`, `players`.`name` FROM `player_skills`,`players` WHERE `player_skills`.`skillid`=" << skill << " AND `player_skills`.`player_id`=`players`.`id` ORDER BY `player_skills`.`value` DESC, `player_skills`.`count` DESC LIMIT " << g_config.getNumber(ConfigManager::HIGHSCORES_TOP);
if(!(result = db->storeQuery(query.str())))
return hs;
do
{
std::string name = result->getDataString("name");
if(name.length() > 0)
hs.push_back(std::make_pair(name, result->getDataInt("value")));
}
while(result->next());
result->free();
}
return hs;
}
Lua:
std::string Game::getHighscoreString(uint16_t skill)
{
Highscore hs = highscoreStorage[skill];
std::stringstream ss;
ss << "Highscore for " << getSkillName(skill) << "\n\nRank Level - Player Name";
for(uint32_t i = 0; i < hs.size(); i++)
ss << "\n" << (i + 1) << ". " << hs[i].second << " - " << hs[i].first;
ss << "\n\nLast updated on:\n" << std::ctime(&lastHighscoreCheck);
return ss.str();
}
Lua:
int32_t LuaInterface::luaGetHighscoreString(lua_State* L)
{
//getHighscoreString(skillId)
uint16_t skillId = popNumber(L);
if(skillId <= SKILL__LAST)
lua_pushstring(L, g_game.getHighscoreString(skillId).c_str());
else
lua_pushboolean(L, false);
return 1;
}