diff --git a/src/resources/objects/SWGObject.java b/src/resources/objects/SWGObject.java index 1a5052cbe..ed5c74ace 100644 --- a/src/resources/objects/SWGObject.java +++ b/src/resources/objects/SWGObject.java @@ -31,7 +31,6 @@ import java.io.IOException; import java.io.ObjectInputStream; import java.io.Serializable; import java.util.*; -import java.util.List; import network.packets.Packet; import network.packets.swg.zone.SceneCreateObjectByCrc; @@ -53,7 +52,7 @@ import resources.player.PlayerState; import resources.server_info.Log; import utilities.Encoder.StringType; -public class SWGObject implements Serializable, Comparable { +public abstract class SWGObject implements Serializable, Comparable { private static final long serialVersionUID = 1L; @@ -64,6 +63,7 @@ public class SWGObject implements Serializable, Comparable { private final Map attributes; private final Map templateAttributes; private final ContainerPermissions containerPermissions; + private final BaselineType objectType; private transient List objectsAware; private List > arrangement; @@ -83,10 +83,10 @@ public class SWGObject implements Serializable, Comparable { private int transformCounter = 0; public SWGObject() { - this(0); + this(0, null); } - public SWGObject(long objectId) { + public SWGObject(long objectId, BaselineType objectType) { this.objectId = objectId; this.location = new Location(); this.objectsAware = new Vector(); @@ -95,6 +95,7 @@ public class SWGObject implements Serializable, Comparable { this.attributes = new LinkedHashMap(); this.templateAttributes = new HashMap(); this.containerPermissions = new ContainerPermissions(objectId); + this.objectType = objectType; } private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException { @@ -468,13 +469,13 @@ public class SWGObject implements Serializable, Comparable { target.sendPacket(destroy); } - protected void createObject(Player target) { - Log.i("ContainerPermissions", "Sending baselines for %s with owner %s to %s", this, this.getOwner(), target); + public void createObject(Player target) { sendSceneCreateObject(target); + sendBaselines(target); createChildrenObjects(target); target.sendPacket(new SceneEndBaselines(getObjectId())); } - + public void clearAware() { SWGObject [] objects; synchronized (objectsAware) { @@ -551,6 +552,28 @@ public class SWGObject implements Serializable, Comparable { if (owner != null) owner.sendPacket(packets); } + + protected void sendBaselines(Player target) { + if (objectType == null) + return; + BaselineBuilder bb = new BaselineBuilder(this, objectType, 3); + createBaseline3(target, bb); + bb.sendTo(target); + + bb = new BaselineBuilder(this, objectType, 6); + createBaseline6(target, bb); + bb.sendTo(target); + + if (getOwner() == target) { + bb = new BaselineBuilder(this, objectType, 8); + createBaseline8(target, bb); + bb.sendTo(target); + + bb = new BaselineBuilder(this, objectType, 9); + createBaseline9(target, bb); + bb.sendTo(target); + } + } private void sendUpdatedContainment(List oldObservers, List newObservers) { List same = new ArrayList<>(oldObservers); @@ -635,7 +658,7 @@ public class SWGObject implements Serializable, Comparable { protected void createChildrenObjects(Player target) { if (!hasPermission(target.getCreatureObject(), ContainerPermissions.Permission.OPEN)) { - // System.out.println(target.getCreatureObject() + " doesn't have permission to view " + this + " -- skipping packet sending"); + Log.w("SWGObject", target.getCreatureObject() + " doesn't have permission to view " + this + " -- skipping packet sending"); return; } @@ -650,7 +673,8 @@ public class SWGObject implements Serializable, Comparable { // Now create the contained objects for (SWGObject containedObject : containedObjects.values()) { if (containedObject != null) { - // System.out.println("Sending containedObj " + containedObject + " to " + target); + //Log.d("SWGObject", "Sending containedObj " + containedObject + " to " + target); + Log.d("SWGObject", "Sending to location " + containedObject.getLocation()); containedObject.createObject(target); } } diff --git a/src/resources/objects/building/BuildingObject.java b/src/resources/objects/building/BuildingObject.java index b9209eef0..bab13ebbd 100644 --- a/src/resources/objects/building/BuildingObject.java +++ b/src/resources/objects/building/BuildingObject.java @@ -27,6 +27,7 @@ ***********************************************************************************/ package resources.objects.building; +import network.packets.swg.zone.baselines.Baseline.BaselineType; import resources.objects.tangible.TangibleObject; public class BuildingObject extends TangibleObject { @@ -34,7 +35,7 @@ public class BuildingObject extends TangibleObject { private static final long serialVersionUID = 1L; public BuildingObject(long objectId) { - super(objectId); + super(objectId, BaselineType.BUIO); } } diff --git a/src/resources/objects/buildouts/BuildoutArea.java b/src/resources/objects/buildouts/BuildoutArea.java new file mode 100644 index 000000000..c7f2257b5 --- /dev/null +++ b/src/resources/objects/buildouts/BuildoutArea.java @@ -0,0 +1,210 @@ +package resources.objects.buildouts; + +public class BuildoutArea { + + // Datatable Information + private String name; + private float x1; + private float z1; + private float x2; + private float z2; + private boolean useClipRect; + private float clipRectX1; + private float clipRectZ1; + private float clipRectX2; + private float clipRectZ2; + private int envFlags; + private int envFlagsExclude; + private boolean useOrigin; + private float originX; + private float originZ; + private float compositeX1; + private float compositeZ1; + private float compositeX2; + private float compositeZ2; + private String compositeName; + private boolean isolated; + private boolean allowMap; + private boolean internal; + private boolean allowRadarTerrain; + private String eventRequired; + // Calculated + private int index; + // Used to calculate rows + private long currentBuilding; + private long currentCell; + private long buildingObjectId; + private long objectIdBase; + + public void load(Object [] datatableRow, int sceneNumber, int areaNumber) { + name = (String) datatableRow[0]; + x1 = (Float) datatableRow[1]; + z1 = (Float) datatableRow[2]; + x2 = (Float) datatableRow[3]; + z2 = (Float) datatableRow[4]; + useClipRect = (Boolean) datatableRow[5]; + clipRectX1 = (Float) datatableRow[6]; + clipRectZ1 = (Float) datatableRow[7]; + clipRectX2 = (Float) datatableRow[8]; + clipRectZ2 = (Float) datatableRow[9]; + envFlags = (Integer) datatableRow[10]; + envFlagsExclude = (Integer) datatableRow[11]; + useOrigin = (Boolean) datatableRow[12]; + originX = (Float) datatableRow[13]; + originZ = (Float) datatableRow[14]; + compositeX1 = (Float) datatableRow[15]; + compositeZ1 = (Float) datatableRow[16]; + compositeX2 = (Float) datatableRow[17]; + compositeZ2 = (Float) datatableRow[18]; + compositeName = (String) datatableRow[19]; + isolated = (Boolean) datatableRow[20]; + allowMap = (Boolean) datatableRow[21]; + internal = (Boolean) datatableRow[22]; + allowRadarTerrain = (Boolean) datatableRow[23]; + eventRequired = (String) datatableRow[24]; + calculate(sceneNumber, areaNumber); + } + + private void calculate(int sceneNumber, int areaNumber) { + index = sceneNumber * 100 + areaNumber; + buildingObjectId = -(index + 1) * 30000; + objectIdBase = buildingObjectId + 2000; + } + + public void setCurrentBuilding(long currentBuilding) { + this.currentBuilding = currentBuilding; + } + + public void setCurrentCell(long currentCell) { + this.currentCell = currentCell; + } + + public void setBuildingObjectId(long buildingObjectId) { + this.buildingObjectId = buildingObjectId; + } + + public void setObjectIdBase(long objectIdBase) { + this.objectIdBase = objectIdBase; + } + + public String getName() { + return name; + } + + public float getX1() { + return x1; + } + + public float getZ1() { + return z1; + } + + public float getX2() { + return x2; + } + + public float getZ2() { + return z2; + } + + public boolean isUseClipRect() { + return useClipRect; + } + + public float getClipRectX1() { + return clipRectX1; + } + + public float getClipRectZ1() { + return clipRectZ1; + } + + public float getClipRectX2() { + return clipRectX2; + } + + public float getClipRectZ2() { + return clipRectZ2; + } + + public int getEnvFlags() { + return envFlags; + } + + public int getEnvFlagsExclude() { + return envFlagsExclude; + } + + public boolean isUseOrigin() { + return useOrigin; + } + + public float getOriginX() { + return originX; + } + + public float getOriginZ() { + return originZ; + } + + public float getCompositeX1() { + return compositeX1; + } + + public float getCompositeZ1() { + return compositeZ1; + } + + public float getCompositeX2() { + return compositeX2; + } + + public float getCompositeZ2() { + return compositeZ2; + } + + public String getCompositeName() { + return compositeName; + } + + public boolean isIsolated() { + return isolated; + } + + public boolean isAllowMap() { + return allowMap; + } + + public boolean isInternal() { + return internal; + } + + public boolean isAllowRadarTerrain() { + return allowRadarTerrain; + } + + public String getEventRequired() { + return eventRequired; + } + + public int getIndex() { + return index; + } + + public long getCurrentBuilding() { + return currentBuilding; + } + + public long getCurrentCell() { + return currentCell; + } + + public long getBuildingObjectId() { + return buildingObjectId; + } + + public long getObjectIdBase() { + return objectIdBase; + } + +} diff --git a/src/resources/objects/buildouts/BuildoutLoader.java b/src/resources/objects/buildouts/BuildoutLoader.java index 5c939c817..d4228b6aa 100644 --- a/src/resources/objects/buildouts/BuildoutLoader.java +++ b/src/resources/objects/buildouts/BuildoutLoader.java @@ -29,12 +29,14 @@ package resources.objects.buildouts; import java.util.LinkedList; import java.util.List; +import java.util.Locale; import resources.Terrain; import resources.client_info.ClientFactory; import resources.client_info.visitors.CrcStringTableData; import resources.client_info.visitors.DatatableData; import resources.objects.SWGObject; +import resources.server_info.Log; public class BuildoutLoader { @@ -49,9 +51,17 @@ public class BuildoutLoader { } public static List loadBuildoutsForTerrain(Terrain terrain) { - TerrainBuildoutLoader loader = new TerrainBuildoutLoader(clientFactory, crcTable, terrain); - loader.load(); - return loader.getObjects(); + DatatableData table = (DatatableData) clientFactory.getInfoFromFile("datatables/buildout/buildout_scenes.iff"); + for (int row = 0; row < table.getRowCount(); row++) { + if (table.getCell(row, 0).equals(terrain.name().toLowerCase(Locale.ENGLISH))) { + TerrainBuildoutLoader loader = new TerrainBuildoutLoader(clientFactory, crcTable, terrain); + loader.load(row); + return loader.getObjects(); + } + } + System.err.println("Could not find buildouts for terrain: " + terrain); + Log.e("BuildoutLoader", "Could not find buildouts for terrain: %s", terrain); + return new LinkedList<>(); } private static List getTerrainsToLoad() { diff --git a/src/resources/objects/buildouts/BuildoutRow.java b/src/resources/objects/buildouts/BuildoutRow.java new file mode 100644 index 000000000..696bbf055 --- /dev/null +++ b/src/resources/objects/buildouts/BuildoutRow.java @@ -0,0 +1,128 @@ +package resources.objects.buildouts; + +import resources.Location; +import resources.client_info.visitors.CrcStringTableData; +import resources.common.CRC; + +public class BuildoutRow { + + private static final int cellCrc = CRC.getCrc("object/cell/shared_cell.iff"); + + private final BuildoutArea buildoutArea; + private final Location location = new Location(); + private long objectId; + private long containerId; + private int type; + private int sharedTemplateCrc; + private int cellIndex; + private float radius; + private int portalLayoutCrc; + private String template; + + public BuildoutRow(BuildoutArea buildoutArea) { + this.buildoutArea = buildoutArea; + } + + public void load(Object [] datatableRow, CrcStringTableData crcString) { + if (datatableRow.length == 11) + loadSmall(datatableRow, crcString); + else if (datatableRow.length == 14) + loadLarge(datatableRow, crcString); + else + throw new IllegalArgumentException("Datatable row must be either 11 or 14 columns!"); + translateLocation(); + } + + private void loadSmall(Object [] datatableRow, CrcStringTableData crcString) { + loadEndColumns(datatableRow, crcString, 0); + if (portalLayoutCrc != 0) { // is building + objectId = buildoutArea.getBuildingObjectId(); + buildoutArea.setBuildingObjectId(buildoutArea.getBuildingObjectId() + 1); + buildoutArea.setCurrentBuilding(objectId); + containerId = 0; + } else if (sharedTemplateCrc == cellCrc) { + objectId = buildoutArea.getBuildingObjectId(); + buildoutArea.setBuildingObjectId(buildoutArea.getBuildingObjectId() + 1); + buildoutArea.setCurrentCell(objectId); + containerId = buildoutArea.getCurrentBuilding(); + } else if (cellIndex > 0) { // is in cell + objectId = buildoutArea.getObjectIdBase(); + buildoutArea.setObjectIdBase(buildoutArea.getObjectIdBase() + 1); + containerId = buildoutArea.getCurrentCell(); + } else { // is somewhere else + objectId = buildoutArea.getObjectIdBase(); + buildoutArea.setObjectIdBase(buildoutArea.getObjectIdBase() + 1); + containerId = 0; + } + } + + private void loadLarge(Object [] datatableRow, CrcStringTableData crcString) { + objectId = ((Number) datatableRow[0]).longValue(); + containerId = ((Number) datatableRow[1]).longValue(); + type = (Integer) datatableRow[2]; + loadEndColumns(datatableRow, crcString, 3); + long indexShifted = ((long) buildoutArea.getIndex() + 1) << 48; + if (objectId < 0) + objectId ^= indexShifted; + if (containerId < 0) + containerId ^= indexShifted; + } + + private void loadEndColumns(Object [] datatableRow, CrcStringTableData crcString, int offset) { + sharedTemplateCrc = (Integer) datatableRow[offset + 0]; + cellIndex = (Integer) datatableRow[offset + 1]; + location.setX((Float) datatableRow[offset + 2]); + location.setY((Float) datatableRow[offset + 3]); + location.setZ((Float) datatableRow[offset + 4]); + location.setOrientationW((Float) datatableRow[offset + 5]); + location.setOrientationX((Float) datatableRow[offset + 6]); + location.setOrientationY((Float) datatableRow[offset + 7]); + location.setOrientationZ((Float) datatableRow[offset + 8]); + radius = (Float) datatableRow[offset + 9]; + portalLayoutCrc = (Integer) datatableRow[offset + 10]; + template = crcString.getTemplateString(sharedTemplateCrc); + } + + private void translateLocation() { + if (cellIndex != 0) + return; + location.translatePosition(buildoutArea.getX1(), 0, buildoutArea.getZ1()); + } + + public Location getLocation() { + return location; + } + + public long getObjectId() { + return objectId; + } + + public long getContainerId() { + return containerId; + } + + public int getType() { + return type; + } + + public int getSharedTemplateCrc() { + return sharedTemplateCrc; + } + + public int getCellIndex() { + return cellIndex; + } + + public float getRadius() { + return radius; + } + + public int getPortalLayoutCrc() { + return portalLayoutCrc; + } + + public String getTemplate() { + return template; + } + +} diff --git a/src/resources/objects/buildouts/TerrainBuildoutLoader.java b/src/resources/objects/buildouts/TerrainBuildoutLoader.java index 4bd383af1..722683437 100644 --- a/src/resources/objects/buildouts/TerrainBuildoutLoader.java +++ b/src/resources/objects/buildouts/TerrainBuildoutLoader.java @@ -27,13 +27,10 @@ ***********************************************************************************/ package resources.objects.buildouts; -import java.util.HashMap; import java.util.Hashtable; -import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import resources.Location; import resources.Terrain; @@ -42,6 +39,7 @@ import resources.client_info.visitors.CrcStringTableData; import resources.client_info.visitors.DatatableData; import resources.objects.SWGObject; import resources.objects.cell.CellObject; +import resources.server_info.Log; import services.objects.ObjectCreator; class TerrainBuildoutLoader { @@ -51,182 +49,84 @@ class TerrainBuildoutLoader { private final ClientFactory clientFactory; private final CrcStringTableData crcTable; private final Terrain terrain; - private final Hashtable objectTable; - private final Map > buildingCells; + private final Map objectTable; private final List objects; - private final List parentless; - private final Location areaLocation; public TerrainBuildoutLoader(ClientFactory clientFactory, CrcStringTableData crcTable, Terrain terrain) { this.clientFactory = clientFactory; this.crcTable = crcTable; this.terrain = terrain; this.objectTable = new Hashtable(12*1024); - this.buildingCells = new HashMap>(); this.objects = new LinkedList(); - this.parentless = new LinkedList(); - this.areaLocation = new Location(0, 0, 0, terrain); } - public void load() { + public void load(int sceneNumber) { objects.clear(); - loadAreas(); + loadAreas(sceneNumber); } public List getObjects() { return objects; } - private void loadAreas() { - objectTable.clear(); + private void loadAreas(int sceneNumber) { + objects.clear(); String file = BASE_PATH+"areas_"+terrain.getName()+".iff"; DatatableData areaTable = (DatatableData) clientFactory.getInfoFromFile(file); for (int row = 0; row < areaTable.getRowCount(); row++) { - String areaName = (String) areaTable.getCell(row, 0); - if (!areaName.startsWith(terrain.getName())) + BuildoutArea area = new BuildoutArea(); + area.load(areaTable.getRow(row), sceneNumber, row); + if (!area.getName().startsWith(terrain.getName())) continue; - areaLocation.setX((Float) areaTable.getCell(row, 1)); - areaLocation.setZ((Float) areaTable.getCell(row, 2)); - loadArea(areaName); + loadArea(area); } - updateParentless(); - finalizeCells(); - objectTable.clear(); } - private void finalizeCells() { - // TODO This will need to be re-looked at since the slot update - for (Entry > entry : buildingCells.entrySet()) { - SWGObject building = objectTable.get(entry.getKey()); - if (building == null) - continue; - List cells = entry.getValue(); - for (CellObject cell : cells) { - building.addObject(cell); + private void loadArea(BuildoutArea area) { + String file = BASE_PATH+terrain.getName()+"/"+area.getName().replace("server", "client")+".iff"; + DatatableData areaTable = (DatatableData) clientFactory.getInfoFromFile(file); + BuildoutRow buildoutRow = new BuildoutRow(area); + for (int row = 0; row < areaTable.getRowCount(); row++) { + buildoutRow.load(areaTable.getRow(row), crcTable); + SWGObject object = createObject(buildoutRow); + addObject(object, buildoutRow.getContainerId()); + setCellInformation(object, buildoutRow.getCellIndex()); + updatePermissions(object); + } + } + + private SWGObject createObject(BuildoutRow row) { + SWGObject object = ObjectCreator.createObjectFromTemplate(row.getObjectId(), row.getTemplate()); + Location l = row.getLocation(); + l.setTerrain(terrain); + object.setLocation(l); + return object; + } + + private void addObject(SWGObject object, long containerId) { + objectTable.put(object.getObjectId(), object); + if (containerId != 0) { + SWGObject container = objectTable.get(containerId); + if (container != null) + container.addObject(object); + else { + Log.e("TerrainBuildoutLoader", "Failed to load object: " + object.getTemplate()); +// objects.add(object); } - cells.clear(); - } - buildingCells.clear(); - } - - private void loadArea(String areaName) { - String file = BASE_PATH+terrain.getName()+"/"+areaName.replaceAll("server", "client")+".iff"; - DatatableData area = (DatatableData) clientFactory.getInfoFromFile(file); - switch (area.getColumnCount()) { - case 11: - loadColumnsSmall(area); - break; - case 14: - loadColumnsLarge(area); - break; - default: - System.err.println("Unable to process iff with " + area.getColumnCount() + " columns. File: " + file); - break; - } - } - - private void loadColumnsLarge(DatatableData area) { - int rows = area.getRowCount(); - for (int row = 0; row < rows; row++) { - Object [] columns = area.getRow(row); - long objectId = (Integer) columns[0]; - String template = crcTable.getTemplateString((Integer) columns[3]); - int container = (Integer) columns[1]; - loadRow(columns, objectId, template, container, 4); - } - } - - private void loadColumnsSmall(DatatableData area) { - int rows = area.getRowCount(); - for (int row = 0; row < rows; row++) { - Object [] columns = area.getRow(row); - int crc = (Integer) columns[0]; - long objectId = ((long) crc) << 32 + 0xFFFF86F9L; - String template = crcTable.getTemplateString(crc); - loadRow(columns, objectId, template, 0, 1); - } - } - - private void loadRow(Object [] columns, long objectId, String template, long container, int cellOffset) { - SWGObject obj = ObjectCreator.createObjectFromTemplate(objectId, template); - if (obj == null) { - System.err.println("Could not load object with template " + template); - return; - } - obj.setLocation(readLocation(columns, cellOffset+1)); - objectTable.put(obj.getObjectId(), obj); - if (obj instanceof CellObject) { - ((CellObject) obj).setNumber((Integer) columns[cellOffset]); - loadCell((CellObject) obj, container); - } else - matchParent(obj, container); - } - - private void loadCell(CellObject cell, long container) { - List cells = buildingCells.get(container); - if (cells == null) { - cells = new LinkedList(); - buildingCells.put(container, cells); - cells.add(cell); - return; - } - int index = 0; - Iterator it = cells.iterator(); - while (it.hasNext() && it.next().getNumber() < cell.getNumber()) { - index++; - } - cells.add(index, cell); - } - - private void matchParent(SWGObject obj, long containerId) { - // TODO This will need to be relooked at since the slot update - if (containerId == 0) { - obj.setLocation(obj.getLocation().translate(areaLocation)); - objects.add(obj); - return; - } - SWGObject container = objectTable.get(containerId); - if (container == null) { - parentless.add(new Orphan(obj, containerId)); } else { - container.addObject(obj); - objects.add(obj); + objects.add(object); } } - private void updateParentless() { - // TODO This will need to be relooked at since the slot update - Iterator orphanIt = parentless.iterator(); - while (orphanIt.hasNext()) { - Orphan orphan = orphanIt.next(); - SWGObject container = objectTable.get(orphan.getContainer()); - if (container != null) { - container.addObject(orphan.getObject()); - orphanIt.remove(); - } - } + private void setCellInformation(SWGObject object, int cellIndex) { + if (!(object instanceof CellObject)) + return; + CellObject cell = (CellObject) object; + cell.setNumber(cellIndex); } - private Location readLocation(Object [] columns, int start) { - Location l = new Location((Float) columns[start], (Float) columns[start+1], (Float) columns[start+2], terrain); - l.setOrientationW((Float) columns[start+3]); - l.setOrientationX((Float) columns[start+4]); - l.setOrientationY((Float) columns[start+5]); - l.setOrientationZ((Float) columns[start+6]); - return l; - } - - private class Orphan { - private SWGObject obj; - private long container; - - public Orphan(SWGObject obj, long container) { - this.obj = obj; - this.container = container; - } - - public SWGObject getObject() { return obj; } - public long getContainer() { return container; } + private void updatePermissions(SWGObject object) { + object.getContainerPermissions().addDefaultWorldPermissions(); } } diff --git a/src/resources/objects/cell/CellObject.java b/src/resources/objects/cell/CellObject.java index 33bf09d84..6e47d66b6 100644 --- a/src/resources/objects/cell/CellObject.java +++ b/src/resources/objects/cell/CellObject.java @@ -27,7 +27,11 @@ ***********************************************************************************/ package resources.objects.cell; +import network.packets.swg.zone.baselines.Baseline.BaselineType; +import network.packets.swg.zone.building.UpdateCellPermissionMessage; +import resources.network.BaselineBuilder; import resources.objects.SWGObject; +import resources.player.Player; public class CellObject extends SWGObject { @@ -38,7 +42,7 @@ public class CellObject extends SWGObject { private String label = ""; public CellObject(long objectId) { - super(objectId); + super(objectId, BaselineType.SCLT); } public boolean isPublic() { @@ -65,4 +69,29 @@ public class CellObject extends SWGObject { this.label = label; } + protected void sendBaselines(Player target) { + BaselineBuilder bb = new BaselineBuilder(this, BaselineType.SCLT, 3); + createBaseline3(target, bb); + bb.sendTo(target); + + bb = new BaselineBuilder(this, BaselineType.SCLT, 6); + createBaseline6(target, bb); + bb.sendTo(target); + target.sendPacket(new UpdateCellPermissionMessage((byte) 1, getObjectId())); + } + + public void createBaseline3(Player target, BaselineBuilder bb) { + super.createBaseline3(target, bb); + bb.addByte(1); + bb.addInt(number); + bb.incrementOperandCount(2); + } + + public void createBaseline6(Player target, BaselineBuilder bb) { + super.createBaseline6(target, bb); + bb.addLong(0); + bb.addLong(0); + bb.incrementOperandCount(2); + } + } diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index 1bab0de2b..4f01eb9c4 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -27,7 +27,6 @@ ***********************************************************************************/ package resources.objects.creature; -import network.packets.swg.zone.SceneEndBaselines; import network.packets.swg.zone.UpdatePostureMessage; import network.packets.swg.zone.UpdatePvpStatusMessage; import network.packets.swg.zone.baselines.Baseline.BaselineType; @@ -105,7 +104,7 @@ public class CreatureObject extends TangibleObject { public CreatureObject(long objectId) { - super(objectId); + super(objectId, BaselineType.CREO); initMaxAttributes(); initCurrentAttributes(); initBaseAttributes(); @@ -623,9 +622,7 @@ public class CreatureObject extends TangibleObject { return (super.hashCode() * 7 + posture.getId()) * 13 + race.toString().hashCode(); } - public void createObject(Player target) { - sendSceneCreateObject(target); - + public void sendBaselines(Player target) { BaselineBuilder bb = null; if (getOwner() == target) { @@ -657,10 +654,6 @@ public class CreatureObject extends TangibleObject { createBaseline9(target, bb); bb.sendTo(target); } - - - createChildrenObjects(target); - target.sendPacket(new SceneEndBaselines(getObjectId())); } protected void createChildrenObjects(Player target) { diff --git a/src/resources/objects/installation/InstallationObject.java b/src/resources/objects/installation/InstallationObject.java index 39c5f166f..068e391fa 100644 --- a/src/resources/objects/installation/InstallationObject.java +++ b/src/resources/objects/installation/InstallationObject.java @@ -27,6 +27,7 @@ ***********************************************************************************/ package resources.objects.installation; +import network.packets.swg.zone.baselines.Baseline.BaselineType; import resources.objects.tangible.TangibleObject; public class InstallationObject extends TangibleObject { @@ -38,7 +39,7 @@ public class InstallationObject extends TangibleObject { private double powerRate = 0; public InstallationObject(long objectId) { - super(objectId); + super(objectId, BaselineType.INSO); } public boolean isActivated() { diff --git a/src/resources/objects/intangible/IntangibleObject.java b/src/resources/objects/intangible/IntangibleObject.java index b8fe82c66..fbf153b17 100644 --- a/src/resources/objects/intangible/IntangibleObject.java +++ b/src/resources/objects/intangible/IntangibleObject.java @@ -27,7 +27,6 @@ ***********************************************************************************/ package resources.objects.intangible; -import network.packets.swg.zone.SceneEndBaselines; import network.packets.swg.zone.baselines.Baseline.BaselineType; import resources.network.BaselineBuilder; import resources.objects.SWGObject; @@ -40,7 +39,11 @@ public class IntangibleObject extends SWGObject { private int count = 0; public IntangibleObject(long objectId) { - super(objectId); + super(objectId, BaselineType.ITNO); + } + + public IntangibleObject(long objectId, BaselineType objectType) { + super(objectId, objectType); } public int getCount() { @@ -72,9 +75,7 @@ public class IntangibleObject extends SWGObject { return super.hashCode(); } - protected void createObject(Player target) { - super.sendSceneCreateObject(target); - + protected void sendBaselines(Player target) { BaselineBuilder bb = new BaselineBuilder(this, BaselineType.ITNO, 3); createBaseline3(target, bb); bb.sendTo(target); @@ -83,9 +84,6 @@ public class IntangibleObject extends SWGObject { bb = new BaselineBuilder(this, BaselineType.ITNO, 6); createBaseline6(target, bb); bb.sendTo(target); - - createChildrenObjects(target); - target.sendPacket(new SceneEndBaselines(getObjectId())); } } diff --git a/src/resources/objects/player/PlayerObject.java b/src/resources/objects/player/PlayerObject.java index 0a7f6d8bb..e2b30624b 100644 --- a/src/resources/objects/player/PlayerObject.java +++ b/src/resources/objects/player/PlayerObject.java @@ -27,7 +27,6 @@ ***********************************************************************************/ package resources.objects.player; -import network.packets.swg.zone.SceneEndBaselines; import network.packets.swg.zone.UpdatePostureMessage; import network.packets.swg.zone.baselines.Baseline.BaselineType; import resources.collections.SWGList; @@ -96,7 +95,7 @@ public class PlayerObject extends IntangibleObject { private int startPlayTime; public PlayerObject(long objectId) { - super(objectId); + super(objectId, BaselineType.PLAY); setVolume(0); initFlags(); } @@ -402,31 +401,6 @@ public class PlayerObject extends IntangibleObject { return super.hashCode(); } - protected void createObject(Player target) { - super.sendSceneCreateObject(target); - - BaselineBuilder bb = new BaselineBuilder(this, BaselineType.PLAY, 3); - createBaseline3(target, bb); - bb.sendTo(target); - - bb = new BaselineBuilder(this, BaselineType.PLAY, 6); - createBaseline6(target, bb); - bb.sendTo(target); - - if (getOwner() == target) { - bb = new BaselineBuilder(this, BaselineType.PLAY, 8); - createBaseline8(target, bb); - bb.sendTo(target); - - bb = new BaselineBuilder(this, BaselineType.PLAY, 9); - createBaseline9(target, bb); - bb.sendTo(target); - } - - createChildrenObjects(target); - target.sendPacket(new SceneEndBaselines(getObjectId())); - } - public void createChildrenObjects(Player target) { SWGObject parent = getParent(); if (parent != null && parent instanceof CreatureObject) diff --git a/src/resources/objects/resource/ResourceContainerObject.java b/src/resources/objects/resource/ResourceContainerObject.java index e26999caa..5d2e4e4db 100644 --- a/src/resources/objects/resource/ResourceContainerObject.java +++ b/src/resources/objects/resource/ResourceContainerObject.java @@ -27,6 +27,7 @@ ***********************************************************************************/ package resources.objects.resource; +import network.packets.swg.zone.baselines.Baseline.BaselineType; import resources.objects.tangible.TangibleObject; public class ResourceContainerObject extends TangibleObject { @@ -41,7 +42,7 @@ public class ResourceContainerObject extends TangibleObject { private String displayName = ""; public ResourceContainerObject(long objectId) { - super(objectId); + super(objectId, BaselineType.RCNO); } public long getResourceType() { diff --git a/src/resources/objects/ship/ShipObject.java b/src/resources/objects/ship/ShipObject.java index ece7ab23a..48f96db92 100644 --- a/src/resources/objects/ship/ShipObject.java +++ b/src/resources/objects/ship/ShipObject.java @@ -27,6 +27,7 @@ ***********************************************************************************/ package resources.objects.ship; +import network.packets.swg.zone.baselines.Baseline.BaselineType; import resources.objects.tangible.TangibleObject; public class ShipObject extends TangibleObject { @@ -34,7 +35,7 @@ public class ShipObject extends TangibleObject { private static final long serialVersionUID = 1L; public ShipObject(long objectId) { - super(objectId); + super(objectId, BaselineType.SHIP); } } diff --git a/src/resources/objects/sound/SoundObject.java b/src/resources/objects/sound/SoundObject.java index e3cb0889a..c1b8a46cd 100644 --- a/src/resources/objects/sound/SoundObject.java +++ b/src/resources/objects/sound/SoundObject.java @@ -34,7 +34,7 @@ public class SoundObject extends SWGObject { private static final long serialVersionUID = 1L; public SoundObject(long objectId) { - super(objectId); + super(objectId, null); } } diff --git a/src/resources/objects/staticobject/StaticObject.java b/src/resources/objects/staticobject/StaticObject.java index 87502a4fb..673525eed 100644 --- a/src/resources/objects/staticobject/StaticObject.java +++ b/src/resources/objects/staticobject/StaticObject.java @@ -27,6 +27,7 @@ ***********************************************************************************/ package resources.objects.staticobject; +import network.packets.swg.zone.baselines.Baseline.BaselineType; import resources.objects.SWGObject; public class StaticObject extends SWGObject { @@ -34,7 +35,7 @@ public class StaticObject extends SWGObject { private static final long serialVersionUID = 1L; public StaticObject(long objectId) { - super(objectId); + super(objectId, BaselineType.STAO); } } diff --git a/src/resources/objects/tangible/TangibleObject.java b/src/resources/objects/tangible/TangibleObject.java index 32c5d4a2f..5aa06d6da 100644 --- a/src/resources/objects/tangible/TangibleObject.java +++ b/src/resources/objects/tangible/TangibleObject.java @@ -27,7 +27,6 @@ ***********************************************************************************/ package resources.objects.tangible; -import network.packets.swg.zone.SceneEndBaselines; import network.packets.swg.zone.baselines.Baseline.BaselineType; import resources.network.BaselineBuilder; import resources.objects.SWGObject; @@ -50,7 +49,11 @@ public class TangibleObject extends SWGObject { private byte [] objectEffects = new byte[0]; public TangibleObject(long objectId) { - super(objectId); + super(objectId, BaselineType.TANO); + } + + public TangibleObject(long objectId, BaselineType objectType) { + super(objectId, objectType); } public byte [] getAppearanceData() { @@ -151,35 +154,6 @@ public class TangibleObject extends SWGObject { return super.hashCode(); } - protected void createObject(Player target) { - super.sendSceneCreateObject(target); - - BaselineBuilder bb = new BaselineBuilder(this, BaselineType.TANO, 3); - createBaseline3(target, bb); - bb.sendTo(target); - - bb = new BaselineBuilder(this, BaselineType.TANO, 6); - createBaseline6(target, bb); - bb.sendTo(target); - - if (getOwner() == target) { - bb = new BaselineBuilder(this, BaselineType.TANO, 8); - createBaseline8(target, bb); - bb.sendTo(target); - - bb = new BaselineBuilder(this, BaselineType.TANO, 9); - createBaseline9(target, bb); - bb.sendTo(target); - } - - createChildrenObjects(target); - target.sendPacket(new SceneEndBaselines(getObjectId())); - } - - protected void createChildrenObjects(Player target) { - super.createChildrenObjects(target); - } - public void createBaseline3(Player target, BaselineBuilder bb) { super.createBaseline3(target, bb); // 4 variables - BASE3 (4) bb.addInt(0); // Faction diff --git a/src/resources/objects/waypoint/WaypointObject.java b/src/resources/objects/waypoint/WaypointObject.java index 21aa39d4b..c8fd7dc72 100644 --- a/src/resources/objects/waypoint/WaypointObject.java +++ b/src/resources/objects/waypoint/WaypointObject.java @@ -30,6 +30,7 @@ package resources.objects.waypoint; import java.nio.ByteBuffer; import java.nio.ByteOrder; +import network.packets.swg.zone.baselines.Baseline.BaselineType; import resources.common.CRC; import resources.network.BaselineBuilder.Encodable; import resources.objects.intangible.IntangibleObject; @@ -46,7 +47,7 @@ public class WaypointObject extends IntangibleObject implements Encodable { private boolean active = true; public WaypointObject(long objectId) { - super(objectId); + super(objectId, BaselineType.WAYP); } @@ -87,7 +88,7 @@ public class WaypointObject extends IntangibleObject implements Encodable { this.active = active; } - protected void createObject(Player target) { + public void createObject(Player target) { // NOTE: Client is never sent a WAYP baseline in NGE, WaypointObject's just go inside the Waypoint List in PLAY. } diff --git a/src/resources/objects/weapon/WeaponObject.java b/src/resources/objects/weapon/WeaponObject.java index 4ff7cd5e4..573601e48 100644 --- a/src/resources/objects/weapon/WeaponObject.java +++ b/src/resources/objects/weapon/WeaponObject.java @@ -42,7 +42,7 @@ public class WeaponObject extends TangibleObject implements Encodable{ private int type = WeaponType.UNARMED; public WeaponObject(long objectId) { - super(objectId); + super(objectId, BaselineType.WEAO); setComplexity(0); } @@ -86,9 +86,7 @@ public class WeaponObject extends TangibleObject implements Encodable{ return super.hashCode() * 7 + type; } - protected void createObject(Player target) { - super.sendSceneCreateObject(target); - + protected void sendBaselines(Player target) { BaselineBuilder bb = new BaselineBuilder(this, BaselineType.WEAO, 3); createBaseline3(target, bb); bb.sendTo(target);