Addition of player limit for rank manager.

This commit is contained in:
MobiusDevelopment 2019-12-12 11:58:17 +00:00
parent 6abcec1ce6
commit 6f337395e5
12 changed files with 84 additions and 64 deletions

View File

@ -141,6 +141,7 @@ import org.l2jmobius.gameserver.instancemanager.PetitionManager;
import org.l2jmobius.gameserver.instancemanager.PremiumManager;
import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
import org.l2jmobius.gameserver.instancemanager.QuestManager;
import org.l2jmobius.gameserver.instancemanager.RankManager;
import org.l2jmobius.gameserver.instancemanager.SellBuffsManager;
import org.l2jmobius.gameserver.instancemanager.ServerRestartManager;
import org.l2jmobius.gameserver.instancemanager.SiegeGuardManager;
@ -351,6 +352,7 @@ public class GameServer
CursedWeaponsManager.getInstance();
TransformData.getInstance();
BotReportTable.getInstance();
RankManager.getInstance();
if (Config.SELLBUFF_ENABLED)
{
SellBuffsManager.getInstance();

View File

@ -37,11 +37,13 @@ public class RankManager
{
private static final Logger LOGGER = Logger.getLogger(RankManager.class.getName());
private static final String SELECT_CHARACTERS = "SELECT charId,char_name,level,race,base_class, clanid FROM characters WHERE level > 84 ORDER BY exp DESC";
private static final String SELECT_CHARACTERS_BY_RACE = "SELECT charId FROM characters WHERE level > 84 AND race = ? ORDER BY exp DESC";
public static final int PLAYER_LIMIT = 100;
private static final String GET_CURRENT_CYCLE_DATA = "SELECT characters.char_name, characters.level, characters.base_class, characters.clanid, olympiad_nobles.charId, olympiad_nobles.olympiad_points, olympiad_nobles.competitions_won, olympiad_nobles.competitions_lost FROM characters, olympiad_nobles WHERE characters.charId = olympiad_nobles.charId ORDER BY olympiad_nobles.olympiad_points DESC";
private static final String GET_CHARACTERS_BY_CLASS = "SELECT characters.charId, olympiad_nobles.olympiad_points FROM characters, olympiad_nobles WHERE olympiad_nobles.charId = characters.charId AND characters.base_class = ? ORDER BY olympiad_nobles.olympiad_points DESC";
private static final String SELECT_CHARACTERS = "SELECT charId,char_name,level,race,base_class, clanid FROM characters WHERE level > 84 ORDER BY exp DESC LIMIT " + PLAYER_LIMIT;
private static final String SELECT_CHARACTERS_BY_RACE = "SELECT charId FROM characters WHERE level > 84 AND race = ? ORDER BY exp DESC LIMIT " + PLAYER_LIMIT;
private static final String GET_CURRENT_CYCLE_DATA = "SELECT characters.char_name, characters.level, characters.base_class, characters.clanid, olympiad_nobles.charId, olympiad_nobles.olympiad_points, olympiad_nobles.competitions_won, olympiad_nobles.competitions_lost FROM characters, olympiad_nobles WHERE characters.charId = olympiad_nobles.charId ORDER BY olympiad_nobles.olympiad_points DESC LIMIT " + PLAYER_LIMIT;
private static final String GET_CHARACTERS_BY_CLASS = "SELECT characters.charId, olympiad_nobles.olympiad_points FROM characters, olympiad_nobles WHERE olympiad_nobles.charId = characters.charId AND characters.base_class = ? ORDER BY olympiad_nobles.olympiad_points DESC LIMIT " + PLAYER_LIMIT;
private final Map<Integer, StatsSet> _mainList = new ConcurrentHashMap<>();
private Map<Integer, StatsSet> _snapshotList = new ConcurrentHashMap<>();
@ -53,26 +55,6 @@ public class RankManager
ThreadPool.scheduleAtFixedRate(this::update, 0, 1800000);
}
public Map<Integer, StatsSet> getRankList()
{
return _mainList;
}
public Map<Integer, StatsSet> getSnapshotList()
{
return _snapshotList;
}
public Map<Integer, StatsSet> getOlyRankList()
{
return _mainOlyList;
}
public Map<Integer, StatsSet> getSnapshotOlyList()
{
return _snapshotOlyList;
}
private synchronized void update()
{
// Load charIds All
@ -80,6 +62,7 @@ public class RankManager
_mainList.clear();
_snapshotOlyList = _mainOlyList;
_mainOlyList.clear();
try (Connection con = DatabaseFactory.getConnection();
PreparedStatement statement = con.prepareStatement(SELECT_CHARACTERS))
{
@ -117,6 +100,7 @@ public class RankManager
{
LOGGER.log(Level.WARNING, "Could not load chars total rank data: " + this + " - " + e.getMessage(), e);
}
// load olympiad data.
try (Connection con = DatabaseFactory.getConnection();
PreparedStatement statement = con.prepareStatement(GET_CURRENT_CYCLE_DATA))
@ -237,13 +221,33 @@ public class RankManager
}
}
private static class SingletonHolder
public Map<Integer, StatsSet> getRankList()
{
protected static final RankManager INSTANCE = new RankManager();
return _mainList;
}
public Map<Integer, StatsSet> getSnapshotList()
{
return _snapshotList;
}
public Map<Integer, StatsSet> getOlyRankList()
{
return _mainOlyList;
}
public Map<Integer, StatsSet> getSnapshotOlyList()
{
return _snapshotOlyList;
}
public static RankManager getInstance()
{
return SingletonHolder.INSTANCE;
}
private static class SingletonHolder
{
protected static final RankManager INSTANCE = new RankManager();
}
}

