mirror of
https://github.com/ProjectSWGCore/Holocore.git
synced 2026-10-12 02:13:42 -04:00
Merged in M4SS/holocore/pvp_faction_fix (pull request #292)
NGE-130 - PvP Factions
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user