From e1edd1bf901a73ef9c2fb9bdc6dd6d0571b98237 Mon Sep 17 00:00:00 2001 From: vk Date: Sun, 26 Sep 2021 22:21:49 +0000 Subject: [PATCH] pc improvement - implement priority --- .../PestControlActivityPlugin.java | 12 ++++++-- .../pestcontrol/PestControlSession.java | 30 +++++++++++-------- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/Server/src/main/java/core/game/content/activity/pestcontrol/PestControlActivityPlugin.java b/Server/src/main/java/core/game/content/activity/pestcontrol/PestControlActivityPlugin.java index 3950c5401..71d2fa067 100644 --- a/Server/src/main/java/core/game/content/activity/pestcontrol/PestControlActivityPlugin.java +++ b/Server/src/main/java/core/game/content/activity/pestcontrol/PestControlActivityPlugin.java @@ -2,6 +2,7 @@ package core.game.content.activity.pestcontrol; import java.util.ArrayList; import java.util.List; +import java.util.PriorityQueue; import rs09.ServerConstants; import core.game.component.Component; @@ -17,6 +18,7 @@ import core.game.node.entity.state.EntityState; import core.game.node.item.GroundItemManager; import core.game.node.item.Item; import core.game.system.task.Pulse; +import rs09.game.ai.AIPlayer; import rs09.game.world.GameWorld; import core.game.world.map.Location; import core.game.world.map.build.DynamicRegion; @@ -60,7 +62,13 @@ public final class PestControlActivityPlugin extends ActivityPlugin { /** * The waiting players. */ - private final List waitingPlayers = new ArrayList<>(20); + private final PriorityQueue waitingPlayers = new PriorityQueue(20, (player1, player2) -> { + //get priorities of players. default to 0 + int p1 = player1.getAttribute("pc_prior", 0); + int p2 = player2.getAttribute("pc_prior", 0); + //return in descending order + return p2 - p1; + }); /** * The active game sessions. @@ -313,7 +321,7 @@ public final class PestControlActivityPlugin extends ActivityPlugin { * Gets the list of waiting players. * @return The list of waiting players. */ - public List getWaitingPlayers() { + public PriorityQueue getWaitingPlayers() { return waitingPlayers; } diff --git a/Server/src/main/java/core/game/content/activity/pestcontrol/PestControlSession.java b/Server/src/main/java/core/game/content/activity/pestcontrol/PestControlSession.java index 45ef3be6e..c9b69c07d 100644 --- a/Server/src/main/java/core/game/content/activity/pestcontrol/PestControlSession.java +++ b/Server/src/main/java/core/game/content/activity/pestcontrol/PestControlSession.java @@ -1,10 +1,6 @@ package core.game.content.activity.pestcontrol; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.Random; +import java.util.*; import core.game.component.Component; import core.game.content.dialogue.FacialExpression; @@ -212,7 +208,7 @@ public final class PestControlSession { * Starts a game. * @param waitingPlayers The list of waiting players. */ - public void startGame(List waitingPlayers) { + public void startGame(PriorityQueue waitingPlayers) { region.flagActive(); initBarricadesList(); List list = new ArrayList<>(20); @@ -225,21 +221,29 @@ public final class PestControlSession { ids = list.toArray(new Integer[4]); int count = 0; String portalHealth = "" + (activity.getType().ordinal() == 0 ? 200 : 250); - for (Iterator it = waitingPlayers.iterator(); it.hasNext();) { - Player p = it.next(); + + List remainingPlayers = new ArrayList<>(); + for (Player p = waitingPlayers.poll(); p != null; p = waitingPlayers.poll()) { if (p.getSession().isActive()) { if (++count > MAX_TEAM_SIZE) { - int priority = p.getAttribute("pc_prior", 0) + 1; - p.getPacketDispatch().sendMessage("You have been given priority level " + priority + " over other players in joining the next"); - p.getPacketDispatch().sendMessage("game."); - p.setAttribute("pc_prior", priority); + remainingPlayers.add(p); continue; } addPlayer(p, portalHealth); } - it.remove(); } + + for (Player p : remainingPlayers) + { + int priority = p.getAttribute("pc_prior", 0) + 1; + p.getPacketDispatch().sendMessage("You have been given priority level " + priority + " over other players in joining the next"); + p.getPacketDispatch().sendMessage("game."); + p.setAttribute("pc_prior", priority); + waitingPlayers.add(p); + } + spawnNPCs(); + } /**