More work for NGE-111, mostly minor fixes

GroupObject
- fixed some formatting issues
- added method to get the CreatureObjects of each GroupMember in the group
- removed mark/unmarkPlayerForLogoff and the TimerTask for them (moved to GroupService instead)

GroupService
- fixed the message sending methods
- GroupService now tracks if players log in and out and removes them as necessary

- still need to make sure the "disband" message is only being sent once, this stems from the leader being in GroupMembers twice
- need to make sure all appropriate messages are being sent to the players, like when leadership changes etc
This commit is contained in:
Skyler Lehan
2016-05-30 13:34:49 -04:00
parent 6f467523a4
commit abc0b640fb
2 changed files with 91 additions and 71 deletions
+18 -51
View File
@@ -41,11 +41,10 @@ import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Serializable;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
public class GroupObject extends SWGObject { // Extends INTO or TANO?
@@ -54,7 +53,6 @@ public class GroupObject extends SWGObject { // Extends INTO or TANO?
private short level;
private long lootMaster;
private int lootRule;
private HashMap<GroupMember, Timer> logoffTimers = new HashMap<>();
private transient PickupPointTimer pickupPointTimer;
@@ -73,7 +71,7 @@ public class GroupObject extends SWGObject { // Extends INTO or TANO?
super.createBaseline6(target, bb); // BASE06 -- 2 variables
bb.addObject(groupMembers); // 2 -- NOTE: First person is the leader
bb.addInt(0); // formationmembers // 3
bb.addInt(0); // updateCount
bb.addInt(0); // updateCount
bb.addAscii(""); // groupName // 4
bb.addShort(level); // 5
bb.addInt(0); // formationNameCrc // 6
@@ -81,9 +79,9 @@ public class GroupObject extends SWGObject { // Extends INTO or TANO?
bb.addInt(lootRule); // 8
bb.addObject(pickupPointTimer); // 9
bb.addAscii(""); // PickupPoint planetName // 10
bb.addFloat(0); // x
bb.addFloat(0); // y
bb.addFloat(0); // z
bb.addFloat(0); // x
bb.addFloat(0); // y
bb.addFloat(0); // z
bb.incrementOperandCount(9);
}
@@ -196,6 +194,19 @@ public class GroupObject extends SWGObject { // Extends INTO or TANO?
return members;
}
public ArrayList<CreatureObject> getGroupMemberObjects() {
ArrayList<CreatureObject> memberObjects = new ArrayList<>();
synchronized (groupMembers) {
for (GroupMember groupMember : groupMembers)
memberObjects.add(groupMember.playerCreo);
}
return memberObjects;
}
private GroupMember getGroupMember(Player player) {
GroupMember foundMember = null;
@@ -211,31 +222,6 @@ public class GroupObject extends SWGObject { // Extends INTO or TANO?
return foundMember;
}
public void markPlayerForLogoff(Player player) {
// Create a timer with the GroupMember player owns as the key
// and a timer set to fire and remove that member as the value
GroupMember loggedMember = this.getGroupMember(player);
Timer timer = new Timer();
LogOffTask task = new LogOffTask(this, player.getCreatureObject());
timer.schedule(task, 240000);
this.logoffTimers.put(loggedMember, timer);
}
public void unmarkPlayerForLogoff(Player player) {
GroupMember loggedMember = this.getGroupMember(player);
if (loggedMember == null)
return;
// Cancel the timer and remove from the list
this.logoffTimers.remove(loggedMember).cancel();
}
public void disbandGroup() {
synchronized (groupMembers) {
@@ -328,23 +314,4 @@ public class GroupObject extends SWGObject { // Extends INTO or TANO?
return result;
}
}
private static class LogOffTask extends TimerTask {
GroupObject taskingGroup;
CreatureObject loggedMember;
public LogOffTask(GroupObject group, CreatureObject member) {
this.taskingGroup = group;
this.loggedMember = member;
}
@Override
public void run() {
this.taskingGroup.removeMember(loggedMember);
}
}
}