From 509e0cf03552fc595513832afdafc49407d52a3d Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Sat, 10 Jul 2021 22:40:35 +0000 Subject: [PATCH] Class ranking additions. Contributed by Sero and nasseka. --- .../ai/others/RankingSkillBonuses.java | 57 ++ .../game/data/stats/skills/33100-33199.xml | 537 +++++++++++++++++- .../instancemanager/RankManager.java | 18 +- .../ranking/RequestPvpRankingList.java | 4 +- .../ranking/RequestRankingCharRankers.java | 4 +- .../ranking/ExPvpRankingList.java | 14 +- .../ranking/ExRankingCharInfo.java | 3 + .../ranking/ExRankingCharRankers.java | 151 ++++- .../ai/others/RankingSkillBonuses.java | 57 ++ .../game/data/stats/skills/33100-33199.xml | 537 +++++++++++++++++- .../instancemanager/RankManager.java | 18 +- .../ranking/RequestPvpRankingList.java | 4 +- .../ranking/RequestRankingCharRankers.java | 4 +- .../ranking/ExPvpRankingList.java | 14 +- .../ranking/ExRankingCharInfo.java | 3 + .../ranking/ExRankingCharRankers.java | 151 ++++- .../ai/others/RankingSkillBonuses.java | 57 ++ .../game/data/stats/skills/33100-33199.xml | 537 +++++++++++++++++- .../instancemanager/RankManager.java | 18 +- .../ranking/RequestPvpRankingList.java | 4 +- .../ranking/RequestRankingCharRankers.java | 4 +- .../ranking/ExPvpRankingList.java | 14 +- .../ranking/ExRankingCharInfo.java | 3 + .../ranking/ExRankingCharRankers.java | 151 ++++- .../gameserver/enums/RankingCategory.java | 2 + .../instancemanager/RankManager.java | 18 +- .../ranking/RequestPvpRankingList.java | 4 +- .../ranking/RequestRankingCharRankers.java | 4 +- .../ranking/ExPvpRankingList.java | 14 +- .../ranking/ExRankingCharInfo.java | 3 + .../ranking/ExRankingCharRankers.java | 139 ++++- .../gameserver/enums/RankingCategory.java | 2 + .../instancemanager/RankManager.java | 18 +- .../ranking/RequestPvpRankingList.java | 4 +- .../ranking/RequestRankingCharRankers.java | 4 +- .../ranking/ExPvpRankingList.java | 14 +- .../ranking/ExRankingCharInfo.java | 3 + .../ranking/ExRankingCharRankers.java | 139 ++++- .../gameserver/enums/RankingCategory.java | 2 + .../instancemanager/RankManager.java | 18 +- .../ranking/RequestPvpRankingList.java | 4 +- .../ranking/RequestRankingCharRankers.java | 4 +- .../ranking/ExPvpRankingList.java | 14 +- .../ranking/ExRankingCharInfo.java | 3 + .../ranking/ExRankingCharRankers.java | 139 ++++- 45 files changed, 2742 insertions(+), 174 deletions(-) diff --git a/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/ai/others/RankingSkillBonuses.java b/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/ai/others/RankingSkillBonuses.java index 50b5b3dccf..3eb9b5de2a 100644 --- a/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/ai/others/RankingSkillBonuses.java +++ b/L2J_Mobius_8.0_Homunculus/dist/game/data/scripts/ai/others/RankingSkillBonuses.java @@ -48,6 +48,15 @@ public class RankingSkillBonuses extends AbstractNpcAI private static final Skill SERVER_RANKING_BENEFIT_2 = SkillData.getInstance().getSkill(32885, 1); private static final Skill SERVER_RANKING_BENEFIT_3 = SkillData.getInstance().getSkill(32886, 1); private static final Skill RACE_RANKING_BENEFIT = SkillData.getInstance().getSkill(32887, 1); + private static final Skill CLASS_RANKING_BENEFIT = SkillData.getInstance().getSkill(33134, 1); + private static final Skill SIGEL_RANK_BENEFIT = SkillData.getInstance().getSkill(33126, 1); + private static final Skill WARRIOR_RANK_BENEFIT = SkillData.getInstance().getSkill(33127, 1); + private static final Skill ROGUE_RANK_BENEFIT = SkillData.getInstance().getSkill(33128, 1); + private static final Skill ARCHER_RANK_BENEFIT = SkillData.getInstance().getSkill(33129, 1); + private static final Skill ISS_RANK_BENEFIT = SkillData.getInstance().getSkill(33130, 1); + private static final Skill FEOH_RANK_BENEFIT = SkillData.getInstance().getSkill(33131, 1); + private static final Skill SUMMONER_RANK_BENEFIT = SkillData.getInstance().getSkill(33132, 1); + private static final Skill HEALER_RANK_BENEFIT = SkillData.getInstance().getSkill(33133, 1); @RegisterEvent(EventType.ON_PLAYER_LOGIN) @RegisterType(ListenerRegisterType.GLOBAL_PLAYERS) @@ -70,10 +79,19 @@ public class RankingSkillBonuses extends AbstractNpcAI player.getEffectList().stopSkillEffects(true, DWARF_LEVEL_RANKING_1ST_CLASS); player.getEffectList().stopSkillEffects(true, KAMAEL_LEVEL_RANKING_1ST_CLASS); player.getEffectList().stopSkillEffects(true, ERTHEIA_LEVEL_RANKING_1ST_CLASS); + player.getEffectList().stopSkillEffects(true, SIGEL_RANK_BENEFIT); + player.getEffectList().stopSkillEffects(true, WARRIOR_RANK_BENEFIT); + player.getEffectList().stopSkillEffects(true, ROGUE_RANK_BENEFIT); + player.getEffectList().stopSkillEffects(true, ARCHER_RANK_BENEFIT); + player.getEffectList().stopSkillEffects(true, ISS_RANK_BENEFIT); + player.getEffectList().stopSkillEffects(true, FEOH_RANK_BENEFIT); + player.getEffectList().stopSkillEffects(true, SUMMONER_RANK_BENEFIT); + player.getEffectList().stopSkillEffects(true, HEALER_RANK_BENEFIT); player.removeSkill(SERVER_RANKING_BENEFIT_1); player.removeSkill(SERVER_RANKING_BENEFIT_2); player.removeSkill(SERVER_RANKING_BENEFIT_3); player.removeSkill(RACE_RANKING_BENEFIT); + player.removeSkill(CLASS_RANKING_BENEFIT); // Add global rank skills. int rank = RankManager.getInstance().getPlayerGlobalRank(player); @@ -143,6 +161,45 @@ public class RankingSkillBonuses extends AbstractNpcAI } player.addSkill(RACE_RANKING_BENEFIT, false); } + + // Apply class rank effects. + final int classRank = RankManager.getInstance().getPlayerClassRank(player); + if ((classRank > 0) && (classRank <= 10)) + { + if ((player.getBaseClass() >= 148) && (player.getBaseClass() <= 151)) + { + SIGEL_RANK_BENEFIT.applyEffects(player, player); + } + else if (((player.getBaseClass() >= 152) && (player.getBaseClass() <= 157)) || (player.getBaseClass() == 188)) + { + WARRIOR_RANK_BENEFIT.applyEffects(player, player); + } + else if ((player.getBaseClass() >= 158) && (player.getBaseClass() <= 161)) + { + ROGUE_RANK_BENEFIT.applyEffects(player, player); + } + else if ((player.getBaseClass() >= 162) && (player.getBaseClass() <= 165)) + { + ARCHER_RANK_BENEFIT.applyEffects(player, player); + } + else if ((player.getBaseClass() >= 171) && (player.getBaseClass() <= 175)) + { + ISS_RANK_BENEFIT.applyEffects(player, player); + } + else if (((player.getBaseClass() >= 166) && (player.getBaseClass() <= 170)) || (player.getBaseClass() == 189)) + { + FEOH_RANK_BENEFIT.applyEffects(player, player); + } + else if ((player.getBaseClass() >= 176) && (player.getBaseClass() <= 178)) + { + SUMMONER_RANK_BENEFIT.applyEffects(player, player); + } + else if ((player.getBaseClass() >= 179) && (player.getBaseClass() <= 181)) + { + HEALER_RANK_BENEFIT.applyEffects(player, player); + } + player.addSkill(CLASS_RANKING_BENEFIT, false); + } } public static void main(String[] args) diff --git a/L2J_Mobius_8.0_Homunculus/dist/game/data/stats/skills/33100-33199.xml b/L2J_Mobius_8.0_Homunculus/dist/game/data/stats/skills/33100-33199.xml index b642f42024..85621bb645 100644 --- a/L2J_Mobius_8.0_Homunculus/dist/game/data/stats/skills/33100-33199.xml +++ b/L2J_Mobius_8.0_Homunculus/dist/game/data/stats/skills/33100-33199.xml @@ -133,47 +133,271 @@ icon.skill0000 - A1 + A2 + 100 + NONE + 5 + -2 + 0 + -2 + 1 + -1 + true + false + 2 + SELF + SINGLE + + + 33142 + 1 + 10024 + SELF + + icon.skill0000 - A1 + A2 + 100 + NONE + 5 + -2 + 0 + -2 + 1 + -1 + true + false + 2 + SELF + SINGLE + + + 33137 + 1 + 10274 + SELF + + + 33137 + 1 + 30520 + SELF + + icon.skill0000 - A1 + A2 + 100 + NONE + 5 + -2 + 0 + -2 + 1 + -1 + true + false + 2 + SELF + SINGLE + + + 33138 + 1 + 10520 + SELF + + icon.skill0000 - A1 + A2 + 100 + NONE + 5 + -2 + 0 + -2 + 1 + -1 + true + false + 2 + SELF + SINGLE + + + 33139 + 1 + 10783 + SELF + + icon.skill0000 - A1 + A2 + 100 + NONE + 5 + -2 + 0 + -2 + 1 + -1 + true + false + 2 + SELF + SINGLE + + + 33143 + 1 + 11621 + SELF + + icon.skill0000 - A1 + A2 + 100 + NONE + 5 + -2 + 0 + -2 + 1 + -1 + true + false + 2 + SELF + SINGLE + + + 33140 + 1 + 11068 + SELF + + + 33140 + 1 + 30855 + SELF + + + 33140 + 1 + 30016 + SELF + + + 33140 + 1 + 30860 + SELF + + icon.skill0000 - A1 + A2 + 100 + NONE + 5 + -2 + 0 + -2 + 1 + -1 + true + false + 2 + SELF + SINGLE + + + 33141 + 1 + 11274 + SELF + + icon.skill0000 - A1 + A2 + 100 + NONE + 5 + -2 + 0 + -2 + 1 + -1 + true + 2 + SELF + SINGLE + + + 33144 + 1 + 11759 + SELF + + icon.skill0000 - A1 + P + + + 3 + DIFF + + + 30 + + + 30 + FIRE + + + 30 + WATER + + + 30 + WIND + + + 30 + EARTH + + + 30 + HOLY + + + 30 + DARK + + icon.skill0000 @@ -187,42 +411,321 @@ icon.skill0000 - A1 + A2 + 15 + 5 + 20000 + 4 + + + 1 + ENEMY_ALL + PER + + + 1 + ENEMY_ALL + PER + + + 1 + ENEMY_ALL + PER + + + 1 + PER + + + 1 + PER + + + 1 + PER + + icon.skill0000 - A1 + A2 + 15 + 5 + 20000 + 4 + + + 1 + PER + BACK + + icon.skill0000 - A1 + A2 + 15 + 5 + 20000 + 4 + + + 1 + PER + + icon.skill0000 - A1 + A2 + 15 + 5 + 20000 + 4 + + + 1 + PER + + icon.skill0000 - A1 + A2 + 15 + 5 + 20000 + 4 + + + 3 + PER + + + 3 + PER + + icon.skill0000 - A1 + A2 + + 1 + 2 + 3 + + 15 + 1000 + SELF + PARTY + FRIEND + NONE + 5 + 20000 + 4 + + + + 1 + 2 + 3 + + ENEMY_ALL + PER + + + + 1 + 2 + 3 + + ENEMY_ALL + PER + + + + 1 + 2 + 3 + + ENEMY_ALL + PER + + + + 1 + 2 + 3 + + PER + + + + 1 + 2 + 3 + + PER + + + + 1 + 2 + 3 + + PER + + icon.skill0000 - A1 + A2 + + 1 + 2 + 3 + + 15 + 1000 + SELF + PARTY + FRIEND + NONE + 5 + 20000 + 4 + + + + 1 + 2 + 3 + + ENEMY_ALL + PER + + + + 1 + 2 + 3 + + ENEMY_ALL + PER + + + + 1 + 2 + 3 + + ENEMY_ALL + PER + + + + 1 + 2 + 3 + + PER + + + + 1 + 2 + 3 + + PER + + + + 1 + 2 + 3 + + PER + + icon.skill0000 - A1 + A2 + + 1 + 2 + 3 + + 15 + 1000 + SELF + PARTY + FRIEND + NONE + 5 + 20000 + 4 + + + + 1 + 2 + 3 + + ENEMY_ALL + PER + + + + 1 + 2 + 3 + + ENEMY_ALL + PER + + + + 1 + 2 + 3 + + ENEMY_ALL + PER + + + + 1 + 2 + 3 + + PER + + + + 1 + 2 + 3 + + PER + + + + 1 + 2 + 3 + + PER + + diff --git a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/instancemanager/RankManager.java b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/instancemanager/RankManager.java index 6767088a4a..8538f2363f 100644 --- a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/instancemanager/RankManager.java +++ b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/instancemanager/RankManager.java @@ -49,7 +49,7 @@ public class RankManager 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 > 84 AND race = ? ORDER BY exp DESC, onlinetime 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 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 > 84 AND characters.base_class = ? ORDER BY exp DESC, onlinetime DESC LIMIT " + PLAYER_LIMIT; private final Map _mainList = new ConcurrentHashMap<>(); private Map _snapshotList = new ConcurrentHashMap<>(); @@ -83,6 +83,7 @@ public class RankManager { final StatSet player = new StatSet(); final int charId = rset.getInt("charId"); + final int classId = rset.getInt("base_class"); player.set("charId", charId); player.set("name", rset.getString("char_name")); player.set("level", rset.getInt("level")); @@ -91,6 +92,7 @@ public class RankManager player.set("race", race); loadRaceRank(charId, race, player); + loadClassRank(charId, classId, player); final int clanId = rset.getInt("clanid"); if (clanId > 0) { @@ -330,6 +332,20 @@ public class RankManager return 0; } + public int getPlayerClassRank(PlayerInstance player) + { + final int playerOid = player.getObjectId(); + for (StatSet stats : _mainList.values()) + { + if (stats.getInt("charId") != playerOid) + { + continue; + } + return stats.getInt("classRank"); + } + return 0; + } + public static RankManager getInstance() { return SingletonHolder.INSTANCE; diff --git a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestPvpRankingList.java b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestPvpRankingList.java index d257aea783..da72d1a4bb 100644 --- a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestPvpRankingList.java +++ b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestPvpRankingList.java @@ -31,6 +31,7 @@ public class RequestPvpRankingList implements IClientIncomingPacket private int _tabId; private int _type; private int _race; + private int _class; @Override public boolean read(GameClient client, PacketReader packet) @@ -39,6 +40,7 @@ public class RequestPvpRankingList implements IClientIncomingPacket _tabId = packet.readC(); _type = packet.readC(); _race = packet.readD(); + _class = packet.readD(); return true; } @@ -51,6 +53,6 @@ public class RequestPvpRankingList implements IClientIncomingPacket return; } - player.sendPacket(new ExPvpRankingList(player, _season, _tabId, _type, _race)); + player.sendPacket(new ExPvpRankingList(player, _season, _tabId, _type, _race, _class)); } } diff --git a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestRankingCharRankers.java b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestRankingCharRankers.java index 6b3dac4575..42a5d5a5cb 100644 --- a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestRankingCharRankers.java +++ b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestRankingCharRankers.java @@ -30,6 +30,7 @@ public class RequestRankingCharRankers implements IClientIncomingPacket private int _group; private int _scope; private int _ordinal; + private int _baseclass; @Override public boolean read(GameClient client, PacketReader packet) @@ -37,6 +38,7 @@ public class RequestRankingCharRankers implements IClientIncomingPacket _group = packet.readC(); // Tab Id _scope = packet.readC(); // All or personal _ordinal = packet.readD(); + _baseclass = packet.readD(); return true; } @@ -49,6 +51,6 @@ public class RequestRankingCharRankers implements IClientIncomingPacket return; } - player.sendPacket(new ExRankingCharRankers(player, _group, _scope, _ordinal)); + player.sendPacket(new ExRankingCharRankers(player, _group, _scope, _ordinal, _baseclass)); } } diff --git a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExPvpRankingList.java b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExPvpRankingList.java index bc5ca191f4..da918006ab 100644 --- a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExPvpRankingList.java +++ b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExPvpRankingList.java @@ -24,6 +24,7 @@ import java.util.Map.Entry; import java.util.stream.Collectors; import org.l2jmobius.commons.network.PacketWriter; +import org.l2jmobius.gameserver.enums.ClassId; import org.l2jmobius.gameserver.enums.Race; import org.l2jmobius.gameserver.enums.RankingCategory; import org.l2jmobius.gameserver.enums.RankingScope; @@ -43,16 +44,18 @@ public class ExPvpRankingList implements IClientOutgoingPacket private final int _tabId; private final int _type; private final int _race; + private final int _class; private final Map _playerList; private final Map _snapshotList; - public ExPvpRankingList(PlayerInstance player, int season, int tabId, int type, int race) + public ExPvpRankingList(PlayerInstance player, int season, int tabId, int type, int race, int baseclass) { _player = player; _season = season; _tabId = tabId; _type = type; _race = race; + _class = baseclass; _playerList = RankManager.getInstance().getPvpRankList(); _snapshotList = RankManager.getInstance().getSnapshotPvpRankList(); } @@ -68,7 +71,7 @@ public class ExPvpRankingList implements IClientOutgoingPacket if (!_playerList.isEmpty() && (_type != 255) && (_race != 255)) { final RankingCategory category = RankingCategory.values()[_tabId]; - writeFilteredRankingData(packet, category, category.getScopeByGroup(_type), Race.values()[_race]); + writeFilteredRankingData(packet, category, category.getScopeByGroup(_type), Race.values()[_race], ClassId.values()[_class]); } else { @@ -77,7 +80,7 @@ public class ExPvpRankingList implements IClientOutgoingPacket return true; } - private void writeFilteredRankingData(PacketWriter packet, RankingCategory category, RankingScope scope, Race race) + private void writeFilteredRankingData(PacketWriter packet, RankingCategory category, RankingScope scope, Race race, ClassId baseclass) { switch (category) { @@ -101,6 +104,11 @@ public class ExPvpRankingList implements IClientOutgoingPacket writeScopeData(packet, scope, _playerList.entrySet().stream().filter(it -> _player.getFriendList().contains(it.getValue().getInt("charId"))).collect(Collectors.toList()), _snapshotList.entrySet().stream().filter(it -> _player.getFriendList().contains(it.getValue().getInt("charId"))).collect(Collectors.toList())); break; } + case CLASS: + { + writeScopeData(packet, scope, _playerList.entrySet().stream().filter(it -> it.getValue().getInt("classId") == baseclass.ordinal()).collect(Collectors.toList()), _snapshotList.entrySet().stream().filter(it -> it.getValue().getInt("classId") == baseclass.ordinal()).collect(Collectors.toList())); + break; + } } } diff --git a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharInfo.java b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharInfo.java index d9d4657e6a..08acb1200b 100644 --- a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharInfo.java +++ b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharInfo.java @@ -58,6 +58,7 @@ public class ExRankingCharInfo implements IClientOutgoingPacket { packet.writeD(id); // server rank packet.writeD(player.getInt("raceRank")); // race rank + packet.writeD(player.getInt("classRank")); // class rank for (Integer id2 : _snapshotList.keySet()) { @@ -66,6 +67,8 @@ public class ExRankingCharInfo implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank")); // race rank snapshot + packet.writeD(snapshot.getInt("classRank")); // class rank snapshot + packet.writeD(0); packet.writeD(0); packet.writeD(0); return true; diff --git a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharRankers.java b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharRankers.java index ba9354b0ab..53101f1b79 100644 --- a/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharRankers.java +++ b/L2J_Mobius_8.0_Homunculus/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharRankers.java @@ -36,15 +36,17 @@ public class ExRankingCharRankers implements IClientOutgoingPacket private final int _group; private final int _scope; private final int _race; + private final int _class; private final Map _playerList; private final Map _snapshotList; - public ExRankingCharRankers(PlayerInstance player, int group, int scope, int race) + public ExRankingCharRankers(PlayerInstance player, int group, int scope, int race, int baseclass) { _player = player; _group = group; _scope = scope; _race = race; + _class = baseclass; _playerList = RankManager.getInstance().getRankList(); _snapshotList = RankManager.getInstance().getSnapshotList(); } @@ -59,7 +61,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket packet.writeD(_race); packet.writeD(_player.getClassId().getId()); - if (_playerList.size() > 0) + if (!_playerList.isEmpty()) { switch (_group) { @@ -79,7 +81,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket packet.writeD(player.getInt("classId")); packet.writeD(player.getInt("race")); packet.writeD(id); // server rank - if (_snapshotList.size() > 0) + if (!_snapshotList.isEmpty()) { for (Integer id2 : _snapshotList.keySet()) { @@ -88,7 +90,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -129,7 +131,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket packet.writeD(plr.getInt("race")); packet.writeD(id2); // server rank - if (_snapshotList.size() > 0) + if (!_snapshotList.isEmpty()) { for (Integer id3 : _snapshotList.keySet()) { @@ -138,7 +140,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id3); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -179,7 +181,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket packet.writeD(player.getInt("classId")); packet.writeD(player.getInt("race")); packet.writeD(i); // server rank - if (_snapshotList.size() > 0) + if (!_snapshotList.isEmpty()) { final Map snapshotRaceList = new ConcurrentHashMap<>(); int j = 1; @@ -199,7 +201,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -207,7 +209,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(i); packet.writeD(i); - packet.writeD(i); // TODO: Check this. nClassRank_Snapshot? + packet.writeD(i); // nClassRank_Snapshot } i++; } @@ -256,7 +258,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket packet.writeD(id2); // server rank packet.writeD(id2); packet.writeD(id2); - packet.writeD(id2); // TODO: Check this. nClassRank_Snapshot? + packet.writeD(id2); // nClassRank_Snapshot } } } @@ -294,7 +296,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket packet.writeD(player.getInt("classId")); packet.writeD(player.getInt("race")); packet.writeD(id); // clan rank - if (_snapshotList.size() > 0) + if (!_snapshotList.isEmpty()) { for (Integer id2 : _snapshotList.keySet()) { @@ -303,7 +305,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -323,7 +325,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket } case 3: // friend { - if (_player.getFriendList().size() > 0) + if (!_player.getFriendList().isEmpty()) { final Set friendList = ConcurrentHashMap.newKeySet(); int count = 1; @@ -354,7 +356,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket packet.writeD(player.getInt("classId")); packet.writeD(player.getInt("race")); packet.writeD(id); // friend rank - if (_snapshotList.size() > 0) + if (!_snapshotList.isEmpty()) { for (Integer id2 : _snapshotList.keySet()) { @@ -363,7 +365,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -393,7 +395,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket packet.writeD(_player.getBaseClass()); packet.writeD(_player.getRace().ordinal()); packet.writeD(1); // clan rank - if (_snapshotList.size() > 0) + if (!_snapshotList.isEmpty()) { for (Integer id : _snapshotList.keySet()) { @@ -402,7 +404,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -415,6 +417,121 @@ public class ExRankingCharRankers implements IClientOutgoingPacket } break; } + case 4: // class + { + if (_scope == 0) // all + { + int count = 0; + for (int i = 1; i <= _playerList.size(); i++) + { + final StatSet player = _playerList.get(i); + if (_class == player.getInt("classId")) + { + count++; + } + } + packet.writeD(count > 100 ? 100 : count); + + int i = 1; + for (Integer id : _playerList.keySet()) + { + final StatSet player = _playerList.get(id); + if (_class == player.getInt("classId")) + { + packet.writeString(player.getString("name")); + packet.writeString(player.getString("clanName")); + packet.writeD(player.getInt("level")); + packet.writeD(player.getInt("classId")); + packet.writeD(player.getInt("race")); + packet.writeD(i); // server rank + if (_snapshotList.size() > 0) + { + final Map snapshotRaceList = new ConcurrentHashMap<>(); + int j = 1; + for (Integer id2 : _snapshotList.keySet()) + { + final StatSet snapshot = _snapshotList.get(id2); + if (_class == snapshot.getInt("classId")) + { + snapshotRaceList.put(j, _snapshotList.get(id2)); + j++; + } + } + for (Integer id2 : snapshotRaceList.keySet()) + { + final StatSet snapshot = snapshotRaceList.get(id2); + if (player.getInt("charId") == snapshot.getInt("charId")) + { + packet.writeD(id2); // server rank snapshot + packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot + } + } + } + else + { + packet.writeD(i); + packet.writeD(i); + packet.writeD(i); // nClassRank_Snapshot? + } + i++; + } + } + } + else + { + boolean found = false; + + final Map raceList = new ConcurrentHashMap<>(); + int i = 1; + for (Integer id : _playerList.keySet()) + { + final StatSet set = _playerList.get(id); + if (_player.getBaseClass() == set.getInt("classId")) + { + raceList.put(i, _playerList.get(id)); + i++; + } + } + + for (Integer id : raceList.keySet()) + { + final StatSet player = raceList.get(id); + if (player.getInt("charId") == _player.getObjectId()) + { + found = true; + final int first = id > 10 ? (id - 9) : 1; + final int last = raceList.size() >= (id + 10) ? id + 10 : id + (raceList.size() - id); + if (first == 1) + { + packet.writeD(last - (first - 1)); + } + else + { + packet.writeD(last - first); + } + for (int id2 = first; id2 <= last; id2++) + { + final StatSet plr = raceList.get(id2); + packet.writeString(plr.getString("name")); + packet.writeString(plr.getString("clanName")); + packet.writeD(plr.getInt("level")); + packet.writeD(plr.getInt("classId")); + packet.writeD(plr.getInt("race")); + packet.writeD(id2); // server rank + packet.writeD(id2); + packet.writeD(id2); + packet.writeD(id2); // nClassRank_Snapshot? + } + } + } + if (!found) + { + packet.writeD(0); + } + } + break; + } } } else diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/ai/others/RankingSkillBonuses.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/ai/others/RankingSkillBonuses.java index 50b5b3dccf..3eb9b5de2a 100644 --- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/ai/others/RankingSkillBonuses.java +++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/scripts/ai/others/RankingSkillBonuses.java @@ -48,6 +48,15 @@ public class RankingSkillBonuses extends AbstractNpcAI private static final Skill SERVER_RANKING_BENEFIT_2 = SkillData.getInstance().getSkill(32885, 1); private static final Skill SERVER_RANKING_BENEFIT_3 = SkillData.getInstance().getSkill(32886, 1); private static final Skill RACE_RANKING_BENEFIT = SkillData.getInstance().getSkill(32887, 1); + private static final Skill CLASS_RANKING_BENEFIT = SkillData.getInstance().getSkill(33134, 1); + private static final Skill SIGEL_RANK_BENEFIT = SkillData.getInstance().getSkill(33126, 1); + private static final Skill WARRIOR_RANK_BENEFIT = SkillData.getInstance().getSkill(33127, 1); + private static final Skill ROGUE_RANK_BENEFIT = SkillData.getInstance().getSkill(33128, 1); + private static final Skill ARCHER_RANK_BENEFIT = SkillData.getInstance().getSkill(33129, 1); + private static final Skill ISS_RANK_BENEFIT = SkillData.getInstance().getSkill(33130, 1); + private static final Skill FEOH_RANK_BENEFIT = SkillData.getInstance().getSkill(33131, 1); + private static final Skill SUMMONER_RANK_BENEFIT = SkillData.getInstance().getSkill(33132, 1); + private static final Skill HEALER_RANK_BENEFIT = SkillData.getInstance().getSkill(33133, 1); @RegisterEvent(EventType.ON_PLAYER_LOGIN) @RegisterType(ListenerRegisterType.GLOBAL_PLAYERS) @@ -70,10 +79,19 @@ public class RankingSkillBonuses extends AbstractNpcAI player.getEffectList().stopSkillEffects(true, DWARF_LEVEL_RANKING_1ST_CLASS); player.getEffectList().stopSkillEffects(true, KAMAEL_LEVEL_RANKING_1ST_CLASS); player.getEffectList().stopSkillEffects(true, ERTHEIA_LEVEL_RANKING_1ST_CLASS); + player.getEffectList().stopSkillEffects(true, SIGEL_RANK_BENEFIT); + player.getEffectList().stopSkillEffects(true, WARRIOR_RANK_BENEFIT); + player.getEffectList().stopSkillEffects(true, ROGUE_RANK_BENEFIT); + player.getEffectList().stopSkillEffects(true, ARCHER_RANK_BENEFIT); + player.getEffectList().stopSkillEffects(true, ISS_RANK_BENEFIT); + player.getEffectList().stopSkillEffects(true, FEOH_RANK_BENEFIT); + player.getEffectList().stopSkillEffects(true, SUMMONER_RANK_BENEFIT); + player.getEffectList().stopSkillEffects(true, HEALER_RANK_BENEFIT); player.removeSkill(SERVER_RANKING_BENEFIT_1); player.removeSkill(SERVER_RANKING_BENEFIT_2); player.removeSkill(SERVER_RANKING_BENEFIT_3); player.removeSkill(RACE_RANKING_BENEFIT); + player.removeSkill(CLASS_RANKING_BENEFIT); // Add global rank skills. int rank = RankManager.getInstance().getPlayerGlobalRank(player); @@ -143,6 +161,45 @@ public class RankingSkillBonuses extends AbstractNpcAI } player.addSkill(RACE_RANKING_BENEFIT, false); } + + // Apply class rank effects. + final int classRank = RankManager.getInstance().getPlayerClassRank(player); + if ((classRank > 0) && (classRank <= 10)) + { + if ((player.getBaseClass() >= 148) && (player.getBaseClass() <= 151)) + { + SIGEL_RANK_BENEFIT.applyEffects(player, player); + } + else if (((player.getBaseClass() >= 152) && (player.getBaseClass() <= 157)) || (player.getBaseClass() == 188)) + { + WARRIOR_RANK_BENEFIT.applyEffects(player, player); + } + else if ((player.getBaseClass() >= 158) && (player.getBaseClass() <= 161)) + { + ROGUE_RANK_BENEFIT.applyEffects(player, player); + } + else if ((player.getBaseClass() >= 162) && (player.getBaseClass() <= 165)) + { + ARCHER_RANK_BENEFIT.applyEffects(player, player); + } + else if ((player.getBaseClass() >= 171) && (player.getBaseClass() <= 175)) + { + ISS_RANK_BENEFIT.applyEffects(player, player); + } + else if (((player.getBaseClass() >= 166) && (player.getBaseClass() <= 170)) || (player.getBaseClass() == 189)) + { + FEOH_RANK_BENEFIT.applyEffects(player, player); + } + else if ((player.getBaseClass() >= 176) && (player.getBaseClass() <= 178)) + { + SUMMONER_RANK_BENEFIT.applyEffects(player, player); + } + else if ((player.getBaseClass() >= 179) && (player.getBaseClass() <= 181)) + { + HEALER_RANK_BENEFIT.applyEffects(player, player); + } + player.addSkill(CLASS_RANKING_BENEFIT, false); + } } public static void main(String[] args) diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/stats/skills/33100-33199.xml b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/stats/skills/33100-33199.xml index d120975ccc..2f0daac17a 100644 --- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/stats/skills/33100-33199.xml +++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/dist/game/data/stats/skills/33100-33199.xml @@ -133,47 +133,271 @@ icon.skill0000 - A1 + A2 + 100 + NONE + 5 + -2 + 0 + -2 + 1 + -1 + true + false + 2 + SELF + SINGLE + + + 33142 + 1 + 10024 + SELF + + icon.skill0000 - A1 + A2 + 100 + NONE + 5 + -2 + 0 + -2 + 1 + -1 + true + false + 2 + SELF + SINGLE + + + 33137 + 1 + 10274 + SELF + + + 33137 + 1 + 30520 + SELF + + icon.skill0000 - A1 + A2 + 100 + NONE + 5 + -2 + 0 + -2 + 1 + -1 + true + false + 2 + SELF + SINGLE + + + 33138 + 1 + 10520 + SELF + + icon.skill0000 - A1 + A2 + 100 + NONE + 5 + -2 + 0 + -2 + 1 + -1 + true + false + 2 + SELF + SINGLE + + + 33139 + 1 + 10783 + SELF + + icon.skill0000 - A1 + A2 + 100 + NONE + 5 + -2 + 0 + -2 + 1 + -1 + true + false + 2 + SELF + SINGLE + + + 33143 + 1 + 11621 + SELF + + icon.skill0000 - A1 + A2 + 100 + NONE + 5 + -2 + 0 + -2 + 1 + -1 + true + false + 2 + SELF + SINGLE + + + 33140 + 1 + 11068 + SELF + + + 33140 + 1 + 30855 + SELF + + + 33140 + 1 + 30016 + SELF + + + 33140 + 1 + 30860 + SELF + + icon.skill0000 - A1 + A2 + 100 + NONE + 5 + -2 + 0 + -2 + 1 + -1 + true + false + 2 + SELF + SINGLE + + + 33141 + 1 + 11274 + SELF + + icon.skill0000 - A1 + A2 + 100 + NONE + 5 + -2 + 0 + -2 + 1 + -1 + true + 2 + SELF + SINGLE + + + 33144 + 1 + 11759 + SELF + + icon.skill0000 - A1 + P + + + 3 + DIFF + + + 30 + + + 30 + FIRE + + + 30 + WATER + + + 30 + WIND + + + 30 + EARTH + + + 30 + HOLY + + + 30 + DARK + + icon.skill0000 @@ -187,42 +411,321 @@ icon.skill0000 - A1 + A2 + 15 + 5 + 20000 + 4 + + + 1 + ENEMY_ALL + PER + + + 1 + ENEMY_ALL + PER + + + 1 + ENEMY_ALL + PER + + + 1 + PER + + + 1 + PER + + + 1 + PER + + icon.skill0000 - A1 + A2 + 15 + 5 + 20000 + 4 + + + 1 + PER + BACK + + icon.skill0000 - A1 + A2 + 15 + 5 + 20000 + 4 + + + 1 + PER + + icon.skill0000 - A1 + A2 + 15 + 5 + 20000 + 4 + + + 1 + PER + + icon.skill0000 - A1 + A2 + 15 + 5 + 20000 + 4 + + + 3 + PER + + + 3 + PER + + icon.skill0000 - A1 + A2 + + 1 + 2 + 3 + + 15 + 1000 + SELF + PARTY + FRIEND + NONE + 5 + 20000 + 4 + + + + 1 + 2 + 3 + + ENEMY_ALL + PER + + + + 1 + 2 + 3 + + ENEMY_ALL + PER + + + + 1 + 2 + 3 + + ENEMY_ALL + PER + + + + 1 + 2 + 3 + + PER + + + + 1 + 2 + 3 + + PER + + + + 1 + 2 + 3 + + PER + + icon.skill0000 - A1 + A2 + + 1 + 2 + 3 + + 15 + 1000 + SELF + PARTY + FRIEND + NONE + 5 + 20000 + 4 + + + + 1 + 2 + 3 + + ENEMY_ALL + PER + + + + 1 + 2 + 3 + + ENEMY_ALL + PER + + + + 1 + 2 + 3 + + ENEMY_ALL + PER + + + + 1 + 2 + 3 + + PER + + + + 1 + 2 + 3 + + PER + + + + 1 + 2 + 3 + + PER + + icon.skill0000 - A1 + A2 + + 1 + 2 + 3 + + 15 + 1000 + SELF + PARTY + FRIEND + NONE + 5 + 20000 + 4 + + + + 1 + 2 + 3 + + ENEMY_ALL + PER + + + + 1 + 2 + 3 + + ENEMY_ALL + PER + + + + 1 + 2 + 3 + + ENEMY_ALL + PER + + + + 1 + 2 + 3 + + PER + + + + 1 + 2 + 3 + + PER + + + + 1 + 2 + 3 + + PER + + diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/instancemanager/RankManager.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/instancemanager/RankManager.java index 6767088a4a..8538f2363f 100644 --- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/instancemanager/RankManager.java +++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/instancemanager/RankManager.java @@ -49,7 +49,7 @@ public class RankManager 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 > 84 AND race = ? ORDER BY exp DESC, onlinetime 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 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 > 84 AND characters.base_class = ? ORDER BY exp DESC, onlinetime DESC LIMIT " + PLAYER_LIMIT; private final Map _mainList = new ConcurrentHashMap<>(); private Map _snapshotList = new ConcurrentHashMap<>(); @@ -83,6 +83,7 @@ public class RankManager { final StatSet player = new StatSet(); final int charId = rset.getInt("charId"); + final int classId = rset.getInt("base_class"); player.set("charId", charId); player.set("name", rset.getString("char_name")); player.set("level", rset.getInt("level")); @@ -91,6 +92,7 @@ public class RankManager player.set("race", race); loadRaceRank(charId, race, player); + loadClassRank(charId, classId, player); final int clanId = rset.getInt("clanid"); if (clanId > 0) { @@ -330,6 +332,20 @@ public class RankManager return 0; } + public int getPlayerClassRank(PlayerInstance player) + { + final int playerOid = player.getObjectId(); + for (StatSet stats : _mainList.values()) + { + if (stats.getInt("charId") != playerOid) + { + continue; + } + return stats.getInt("classRank"); + } + return 0; + } + public static RankManager getInstance() { return SingletonHolder.INSTANCE; diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestPvpRankingList.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestPvpRankingList.java index d257aea783..da72d1a4bb 100644 --- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestPvpRankingList.java +++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestPvpRankingList.java @@ -31,6 +31,7 @@ public class RequestPvpRankingList implements IClientIncomingPacket private int _tabId; private int _type; private int _race; + private int _class; @Override public boolean read(GameClient client, PacketReader packet) @@ -39,6 +40,7 @@ public class RequestPvpRankingList implements IClientIncomingPacket _tabId = packet.readC(); _type = packet.readC(); _race = packet.readD(); + _class = packet.readD(); return true; } @@ -51,6 +53,6 @@ public class RequestPvpRankingList implements IClientIncomingPacket return; } - player.sendPacket(new ExPvpRankingList(player, _season, _tabId, _type, _race)); + player.sendPacket(new ExPvpRankingList(player, _season, _tabId, _type, _race, _class)); } } diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestRankingCharRankers.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestRankingCharRankers.java index 6b3dac4575..42a5d5a5cb 100644 --- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestRankingCharRankers.java +++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestRankingCharRankers.java @@ -30,6 +30,7 @@ public class RequestRankingCharRankers implements IClientIncomingPacket private int _group; private int _scope; private int _ordinal; + private int _baseclass; @Override public boolean read(GameClient client, PacketReader packet) @@ -37,6 +38,7 @@ public class RequestRankingCharRankers implements IClientIncomingPacket _group = packet.readC(); // Tab Id _scope = packet.readC(); // All or personal _ordinal = packet.readD(); + _baseclass = packet.readD(); return true; } @@ -49,6 +51,6 @@ public class RequestRankingCharRankers implements IClientIncomingPacket return; } - player.sendPacket(new ExRankingCharRankers(player, _group, _scope, _ordinal)); + player.sendPacket(new ExRankingCharRankers(player, _group, _scope, _ordinal, _baseclass)); } } diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExPvpRankingList.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExPvpRankingList.java index bc5ca191f4..da918006ab 100644 --- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExPvpRankingList.java +++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExPvpRankingList.java @@ -24,6 +24,7 @@ import java.util.Map.Entry; import java.util.stream.Collectors; import org.l2jmobius.commons.network.PacketWriter; +import org.l2jmobius.gameserver.enums.ClassId; import org.l2jmobius.gameserver.enums.Race; import org.l2jmobius.gameserver.enums.RankingCategory; import org.l2jmobius.gameserver.enums.RankingScope; @@ -43,16 +44,18 @@ public class ExPvpRankingList implements IClientOutgoingPacket private final int _tabId; private final int _type; private final int _race; + private final int _class; private final Map _playerList; private final Map _snapshotList; - public ExPvpRankingList(PlayerInstance player, int season, int tabId, int type, int race) + public ExPvpRankingList(PlayerInstance player, int season, int tabId, int type, int race, int baseclass) { _player = player; _season = season; _tabId = tabId; _type = type; _race = race; + _class = baseclass; _playerList = RankManager.getInstance().getPvpRankList(); _snapshotList = RankManager.getInstance().getSnapshotPvpRankList(); } @@ -68,7 +71,7 @@ public class ExPvpRankingList implements IClientOutgoingPacket if (!_playerList.isEmpty() && (_type != 255) && (_race != 255)) { final RankingCategory category = RankingCategory.values()[_tabId]; - writeFilteredRankingData(packet, category, category.getScopeByGroup(_type), Race.values()[_race]); + writeFilteredRankingData(packet, category, category.getScopeByGroup(_type), Race.values()[_race], ClassId.values()[_class]); } else { @@ -77,7 +80,7 @@ public class ExPvpRankingList implements IClientOutgoingPacket return true; } - private void writeFilteredRankingData(PacketWriter packet, RankingCategory category, RankingScope scope, Race race) + private void writeFilteredRankingData(PacketWriter packet, RankingCategory category, RankingScope scope, Race race, ClassId baseclass) { switch (category) { @@ -101,6 +104,11 @@ public class ExPvpRankingList implements IClientOutgoingPacket writeScopeData(packet, scope, _playerList.entrySet().stream().filter(it -> _player.getFriendList().contains(it.getValue().getInt("charId"))).collect(Collectors.toList()), _snapshotList.entrySet().stream().filter(it -> _player.getFriendList().contains(it.getValue().getInt("charId"))).collect(Collectors.toList())); break; } + case CLASS: + { + writeScopeData(packet, scope, _playerList.entrySet().stream().filter(it -> it.getValue().getInt("classId") == baseclass.ordinal()).collect(Collectors.toList()), _snapshotList.entrySet().stream().filter(it -> it.getValue().getInt("classId") == baseclass.ordinal()).collect(Collectors.toList())); + break; + } } } diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharInfo.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharInfo.java index d9d4657e6a..08acb1200b 100644 --- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharInfo.java +++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharInfo.java @@ -58,6 +58,7 @@ public class ExRankingCharInfo implements IClientOutgoingPacket { packet.writeD(id); // server rank packet.writeD(player.getInt("raceRank")); // race rank + packet.writeD(player.getInt("classRank")); // class rank for (Integer id2 : _snapshotList.keySet()) { @@ -66,6 +67,8 @@ public class ExRankingCharInfo implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank")); // race rank snapshot + packet.writeD(snapshot.getInt("classRank")); // class rank snapshot + packet.writeD(0); packet.writeD(0); packet.writeD(0); return true; diff --git a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharRankers.java b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharRankers.java index ba9354b0ab..53101f1b79 100644 --- a/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharRankers.java +++ b/L2J_Mobius_9.0_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharRankers.java @@ -36,15 +36,17 @@ public class ExRankingCharRankers implements IClientOutgoingPacket private final int _group; private final int _scope; private final int _race; + private final int _class; private final Map _playerList; private final Map _snapshotList; - public ExRankingCharRankers(PlayerInstance player, int group, int scope, int race) + public ExRankingCharRankers(PlayerInstance player, int group, int scope, int race, int baseclass) { _player = player; _group = group; _scope = scope; _race = race; + _class = baseclass; _playerList = RankManager.getInstance().getRankList(); _snapshotList = RankManager.getInstance().getSnapshotList(); } @@ -59,7 +61,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket packet.writeD(_race); packet.writeD(_player.getClassId().getId()); - if (_playerList.size() > 0) + if (!_playerList.isEmpty()) { switch (_group) { @@ -79,7 +81,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket packet.writeD(player.getInt("classId")); packet.writeD(player.getInt("race")); packet.writeD(id); // server rank - if (_snapshotList.size() > 0) + if (!_snapshotList.isEmpty()) { for (Integer id2 : _snapshotList.keySet()) { @@ -88,7 +90,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -129,7 +131,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket packet.writeD(plr.getInt("race")); packet.writeD(id2); // server rank - if (_snapshotList.size() > 0) + if (!_snapshotList.isEmpty()) { for (Integer id3 : _snapshotList.keySet()) { @@ -138,7 +140,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id3); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -179,7 +181,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket packet.writeD(player.getInt("classId")); packet.writeD(player.getInt("race")); packet.writeD(i); // server rank - if (_snapshotList.size() > 0) + if (!_snapshotList.isEmpty()) { final Map snapshotRaceList = new ConcurrentHashMap<>(); int j = 1; @@ -199,7 +201,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -207,7 +209,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(i); packet.writeD(i); - packet.writeD(i); // TODO: Check this. nClassRank_Snapshot? + packet.writeD(i); // nClassRank_Snapshot } i++; } @@ -256,7 +258,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket packet.writeD(id2); // server rank packet.writeD(id2); packet.writeD(id2); - packet.writeD(id2); // TODO: Check this. nClassRank_Snapshot? + packet.writeD(id2); // nClassRank_Snapshot } } } @@ -294,7 +296,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket packet.writeD(player.getInt("classId")); packet.writeD(player.getInt("race")); packet.writeD(id); // clan rank - if (_snapshotList.size() > 0) + if (!_snapshotList.isEmpty()) { for (Integer id2 : _snapshotList.keySet()) { @@ -303,7 +305,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -323,7 +325,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket } case 3: // friend { - if (_player.getFriendList().size() > 0) + if (!_player.getFriendList().isEmpty()) { final Set friendList = ConcurrentHashMap.newKeySet(); int count = 1; @@ -354,7 +356,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket packet.writeD(player.getInt("classId")); packet.writeD(player.getInt("race")); packet.writeD(id); // friend rank - if (_snapshotList.size() > 0) + if (!_snapshotList.isEmpty()) { for (Integer id2 : _snapshotList.keySet()) { @@ -363,7 +365,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -393,7 +395,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket packet.writeD(_player.getBaseClass()); packet.writeD(_player.getRace().ordinal()); packet.writeD(1); // clan rank - if (_snapshotList.size() > 0) + if (!_snapshotList.isEmpty()) { for (Integer id : _snapshotList.keySet()) { @@ -402,7 +404,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -415,6 +417,121 @@ public class ExRankingCharRankers implements IClientOutgoingPacket } break; } + case 4: // class + { + if (_scope == 0) // all + { + int count = 0; + for (int i = 1; i <= _playerList.size(); i++) + { + final StatSet player = _playerList.get(i); + if (_class == player.getInt("classId")) + { + count++; + } + } + packet.writeD(count > 100 ? 100 : count); + + int i = 1; + for (Integer id : _playerList.keySet()) + { + final StatSet player = _playerList.get(id); + if (_class == player.getInt("classId")) + { + packet.writeString(player.getString("name")); + packet.writeString(player.getString("clanName")); + packet.writeD(player.getInt("level")); + packet.writeD(player.getInt("classId")); + packet.writeD(player.getInt("race")); + packet.writeD(i); // server rank + if (_snapshotList.size() > 0) + { + final Map snapshotRaceList = new ConcurrentHashMap<>(); + int j = 1; + for (Integer id2 : _snapshotList.keySet()) + { + final StatSet snapshot = _snapshotList.get(id2); + if (_class == snapshot.getInt("classId")) + { + snapshotRaceList.put(j, _snapshotList.get(id2)); + j++; + } + } + for (Integer id2 : snapshotRaceList.keySet()) + { + final StatSet snapshot = snapshotRaceList.get(id2); + if (player.getInt("charId") == snapshot.getInt("charId")) + { + packet.writeD(id2); // server rank snapshot + packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot + } + } + } + else + { + packet.writeD(i); + packet.writeD(i); + packet.writeD(i); // nClassRank_Snapshot? + } + i++; + } + } + } + else + { + boolean found = false; + + final Map raceList = new ConcurrentHashMap<>(); + int i = 1; + for (Integer id : _playerList.keySet()) + { + final StatSet set = _playerList.get(id); + if (_player.getBaseClass() == set.getInt("classId")) + { + raceList.put(i, _playerList.get(id)); + i++; + } + } + + for (Integer id : raceList.keySet()) + { + final StatSet player = raceList.get(id); + if (player.getInt("charId") == _player.getObjectId()) + { + found = true; + final int first = id > 10 ? (id - 9) : 1; + final int last = raceList.size() >= (id + 10) ? id + 10 : id + (raceList.size() - id); + if (first == 1) + { + packet.writeD(last - (first - 1)); + } + else + { + packet.writeD(last - first); + } + for (int id2 = first; id2 <= last; id2++) + { + final StatSet plr = raceList.get(id2); + packet.writeString(plr.getString("name")); + packet.writeString(plr.getString("clanName")); + packet.writeD(plr.getInt("level")); + packet.writeD(plr.getInt("classId")); + packet.writeD(plr.getInt("race")); + packet.writeD(id2); // server rank + packet.writeD(id2); + packet.writeD(id2); + packet.writeD(id2); // nClassRank_Snapshot? + } + } + } + if (!found) + { + packet.writeD(0); + } + } + break; + } } } else diff --git a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/scripts/ai/others/RankingSkillBonuses.java b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/scripts/ai/others/RankingSkillBonuses.java index 50b5b3dccf..3eb9b5de2a 100644 --- a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/scripts/ai/others/RankingSkillBonuses.java +++ b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/scripts/ai/others/RankingSkillBonuses.java @@ -48,6 +48,15 @@ public class RankingSkillBonuses extends AbstractNpcAI private static final Skill SERVER_RANKING_BENEFIT_2 = SkillData.getInstance().getSkill(32885, 1); private static final Skill SERVER_RANKING_BENEFIT_3 = SkillData.getInstance().getSkill(32886, 1); private static final Skill RACE_RANKING_BENEFIT = SkillData.getInstance().getSkill(32887, 1); + private static final Skill CLASS_RANKING_BENEFIT = SkillData.getInstance().getSkill(33134, 1); + private static final Skill SIGEL_RANK_BENEFIT = SkillData.getInstance().getSkill(33126, 1); + private static final Skill WARRIOR_RANK_BENEFIT = SkillData.getInstance().getSkill(33127, 1); + private static final Skill ROGUE_RANK_BENEFIT = SkillData.getInstance().getSkill(33128, 1); + private static final Skill ARCHER_RANK_BENEFIT = SkillData.getInstance().getSkill(33129, 1); + private static final Skill ISS_RANK_BENEFIT = SkillData.getInstance().getSkill(33130, 1); + private static final Skill FEOH_RANK_BENEFIT = SkillData.getInstance().getSkill(33131, 1); + private static final Skill SUMMONER_RANK_BENEFIT = SkillData.getInstance().getSkill(33132, 1); + private static final Skill HEALER_RANK_BENEFIT = SkillData.getInstance().getSkill(33133, 1); @RegisterEvent(EventType.ON_PLAYER_LOGIN) @RegisterType(ListenerRegisterType.GLOBAL_PLAYERS) @@ -70,10 +79,19 @@ public class RankingSkillBonuses extends AbstractNpcAI player.getEffectList().stopSkillEffects(true, DWARF_LEVEL_RANKING_1ST_CLASS); player.getEffectList().stopSkillEffects(true, KAMAEL_LEVEL_RANKING_1ST_CLASS); player.getEffectList().stopSkillEffects(true, ERTHEIA_LEVEL_RANKING_1ST_CLASS); + player.getEffectList().stopSkillEffects(true, SIGEL_RANK_BENEFIT); + player.getEffectList().stopSkillEffects(true, WARRIOR_RANK_BENEFIT); + player.getEffectList().stopSkillEffects(true, ROGUE_RANK_BENEFIT); + player.getEffectList().stopSkillEffects(true, ARCHER_RANK_BENEFIT); + player.getEffectList().stopSkillEffects(true, ISS_RANK_BENEFIT); + player.getEffectList().stopSkillEffects(true, FEOH_RANK_BENEFIT); + player.getEffectList().stopSkillEffects(true, SUMMONER_RANK_BENEFIT); + player.getEffectList().stopSkillEffects(true, HEALER_RANK_BENEFIT); player.removeSkill(SERVER_RANKING_BENEFIT_1); player.removeSkill(SERVER_RANKING_BENEFIT_2); player.removeSkill(SERVER_RANKING_BENEFIT_3); player.removeSkill(RACE_RANKING_BENEFIT); + player.removeSkill(CLASS_RANKING_BENEFIT); // Add global rank skills. int rank = RankManager.getInstance().getPlayerGlobalRank(player); @@ -143,6 +161,45 @@ public class RankingSkillBonuses extends AbstractNpcAI } player.addSkill(RACE_RANKING_BENEFIT, false); } + + // Apply class rank effects. + final int classRank = RankManager.getInstance().getPlayerClassRank(player); + if ((classRank > 0) && (classRank <= 10)) + { + if ((player.getBaseClass() >= 148) && (player.getBaseClass() <= 151)) + { + SIGEL_RANK_BENEFIT.applyEffects(player, player); + } + else if (((player.getBaseClass() >= 152) && (player.getBaseClass() <= 157)) || (player.getBaseClass() == 188)) + { + WARRIOR_RANK_BENEFIT.applyEffects(player, player); + } + else if ((player.getBaseClass() >= 158) && (player.getBaseClass() <= 161)) + { + ROGUE_RANK_BENEFIT.applyEffects(player, player); + } + else if ((player.getBaseClass() >= 162) && (player.getBaseClass() <= 165)) + { + ARCHER_RANK_BENEFIT.applyEffects(player, player); + } + else if ((player.getBaseClass() >= 171) && (player.getBaseClass() <= 175)) + { + ISS_RANK_BENEFIT.applyEffects(player, player); + } + else if (((player.getBaseClass() >= 166) && (player.getBaseClass() <= 170)) || (player.getBaseClass() == 189)) + { + FEOH_RANK_BENEFIT.applyEffects(player, player); + } + else if ((player.getBaseClass() >= 176) && (player.getBaseClass() <= 178)) + { + SUMMONER_RANK_BENEFIT.applyEffects(player, player); + } + else if ((player.getBaseClass() >= 179) && (player.getBaseClass() <= 181)) + { + HEALER_RANK_BENEFIT.applyEffects(player, player); + } + player.addSkill(CLASS_RANKING_BENEFIT, false); + } } public static void main(String[] args) diff --git a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/stats/skills/33100-33199.xml b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/stats/skills/33100-33199.xml index d120975ccc..2f0daac17a 100644 --- a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/stats/skills/33100-33199.xml +++ b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/dist/game/data/stats/skills/33100-33199.xml @@ -133,47 +133,271 @@ icon.skill0000 - A1 + A2 + 100 + NONE + 5 + -2 + 0 + -2 + 1 + -1 + true + false + 2 + SELF + SINGLE + + + 33142 + 1 + 10024 + SELF + + icon.skill0000 - A1 + A2 + 100 + NONE + 5 + -2 + 0 + -2 + 1 + -1 + true + false + 2 + SELF + SINGLE + + + 33137 + 1 + 10274 + SELF + + + 33137 + 1 + 30520 + SELF + + icon.skill0000 - A1 + A2 + 100 + NONE + 5 + -2 + 0 + -2 + 1 + -1 + true + false + 2 + SELF + SINGLE + + + 33138 + 1 + 10520 + SELF + + icon.skill0000 - A1 + A2 + 100 + NONE + 5 + -2 + 0 + -2 + 1 + -1 + true + false + 2 + SELF + SINGLE + + + 33139 + 1 + 10783 + SELF + + icon.skill0000 - A1 + A2 + 100 + NONE + 5 + -2 + 0 + -2 + 1 + -1 + true + false + 2 + SELF + SINGLE + + + 33143 + 1 + 11621 + SELF + + icon.skill0000 - A1 + A2 + 100 + NONE + 5 + -2 + 0 + -2 + 1 + -1 + true + false + 2 + SELF + SINGLE + + + 33140 + 1 + 11068 + SELF + + + 33140 + 1 + 30855 + SELF + + + 33140 + 1 + 30016 + SELF + + + 33140 + 1 + 30860 + SELF + + icon.skill0000 - A1 + A2 + 100 + NONE + 5 + -2 + 0 + -2 + 1 + -1 + true + false + 2 + SELF + SINGLE + + + 33141 + 1 + 11274 + SELF + + icon.skill0000 - A1 + A2 + 100 + NONE + 5 + -2 + 0 + -2 + 1 + -1 + true + 2 + SELF + SINGLE + + + 33144 + 1 + 11759 + SELF + + icon.skill0000 - A1 + P + + + 3 + DIFF + + + 30 + + + 30 + FIRE + + + 30 + WATER + + + 30 + WIND + + + 30 + EARTH + + + 30 + HOLY + + + 30 + DARK + + icon.skill0000 @@ -187,42 +411,321 @@ icon.skill0000 - A1 + A2 + 15 + 5 + 20000 + 4 + + + 1 + ENEMY_ALL + PER + + + 1 + ENEMY_ALL + PER + + + 1 + ENEMY_ALL + PER + + + 1 + PER + + + 1 + PER + + + 1 + PER + + icon.skill0000 - A1 + A2 + 15 + 5 + 20000 + 4 + + + 1 + PER + BACK + + icon.skill0000 - A1 + A2 + 15 + 5 + 20000 + 4 + + + 1 + PER + + icon.skill0000 - A1 + A2 + 15 + 5 + 20000 + 4 + + + 1 + PER + + icon.skill0000 - A1 + A2 + 15 + 5 + 20000 + 4 + + + 3 + PER + + + 3 + PER + + icon.skill0000 - A1 + A2 + + 1 + 2 + 3 + + 15 + 1000 + SELF + PARTY + FRIEND + NONE + 5 + 20000 + 4 + + + + 1 + 2 + 3 + + ENEMY_ALL + PER + + + + 1 + 2 + 3 + + ENEMY_ALL + PER + + + + 1 + 2 + 3 + + ENEMY_ALL + PER + + + + 1 + 2 + 3 + + PER + + + + 1 + 2 + 3 + + PER + + + + 1 + 2 + 3 + + PER + + icon.skill0000 - A1 + A2 + + 1 + 2 + 3 + + 15 + 1000 + SELF + PARTY + FRIEND + NONE + 5 + 20000 + 4 + + + + 1 + 2 + 3 + + ENEMY_ALL + PER + + + + 1 + 2 + 3 + + ENEMY_ALL + PER + + + + 1 + 2 + 3 + + ENEMY_ALL + PER + + + + 1 + 2 + 3 + + PER + + + + 1 + 2 + 3 + + PER + + + + 1 + 2 + 3 + + PER + + icon.skill0000 - A1 + A2 + + 1 + 2 + 3 + + 15 + 1000 + SELF + PARTY + FRIEND + NONE + 5 + 20000 + 4 + + + + 1 + 2 + 3 + + ENEMY_ALL + PER + + + + 1 + 2 + 3 + + ENEMY_ALL + PER + + + + 1 + 2 + 3 + + ENEMY_ALL + PER + + + + 1 + 2 + 3 + + PER + + + + 1 + 2 + 3 + + PER + + + + 1 + 2 + 3 + + PER + + diff --git a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/instancemanager/RankManager.java b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/instancemanager/RankManager.java index 6767088a4a..8538f2363f 100644 --- a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/instancemanager/RankManager.java +++ b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/instancemanager/RankManager.java @@ -49,7 +49,7 @@ public class RankManager 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 > 84 AND race = ? ORDER BY exp DESC, onlinetime 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 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 > 84 AND characters.base_class = ? ORDER BY exp DESC, onlinetime DESC LIMIT " + PLAYER_LIMIT; private final Map _mainList = new ConcurrentHashMap<>(); private Map _snapshotList = new ConcurrentHashMap<>(); @@ -83,6 +83,7 @@ public class RankManager { final StatSet player = new StatSet(); final int charId = rset.getInt("charId"); + final int classId = rset.getInt("base_class"); player.set("charId", charId); player.set("name", rset.getString("char_name")); player.set("level", rset.getInt("level")); @@ -91,6 +92,7 @@ public class RankManager player.set("race", race); loadRaceRank(charId, race, player); + loadClassRank(charId, classId, player); final int clanId = rset.getInt("clanid"); if (clanId > 0) { @@ -330,6 +332,20 @@ public class RankManager return 0; } + public int getPlayerClassRank(PlayerInstance player) + { + final int playerOid = player.getObjectId(); + for (StatSet stats : _mainList.values()) + { + if (stats.getInt("charId") != playerOid) + { + continue; + } + return stats.getInt("classRank"); + } + return 0; + } + public static RankManager getInstance() { return SingletonHolder.INSTANCE; diff --git a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestPvpRankingList.java b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestPvpRankingList.java index d257aea783..da72d1a4bb 100644 --- a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestPvpRankingList.java +++ b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestPvpRankingList.java @@ -31,6 +31,7 @@ public class RequestPvpRankingList implements IClientIncomingPacket private int _tabId; private int _type; private int _race; + private int _class; @Override public boolean read(GameClient client, PacketReader packet) @@ -39,6 +40,7 @@ public class RequestPvpRankingList implements IClientIncomingPacket _tabId = packet.readC(); _type = packet.readC(); _race = packet.readD(); + _class = packet.readD(); return true; } @@ -51,6 +53,6 @@ public class RequestPvpRankingList implements IClientIncomingPacket return; } - player.sendPacket(new ExPvpRankingList(player, _season, _tabId, _type, _race)); + player.sendPacket(new ExPvpRankingList(player, _season, _tabId, _type, _race, _class)); } } diff --git a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestRankingCharRankers.java b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestRankingCharRankers.java index 6b3dac4575..42a5d5a5cb 100644 --- a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestRankingCharRankers.java +++ b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestRankingCharRankers.java @@ -30,6 +30,7 @@ public class RequestRankingCharRankers implements IClientIncomingPacket private int _group; private int _scope; private int _ordinal; + private int _baseclass; @Override public boolean read(GameClient client, PacketReader packet) @@ -37,6 +38,7 @@ public class RequestRankingCharRankers implements IClientIncomingPacket _group = packet.readC(); // Tab Id _scope = packet.readC(); // All or personal _ordinal = packet.readD(); + _baseclass = packet.readD(); return true; } @@ -49,6 +51,6 @@ public class RequestRankingCharRankers implements IClientIncomingPacket return; } - player.sendPacket(new ExRankingCharRankers(player, _group, _scope, _ordinal)); + player.sendPacket(new ExRankingCharRankers(player, _group, _scope, _ordinal, _baseclass)); } } diff --git a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExPvpRankingList.java b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExPvpRankingList.java index bc5ca191f4..da918006ab 100644 --- a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExPvpRankingList.java +++ b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExPvpRankingList.java @@ -24,6 +24,7 @@ import java.util.Map.Entry; import java.util.stream.Collectors; import org.l2jmobius.commons.network.PacketWriter; +import org.l2jmobius.gameserver.enums.ClassId; import org.l2jmobius.gameserver.enums.Race; import org.l2jmobius.gameserver.enums.RankingCategory; import org.l2jmobius.gameserver.enums.RankingScope; @@ -43,16 +44,18 @@ public class ExPvpRankingList implements IClientOutgoingPacket private final int _tabId; private final int _type; private final int _race; + private final int _class; private final Map _playerList; private final Map _snapshotList; - public ExPvpRankingList(PlayerInstance player, int season, int tabId, int type, int race) + public ExPvpRankingList(PlayerInstance player, int season, int tabId, int type, int race, int baseclass) { _player = player; _season = season; _tabId = tabId; _type = type; _race = race; + _class = baseclass; _playerList = RankManager.getInstance().getPvpRankList(); _snapshotList = RankManager.getInstance().getSnapshotPvpRankList(); } @@ -68,7 +71,7 @@ public class ExPvpRankingList implements IClientOutgoingPacket if (!_playerList.isEmpty() && (_type != 255) && (_race != 255)) { final RankingCategory category = RankingCategory.values()[_tabId]; - writeFilteredRankingData(packet, category, category.getScopeByGroup(_type), Race.values()[_race]); + writeFilteredRankingData(packet, category, category.getScopeByGroup(_type), Race.values()[_race], ClassId.values()[_class]); } else { @@ -77,7 +80,7 @@ public class ExPvpRankingList implements IClientOutgoingPacket return true; } - private void writeFilteredRankingData(PacketWriter packet, RankingCategory category, RankingScope scope, Race race) + private void writeFilteredRankingData(PacketWriter packet, RankingCategory category, RankingScope scope, Race race, ClassId baseclass) { switch (category) { @@ -101,6 +104,11 @@ public class ExPvpRankingList implements IClientOutgoingPacket writeScopeData(packet, scope, _playerList.entrySet().stream().filter(it -> _player.getFriendList().contains(it.getValue().getInt("charId"))).collect(Collectors.toList()), _snapshotList.entrySet().stream().filter(it -> _player.getFriendList().contains(it.getValue().getInt("charId"))).collect(Collectors.toList())); break; } + case CLASS: + { + writeScopeData(packet, scope, _playerList.entrySet().stream().filter(it -> it.getValue().getInt("classId") == baseclass.ordinal()).collect(Collectors.toList()), _snapshotList.entrySet().stream().filter(it -> it.getValue().getInt("classId") == baseclass.ordinal()).collect(Collectors.toList())); + break; + } } } diff --git a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharInfo.java b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharInfo.java index d9d4657e6a..08acb1200b 100644 --- a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharInfo.java +++ b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharInfo.java @@ -58,6 +58,7 @@ public class ExRankingCharInfo implements IClientOutgoingPacket { packet.writeD(id); // server rank packet.writeD(player.getInt("raceRank")); // race rank + packet.writeD(player.getInt("classRank")); // class rank for (Integer id2 : _snapshotList.keySet()) { @@ -66,6 +67,8 @@ public class ExRankingCharInfo implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank")); // race rank snapshot + packet.writeD(snapshot.getInt("classRank")); // class rank snapshot + packet.writeD(0); packet.writeD(0); packet.writeD(0); return true; diff --git a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharRankers.java b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharRankers.java index ba9354b0ab..53101f1b79 100644 --- a/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharRankers.java +++ b/L2J_Mobius_9.2_ReturnOfTheQueenAnt_Ch2/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharRankers.java @@ -36,15 +36,17 @@ public class ExRankingCharRankers implements IClientOutgoingPacket private final int _group; private final int _scope; private final int _race; + private final int _class; private final Map _playerList; private final Map _snapshotList; - public ExRankingCharRankers(PlayerInstance player, int group, int scope, int race) + public ExRankingCharRankers(PlayerInstance player, int group, int scope, int race, int baseclass) { _player = player; _group = group; _scope = scope; _race = race; + _class = baseclass; _playerList = RankManager.getInstance().getRankList(); _snapshotList = RankManager.getInstance().getSnapshotList(); } @@ -59,7 +61,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket packet.writeD(_race); packet.writeD(_player.getClassId().getId()); - if (_playerList.size() > 0) + if (!_playerList.isEmpty()) { switch (_group) { @@ -79,7 +81,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket packet.writeD(player.getInt("classId")); packet.writeD(player.getInt("race")); packet.writeD(id); // server rank - if (_snapshotList.size() > 0) + if (!_snapshotList.isEmpty()) { for (Integer id2 : _snapshotList.keySet()) { @@ -88,7 +90,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -129,7 +131,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket packet.writeD(plr.getInt("race")); packet.writeD(id2); // server rank - if (_snapshotList.size() > 0) + if (!_snapshotList.isEmpty()) { for (Integer id3 : _snapshotList.keySet()) { @@ -138,7 +140,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id3); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -179,7 +181,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket packet.writeD(player.getInt("classId")); packet.writeD(player.getInt("race")); packet.writeD(i); // server rank - if (_snapshotList.size() > 0) + if (!_snapshotList.isEmpty()) { final Map snapshotRaceList = new ConcurrentHashMap<>(); int j = 1; @@ -199,7 +201,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -207,7 +209,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(i); packet.writeD(i); - packet.writeD(i); // TODO: Check this. nClassRank_Snapshot? + packet.writeD(i); // nClassRank_Snapshot } i++; } @@ -256,7 +258,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket packet.writeD(id2); // server rank packet.writeD(id2); packet.writeD(id2); - packet.writeD(id2); // TODO: Check this. nClassRank_Snapshot? + packet.writeD(id2); // nClassRank_Snapshot } } } @@ -294,7 +296,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket packet.writeD(player.getInt("classId")); packet.writeD(player.getInt("race")); packet.writeD(id); // clan rank - if (_snapshotList.size() > 0) + if (!_snapshotList.isEmpty()) { for (Integer id2 : _snapshotList.keySet()) { @@ -303,7 +305,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -323,7 +325,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket } case 3: // friend { - if (_player.getFriendList().size() > 0) + if (!_player.getFriendList().isEmpty()) { final Set friendList = ConcurrentHashMap.newKeySet(); int count = 1; @@ -354,7 +356,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket packet.writeD(player.getInt("classId")); packet.writeD(player.getInt("race")); packet.writeD(id); // friend rank - if (_snapshotList.size() > 0) + if (!_snapshotList.isEmpty()) { for (Integer id2 : _snapshotList.keySet()) { @@ -363,7 +365,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -393,7 +395,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket packet.writeD(_player.getBaseClass()); packet.writeD(_player.getRace().ordinal()); packet.writeD(1); // clan rank - if (_snapshotList.size() > 0) + if (!_snapshotList.isEmpty()) { for (Integer id : _snapshotList.keySet()) { @@ -402,7 +404,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -415,6 +417,121 @@ public class ExRankingCharRankers implements IClientOutgoingPacket } break; } + case 4: // class + { + if (_scope == 0) // all + { + int count = 0; + for (int i = 1; i <= _playerList.size(); i++) + { + final StatSet player = _playerList.get(i); + if (_class == player.getInt("classId")) + { + count++; + } + } + packet.writeD(count > 100 ? 100 : count); + + int i = 1; + for (Integer id : _playerList.keySet()) + { + final StatSet player = _playerList.get(id); + if (_class == player.getInt("classId")) + { + packet.writeString(player.getString("name")); + packet.writeString(player.getString("clanName")); + packet.writeD(player.getInt("level")); + packet.writeD(player.getInt("classId")); + packet.writeD(player.getInt("race")); + packet.writeD(i); // server rank + if (_snapshotList.size() > 0) + { + final Map snapshotRaceList = new ConcurrentHashMap<>(); + int j = 1; + for (Integer id2 : _snapshotList.keySet()) + { + final StatSet snapshot = _snapshotList.get(id2); + if (_class == snapshot.getInt("classId")) + { + snapshotRaceList.put(j, _snapshotList.get(id2)); + j++; + } + } + for (Integer id2 : snapshotRaceList.keySet()) + { + final StatSet snapshot = snapshotRaceList.get(id2); + if (player.getInt("charId") == snapshot.getInt("charId")) + { + packet.writeD(id2); // server rank snapshot + packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot + } + } + } + else + { + packet.writeD(i); + packet.writeD(i); + packet.writeD(i); // nClassRank_Snapshot? + } + i++; + } + } + } + else + { + boolean found = false; + + final Map raceList = new ConcurrentHashMap<>(); + int i = 1; + for (Integer id : _playerList.keySet()) + { + final StatSet set = _playerList.get(id); + if (_player.getBaseClass() == set.getInt("classId")) + { + raceList.put(i, _playerList.get(id)); + i++; + } + } + + for (Integer id : raceList.keySet()) + { + final StatSet player = raceList.get(id); + if (player.getInt("charId") == _player.getObjectId()) + { + found = true; + final int first = id > 10 ? (id - 9) : 1; + final int last = raceList.size() >= (id + 10) ? id + 10 : id + (raceList.size() - id); + if (first == 1) + { + packet.writeD(last - (first - 1)); + } + else + { + packet.writeD(last - first); + } + for (int id2 = first; id2 <= last; id2++) + { + final StatSet plr = raceList.get(id2); + packet.writeString(plr.getString("name")); + packet.writeString(plr.getString("clanName")); + packet.writeD(plr.getInt("level")); + packet.writeD(plr.getInt("classId")); + packet.writeD(plr.getInt("race")); + packet.writeD(id2); // server rank + packet.writeD(id2); + packet.writeD(id2); + packet.writeD(id2); // nClassRank_Snapshot? + } + } + } + if (!found) + { + packet.writeD(0); + } + } + break; + } } } else diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/enums/RankingCategory.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/enums/RankingCategory.java index 46a198f370..8fba312b99 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/enums/RankingCategory.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/enums/RankingCategory.java @@ -28,6 +28,7 @@ public enum RankingCategory { SERVER, RACE, + CLASS, CLAN, FRIEND; @@ -43,6 +44,7 @@ public enum RankingCategory { return id == 0 ? TOP_100 : SELF; } + case CLASS: case CLAN: case FRIEND: { diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/instancemanager/RankManager.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/instancemanager/RankManager.java index 8de53bcf92..dc69599b01 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/instancemanager/RankManager.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/instancemanager/RankManager.java @@ -49,7 +49,7 @@ public class RankManager 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 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 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 final Map _mainList = new ConcurrentHashMap<>(); private Map _snapshotList = new ConcurrentHashMap<>(); @@ -83,6 +83,7 @@ public class RankManager { final StatSet player = new StatSet(); final int charId = rset.getInt("charId"); + final int classId = rset.getInt("base_class"); player.set("charId", charId); player.set("name", rset.getString("char_name")); player.set("level", rset.getInt("level")); @@ -91,6 +92,7 @@ public class RankManager player.set("race", race); loadRaceRank(charId, race, player); + loadClassRank(charId, classId, player); final int clanId = rset.getInt("clanid"); if (clanId > 0) { @@ -330,6 +332,20 @@ public class RankManager return 0; } + public int getPlayerClassRank(PlayerInstance player) + { + final int playerOid = player.getObjectId(); + for (StatSet stats : _mainList.values()) + { + if (stats.getInt("charId") != playerOid) + { + continue; + } + return stats.getInt("classRank"); + } + return 0; + } + public static RankManager getInstance() { return SingletonHolder.INSTANCE; diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestPvpRankingList.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestPvpRankingList.java index d257aea783..da72d1a4bb 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestPvpRankingList.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestPvpRankingList.java @@ -31,6 +31,7 @@ public class RequestPvpRankingList implements IClientIncomingPacket private int _tabId; private int _type; private int _race; + private int _class; @Override public boolean read(GameClient client, PacketReader packet) @@ -39,6 +40,7 @@ public class RequestPvpRankingList implements IClientIncomingPacket _tabId = packet.readC(); _type = packet.readC(); _race = packet.readD(); + _class = packet.readD(); return true; } @@ -51,6 +53,6 @@ public class RequestPvpRankingList implements IClientIncomingPacket return; } - player.sendPacket(new ExPvpRankingList(player, _season, _tabId, _type, _race)); + player.sendPacket(new ExPvpRankingList(player, _season, _tabId, _type, _race, _class)); } } diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestRankingCharRankers.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestRankingCharRankers.java index 6b3dac4575..42a5d5a5cb 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestRankingCharRankers.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestRankingCharRankers.java @@ -30,6 +30,7 @@ public class RequestRankingCharRankers implements IClientIncomingPacket private int _group; private int _scope; private int _ordinal; + private int _baseclass; @Override public boolean read(GameClient client, PacketReader packet) @@ -37,6 +38,7 @@ public class RequestRankingCharRankers implements IClientIncomingPacket _group = packet.readC(); // Tab Id _scope = packet.readC(); // All or personal _ordinal = packet.readD(); + _baseclass = packet.readD(); return true; } @@ -49,6 +51,6 @@ public class RequestRankingCharRankers implements IClientIncomingPacket return; } - player.sendPacket(new ExRankingCharRankers(player, _group, _scope, _ordinal)); + player.sendPacket(new ExRankingCharRankers(player, _group, _scope, _ordinal, _baseclass)); } } diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExPvpRankingList.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExPvpRankingList.java index bc5ca191f4..da918006ab 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExPvpRankingList.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExPvpRankingList.java @@ -24,6 +24,7 @@ import java.util.Map.Entry; import java.util.stream.Collectors; import org.l2jmobius.commons.network.PacketWriter; +import org.l2jmobius.gameserver.enums.ClassId; import org.l2jmobius.gameserver.enums.Race; import org.l2jmobius.gameserver.enums.RankingCategory; import org.l2jmobius.gameserver.enums.RankingScope; @@ -43,16 +44,18 @@ public class ExPvpRankingList implements IClientOutgoingPacket private final int _tabId; private final int _type; private final int _race; + private final int _class; private final Map _playerList; private final Map _snapshotList; - public ExPvpRankingList(PlayerInstance player, int season, int tabId, int type, int race) + public ExPvpRankingList(PlayerInstance player, int season, int tabId, int type, int race, int baseclass) { _player = player; _season = season; _tabId = tabId; _type = type; _race = race; + _class = baseclass; _playerList = RankManager.getInstance().getPvpRankList(); _snapshotList = RankManager.getInstance().getSnapshotPvpRankList(); } @@ -68,7 +71,7 @@ public class ExPvpRankingList implements IClientOutgoingPacket if (!_playerList.isEmpty() && (_type != 255) && (_race != 255)) { final RankingCategory category = RankingCategory.values()[_tabId]; - writeFilteredRankingData(packet, category, category.getScopeByGroup(_type), Race.values()[_race]); + writeFilteredRankingData(packet, category, category.getScopeByGroup(_type), Race.values()[_race], ClassId.values()[_class]); } else { @@ -77,7 +80,7 @@ public class ExPvpRankingList implements IClientOutgoingPacket return true; } - private void writeFilteredRankingData(PacketWriter packet, RankingCategory category, RankingScope scope, Race race) + private void writeFilteredRankingData(PacketWriter packet, RankingCategory category, RankingScope scope, Race race, ClassId baseclass) { switch (category) { @@ -101,6 +104,11 @@ public class ExPvpRankingList implements IClientOutgoingPacket writeScopeData(packet, scope, _playerList.entrySet().stream().filter(it -> _player.getFriendList().contains(it.getValue().getInt("charId"))).collect(Collectors.toList()), _snapshotList.entrySet().stream().filter(it -> _player.getFriendList().contains(it.getValue().getInt("charId"))).collect(Collectors.toList())); break; } + case CLASS: + { + writeScopeData(packet, scope, _playerList.entrySet().stream().filter(it -> it.getValue().getInt("classId") == baseclass.ordinal()).collect(Collectors.toList()), _snapshotList.entrySet().stream().filter(it -> it.getValue().getInt("classId") == baseclass.ordinal()).collect(Collectors.toList())); + break; + } } } diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharInfo.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharInfo.java index d9d4657e6a..08acb1200b 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharInfo.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharInfo.java @@ -58,6 +58,7 @@ public class ExRankingCharInfo implements IClientOutgoingPacket { packet.writeD(id); // server rank packet.writeD(player.getInt("raceRank")); // race rank + packet.writeD(player.getInt("classRank")); // class rank for (Integer id2 : _snapshotList.keySet()) { @@ -66,6 +67,8 @@ public class ExRankingCharInfo implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank")); // race rank snapshot + packet.writeD(snapshot.getInt("classRank")); // class rank snapshot + packet.writeD(0); packet.writeD(0); packet.writeD(0); return true; diff --git a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharRankers.java b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharRankers.java index 277bf8b08b..53101f1b79 100644 --- a/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharRankers.java +++ b/L2J_Mobius_Essence_4.0_DwellingOfSpirits/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharRankers.java @@ -33,20 +33,20 @@ import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; public class ExRankingCharRankers implements IClientOutgoingPacket { private final PlayerInstance _player; - - private final int _race; private final int _group; private final int _scope; - + private final int _race; + private final int _class; private final Map _playerList; private final Map _snapshotList; - public ExRankingCharRankers(PlayerInstance player, int group, int scope, int race) + public ExRankingCharRankers(PlayerInstance player, int group, int scope, int race, int baseclass) { _player = player; _group = group; _scope = scope; _race = race; + _class = baseclass; _playerList = RankManager.getInstance().getRankList(); _snapshotList = RankManager.getInstance().getSnapshotList(); } @@ -90,7 +90,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -140,7 +140,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id3); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -201,7 +201,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -209,7 +209,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(i); packet.writeD(i); - packet.writeD(i); // TODO: Check this. nClassRank_Snapshot? + packet.writeD(i); // nClassRank_Snapshot } i++; } @@ -258,7 +258,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket packet.writeD(id2); // server rank packet.writeD(id2); packet.writeD(id2); - packet.writeD(id2); // TODO: Check this. nClassRank_Snapshot? + packet.writeD(id2); // nClassRank_Snapshot } } } @@ -305,7 +305,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -365,7 +365,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -404,7 +404,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -417,6 +417,121 @@ public class ExRankingCharRankers implements IClientOutgoingPacket } break; } + case 4: // class + { + if (_scope == 0) // all + { + int count = 0; + for (int i = 1; i <= _playerList.size(); i++) + { + final StatSet player = _playerList.get(i); + if (_class == player.getInt("classId")) + { + count++; + } + } + packet.writeD(count > 100 ? 100 : count); + + int i = 1; + for (Integer id : _playerList.keySet()) + { + final StatSet player = _playerList.get(id); + if (_class == player.getInt("classId")) + { + packet.writeString(player.getString("name")); + packet.writeString(player.getString("clanName")); + packet.writeD(player.getInt("level")); + packet.writeD(player.getInt("classId")); + packet.writeD(player.getInt("race")); + packet.writeD(i); // server rank + if (_snapshotList.size() > 0) + { + final Map snapshotRaceList = new ConcurrentHashMap<>(); + int j = 1; + for (Integer id2 : _snapshotList.keySet()) + { + final StatSet snapshot = _snapshotList.get(id2); + if (_class == snapshot.getInt("classId")) + { + snapshotRaceList.put(j, _snapshotList.get(id2)); + j++; + } + } + for (Integer id2 : snapshotRaceList.keySet()) + { + final StatSet snapshot = snapshotRaceList.get(id2); + if (player.getInt("charId") == snapshot.getInt("charId")) + { + packet.writeD(id2); // server rank snapshot + packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot + } + } + } + else + { + packet.writeD(i); + packet.writeD(i); + packet.writeD(i); // nClassRank_Snapshot? + } + i++; + } + } + } + else + { + boolean found = false; + + final Map raceList = new ConcurrentHashMap<>(); + int i = 1; + for (Integer id : _playerList.keySet()) + { + final StatSet set = _playerList.get(id); + if (_player.getBaseClass() == set.getInt("classId")) + { + raceList.put(i, _playerList.get(id)); + i++; + } + } + + for (Integer id : raceList.keySet()) + { + final StatSet player = raceList.get(id); + if (player.getInt("charId") == _player.getObjectId()) + { + found = true; + final int first = id > 10 ? (id - 9) : 1; + final int last = raceList.size() >= (id + 10) ? id + 10 : id + (raceList.size() - id); + if (first == 1) + { + packet.writeD(last - (first - 1)); + } + else + { + packet.writeD(last - first); + } + for (int id2 = first; id2 <= last; id2++) + { + final StatSet plr = raceList.get(id2); + packet.writeString(plr.getString("name")); + packet.writeString(plr.getString("clanName")); + packet.writeD(plr.getInt("level")); + packet.writeD(plr.getInt("classId")); + packet.writeD(plr.getInt("race")); + packet.writeD(id2); // server rank + packet.writeD(id2); + packet.writeD(id2); + packet.writeD(id2); // nClassRank_Snapshot? + } + } + } + if (!found) + { + packet.writeD(0); + } + } + break; + } } } else diff --git a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/enums/RankingCategory.java b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/enums/RankingCategory.java index 46a198f370..8fba312b99 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/enums/RankingCategory.java +++ b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/enums/RankingCategory.java @@ -28,6 +28,7 @@ public enum RankingCategory { SERVER, RACE, + CLASS, CLAN, FRIEND; @@ -43,6 +44,7 @@ public enum RankingCategory { return id == 0 ? TOP_100 : SELF; } + case CLASS: case CLAN: case FRIEND: { diff --git a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/instancemanager/RankManager.java b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/instancemanager/RankManager.java index 27eaf298ff..65900c8f6a 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/instancemanager/RankManager.java +++ b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/instancemanager/RankManager.java @@ -52,7 +52,7 @@ public class RankManager 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 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 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 final Map _mainList = new ConcurrentHashMap<>(); private Map _snapshotList = new ConcurrentHashMap<>(); @@ -94,6 +94,7 @@ public class RankManager { final StatSet player = new StatSet(); final int charId = rset.getInt("charId"); + final int classId = rset.getInt("base_class"); player.set("charId", charId); player.set("name", rset.getString("char_name")); player.set("level", rset.getInt("level")); @@ -102,6 +103,7 @@ public class RankManager player.set("race", race); loadRaceRank(charId, race, player); + loadClassRank(charId, classId, player); final int clanId = rset.getInt("clanid"); if (clanId > 0) { @@ -415,6 +417,20 @@ public class RankManager return 0; } + public int getPlayerClassRank(PlayerInstance player) + { + final int playerOid = player.getObjectId(); + for (StatSet stats : _mainList.values()) + { + if (stats.getInt("charId") != playerOid) + { + continue; + } + return stats.getInt("classRank"); + } + return 0; + } + public static RankManager getInstance() { return SingletonHolder.INSTANCE; diff --git a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestPvpRankingList.java b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestPvpRankingList.java index d257aea783..da72d1a4bb 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestPvpRankingList.java +++ b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestPvpRankingList.java @@ -31,6 +31,7 @@ public class RequestPvpRankingList implements IClientIncomingPacket private int _tabId; private int _type; private int _race; + private int _class; @Override public boolean read(GameClient client, PacketReader packet) @@ -39,6 +40,7 @@ public class RequestPvpRankingList implements IClientIncomingPacket _tabId = packet.readC(); _type = packet.readC(); _race = packet.readD(); + _class = packet.readD(); return true; } @@ -51,6 +53,6 @@ public class RequestPvpRankingList implements IClientIncomingPacket return; } - player.sendPacket(new ExPvpRankingList(player, _season, _tabId, _type, _race)); + player.sendPacket(new ExPvpRankingList(player, _season, _tabId, _type, _race, _class)); } } diff --git a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestRankingCharRankers.java b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestRankingCharRankers.java index 6b3dac4575..42a5d5a5cb 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestRankingCharRankers.java +++ b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestRankingCharRankers.java @@ -30,6 +30,7 @@ public class RequestRankingCharRankers implements IClientIncomingPacket private int _group; private int _scope; private int _ordinal; + private int _baseclass; @Override public boolean read(GameClient client, PacketReader packet) @@ -37,6 +38,7 @@ public class RequestRankingCharRankers implements IClientIncomingPacket _group = packet.readC(); // Tab Id _scope = packet.readC(); // All or personal _ordinal = packet.readD(); + _baseclass = packet.readD(); return true; } @@ -49,6 +51,6 @@ public class RequestRankingCharRankers implements IClientIncomingPacket return; } - player.sendPacket(new ExRankingCharRankers(player, _group, _scope, _ordinal)); + player.sendPacket(new ExRankingCharRankers(player, _group, _scope, _ordinal, _baseclass)); } } diff --git a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExPvpRankingList.java b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExPvpRankingList.java index bc5ca191f4..da918006ab 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExPvpRankingList.java +++ b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExPvpRankingList.java @@ -24,6 +24,7 @@ import java.util.Map.Entry; import java.util.stream.Collectors; import org.l2jmobius.commons.network.PacketWriter; +import org.l2jmobius.gameserver.enums.ClassId; import org.l2jmobius.gameserver.enums.Race; import org.l2jmobius.gameserver.enums.RankingCategory; import org.l2jmobius.gameserver.enums.RankingScope; @@ -43,16 +44,18 @@ public class ExPvpRankingList implements IClientOutgoingPacket private final int _tabId; private final int _type; private final int _race; + private final int _class; private final Map _playerList; private final Map _snapshotList; - public ExPvpRankingList(PlayerInstance player, int season, int tabId, int type, int race) + public ExPvpRankingList(PlayerInstance player, int season, int tabId, int type, int race, int baseclass) { _player = player; _season = season; _tabId = tabId; _type = type; _race = race; + _class = baseclass; _playerList = RankManager.getInstance().getPvpRankList(); _snapshotList = RankManager.getInstance().getSnapshotPvpRankList(); } @@ -68,7 +71,7 @@ public class ExPvpRankingList implements IClientOutgoingPacket if (!_playerList.isEmpty() && (_type != 255) && (_race != 255)) { final RankingCategory category = RankingCategory.values()[_tabId]; - writeFilteredRankingData(packet, category, category.getScopeByGroup(_type), Race.values()[_race]); + writeFilteredRankingData(packet, category, category.getScopeByGroup(_type), Race.values()[_race], ClassId.values()[_class]); } else { @@ -77,7 +80,7 @@ public class ExPvpRankingList implements IClientOutgoingPacket return true; } - private void writeFilteredRankingData(PacketWriter packet, RankingCategory category, RankingScope scope, Race race) + private void writeFilteredRankingData(PacketWriter packet, RankingCategory category, RankingScope scope, Race race, ClassId baseclass) { switch (category) { @@ -101,6 +104,11 @@ public class ExPvpRankingList implements IClientOutgoingPacket writeScopeData(packet, scope, _playerList.entrySet().stream().filter(it -> _player.getFriendList().contains(it.getValue().getInt("charId"))).collect(Collectors.toList()), _snapshotList.entrySet().stream().filter(it -> _player.getFriendList().contains(it.getValue().getInt("charId"))).collect(Collectors.toList())); break; } + case CLASS: + { + writeScopeData(packet, scope, _playerList.entrySet().stream().filter(it -> it.getValue().getInt("classId") == baseclass.ordinal()).collect(Collectors.toList()), _snapshotList.entrySet().stream().filter(it -> it.getValue().getInt("classId") == baseclass.ordinal()).collect(Collectors.toList())); + break; + } } } diff --git a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharInfo.java b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharInfo.java index d9d4657e6a..08acb1200b 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharInfo.java +++ b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharInfo.java @@ -58,6 +58,7 @@ public class ExRankingCharInfo implements IClientOutgoingPacket { packet.writeD(id); // server rank packet.writeD(player.getInt("raceRank")); // race rank + packet.writeD(player.getInt("classRank")); // class rank for (Integer id2 : _snapshotList.keySet()) { @@ -66,6 +67,8 @@ public class ExRankingCharInfo implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank")); // race rank snapshot + packet.writeD(snapshot.getInt("classRank")); // class rank snapshot + packet.writeD(0); packet.writeD(0); packet.writeD(0); return true; diff --git a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharRankers.java b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharRankers.java index 277bf8b08b..53101f1b79 100644 --- a/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharRankers.java +++ b/L2J_Mobius_Essence_5.0_Sylph/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharRankers.java @@ -33,20 +33,20 @@ import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; public class ExRankingCharRankers implements IClientOutgoingPacket { private final PlayerInstance _player; - - private final int _race; private final int _group; private final int _scope; - + private final int _race; + private final int _class; private final Map _playerList; private final Map _snapshotList; - public ExRankingCharRankers(PlayerInstance player, int group, int scope, int race) + public ExRankingCharRankers(PlayerInstance player, int group, int scope, int race, int baseclass) { _player = player; _group = group; _scope = scope; _race = race; + _class = baseclass; _playerList = RankManager.getInstance().getRankList(); _snapshotList = RankManager.getInstance().getSnapshotList(); } @@ -90,7 +90,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -140,7 +140,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id3); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -201,7 +201,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -209,7 +209,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(i); packet.writeD(i); - packet.writeD(i); // TODO: Check this. nClassRank_Snapshot? + packet.writeD(i); // nClassRank_Snapshot } i++; } @@ -258,7 +258,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket packet.writeD(id2); // server rank packet.writeD(id2); packet.writeD(id2); - packet.writeD(id2); // TODO: Check this. nClassRank_Snapshot? + packet.writeD(id2); // nClassRank_Snapshot } } } @@ -305,7 +305,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -365,7 +365,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -404,7 +404,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -417,6 +417,121 @@ public class ExRankingCharRankers implements IClientOutgoingPacket } break; } + case 4: // class + { + if (_scope == 0) // all + { + int count = 0; + for (int i = 1; i <= _playerList.size(); i++) + { + final StatSet player = _playerList.get(i); + if (_class == player.getInt("classId")) + { + count++; + } + } + packet.writeD(count > 100 ? 100 : count); + + int i = 1; + for (Integer id : _playerList.keySet()) + { + final StatSet player = _playerList.get(id); + if (_class == player.getInt("classId")) + { + packet.writeString(player.getString("name")); + packet.writeString(player.getString("clanName")); + packet.writeD(player.getInt("level")); + packet.writeD(player.getInt("classId")); + packet.writeD(player.getInt("race")); + packet.writeD(i); // server rank + if (_snapshotList.size() > 0) + { + final Map snapshotRaceList = new ConcurrentHashMap<>(); + int j = 1; + for (Integer id2 : _snapshotList.keySet()) + { + final StatSet snapshot = _snapshotList.get(id2); + if (_class == snapshot.getInt("classId")) + { + snapshotRaceList.put(j, _snapshotList.get(id2)); + j++; + } + } + for (Integer id2 : snapshotRaceList.keySet()) + { + final StatSet snapshot = snapshotRaceList.get(id2); + if (player.getInt("charId") == snapshot.getInt("charId")) + { + packet.writeD(id2); // server rank snapshot + packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot + } + } + } + else + { + packet.writeD(i); + packet.writeD(i); + packet.writeD(i); // nClassRank_Snapshot? + } + i++; + } + } + } + else + { + boolean found = false; + + final Map raceList = new ConcurrentHashMap<>(); + int i = 1; + for (Integer id : _playerList.keySet()) + { + final StatSet set = _playerList.get(id); + if (_player.getBaseClass() == set.getInt("classId")) + { + raceList.put(i, _playerList.get(id)); + i++; + } + } + + for (Integer id : raceList.keySet()) + { + final StatSet player = raceList.get(id); + if (player.getInt("charId") == _player.getObjectId()) + { + found = true; + final int first = id > 10 ? (id - 9) : 1; + final int last = raceList.size() >= (id + 10) ? id + 10 : id + (raceList.size() - id); + if (first == 1) + { + packet.writeD(last - (first - 1)); + } + else + { + packet.writeD(last - first); + } + for (int id2 = first; id2 <= last; id2++) + { + final StatSet plr = raceList.get(id2); + packet.writeString(plr.getString("name")); + packet.writeString(plr.getString("clanName")); + packet.writeD(plr.getInt("level")); + packet.writeD(plr.getInt("classId")); + packet.writeD(plr.getInt("race")); + packet.writeD(id2); // server rank + packet.writeD(id2); + packet.writeD(id2); + packet.writeD(id2); // nClassRank_Snapshot? + } + } + } + if (!found) + { + packet.writeD(0); + } + } + break; + } } } else diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/enums/RankingCategory.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/enums/RankingCategory.java index 46a198f370..8fba312b99 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/enums/RankingCategory.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/enums/RankingCategory.java @@ -28,6 +28,7 @@ public enum RankingCategory { SERVER, RACE, + CLASS, CLAN, FRIEND; @@ -43,6 +44,7 @@ public enum RankingCategory { return id == 0 ? TOP_100 : SELF; } + case CLASS: case CLAN: case FRIEND: { diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/instancemanager/RankManager.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/instancemanager/RankManager.java index 27eaf298ff..65900c8f6a 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/instancemanager/RankManager.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/instancemanager/RankManager.java @@ -52,7 +52,7 @@ public class RankManager 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 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 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 final Map _mainList = new ConcurrentHashMap<>(); private Map _snapshotList = new ConcurrentHashMap<>(); @@ -94,6 +94,7 @@ public class RankManager { final StatSet player = new StatSet(); final int charId = rset.getInt("charId"); + final int classId = rset.getInt("base_class"); player.set("charId", charId); player.set("name", rset.getString("char_name")); player.set("level", rset.getInt("level")); @@ -102,6 +103,7 @@ public class RankManager player.set("race", race); loadRaceRank(charId, race, player); + loadClassRank(charId, classId, player); final int clanId = rset.getInt("clanid"); if (clanId > 0) { @@ -415,6 +417,20 @@ public class RankManager return 0; } + public int getPlayerClassRank(PlayerInstance player) + { + final int playerOid = player.getObjectId(); + for (StatSet stats : _mainList.values()) + { + if (stats.getInt("charId") != playerOid) + { + continue; + } + return stats.getInt("classRank"); + } + return 0; + } + public static RankManager getInstance() { return SingletonHolder.INSTANCE; diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestPvpRankingList.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestPvpRankingList.java index d257aea783..da72d1a4bb 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestPvpRankingList.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestPvpRankingList.java @@ -31,6 +31,7 @@ public class RequestPvpRankingList implements IClientIncomingPacket private int _tabId; private int _type; private int _race; + private int _class; @Override public boolean read(GameClient client, PacketReader packet) @@ -39,6 +40,7 @@ public class RequestPvpRankingList implements IClientIncomingPacket _tabId = packet.readC(); _type = packet.readC(); _race = packet.readD(); + _class = packet.readD(); return true; } @@ -51,6 +53,6 @@ public class RequestPvpRankingList implements IClientIncomingPacket return; } - player.sendPacket(new ExPvpRankingList(player, _season, _tabId, _type, _race)); + player.sendPacket(new ExPvpRankingList(player, _season, _tabId, _type, _race, _class)); } } diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestRankingCharRankers.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestRankingCharRankers.java index 6b3dac4575..42a5d5a5cb 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestRankingCharRankers.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/clientpackets/ranking/RequestRankingCharRankers.java @@ -30,6 +30,7 @@ public class RequestRankingCharRankers implements IClientIncomingPacket private int _group; private int _scope; private int _ordinal; + private int _baseclass; @Override public boolean read(GameClient client, PacketReader packet) @@ -37,6 +38,7 @@ public class RequestRankingCharRankers implements IClientIncomingPacket _group = packet.readC(); // Tab Id _scope = packet.readC(); // All or personal _ordinal = packet.readD(); + _baseclass = packet.readD(); return true; } @@ -49,6 +51,6 @@ public class RequestRankingCharRankers implements IClientIncomingPacket return; } - player.sendPacket(new ExRankingCharRankers(player, _group, _scope, _ordinal)); + player.sendPacket(new ExRankingCharRankers(player, _group, _scope, _ordinal, _baseclass)); } } diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExPvpRankingList.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExPvpRankingList.java index bc5ca191f4..da918006ab 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExPvpRankingList.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExPvpRankingList.java @@ -24,6 +24,7 @@ import java.util.Map.Entry; import java.util.stream.Collectors; import org.l2jmobius.commons.network.PacketWriter; +import org.l2jmobius.gameserver.enums.ClassId; import org.l2jmobius.gameserver.enums.Race; import org.l2jmobius.gameserver.enums.RankingCategory; import org.l2jmobius.gameserver.enums.RankingScope; @@ -43,16 +44,18 @@ public class ExPvpRankingList implements IClientOutgoingPacket private final int _tabId; private final int _type; private final int _race; + private final int _class; private final Map _playerList; private final Map _snapshotList; - public ExPvpRankingList(PlayerInstance player, int season, int tabId, int type, int race) + public ExPvpRankingList(PlayerInstance player, int season, int tabId, int type, int race, int baseclass) { _player = player; _season = season; _tabId = tabId; _type = type; _race = race; + _class = baseclass; _playerList = RankManager.getInstance().getPvpRankList(); _snapshotList = RankManager.getInstance().getSnapshotPvpRankList(); } @@ -68,7 +71,7 @@ public class ExPvpRankingList implements IClientOutgoingPacket if (!_playerList.isEmpty() && (_type != 255) && (_race != 255)) { final RankingCategory category = RankingCategory.values()[_tabId]; - writeFilteredRankingData(packet, category, category.getScopeByGroup(_type), Race.values()[_race]); + writeFilteredRankingData(packet, category, category.getScopeByGroup(_type), Race.values()[_race], ClassId.values()[_class]); } else { @@ -77,7 +80,7 @@ public class ExPvpRankingList implements IClientOutgoingPacket return true; } - private void writeFilteredRankingData(PacketWriter packet, RankingCategory category, RankingScope scope, Race race) + private void writeFilteredRankingData(PacketWriter packet, RankingCategory category, RankingScope scope, Race race, ClassId baseclass) { switch (category) { @@ -101,6 +104,11 @@ public class ExPvpRankingList implements IClientOutgoingPacket writeScopeData(packet, scope, _playerList.entrySet().stream().filter(it -> _player.getFriendList().contains(it.getValue().getInt("charId"))).collect(Collectors.toList()), _snapshotList.entrySet().stream().filter(it -> _player.getFriendList().contains(it.getValue().getInt("charId"))).collect(Collectors.toList())); break; } + case CLASS: + { + writeScopeData(packet, scope, _playerList.entrySet().stream().filter(it -> it.getValue().getInt("classId") == baseclass.ordinal()).collect(Collectors.toList()), _snapshotList.entrySet().stream().filter(it -> it.getValue().getInt("classId") == baseclass.ordinal()).collect(Collectors.toList())); + break; + } } } diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharInfo.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharInfo.java index d9d4657e6a..08acb1200b 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharInfo.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharInfo.java @@ -58,6 +58,7 @@ public class ExRankingCharInfo implements IClientOutgoingPacket { packet.writeD(id); // server rank packet.writeD(player.getInt("raceRank")); // race rank + packet.writeD(player.getInt("classRank")); // class rank for (Integer id2 : _snapshotList.keySet()) { @@ -66,6 +67,8 @@ public class ExRankingCharInfo implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank")); // race rank snapshot + packet.writeD(snapshot.getInt("classRank")); // class rank snapshot + packet.writeD(0); packet.writeD(0); packet.writeD(0); return true; diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharRankers.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharRankers.java index 277bf8b08b..53101f1b79 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharRankers.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/network/serverpackets/ranking/ExRankingCharRankers.java @@ -33,20 +33,20 @@ import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; public class ExRankingCharRankers implements IClientOutgoingPacket { private final PlayerInstance _player; - - private final int _race; private final int _group; private final int _scope; - + private final int _race; + private final int _class; private final Map _playerList; private final Map _snapshotList; - public ExRankingCharRankers(PlayerInstance player, int group, int scope, int race) + public ExRankingCharRankers(PlayerInstance player, int group, int scope, int race, int baseclass) { _player = player; _group = group; _scope = scope; _race = race; + _class = baseclass; _playerList = RankManager.getInstance().getRankList(); _snapshotList = RankManager.getInstance().getSnapshotList(); } @@ -90,7 +90,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -140,7 +140,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id3); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -201,7 +201,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -209,7 +209,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(i); packet.writeD(i); - packet.writeD(i); // TODO: Check this. nClassRank_Snapshot? + packet.writeD(i); // nClassRank_Snapshot } i++; } @@ -258,7 +258,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket packet.writeD(id2); // server rank packet.writeD(id2); packet.writeD(id2); - packet.writeD(id2); // TODO: Check this. nClassRank_Snapshot? + packet.writeD(id2); // nClassRank_Snapshot } } } @@ -305,7 +305,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -365,7 +365,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id2); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -404,7 +404,7 @@ public class ExRankingCharRankers implements IClientOutgoingPacket { packet.writeD(id); // server rank snapshot packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot - packet.writeD(0); // TODO: nClassRank_Snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot } } } @@ -417,6 +417,121 @@ public class ExRankingCharRankers implements IClientOutgoingPacket } break; } + case 4: // class + { + if (_scope == 0) // all + { + int count = 0; + for (int i = 1; i <= _playerList.size(); i++) + { + final StatSet player = _playerList.get(i); + if (_class == player.getInt("classId")) + { + count++; + } + } + packet.writeD(count > 100 ? 100 : count); + + int i = 1; + for (Integer id : _playerList.keySet()) + { + final StatSet player = _playerList.get(id); + if (_class == player.getInt("classId")) + { + packet.writeString(player.getString("name")); + packet.writeString(player.getString("clanName")); + packet.writeD(player.getInt("level")); + packet.writeD(player.getInt("classId")); + packet.writeD(player.getInt("race")); + packet.writeD(i); // server rank + if (_snapshotList.size() > 0) + { + final Map snapshotRaceList = new ConcurrentHashMap<>(); + int j = 1; + for (Integer id2 : _snapshotList.keySet()) + { + final StatSet snapshot = _snapshotList.get(id2); + if (_class == snapshot.getInt("classId")) + { + snapshotRaceList.put(j, _snapshotList.get(id2)); + j++; + } + } + for (Integer id2 : snapshotRaceList.keySet()) + { + final StatSet snapshot = snapshotRaceList.get(id2); + if (player.getInt("charId") == snapshot.getInt("charId")) + { + packet.writeD(id2); // server rank snapshot + packet.writeD(snapshot.getInt("raceRank", 0)); // race rank snapshot + packet.writeD(snapshot.getInt("classRank", 0)); // nClassRank_Snapshot + } + } + } + else + { + packet.writeD(i); + packet.writeD(i); + packet.writeD(i); // nClassRank_Snapshot? + } + i++; + } + } + } + else + { + boolean found = false; + + final Map raceList = new ConcurrentHashMap<>(); + int i = 1; + for (Integer id : _playerList.keySet()) + { + final StatSet set = _playerList.get(id); + if (_player.getBaseClass() == set.getInt("classId")) + { + raceList.put(i, _playerList.get(id)); + i++; + } + } + + for (Integer id : raceList.keySet()) + { + final StatSet player = raceList.get(id); + if (player.getInt("charId") == _player.getObjectId()) + { + found = true; + final int first = id > 10 ? (id - 9) : 1; + final int last = raceList.size() >= (id + 10) ? id + 10 : id + (raceList.size() - id); + if (first == 1) + { + packet.writeD(last - (first - 1)); + } + else + { + packet.writeD(last - first); + } + for (int id2 = first; id2 <= last; id2++) + { + final StatSet plr = raceList.get(id2); + packet.writeString(plr.getString("name")); + packet.writeString(plr.getString("clanName")); + packet.writeD(plr.getInt("level")); + packet.writeD(plr.getInt("classId")); + packet.writeD(plr.getInt("race")); + packet.writeD(id2); // server rank + packet.writeD(id2); + packet.writeD(id2); + packet.writeD(id2); // nClassRank_Snapshot? + } + } + } + if (!found) + { + packet.writeD(0); + } + } + break; + } } } else