mirror of
https://github.com/ProjectSWGCore/Holocore.git
synced 2026-10-07 22:13:40 -04:00
Added core grouping system for CORE-111 - Groups are now implemented
This commit is contained in:
@@ -27,31 +27,49 @@
|
||||
|
||||
package resources.objects.group;
|
||||
|
||||
import intents.NotifyPlayersPacketIntent;
|
||||
import network.packets.Packet;
|
||||
import network.packets.swg.zone.baselines.Baseline;
|
||||
import resources.collections.SWGMap;
|
||||
import resources.collections.SWGList;
|
||||
import resources.encodables.Encodable;
|
||||
import resources.network.BaselineBuilder;
|
||||
import resources.objects.SWGObject;
|
||||
import resources.objects.creature.CreatureObject;
|
||||
import resources.player.Player;
|
||||
import utilities.Encoder;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class GroupObject extends SWGObject { // Extends INTO or TANO?
|
||||
private static final long serialVersionUID = 200L;
|
||||
|
||||
private SWGMap<Long, String> groupMembers = new SWGMap<>(Baseline.BaselineType.GRUP, 6, 2, Encoder.StringType.ASCII);
|
||||
private final SWGList<GroupMember> groupMembers = new SWGList<>(Baseline.BaselineType.GRUP, 6, 2, Encoder.StringType.ASCII);
|
||||
private long leader;
|
||||
private short level;
|
||||
private long lootMaster;
|
||||
private int lootRule;
|
||||
|
||||
private transient PickupPointTimer pickupPointTimer;
|
||||
|
||||
public GroupObject(long objectId) {
|
||||
super(objectId, Baseline.BaselineType.GRUP);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createBaseline3(Player target, BaselineBuilder bb) {
|
||||
super.createBaseline3(target, bb);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createBaseline6(Player target, BaselineBuilder bb) {
|
||||
super.createBaseline6(target, bb); // BASE06 -- 2 variables
|
||||
bb.addObject(groupMembers); // 2
|
||||
bb.addObject(groupMembers); // 2 -- NOTE: First person is the leader
|
||||
bb.addInt(0); // formationmembers // 3
|
||||
bb.addInt(0); // updateCount
|
||||
bb.addAscii(""); // groupName // 4
|
||||
@@ -59,35 +77,55 @@ public class GroupObject extends SWGObject { // Extends INTO or TANO?
|
||||
bb.addInt(0); // formationNameCrc // 6
|
||||
bb.addLong(lootMaster); // 7
|
||||
bb.addInt(lootRule); // 8
|
||||
bb.addInt(0); // PickupPointTimer startTime // 9
|
||||
bb.addInt(0); // endTime
|
||||
bb.addObject(pickupPointTimer); // 9
|
||||
bb.addAscii(""); // PickupPoint planetName // 10
|
||||
bb.addFloat(0); // x
|
||||
bb.addFloat(0); // y
|
||||
bb.addFloat(0); // z
|
||||
|
||||
bb.incrementOperandCount(9);
|
||||
}
|
||||
|
||||
public void addMember(CreatureObject object) {
|
||||
groupMembers.put(object.getObjectId(), object.getName());
|
||||
groupMembers.add(new GroupMember(object.getObjectId(), object.getName()));
|
||||
|
||||
groupMembers.sendDeltaMessage(this);
|
||||
|
||||
System.out.println("GroupObject: Added member & sent delta:: " + object);
|
||||
awarenessInRange(object);
|
||||
object.setGroupId(getObjectId());
|
||||
|
||||
if (object.getLevel() > level)
|
||||
setLevel((short) object.getLevel());
|
||||
}
|
||||
|
||||
public void removeMember(CreatureObject object) {
|
||||
groupMembers.remove(object.getObjectId());
|
||||
synchronized (groupMembers) {
|
||||
groupMembers.remove(new GroupMember(object.getObjectId(), object.getName()));
|
||||
|
||||
groupMembers.sendDeltaMessage(this);
|
||||
object.setGroupId(0);
|
||||
awarenessOutOfRange(object);
|
||||
|
||||
groupMembers.sendDeltaMessage(this);
|
||||
}
|
||||
}
|
||||
|
||||
public long getLeader() {
|
||||
return leader;
|
||||
}
|
||||
|
||||
public void setLeader(long leader) {
|
||||
this.leader = leader;
|
||||
public void setLeader(CreatureObject object) {
|
||||
this.leader = object.getObjectId();
|
||||
|
||||
GroupMember member = new GroupMember(object.getObjectId(), object.getName());
|
||||
if (groupMembers.size() > 0) {
|
||||
synchronized (groupMembers) {
|
||||
GroupMember previous = groupMembers.set(0, member);
|
||||
groupMembers.add(previous);
|
||||
}
|
||||
} else {
|
||||
groupMembers.add(member);
|
||||
}
|
||||
groupMembers.sendDeltaMessage(this);
|
||||
}
|
||||
|
||||
public short getLevel() {
|
||||
@@ -106,7 +144,96 @@ public class GroupObject extends SWGObject { // Extends INTO or TANO?
|
||||
this.lootMaster = lootMaster;
|
||||
}
|
||||
|
||||
public SWGMap<Long, String> getGroupMembers() {
|
||||
return groupMembers;
|
||||
public int getLootRule() {
|
||||
return lootRule;
|
||||
}
|
||||
|
||||
public void setLootRule(int lootRule) {
|
||||
this.lootRule = lootRule;
|
||||
sendDelta(6, 8, lootRule);
|
||||
}
|
||||
|
||||
public Map<String, Long> getGroupMembers() {
|
||||
Map<String, Long> members = new HashMap<>();
|
||||
|
||||
synchronized (groupMembers) {
|
||||
for (GroupMember groupMember : groupMembers) {
|
||||
members.put(groupMember.getName(), groupMember.getId());
|
||||
}
|
||||
}
|
||||
|
||||
return members;
|
||||
}
|
||||
|
||||
private static class PickupPointTimer implements Serializable, Encodable {
|
||||
public int start;
|
||||
public int end;
|
||||
|
||||
@Override
|
||||
public byte[] encode() {
|
||||
return ByteBuffer.allocate(8).putInt(start).putInt(end).array();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void decode(ByteBuffer data) {
|
||||
start = Packet.getInt(data);
|
||||
end = Packet.getInt(data);
|
||||
}
|
||||
|
||||
public int decrement() {
|
||||
return --end;
|
||||
}
|
||||
}
|
||||
|
||||
private static class GroupMember implements Serializable, Encodable {
|
||||
private long id;
|
||||
private String name;
|
||||
|
||||
public GroupMember(long id, String name) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] encode() {
|
||||
ByteBuffer bb = ByteBuffer.allocate(10 + name.length());
|
||||
Packet.addLong(bb, id);
|
||||
Packet.addAscii(bb, name);
|
||||
return bb.array();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void decode(ByteBuffer data) {
|
||||
id = Packet.getLong(data);
|
||||
name = Packet.getAscii(data);
|
||||
}
|
||||
|
||||
public long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o)
|
||||
return true;
|
||||
if (o == null || getClass() != o.getClass())
|
||||
return false;
|
||||
|
||||
GroupMember that = (GroupMember) o;
|
||||
|
||||
return id == that.id && name.equals(that.name);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = (int) (id ^ (id >>> 32));
|
||||
result = 31 * result + name.hashCode();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user