diff --git a/options.cfg b/options.cfg index cb743c88..5a3a7f8e 100644 --- a/options.cfg +++ b/options.cfg @@ -1,3 +1,3 @@ -LOAD.SNAPSHOT_OBJECTS=0 -LOAD.BUILDOUT_OBJECTS=0 +LOAD.SNAPSHOT_OBJECTS=1 +LOAD.BUILDOUT_OBJECTS=1 LOAD.RESOURCE.SYSTEM=1 \ No newline at end of file diff --git a/scripts/commands/forage.py b/scripts/commands/forage.py index 8d47c825..bce7443e 100644 --- a/scripts/commands/forage.py +++ b/scripts/commands/forage.py @@ -43,7 +43,6 @@ def run(core, actor, target, commandString): oldposition = actor.getAttachment('PostForagePosition') if actor.getPosition().getDistance2D(oldposition)<5: - System.out.println("actor.getPosition().getDistance2D(oldposition) " + actor.getPosition().getDistance2D(oldposition)); actor.sendSystemMessage("@skl_use:sys_forage_empty", 0); return diff --git a/scripts/loot/lootItems/kraytpearl_ancient_flawless.py b/scripts/loot/lootItems/kraytpearl_ancient_flawless.py new file mode 100644 index 00000000..89e55d04 --- /dev/null +++ b/scripts/loot/lootItems/kraytpearl_ancient_flawless.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff'] + +def customItemName(): + + return '' diff --git a/scripts/loot/lootItems/treasureloot/bracelet_of_Inspired_Status(right).py b/scripts/loot/lootItems/treasureloot/bracelet_of_Inspired_Status(right).py index 57fbb45d..6df73bea 100644 --- a/scripts/loot/lootItems/treasureloot/bracelet_of_Inspired_Status(right).py +++ b/scripts/loot/lootItems/treasureloot/bracelet_of_Inspired_Status(right).py @@ -1,7 +1,7 @@ def itemTemplate(): - return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + return ['object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] def customItemName(): diff --git a/scripts/loot/lootItems/treasureloot/counter-toxin_wristband_prototype_IV_(right).py b/scripts/loot/lootItems/treasureloot/counter-toxin_wristband_prototype_IV_(right).py index 13e10f5e..7f34bf48 100644 --- a/scripts/loot/lootItems/treasureloot/counter-toxin_wristband_prototype_IV_(right).py +++ b/scripts/loot/lootItems/treasureloot/counter-toxin_wristband_prototype_IV_(right).py @@ -1,7 +1,7 @@ def itemTemplate(): - return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + return ['object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] def customItemName(): diff --git a/scripts/loot/lootItems/treasureloot/insurgency_wrist_implantat-BLACK-(right).py b/scripts/loot/lootItems/treasureloot/insurgency_wrist_implantat-BLACK-(right).py index 91289dfb..3e748ccf 100644 --- a/scripts/loot/lootItems/treasureloot/insurgency_wrist_implantat-BLACK-(right).py +++ b/scripts/loot/lootItems/treasureloot/insurgency_wrist_implantat-BLACK-(right).py @@ -1,7 +1,7 @@ def itemTemplate(): - return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + return ['object/tangible/wearables/bracelet/shared_bracelet_s06_r.iff'] def customItemName(): diff --git a/scripts/loot/lootItems/treasureloot/insurgent_scanner_wrist_module_(right).py b/scripts/loot/lootItems/treasureloot/insurgent_scanner_wrist_module_(right).py index 9311b78f..3cb1d321 100644 --- a/scripts/loot/lootItems/treasureloot/insurgent_scanner_wrist_module_(right).py +++ b/scripts/loot/lootItems/treasureloot/insurgent_scanner_wrist_module_(right).py @@ -1,7 +1,7 @@ def itemTemplate(): - return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + return ['object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] def customItemName(): diff --git a/scripts/loot/lootItems/treasureloot/jedi_knight_meditation_bracelet_(right).py b/scripts/loot/lootItems/treasureloot/jedi_knight_meditation_bracelet_(right).py index 92ef3974..9dfd3ca8 100644 --- a/scripts/loot/lootItems/treasureloot/jedi_knight_meditation_bracelet_(right).py +++ b/scripts/loot/lootItems/treasureloot/jedi_knight_meditation_bracelet_(right).py @@ -1,7 +1,7 @@ def itemTemplate(): - return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + return ['object/tangible/wearables/bracelet/shared_bracelet_s04_r.iff'] def customItemName(): diff --git a/scripts/loot/lootItems/treasureloot/jedi_knights_wristguard_(right).py b/scripts/loot/lootItems/treasureloot/jedi_knights_wristguard_(right).py index 0056d769..ff605263 100644 --- a/scripts/loot/lootItems/treasureloot/jedi_knights_wristguard_(right).py +++ b/scripts/loot/lootItems/treasureloot/jedi_knights_wristguard_(right).py @@ -1,7 +1,7 @@ def itemTemplate(): - return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + return ['object/tangible/wearables/bracelet/shared_bracelet_s02_r.iff'] def customItemName(): diff --git a/scripts/loot/lootItems/treasureloot/jedi_wristguard(right).py b/scripts/loot/lootItems/treasureloot/jedi_wristguard(right).py index ecc1101b..b8565ab8 100644 --- a/scripts/loot/lootItems/treasureloot/jedi_wristguard(right).py +++ b/scripts/loot/lootItems/treasureloot/jedi_wristguard(right).py @@ -1,7 +1,7 @@ def itemTemplate(): - return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + return ['object/tangible/wearables/bracelet/shared_bracelet_s02_r.iff'] def customItemName(): diff --git a/scripts/loot/lootItems/treasureloot/manufacturing_verdicator_200a_(right).py b/scripts/loot/lootItems/treasureloot/manufacturing_verdicator_200a_(right).py index 0442286f..1817be94 100644 --- a/scripts/loot/lootItems/treasureloot/manufacturing_verdicator_200a_(right).py +++ b/scripts/loot/lootItems/treasureloot/manufacturing_verdicator_200a_(right).py @@ -1,7 +1,7 @@ def itemTemplate(): - return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + return ['object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] def customItemName(): diff --git a/scripts/loot/lootItems/treasureloot/mysterious_data_disk.py b/scripts/loot/lootItems/treasureloot/mysterious_data_disk.py new file mode 100644 index 00000000..e81a23df --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/mysterious_data_disk.py @@ -0,0 +1,9 @@ + +def itemTemplate(): + + return ['object/tangible/loot/generic_usable/shared_datadisk_generic.iff'] + +def customItemName(): + + return 'Mysterious Data Disk' + diff --git a/scripts/loot/lootItems/treasureloot/personnel_comlink_wrist-P4_(right).py b/scripts/loot/lootItems/treasureloot/personnel_comlink_wrist-P4_(right).py index 86de451f..34d0cfca 100644 --- a/scripts/loot/lootItems/treasureloot/personnel_comlink_wrist-P4_(right).py +++ b/scripts/loot/lootItems/treasureloot/personnel_comlink_wrist-P4_(right).py @@ -1,7 +1,7 @@ def itemTemplate(): - return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + return ['object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] def customItemName(): diff --git a/scripts/loot/lootItems/treasureloot/targeter_ranging_wrist_assist_V4_(right).py b/scripts/loot/lootItems/treasureloot/targeter_ranging_wrist_assist_V4_(right).py index 79e0623d..2c2d2d49 100644 --- a/scripts/loot/lootItems/treasureloot/targeter_ranging_wrist_assist_V4_(right).py +++ b/scripts/loot/lootItems/treasureloot/targeter_ranging_wrist_assist_V4_(right).py @@ -1,7 +1,7 @@ def itemTemplate(): - return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + return ['object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] def customItemName(): diff --git a/scripts/loot/lootItems/treasureloot/targeting_assist_wrist_implant_PTI-IV_(right).py b/scripts/loot/lootItems/treasureloot/targeting_assist_wrist_implant_PTI-IV_(right).py index 0c4d1431..adcac454 100644 --- a/scripts/loot/lootItems/treasureloot/targeting_assist_wrist_implant_PTI-IV_(right).py +++ b/scripts/loot/lootItems/treasureloot/targeting_assist_wrist_implant_PTI-IV_(right).py @@ -1,7 +1,7 @@ def itemTemplate(): - return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + return ['object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] def customItemName(): diff --git a/scripts/loot/lootItems/treasureloot/wrist_assault_booster_zulu_(right).py b/scripts/loot/lootItems/treasureloot/wrist_assault_booster_zulu_(right).py index fb8787d9..61695558 100644 --- a/scripts/loot/lootItems/treasureloot/wrist_assault_booster_zulu_(right).py +++ b/scripts/loot/lootItems/treasureloot/wrist_assault_booster_zulu_(right).py @@ -1,7 +1,7 @@ def itemTemplate(): - return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + return ['object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] def customItemName(): diff --git a/scripts/loot/lootItems/treasureloot/wrist_communications_scanner_SCNv4_(right).py b/scripts/loot/lootItems/treasureloot/wrist_communications_scanner_SCNv4_(right).py index b90c0a36..f43a5684 100644 --- a/scripts/loot/lootItems/treasureloot/wrist_communications_scanner_SCNv4_(right).py +++ b/scripts/loot/lootItems/treasureloot/wrist_communications_scanner_SCNv4_(right).py @@ -1,7 +1,7 @@ def itemTemplate(): - return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + return ['object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] def customItemName(): diff --git a/scripts/loot/lootPools/jedi_components_treasure.py b/scripts/loot/lootPools/jedi_components_treasure.py index e69de29b..91c26020 100644 --- a/scripts/loot/lootPools/jedi_components_treasure.py +++ b/scripts/loot/lootPools/jedi_components_treasure.py @@ -0,0 +1,14 @@ + +def itemNames(): + + components = ['jedi_relic_1','jedi_relic_2','colorcrystal'] + components += ['powercrystal_select','powercrystal_premium'] + components += ['kraytpearl_select','kraytpearl_premium','kraytpearl_flawless','kraytpearl_ancient_flawless'] + components += ['jedi_holocron_2_5','jedi_holocron_4_5','sith_holocron_4_5'] + return components + +def itemChances(): + + return [48,2,29,3,2,5,4,1,0.1,5.7,0.1,0.1] #11 + + \ No newline at end of file diff --git a/scripts/loot/lootPools/treasure_extra.py b/scripts/loot/lootPools/treasure_extra.py new file mode 100644 index 00000000..9c6b639d --- /dev/null +++ b/scripts/loot/lootPools/treasure_extra.py @@ -0,0 +1,8 @@ + +def itemNames(): + names = ['mysterious_data_disk'] + + return names + +def itemChances(): + return [100] \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_raider.py b/scripts/mobiles/tatooine/tusken_raider.py index 41542293..f3a3e867 100644 --- a/scripts/mobiles/tatooine/tusken_raider.py +++ b/scripts/mobiles/tatooine/tusken_raider.py @@ -10,6 +10,7 @@ def addTemplate(core): mobileTemplate.setLevel(10) mobileTemplate.setDifficulty(1) mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) templates = Vector() templates.add('object/mobile/shared_tusken_raider.iff') diff --git a/scripts/radial/object/treasuremap.py b/scripts/radial/object/treasuremap.py index 80ab07a3..fe5f7c72 100644 --- a/scripts/radial/object/treasuremap.py +++ b/scripts/radial/object/treasuremap.py @@ -16,7 +16,7 @@ def createRadial(core, owner, target, radials): def handleSelection(core, owner, target, option): if option == 21 and target: - owner.sendSystemMessage('Treasuremap radial',0) + mapPlanet = target.getAttachment('MapPlanet') planet = core.terrainService.getPlanetByID(mapPlanet) if planet==None: diff --git a/scripts/radial/object/treasuremapExtract.py b/scripts/radial/object/treasuremapExtract.py index e4a8bdde..7277620e 100644 --- a/scripts/radial/object/treasuremapExtract.py +++ b/scripts/radial/object/treasuremapExtract.py @@ -16,12 +16,12 @@ def createRadial(core, owner, target, radials): return def handleSelection(core, owner, target, option): - if option == 21 and target: - owner.sendSystemMessage('TreasuremapExtract radial',0) + if option == 21 and target and owner: exactLoc = target.getAttachment('MapExactLocation') - #if owner.getPosition().getDistance2D(exactLoc)<20: - if owner.getPosition().getDistance2D(owner.getPosition())<20: + #if owner.getPosition().getDistance2D(owner.getPosition())<20: + if owner.getPosition().getDistance2D(exactLoc)<20: + target.setAttachment('radial_filename', 'object/usable') owner.sendSystemMessage('@treasure_map/treasure_map:sys_dist_here',0) #spawn guards diff --git a/scripts/radial/object/treasuremapRead.py b/scripts/radial/object/treasuremapRead.py index c3617bf9..bc3e0735 100644 --- a/scripts/radial/object/treasuremapRead.py +++ b/scripts/radial/object/treasuremapRead.py @@ -16,8 +16,7 @@ def createRadial(core, owner, target, radials): def handleSelection(core, owner, target, option): if option == 21 and target: - owner.sendSystemMessage('TreasuremapRead radial',0) - + planetID = target.getAttachment('MapPlanet') if planetID!=owner.getPlanetId(): owner.sendSystemMessage('@treasure_map/treasure_map:wrong_planet',0) diff --git a/src/resources/common/Forager.java b/src/resources/common/Forager.java index 0f027675..f1245db8 100644 --- a/src/resources/common/Forager.java +++ b/src/resources/common/Forager.java @@ -29,8 +29,10 @@ import java.util.Vector; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; +import engine.resources.scene.Quaternion; import main.NGECore; import resources.datatables.Options; +import resources.objects.cell.CellObject; import resources.objects.creature.CreatureObject; import resources.objects.group.GroupObject; import resources.objects.loot.LootGroup; @@ -105,7 +107,9 @@ public class Forager { forager.sendSystemMessage("@skl_use:sys_forage_noroom",(byte) 0); } - chosenObject = 5; + // chosenObject = 5; // To test TMs + if(forager.getClient().isGM()) // Always yield a TM for testing + chosenObject = 5; forager.sendSystemMessage("chosenObject " + chosenObject,(byte) 0); switch (chosenObject) { @@ -150,8 +154,8 @@ public class Forager { int mapPlanetID = new Random().nextInt(mapPlanetIDs.length-1); foragedObject.setAttachment("MapPlanet", mapPlanetIDs[mapPlanetID]); System.out.println("mapPlanetID " + mapPlanetIDs[mapPlanetID]); - //foragedObject.setAttachment("radial_filename", "object/treasuremap"); - foragedObject.setAttachment("radial_filename", "object/treasuremapExtract"); + foragedObject.setAttachment("radial_filename", "object/treasuremap"); + //foragedObject.setAttachment("radial_filename", "object/treasuremapExtract"); foragerInventory.add(foragedObject); forager.sendSystemMessage("",(byte) 0); break; @@ -170,11 +174,11 @@ public class Forager { if (chosenObject>6) adversaryRoll=999; - adversaryRoll=999; + // adversaryRoll=999; // To test TMs - if (adversaryRoll<100) { // 14 + if (adversaryRoll<14) { // 14 100 // To test TMs int adversaryTypeRoll = new Random().nextInt(100); - if (adversaryTypeRoll<1){ + if (adversaryTypeRoll<50){ // wormie spawnWormie(forager); } else { @@ -355,12 +359,15 @@ public class Forager { } public void handleGuardSpawn(CreatureObject owner, TangibleObject map){ - + System.err.println("handleGuardSpawn"); short spawnLevel = (short) map.getAttachment("MapLevel"); //Point3D exactTreasureLocation = (Point3D) map.getAttachment("MapExactLocation"); Point3D exactTreasureLocation = owner.getPosition(); - GroupObject extractorGroup = (GroupObject) NGECore.getInstance().objectService.getObject(owner.getGroupId()); + GroupObject extractorGroup = null; + if (owner.getGroupId()!=0) + extractorGroup = (GroupObject) NGECore.getInstance().objectService.getObject(owner.getGroupId()); + int extractorGroupSize = 1; if (extractorGroup!=null) extractorGroupSize = extractorGroup.getMemberList().size(); @@ -381,12 +388,17 @@ public class Forager { } // spawn treasure container - TangibleObject treasureContainer = (TangibleObject) NGECore.getInstance().staticService.spawnObject("object/tangible/container/drum/shared_treasure_drum.iff", owner.getPlanet().getName(), 0L, exactTreasureLocation.x, exactTreasureLocation.y, exactTreasureLocation.z, 0.70F, 0.71F); + TangibleObject treasureContainer = (TangibleObject) NGECore.getInstance().staticService.spawnObject("object/tangible/container/drum/shared_treasure_drum.iff", owner.getPlanet().getName(), 0L, exactTreasureLocation.x, exactTreasureLocation.y, exactTreasureLocation.z, 0.70F, 0.71F); + +// CreatureObject treasureContainer = (CreatureObject) NGECore.getInstance().objectService.createObject("object/tangible/container/drum/shared_treasure_drum.iff", 0, owner.getPlanet(), exactTreasureLocation, owner.getOrientation()); +// NGECore.getInstance().simulationService.add(treasureContainer, exactTreasureLocation.x, exactTreasureLocation.z, true); + treasureContainer.setAttachment("radial_filename", "object/treasureContainer"); treasureContainer.setAttachment("TreasureExtractorID", owner.getObjectID()); treasureContainer.setAttachment("TreasureGuards",guardList); - //configureTreasureLoot(treasureContainer,owner,spawnLevel); - //NGECore.getInstance().lootService.DropLoot(owner, treasureContainer); + treasureContainer.setAttachment("ChestLevel",new Integer(spawnLevel)); + configureTreasureLoot(treasureContainer,owner,spawnLevel); + NGECore.getInstance().lootService.DropLoot(owner, treasureContainer); owner.sendSystemMessage("@treasure_map/treasure_map:sys_time_limit",(byte)0); @@ -459,17 +471,20 @@ public class Forager { // PROFESSION BRACELETS HOUSE FURNITURE WEARABLE BACKPACKS - String[] lootPoolNames = new String[]{"profession_bracelets_"+levelRange,"house_furniture","wearable_backpacks"}; - int[] lootPoolChances = new int[]{60,30,10}; - int lootGroupChance = 80; +// String[] lootPoolNames = new String[]{"profession_bracelets_"+levelRange,"house_furniture","wearable_backpacks"}; +// double[] lootPoolChances = new double[]{60,30,10}; + String[] lootPoolNames = new String[]{"profession_bracelets_"+levelRange}; + double[] lootPoolChances = new double[]{100}; + double lootGroupChance = 80; treasureContainer.addToLootGroups(lootPoolNames, lootPoolChances, lootGroupChance); // WEAPONSMITH COMPONENTS JEDI COMPONENTS GEM COLLECTION ITEMS TREASURE HUNTER COLLECTION ITEMS - lootPoolNames = new String[]{"weaponsmith_components","jedi_components","gem_collection_items","treasure_hunter_collection_items"}; - lootPoolChances = new int[]{15,25,30,30}; + //lootPoolNames = new String[]{"weaponsmith_components","jedi_components","gem_collection_items","treasure_hunter_collection_items"}; + //lootPoolChances = new double[]{15,25,30,30}; + lootPoolNames = new String[]{"jedi_components_treasure"}; + lootPoolChances = new double[]{100}; lootGroupChance = 80; treasureContainer.addToLootGroups(lootPoolNames, lootPoolChances, lootGroupChance); - // COMMON LOOTS: // Looted non-wearable Bounty Hunter armor pieces (Used to make Mandalorian armor at the Death Watch Bunker) @@ -480,23 +495,23 @@ public class Forager { // Advanced Power Stim (CL80) // Loot kits adhesives // Various Schematics - lootPoolNames = new String[]{"bh_armor_for_mando","advanced_stims_80","loot_kits_adhesives","various_schematics"}; - lootPoolChances = new int[]{15,25,30,30}; - lootGroupChance = 80; - treasureContainer.addToLootGroups(lootPoolNames, lootPoolChances, lootGroupChance); - +// lootPoolNames = new String[]{"bh_armor_for_mando","advanced_stims_80","loot_kits_adhesives","various_schematics"}; +// lootPoolChances = new double[]{15,25,30,30}; +// lootGroupChance = 80; +// treasureContainer.addToLootGroups(lootPoolNames, lootPoolChances, lootGroupChance); +// //GEM COLLECTION ITEMS CONSUMABLE BUFF ITEMS // VERY RARE BUFF ITEMS lootPoolNames = new String[]{"rare_buff_items"}; - lootPoolChances = new int[]{100}; - lootGroupChance = 1; + lootPoolChances = new double[]{100}; + lootGroupChance = 0.1; treasureContainer.addToLootGroups(lootPoolNames, lootPoolChances, lootGroupChance); // EXTRA - lootPoolNames = new String[]{"Mysterious Data Disk"}; - lootPoolChances = new int[]{100}; + lootPoolNames = new String[]{"treasure_extra"}; + lootPoolChances = new double[]{100}; lootGroupChance = 50; treasureContainer.addToLootGroups(lootPoolNames, lootPoolChances, lootGroupChance); diff --git a/src/resources/objects/loot/LootGroup.java b/src/resources/objects/loot/LootGroup.java index e349eaac..1c626c05 100644 --- a/src/resources/objects/loot/LootGroup.java +++ b/src/resources/objects/loot/LootGroup.java @@ -31,20 +31,20 @@ import com.sleepycat.persist.model.Persistent; public class LootGroup { private String[] lootPoolNames; - private int[] lootPoolChances; - private int lootGroupChance; + private double[] lootPoolChances; + private double lootGroupChance; public LootGroup(){ } - public LootGroup(String[] lootPoolNames, int[] lootPoolChances, int lootGroupChance){ + public LootGroup(String[] lootPoolNames, double[] lootPoolChances, double lootGroupChance){ this.lootPoolNames = lootPoolNames; this.lootPoolChances = lootPoolChances; this.lootGroupChance = lootGroupChance; } - public void addLootData(String[] lootPoolNames, int[] lootPoolChances, int lootGroupChance){ + public void addLootData(String[] lootPoolNames, double[] lootPoolChances, double lootGroupChance){ this.lootPoolNames = lootPoolNames; this.lootPoolChances = lootPoolChances; this.lootGroupChance = lootGroupChance; @@ -54,11 +54,11 @@ public class LootGroup { return lootPoolNames; } - public int[] getLootPoolChances() { + public double[] getLootPoolChances() { return lootPoolChances; } - public int getLootGroupChance() { + public double getLootGroupChance() { return lootGroupChance; } } diff --git a/src/resources/objects/tangible/TangibleObject.java b/src/resources/objects/tangible/TangibleObject.java index 4efc2c4c..4a5f11c3 100644 --- a/src/resources/objects/tangible/TangibleObject.java +++ b/src/resources/objects/tangible/TangibleObject.java @@ -54,7 +54,7 @@ import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -@Persistent(version=11) +@Persistent(version=12) public class TangibleObject extends SWGObject { // TODO: Thread safety @@ -495,7 +495,7 @@ public class TangibleObject extends SWGObject { return lootGroups; } - public void addToLootGroups(String[] lootPoolNames, int[] lootPoolChances, int lootGroupChance) { + 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); diff --git a/src/services/DevService.java b/src/services/DevService.java index d51a01c4..8a3ce949 100644 --- a/src/services/DevService.java +++ b/src/services/DevService.java @@ -1230,8 +1230,9 @@ public class DevService implements INetworkDispatch { deed.setBMR(15); deed.setAttributes(); inventory.add(deed); + return; - + case 125: TangibleObject genericCraftingTool = (TangibleObject) core.objectService.createObject("object/tangible/crafting/station/shared_generic_tool.iff", planet); genericCraftingTool.setCustomName("Generic Crafting Tool"); diff --git a/src/services/LootService.java b/src/services/LootService.java index eabfc27a..1105e13c 100644 --- a/src/services/LootService.java +++ b/src/services/LootService.java @@ -101,7 +101,15 @@ public class LootService implements INetworkDispatch { public void DropLoot(CreatureObject requester, TangibleObject lootedObject) { - GroupObject group = (GroupObject) core.objectService.getObject(requester.getGroupId()); + if (requester==null || lootedObject==null) + return; //QA + + GroupObject group = null; + if(requester.getGroupId()!=0) + group = (GroupObject) core.objectService.getObject(requester.getGroupId()); + + if (lootedObject.getKiller()==null) + lootedObject.setKiller(requester); if (lootedObject.isLooted() || lootedObject.isLootLock() || (group == null && !lootedObject.getKiller().equals(requester)) || (group != null && !group.getMemberList().contains(lootedObject.getKiller()))) return; @@ -124,8 +132,8 @@ public class LootService implements INetworkDispatch { while (iterator.hasNext()){ LootGroup lootGroup = iterator.next(); - int groupChance = lootGroup.getLootGroupChance(); - int lootGroupRoll = new Random().nextInt(100); + double groupChance = lootGroup.getLootGroupChance(); + double lootGroupRoll = new Random().nextDouble()*100; if (projectionCoefficientMatrixModulo!=0) lootGroupRoll=groupChance+1; if (lootGroupRoll <= groupChance){ @@ -168,7 +176,9 @@ public class LootService implements INetworkDispatch { } SWGObject lootedObjectInventory = lootedObject.getSlottedObject("inventory"); - System.out.println("lootedObjectInventory " + lootedObjectInventory.getTemplate()); + if (lootedObjectInventory==null || lootedObject.getTemplate().startsWith("object/tangible/container/drum/shared_treasure_drum.iff")) + lootedObjectInventory = lootedObject; // In case we don't know what we are dealing with + // For autoloot //SWGObject requesterInventory = requester.getSlottedObject("inventory"); @@ -193,7 +203,7 @@ public class LootService implements INetworkDispatch { private void handleLootGroup(LootGroup lootGroup,LootRollSession lootRollSession){ - int[] lootPoolChances = lootGroup.getLootPoolChances(); + double[] lootPoolChances = lootGroup.getLootPoolChances(); String[] lootPoolNames = lootGroup.getLootPoolNames(); if (lootPoolChances==null || lootPoolNames==null){ System.err.println("Lootpools are null!"); @@ -204,8 +214,8 @@ public class LootService implements INetworkDispatch { return; } - int randomItemFromGroup = new Random().nextInt(100); - int remainder = 0; // [10,20,30,34,5,1] + double randomItemFromGroup = new Random().nextDouble()*100; + double remainder = 0; // [10,20,30,34,5,1] for(int i=0;i itemNames = (Vector)core.scriptService.fetchStringVector(path,"itemNames"); - Vector itemChances = (Vector)core.scriptService.fetchIntegerVector(path,"itemChances"); + Vector itemChances = (Vector)core.scriptService.fetchDoubleVector(path,"itemChances"); - int randomItemFromPool = new Random().nextInt(100); + double randomItemFromPool = new Random().nextDouble()*100; int remainder = 0; // [10,20,30,34,5,1] for (int i=0;i0){ - droppedItem.setStringAttribute("required_profession", requiredProfession); + droppedItem.setStringAttribute("class_required", requiredProfession); } if (requiredFaction.length()>0){ @@ -577,6 +588,29 @@ public class LootService implements INetworkDispatch { if (lootedObject instanceof TangibleObject){ // This is for chests etc. // Check the py script + + // Treasure chest + if (lootedObject.getTemplate().equals("object/tangible/container/drum/shared_treasure_drum.iff")){ + GroupObject group = null; + if(requester.getGroupId()!=0) + group = (GroupObject) core.objectService.getObject(requester.getGroupId()); + int creditGroupMultiplier = 1; + if (group!=null) + creditGroupMultiplier = group.getMemberList().size(); + + int creatureCL = (int)lootedObject.getAttachment("ChestLevel"); + + if (creatureCL<=0) + creatureCL=1; + //creatureCL = 90; + int maximalCredits = (int)Math.floor(4*creatureCL + creatureCL*creatureCL*4/100); + int minimalCredits = (int)Math.floor(creatureCL*2 + maximalCredits/2); + int spanOfCredits = maximalCredits - minimalCredits; + if (spanOfCredits<=0) + spanOfCredits=1; + + lootedCredits = creditGroupMultiplier * (minimalCredits + new Random().nextInt(spanOfCredits)); + } } TangibleObject droppedCredits = createDroppedItem("object/tangible/item/shared_loot_cash.iff",requester.getPlanet()); @@ -648,7 +682,7 @@ public class LootService implements INetworkDispatch { droppedItem.getAttributes().put("@obj_attr_n:condition", "100/100"); droppedItem.getAttributes().put("@obj_attr_n:crystal_owner", "\\#D1F56F UNTUNED \\#FFFFFF "); droppedItem.getAttributes().put("@obj_attr_n:crystal_quality", qualityString); - droppedItem.setAttachment("radial_filename", "tunable"); + droppedItem.setAttachment("radial_filename", "item/tunable"); } private void handlePowerCrystal(TangibleObject droppedItem) { @@ -688,7 +722,7 @@ public class LootService implements INetworkDispatch { droppedItem.getAttributes().put("@obj_attr_n:condition", "100/100"); droppedItem.getAttributes().put("@obj_attr_n:crystal_owner", "\\#D1F56F UNTUNED \\#FFFFFF "); droppedItem.getAttributes().put("@obj_attr_n:crystal_quality", qualityString); - droppedItem.setAttachment("radial_filename", "tunable"); + droppedItem.setAttachment("radial_filename", "item/tunable"); } private void setWeaponStat(WeaponObject weapon, String statName, String minValue, String maxValue){ diff --git a/src/services/ScriptService.java b/src/services/ScriptService.java index c7bac81d..dab378b5 100644 --- a/src/services/ScriptService.java +++ b/src/services/ScriptService.java @@ -140,4 +140,14 @@ public class ScriptService { return vector; } + public Vector fetchDoubleVector(String path, String method) { + Vector vector = new Vector(); + PyObject result = core.scriptService.callScript(path, "", method); + Iterable comp = (Iterable)result.asIterable(); + for (Iterator temp = comp.iterator(); temp.hasNext();){ + vector.add(temp.next().asDouble()); + } + return vector; + } + } diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index 358ad44a..7d569bdd 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -338,7 +338,13 @@ public class ObjectService implements INetworkDispatch { object = new Player_House_Deed(objectID, planet, Template, position, orientation); - } else if(Template.startsWith("object/tangible")) { + } +// else if(Template.startsWith("object/tangible/container/drum/shared_treasure_drum.iff")) { +// +// object = new CreatureObject(objectID, planet, position, orientation, Template); +// +// } + else if(Template.startsWith("object/tangible")) { object = new TangibleObject(objectID, planet, Template, position, orientation);