diff --git a/src/services/chat/ChatService.java b/src/services/chat/ChatService.java index 15f9c1dd..ae7d1615 100644 --- a/src/services/chat/ChatService.java +++ b/src/services/chat/ChatService.java @@ -50,6 +50,7 @@ import resources.common.*; import resources.datatables.DisplayType; import resources.guild.Guild; import resources.objects.creature.CreatureObject; +import resources.objects.group.GroupObject; import resources.objects.player.PlayerObject; import protocol.swg.AddIgnoreMessage; import protocol.swg.ObjControllerMessage; @@ -222,7 +223,7 @@ public class ChatService implements INetworkDispatch { SWGObject recipient = getObjectByFirstName(firstName); - if (recipient == null) + if (recipient == null || !recipient.isInQuadtree()) return; PlayerObject recipientGhost = (PlayerObject) recipient.getSlottedObject("ghost"); @@ -266,29 +267,34 @@ public class ChatService implements INetworkDispatch { if(sender == null) return; - // TODO: Recipient handling for values: citizens, group, guild ranks (ace, boot, admiral, etc.) - - if (packet.getRecipient().equals("guild")) { - Guild guild = core.guildService.getGuildById(((CreatureObject) sender).getGuildId()); - if (guild == null || !guild.getMembers().containsKey(sender.getObjectID())) { - ChatOnSendPersistentMessage response = new ChatOnSendPersistentMessage(4, packet.getCounter()); + + switch (packet.getRecipient()) { + case "citizens": break; + case "guild": + Guild guild = core.guildService.getGuildById(((CreatureObject) sender).getGuildId()); + if (guild == null || !guild.getMembers().containsKey(sender.getObjectID())) { + ChatOnSendPersistentMessage response = new ChatOnSendPersistentMessage(4, packet.getCounter()); + session.write(response.serialize()); + return; + } + + if (!guild.getMember(sender.getObjectID()).hasMailPermission()) { + ((CreatureObject) sender).sendSystemMessage("@guild:generic_fail_no_permission", (byte) 0); + ChatOnSendPersistentMessage response = new ChatOnSendPersistentMessage(4, packet.getCounter()); + session.write(response.serialize()); + return; + } + guild.sendGuildMail(sender.getCustomName(), packet.getSubject(), packet.getMessage()); + + ChatOnSendPersistentMessage response = new ChatOnSendPersistentMessage(0, packet.getCounter()); session.write(response.serialize()); return; - } + case "group": break; - if (!guild.getMember(sender.getObjectID()).hasMailPermission()) { - ((CreatureObject) sender).sendSystemMessage("@guild:generic_fail_no_permission", (byte) 0); - ChatOnSendPersistentMessage response = new ChatOnSendPersistentMessage(4, packet.getCounter()); - session.write(response.serialize()); - return; - } - guild.sendGuildMail(sender.getCustomName(), packet.getSubject(), packet.getMessage()); - - ChatOnSendPersistentMessage response = new ChatOnSendPersistentMessage(0, packet.getCounter()); - session.write(response.serialize()); - return; + default: break; + // TODO: Guild ranks } - + SWGObject recipient = core.objectService.getObjectByFirstName(packet.getRecipient()); if (recipient == null) @@ -750,25 +756,6 @@ public class ChatService implements INetworkDispatch { } - public SWGObject getObjectByFirstName(String name) { - ConcurrentHashMap clients = core.getActiveConnectionsMap(); - - if(name.contains(" ")) - name = name.split(" ")[0]; - - for(Client client : clients.values()) { - if(client.getParent() == null) - continue; - - String fullName = client.getParent().getCustomName(); - String firstName = fullName.split(" ")[0]; - - if(firstName.equalsIgnoreCase(name)) - return client.getParent(); - } - return null; - } - public int generateMailId() { Random rand = new Random(); @@ -1077,4 +1064,10 @@ public class ChatService implements INetworkDispatch { return message; } + @Deprecated + public SWGObject getObjectByFirstName(String name) { + return core.objectService.getObjectByFirstName(name); + } + + } diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index d1849ab9..a823a1ca 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -52,6 +52,7 @@ import resources.datatables.PlayerFlags; import resources.guild.Guild; import resources.harvest.SurveyTool; +import org.apache.commons.lang3.text.WordUtils; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; import org.python.core.Py; @@ -606,7 +607,7 @@ public class ObjectService implements INetworkDispatch { for(SWGObject obj : objectList.values()) { if(obj.getCustomName() == null) continue; - if(obj.getCustomName().equals(customName)) + if(obj.getCustomName().equalsIgnoreCase(customName)) return obj; } @@ -621,7 +622,7 @@ public class ObjectService implements INetworkDispatch { continue; } - if (object.getCustomName() != null && customName.length() > 0 && object.getCustomName().equals(customName)) { + if (object.getCustomName() != null && customName.length() > 0 && object.getCustomName().equalsIgnoreCase(customName)) { return object; } } @@ -640,7 +641,7 @@ public class ObjectService implements INetworkDispatch { continue; if(obj.getCustomName() == null) continue; - if(obj.getCustomName().startsWith(customName)) + if(obj.getCustomName().startsWith(customName) || obj.getCustomName().toUpperCase().startsWith(WordUtils.capitalize(customName))) return obj; } @@ -655,7 +656,7 @@ public class ObjectService implements INetworkDispatch { continue; } - if (object.getCustomName() != null && customName.length() > 0 && object.getCustomName().startsWith(customName)) { + if (object.getCustomName() != null && customName.length() > 0 && (object.getCustomName().startsWith(customName) || object.getCustomName().toUpperCase().startsWith(WordUtils.capitalize(customName)))) { return object; } }