diff --git a/src/resources/network/BaselineObject.java b/src/resources/network/BaselineObject.java index 1378b55af..ec8d5d176 100644 --- a/src/resources/network/BaselineObject.java +++ b/src/resources/network/BaselineObject.java @@ -38,6 +38,34 @@ public class BaselineObject implements Serializable { } } + public void parseBaseline(Baseline baseline) { + NetBuffer buffer = NetBuffer.wrap(baseline.getBaselineData()); + buffer.getShort(); + switch (baseline.getNum()) { + case 1: + parseBaseline1(buffer); + break; + case 3: + parseBaseline3(buffer); + break; + case 4: + parseBaseline4(buffer); + break; + case 6: + parseBaseline6(buffer); + break; + case 7: + parseBaseline7(buffer); + break; + case 8: + parseBaseline8(buffer); + break; + case 9: + parseBaseline9(buffer); + break; + } + } + public Baseline createBaseline1(Player target) { return createBaseline(target, 1, (t, bb)->createBaseline1(t, bb)); } @@ -94,6 +122,34 @@ public class BaselineObject implements Serializable { } + protected void parseBaseline1(NetBuffer buffer) { + + } + + protected void parseBaseline3(NetBuffer buffer) { + + } + + protected void parseBaseline4(NetBuffer buffer) { + + } + + protected void parseBaseline6(NetBuffer buffer) { + + } + + protected void parseBaseline7(NetBuffer buffer) { + + } + + protected void parseBaseline8(NetBuffer buffer) { + + } + + protected void parseBaseline9(NetBuffer buffer) { + + } + public final void sendDelta(int type, int update, Object value) { verifySwgObject(); synchronized (baselineData) { diff --git a/src/resources/objects/SWGObject.java b/src/resources/objects/SWGObject.java index 77591738a..a9a238a8b 100644 --- a/src/resources/objects/SWGObject.java +++ b/src/resources/objects/SWGObject.java @@ -48,11 +48,13 @@ import resources.containers.DefaultPermissions; import resources.encodables.StringId; import resources.network.BaselineBuilder; import resources.network.BaselineObject; +import resources.network.NetBuffer; import resources.objects.building.BuildingObject; import resources.objects.creature.CreatureObject; import resources.player.Player; import resources.server_info.Log; import services.CoreManager; + import java.io.IOException; import java.io.ObjectInputStream; import java.util.ArrayList; @@ -660,17 +662,21 @@ public abstract class SWGObject extends BaselineObject implements Comparable skillMods = new SWGMap<>(4, 3, StringType.ASCII); // TODO: SkillMod structure private SWGMap missionCriticalObjs = new SWGMap<>(4, 13); - private SWGMap abilities = new SWGMap<>(4, 14, StringType.ASCII); - private SWGMap buffs = new SWGMap<>(6, 26); // TODO: Buff structure + private SWGMap abilities = new SWGMap<>(4, 14, StringType.ASCII); + private SWGMap buffs = new SWGMap<>(6, 26); // TODO: Buff structure public CreatureObject(long objectId) { super(objectId, BaselineType.CREO); @@ -709,7 +710,7 @@ public class CreatureObject extends TangibleObject { return attributes.get(2); } - public void addAbility(String abilityName){ abilities.put(abilityName, 1); }//TODO: Figure out what the integer value should be for each ability + public void addAbility(String abilityName){ abilities.put(abilityName, 1L); }//TODO: Figure out what the integer value should be for each ability public void removeAbility(String abilityName) { abilities.remove(abilityName); } @@ -839,6 +840,8 @@ public class CreatureObject extends TangibleObject { public void createBaseline1(Player target, BaselineBuilder bb) { super.createBaseline1(target, bb); // 0 variables + if (getStringId().toString().equals("@obj_n:unknown_object")) + return; bb.addInt(bankBalance); // 0 bb.addInt(cashBalance); // 1 bb.addObject(baseAttributes); // Attributes player has without any gear on -- 2 @@ -849,6 +852,8 @@ public class CreatureObject extends TangibleObject { public void createBaseline3(Player target, BaselineBuilder bb) { super.createBaseline3(target, bb); // 13 variables - TANO3 (9) + BASE3 (4) + if (getStringId().toString().equals("@obj_n:unknown_object")) + return; bb.addByte(posture.getId()); // 13 bb.addByte(factionRank); // 14 bb.addLong(ownerId); // 15 @@ -861,6 +866,8 @@ public class CreatureObject extends TangibleObject { public void createBaseline4(Player target, BaselineBuilder bb) { super.createBaseline4(target, bb); // 0 variables + if (getStringId().toString().equals("@obj_n:unknown_object")) + return; bb.addFloat((float) accelPercent); // 0 bb.addFloat((float) accelScale); // 1 bb.addObject(hamEncumbList); // Rename to bonusAttributes? 2 @@ -883,6 +890,8 @@ public class CreatureObject extends TangibleObject { public void createBaseline6(Player target, BaselineBuilder bb) { super.createBaseline6(target, bb); // 8 variables - TANO6 (6) + BASE6 (2) + if (getStringId().toString().equals("@obj_n:unknown_object")) + return; bb.addShort(level); // 8 bb.addInt(levelHealthGranted); // 9 bb.addAscii(animation); // 10 @@ -914,12 +923,80 @@ public class CreatureObject extends TangibleObject { bb.incrementOperandCount(27); } - public void createBaseline8(Player target, BaselineBuilder bb) { - super.createBaseline8(target, bb); + protected void parseBaseline1(NetBuffer buffer) { + super.parseBaseline1(buffer); + if (getStringId().toString().equals("@obj_n:unknown_object")) + return; + bankBalance = buffer.getInt(); + cashBalance = buffer.getInt(); + baseAttributes = buffer.getSwgList(1, 2, Integer.class); + skills = buffer.getSwgList(1, 2, StringType.ASCII); } - public void createBaseline9(Player target, BaselineBuilder bb) { - super.createBaseline9(target, bb); + protected void parseBaseline3(NetBuffer buffer) { + super.parseBaseline3(buffer); + if (getStringId().toString().equals("@obj_n:unknown_object")) + return; + posture = Posture.getFromId(buffer.getByte()); + factionRank = buffer.getByte(); + ownerId = buffer.getLong(); + height = buffer.getFloat(); + battleFatigue = buffer.getInt(); + statesBitmask = buffer.getLong(); + } + + protected void parseBaseline4(NetBuffer buffer) { + super.parseBaseline4(buffer); + if (getStringId().toString().equals("@obj_n:unknown_object")) + return; + accelPercent = buffer.getFloat(); + hamEncumbList = buffer.getSwgList(4, 2, Integer.class); + skillMods = buffer.getSwgMap(4, 3, StringType.ASCII, SkillMod.class); + movementPercent = buffer.getFloat(); + movementScale = buffer.getFloat(); + performanceListenTarget = buffer.getLong(); + runSpeed = buffer.getFloat(); + slopeModAngle = buffer.getFloat(); + slopeModPercent = buffer.getFloat(); + turnScale = buffer.getFloat(); + walkSpeed = buffer.getFloat(); + waterModPercent = buffer.getFloat(); + missionCriticalObjs = buffer.getSwgMap(4, 13, Long.class, Long.class); + abilities = buffer.getSwgMap(4, 14, StringType.ASCII, Long.class); + totalLevelXp = buffer.getInt(); + } + + protected void parseBaseline6(NetBuffer buffer) { + super.parseBaseline6(buffer); + if (getStringId().toString().equals("@obj_n:unknown_object")) + return; + level = buffer.getShort(); + levelHealthGranted = buffer.getInt(); + animation = buffer.getAscii(); + moodAnimation = buffer.getAscii(); + equippedWeaponId = buffer.getLong(); + groupId = buffer.getLong(); + inviterData = buffer.getEncodable(GroupInviterData.class); + guildId = buffer.getInt(); + lookAtTargetId = buffer.getLong(); + intendedTargetId = buffer.getLong(); + moodId = buffer.getByte(); + performanceCounter = buffer.getInt(); + performanceId = buffer.getInt(); + attributes = buffer.getSwgList(6, 21, Integer.class); + maxAttributes = buffer.getSwgList(6, 22, Integer.class); + equipmentList = buffer.getSwgList(6, 23, Equipment.class); + costume = buffer.getAscii(); + visible = buffer.getBoolean(); + buffs = buffer.getSwgMap(6, 26, Integer.class, Integer.class); + performing = buffer.getBoolean(); + difficulty = CreatureDifficulty.getForDifficulty(buffer.getByte()); + hologramColour = HologramColour.getForValue(buffer.getInt()); + shownOnRadar = buffer.getBoolean(); + beast = buffer.getBoolean(); + buffer.getBoolean(); + appearanceList = buffer.getSwgList(6, 33, Equipment.class); + buffer.getLong(); } } diff --git a/src/resources/objects/guild/GuildObject.java b/src/resources/objects/guild/GuildObject.java new file mode 100644 index 000000000..129bcb737 --- /dev/null +++ b/src/resources/objects/guild/GuildObject.java @@ -0,0 +1,56 @@ +package resources.objects.guild; + +import network.packets.swg.zone.baselines.Baseline.BaselineType; +import resources.collections.SWGMap; +import resources.collections.SWGSet; +import resources.network.BaselineBuilder; +import resources.network.NetBuffer; +import resources.objects.SWGObject; +import resources.player.Player; +import utilities.Encoder.StringType; + +public class GuildObject extends SWGObject { + + private static final long serialVersionUID = 1L; + + private SWGSet abbreviations = new SWGSet(3, 4, StringType.ASCII); + private SWGMap gcwImperialScorePercentileThisGalaxy = new SWGMap<>(6, 2); + private SWGMap gcwGroupImperialScorePercentileThisGalaxy = new SWGMap<>(6, 3); + private SWGMap gcwImperialScorePercentileHistoryThisGalaxy = new SWGMap<>(6, 4); + private SWGMap gcwGroupImperialScorePercentileHistoryThisGalaxy = new SWGMap<>(6, 5); + + public GuildObject(long objectId) { + super(objectId, BaselineType.GILD); + } + + @Override + protected void createBaseline3(Player target, BaselineBuilder bb) { + super.createBaseline3(target, bb); + bb.addObject(abbreviations); + } + + @Override + protected void createBaseline6(Player target, BaselineBuilder bb) { + super.createBaseline6(target, bb); + bb.addObject(gcwImperialScorePercentileThisGalaxy); + bb.addObject(gcwGroupImperialScorePercentileThisGalaxy); + bb.addObject(gcwImperialScorePercentileHistoryThisGalaxy); + bb.addObject(gcwGroupImperialScorePercentileHistoryThisGalaxy); + } + + @Override + protected void parseBaseline3(NetBuffer buffer) { + super.parseBaseline3(buffer); + abbreviations = buffer.getSwgSet(3, 5, StringType.ASCII); + } + + @Override + protected void parseBaseline6(NetBuffer buffer) { + super.parseBaseline6(buffer); + gcwImperialScorePercentileThisGalaxy = buffer.getSwgMap(6, 2, StringType.ASCII, Integer.class, true); + gcwGroupImperialScorePercentileThisGalaxy = buffer.getSwgMap(6, 3, StringType.ASCII, Integer.class, true); + gcwImperialScorePercentileHistoryThisGalaxy = buffer.getSwgMap(6, 4, StringType.ASCII, Long.class, true); + gcwGroupImperialScorePercentileHistoryThisGalaxy = buffer.getSwgMap(6, 5, StringType.ASCII, Long.class, true); + } + +} diff --git a/src/resources/objects/intangible/IntangibleObject.java b/src/resources/objects/intangible/IntangibleObject.java index 244ddd3ca..6108518c1 100644 --- a/src/resources/objects/intangible/IntangibleObject.java +++ b/src/resources/objects/intangible/IntangibleObject.java @@ -29,6 +29,7 @@ package resources.objects.intangible; import network.packets.swg.zone.baselines.Baseline.BaselineType; import resources.network.BaselineBuilder; +import resources.network.NetBuffer; import resources.objects.SWGObject; import resources.player.Player; @@ -54,15 +55,16 @@ public class IntangibleObject extends SWGObject { this.count = count; } - public void createBaseline3(Player target, BaselineBuilder bb) { + protected void createBaseline3(Player target, BaselineBuilder bb) { super.createBaseline3(target, bb); // 4 variables bb.addInt(count); // 4 bb.incrementOperandCount(1); } - public void createBaseline6(Player target, BaselineBuilder bb) { - super.createBaseline6(target, bb); // 2 variables + protected void parseBaseline3(NetBuffer buffer) { + super.parseBaseline3(buffer); + count = buffer.getInt(); } @Override diff --git a/src/resources/objects/tangible/TangibleObject.java b/src/resources/objects/tangible/TangibleObject.java index dfc4c4ef1..07fcb96dd 100644 --- a/src/resources/objects/tangible/TangibleObject.java +++ b/src/resources/objects/tangible/TangibleObject.java @@ -37,8 +37,10 @@ import resources.PvpFaction; import resources.PvpFlag; import resources.PvpStatus; import resources.network.BaselineBuilder; +import resources.network.NetBuffer; import resources.objects.SWGObject; import resources.player.Player; +import utilities.Encoder.StringType; public class TangibleObject extends SWGObject { @@ -228,8 +230,10 @@ public class TangibleObject extends SWGObject { return super.hashCode(); } - public void createBaseline3(Player target, BaselineBuilder bb) { + protected void createBaseline3(Player target, BaselineBuilder bb) { super.createBaseline3(target, bb); // 4 variables - BASE3 (4) + if (getStringId().toString().equals("@obj_n:unknown_object")) + return; bb.addInt(pvpFaction.getCrc()); // Faction - 4 bb.addInt(pvpStatus.getValue()); // Faction Status - 5 bb.addArray(appearanceData); // - 6 @@ -244,22 +248,51 @@ public class TangibleObject extends SWGObject { bb.incrementOperandCount(9); } - public void createBaseline6(Player target, BaselineBuilder bb) { + protected void createBaseline6(Player target, BaselineBuilder bb) { super.createBaseline6(target, bb); - bb.addBoolean(false); // Combat flag - bb.addInt(0); // Defenders List (Set, Long) + if (getStringId().toString().equals("@obj_n:unknown_object")) + return; + bb.addBoolean(inCombat); // 2 - Combat flag + bb.addInt(0); // 3 - Defenders List (Set, Long) bb.addInt(0); - bb.addInt(0); // Map color - bb.addInt(0); // Access List + bb.addInt(0); // 4 - Map color + bb.addInt(0); // 5 - Access List bb.addInt(0); - bb.addInt(0); // Guild Access Set + bb.addInt(0); // 6 - Guild Access Set bb.addInt(0); - bb.addInt(0); // Effects Map + bb.addInt(0); // 7 - Effects Map bb.addInt(0); bb.incrementOperandCount(6); } + protected void parseBaseline3(NetBuffer buffer) { + super.parseBaseline3(buffer); + if (getStringId().toString().equals("@obj_n:unknown_object")) + return; + pvpFaction = PvpFaction.getFactionForCrc(buffer.getInt()); + pvpStatus = PvpStatus.getStatusForValue(buffer.getInt()); + appearanceData = buffer.getArray(); + buffer.getSwgSet(3, 7, Integer.TYPE); + optionFlags = buffer.getInt(); + buffer.getInt(); + condition = buffer.getInt(); + buffer.getInt(); + buffer.getBoolean(); + } + + protected void parseBaseline6(NetBuffer buffer) { + super.parseBaseline6(buffer); + if (getStringId().toString().equals("@obj_n:unknown_object")) + return; + inCombat = buffer.getBoolean(); + buffer.getSwgSet(6, 3, Long.TYPE); + buffer.getInt(); + buffer.getSwgSet(6, 5, StringType.ASCII.getClass()); + buffer.getSwgSet(6, 6, StringType.ASCII.getClass()); + buffer.getSwgMap(6, 7, StringType.ASCII.getClass(), StringType.ASCII.getClass()); + } + @Override protected void sendBaselines(Player target) { super.sendBaselines(target);