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