L2JMobius

Crusader Player's Rankings

Paiplayer · 1 · 1193

Offline Paiplayer

  • Knight
  • ***
    • Posts: 74
The player's rankings aren't on Essence Crusader Mobius serverpack aren't beign loaded and refreshed at the correct rate.

They're calculated when the server starts ( \L2J_Mobius_Essence_6.3_Crusader\java\org\l2jmobius\gameserver\instancemanager\RankManager.java ) and beign refreshed every 5 houts.

At the retail server thei're refreshed everyday at 6:30 AM (it's said on the window tooltip aside the player's level).

Also the selectors are not filtering characters with 2nd or 3rd class, then I've set conditionals to exclude the first classes on the queryes.

There's the fix:

PS.: once more, for reasons I can't explain, the Eclipse created a diff as the entire file was changed. Maybe it bugged wuen I eddited the files on VisualStudioCode. Then I use one online DIFF creator. The entire file is in this paste: https://pastebin.com/WPjb77av

Code: [Select]
@@ -19,6 +19,7 @@
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
+import java.util.Calendar;
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
@@ -39,7 +40,7 @@
 import org.l2jmobius.gameserver.model.olympiad.Hero;

 /**
- * @author NviX
+ * @author NviX, PaiPlayer
  */
 public class RankManager
 {
@@ -49,14 +50,16 @@
  public static final long CURRENT_TIME = System.currentTimeMillis();
  public static final int PLAYER_LIMIT = 500;

- private static final String SELECT_CHARACTERS = "SELECT charId,char_name,level,race,base_class, clanid FROM characters WHERE (" + CURRENT_TIME + " - cast(lastAccess as signed) < " + TIME_LIMIT + ") AND accesslevel = 0 AND level > 39 ORDER BY exp DESC, onlinetime DESC LIMIT " + PLAYER_LIMIT;
- private static final String SELECT_CHARACTERS_PVP = "SELECT charId,char_name,level,race,base_class, clanid, deaths, kills, pvpkills FROM characters WHERE (" + CURRENT_TIME + " - cast(lastAccess as signed) < " + TIME_LIMIT + ") AND accesslevel = 0 AND level > 39 ORDER BY kills DESC, onlinetime DESC LIMIT " + PLAYER_LIMIT;
- private static final String SELECT_CHARACTERS_BY_RACE = "SELECT charId FROM characters WHERE (" + CURRENT_TIME + " - cast(lastAccess as signed) < " + TIME_LIMIT + ") AND accesslevel = 0 AND level > 39 AND race = ? ORDER BY exp DESC, onlinetime DESC LIMIT " + PLAYER_LIMIT;
- private static final String SELECT_PETS = "SELECT characters.charId, pets.exp, characters.char_name, pets.level as petLevel, characters.race as char_race, characters.level as char_level, characters.clanId, pet_evolves.index, pet_evolves.level as evolveLevel, pets.item_obj_id, item_id FROM characters, items, pets, pet_evolves WHERE pets.ownerId = characters.charId AND pet_evolves.itemObjId = items.object_id AND pet_evolves.itemObjId = pets.item_obj_id AND (" + CURRENT_TIME + " - cast(characters.lastAccess as signed) < " + TIME_LIMIT + ") AND characters.accesslevel = 0 AND pets.level > 39 ORDER BY pets.exp DESC, characters.onlinetime DESC LIMIT " + PLAYER_LIMIT;
+ private static final String CHARACTER_1ST_CLASS_LIST = "1,10,18,25,44,49,53,192,196,200,208,217"; // letting like this to easily expand at next expansions
+
+ private static final String SELECT_CHARACTERS = "SELECT charId,char_name,level,race,base_class, clanid FROM characters WHERE (" + CURRENT_TIME + " - cast(lastAccess as signed) < " + TIME_LIMIT + ") AND accesslevel = 0 AND level > 39 AND classid NOT IN (" + CHARACTER_1ST_CLASS_LIST + ") ORDER BY exp DESC, onlinetime DESC LIMIT " + PLAYER_LIMIT;
+ private static final String SELECT_CHARACTERS_PVP = "SELECT charId,char_name,level,race,base_class, clanid, deaths, kills, pvpkills FROM characters WHERE (" + CURRENT_TIME + " - cast(lastAccess as signed) < " + TIME_LIMIT + ") AND accesslevel = 0 AND level > 39 AND classid NOT IN (" + CHARACTER_1ST_CLASS_LIST + ") ORDER BY kills DESC, onlinetime DESC LIMIT " + PLAYER_LIMIT;
+ private static final String SELECT_CHARACTERS_BY_RACE = "SELECT charId FROM characters WHERE (" + CURRENT_TIME + " - cast(lastAccess as signed) < " + TIME_LIMIT + ") AND accesslevel = 0 AND level > 39 AND classid NOT IN (" + CHARACTER_1ST_CLASS_LIST + ") AND race = ? ORDER BY exp DESC, onlinetime DESC LIMIT " + PLAYER_LIMIT;
+ private static final String SELECT_PETS = "SELECT characters.charId, pets.exp, characters.char_name, pets.level as petLevel, characters.race as char_race, characters.level as char_level, characters.clanId, pet_evolves.index, pet_evolves.level as evolveLevel, pets.item_obj_id, item_id FROM characters, items, pets, pet_evolves WHERE pets.ownerId = characters.charId AND pet_evolves.itemObjId = items.object_id AND pet_evolves.itemObjId = pets.item_obj_id AND (" + CURRENT_TIME + " - cast(characters.lastAccess as signed) < " + TIME_LIMIT + ") AND characters.accesslevel = 0 AND pets.level > 39 AND characters.classid NOT IN (" + CHARACTER_1ST_CLASS_LIST + ") ORDER BY pets.exp DESC, characters.onlinetime DESC LIMIT " + PLAYER_LIMIT;
  private static final String SELECT_CLANS = "SELECT characters.level, characters.char_name, clan_data.clan_id, clan_data.clan_level, clan_data.clan_name, clan_data.reputation_score, clan_data.exp FROM characters, clan_data WHERE characters.charId = clan_data.leader_id AND characters.clanid = clan_data.clan_id AND dissolving_expiry_time = 0 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 charId FROM characters WHERE (" + CURRENT_TIME + " - cast(lastAccess as signed) < " + TIME_LIMIT + ") AND accesslevel = 0 AND level > 39 AND characters.base_class = ? ORDER BY exp DESC, onlinetime DESC LIMIT " + PLAYER_LIMIT;
+ private static final String GET_CHARACTERS_BY_CLASS = "SELECT charId FROM characters WHERE (" + CURRENT_TIME + " - cast(lastAccess as signed) < " + TIME_LIMIT + ") AND accesslevel = 0 AND level > 39 AND characters.base_class = ? AND classid NOT IN (" + CHARACTER_1ST_CLASS_LIST + ") ORDER BY exp DESC, onlinetime DESC LIMIT " + PLAYER_LIMIT;

  private final Map<Integer, StatSet> _mainList = new ConcurrentHashMap<>();
  private Map<Integer, StatSet> _snapshotList = new ConcurrentHashMap<>();
@@ -71,7 +74,16 @@

  protected RankManager()
  {
- ThreadPool.scheduleAtFixedRate(this::update, 0, 1800000);
+ final Calendar calendar = Calendar.getInstance();
+ calendar.set(Calendar.MINUTE, 30);
+ calendar.set(Calendar.SECOND, 0);
+ calendar.set(Calendar.HOUR_OF_DAY, 6);
+ if ((calendar.get(Calendar.HOUR_OF_DAY) >= 6) && (calendar.get(Calendar.MINUTE) >= 30))
+ {
+ calendar.add(Calendar.DAY_OF_YEAR, 1);
+ }
+ ThreadPool.scheduleAtFixedRate(this::update, calendar.getTimeInMillis() - System.currentTimeMillis(), 86400000); // start 6:30am then update every 1 day
+ update(); // to run at server startup
  }

  private synchronized void update()


Want a developer? Check here or call me on Discord: PaiPlayer#5051