diff --git a/ngengine_public.jar b/ngengine_public.jar index beacd257..901385d6 100644 Binary files a/ngengine_public.jar and b/ngengine_public.jar differ diff --git a/scripts/static_spawns/corellia/corellia.py b/scripts/static_spawns/corellia/corellia.py new file mode 100644 index 00000000..0df29b32 --- /dev/null +++ b/scripts/static_spawns/corellia/corellia.py @@ -0,0 +1,13 @@ + +import sys +from resources.datatables import Options +from resources.datatables import StateStatus + + +def addPlanetSpawns(core, planet): +#This Script is no longer to be used for NPC Scripting. - Levarris + + + + + return diff --git a/scripts/static_spawns/corellia/coronet.py b/scripts/static_spawns/corellia/coronet.py new file mode 100644 index 00000000..c04fe03e --- /dev/null +++ b/scripts/static_spawns/corellia/coronet.py @@ -0,0 +1,125 @@ +import sys +from resources.datatables import Options +from resources.datatables import StateStatus + +def addPlanetSpawns(core, planet): + + stcSvc = core.staticService + +#-Coronet + ralMundi = stcSvc.spawnObject('object/mobile/shared_dressed_noble_fat_twilek_male_02.iff', 'corellia', long(0), float(-138.975), float(28), float(-4718.86), float(-0.97), float(0.21)) + ralMundi.setCustomName2('Ral Mundi') + ralMundi.setOptionsBitmask(256) + + ioTsomcren = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_moncal_male_01.iff', 'corellia', long(0), float(-140.701), float(28), float(-4719.16), float(-0.97), float(0.21)) + ioTsomcren.setCustomName2('Io Tsomcren') + ioTsomcren.setOptionsBitmask(256) + + tarthJax = stcSvc.spawnObject('object/mobile/shared_dressed_binayre_pirate_zabrak_male_01.iff', 'corellia', long(0), float(-137.464), float(28), float(-4718.83), float(-0.97), float(0.21)) + tarthJax.setCustomName2('Tarth Jaxx') + tarthJax.setOptionsBitmask(256) + + rebCoord = stcSvc.spawnObject('object/mobile/shared_dressed_rebel_communication_female_01.iff', 'corellia', long(0), float(94.8749), float(28), float(-4519.08), float(-0.97), float(0.21)) + rebCoord.setCustomName2('Rebel Coordinator') + rebCoord.setOptionsBitmask(264) + + huntrJavz = stcSvc.spawnObject('object/mobile/ep3/shared_ep3_rodian_hunter_m.iff', 'corellia', long(0), float(-51.79), float(28), float(-4662.65), float(0.11), float(0.21)) + huntrJavz.setCustomName2('Hunter Javeezo') + huntrJavz.setOptionsBitmask(256) + + dw_heraldRebel = stcSvc.spawnObject('object/mobile/shared_dressed_rebel_general_moncal_male_01.iff', 'corellia', long(0), float(-213.64), float(28), float(-4445.46), float(-0.97), float(0.21)) + dw_heraldRebel.setCustomName2('Lutin Nightstalker') + dw_heraldRebel.setOptionsBitmask(256) + +#---Coronet-CityHall-interrior + brantlee = stcSvc.spawnObject('object/mobile/shared_dressed_brantlee_spondoon.iff', 'corellia', long(1855463), float(-25.7), float(1.3), float(-0.5), float(0.98), float(0.01)) + brantlee.setCustomName2('Brantlee Spondoon') + brantlee.setOptionsBitmask(256) + + cor_brawlr00 = stcSvc.spawnObject('object/mobile/shared_dressed_brawler_trainer_01.iff', 'corellia', long(1855463), float(-1.7274), float(7.9), float(-32.175), float(0.5), float(0.01)) + cor_brawlr00.setCustomName2('a brawler') + + cor_btdiplmt02 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_bothan_male_01.iff', 'corellia', long(1855463), float(5.228), float(0.3), float(2.9167), float(-0.47), float(0.21)) + cor_btdiplmt02.setCustomName2('a Bothan Diplomat') + + cor_btinfobkr00 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_bothan_female_02.iff', 'corellia', long(1855463), float(5.228), float(0.3), float(4.016), float(0.99), float(0.01)) + cor_btinfobkr00.setCustomName2('a Bothan Information Broker') + + cor_btinfobkr01 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_bothan_male_02.iff', 'corellia', long(1855463), float(5.345), float(2.278), float(-27.0615), float(-0.14), float(0.22)) + cor_btinfobkr01.setCustomName2('a Bothan Information Broker') + + cor_ent00 = stcSvc.spawnObject('object/mobile/shared_dressed_twk_entertainer.iff', 'corellia', long(1855463), float(0.767877), float(0.3), float(-2.902), float(-0.50), float(0.11)) + cor_ent00.setCustomName2('an Entertainer') + + cor_farmer00 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_human_male_02.iff', 'corellia', long(1855463), float(-18.6014), float(1.3026), float(-11.314), float(-0.45), float(0.21)) + cor_farmer00.setCustomName2('a farmer') + + cor_farmer01 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_human_female_01.iff', 'corellia', long(1855463), float(0.767877), float(0.3), float(-4.002), float(-0.45), float(0.21)) + cor_farmer01.setCustomName2('a farmer') + + galluraHanderin = stcSvc.spawnObject('object/mobile/shared_dressed_noble_human_female_02.iff', 'corellia', long(1855463), float(-6.51554), float(1.303), float(9.6562), float(0.1), float(0.01)) + galluraHanderin.setCustomName2('Gallura Handerin') + galluraHanderin.setOptionsBitmask(256) + + corsec_agent00 = stcSvc.spawnObject('object/mobile/shared_dressed_corellia_local_corsec_chief.iff', 'corellia', long(1855463), float(-0.332), float(0.3), float(-2.902), float(0.89), float(0.01)) + corsec_agent00.setCustomName2('a CorSec Agent') + + thaleDustrunner = stcSvc.spawnObject('object/mobile/shared_dressed_criminal_smuggler_human_male_01.iff', 'corellia', long(1855463), float(-0.05), float(3.078), float(-10.9388), float(0.99), float(0.11)) + thaleDustrunner.setCustomName2('Thale Dustrunner') + thaleDustrunner.setOptionsBitmask(256) + +#---Coronet-StarPort-interrior + cor_btdiplmt00 = stcSvc.spawnObject('object/mobile/shared_dressed_noble_bothan_female_01.iff', 'corellia', long(1855678), float(56.669), float(-0.521137), float(33.7689), float(0.99), float(0.11)) + cor_btdiplmt00.setCustomName2('a Bothan Diplomat') + + cor_btdiplmt01 = stcSvc.spawnObject('object/mobile/shared_dressed_noble_bothan_male_01.iff', 'corellia', long(1855672), float(8.651), float(0.6394), float(74.448), float(-0.47), float(0.21)) + cor_btdiplmt01.setCustomName2('a Bothan Diplomat') + + corsec_cadt00 = stcSvc.spawnObject('object/mobile/shared_dressed_corsec_pilot_human_female_01.iff', 'corellia', long(1855678), float(37.163), float(0.6394), float(40.706), float(0.99), float(0.11)) + corsec_cadt00.setCustomName2('a CorSec cadet') + + farmer02 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_human_male_04.iff', 'corellia', long(1855683), float(-62.767), float(2.6394), float(40.66), float(-0.45), float(0.21)) + farmer02.setCustomName2('a farmer') + + gambler00 = stcSvc.spawnObject('object/mobile/ep3/shared_ep3_cheated_gambler.iff', 'corellia', long(1855675), float(-4.61669), float(0.6394), float(67.826), float(0.99), float(0.11)) + gambler00.setCustomName2('a gambler') + + cor_hunter00 = stcSvc.spawnObject('object/mobile/shared_dressed_trader_thug_male_moncal_02.iff', 'corellia', long(1855672), float(8.651), float(0.6394), float(75.548), float(0.99), float(0.11)) + cor_hunter00.setCustomName2('a hunter') + + jessbConvorr = stcSvc.spawnObject('object/mobile/shared_dressed_corellia_jesseb_convorr.iff', 'corellia', long(1855684), float(50.2), float(1.0), float(20.1), float(-0.47), float(0.21)) + jessbConvorr.setCustomName2('Jesseb Convorr') + jessbConvorr.setOptionsBitmask(256) + + cor_merc00 = stcSvc.spawnObject('object/mobile/shared_dressed_mercenary_strong_hum_m.iff', 'corellia', long(1855683), float(-62.767), float(2.6394), float(41.76), float(0.99), float(0.11)) + cor_merc00.setCustomName2('a mercenary') + + cor_miner00 = stcSvc.spawnObject('object/mobile/shared_dressed_mand_miner_hum_03.iff', 'corellia', long(1855678), float(37.163), float(0.6394), float(39.606), float(-0.47), float(0.21)) + cor_miner00.setCustomName2('a miner') + + cor_scintst00 = stcSvc.spawnObject('object/mobile/shared_dressed_twi_female_scientist_01.iff', 'corellia', long(1855678), float(56.669), float(-0.521137), float(32.6689), float(-0.47), float(0.21)) + cor_scintst00.setCustomName2('a Scientist') + + cor_slice00 = stcSvc.spawnObject('object/mobile/shared_dressed_criminal_slicer_human_male_01.iff', 'corellia', long(1855675), float(-4.61669), float(0.6394), float(66.7263), float(-0.5), float(0.21)) + cor_slice00.setCustomName2('a slicer') + +#-Coronet-Legacy NPCs + stregand = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_bith_male_01.iff', 'corellia', long(0), float(-33), float(28), float(-4424), float(0.67), float(0.21)) + stregand.setCustomName2('Stregand') + stregand.setOptionsBitmask(256) + + borgan = stcSvc.spawnObject('object/creature/npc/base/shared_whiphid_base_male.iff', 'corellia', long(0), float(-34.4), float(28), float(-4418.2), float(0.75), float(0.21)) + borgan.setCustomName2('Borgan') + borgan.setOptionsBitmask(256) + + #Lt. Joth - wrong appearance - looking for a bearded guy with BLUE CorSec Jacket + ltJoth = stcSvc.spawnObject('object/mobile/shared_dressed_corellia_cec_officer.iff', 'corellia', long(0), float(-283), float(28), float(-4697), float(0.07), float(0.11)) + ltJoth.setCustomName2('Lieutenant Joth') + ltJoth.setOptionsBitmask(256) + + mackJasper = stcSvc.spawnObject('object/mobile/shared_dressed_corsec_officer_human_male_01.iff', 'corellia', long(0), float(-68.2), float(28), float(-4631.8), float(-0.97), float(0.21)) + mackJasper.setCustomName2('Lieutenant Mack Jasper') + mackJasper.setOptionsBitmask(256) + + + return \ No newline at end of file diff --git a/src/resources/buffs/Buff.java b/src/resources/buffs/Buff.java index 24d4937f..72728526 100644 --- a/src/resources/buffs/Buff.java +++ b/src/resources/buffs/Buff.java @@ -45,7 +45,7 @@ public class Buff implements IDelta, Serializable { private static final long serialVersionUID = 1L; @NotPersistent - private transient SimpleBufferAllocator bufferPool = new SimpleBufferAllocator(); + private transient static SimpleBufferAllocator bufferPool = new SimpleBufferAllocator(); private String group1, group2; private int priority; private float duration; diff --git a/src/resources/objects/Delta.java b/src/resources/objects/Delta.java index 6e57706e..19033f03 100644 --- a/src/resources/objects/Delta.java +++ b/src/resources/objects/Delta.java @@ -38,7 +38,7 @@ public abstract class Delta implements IDelta, Serializable { private static final long serialVersionUID = 1L; @NotPersistent - protected transient final Object objectMutex = new Object(); + protected transient Object objectMutex = new Object(); @NotPersistent private transient static SimpleBufferAllocator bufferPool = new SimpleBufferAllocator(); @@ -46,6 +46,10 @@ public abstract class Delta implements IDelta, Serializable { } + public void init() { + objectMutex = new Object(); + } + protected String getAsciiString(ByteBuffer buffer) { return StringUtilities.getAsciiString(buffer); } diff --git a/src/resources/objects/SWGList.java b/src/resources/objects/SWGList.java index 13e1854d..9316760e 100644 --- a/src/resources/objects/SWGList.java +++ b/src/resources/objects/SWGList.java @@ -59,7 +59,7 @@ public class SWGList implements List, Serializable { private byte viewType; private short updateType; @NotPersistent - protected transient final Object objectMutex = new Object(); + protected transient Object objectMutex = new Object(); public SWGList() { } @@ -69,6 +69,11 @@ public class SWGList implements List, Serializable { this.updateType = (short) updateType; } + public void init() { + objectMutex = new Object(); + updateCounter = 1; + } + @Override public boolean add(E e) { synchronized(objectMutex) { @@ -420,7 +425,7 @@ public class SWGList implements List, Serializable { messageBuilder.sendListDelta(viewType, updateType, buffer); } - + @Override public boolean removeIf(Predicate filter) { return false; @@ -433,20 +438,17 @@ public class SWGList implements List, Serializable { @Override public Stream stream() { - // TODO Auto-generated method stub - return null; + return list.stream(); } @Override public Stream parallelStream() { - // TODO Auto-generated method stub - return null; + return list.parallelStream(); } @Override public void forEach(Consumer action) { - // TODO Auto-generated method stub - + list.forEach(action); } @Override diff --git a/src/resources/objects/SWGMap.java b/src/resources/objects/SWGMap.java index ffd380af..8d873024 100644 --- a/src/resources/objects/SWGMap.java +++ b/src/resources/objects/SWGMap.java @@ -60,7 +60,7 @@ public class SWGMap implements Map, Serializable { private byte viewType; private short updateType; @NotPersistent - protected transient final Object objectMutex = new Object(); + protected transient Object objectMutex = new Object(); public SWGMap() { } @@ -80,6 +80,10 @@ public class SWGMap implements Map, Serializable { } } + public void init() { + objectMutex = new Object(); + } + public void clear() { throw new UnsupportedOperationException(); } @@ -305,8 +309,7 @@ public class SWGMap implements Map, Serializable { @Override public void forEach(BiConsumer action) { - // TODO Auto-generated method stub - + map.forEach(action); } @Override diff --git a/src/resources/objects/SWGMultiMap.java b/src/resources/objects/SWGMultiMap.java index 22659c1b..a2126a3b 100644 --- a/src/resources/objects/SWGMultiMap.java +++ b/src/resources/objects/SWGMultiMap.java @@ -63,7 +63,7 @@ public class SWGMultiMap implements Multimap, Serializable { private byte viewType; private short updateType; @NotPersistent - protected transient final Object objectMutex = new Object(); + protected transient Object objectMutex = new Object(); public SWGMultiMap() { } @@ -83,6 +83,10 @@ public class SWGMultiMap implements Multimap, Serializable { } } + public void init() { + objectMutex = new Object(); + } + public Map> asMap() { synchronized(objectMutex) { return map.asMap(); diff --git a/src/resources/objects/building/BuildingObject.java b/src/resources/objects/building/BuildingObject.java index bd8afc56..431f3d61 100644 --- a/src/resources/objects/building/BuildingObject.java +++ b/src/resources/objects/building/BuildingObject.java @@ -260,6 +260,7 @@ public class BuildingObject extends TangibleObject implements IPersistent, Seria public void initAfterDBLoad() { super.init(); messageBuilder = new BuildingMessageBuilder(this); + defendersList = new Vector(); } public ObjectMessageBuilder getMessageBuilder() { diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index eed37aa2..d31c5c36 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -209,11 +209,19 @@ public class CreatureObject extends TangibleObject implements Serializable { @Override public void initAfterDBLoad() { super.init(); + defendersList = new Vector(); duelList = Collections.synchronizedList(new ArrayList()); cooldowns = new ConcurrentHashMap(); performanceAudience = new Vector(); messageBuilder = new CreatureMessageBuilder(this); - + dotList.init(); + buffList.init(); + equipmentList.init(); + appearanceEquipmentList.init(); + missionCriticalObjects.init(); + abilities.init(); + skillMods.init(); + skillMods.forEach((name, skillMod) -> skillMod.init()); } private void loadTemplateData() { @@ -1072,9 +1080,7 @@ public class CreatureObject extends TangibleObject implements Serializable { } public SWGList getEquipmentList() { - synchronized(objectMutex) { return equipmentList; - } } public SWGList getBuffList() { diff --git a/src/resources/objects/guild/GuildObject.java b/src/resources/objects/guild/GuildObject.java index fe01d97a..e614df21 100644 --- a/src/resources/objects/guild/GuildObject.java +++ b/src/resources/objects/guild/GuildObject.java @@ -92,6 +92,13 @@ public class GuildObject extends UniverseObject implements Serializable { public void initAfterDBLoad() { super.init(); messageBuilder = new GuildMessageBuilder(this); + guildList.init(); + currentServerGCWZonePercentMap.init(); + currentServerGCWTotalPercentMap.init(); + currentServerGCWZoneHistoryMap.init(); + currentServerGCWTotalHistoryMap.init(); + otherServerGCWZonePercentMap.init(); + otherServerGCWTotalPercentMap.init(); } diff --git a/src/resources/objects/harvester/HarvesterObject.java b/src/resources/objects/harvester/HarvesterObject.java index 87cc8ea1..42300a49 100644 --- a/src/resources/objects/harvester/HarvesterObject.java +++ b/src/resources/objects/harvester/HarvesterObject.java @@ -38,6 +38,7 @@ import resources.objects.installation.InstallationMessageBuilder; import resources.objects.installation.InstallationObject; import resources.objects.resource.GalacticResource; import resources.objects.resource.ResourceContainerObject; +import resources.objects.tangible.TangibleObject; /** * @author Charon @@ -138,6 +139,10 @@ public class HarvesterObject extends InstallationObject implements Serializable super.init(); messageBuilder = new HarvesterMessageBuilder(this); installationMessageBuilder = new InstallationMessageBuilder((InstallationObject)this); + outputHopperContent.forEach(ResourceContainerObject::initAfterDBLoad); + if(selectedHarvestResource != null) + selectedHarvestResource.initAfterDBLoad(); + defendersList = new Vector(); } diff --git a/src/resources/objects/installation/InstallationObject.java b/src/resources/objects/installation/InstallationObject.java index a31fc02e..c6269dc3 100644 --- a/src/resources/objects/installation/InstallationObject.java +++ b/src/resources/objects/installation/InstallationObject.java @@ -22,6 +22,7 @@ package resources.objects.installation; import java.io.Serializable; +import java.util.Vector; import com.sleepycat.persist.model.Entity; @@ -52,6 +53,7 @@ public class InstallationObject extends TangibleObject implements Serializable { public void initAfterDBLoad() { super.init(); messageBuilder = new InstallationMessageBuilder(this); + defendersList = new Vector(); } public ObjectMessageBuilder getMessageBuilder() { diff --git a/src/resources/objects/mission/MissionObject.java b/src/resources/objects/mission/MissionObject.java index a5e4d195..47a8f07b 100644 --- a/src/resources/objects/mission/MissionObject.java +++ b/src/resources/objects/mission/MissionObject.java @@ -80,6 +80,8 @@ public class MissionObject extends IntangibleObject implements Serializable { public void initAfterDBLoad() { super.init(); messageBuilder = new MissionMessageBuilder(this); + if(attachedWaypoint != null) + attachedWaypoint.initAfterDBLoad(); } public int getMissionLevel() { diff --git a/src/resources/objects/tangible/TangibleObject.java b/src/resources/objects/tangible/TangibleObject.java index 48c84449..6b9f01a2 100644 --- a/src/resources/objects/tangible/TangibleObject.java +++ b/src/resources/objects/tangible/TangibleObject.java @@ -76,7 +76,7 @@ public class TangibleObject extends SWGObject implements Serializable { protected String faction = ""; // Says you're "Imperial Special Forces" if it's 0 for some reason protected int factionStatus = 0; @NotPersistent - private transient Vector defendersList = new Vector(); // unused in packets but useful for the server + protected transient Vector defendersList = new Vector(); // unused in packets but useful for the server @NotPersistent private transient TangibleMessageBuilder messageBuilder; diff --git a/src/resources/objects/tool/SurveyTool.java b/src/resources/objects/tool/SurveyTool.java index 0badcabd..e9337445 100644 --- a/src/resources/objects/tool/SurveyTool.java +++ b/src/resources/objects/tool/SurveyTool.java @@ -92,6 +92,7 @@ public class SurveyTool extends TangibleObject implements Serializable { this.exceptionalState = false; surveyEffectString = ""; sampleEffectString = ""; + defendersList = new Vector(); } public SurveyTool(long objectID, Planet planet, String template, Point3D position, Quaternion orientation){ diff --git a/src/resources/objects/weapon/WeaponObject.java b/src/resources/objects/weapon/WeaponObject.java index 65d15a72..46526b1b 100644 --- a/src/resources/objects/weapon/WeaponObject.java +++ b/src/resources/objects/weapon/WeaponObject.java @@ -22,6 +22,7 @@ package resources.objects.weapon; import java.io.Serializable; +import java.util.Vector; import resources.datatables.WeaponType; import resources.objects.tangible.TangibleObject; @@ -67,6 +68,7 @@ public class WeaponObject extends TangibleObject implements Serializable { public void initAfterDBLoad() { super.init(); messageBuilder = new WeaponMessageBuilder(this); + defendersList = new Vector(); } public int getIncapTimer() { diff --git a/src/services/bazaar/BazaarService.java b/src/services/bazaar/BazaarService.java index b6e542b1..c94feb02 100644 --- a/src/services/bazaar/BazaarService.java +++ b/src/services/bazaar/BazaarService.java @@ -94,6 +94,10 @@ public class BazaarService implements INetworkDispatch { while(cursor.hasNext()) { addAuctionItem((AuctionItem) cursor.next()); } + auctionItems.stream().map(AuctionItem::getItem).forEach(obj -> { + obj.initAfterDBLoad(); + obj.viewChildren(obj, true, true, obj2 -> obj2.initAfterDBLoad()); + }); cursor.close(); } diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index c3ec991e..b15e8cbe 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -806,26 +806,18 @@ public class ObjectService implements INetworkDispatch { objectList.put(creature.getObjectID(), creature); - creature.viewChildren(creature, true, true, new Traverser() { - - @Override - public void process(SWGObject object) { - objectList.put(object.getObjectID(), object); - } - + creature.viewChildren(creature, true, true, (object) -> { + objectList.put(object.getObjectID(), object); }); - creature.viewChildren(creature, true, true, new Traverser() { - - @Override - public void process(SWGObject object) { - if(object.getParentId() != 0 && object.getContainer() == null) - object.setParent(getObject(object.getParentId())); - object.getContainerInfo(object.getTemplate()); - if(getObject(object.getObjectID()) == null) - objectList.put(object.getObjectID(), object); - } - + creature.viewChildren(creature, true, true, (object) -> { + if(object.getMutex() == null) + object.initAfterDBLoad(); + if(object.getParentId() != 0 && object.getContainer() == null) + object.setParent(getObject(object.getParentId())); + object.getContainerInfo(object.getTemplate()); + if(getObject(object.getObjectID()) == null) + objectList.put(object.getObjectID(), object); }); if(creature.getParentId() != 0) {