From bc1112650c7ae2beb56641dad213a6ffd4a16a61 Mon Sep 17 00:00:00 2001 From: Iosnowore Date: Tue, 4 Apr 2017 19:17:16 -0700 Subject: [PATCH] Dueling implementation now only requires one list of CreatureObjects (instead of two) --- scripts/commands/generic/duel.js | 2 +- scripts/commands/generic/endduel.js | 4 +-- .../objects/creature/CreatureObject.java | 20 +++++++------- src/services/combat/DuelPlayerService.java | 27 +++++++++---------- 4 files changed, 27 insertions(+), 26 deletions(-) diff --git a/scripts/commands/generic/duel.js b/scripts/commands/generic/duel.js index c180ab508..ea20c5ccc 100644 --- a/scripts/commands/generic/duel.js +++ b/scripts/commands/generic/duel.js @@ -3,7 +3,7 @@ function executeCommand(galacticManager, player, target, args) { var DuelPlayerIntent = Java.type("intents.combat.DuelPlayerIntent"); var DuelEventType = Java.type("intents.combat.DuelPlayerIntent.DuelEventType"); - if (target.sentDuelRequestToPlayer(player.getCreatureObject())) { + if (target.hasSentDuelRequestToPlayer(player.getCreatureObject())) { new DuelPlayerIntent(player.getCreatureObject(), target, DuelEventType.ACCEPT).broadcast(); } else { new DuelPlayerIntent(player.getCreatureObject(), target, DuelEventType.REQUEST).broadcast(); diff --git a/scripts/commands/generic/endduel.js b/scripts/commands/generic/endduel.js index 5de23f969..af403b5a9 100644 --- a/scripts/commands/generic/endduel.js +++ b/scripts/commands/generic/endduel.js @@ -3,9 +3,9 @@ function executeCommand(galacticManager, player, target, args) { var DuelPlayerIntent = Java.type("intents.combat.DuelPlayerIntent"); var DuelEventType = Java.type("intents.combat.DuelPlayerIntent.DuelEventType"); - if (player.getCreatureObject().sentDuelRequestToPlayer(target) && !player.getCreatureObject().isInDuelWithPlayer(target)) { + if (player.getCreatureObject().hasSentDuelRequestToPlayer(target) && !player.getCreatureObject().isDuelingPlayer(target)) { new DuelPlayerIntent(player.getCreatureObject(), target, DuelEventType.CANCEL).broadcast(); - } else if (target.getSentDuelRequestToPlayer(player.getCreatureObject()) && !player.getCreatureObject.sentDuelRequestToPlayer(target)) { + } else if (target.hasSentDuelRequestToPlayer(player.getCreatureObject()) && !player.getCreatureObject().hasSentDuelRequestToPlayer(target)) { new DuelPlayerIntent(player.getCreatureObject(), target, DuelEventType.DECLINE).broadcast(); } else { new DuelPlayerIntent(player.getCreatureObject(), target, DuelEventType.END).broadcast(); diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index b83be51d6..0131afe12 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -84,8 +84,6 @@ public class CreatureObject extends TangibleObject { private SWGList baseAttributes = new SWGList(1, 2); - private List activeDuels = new ArrayList<>(); - private List sentDuels = new ArrayList<>(); public CreatureObject(long objectId) { @@ -803,20 +801,24 @@ public class CreatureObject extends TangibleObject { return isEnemy(otherObject) && otherPosture != Posture.INCAPACITATED && otherPosture != Posture.DEAD; } + public boolean hasSentDuelRequestToPlayer(CreatureObject player) { + return sentDuels.contains(player); + } + public boolean sentDuelRequestToPlayer(CreatureObject player) { return sentDuels.contains(player); } - public boolean isInDuelWithPlayer(CreatureObject player) { - return activeDuels.contains(player); + public boolean isDuelingPlayer(CreatureObject player) { + return sentDuelRequestToPlayer(player) && player.sentDuelRequestToPlayer(this); } - public List getActiveDuels() { - return activeDuels; + public void addPlayerToSentDuels(CreatureObject player) { + sentDuels.add(player); } - public List getSentDuels() { - return sentDuels; + public void removePlayerFromSentDuels(CreatureObject player) { + sentDuels.remove(player); } @Override @@ -827,7 +829,7 @@ public class CreatureObject extends TangibleObject { return tangibleEnemy; } - if (activeDuels.contains(otherObject)) + if (isDuelingPlayer((CreatureObject)otherObject)) return true; return isPlayer() && ((CreatureObject) otherObject).isPlayer() diff --git a/src/services/combat/DuelPlayerService.java b/src/services/combat/DuelPlayerService.java index a8bd11448..834b7ca8b 100644 --- a/src/services/combat/DuelPlayerService.java +++ b/src/services/combat/DuelPlayerService.java @@ -41,12 +41,11 @@ public class DuelPlayerService extends Service { } private void handleAcceptDuel(CreatureObject accepter, CreatureObject target) { - if (accepter.getActiveDuels().contains(target)) { + if (accepter.isDuelingPlayer(target)) { sendSystemMessage(accepter, target, "already_dueling"); return; } - accepter.getActiveDuels().add(target); - target.getActiveDuels().add(accepter); + accepter.addPlayerToSentDuels(target); sendSystemMessage(accepter, target, "accept_self"); sendSystemMessage(target, accepter, "accept_target"); accepter.setPvpFlags(PvpFlag.DUEL); @@ -56,20 +55,20 @@ public class DuelPlayerService extends Service { private void endDuel(CreatureObject ender, CreatureObject target) { ender.clearPvpFlags(PvpFlag.DUEL); target.clearPvpFlags(PvpFlag.DUEL); - ender.getActiveDuels().remove(target); - target.getActiveDuels().remove(ender); + ender.removePlayerFromSentDuels(target); + target.removePlayerFromSentDuels(ender); ender.setInCombat(false); target.setInCombat(false); - if (ender.getSentDuels().contains(target)) { - ender.getSentDuels().remove(target); + if (ender.sentDuelRequestToPlayer(target)) { + ender.removePlayerFromSentDuels(target); } else { - target.getSentDuels().remove(ender); + target.removePlayerFromSentDuels(ender); } } private void handleEndDuel(CreatureObject ender, CreatureObject target) { - if (ender.getActiveDuels().contains(target)) { + if (ender.isDuelingPlayer(target)) { sendSystemMessage(ender, target, "end_self"); sendSystemMessage(target, ender, "end_target"); endDuel(ender, target); @@ -79,23 +78,23 @@ public class DuelPlayerService extends Service { } private void handleCancelDuel(CreatureObject canceler, CreatureObject target) { - canceler.getSentDuels().remove(target); + canceler.removePlayerFromSentDuels(target); sendSystemMessage(canceler, target, "cancel_self"); sendSystemMessage(target, canceler, "cancel_target"); } private void handleDeclineDuel(CreatureObject decliner, CreatureObject target) { - target.getSentDuels().remove(decliner); + target.removePlayerFromSentDuels(decliner); sendSystemMessage(decliner, target, "reject_self"); sendSystemMessage(target, decliner, "reject_target"); } private void handleRequestDuel(CreatureObject requester, CreatureObject target) { - if (!requester.getSentDuels().contains(target)) { - requester.getSentDuels().add(target); + if (!requester.sentDuelRequestToPlayer(target)) { + requester.addPlayerToSentDuels(target); sendSystemMessage(requester, target, "challenge_self"); sendSystemMessage(target, requester, "challenge_target"); - } else if (requester.getActiveDuels().contains(target)) { + } else if (requester.isDuelingPlayer(target)) { sendSystemMessage(requester, target, "already_dueling"); } else { sendSystemMessage(requester, target, "already_challenged");