diff --git a/scripts/commands/addfriend.py b/scripts/commands/addfriend.py index d839b59b..c612261d 100644 --- a/scripts/commands/addfriend.py +++ b/scripts/commands/addfriend.py @@ -5,7 +5,12 @@ def setup(): def run(core, actor, target, commandString): actorGhost = actor.getSlottedObject("ghost") + chatSrvc = core.chatService if chatSrvc and actorGhost and commandString: - chatSrvc.addFriend(actorGhost, commandString, 1) + if actorGhost.getFriendList().contains(commandString.split(" ")[0].lower()): + actor.sendSystemMessage(commandString.split(" ")[0].lower() + ' is already in your friend list.', 0) + return + else: + chatSrvc.addFriend(actorGhost, commandString) return \ No newline at end of file diff --git a/scripts/commands/addignore.py b/scripts/commands/addignore.py index d8da29a8..04b1ca6b 100644 --- a/scripts/commands/addignore.py +++ b/scripts/commands/addignore.py @@ -6,5 +6,14 @@ def setup(): def run(core, actor, target, commandString): actorGhost = actor.getSlottedObject("ghost") chatSrvc = core.chatService + + if not actorGhost and chatSrvc and commandString: + return + + if actorGhost.getIgnoreList().contains(commandString.split(" ")[0].lower()): + actor.sendSystemMessage(commandString.split(' ')[0].lower() + ' is already in your ignore list.', 0) + return + chatSrvc.addToIgnoreList(actor, commandString) + return \ No newline at end of file diff --git a/scripts/commands/findfriend.py b/scripts/commands/findfriend.py index 992efa35..c6f528ac 100644 --- a/scripts/commands/findfriend.py +++ b/scripts/commands/findfriend.py @@ -1,3 +1,5 @@ +from resources.objects.waypoint import WaypointObject +from engine.resources.common import CRC import sys def setup(): @@ -11,8 +13,29 @@ def run(core, actor, target, commandString): friendObj = core.chatService.getObjectByFirstName(friend) if friendObj is not None: if friendObj.getSlottedObject('ghost').getFriendList().contains(actor.getCustomName().lower().split(' ')[0]): - fPos = friendObj.getPosition() - core.commandService.callCommand(actor, 'waypoint', None, friendObj.getPlanet().name + ' ' + str(fPos.x) + ' ' + str(fPos.z) + ' ' + str(fPos.y) + ' blue ' + friendObj.getCustomName()) + createWaypoint(core, actor, friendObj) return return - return \ No newline at end of file + return + + +def createWaypoint(core, actor, friendObj): + ghost = actor.getSlottedObject('ghost') + friendName = friendObj.getCustomName().split(' ')[0] + wp = WaypointObject() + + for wp in ghost.getWaypoints(): + if wp.getName() == friendName and wp.getPlanet() == friendObj.getPlanet(): + core.commandService.callCommand(actor, 'serverdestroyobject', wp, '') + break + + waypoint = core.objectService.createObject('object/waypoint/shared_waypoint.iff', friendObj.getPlanet(), friendObj.getWorldPosition().x, friendObj.getWorldPosition().z, friendObj.getWorldPosition().y) + waypoint.setName(friendName) + waypoint.setActive(True) + waypoint.setColor(WaypointObject.YELLOW) + waypoint.setName(friendName) + waypoint.setPlanetCRC(CRC.StringtoCRC(friendObj.getPlanet().name)) + waypoint.setStringAttribute('', '') + ghost.waypointAdd(waypoint) + actor.sendSystemMessage('A waypoint has been created in your datapad at the location.', 0) + return diff --git a/scripts/commands/getfriendlist.py b/scripts/commands/getfriendlist.py index 0a478a48..5826dfac 100644 --- a/scripts/commands/getfriendlist.py +++ b/scripts/commands/getfriendlist.py @@ -5,7 +5,7 @@ def setup(): return def run(core, actor, target, commandString): - ghost = actor.getSlottedObject('ghost') - friendsListMessage = ChatOnGetFriendsList(ghost) - actor.getClient().getSession().write(friendsListMessage.serialize()) + #ghost = actor.getSlottedObject('ghost') + #friendsListMessage = ChatOnGetFriendsList(ghost) + #actor.getClient().getSession().write(friendsListMessage.serialize()) return \ No newline at end of file diff --git a/scripts/commands/lfg.py b/scripts/commands/lfg.py index 3477098f..dc0033c5 100644 --- a/scripts/commands/lfg.py +++ b/scripts/commands/lfg.py @@ -6,6 +6,5 @@ def setup(): def run(core, actor, target, commandString): ghost = actor.getSlottedObject('ghost') - print ('Command recieved!') ghost.toggleFlag(PlayerFlags.LFG) return \ No newline at end of file diff --git a/scripts/commands/waypoint.py b/scripts/commands/waypoint.py index e0d3827c..b646ff14 100644 --- a/scripts/commands/waypoint.py +++ b/scripts/commands/waypoint.py @@ -22,7 +22,7 @@ def run(core, actor, target, commandString): planet = core.terrainService.getPlanetByName(commandArgs[0]) waypoint = core.objectService.createObject('object/waypoint/shared_waypoint.iff', planet, float(commandArgs[1]), float(commandArgs[2]), float(commandArgs[3])) waypoint.setActive(True) - waypoint.setColor(colorCheck(core, actor, target, commandString, commandArgs[4])) + waypoint.setColor(colorCheck(commandArgs[4])) name = commandString.split(" ", 5) waypoint.setName(name[5]) waypoint.setPlanetCRC(crc.StringtoCRC(planet.getName())) @@ -89,7 +89,10 @@ def run(core, actor, target, commandString): waypoint = core.objectService.createObject('object/waypoint/shared_waypoint.iff', actor.getPlanet(), actor.getWorldPosition().x, actor.getWorldPosition().z, actor.getWorldPosition().y) waypoint.setActive(True) waypoint.setColor(WaypointObject.BLUE) - waypoint.setName(commandString) + if commandString == '': + waypoint.setName(actor.getPlanet().name.capitalize()) + else: + waypoint.setName(commandString) waypoint.setPlanetCRC(crc.StringtoCRC(actor.getPlanet().getName())) waypoint.setStringAttribute('', '') # This simply allows the attributes to display (nothing else has to be done) actorPlayer.waypointAdd(waypoint) @@ -98,7 +101,7 @@ def run(core, actor, target, commandString): return -def colorCheck(core, actor, target, commandString, validcolors): +def colorCheck(validcolors): if validcolors == "blue": return WaypointObject.BLUE if validcolors == "green": diff --git a/src/protocol/swg/ChatFriendsListUpdate.java b/src/protocol/swg/ChatFriendsListUpdate.java index b804c17b..bd6debb0 100644 --- a/src/protocol/swg/ChatFriendsListUpdate.java +++ b/src/protocol/swg/ChatFriendsListUpdate.java @@ -29,12 +29,8 @@ public class ChatFriendsListUpdate extends SWGMessage { @Override public IoBuffer serialize() { - Config config = new Config(); - config.setFilePath("nge.cfg"); - if (!(config.loadConfigFile())) { - config = DefaultConfig.getConfig(); - } - String serverName = config.getString("GALAXY_NAME"); + + String serverName = NGECore.getInstance().getConfig().getString("GALAXY_NAME"); IoBuffer result = IoBuffer.allocate(50 + friendName.length()).order(ByteOrder.LITTLE_ENDIAN); result.putShort((short) 3); diff --git a/src/protocol/swg/ChatOnGetFriendsList.java b/src/protocol/swg/ChatOnGetFriendsList.java index ae0d52df..3e497bf1 100644 --- a/src/protocol/swg/ChatOnGetFriendsList.java +++ b/src/protocol/swg/ChatOnGetFriendsList.java @@ -9,6 +9,7 @@ import org.apache.mina.core.buffer.IoBuffer; import resources.objects.player.PlayerObject; +// This is possibly unused public class ChatOnGetFriendsList extends SWGMessage { private List friendList; @@ -24,8 +25,7 @@ public class ChatOnGetFriendsList extends SWGMessage { } @Override public void deserialize(IoBuffer data) { - // XXX Auto-generated method stub - + } @Override @@ -51,7 +51,6 @@ public class ChatOnGetFriendsList extends SWGMessage { int size = buffer.position(); buffer = IoBuffer.allocate(size).put(buffer.array(), 0, size); buffer.flip(); - //System.out.println("ChatOnGetFriendsList: " + buffer.getHexDump()); return buffer; } diff --git a/src/resources/objects/player/PlayerMessageBuilder.java b/src/resources/objects/player/PlayerMessageBuilder.java index e727df21..86ab67d3 100644 --- a/src/resources/objects/player/PlayerMessageBuilder.java +++ b/src/resources/objects/player/PlayerMessageBuilder.java @@ -22,12 +22,12 @@ package resources.objects.player; import java.nio.ByteOrder; +import java.util.List; import java.util.Map.Entry; import org.apache.mina.core.buffer.IoBuffer; import engine.resources.common.CRC; - import resources.objects.ObjectMessageBuilder; import resources.objects.waypoint.WaypointObject; @@ -251,7 +251,7 @@ public class PlayerMessageBuilder extends ObjectMessageBuilder { if(player.getFriendList().isEmpty()) { buffer.putInt(0); - buffer.putInt(0); + buffer.putInt(0); } else { buffer.putInt(player.getFriendList().size()); buffer.putInt(player.getFriendListUpdateCounter()); @@ -261,7 +261,6 @@ public class PlayerMessageBuilder extends ObjectMessageBuilder { for(String friend : player.getFriendList()) { buffer.put(getAsciiString(friend)); } - } } @@ -515,60 +514,70 @@ public class PlayerMessageBuilder extends ObjectMessageBuilder { } - public IoBuffer buildFriendAddDelta(String friend) { + public IoBuffer buildFriendAddDelta(List friends) { + + IoBuffer buffer = bufferPool.allocate(13 + (friends.size() * 2), false).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); - IoBuffer buffer = bufferPool.allocate(13 + friend.length(), false).order(ByteOrder.LITTLE_ENDIAN); PlayerObject player = (PlayerObject) object; buffer.putInt(1); buffer.putInt(player.getFriendListUpdateCounter()); - buffer.put((byte) 1); // updateType (SubType) + buffer.put((byte) 3); // updateType (SubType) - buffer.putShort((short) player.getFriendList().indexOf(friend)); - buffer.put(getAsciiString(friend)); + buffer.putShort((short) (player.getFriendList().size())); + for (String f : friends) { + buffer.put(getAsciiString(f)); + } int size = buffer.position(); buffer.flip(); buffer = createDelta("PLAY", (byte) 9, (short) 1, (short) 7, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildFriendRemoveDelta(String friend) { - - IoBuffer buffer = bufferPool.allocate(11, false).order(ByteOrder.LITTLE_ENDIAN); - PlayerObject player = (PlayerObject) object; - - buffer.putInt(1); - buffer.putInt(player.getFriendListUpdateCounter()); - buffer.put((byte) 0); // updateType (SubType) + return buffer; - buffer.putShort((short) player.getFriendList().indexOf(friend)); + } + + public IoBuffer buildFriendRemoveDelta(List friends) { + + IoBuffer buffer = bufferPool.allocate(13 + (friends.size() * 2), false).order(ByteOrder.LITTLE_ENDIAN); + PlayerObject player = (PlayerObject) object; + + buffer.putInt(1); + buffer.putInt(player.getFriendListUpdateCounter()); + + buffer.put((byte) 3); // updateType (SubType) + + buffer.putShort((short) friends.size()); + for (String f : friends) { + buffer.put(getAsciiString(f)); + } int size = buffer.position(); buffer.flip(); buffer = createDelta("PLAY", (byte) 9, (short) 1, (short) 7, buffer, size + 4); - + return buffer; - } + - public IoBuffer buildIgnoreAddDelta(String ignoreName) { - IoBuffer buffer = bufferPool.allocate(30, false).order(ByteOrder.LITTLE_ENDIAN); + public IoBuffer buildIgnoreAddDelta(List ignoreList) { + IoBuffer buffer = bufferPool.allocate(13 + (ignoreList.size() * 2) , false).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); PlayerObject player = (PlayerObject) object; buffer.putInt(1); buffer.putInt(player.getIgnoreListUpdateCounter()); - buffer.put((byte) 1); // updateType (SubType) + buffer.put((byte) 3); // updateType (SubType) - buffer.putShort((short) player.getIgnoreList().indexOf(ignoreName)); - buffer.put(getAsciiString(ignoreName)); + buffer.putShort((short) ignoreList.size()); + for (String ignore : ignoreList) { + buffer.put(getAsciiString(ignore)); + } int size = buffer.position(); buffer.flip(); @@ -578,15 +587,20 @@ public class PlayerMessageBuilder extends ObjectMessageBuilder { return buffer; } - public IoBuffer buildIgnoreRemoveDelta(String removeName) { - IoBuffer buffer = bufferPool.allocate(30, false).order(ByteOrder.LITTLE_ENDIAN); + public IoBuffer buildIgnoreRemoveDelta(List ignoreList) { + IoBuffer buffer = bufferPool.allocate(13 + (ignoreList.size() * 2) , false).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); PlayerObject player = (PlayerObject) object; buffer.putInt(1); buffer.putInt(player.getIgnoreListUpdateCounter()); - buffer.put((byte) 0); - buffer.putShort((short) player.getIgnoreList().indexOf(removeName)); + buffer.put((byte) 3); // updateType (SubType) + + buffer.putShort((short) ignoreList.size()); + for (String ignore : ignoreList) { + buffer.put(getAsciiString(ignore)); + } int size = buffer.position(); buffer.flip(); diff --git a/src/resources/objects/player/PlayerObject.java b/src/resources/objects/player/PlayerObject.java index f2b86ce9..7b493463 100644 --- a/src/resources/objects/player/PlayerObject.java +++ b/src/resources/objects/player/PlayerObject.java @@ -427,7 +427,7 @@ public class PlayerObject extends IntangibleObject { synchronized(objectMutex) { setFriendListUpdateCounter(getFriendListUpdateCounter() + 1); friendList.add(friend); - getContainer().getClient().getSession().write(messageBuilder.buildFriendAddDelta(friend)); + getContainer().getClient().getSession().write(messageBuilder.buildFriendAddDelta(getFriendList())); } } @@ -435,7 +435,7 @@ public class PlayerObject extends IntangibleObject { synchronized(objectMutex) { setFriendListUpdateCounter(getFriendListUpdateCounter() + 1); friendList.remove(friend); - getContainer().getClient().getSession().write(messageBuilder.buildFriendRemoveDelta(friend)); + getContainer().getClient().getSession().write(messageBuilder.buildFriendRemoveDelta(getFriendList())); } } @@ -452,16 +452,16 @@ public class PlayerObject extends IntangibleObject { public void ignoreAdd(String ignoreName) { synchronized(objectMutex) { setIgnoreListUpdateCounter(getIgnoreListUpdateCounter() + 1); - getContainer().getClient().getSession().write(messageBuilder.buildIgnoreAddDelta(ignoreName)); ignoreList.add(ignoreName); + getContainer().getClient().getSession().write(messageBuilder.buildIgnoreAddDelta(getIgnoreList())); } } public void ignoreRemove(String removeName) { synchronized(objectMutex) { setIgnoreListUpdateCounter(getIgnoreListUpdateCounter() + 1); - getContainer().getClient().getSession().write(messageBuilder.buildIgnoreRemoveDelta(removeName)); ignoreList.remove(removeName); + getContainer().getClient().getSession().write(messageBuilder.buildIgnoreRemoveDelta(getIgnoreList())); } } diff --git a/src/services/CharacterService.java b/src/services/CharacterService.java index c9fc5897..75f8e663 100644 --- a/src/services/CharacterService.java +++ b/src/services/CharacterService.java @@ -461,5 +461,34 @@ public class CharacterService implements INetworkDispatch { } return characters; } + + /** + * Checks the database for if the name of the player exists. The name is + * formated automatically in the method for checking the database, so no conversion is required. + * @param name Name to check for in the database + * @return Returns True if the player exists + */ + public boolean playerExists(String name) { + if (!name.equals("")) { + if (name.contains(" ")) { + name = name.split(" ")[0]; + } + name = name.replace("'", "''"); + name = name.toLowerCase(); + try { + PreparedStatement ps = databaseConnection.preparedStatement("SELECT id FROM characters WHERE LOWER(\"firstName\")=?"); + ps.setString(1, name); + ResultSet resultSet = ps.executeQuery(); + + boolean isDuplicate = resultSet.next(); + resultSet.getStatement().close(); + if (isDuplicate) { return true; } + else { return false; } + } + + catch (SQLException e) { e.printStackTrace(); } + } + return false; + } } diff --git a/src/services/chat/ChatService.java b/src/services/chat/ChatService.java index fd941cd3..0a68ab4c 100644 --- a/src/services/chat/ChatService.java +++ b/src/services/chat/ChatService.java @@ -339,8 +339,7 @@ public class ChatService implements INetworkDispatch { ConcurrentHashMap clients = core.getActiveConnectionsMap(); for(Client client : clients.values()) { - - + if(client.getParent() == null) continue; @@ -360,128 +359,113 @@ public class ChatService implements INetworkDispatch { } public void removeFriend(PlayerObject actor, String friendName) { + CreatureObject creature = (CreatureObject) actor.getContainer(); + friendName = friendName.split(" ")[0].toLowerCase(); - friendName = friendName.toLowerCase(); - - //SWGObject friendObject = getObjectByFirstName(friendName); - - if (actor == null || actor.getContainer() == null) + if (actor == null || creature == null || friendName.equals("")) return; - List friendList = actor.getFriendList(); - - if(friendList.contains(friendName)) { - - actor.friendRemove(friendName); - - ChatOnChangeFriendStatus removeMessage = new ChatOnChangeFriendStatus(actor.getContainer().getObjectID(), friendName, 0); - actor.getContainer().getClient().getSession().write(removeMessage.serialize()); - - ChatOnGetFriendsList sendFriendsList = new ChatOnGetFriendsList(actor); - actor.getContainer().getClient().getSession().write(sendFriendsList.serialize()); - + if(actor.getFriendList().contains(friendName)) { + ChatOnChangeFriendStatus removeMessage = new ChatOnChangeFriendStatus(actor.getContainer().getObjectID(), friendName, 0); + creature.getClient().getSession().write(removeMessage.serialize()); + + actor.friendRemove(friendName); + } else { + creature.sendSystemMessage(friendName + " is not a valid friend name.", (byte) 0); } } - public void addFriend(PlayerObject actor, String friendName, boolean notify) { - // ChatOnAddFriend, ChatOnChangeFriendStatus, ChatFriendsListUpdate, ChatSystemMessage, ChatOnGetFriendsList - SWGObject friendObject = getObjectByFirstName(friendName); + public void addFriend(PlayerObject actor, String friend) { + CreatureObject creature = (CreatureObject) actor.getContainer(); - PlayerObject friend = (PlayerObject) friendObject.getSlottedObject("ghost"); - CreatureObject friendCreature = (CreatureObject) friend.getContainer(); - List friendList = actor.getFriendList(); - - if (actor == null || friendObject.getSlottedObject("ghost") == null) + if (actor == null || creature == null || friend.equals("")) return; - CreatureObject actorCreature = (CreatureObject) actor.getContainer(); - if (actorCreature == null) - return; + friend = friend.toLowerCase(); - boolean friendIsOnline = friendObject.isInQuadtree(); - - String friendShortName = friendCreature.getCustomName().toLowerCase(); - - if (friendCreature.getCustomName().contains(" ")) { - String[] splitName = friendCreature.getCustomName().toLowerCase().split(" "); - friendShortName = splitName[0]; + if (friend.contains(" ")) { + friend = friend.split(" ")[0]; } - if (friendList.contains(friendShortName)) { - actorCreature.sendSystemMessage(friendShortName + " is already on your friends list.", (byte) 0); - return; - } - - - - if (notify) { - ChatOnAddFriend init = new ChatOnAddFriend(); - actorCreature.getClient().getSession().write(init.serialize()); + if(core.characterService.playerExists(friend)) { - ChatOnChangeFriendStatus addMessage = new ChatOnChangeFriendStatus(actorCreature.getObjectID(), friendShortName, 1); - actorCreature.getClient().getSession().write(addMessage.serialize()); - - if(friendIsOnline) { - ChatFriendsListUpdate updateStatus = new ChatFriendsListUpdate(friendShortName, (byte)1); - actorCreature.getClient().getSession().write(updateStatus.serialize()); + if(actor.getIgnoreList().contains(friend)) { + creature.sendSystemMessage(friend + " is being ignored, unable to put in your friends list.", (byte) 0); } - } + + SWGObject friendObj = getObjectByFirstName(friend); + boolean isOnline = false; + + if (friendObj != null && friendObj.isInQuadtree()) + isOnline = true; + + ChatOnAddFriend init = new ChatOnAddFriend(); + creature.getClient().getSession().write(init.serialize()); - actor.friendAdd(friendShortName); - - if (actor.getFriendList().size() != 0) { - ChatOnGetFriendsList sendFriendsList = new ChatOnGetFriendsList(actor); - actorCreature.getClient().getSession().write(sendFriendsList.serialize()); + ChatOnChangeFriendStatus addFriend = new ChatOnChangeFriendStatus(creature.getObjectId(), friend, 1); + creature.getClient().getSession().write(addFriend.serialize()); + + if (isOnline) { + ChatFriendsListUpdate onlineUpdate = new ChatFriendsListUpdate(friend, (byte) 1); + creature.getClient().getSession().write(onlineUpdate.serialize()); + } + + actor.friendAdd(friend); + creature.sendSystemMessage(friend + " is now your friend.", (byte) 0); + + } else { + creature.sendSystemMessage(friend + " is not a valid friend name.", (byte) 0); } - - actorCreature.sendSystemMessage(friendShortName + " has been added to your friends list.", (byte) 0); - - } public void addToIgnoreList(SWGObject actor, String ignoreName) { + ignoreName = ignoreName.split(" ")[0].toLowerCase(); + if (actor == null) + return; + PlayerObject ghost = (PlayerObject) actor.getSlottedObject("ghost"); CreatureObject creature = (CreatureObject) actor; - List ignoreList = ghost.getIgnoreList(); - if (ignoreList.contains(ignoreName.toLowerCase())) { + if(ghost == null) + return; + + if (ghost.getIgnoreList().contains(ignoreName)) { creature.sendSystemMessage(ignoreName + " is already in your ignore list.", (byte) 0); return; - } else { - // TODO: Do check for valid names to ignore - - AddIgnoreMessage addIgnore = new AddIgnoreMessage(actor, ignoreName.toLowerCase(), true); - actor.getClient().getSession().write(addIgnore.serialize()); - Console.println("Sent the add ignore message!"); - ghost.ignoreAdd(ignoreName.toLowerCase()); - Console.println("Sent the add ignore delta!"); - creature.sendSystemMessage(ignoreName + " is now ignored.", (byte) 0); } + + if(!core.characterService.playerExists(ignoreName)) { + creature.sendSystemMessage(ignoreName + " is not a valid ignore name.", (byte) 0); + return; + } + + AddIgnoreMessage addIgnore = new AddIgnoreMessage(actor, ignoreName, true); + actor.getClient().getSession().write(addIgnore.serialize()); + ghost.ignoreAdd(ignoreName); + + creature.sendSystemMessage(ignoreName + " is now ignored.", (byte) 0); } public void removeFromIgnoreList(SWGObject actor, String ignoreName) { + if (actor == null) + return; + PlayerObject ghost = (PlayerObject) actor.getSlottedObject("ghost"); CreatureObject creature = (CreatureObject) actor; - List ignoreList = ghost.getIgnoreList(); - if (ignoreList.contains(ignoreName.toLowerCase())) { - for (String name : ignoreList) { - if(name.equalsIgnoreCase(ignoreName)) { - //Console.println("Name found!"); - AddIgnoreMessage removeIgnore = new AddIgnoreMessage(actor, ignoreName.toLowerCase(), false); - actor.getClient().getSession().write(removeIgnore.serialize()); - //Console.println("Sent AddIgnoreMessage to remove friend!"); - ghost.ignoreRemove(ignoreName.toLowerCase()); - //Console.println("Sent ignoreRemove delta!"); - creature.sendSystemMessage(ignoreName + " is no longer ignored.", (byte) 0); - - // TODO: Find out why player must click on name twice in list for name to be removed. - break; - } - } - } else { return; } + if (ghost == null || creature == null) + return; + + if (ghost.getIgnoreList().contains(ignoreName)) { + AddIgnoreMessage message = new AddIgnoreMessage(actor, ignoreName, false); + creature.getClient().getSession().write(message.serialize()); + + ghost.ignoreRemove(ignoreName); + + creature.sendSystemMessage(ignoreName + " is no longer ignored.", (byte) 0); + } } public void sendPersistentMessageHeader(Client client, Mail mail) { diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index 6b2c608c..c52fbd3b 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -612,8 +612,8 @@ public class ObjectService implements INetworkDispatch { PlayerObject ghost = (PlayerObject) creature.getSlottedObject("ghost"); - ChatOnGetFriendsList friendsListMessage = new ChatOnGetFriendsList(ghost); - client.getSession().write(friendsListMessage.serialize()); + //ChatOnGetFriendsList friendsListMessage = new ChatOnGetFriendsList(ghost); + //client.getSession().write(friendsListMessage.serialize()); if (ghost != null) { ghost.clearFlagBitmask(PlayerFlags.LD); @@ -626,19 +626,19 @@ public class ObjectService implements INetworkDispatch { core.chatService.playerStatusChange(objectShortName, (byte) 1); - if (ghost.getFriendList().isEmpty() == false) { + if (!ghost.getFriendList().isEmpty()) { + // Find out what friends are online/offline for (String friend : ghost.getFriendList()) { - SWGObject friendObject = (SWGObject) core.chatService.getObjectByFirstName(friend); - if (friendObject == null) - continue; - if(friendObject.isInQuadtree() == true) { + SWGObject friendObject = core.chatService.getObjectByFirstName(friend); + + if(friendObject != null && friendObject.isInQuadtree()) { ChatFriendsListUpdate onlineNotifyStatus = new ChatFriendsListUpdate(friend, (byte) 1); client.getSession().write(onlineNotifyStatus.serialize()); } else { - ChatOnChangeFriendStatus changeStatus = new ChatOnChangeFriendStatus(creature.getObjectID(), friend, 0); - client.getSession().write(changeStatus.serialize()); + ChatFriendsListUpdate onlineNotifyStatus = new ChatFriendsListUpdate(friend, (byte) 0); + client.getSession().write(onlineNotifyStatus.serialize()); } } }