From e763da8d61c5a9d1383766df2a050e30a0673d8f Mon Sep 17 00:00:00 2001 From: Treeku Date: Fri, 16 May 2014 08:01:27 +0100 Subject: [PATCH] Refactored BUIO --- src/resources/datatables/DisplayType.java | 12 +- .../building/BuildingMessageBuilder.java | 124 +------- .../objects/building/BuildingObject.java | 297 +++++++++++------- src/resources/objects/ship/ShipObject.java | 4 +- .../objects/tangible/TangibleObject.java | 4 +- 5 files changed, 214 insertions(+), 227 deletions(-) diff --git a/src/resources/datatables/DisplayType.java b/src/resources/datatables/DisplayType.java index 0e13f62a..437a0df4 100644 --- a/src/resources/datatables/DisplayType.java +++ b/src/resources/datatables/DisplayType.java @@ -23,13 +23,23 @@ package resources.datatables; public class DisplayType { + // System public static byte Broadcast = 0; // Level up. combatspam/skill_up - //public static byte Screen = 1; // Screen? XP gain + public static byte Screen = 1; // Screen? XP gain public static byte Chat = 2; //public static byte Overhead = 3; // Flytext? Seen on ent duration //public static byte Combat = 4; // CombatSpam? //public static byte Combat = 5; // Seen in combat flytext //public static byte Combat = 11; // Seen when blocking + // Flytext + //public static byte Broadcast = 0; // Level up. combatspam/skill_up + //public static byte Screen = 1; // Screen? XP gain + //public static byte Chat = 2; + //public static byte Overhead = 3; // Flytext? Seen on ent duration + //public static byte Combat = 4; // CombatSpam? + //public static byte Combat = 5; // Seen in combat flytext + //public static byte Combat = 11; // Seen when blocking + } diff --git a/src/resources/objects/building/BuildingMessageBuilder.java b/src/resources/objects/building/BuildingMessageBuilder.java index 6861117f..ab612ca9 100644 --- a/src/resources/objects/building/BuildingMessageBuilder.java +++ b/src/resources/objects/building/BuildingMessageBuilder.java @@ -40,96 +40,24 @@ public class BuildingMessageBuilder extends TangibleMessageBuilder { super(); } - public IoBuffer buildBaseline3() { - - BuildingObject building = (BuildingObject) object; - IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.setAutoExpand(true); - - buffer.putShort((short) 0x0D); - buffer.putFloat(building.getComplexity()); - buffer.put(getAsciiString(building.getStfFilename())); - buffer.putInt(0); - buffer.put(getAsciiString(building.getStfName())); - buffer.putInt(0); - buffer.putInt(0xFF); - //buffer.putInt(0x64); - buffer.putInt(0); - buffer.putInt(0); - buffer.putShort((short) 0); - - buffer.putInt(0); - buffer.putInt(0); - // buffer.putInt(16777216); - buffer.putInt(0x100); - buffer.putInt(0); - buffer.putInt(0); - buffer.putInt(0x201C); - buffer.put((byte) 1); - - int size = buffer.position(); - buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); - - buffer.flip(); - buffer = createBaseline("BUIO", (byte) 3, buffer, size); - - return buffer; - - } - - public IoBuffer buildBaseline6() { - - BuildingObject building = (BuildingObject) object; - IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.setAutoExpand(true); - - buffer.putShort((short) 8); - buffer.putInt(0x43); - - buffer.put(getAsciiString(building.getDetailFilename())); - buffer.putInt(0); - buffer.put(getAsciiString(building.getDetailName())); - buffer.putInt(0); - buffer.put((byte) 0); - buffer.putInt(0); - buffer.putInt(0); - buffer.putInt(0); - buffer.putInt(0); - buffer.putInt(0); - buffer.putInt(0); - buffer.putInt(0); - buffer.putInt(0); - - int size = buffer.position(); - buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); - - buffer.flip(); - buffer = createBaseline("BUIO", (byte) 6, buffer, size); - - return buffer; - - } - - public IoBuffer buildBaseline8() { - IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putShort((short) 0); - int size = buffer.position(); - buffer = IoBuffer.allocate(size).put(buffer.array(), 0, size); - buffer.flip(); - buffer = createBaseline("BUIO", (byte) 8, buffer, size); - - return buffer; + @Override + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(baselineBuilders, deltaBuilders); } - public IoBuffer buildBaseline9() { - IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putShort((short) 0); - int size = buffer.position(); - buffer = IoBuffer.allocate(size).put(buffer.array(), 0, size); - buffer.flip(); - buffer = createBaseline("BUIO", (byte) 9, buffer, size); - - return buffer; + @Override + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(baselineBuilders, deltaBuilders); } public IoBuffer buildPermissionListCreate(Vector permissionList, String listName) { @@ -152,24 +80,4 @@ public class BuildingMessageBuilder extends TangibleMessageBuilder { return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); } - @Override - public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { - super.buildBaseline3(deltaBuilders, deltaBuilders); - } - - @Override - public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { - super.buildBaseline6(deltaBuilders, deltaBuilders); - } - - @Override - public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { - super.buildBaseline8(deltaBuilders, deltaBuilders); - } - - @Override - public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { - super.buildBaseline9(deltaBuilders, deltaBuilders); - } - } diff --git a/src/resources/objects/building/BuildingObject.java b/src/resources/objects/building/BuildingObject.java index f1b95da7..0831d7f4 100644 --- a/src/resources/objects/building/BuildingObject.java +++ b/src/resources/objects/building/BuildingObject.java @@ -22,67 +22,129 @@ package resources.objects.building; import java.io.Serializable; +import java.util.Map; import java.util.Vector; import java.util.concurrent.atomic.AtomicReference; +import org.apache.mina.core.buffer.IoBuffer; + import main.NGECore; +import resources.common.OutOfBand; +import resources.datatables.DisplayType; +import resources.datatables.Options; import resources.objects.ObjectMessageBuilder; import resources.objects.cell.CellObject; import resources.objects.creature.CreatureObject; import resources.objects.tangible.TangibleObject; - -import com.sleepycat.persist.model.Entity; -import com.sleepycat.persist.model.NotPersistent; - +import engine.clientdata.ClientFileManager; +import engine.clientdata.visitors.PortalVisitor; import engine.clients.Client; +import engine.resources.objects.Baseline; import engine.resources.objects.IPersistent; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -@Entity(version=6) public class BuildingObject extends TangibleObject implements IPersistent, Serializable { private static final long serialVersionUID = 1L; - @NotPersistent + private transient BuildingMessageBuilder messageBuilder; - private float maintenanceAmount = 0; - private int BMR = 0; - private String deedTemplate=""; - private boolean residency=false; - private byte privacy=(byte)0; - public static byte PRIVATE = (byte)0; - public static byte PUBLIC = (byte)1; - private short maximumStorageCapacity=0; - private Vector entryList = new Vector(); // Preferably the OIDs should be stored, because of name changes + private Vector entryList = new Vector(); private Vector banList = new Vector(); + public static final byte PRIVATE = (byte) 0; + public static final byte PUBLIC = (byte) 1; + public BuildingObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String Template) { super(objectID, planet, position, orientation, Template); - messageBuilder = new BuildingMessageBuilder(this); - this.setConditionDamage(100); + getBaseline(3).set("volume", 255); + setOptionsBitmask(Options.INVULNERABLE); + setConditionDamage(100); + setMaximumCondition(4320); + setStaticObject(true); } public BuildingObject() { super(); - messageBuilder = new BuildingMessageBuilder(this); - this.setConditionDamage(100); + getBaseline(3).set("volume", 255); + setOptionsBitmask(Options.INVULNERABLE); + setConditionDamage(100); + setMaximumCondition(4320); + setStaticObject(true); + } + + @Override + public void initAfterDBLoad() { + super.init(); + defendersList = new Vector(); + getBaseline(3).set("volume", 255); + setOptionsBitmask(Options.INVULNERABLE); + setConditionDamage(100); + setMaximumCondition(4320); + } + + @Override + public Baseline getOtherVariables() { + Baseline baseline = super.getOtherVariables(); + baseline.put("maintainanceAmount", (float) 0); + baseline.put("baseMaintenanceRate", 0); + baseline.put("deedTemplate", ""); + baseline.put("residency", false); + baseline.put("privacy", (byte) 0); + baseline.put("maximumStorageCapacity", (short) 0); + return baseline; + } + + @Override + public Baseline getBaseline3() { + Baseline baseline = super.getBaseline3(); + return baseline; + } + + @Override + public Baseline getBaseline6() { + Baseline baseline = super.getBaseline6(); + return baseline; + } + + @Override + public Baseline getBaseline8() { + Baseline baseline = super.getBaseline8(); + return baseline; + } + + @Override + public Baseline getBaseline9() { + Baseline baseline = super.getBaseline9(); + return baseline; + } + + public Vector getCells() { + final Vector cells = new Vector(); + + this.viewChildren(this, true, false, (obj) -> { + if (obj instanceof CellObject) { + cells.add((CellObject) obj); + } + }); + + return cells; } public CellObject getCellByCellNumber(final int cellNumber) { - final AtomicReference ref = new AtomicReference(); synchronized(objectMutex) { this.viewChildren(this, true, false, (obj) -> { - if(obj instanceof CellObject && ((CellObject) obj).getCellNumber() == cellNumber) + if (obj instanceof CellObject && ((CellObject) obj).getCellNumber() == cellNumber) { ref.set((CellObject) obj); + } }); } return ref.get(); - } public int getCellNumberByObjectId(long objectId) { @@ -98,168 +160,177 @@ public class BuildingObject extends TangibleObject implements IPersistent, Seria } public float getMaintenanceAmount() { - return maintenanceAmount; + return (float) otherVariables.get("maintenanceAmount"); } - + public void setMaintenanceAmount(float maintenanceAmount) { - this.maintenanceAmount = maintenanceAmount; - } - - public void setDeedTemplate(String deedTemplate){ - this.deedTemplate = deedTemplate; - } - - public String getDeedTemplate(){ - return this.deedTemplate; - } - - public String getBuildingName() { - return this.getCustomName(); - } - - public void setBuildingName(String buildingName, CreatureObject owner) { - //owner.getClient().getSession().write(messageBuilder.buildCustomNameDelta(this,buildingName)); - this.setCustomName(buildingName); - ((CreatureObject)owner).sendSystemMessage("Structure renamed.", (byte) 0); + otherVariables.set("maintenanceAmount", maintenanceAmount); } public int getBMR() { - return BMR; + return (int) otherVariables.get("baseMaintenanceRate"); } - + public void setBMR(int BMR) { - this.BMR = BMR; + otherVariables.set("baseMaintenanceRate", BMR); + } + + public String getDeedTemplate(){ + return (String) otherVariables.get("deedTemplate"); + } + + public void setDeedTemplate(String deedTemplate){ + otherVariables.set("deedTemplate", deedTemplate); + } + + public String getBuildingName() { + return getCustomName(); + } + + public void setBuildingName(String buildingName, CreatureObject owner) { + setCustomName(buildingName); + ((CreatureObject) owner).sendSystemMessage("Structure renamed.", DisplayType.Broadcast); + } + + public boolean getResidency(){ + return (boolean) otherVariables.get("residency"); } public void setResidency(CreatureObject owner){ owner.sendSystemMessage("@player_structure:declared_residency", (byte) 1); - residency = true; - } - - public boolean getResidency(){ - return this.residency; + otherVariables.set("residency", true); } public byte getPrivacy() { - return privacy; + return (byte) otherVariables.get("privacy"); } public String getPrivacyString() { - if (privacy==PRIVATE) - return "private"; - if (privacy==PUBLIC) - return "public"; - return "42"; + switch (getPrivacy()) { + case PRIVATE: + return "private"; + case PUBLIC: + return "public"; + default: + return "42"; + } } - + public void setPrivacy(byte privacy) { - this.privacy = privacy; + otherVariables.set("residency", privacy); } public Vector getItemsList() { Vector items = new Vector(); + getCells().forEach(c -> c.viewChildren(c, true, false, (item) -> { if(!(item instanceof CreatureObject) && item.getTemplate() != "object/tangible/terminal/shared_terminal_player_structure.iff" - && item.getTemplate() != "object/tangible/terminal/shared_terminal_city.iff" - && item.getTemplate() != "object/tangible/terminal/shared_terminal_city_vote.iff") + && item.getTemplate() != "object/tangible/terminal/shared_terminal_city.iff" + && item.getTemplate() != "object/tangible/terminal/shared_terminal_city_vote.iff") { items.add((TangibleObject) item); + } })); + return items; } - + public short getMaximumStorageCapacity() { - return maximumStorageCapacity; - } - - public void setMaximumStorageCapacity(short maximumStorageCapacity) { - this.maximumStorageCapacity = maximumStorageCapacity; + return (byte) otherVariables.get("maximumStorageCapacity"); } - public void setPermissionEntry(String name,CreatureObject owner){ + public void setMaximumStorageCapacity(short maximumStorageCapacity) { + otherVariables.set("maximumStorageCapacity", maximumStorageCapacity); + } + + public void setPermissionEntry(String name, CreatureObject owner){ Vector entryListFirstNames = new Vector(); - for (long oid : entryList){ + + for (long oid : entryList) { String firstName = NGECore.getInstance().characterService.getPlayerFirstName(oid); entryListFirstNames.add(firstName); } + entryListFirstNames.add("Peter"); entryListFirstNames.add("Jackson"); + owner.getClient().getSession().write(messageBuilder.buildPermissionListCreate(entryListFirstNames, name)); } - public void setPermissionBan(String name,CreatureObject owner){ + public void setPermissionBan(String name, CreatureObject owner){ Vector banListFirstNames = new Vector(); - for (long oid : banList){ + + for (long oid : banList) { String firstName = NGECore.getInstance().characterService.getPlayerFirstName(oid); banListFirstNames.add(firstName); - } + } + banListFirstNames.add("Peter"); banListFirstNames.add("Smith"); + owner.getClient().getSession().write(messageBuilder.buildPermissionListCreate(banListFirstNames, name)); } - public void addPlayerToEntryList(CreatureObject owner,long oid, String firstName){ + public void addPlayerToEntryList(CreatureObject owner, long oid, String firstName){ if (!entryList.contains(oid)){ - this.entryList.add(oid); - owner.sendSystemMessage(firstName+ " added to the list.", (byte)1); // player_added %NO added to the list. + entryList.add(oid); + owner.sendSystemMessage(OutOfBand.ProsePackage("@player_structure:player_removed", "TO", NGECore.getInstance().objectService.getObject(oid).getCustomName()), DisplayType.Screen); } } - public void removePlayerFromEntryList(CreatureObject owner,long oid, String firstName){ + public void removePlayerFromEntryList(CreatureObject owner, long oid, String firstName){ if (entryList.contains(oid)){ - this.entryList.remove(oid); - owner.sendSystemMessage(firstName+ " removed to the list.", (byte)1); // player_removed %NO removed from the list. + entryList.remove(oid); + owner.sendSystemMessage(OutOfBand.ProsePackage("@player_structure:player_removed", "TO", NGECore.getInstance().objectService.getObject(oid).getCustomName()), DisplayType.Screen); } } - public void addPlayerToBanList(CreatureObject owner,long oid, String firstName){ + public void addPlayerToBanList(CreatureObject owner, long oid, String firstName){ if (!banList.contains(oid)){ - this.banList.add(oid); - owner.sendSystemMessage(firstName+ " added to the list.", (byte)1); + banList.add(oid); + owner.sendSystemMessage(OutOfBand.ProsePackage("@player_structure:player_removed", "TO", NGECore.getInstance().objectService.getObject(oid).getCustomName()), DisplayType.Screen); } } - public void removePlayerFromBanList(CreatureObject owner,long oid, String firstName){ + public void removePlayerFromBanList(CreatureObject owner, long oid, String firstName){ if (banList.contains(oid)){ - this.banList.remove(oid); - owner.sendSystemMessage(firstName+ " removed to the list.", (byte)1); + banList.remove(oid); + owner.sendSystemMessage(OutOfBand.ProsePackage("@player_structure:player_removed", "TO", NGECore.getInstance().objectService.getObject(oid).getCustomName()), DisplayType.Screen); } } + @Override + public void notifyClients(IoBuffer buffer, boolean notifySelf) { + notifyObservers(buffer, false); + } + + @Override + public ObjectMessageBuilder getMessageBuilder() { + synchronized(objectMutex) { + if (messageBuilder == null) { + messageBuilder = new BuildingMessageBuilder(this); + } + + return messageBuilder; + } + } - @Override public void sendBaselines(Client destination) { - - if(destination == null || destination.getSession() == null) { - System.out.println("NULL session"); - return; + if (destination != null && destination.getSession() != null) { + destination.getSession().write(getBaseline(3).getBaseline()); + destination.getSession().write(getBaseline(6).getBaseline()); + + Client parent = ((getGrandparent() == null) ? null : getGrandparent().getClient()); + + if (parent != null && destination == parent) { + destination.getSession().write(getBaseline(8).getBaseline()); + destination.getSession().write(getBaseline(9).getBaseline()); + } } - - destination.getSession().write(messageBuilder.buildBaseline3()); - destination.getSession().write(messageBuilder.buildBaseline6()); - destination.getSession().write(messageBuilder.buildBaseline8()); - destination.getSession().write(messageBuilder.buildBaseline9()); - } - public Vector getCells() { - final Vector cells = new Vector(); - this.viewChildren(this, true, false, (obj) -> { - if(obj instanceof CellObject) - cells.add((CellObject) obj); - }); - return cells; - } - - @Override - public void initAfterDBLoad() { - super.init(); - messageBuilder = new BuildingMessageBuilder(this); - defendersList = new Vector(); - } - - public ObjectMessageBuilder getMessageBuilder() { - return messageBuilder; + public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { + super.sendListDelta(viewType, updateType, buffer); } } diff --git a/src/resources/objects/ship/ShipObject.java b/src/resources/objects/ship/ShipObject.java index 67d27246..faeac78c 100644 --- a/src/resources/objects/ship/ShipObject.java +++ b/src/resources/objects/ship/ShipObject.java @@ -23,15 +23,13 @@ package resources.objects.ship; import java.io.Serializable; -import com.sleepycat.persist.model.Persistent; - import resources.objects.ObjectMessageBuilder; import resources.objects.tangible.TangibleObject; -@Persistent(version=0) public class ShipObject extends TangibleObject implements Serializable { private static final long serialVersionUID = 1L; + private transient ObjectMessageBuilder messageBuilder = null; @Override diff --git a/src/resources/objects/tangible/TangibleObject.java b/src/resources/objects/tangible/TangibleObject.java index 1e2b13b3..621e6c16 100644 --- a/src/resources/objects/tangible/TangibleObject.java +++ b/src/resources/objects/tangible/TangibleObject.java @@ -83,13 +83,13 @@ public class TangibleObject extends SWGObject implements Serializable { public TangibleObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String template) { super(objectID, planet, position, orientation, template); if (this.getClass().getSimpleName().equals("TangibleObject")) setIntAttribute("volume", 1); - otherVariables = getOtherVariables(); // FIXME temp + getBaseline(3).set("volume", 1); } public TangibleObject(long objectID, Planet planet, String template) { super(objectID, planet, new Point3D(0, 0, 0), new Quaternion(1, 0, 1, 0), template); if (this.getClass().getSimpleName().equals("TangibleObject")) setIntAttribute("volume", 1); - otherVariables = getOtherVariables(); // FIXME temp + getBaseline(3).set("volume", 1); } public TangibleObject() {