diff --git a/src/intents/chat/ChatBroadcastIntent.java b/src/intents/chat/ChatBroadcastIntent.java index eb499c841..2dd728644 100644 --- a/src/intents/chat/ChatBroadcastIntent.java +++ b/src/intents/chat/ChatBroadcastIntent.java @@ -2,17 +2,19 @@ package intents.chat; import resources.Terrain; import resources.control.Intent; -import resources.objects.SWGObject; +import resources.encodables.ProsePackage; +import resources.player.Player; public class ChatBroadcastIntent extends Intent { public static final String TYPE = "ChatBroadcastIntent"; private BroadcastType broadcastType; - private SWGObject broadcaster; + private Player broadcaster; private Terrain terrain; private String message; + private ProsePackage prose; - public ChatBroadcastIntent(String message, SWGObject broadcaster, Terrain terrain, BroadcastType type) { + public ChatBroadcastIntent(String message, Player broadcaster, Terrain terrain, BroadcastType type) { super(TYPE); this.message = message; this.broadcastType = type; @@ -20,6 +22,11 @@ public class ChatBroadcastIntent extends Intent { this.terrain = terrain; } + public ChatBroadcastIntent(Player receiver, ProsePackage prose) { + this(null, receiver, null, BroadcastType.PERSONAL); + this.prose = prose; + } + public ChatBroadcastIntent(String message, BroadcastType type) { this(message, null, null, type); } @@ -29,13 +36,15 @@ public class ChatBroadcastIntent extends Intent { } public BroadcastType getBroadcastType() { return broadcastType; } - public SWGObject getBroadcaster() { return broadcaster; } + public Player getBroadcaster() { return broadcaster; } public Terrain getTerrain() { return terrain; } public String getMessage() { return message; } + public ProsePackage getProse() { return prose; } public enum BroadcastType { AREA, PLANET, - GALAXY + GALAXY, + PERSONAL } } diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index 10add0ed8..d6c403bf7 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -88,12 +88,14 @@ public class CreatureObject extends TangibleObject { equipmentList.add(new Equipment((WeaponObject) obj)); else equipmentList.add(new Equipment(obj.getObjectId(), obj.getTemplate())); + equipmentList.sendDeltaMessage(this); } } public void addAppearanceItem(SWGObject obj) { synchronized(appearanceList) { appearanceList.add(new Equipment(obj.getObjectId(), obj.getTemplate())); + appearanceList.sendDeltaMessage(this); } } diff --git a/src/services/chat/ChatService.java b/src/services/chat/ChatService.java index e021e1312..0ec06a7ba 100644 --- a/src/services/chat/ChatService.java +++ b/src/services/chat/ChatService.java @@ -14,7 +14,6 @@ import intents.PlayerEventIntent; import intents.ServerStatusIntent; import intents.ServerStatusIntent.ServerStatus; import intents.chat.ChatBroadcastIntent; -import intents.chat.ChatBroadcastIntent.BroadcastType; import intents.chat.PersistentMessageIntent; import intents.chat.SpatialChatIntent; import network.packets.Packet; @@ -35,6 +34,8 @@ import network.packets.swg.zone.object_controller.SpatialChat; import resources.Terrain; import resources.control.Intent; import resources.control.Service; +import resources.encodables.OutOfBand; +import resources.encodables.ProsePackage; import resources.encodables.player.Mail; import resources.objects.SWGObject; import resources.player.Player; @@ -148,10 +149,20 @@ public class ChatService extends Service { } private void handleChatBroadcast(ChatBroadcastIntent i) { - if (i.getBroadcastType() == BroadcastType.AREA) - broadcastAreaMessage(i.getMessage(), i.getBroadcaster()); - else - broadcastGalaxyMessage(i.getMessage(), i.getTerrain()); + switch(i.getBroadcastType()) { + case AREA: + broadcastAreaMessage(i.getMessage(), i.getBroadcaster()); + break; + case PLANET: + broadcastGalaxyMessage(i.getMessage(), i.getTerrain()); // TODO: Planet specific system messages + break; + case GALAXY: + broadcastGalaxyMessage(i.getMessage(), i.getTerrain()); + break; + case PERSONAL: + broadcastPersonalMessage(i.getProse(), i.getBroadcaster()); + break; + } } private void handleChatRoomListRequest(Player player, ChatRequestRoomList request) { @@ -252,11 +263,11 @@ public class ChatService extends Service { sendPersistentMessage(player, mail, MailFlagType.FULL_MESSAGE, galaxy); } - private void broadcastAreaMessage(String message, SWGObject broadcaster) { + private void broadcastAreaMessage(String message, Player broadcaster) { ChatSystemMessage packet = new ChatSystemMessage(SystemChatType.SCREEN_AND_CHAT.ordinal(), message); - broadcaster.getOwner().sendPacket(packet); + broadcaster.sendPacket(packet); - List observers = broadcaster.getObservers(); + List observers = broadcaster.getCreatureObject().getObservers(); for (Player player : observers) { player.sendPacket(packet); } @@ -267,6 +278,11 @@ public class ChatService extends Service { new NotifyPlayersPacketIntent(packet, terrain).broadcast(); } + private void broadcastPersonalMessage(ProsePackage prose, Player player) { + OutOfBand pckg = new OutOfBand(prose); + player.sendPacket(new ChatSystemMessage(SystemChatType.SCREEN_AND_CHAT, pckg)); + } + private void sendShutdownBroadcasts(final long time) { final AtomicInteger runCount = new AtomicInteger(); final long interval = (int) (time / 3);