diff --git a/scripts/commands/placestructure.py b/scripts/commands/placestructure.py index f6f5c122..30b239a0 100644 --- a/scripts/commands/placestructure.py +++ b/scripts/commands/placestructure.py @@ -1,32 +1,25 @@ import sys -import resources.objects.deed.Harvester_Deed def setup(): return - + def run(core, actor, target, commandString): cmdArgs = commandString.split(" ") deedId = long(cmdArgs[0]) deed = core.objectService.getObject(deedId) - - if (actor.getAttachment('UsingHarvesterDeed') == '1'): - actor.setAttachment('UsingHarvesterDeed', '0'); + + if deed == actor: + deed = actor.getUseTarget() + + if deed.getTemplate().startswith('object/tangible/deed/harvester_deed') is True: core.harvesterService.handlePlaceStructureCommand(actor, target, commandString) return - + positionX = float(cmdArgs[1]) positionZ = float(cmdArgs[2]) - #positionY = core.terrainService.getHeight(actor.getPlanetId(), positionX, positionZ) + 2 - rotation = float(cmdArgs[3]) - - #structureTemplate = deed.getAttachment("structureTemplate") - core.housingService.placeStructure(actor, deed, positionX, positionZ, rotation) - #building = core.objectService.createObject(structureTemplate, actor.getPlanet(), positionX, positionZ, positionY); - #core.simulationService.add(building, building.getPosition().x, building.getPosition().z); - - return \ No newline at end of file + return diff --git a/src/protocol/swg/EnterStructurePlacementModeMessage.java b/src/protocol/swg/EnterStructurePlacementModeMessage.java index 3f12cf0a..b46ed3db 100644 --- a/src/protocol/swg/EnterStructurePlacementModeMessage.java +++ b/src/protocol/swg/EnterStructurePlacementModeMessage.java @@ -39,6 +39,7 @@ public class EnterStructurePlacementModeMessage extends SWGMessage { public EnterStructurePlacementModeMessage(SWGObject deed, String structureTemplate) { this.deed = deed; this.structureTemplate = structureTemplate; + deed.setAttachment("structureTemplate", structureTemplate); } @Override @@ -49,15 +50,10 @@ public class EnterStructurePlacementModeMessage extends SWGMessage { @Override public IoBuffer serialize() { IoBuffer result = IoBuffer.allocate(16 + structureTemplate.length()).order(ByteOrder.LITTLE_ENDIAN); - result.putShort((short) 3); result.putInt(0xE8A54DC1); - result.putLong(deed.getObjectID()); - - deed.setAttachment("structureTemplate", structureTemplate); result.put(getAsciiString(structureTemplate)); - return result.flip(); } diff --git a/src/services/DevService.java b/src/services/DevService.java index 3ba062be..e2bd4390 100644 --- a/src/services/DevService.java +++ b/src/services/DevService.java @@ -39,8 +39,6 @@ import resources.common.SpawnPoint; import resources.datatables.WeaponType; import resources.objects.building.BuildingObject; import resources.objects.creature.CreatureObject; -import resources.objects.deed.Harvester_Deed; -import resources.objects.deed.Player_House_Deed; import resources.objects.player.PlayerObject; import resources.objects.tangible.TangibleObject; import resources.objects.tool.SurveyTool; diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index d89bce74..e46c047f 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -102,8 +102,6 @@ import resources.objects.building.BuildingObject; import resources.objects.cell.CellObject; import resources.objects.craft.DraftSchematic; import resources.objects.creature.CreatureObject; -import resources.objects.deed.Harvester_Deed; -import resources.objects.deed.Player_House_Deed; import resources.objects.factorycrate.FactoryCrateObject; import resources.objects.group.GroupObject; import resources.objects.guild.GuildObject; @@ -241,15 +239,7 @@ public class ObjectService implements INetworkDispatch { object = new SurveyTool(objectID, planet, Template, position, orientation); - } else if(Template.startsWith("object/tangible/deed/harvester_deed") || Template.startsWith("object/tangible/deed/generator_deed")) { - - object = new Harvester_Deed(objectID, planet, Template, position, orientation); - - } else if(Template.startsWith("object/tangible/deed/player_house_deed") || Template.startsWith("object/tangible/deed/guild_deed") || Template.startsWith("object/tangible/deed/city_deed") || Template.startsWith("object/tangible/tcg")) { - - object = new Player_House_Deed(objectID, planet, Template, position, orientation); - - } + } // else if(Template.startsWith("object/tangible/container/drum/shared_treasure_drum.iff")) { // // object = new CreatureObject(objectID, planet, position, orientation, Template); diff --git a/src/services/resources/HarvesterService.java b/src/services/resources/HarvesterService.java index 7dd955eb..f8838be1 100644 --- a/src/services/resources/HarvesterService.java +++ b/src/services/resources/HarvesterService.java @@ -54,7 +54,6 @@ import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; import resources.common.ObjControllerOpcodes; import resources.objects.creature.CreatureObject; -import resources.objects.deed.Harvester_Deed; import resources.objects.harvester.HarvesterMessageBuilder; import resources.objects.harvester.HarvesterObject; import resources.objects.installation.InstallationObject; @@ -83,7 +82,7 @@ public class HarvesterService implements INetworkDispatch { private Vector allConstructors = new Vector(); public HarvesterService(NGECore core) { - this.core = core; + this.core = core; //core.commandService.registerCommand("permissionlistmodify"); //core.commandService.registerCommand("harvesterselectresource"); //core.commandService.registerCommand("harvesteractivate"); @@ -439,19 +438,26 @@ public class HarvesterService implements INetworkDispatch { // handle creation of correct deed in player inventory PlayerObject player = (PlayerObject) crafter.getSlottedObject("ghost"); String deedTemplate = harvester.getDeedTemplate(); - Harvester_Deed deed = (Harvester_Deed)core.objectService.createObject(deedTemplate, owner.getPlanet()); - if(player.getLotsRemaining()+deed.getLotRequirement()>10){ + TangibleObject deed = (TangibleObject) core.objectService.createObject(deedTemplate, owner.getPlanet()); + + if (player.getLotsRemaining() + (Integer) deed.getAttachment("LotRequirement") > 10) { // Something went wrong or hacking attempt crafter.sendSystemMessage("Structure can't be redeeded. Maximum lot count exceeded.",(byte)1); return; } - deed.setStructureTemplate(harvester.getTemplate()); - deed.setOutputHopperCapacity(harvester.getOutputHopperCapacity()); - deed.setBER(harvester.getBER()); - deed.setSurplusMaintenance((int)harvester.getMaintenanceAmount()); - deed.setSurplusPower((int)harvester.getPowerLevel()); - deed.setAttributes(); + deed.setAttachment("StructureTemplate", harvester.getTemplate()); + + if (harvester.getMaintenanceAmount() > 0) { + deed.setIntAttribute("examine_maintenance", (int) harvester.getMaintenanceAmount()); + } + + if (harvester.getPowerLevel() > 0) { + deed.setIntAttribute("examine_power", (int) harvester.getPowerLevel()); + } + + deed.setIntAttribute("examine_hoppersize", harvester.getOutputHopperCapacity()); + deed.setIntAttribute("examine_extractionrate", harvester.getBER()); removeHarvester(harvester); core.objectService.destroyObject(harvester.getObjectID()); @@ -459,8 +465,9 @@ public class HarvesterService implements INetworkDispatch { SWGObject crafterInventory = owner.getSlottedObject("inventory"); crafterInventory.add(deed); - if(player.getLotsRemaining()+deed.getLotRequirement()<=10) - player.setLotsRemaining(player.getLotsRemaining()+deed.getLotRequirement()); + if (player.getLotsRemaining() + (Integer) deed.getAttachment("LotRequirement") <= 10) { + player.setLotsRemaining(player.getLotsRemaining() + (Integer) deed.getAttachment("LotRequirement")); + } crafter.sendSystemMessage("@player_structure:processing_destruction",(byte)1); crafter.sendSystemMessage("@player_structure:deed_reclaimed",(byte)1); @@ -651,7 +658,7 @@ public class HarvesterService implements INetworkDispatch { } return 0; } - } + } public void handlePermissionAdmin(CreatureObject owner, TangibleObject target) { @@ -927,11 +934,9 @@ public class HarvesterService implements INetworkDispatch { return container; } - - public void constructionSite(CreatureObject actor,SWGObject target, long objectId, float posX, float posZ, float dir){ - - SWGObject usedDeed = (SWGObject)actor.getAttachment("LastUsedDeed"); - String constructorTemplate = ((Harvester_Deed)usedDeed).getConstructorTemplate(); + public void constructionSite(CreatureObject actor, SWGObject target, long objectId, float posX, float posZ, float dir){ + SWGObject usedDeed = actor.getUseTarget(); //(SWGObject)actor.getAttachment("LastUsedDeed"); + String constructorTemplate = (String) usedDeed.getAttachment("ConstructorTemplate"); //String structureTemplate = "object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_1.iff"; float positionY = core.terrainService.getHeight(actor.getPlanetId(), posX, posZ) + 2f; @@ -939,33 +944,47 @@ public class HarvesterService implements INetworkDispatch { quaternion = resources.common.MathUtilities.rotateQuaternion(quaternion, (float)((Math.PI/2) * dir), new Point3D(0, 1, 0)); InstallationObject installation = (InstallationObject) core.objectService.createObject(constructorTemplate, 0, actor.getPlanet(), new Point3D(posX, positionY, posZ), quaternion); + if (usedDeed.getAttributes().containsKey("examine_extractionrate")) { + usedDeed.setIntAttribute("examine_extractionrate", 0); + } + + if (usedDeed.getAttributes().containsKey("examine_hoppersize")) { + usedDeed.setIntAttribute("examine_hoppersize", 0); + } + + if (usedDeed.getAttributes().containsKey("examine_maintenance")) { + usedDeed.setIntAttribute("examine_maintenance", 0); + } + + if (usedDeed.getAttributes().containsKey("examine_power")) { + usedDeed.setIntAttribute("examine_power", 0); + } installation.setAttachment("ConstructionStart", System.currentTimeMillis()); - installation.setAttachment("Owner", actor); - installation.setAttachment("Deed_StructureTemplate", ((Harvester_Deed)usedDeed).getStructureTemplate()); - installation.setAttachment("Deed_DeedTemplate", ((Harvester_Deed)usedDeed).getTemplate()); - installation.setAttachment("Deed_BER", ((Harvester_Deed)usedDeed).getBER()); - installation.setAttachment("Deed_Capacity", ((Harvester_Deed)usedDeed).getOutputHopperCapacity()); - installation.setAttachment("Deed_DeedLots", ((Harvester_Deed)usedDeed).getLotRequirement()); - installation.setAttachment("Deed_SurplusMaintenance", ((Harvester_Deed)usedDeed).getSurplusMaintenance()); - installation.setAttachment("Deed_SurplusPower", ((Harvester_Deed)usedDeed).getSurplusPower()); + installation.setAttachment("ownerId", actor.getObjectID()); + installation.setAttachment("StructureTemplate", usedDeed.getAttachment("StructureTemplate")); + installation.setAttachment("Deed_DeedTemplate", usedDeed.getTemplate()); + installation.setAttachment("Deed_BER", usedDeed.getIntAttribute("examine_extractionrate")); + installation.setAttachment("Deed_Capacity", usedDeed.getIntAttribute("examine_hoppersize")); + installation.setAttachment("Deed_DeedLots", usedDeed.getAttachment("LotRequirement")); + installation.setAttachment("Deed_SurplusMaintenance", usedDeed.getIntAttribute("examine_maintenance")); + installation.setAttachment("Deed_SurplusPower", usedDeed.getIntAttribute("examine_power")); // destroy deed - TangibleObject playerInventory = (TangibleObject) actor.getSlottedObject("inventory"); - playerInventory.remove(usedDeed); + core.objectService.destroyObject(usedDeed); core.simulationService.add(installation, posX, posZ, true); PlayerObject player = (PlayerObject) actor.getSlottedObject("ghost"); - player.setLotsRemaining(player.getLotsRemaining()-(int)((Harvester_Deed)usedDeed).getLotRequirement()); + player.setLotsRemaining(player.getLotsRemaining() - (int) usedDeed.getAttachment("LotRequirement")); synchronized(allConstructors){ allConstructors.add(installation); } } public void placeHarvester(SWGObject object) { - CreatureObject actor = (CreatureObject) object.getAttachment("Owner"); - String structureTemplate = (String)object.getAttachment("Deed_StructureTemplate"); + CreatureObject actor = (CreatureObject) NGECore.getInstance().objectService.getObject((Long) object.getAttachment("ownerId")); + String structureTemplate = (String) object.getAttachment("StructureTemplate"); HarvesterObject harvester = (HarvesterObject) NGECore.getInstance().objectService.createObject(structureTemplate, actor.getPlanet()); long objectId = harvester.getObjectID(); Vector adminList = harvester.getAdminList(); @@ -1039,7 +1058,7 @@ public class HarvesterService implements INetworkDispatch { } - public void enterStructurePlacementMode(SWGObject object, CreatureObject actor){ + public void enterStructurePlacementMode(CreatureObject actor, SWGObject object){ if (!actor.getClient().isGM() && !core.terrainService.canBuildAtPosition(actor,actor.getPosition().x,actor.getPosition().z)){ actor.sendSystemMessage("@player_structure:not_permitted", (byte) 0); @@ -1047,13 +1066,12 @@ public class HarvesterService implements INetworkDispatch { } PlayerObject player = (PlayerObject) actor.getSlottedObject("ghost"); - if (((Harvester_Deed)object).getLotRequirement()>player.getLotsRemaining()){ + if (((Integer) object.getAttachment("LotRequirement")) > player.getLotsRemaining()){ actor.sendSystemMessage("@player_structure:not_enough_lots", (byte) 0); return; } - actor.setAttachment("LastUsedDeed", object); - String structureTemplate = ((Harvester_Deed)object).getStructureTemplate(); + String structureTemplate = (String) object.getAttachment("StructureTemplate"); //String temp = "object/installation/mining_ore/shared_mining_ore_harvester_style_1.iff"; EnterStructurePlacementModeMessage placementMsg = new EnterStructurePlacementModeMessage(actor,structureTemplate); actor.getClient().getSession().write(placementMsg.serialize()); @@ -1085,11 +1103,11 @@ public class HarvesterService implements INetworkDispatch { public void createExampleDeed(CreatureObject actor){ String templateString="object/tangible/deed/harvester_deed/shared_harvester_ore_s1_deed.iff"; - Harvester_Deed deed = (Harvester_Deed)core.objectService.createObject(templateString, actor.getPlanet()); - deed.setName("Example Harvester Deed"); - deed.setStructureTemplate("object/installation/mining_ore/shared_mining_ore_harvester_style_1.iff"); - deed.setOutputHopperCapacity(27344); - deed.setBER(15); + TangibleObject deed = (TangibleObject) core.objectService.createObject(templateString, actor.getPlanet()); + deed.setCustomName("Example Harvester Deed"); + deed.setAttachment("StructureTemplate", "object/installation/mining_ore/shared_mining_ore_harvester_style_1.iff"); + deed.setIntAttribute("examine_hoppersize", 27344); + deed.setIntAttribute("examine_extractionrate", 15); TangibleObject playerInventory = (TangibleObject) actor.getSlottedObject("inventory"); playerInventory.add(deed);