From 7935f6619a0df64c0800d97654b87dddae546e1e Mon Sep 17 00:00:00 2001 From: Mads Boddum Date: Thu, 15 Sep 2016 10:52:23 +0200 Subject: [PATCH] Fixed incorrect PvP status messages being sent by FactionService --- src/services/faction/FactionService.java | 35 +++++++++++++++--------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/src/services/faction/FactionService.java b/src/services/faction/FactionService.java index 000197e94..f0a558e60 100644 --- a/src/services/faction/FactionService.java +++ b/src/services/faction/FactionService.java @@ -192,31 +192,40 @@ public final class FactionService extends Service { private void handleFlagChange(TangibleObject object) { Player objOwner = object.getOwner(); + for (SWGObject o : object.getObservers()) { if (!(o instanceof TangibleObject)) continue; TangibleObject observer = (TangibleObject) o; Player obsOwner = observer.getOwner(); - int pvpBitmask = 0; + + int pvpBitmask = getPvpBitmask(object, observer); - // They CAN be enemies if they're not from the same faction and neither of them are neutral - if (object.getPvpFaction() != observer.getPvpFaction() && observer.getPvpFaction() != PvpFaction.NEUTRAL) { - if (object.getPvpStatus() == PvpStatus.SPECIALFORCES && observer.getPvpStatus() == PvpStatus.SPECIALFORCES) { - pvpBitmask |= PvpFlag.AGGRESSIVE.getBitmask() | PvpFlag.ATTACKABLE.getBitmask(); - } - } - UpdatePvpStatusMessage objectPacket = createPvpStatusMessage(object, observer, object.getPvpFlags() | pvpBitmask); - UpdatePvpStatusMessage targetPacket = createPvpStatusMessage(object, observer, observer.getPvpFlags() | pvpBitmask); if (objOwner != null) - objOwner.sendPacket(objectPacket, targetPacket); + // Send the PvP information about this observer to the owner + objOwner.sendPacket(createPvpStatusMessage(observer, observer.getPvpFlags() | pvpBitmask)); if (obsOwner != null) - obsOwner.sendPacket(objectPacket); + // Send the pvp information about the owner to this observer + obsOwner.sendPacket(createPvpStatusMessage(object, object.getPvpFlags() | pvpBitmask)); } } - private UpdatePvpStatusMessage createPvpStatusMessage(TangibleObject object, TangibleObject observer, int flags) { - Set flagSet = PvpFlag.getFlags(object.getPvpFlags()); + private UpdatePvpStatusMessage createPvpStatusMessage(TangibleObject object, int flags) { + Set flagSet = PvpFlag.getFlags(flags); return new UpdatePvpStatusMessage(object.getPvpFaction(), object.getObjectId(), flagSet.toArray(new PvpFlag[flagSet.size()])); } + private int getPvpBitmask(TangibleObject object1, TangibleObject object2) { + int pvpBitmask = 0; + + // They CAN be enemies if they're not from the same faction and neither of them are neutral + if (object1.getPvpFaction() != object2.getPvpFaction() && object2.getPvpFaction() != PvpFaction.NEUTRAL) { + if (object1.getPvpStatus() == PvpStatus.SPECIALFORCES && object2.getPvpStatus() == PvpStatus.SPECIALFORCES) { + pvpBitmask |= PvpFlag.AGGRESSIVE.getBitmask() | PvpFlag.ATTACKABLE.getBitmask(); + } + } + + return pvpBitmask; + } + } \ No newline at end of file