From 7fc5c448176937f895e78b76861a3af56c2d6f96 Mon Sep 17 00:00:00 2001 From: Light2 Date: Mon, 12 May 2014 18:42:15 +0200 Subject: [PATCH] Moved loot groups to mobile template scripts, moved respawn time to spawn service as last argument Please no longer use loot in object template scripts and move them over to the mobiles/ folder. --- .../objects/tangible/TangibleObject.java | 13 ++++++++-- src/services/StaticService.java | 25 ++++++++++++++++--- src/services/command/BaseSWGCommand.java | 6 ++--- src/services/housing/HousingService.java | 5 ++-- src/services/spawn/MobileTemplate.java | 24 +++++++++++++++++- src/services/spawn/SpawnService.java | 3 +++ 6 files changed, 65 insertions(+), 11 deletions(-) diff --git a/src/resources/objects/tangible/TangibleObject.java b/src/resources/objects/tangible/TangibleObject.java index 80964f71..9cf7a8ef 100644 --- a/src/resources/objects/tangible/TangibleObject.java +++ b/src/resources/objects/tangible/TangibleObject.java @@ -84,7 +84,7 @@ public class TangibleObject extends SWGObject implements Serializable { private transient TangibleMessageBuilder messageBuilder; //private TreeSet> lootSpecification = new TreeSet>(); - private List lootGroups = new ArrayList(); + private transient List lootGroups = new ArrayList(); @NotPersistent private transient boolean looted = false; // These 4 should not need to be persisted, since a looted corpse will get wiped with server restart @@ -507,13 +507,22 @@ public class TangibleObject extends SWGObject implements Serializable { public List getLootGroups() { return lootGroups; } + + public void setLootGroups(List lootGroups) { + this.lootGroups = lootGroups; + } public void addToLootGroups(String[] lootPoolNames, double[] lootPoolChances, double lootGroupChance) { - System.out.println("lootPoolNames[0] " + lootPoolNames[0]); + //System.out.println("lootPoolNames[0] " + lootPoolNames[0]); LootGroup lootGroup = new LootGroup(lootPoolNames, lootPoolChances, lootGroupChance); this.lootGroups.add(lootGroup); } + public void addToLootGroups(LootGroup lootGroup) { + this.lootGroups.add(lootGroup); + } + + public boolean isLooted() { return looted; } diff --git a/src/services/StaticService.java b/src/services/StaticService.java index dc302656..11b9dee8 100644 --- a/src/services/StaticService.java +++ b/src/services/StaticService.java @@ -36,6 +36,8 @@ import java.util.Map; import resources.common.FileUtilities; import resources.objects.building.BuildingObject; import resources.objects.cell.CellObject; +import services.ai.AIActor; +import services.spawn.MobileTemplate; import main.NGECore; import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.PortalVisitor; @@ -94,6 +96,11 @@ public class StaticService implements INetworkDispatch { } public SWGObject spawnObject(String template, String planetName, long cellId, float x, float y, float z, float qW, float qX, float qY, float qZ) { + return spawnObject(template, planetName, cellId, x, y, z, qW, qX, qY, qZ, -1); + } + + + public SWGObject spawnObject(String template, String planetName, long cellId, float x, float y, float z, float qW, float qX, float qY, float qZ, int respawnTime) { Planet planet = core.terrainService.getPlanetByName(planetName); if (planet == null) { @@ -113,10 +120,22 @@ public class StaticService implements INetworkDispatch { long objectId = core.objectService.getDOId(planetName, template, 0, buildingId, cellNumber, x, y, z); - SWGObject object; + SWGObject object = null; + MobileTemplate mobileTemplate = core.spawnService.getMobileTemplate(template); - if (core.spawnService.getMobileTemplate(template) != null) { - object = core.spawnService.spawnCreature(template, objectId, planetName, cellId, x, y, z, qW, qX, qY, qZ, (short) -1); + if (mobileTemplate != null) { + if(respawnTime > 0) { + try { + MobileTemplate clone = (MobileTemplate) mobileTemplate.clone(); + object = core.spawnService.spawnCreature(template, objectId, planetName, cellId, x, y, z, qW, qX, qY, qZ, (short) -1); + clone.setRespawnTime(respawnTime); + ((AIActor) object.getAttachment("AI")).setMobileTemplate(clone); + } catch (CloneNotSupportedException e) { + e.printStackTrace(); + } + } else { + object = core.spawnService.spawnCreature(template, objectId, planetName, cellId, x, y, z, qW, qX, qY, qZ, (short) -1); + } } else { object = core.objectService.createObject(template, objectId, planet, new Point3D(x, y, z), new Quaternion(qW, qX, qY, qZ), null, true, true); } diff --git a/src/services/command/BaseSWGCommand.java b/src/services/command/BaseSWGCommand.java index 9c2d639f..8ea09061 100644 --- a/src/services/command/BaseSWGCommand.java +++ b/src/services/command/BaseSWGCommand.java @@ -214,9 +214,9 @@ public class BaseSWGCommand implements Cloneable { this.commandCRC = commandCRC; } - public Object clone() throws CloneNotSupportedException { - return super.clone(); - } + public Object clone() throws CloneNotSupportedException { + return super.clone(); + } public boolean isGmCommand() { return (godLevel > 0); diff --git a/src/services/housing/HousingService.java b/src/services/housing/HousingService.java index 697530b6..74762ebd 100644 --- a/src/services/housing/HousingService.java +++ b/src/services/housing/HousingService.java @@ -128,7 +128,7 @@ public class HousingService implements INetworkDispatch { String playerFirstName = actor.getCustomName().split(" ")[0]; if (sign != null) { - sign.setCustomName2(playerFirstName + "'s House"); + sign.setCustomName(playerFirstName + "'s House"); } //building.add(sign); @@ -168,7 +168,8 @@ public class HousingService implements INetworkDispatch { } } - //core.objectService.persistObject(building.getObjectID(), building, core.getSWGObjectODB()); + core.objectService.persistObject(building.getObjectID(), building, core.getSWGObjectODB()); + core.getSWGObjectODB().getEnvironment().sync(); } diff --git a/src/services/spawn/MobileTemplate.java b/src/services/spawn/MobileTemplate.java index b18fc43e..18505f7d 100644 --- a/src/services/spawn/MobileTemplate.java +++ b/src/services/spawn/MobileTemplate.java @@ -21,12 +21,14 @@ ******************************************************************************/ package services.spawn; +import java.util.List; import java.util.Vector; import resources.datatables.Options; import resources.datatables.PvpStatus; +import resources.loot.LootGroup; -public class MobileTemplate { +public class MobileTemplate implements Cloneable { private Vector templates; private int optionBitmask = Options.ATTACKABLE; @@ -57,6 +59,8 @@ public class MobileTemplate { private String meatType, milkType, boneType, hideType; private int meatAmount, milkAmount, boneAmount, hideAmount; private int respawnTime = 0; + private List lootGroups; + public Vector getTemplates() { return templates; @@ -337,5 +341,23 @@ public class MobileTemplate { public void setRespawnTime(int respawnTime) { this.respawnTime = respawnTime; } + + public List getLootGroups() { + return lootGroups; + } + + public void setLootGroups(List lootGroups) { + this.lootGroups = lootGroups; + } + + public void addToLootGroups(String[] lootPoolNames, double[] lootPoolChances, double lootGroupChance) { + //System.out.println("lootPoolNames[0] " + lootPoolNames[0]); + LootGroup lootGroup = new LootGroup(lootPoolNames, lootPoolChances, lootGroupChance); + this.lootGroups.add(lootGroup); + } + + public Object clone() throws CloneNotSupportedException { + return super.clone(); + } } diff --git a/src/services/spawn/SpawnService.java b/src/services/spawn/SpawnService.java index f8817448..2d30d0c3 100644 --- a/src/services/spawn/SpawnService.java +++ b/src/services/spawn/SpawnService.java @@ -100,6 +100,9 @@ public class SpawnService { creature.setWeaponId(mobileTemplate.getCustomWeapon().getObjectID()); }*/ + if(mobileTemplate.getLootGroups() != null) + creature.setLootGroups(mobileTemplate.getLootGroups()); + creature.setOptionsBitmask(mobileTemplate.getOptionBitmask()); creature.setPvPBitmask(mobileTemplate.getPvpBitmask()); creature.setStfFilename("mob/creature_names"); // TODO: set other STFs for NPCs other than creatures