Class ranking additions.
Contributed by Sero and nasseka.
This commit is contained in:
@@ -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<Integer, StatSet> _mainList = new ConcurrentHashMap<>();
|
||||
private Map<Integer, StatSet> _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;
|
||||
|
@@ -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));
|
||||
}
|
||||
}
|
||||
|
@@ -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));
|
||||
}
|
||||
}
|
||||
|
@@ -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<Integer, StatSet> _playerList;
|
||||
private final Map<Integer, StatSet> _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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
|
@@ -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<Integer, StatSet> _playerList;
|
||||
private final Map<Integer, StatSet> _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<Integer, StatSet> 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<Integer> 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<Integer, StatSet> 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<Integer, StatSet> 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
|
||||
|
Reference in New Issue
Block a user