Merged in M4SS/holocore/pvp_faction_fix (pull request #292)

NGE-130 - PvP Factions
This commit is contained in:
Obique PSWG
2016-09-15 08:22:14 -05:00
+22 -13
View File
@@ -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<PvpFlag> flagSet = PvpFlag.getFlags(object.getPvpFlags());
private UpdatePvpStatusMessage createPvpStatusMessage(TangibleObject object, int flags) {
Set<PvpFlag> 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;
}
}