View File

@ -37,5 +37,4 @@ public class RequestOlympiadMyRankingInfo implements IClientIncomingPacket
{
client.sendPacket(new ExOlympiadMyRankingInfo(client.getPlayer()));
}
}

View File

@ -48,5 +48,4 @@ public class RequestOlympiadRankingInfo implements IClientIncomingPacket
{
client.sendPacket(new ExOlympiadRankingInfo(client.getPlayer(), _tabId, _rankingType, _unk, _classId, _serverId));
}
}

View File

@ -25,6 +25,7 @@ import org.l2jmobius.Config;
import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.commons.network.PacketWriter;
import org.l2jmobius.gameserver.data.sql.impl.ClanTable;
import org.l2jmobius.gameserver.instancemanager.RankManager;
import org.l2jmobius.gameserver.model.entity.Hero;
import org.l2jmobius.gameserver.network.OutgoingPackets;
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
@ -34,11 +35,11 @@ import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
*/
public class ExOlympiadHeroAndLegendInfo implements IClientOutgoingPacket
{
private static final String GET_HEROES = "SELECT characters.charId, characters.char_name, characters.race, characters.sex, characters.base_class, characters.level, characters.clanid, olympiad_nobles_eom.competitions_won, olympiad_nobles_eom.competitions_lost, olympiad_nobles_eom.olympiad_points, heroes.legend_count, heroes.count FROM heroes, characters, olympiad_nobles_eom WHERE characters.charId = heroes.charId AND characters.charId = olympiad_nobles_eom.charId ORDER BY olympiad_nobles_eom.olympiad_points DESC, characters.base_class ASC";
// TODO: Move query and store data at RankManager.
private static final String GET_HEROES = "SELECT characters.charId, characters.char_name, characters.race, characters.sex, characters.base_class, characters.level, characters.clanid, olympiad_nobles_eom.competitions_won, olympiad_nobles_eom.competitions_lost, olympiad_nobles_eom.olympiad_points, heroes.legend_count, heroes.count FROM heroes, characters, olympiad_nobles_eom WHERE characters.charId = heroes.charId AND characters.charId = olympiad_nobles_eom.charId ORDER BY olympiad_nobles_eom.olympiad_points DESC, characters.base_class ASC LIMIT " + RankManager.PLAYER_LIMIT;
public ExOlympiadHeroAndLegendInfo()
{
}
@Override

View File

@ -26,6 +26,7 @@ import java.util.GregorianCalendar;
import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.commons.network.PacketWriter;
import org.l2jmobius.gameserver.instancemanager.RankManager;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.entity.Hero;
@ -38,8 +39,10 @@ import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
*/
public class ExOlympiadMyRankingInfo implements IClientOutgoingPacket
{
private static final String GET_CURRENT_CYCLE_DATA = "SELECT charId, olympiad_points, competitions_won, competitions_lost FROM olympiad_nobles WHERE class_id = ?";
private static final String GET_PREVIOUS_CYCLE_DATA = "SELECT charId, olympiad_points, competitions_won, competitions_lost FROM olympiad_nobles_eom WHERE class_id = ?";
// TODO: Move query and store data at RankManager.
private static final String GET_CURRENT_CYCLE_DATA = "SELECT charId, olympiad_points, competitions_won, competitions_lost FROM olympiad_nobles WHERE class_id = ? ORDER BY olympiad_points DESC LIMIT " + RankManager.PLAYER_LIMIT;
private static final String GET_PREVIOUS_CYCLE_DATA = "SELECT charId, olympiad_points, competitions_won, competitions_lost FROM olympiad_nobles_eom WHERE class_id = ? ORDER BY olympiad_points DESC LIMIT " + RankManager.PLAYER_LIMIT;
private final PlayerInstance _player;
public ExOlympiadMyRankingInfo(PlayerInstance player)
@ -98,6 +101,7 @@ public class ExOlympiadMyRankingInfo implements IClientOutgoingPacket
{
LOGGER.warning("Olympiad my ranking: Couldnt load data: " + e.getMessage());
}
int previousPlace = 0;
int previousWins = 0;
int previousLoses = 0;
@ -126,6 +130,7 @@ public class ExOlympiadMyRankingInfo implements IClientOutgoingPacket
{
LOGGER.warning("Olympiad my ranking: Couldnt load data: " + e.getMessage());
}
int heroCount = 0;
int legendCount = 0;
if (Hero.getInstance().getCompleteHeroes().containsKey(_player.getObjectId()))

View File

@ -138,6 +138,7 @@ import org.l2jmobius.gameserver.instancemanager.PetitionManager;
import org.l2jmobius.gameserver.instancemanager.PremiumManager;
import org.l2jmobius.gameserver.instancemanager.PunishmentManager;
import org.l2jmobius.gameserver.instancemanager.QuestManager;
import org.l2jmobius.gameserver.instancemanager.RankManager;
import org.l2jmobius.gameserver.instancemanager.SellBuffsManager;
import org.l2jmobius.gameserver.instancemanager.ServerRestartManager;
import org.l2jmobius.gameserver.instancemanager.SiegeGuardManager;
@ -347,6 +348,7 @@ public class GameServer
CursedWeaponsManager.getInstance();
TransformData.getInstance();
BotReportTable.getInstance();
RankManager.getInstance();
if (Config.SELLBUFF_ENABLED)
{
SellBuffsManager.getInstance();

View File

@ -37,11 +37,13 @@ public class RankManager
{
private static final Logger LOGGER = Logger.getLogger(RankManager.class.getName());
private static final String SELECT_CHARACTERS = "SELECT charId,char_name,level,race,base_class, clanid FROM characters WHERE level > 84 ORDER BY exp DESC";
private static final String SELECT_CHARACTERS_BY_RACE = "SELECT charId FROM characters WHERE level > 84 AND race = ? ORDER BY exp DESC";
public static final int PLAYER_LIMIT = 100;
private static final String GET_CURRENT_CYCLE_DATA = "SELECT characters.char_name, characters.level, characters.base_class, characters.clanid, olympiad_nobles.charId, olympiad_nobles.olympiad_points, olympiad_nobles.competitions_won, olympiad_nobles.competitions_lost FROM characters, olympiad_nobles WHERE characters.charId = olympiad_nobles.charId ORDER BY olympiad_nobles.olympiad_points DESC";
private static final String GET_CHARACTERS_BY_CLASS = "SELECT characters.charId, olympiad_nobles.olympiad_points FROM characters, olympiad_nobles WHERE olympiad_nobles.charId = characters.charId AND characters.base_class = ? ORDER BY olympiad_nobles.olympiad_points DESC";
private static final String SELECT_CHARACTERS = "SELECT charId,char_name,level,race,base_class, clanid FROM characters WHERE level > 84 ORDER BY exp DESC LIMIT " + PLAYER_LIMIT;
private static final String SELECT_CHARACTERS_BY_RACE = "SELECT charId FROM characters WHERE level > 84 AND race = ? ORDER BY exp DESC LIMIT " + PLAYER_LIMIT;
private static final String GET_CURRENT_CYCLE_DATA = "SELECT characters.char_name, characters.level, characters.base_class, characters.clanid, olympiad_nobles.charId, olympiad_nobles.olympiad_points, olympiad_nobles.competitions_won, olympiad_nobles.competitions_lost FROM characters, olympiad_nobles WHERE characters.charId = olympiad_nobles.charId ORDER BY olympiad_nobles.olympiad_points DESC LIMIT " + PLAYER_LIMIT;
private static final String GET_CHARACTERS_BY_CLASS = "SELECT characters.charId, olympiad_nobles.olympiad_points FROM characters, olympiad_nobles WHERE olympiad_nobles.charId = characters.charId AND characters.base_class = ? ORDER BY olympiad_nobles.olympiad_points DESC LIMIT " + PLAYER_LIMIT;
private final Map<Integer, StatsSet> _mainList = new ConcurrentHashMap<>();
private Map<Integer, StatsSet> _snapshotList = new ConcurrentHashMap<>();
@ -53,26 +55,6 @@ public class RankManager
ThreadPool.scheduleAtFixedRate(this::update, 0, 1800000);
}
public Map<Integer, StatsSet> getRankList()
{
return _mainList;
}
public Map<Integer, StatsSet> getSnapshotList()
{
return _snapshotList;
}
public Map<Integer, StatsSet> getOlyRankList()
{
return _mainOlyList;
}
public Map<Integer, StatsSet> getSnapshotOlyList()
{
return _snapshotOlyList;
}
private synchronized void update()
{
// Load charIds All
@ -80,6 +62,7 @@ public class RankManager
_mainList.clear();
_snapshotOlyList = _mainOlyList;
_mainOlyList.clear();
try (Connection con = DatabaseFactory.getConnection();
PreparedStatement statement = con.prepareStatement(SELECT_CHARACTERS))
{
@ -117,6 +100,7 @@ public class RankManager
{
LOGGER.log(Level.WARNING, "Could not load chars total rank data: " + this + " - " + e.getMessage(), e);
}
// load olympiad data.
try (Connection con = DatabaseFactory.getConnection();
PreparedStatement statement = con.prepareStatement(GET_CURRENT_CYCLE_DATA))
@ -237,13 +221,33 @@ public class RankManager
}
}
private static class SingletonHolder
public Map<Integer, StatsSet> getRankList()
{
protected static final RankManager INSTANCE = new RankManager();
return _mainList;
}
public Map<Integer, StatsSet> getSnapshotList()
{
return _snapshotList;
}
public Map<Integer, StatsSet> getOlyRankList()
{
return _mainOlyList;
}
public Map<Integer, StatsSet> getSnapshotOlyList()
{
return _snapshotOlyList;
}
public static RankManager getInstance()
{
return SingletonHolder.INSTANCE;
}
private static class SingletonHolder
{
protected static final RankManager INSTANCE = new RankManager();
}
}

View File

@ -37,5 +37,4 @@ public class RequestOlympiadMyRankingInfo implements IClientIncomingPacket
{
client.sendPacket(new ExOlympiadMyRankingInfo(client.getPlayer()));
}
}

View File

@ -48,5 +48,4 @@ public class RequestOlympiadRankingInfo implements IClientIncomingPacket
{
client.sendPacket(new ExOlympiadRankingInfo(client.getPlayer(), _tabId, _rankingType, _unk, _classId, _serverId));
}
}

