From 337ccd4b3733648fbfb090ee6908f0f2bbb39604 Mon Sep 17 00:00:00 2001 From: Skyler Lehan Date: Thu, 2 Jun 2016 17:33:13 -0400 Subject: [PATCH] Fixed a few bugs in regards to the automatic logout group removal and fixed some duplicate messages being sent. --- src/resources/objects/group/GroupObject.java | 6 +- src/services/group/GroupService.java | 94 ++++++++------------ 2 files changed, 42 insertions(+), 58 deletions(-) diff --git a/src/resources/objects/group/GroupObject.java b/src/resources/objects/group/GroupObject.java index 08f34f99c..4ce6f22f4 100644 --- a/src/resources/objects/group/GroupObject.java +++ b/src/resources/objects/group/GroupObject.java @@ -131,10 +131,14 @@ public class GroupObject extends SWGObject { // Extends INTO or TANO? removeCustomAware(object); } - public long getLeader() { + public long getLeaderID() { return leader; } + public Player getLeaderPlayer() { + return this.groupMembers.get(0).playerCreo.getOwner(); + } + public void setLeader(CreatureObject object) { this.leader = object.getObjectId(); diff --git a/src/services/group/GroupService.java b/src/services/group/GroupService.java index 65714e22a..1dded8755 100644 --- a/src/services/group/GroupService.java +++ b/src/services/group/GroupService.java @@ -130,9 +130,6 @@ public class GroupService extends Service { private void handleMemberRezoned(Player player) { - if (player == null) - return; - CreatureObject creatureObject = player.getCreatureObject(); long groupId = creatureObject.getGroupId(); @@ -148,7 +145,7 @@ public class GroupService extends Service { } // Tell group to remove that player from the log off timer - unmarkPlayerForLogoff(player); + unmarkPlayerForLogoff(creatureObject); groupObject.updateMember(creatureObject); } @@ -184,10 +181,8 @@ public class GroupService extends Service { this.logoffTimers.put(playerCreo, timer); } - public void unmarkPlayerForLogoff(Player player) { - - CreatureObject playerCreo = player.getCreatureObject(); - + public void unmarkPlayerForLogoff(CreatureObject playerCreo) { + if (playerCreo.getGroupId() == 0) return; @@ -204,48 +199,43 @@ public class GroupService extends Service { if (group == null) return; - if (group.getLeader() != creo.getObjectId()) { + if (group.getLeaderID() != creo.getObjectId()) { sendSystemMessage(player, "must_be_leader"); return; } - - // Disband Group - if (target == null) { - destroyGroup(group, player); - } else { - // Kick player - group.removeMember(target); - - sendGroupSystemMessage(group, "other_left_prose", "TU", target.getObjectId()); - sendSystemMessage(target.getOwner(), "removed"); - - // TODO: Leave group chat room - } + + destroyGroup(group, player); } private void handleGroupLeave(Player player) { CreatureObject creo = player.getCreatureObject(); - if (creo == null) - return; + this.removePlayerFromGroup(creo); + } + + private void removePlayerFromGroup(CreatureObject playerCreo) { - GroupObject group = getGroup(creo.getGroupId()); + GroupObject group = getGroup(playerCreo.getGroupId()); if (group == null) return; + // If the player is not online, manually send the message (normally the client does this if they're online) + if (playerCreo.getOwner() == null) + sendGroupSystemMessage(group, "other_left_prose", "TU", playerCreo.getName()); + + if (playerCreo.getOwner() != null) + sendSystemMessage(playerCreo.getOwner(), "removed"); + // Check size of the group, if it only has two members, destroy the group if (group.getGroupMembers().size() == 2) { - destroyGroup(group, player); + destroyGroup(group, group.getLeaderPlayer()); return; } - - // Otherwise, remove player - sendGroupSystemMessage(group, "other_left_prose", "TU", creo.getObjectId()); - sendSystemMessage(creo.getOwner(), "removed"); - group.removeMember(creo); - } + group.removeMember(playerCreo); + } + private void handleGroupInvite(Player player, CreatureObject target) { CreatureObject playerCreo = player.getCreatureObject(); @@ -265,7 +255,7 @@ public class GroupService extends Service { if (groupId != 0) { GroupObject group = getGroup(groupId); - if (group.getLeader() != inviterId) { + if (group.getLeaderID() != inviterId) { sendSystemMessage(player, "must_be_leader"); return; } @@ -381,7 +371,7 @@ public class GroupService extends Service { // Group already exists group = getGroup(senderCreo.getGroupId()); - if (group.getLeader() != sender.getCreatureObject().getObjectId()) { + if (group.getLeaderID() != sender.getCreatureObject().getObjectId()) { sendSystemMessage(player, "join_inviter_not_leader", sender.getCreatureObject().getObjectId()); creo.updateGroupInviteData(null, 0, ""); return; @@ -412,9 +402,6 @@ public class GroupService extends Service { } private void handleMakeLeader(Player currentLeader, CreatureObject newLeader) { - - if (newLeader == null || currentLeader == null) - return; CreatureObject currentLeaderCreo = currentLeader.getCreatureObject(); GroupObject group = getGroup(newLeader.getGroupId()); @@ -422,12 +409,12 @@ public class GroupService extends Service { if (group == null) return; - if (group.getLeader() != currentLeaderCreo.getObjectId()) { + if (group.getLeaderID() != currentLeaderCreo.getObjectId()) { sendSystemMessage(currentLeader, "must_be_leader"); return; } - if (group.getLeader() == newLeader.getObjectId()) + if (group.getLeaderID() == newLeader.getObjectId()) return; // Set the group leader to newLeader @@ -447,7 +434,7 @@ public class GroupService extends Service { GroupObject group = getGroup(playerCreo.getGroupId()); - if (group.getLeader() != playerCreo.getObjectId()) { + if (group.getLeaderID() != playerCreo.getObjectId()) { int lootRule = group.getLootRule(); } @@ -473,29 +460,18 @@ public class GroupService extends Service { } private void handleKick(Player leader, CreatureObject kickedCreo) { - if (!basicChecks(leader, kickedCreo)) - return; - GroupObject group = getGroup(kickedCreo.getGroupId()); if (group == null) return; // Make sure leader is truly the leader - if (group.getLeader() != leader.getCreatureObject().getObjectId()) { + if (group.getLeaderID() != leader.getCreatureObject().getObjectId()) { sendSystemMessage(leader, "must_be_leader"); return; } - // If the group size is 2, disband instead - if (group.getGroupMembers().size() == 2) { - destroyGroup(group, leader); - return; - } - - // Otherwise kick the member - group.removeMember(kickedCreo); - sendSystemMessage(kickedCreo.getOwner(), "removed"); + this.removePlayerFromGroup(kickedCreo); } private void destroyGroup(GroupObject group, Player player) { @@ -534,8 +510,10 @@ public class GroupService extends Service { HashSet members = group.getGroupMemberObjects(); - for (CreatureObject member : members) - new ChatBroadcastIntent(member.getOwner(), new ProsePackage("group", id)).broadcast(); + for (CreatureObject member : members) { + if (member.getOwner() != null) + new ChatBroadcastIntent(member.getOwner(), new ProsePackage("group", id)).broadcast(); + } } private void sendGroupSystemMessage(GroupObject group, String id, Object ... objects) { @@ -543,7 +521,9 @@ public class GroupService extends Service { HashSet members = group.getGroupMemberObjects(); for (CreatureObject member : members) { - IntentFactory.sendSystemMessage(member.getOwner(), "@group:" + id, objects); + // If there is no owner, (probably logged off), do not send the message + if (member.getOwner() != null) + IntentFactory.sendSystemMessage(member.getOwner(), "@group:" + id, objects); } } @@ -589,7 +569,7 @@ public class GroupService extends Service { @Override public void run() { - this.taskingGroupService.handleGroupLeave(loggedMember.getOwner()); + this.taskingGroupService.removePlayerFromGroup(loggedMember); this.taskingGroupService.removeTimer(loggedMember); } }