diff --git a/src/main/java/com/projectswg/holocore/resources/commands/callbacks/JumpCmdCallback.java b/src/main/java/com/projectswg/holocore/resources/commands/callbacks/JumpCmdCallback.java index 9d0f10e46..55a6d2a1e 100644 --- a/src/main/java/com/projectswg/holocore/resources/commands/callbacks/JumpCmdCallback.java +++ b/src/main/java/com/projectswg/holocore/resources/commands/callbacks/JumpCmdCallback.java @@ -39,7 +39,7 @@ public class JumpCmdCallback implements ICmdCallback { @Override public void execute(GalacticManager galacticManager, Player player, SWGObject target, String args) { CreatureObject creature = player.getCreatureObject(); - creature.sendObserversAndSelf(new JumpUpdate(creature.getObjectId())); + creature.sendObservers(new JumpUpdate(creature.getObjectId())); } } diff --git a/src/main/java/com/projectswg/holocore/resources/commands/callbacks/KneelCmdCallback.java b/src/main/java/com/projectswg/holocore/resources/commands/callbacks/KneelCmdCallback.java index 10beb51d4..4268a046a 100644 --- a/src/main/java/com/projectswg/holocore/resources/commands/callbacks/KneelCmdCallback.java +++ b/src/main/java/com/projectswg/holocore/resources/commands/callbacks/KneelCmdCallback.java @@ -46,7 +46,7 @@ public class KneelCmdCallback implements ICmdCallback { creature.setPosture(Posture.CROUCHED); creature.setMovementScale(0); creature.setTurnScale(0); - creature.sendObserversAndSelf(new PostureUpdate(creature.getObjectId(), Posture.CROUCHED)); + creature.sendObservers(new PostureUpdate(creature.getObjectId(), Posture.CROUCHED)); } } diff --git a/src/main/java/com/projectswg/holocore/resources/commands/callbacks/ProneCmdCallback.java b/src/main/java/com/projectswg/holocore/resources/commands/callbacks/ProneCmdCallback.java index 2afca217f..cb30ce3d5 100644 --- a/src/main/java/com/projectswg/holocore/resources/commands/callbacks/ProneCmdCallback.java +++ b/src/main/java/com/projectswg/holocore/resources/commands/callbacks/ProneCmdCallback.java @@ -47,7 +47,7 @@ public class ProneCmdCallback implements ICmdCallback { creature.setPosture(Posture.PRONE); creature.setTurnScale(1); creature.setMovementScale(0.50); - creature.sendObserversAndSelf(new PostureUpdate(creature.getObjectId(), Posture.PRONE)); + creature.sendObservers(new PostureUpdate(creature.getObjectId(), Posture.PRONE)); } } diff --git a/src/main/java/com/projectswg/holocore/resources/commands/callbacks/SitOnObjectCmdCallback.java b/src/main/java/com/projectswg/holocore/resources/commands/callbacks/SitOnObjectCmdCallback.java index 77400cb8a..e7affb365 100644 --- a/src/main/java/com/projectswg/holocore/resources/commands/callbacks/SitOnObjectCmdCallback.java +++ b/src/main/java/com/projectswg/holocore/resources/commands/callbacks/SitOnObjectCmdCallback.java @@ -65,6 +65,6 @@ public class SitOnObjectCmdCallback implements ICmdCallback { creature.setPosture(Posture.SITTING); creature.setMovementScale(0); creature.setTurnScale(0); - creature.sendObserversAndSelf(new SitOnObject(creature.getObjectId(), sot)); + creature.sendObservers(new SitOnObject(creature.getObjectId(), sot)); } } diff --git a/src/main/java/com/projectswg/holocore/resources/commands/callbacks/SocialInternalCmdCallback.java b/src/main/java/com/projectswg/holocore/resources/commands/callbacks/SocialInternalCmdCallback.java index b81fffe1d..60c6a2d21 100644 --- a/src/main/java/com/projectswg/holocore/resources/commands/callbacks/SocialInternalCmdCallback.java +++ b/src/main/java/com/projectswg/holocore/resources/commands/callbacks/SocialInternalCmdCallback.java @@ -45,10 +45,7 @@ public class SocialInternalCmdCallback implements ICmdCallback { long objectId = player.getCreatureObject().getObjectId(); PlayerEmote emote = new PlayerEmote(objectId, objectId, ((target == null) ? 0 : target.getObjectId()), Short.valueOf(cmd[1])); - player.sendPacket(emote); - for (Player aware : player.getCreatureObject().getObservers()) { - aware.sendPacket(new PlayerEmote(aware.getCreatureObject().getObjectId(), emote)); - } + player.getCreatureObject().sendObservers(emote); } } diff --git a/src/main/java/com/projectswg/holocore/resources/commands/callbacks/StandCmdCallback.java b/src/main/java/com/projectswg/holocore/resources/commands/callbacks/StandCmdCallback.java index a43aa8509..a4090605b 100644 --- a/src/main/java/com/projectswg/holocore/resources/commands/callbacks/StandCmdCallback.java +++ b/src/main/java/com/projectswg/holocore/resources/commands/callbacks/StandCmdCallback.java @@ -50,7 +50,7 @@ public class StandCmdCallback implements ICmdCallback { creature.setPosture(Posture.UPRIGHT); creature.setMovementScale(1); creature.setTurnScale(1); - creature.sendObserversAndSelf(new PostureUpdate(creature.getObjectId(), Posture.UPRIGHT)); + creature.sendObservers(new PostureUpdate(creature.getObjectId(), Posture.UPRIGHT)); } } diff --git a/src/main/java/com/projectswg/holocore/resources/objects/SWGObject.java b/src/main/java/com/projectswg/holocore/resources/objects/SWGObject.java index 428854e9c..4a886931a 100644 --- a/src/main/java/com/projectswg/holocore/resources/objects/SWGObject.java +++ b/src/main/java/com/projectswg/holocore/resources/objects/SWGObject.java @@ -738,13 +738,6 @@ public abstract class SWGObject extends BaselineObject implements Comparable withinRange, @Nonnull SWGObject obj, @Nonnull SWGObject test) { - if (!test.isVisible(obj)) + if (obj.equals(test) || !test.isVisible(obj)) return; withinRange.add(test); for (SWGObject child : test.getSlots().values()) { diff --git a/src/main/java/com/projectswg/holocore/resources/objects/creature/CreatureObject.java b/src/main/java/com/projectswg/holocore/resources/objects/creature/CreatureObject.java index d074914db..ad969f8eb 100644 --- a/src/main/java/com/projectswg/holocore/resources/objects/creature/CreatureObject.java +++ b/src/main/java/com/projectswg/holocore/resources/objects/creature/CreatureObject.java @@ -312,7 +312,7 @@ public class CreatureObject extends TangibleObject { this.posture = posture; sendDelta(3, 13, posture.getId()); if (isPlayer()) - sendObserversAndSelf(new PostureUpdate(getObjectId(), posture)); + sendObservers(new PostureUpdate(getObjectId(), posture)); } public void setRace(Race race) { diff --git a/src/main/java/com/projectswg/holocore/services/chat/ChatManager.java b/src/main/java/com/projectswg/holocore/services/chat/ChatManager.java index 4b6d1d456..e7d1de583 100644 --- a/src/main/java/com/projectswg/holocore/services/chat/ChatManager.java +++ b/src/main/java/com/projectswg/holocore/services/chat/ChatManager.java @@ -298,7 +298,7 @@ public class ChatManager extends Manager { } private void broadcastAreaMessage(String message, Player broadcaster) { - broadcaster.getCreatureObject().sendObserversAndSelf(new ChatSystemMessage(SystemChatType.PERSONAL, message)); + broadcaster.getCreatureObject().sendObservers(new ChatSystemMessage(SystemChatType.PERSONAL, message)); } private void broadcastPlanetMessage(String message, Terrain terrain) { diff --git a/src/main/java/com/projectswg/holocore/services/combat/CombatManager.java b/src/main/java/com/projectswg/holocore/services/combat/CombatManager.java index 509fff3d6..a559d63a7 100644 --- a/src/main/java/com/projectswg/holocore/services/combat/CombatManager.java +++ b/src/main/java/com/projectswg/holocore/services/combat/CombatManager.java @@ -256,7 +256,7 @@ public class CombatManager extends Manager { combatSpam.setSpamType(CombatSpamFilterType.ALL); // TODO doesn't look like a buff in the combat log - source.sendObserversAndSelf(action, combatSpam); + source.sendObservers(action, combatSpam); } private void handleHeal(CreatureObject source, SWGObject target, CombatCommand combatCommand) { @@ -310,10 +310,7 @@ public class CombatManager extends Manager { float range = combatCommand.getConeLength(); Location sourceLocation = source.getWorldLocation(); - // Heal ourselves - doHeal(source, source, healAmount, combatCommand); - - for (SWGObject nearbyObject : source.getObjectsAware()) { + for (SWGObject nearbyObject : source.getAware()) { // The source is included in awareness if (sourceLocation.isWithinDistance(nearbyObject.getLocation(), range)) { if (!(nearbyObject instanceof CreatureObject)) { // We can't heal something that's not a creature @@ -322,7 +319,7 @@ public class CombatManager extends Manager { CreatureObject nearbyCreature = (CreatureObject) nearbyObject; - if (source.isAttackable(nearbyCreature) || nearbyCreature.isEnemyOf(source)) { + if (source.isAttackable(nearbyCreature)) { continue; } @@ -453,7 +450,7 @@ public class CombatManager extends Manager { combatSpam.setSpamType(CombatSpamFilterType.ALL); // TODO doesn't look like a heal in the combat log - healed.sendObserversAndSelf(action, flyText, effect, combatSpam); + healed.sendObservers(action, flyText, effect, combatSpam); } private void doCombatSingle(CreatureObject source, SWGObject target, AttackInfo info, WeaponObject weapon, CombatCommand command) { @@ -474,6 +471,9 @@ public class CombatManager extends Manager { SWGObject originParent = origin.getParent(); Collection objectsToCheck = originParent == null ? origin.getObjectsAware() : originParent.getContainedObjects(); + // TODO block + // TODO evasion if no block + // TODO line of sight checks between the explosive and each target Set targets = objectsToCheck.stream().filter(CreatureObject.class::isInstance).map(CreatureObject.class::cast) .filter(source::isAttackable).filter(target -> canPerform(source, target, command) == CombatStatus.SUCCESS) @@ -522,7 +522,7 @@ public class CombatManager extends Manager { combatSpam.setSpamType(CombatSpamFilterType.ALL); if (!info.isSuccess()) { // Single target negate, like dodge or parry! - target.sendObserversAndSelf(combatSpam); + target.sendObservers(combatSpam); return; } @@ -538,7 +538,7 @@ public class CombatManager extends Manager { // TODO Critical hit roll for attacker // TODO armour - target.sendObserversAndSelf(combatSpam); + target.sendObservers(combatSpam); int finalDamage = info.getFinalDamage(); @@ -553,7 +553,7 @@ public class CombatManager extends Manager { target.modifyHealth(-finalDamage); } - source.sendObserversAndSelf(action); + source.sendObservers(action); } private void enterCombat(CreatureObject creature) { diff --git a/src/main/java/com/projectswg/holocore/services/combat/CorpseService.java b/src/main/java/com/projectswg/holocore/services/combat/CorpseService.java index a777ba13d..6e4c5f815 100644 --- a/src/main/java/com/projectswg/holocore/services/combat/CorpseService.java +++ b/src/main/java/com/projectswg/holocore/services/combat/CorpseService.java @@ -406,7 +406,7 @@ final class CorpseService extends Service { corpse.setTurnScale(1); corpse.setMovementScale(1); corpse.setHealth(corpse.getMaxHealth()); - corpse.sendObserversAndSelf(new PlayClientEffectObjectMessage("clienteffect/player_clone_compile.cef", "", corpse.getObjectId(), "")); + corpse.sendObservers(new PlayClientEffectObjectMessage("clienteffect/player_clone_compile.cef", "", corpse.getObjectId(), "")); BuffIntent cloningSickness = new BuffIntent("cloning_sickness", corpse, corpse, false); new BuffIntent("incapWeaken", corpse, corpse, true).broadcastAfterIntent(cloningSickness); diff --git a/src/main/java/com/projectswg/holocore/services/commands/BuffService.java b/src/main/java/com/projectswg/holocore/services/commands/BuffService.java index d3c2f4555..fe82efb8f 100644 --- a/src/main/java/com/projectswg/holocore/services/commands/BuffService.java +++ b/src/main/java/com/projectswg/holocore/services/commands/BuffService.java @@ -302,7 +302,7 @@ public class BuffService extends Service { private void sendParticleEffect(String effectFileName, CreatureObject receiver, String hardPoint) { if (!effectFileName.isEmpty()) { - receiver.sendObserversAndSelf(new PlayClientEffectObjectMessage(effectFileName, hardPoint, receiver.getObjectId(), "")); + receiver.sendObservers(new PlayClientEffectObjectMessage(effectFileName, hardPoint, receiver.getObjectId(), "")); } } diff --git a/src/main/java/com/projectswg/holocore/services/commands/EntertainmentService.java b/src/main/java/com/projectswg/holocore/services/commands/EntertainmentService.java index 99a1a6789..f6b24f80e 100644 --- a/src/main/java/com/projectswg/holocore/services/commands/EntertainmentService.java +++ b/src/main/java/com/projectswg/holocore/services/commands/EntertainmentService.java @@ -197,7 +197,7 @@ public class EntertainmentService extends Service { performerObject.setPerformanceCounter(1); // Send the flourish animation to the owner of the creature and owners of creatures observing - performerObject.sendObserversAndSelf(new Animation(performerObject.getObjectId(), fi.getFlourishName())); + performerObject.sendObservers(new Animation(performerObject.getObjectId(), fi.getFlourishName())); new SystemMessageIntent(performer, "@performance:flourish_perform").broadcast(); } diff --git a/src/main/java/com/projectswg/holocore/services/crafting/survey/SampleSession.java b/src/main/java/com/projectswg/holocore/services/crafting/survey/SampleSession.java index d76a8d012..1fc162f39 100644 --- a/src/main/java/com/projectswg/holocore/services/crafting/survey/SampleSession.java +++ b/src/main/java/com/projectswg/holocore/services/crafting/survey/SampleSession.java @@ -59,7 +59,7 @@ public class SampleSession { double concentration = getConcentration(creature); creature.setPosture(Posture.CROUCHED); creature.getOwner().sendPacket(new PlayMusicMessage(0, getMusicFile(), 1, false)); - creature.sendObserversAndSelf(new PlayClientEffectObjectMessage(getEffectFile(), "", creature.getObjectId(), "")); + creature.sendObservers(new PlayClientEffectObjectMessage(getEffectFile(), "", creature.getObjectId(), "")); Log.d("%s started a sample session with %s and concentration %.1f", creature.getObjectName(), resource.getName(), concentration); } diff --git a/src/main/java/com/projectswg/holocore/services/crafting/survey/SurveySession.java b/src/main/java/com/projectswg/holocore/services/crafting/survey/SurveySession.java index f68afb1e6..2b0adf7c4 100644 --- a/src/main/java/com/projectswg/holocore/services/crafting/survey/SurveySession.java +++ b/src/main/java/com/projectswg/holocore/services/crafting/survey/SurveySession.java @@ -61,7 +61,7 @@ public class SurveySession { loadResourcePoints(surveyMessage, creature, resource, 320); creature.getOwner().sendPacket(surveyMessage); creature.getOwner().sendPacket(new PlayMusicMessage(0, getMusicFile(), 1, false)); - creature.sendObserversAndSelf(new PlayClientEffectObjectMessage(getEffectFile(), "", creature.getObjectId(), "")); + creature.sendObservers(new PlayClientEffectObjectMessage(getEffectFile(), "", creature.getObjectId(), "")); } public void stopSession() { diff --git a/src/main/java/com/projectswg/holocore/services/experience/SkillTemplateService.java b/src/main/java/com/projectswg/holocore/services/experience/SkillTemplateService.java index 8168705ef..4ce197359 100644 --- a/src/main/java/com/projectswg/holocore/services/experience/SkillTemplateService.java +++ b/src/main/java/com/projectswg/holocore/services/experience/SkillTemplateService.java @@ -155,7 +155,7 @@ public final class SkillTemplateService extends Service { flyTextColor = new RGB(Color.BLUE); } - creatureObject.sendObserversAndSelf(new PlayClientEffectObjectMessage(effectFile, "", objectId, "")); + creatureObject.sendObservers(new PlayClientEffectObjectMessage(effectFile, "", objectId, "")); player.sendPacket(new ShowFlyText(objectId, new StringId("cbt_spam", flyText), Scale.LARGEST, flyTextColor)); if (skillUp) diff --git a/src/main/java/com/projectswg/holocore/services/faction/CivilWarService.java b/src/main/java/com/projectswg/holocore/services/faction/CivilWarService.java index f9cd2de09..c80d6de71 100644 --- a/src/main/java/com/projectswg/holocore/services/faction/CivilWarService.java +++ b/src/main/java/com/projectswg/holocore/services/faction/CivilWarService.java @@ -397,7 +397,7 @@ final class CivilWarService extends Service { .getObjectName()); // Send visual effect to killer and everyone around - killerCreature.sendObserversAndSelf(new PlayClientEffectObjectMessage(effectFile, "head", killerCreature.getObjectId(), "")); + killerCreature.sendObservers(new PlayClientEffectObjectMessage(effectFile, "head", killerCreature.getObjectId(), "")); // Send sound to just to the killer killerCreature.sendSelf(new PlayMusicMessage(0, soundFile, 0, false));