View File

@ -25,6 +25,7 @@ import org.l2jmobius.Config;
import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.commons.network.PacketWriter;
import org.l2jmobius.gameserver.data.sql.impl.ClanTable;
import org.l2jmobius.gameserver.instancemanager.RankManager;
import org.l2jmobius.gameserver.model.entity.Hero;
import org.l2jmobius.gameserver.network.OutgoingPackets;
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
@ -34,11 +35,11 @@ import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
*/
public class ExOlympiadHeroAndLegendInfo implements IClientOutgoingPacket
{
private static final String GET_HEROES = "SELECT characters.charId, characters.char_name, characters.race, characters.sex, characters.base_class, characters.level, characters.clanid, olympiad_nobles_eom.competitions_won, olympiad_nobles_eom.competitions_lost, olympiad_nobles_eom.olympiad_points, heroes.legend_count, heroes.count FROM heroes, characters, olympiad_nobles_eom WHERE characters.charId = heroes.charId AND characters.charId = olympiad_nobles_eom.charId ORDER BY olympiad_nobles_eom.olympiad_points DESC, characters.base_class ASC";
// TODO: Move query and store data at RankManager.
private static final String GET_HEROES = "SELECT characters.charId, characters.char_name, characters.race, characters.sex, characters.base_class, characters.level, characters.clanid, olympiad_nobles_eom.competitions_won, olympiad_nobles_eom.competitions_lost, olympiad_nobles_eom.olympiad_points, heroes.legend_count, heroes.count FROM heroes, characters, olympiad_nobles_eom WHERE characters.charId = heroes.charId AND characters.charId = olympiad_nobles_eom.charId ORDER BY olympiad_nobles_eom.olympiad_points DESC, characters.base_class ASC LIMIT " + RankManager.PLAYER_LIMIT;
public ExOlympiadHeroAndLegendInfo()
{
}
@Override

View File

@ -26,6 +26,7 @@ import java.util.GregorianCalendar;
import org.l2jmobius.commons.database.DatabaseFactory;
import org.l2jmobius.commons.network.PacketWriter;
import org.l2jmobius.gameserver.instancemanager.RankManager;
import org.l2jmobius.gameserver.model.StatsSet;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.entity.Hero;
@ -38,8 +39,10 @@ import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
*/
public class ExOlympiadMyRankingInfo implements IClientOutgoingPacket
{
private static final String GET_CURRENT_CYCLE_DATA = "SELECT charId, olympiad_points, competitions_won, competitions_lost FROM olympiad_nobles WHERE class_id = ?";
private static final String GET_PREVIOUS_CYCLE_DATA = "SELECT charId, olympiad_points, competitions_won, competitions_lost FROM olympiad_nobles_eom WHERE class_id = ?";
// TODO: Move query and store data at RankManager.
private static final String GET_CURRENT_CYCLE_DATA = "SELECT charId, olympiad_points, competitions_won, competitions_lost FROM olympiad_nobles WHERE class_id = ? ORDER BY olympiad_points DESC LIMIT " + RankManager.PLAYER_LIMIT;
private static final String GET_PREVIOUS_CYCLE_DATA = "SELECT charId, olympiad_points, competitions_won, competitions_lost FROM olympiad_nobles_eom WHERE class_id = ? ORDER BY olympiad_points DESC LIMIT " + RankManager.PLAYER_LIMIT;
private final PlayerInstance _player;
public ExOlympiadMyRankingInfo(PlayerInstance player)
@ -98,6 +101,7 @@ public class ExOlympiadMyRankingInfo implements IClientOutgoingPacket
{
LOGGER.warning("Olympiad my ranking: Couldnt load data: " + e.getMessage());
}
int previousPlace = 0;
int previousWins = 0;
int previousLoses = 0;
@ -126,6 +130,7 @@ public class ExOlympiadMyRankingInfo implements IClientOutgoingPacket
{
LOGGER.warning("Olympiad my ranking: Couldnt load data: " + e.getMessage());
}
int heroCount = 0;
int legendCount = 0;
if (Hero.getInstance().getCompleteHeroes().containsKey(_player.getObjectId()))