Fixed the same packet being sent multiple times

This commit is contained in:
Mads Boddum
2018-04-03 14:55:52 +02:00
parent 10ce7c2e21
commit f717b2b28d
18 changed files with 26 additions and 36 deletions
@@ -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()));
}
}
@@ -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));
}
}
@@ -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));
}
}
@@ -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));
}
}
@@ -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);
}
}
@@ -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));
}
}
@@ -738,13 +738,6 @@ public abstract class SWGObject extends BaselineObject implements Comparable<SWG
return awareness.getAware(type);
}
public int sendObserversAndSelf(SWGPacket ... SWGPackets) {
int sent = 0;
sent += sendSelf(SWGPackets);
sent += sendObservers(SWGPackets);
return sent;
}
public int sendObservers(SWGPacket ... SWGPackets) {
int sent = 0;
for (Player observer : getObservers()) {
@@ -75,7 +75,7 @@ class TerrainMapChunk {
}
private static void recursiveAdd(@Nonnull Collection<SWGObject> 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()) {
@@ -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) {
@@ -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) {
@@ -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<SWGObject> 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<CreatureObject> 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) {
@@ -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);
@@ -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(), ""));
}
}
@@ -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();
}
@@ -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);
}
@@ -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() {
@@ -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)
@@ -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));