From 14f774447fd568dd7b241b07d031554548baa948 Mon Sep 17 00:00:00 2001 From: CharonInferar Date: Mon, 21 Apr 2014 03:23:07 +0200 Subject: [PATCH] More Treasure map work Mysterious disk radials implemented Treasure guards added --- .../loot/lootPools/consumable_buff_items.py | 0 .../loot/lootPools/gem_collection_items.py | 0 scripts/loot/lootPools/house_furniture.py | 0 .../lootPools/jedi_components_treasure.py | 0 .../loot/lootPools/profession_bracelets_61.py | 0 .../loot/lootPools/profession_bracelets_75.py | 0 .../loot/lootPools/profession_bracelets_85.py | 0 scripts/loot/lootPools/rare_buff_items.py | 0 .../treasure_hunter_collection_items.py | 0 scripts/loot/lootPools/wearable_backpacks.py | 0 scripts/mobiles/forage/goon.py | 2 +- scripts/mobiles/forage/treasure_guard.py | 57 +++++ scripts/mobiles/tatooine/womprat.py | 4 + scripts/radial/object/treasureContainer.py | 35 +++ scripts/radial/object/treasuremap.py | 71 ++++++ scripts/radial/object/treasuremapExtract.py | 35 +++ scripts/radial/object/treasuremapRead.py | 58 +++++ src/resources/common/Forager.java | 219 ++++++++++++++++-- src/services/LootService.java | 23 +- src/services/chat/ChatService.java | 11 +- 20 files changed, 485 insertions(+), 30 deletions(-) create mode 100644 scripts/loot/lootPools/consumable_buff_items.py create mode 100644 scripts/loot/lootPools/gem_collection_items.py create mode 100644 scripts/loot/lootPools/house_furniture.py create mode 100644 scripts/loot/lootPools/jedi_components_treasure.py create mode 100644 scripts/loot/lootPools/profession_bracelets_61.py create mode 100644 scripts/loot/lootPools/profession_bracelets_75.py create mode 100644 scripts/loot/lootPools/profession_bracelets_85.py create mode 100644 scripts/loot/lootPools/rare_buff_items.py create mode 100644 scripts/loot/lootPools/treasure_hunter_collection_items.py create mode 100644 scripts/loot/lootPools/wearable_backpacks.py create mode 100644 scripts/mobiles/forage/treasure_guard.py create mode 100644 scripts/radial/object/treasureContainer.py create mode 100644 scripts/radial/object/treasuremap.py create mode 100644 scripts/radial/object/treasuremapExtract.py create mode 100644 scripts/radial/object/treasuremapRead.py diff --git a/scripts/loot/lootPools/consumable_buff_items.py b/scripts/loot/lootPools/consumable_buff_items.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/gem_collection_items.py b/scripts/loot/lootPools/gem_collection_items.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/house_furniture.py b/scripts/loot/lootPools/house_furniture.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/jedi_components_treasure.py b/scripts/loot/lootPools/jedi_components_treasure.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/profession_bracelets_61.py b/scripts/loot/lootPools/profession_bracelets_61.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/profession_bracelets_75.py b/scripts/loot/lootPools/profession_bracelets_75.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/profession_bracelets_85.py b/scripts/loot/lootPools/profession_bracelets_85.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/rare_buff_items.py b/scripts/loot/lootPools/rare_buff_items.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/treasure_hunter_collection_items.py b/scripts/loot/lootPools/treasure_hunter_collection_items.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/wearable_backpacks.py b/scripts/loot/lootPools/wearable_backpacks.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/mobiles/forage/goon.py b/scripts/mobiles/forage/goon.py index 071fdafa..3a288b78 100644 --- a/scripts/mobiles/forage/goon.py +++ b/scripts/mobiles/forage/goon.py @@ -8,7 +8,7 @@ def addTemplate(core): mobileTemplate.setCreatureName('forage_goon') mobileTemplate.setLevel(1) - mobileTemplate.setDifficulty(2) + mobileTemplate.setDifficulty(1) mobileTemplate.setAttackRange(6) mobileTemplate.setAttackSpeed(1.0) diff --git a/scripts/mobiles/forage/treasure_guard.py b/scripts/mobiles/forage/treasure_guard.py new file mode 100644 index 00000000..4071449b --- /dev/null +++ b/scripts/mobiles/forage/treasure_guard.py @@ -0,0 +1,57 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('treasure_guard') + mobileTemplate.setLevel(1) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_04.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_05.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_06.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_human_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_human_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_human_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_human_04.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_twk_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_twk_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_twk_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_zab_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_zab_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_zab_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_twk_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_twk_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_twk_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_zab_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_zab_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_zab_03.iff') + + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_gen5.iff', 9, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/2h_sword/crafted_saber/shared_sword_lightsaber_two_handed_gen5.iff', 10, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/crafted_saber/shared_sword_lightsaber_polearm_gen5.iff', 11, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('saberHit') + mobileTemplate.setDefaultAttack('fs_flurry_1') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('treasure_guard', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/tatooine/womprat.py b/scripts/mobiles/tatooine/womprat.py index 836d9922..f2d1da24 100644 --- a/scripts/mobiles/tatooine/womprat.py +++ b/scripts/mobiles/tatooine/womprat.py @@ -9,6 +9,10 @@ def addTemplate(core): mobileTemplate.setCreatureName('womprat') mobileTemplate.setTemplates(templates) mobileTemplate.setLevel(5) + mobileTemplate.setAttackRange(3) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + attacks = Vector() mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/radial/object/treasureContainer.py b/scripts/radial/object/treasureContainer.py new file mode 100644 index 00000000..2a3ff12d --- /dev/null +++ b/scripts/radial/object/treasureContainer.py @@ -0,0 +1,35 @@ +from resources.common import RadialOptions +from services.sui import SUIWindow +from services.sui.SUIWindow import Trigger +from java.util import Vector +import resources.common.SpawnPoint +import engine.resources.scene.Point3D +import main.NGECore +import resources.common.Forager +from resources.objects.waypoint import WaypointObject +from engine.resources.common import CRC +import sys + +def createRadial(core, owner, target, radials): + radials.clear() + radials.add(RadialOptions(0, 21, 1, 'Open')) + radials.add(RadialOptions(0, 7, 1, 'Examine')) + return + +def handleSelection(core, owner, target, option): + + if option == 21 and target: + + if target.getAttachment('TreasureExtractorID')!=owner.getObjectID(): + owner.sendSystemMessage('@treasure_map/treasure_map:wrong_player',0); + return + + forager = resources.common.Forager() + if forager.countAliveGuards(target)>0: + owner.sendSystemMessage('@treasure_map/treasure_map:kill_guards_message',0); + return + + core.simulationService.openContainer(owner, target); + + return + \ No newline at end of file diff --git a/scripts/radial/object/treasuremap.py b/scripts/radial/object/treasuremap.py new file mode 100644 index 00000000..80ab07a3 --- /dev/null +++ b/scripts/radial/object/treasuremap.py @@ -0,0 +1,71 @@ +from resources.common import RadialOptions +from services.sui import SUIWindow +from services.sui.SUIWindow import Trigger +from java.util import Vector +import resources.common.SpawnPoint +import engine.resources.scene.Point3D +import main.NGECore +from resources.objects.waypoint import WaypointObject +from engine.resources.common import CRC +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 21, 1, '@treasure_map/treasure_map:use')) + radials.add(RadialOptions(0, 7, 1, '')) + return + +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: + owner.sendSystemMessage('The treasure map disk is faulty, no Planet',0) + return + + planetName = planet.getName() + #if owner.getPlanetId()!=mapPlanet: + #owner.sendSystemMessage('The treasure is buried on ' + planetName,0) + #return + + window = core.suiService.createSUIWindow('Script.listBox', owner, target, 0) + window.setProperty('bg.caption.lblTitle:Text', '@treasure_map/treasure_map:title_'+target.getAttachment('MapSTFName')) + window.setProperty('Prompt.lblPrompt:Text', '@treasure_map/treasure_map:text_'+target.getAttachment('MapSTFName')) + + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:Text', '@treasure_map/treasure_map:close') + window.setProperty('btnOk:Text', '@treasure_map/treasure_map:store_waypoint') + returnList = Vector() + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, storeWaypoint) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, close) + + owner.setAttachment('LastReadMap',target) + + core.suiService.openSUIWindow(window); + + return + +def storeWaypoint(owner, window, eventType, returnList): + planetCenter = engine.resources.scene.Point3D(0,0,0) + #treasureLocation = resources.common.SpawnPoint.getRandomPosition(planetCenter, 2000, 6000, owner.getPlanetId()); + treasureLocation = resources.common.SpawnPoint.getRandomPosition(owner.getPosition(), 1, 50, owner.getPlanetId()); + waypoint = main.NGECore.getInstance().objectService.createObject('object/waypoint/shared_waypoint.iff', owner.getPlanet(), treasureLocation.x, treasureLocation.z, treasureLocation.y) + waypoint.setName('Treasure Map') + waypoint.setActive(True) + waypoint.setColor(WaypointObject.YELLOW) + waypoint.setPlanetCRC(CRC.StringtoCRC(owner.getPlanet().name)) + waypoint.setStringAttribute('', '') + ghost = owner.getSlottedObject('ghost') + ghost.waypointAdd(waypoint) + owner.sendSystemMessage('@treasure_map/treasure_map:sys_store_waypoint', 0) + readMap = owner.getAttachment('LastReadMap') + readMap.setAttachment('radial_filename', 'object/treasuremapRead'); + readMap.setAttachment('MapAreaLocation', treasureLocation); + return + + +def close(owner, window, eventType, returnList): + + return + \ No newline at end of file diff --git a/scripts/radial/object/treasuremapExtract.py b/scripts/radial/object/treasuremapExtract.py new file mode 100644 index 00000000..e4a8bdde --- /dev/null +++ b/scripts/radial/object/treasuremapExtract.py @@ -0,0 +1,35 @@ +from resources.common import RadialOptions +from services.sui import SUIWindow +from services.sui.SUIWindow import Trigger +from java.util import Vector +import resources.common.SpawnPoint +import engine.resources.scene.Point3D +import main.NGECore +import resources.common.Forager +from resources.objects.waypoint import WaypointObject +from engine.resources.common import CRC +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 21, 1, '@treasure_map/treasure_map:extract_treasure')) + radials.add(RadialOptions(0, 7, 1, '')) + return + +def handleSelection(core, owner, target, option): + if option == 21 and target: + owner.sendSystemMessage('TreasuremapExtract radial',0) + exactLoc = target.getAttachment('MapExactLocation') + + #if owner.getPosition().getDistance2D(exactLoc)<20: + if owner.getPosition().getDistance2D(owner.getPosition())<20: + target.setAttachment('radial_filename', 'object/usable') + owner.sendSystemMessage('@treasure_map/treasure_map:sys_dist_here',0) + #spawn guards + forager = resources.common.Forager() + forager.handleGuardSpawn(owner,target) + else: + owner.sendSystemMessage('@treasure_map/treasure_map:sys_dist_near',0) + + + return + \ No newline at end of file diff --git a/scripts/radial/object/treasuremapRead.py b/scripts/radial/object/treasuremapRead.py new file mode 100644 index 00000000..c3617bf9 --- /dev/null +++ b/scripts/radial/object/treasuremapRead.py @@ -0,0 +1,58 @@ +from resources.common import RadialOptions +from services.sui import SUIWindow +from services.sui.SUIWindow import Trigger +from java.util import Vector +import resources.common.SpawnPoint +import engine.resources.scene.Point3D +import main.NGECore +from resources.objects.waypoint import WaypointObject +from engine.resources.common import CRC +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 21, 1, '@treasure_map/treasure_map:search_area')) + radials.add(RadialOptions(0, 7, 1, '')) + return + +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) + + if owner.getCombatFlag()!=0: + owner.sendSystemMessage('@treasure_map/treasure_map:sys_no_combat',0) + return + + if owner.getPosture()==10: + owner.sendSystemMessage('@treasure_map/treasure_map:sys_no_mount',0) + return + + + areaLoc = target.getAttachment('MapAreaLocation'); + owner.sendSystemMessage('owner.getPosition().getDistance2D(areaLoc) %s' % owner.getPosition().getDistance2D(areaLoc),0) + + if owner.getPosition().getDistance2D(areaLoc)<20: + owner.sendSystemMessage('@treasure_map/treasure_map:sys_success',0) + + treasureLocation = resources.common.SpawnPoint.getRandomPosition(owner.getPosition(), 1, 100, owner.getPlanetId()); + waypoint = main.NGECore.getInstance().objectService.createObject('object/waypoint/shared_waypoint.iff', owner.getPlanet(), treasureLocation.x, treasureLocation.z, treasureLocation.y) + waypoint.setName('Exact Location of the Treasure') + waypoint.setActive(True) + waypoint.setColor(WaypointObject.YELLOW) + waypoint.setPlanetCRC(CRC.StringtoCRC(owner.getPlanet().name)) + waypoint.setStringAttribute('', '') + ghost = owner.getSlottedObject('ghost') + ghost.waypointAdd(waypoint) + owner.sendSystemMessage('@treasure_map/treasure_map:sys_store_waypoint', 0) + readMap = owner.getAttachment('LastReadMap') + readMap.setAttachment('radial_filename', 'object/treasuremapExtract'); + readMap.setAttachment('MapExactLocation', treasureLocation); + else: + owner.sendSystemMessage('@treasure_map/treasure_map:sys_cant_pinpoint',0) + + + return + \ No newline at end of file diff --git a/src/resources/common/Forager.java b/src/resources/common/Forager.java index cfd63791..557b4153 100644 --- a/src/resources/common/Forager.java +++ b/src/resources/common/Forager.java @@ -21,13 +21,19 @@ ******************************************************************************/ package resources.common; +import java.util.ArrayList; +import java.util.List; import java.util.Random; +import java.util.Vector; import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import main.NGECore; import resources.datatables.Options; import resources.objects.creature.CreatureObject; +import resources.objects.group.GroupObject; +import resources.objects.loot.LootGroup; import resources.objects.tangible.TangibleObject; import services.ai.AIActor; @@ -43,9 +49,10 @@ public class Forager { public static final int GRUB_BAIT = 3; public static final int WORM_BAIT = 4; public static final int MYSTERIOUS_DATA_DISC = 5; - // consider foraged food food/foraged + private int[] mapPlanetIDs = new int[]{6,7,8}; + // consider foraged food food/foraged // tangible/item/treasure_map/shared_relic_buff_s01.iff public Forager(){ @@ -64,7 +71,7 @@ public class Forager { int randomForageRoll = new Random().nextInt(100); int randomForageObjectRoll = new Random().nextInt(100); int remainder = 0; - int forageResultChance = 50; + int forageResultChance = 100; int kommerkenBonus = 0; int[] forageChances = new int[]{10,10,25,25,25,5}; @@ -97,7 +104,9 @@ public class Forager { chosenObject = 6; forager.sendSystemMessage("@skl_use:sys_forage_noroom",(byte) 0); } - + + chosenObject = 5; + forager.sendSystemMessage("chosenObject " + chosenObject,(byte) 0); switch (chosenObject) { @@ -137,12 +146,18 @@ public class Forager { foragedObject = (TangibleObject) NGECore.getInstance().objectService.createObject(template, forager.getPlanet()); foragedObject.setCustomName(getLevelDependentMapName(forager.getLevel())); foragedObject.setAttachment("MapLevel", forager.getLevel()); + foragedObject.setAttachment("MapSTFName", getLevelDependentSTFName(forager.getLevel())); + 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"); foragerInventory.add(foragedObject); - forager.sendSystemMessage("",(byte) 0); + forager.sendSystemMessage("",(byte) 0); break; default: break; - + ///object/tangible/treasure_map/shared_treasure_map_base.iff shared_treasure_map_quest.iff } if (chosenObject<6) @@ -155,9 +170,11 @@ public class Forager { if (chosenObject>6) adversaryRoll=999; - if (adversaryRoll<14) { + adversaryRoll=999; + + if (adversaryRoll<100) { // 14 int adversaryTypeRoll = new Random().nextInt(100); - if (adversaryTypeRoll<50){ + if (adversaryTypeRoll<1){ // wormie spawnWormie(forager); } else { @@ -196,6 +213,30 @@ public class Forager { return ""; } + private String getLevelDependentSTFName(int level){ + if (level>=1 && level<=10) + return "treasure_guard_adventurer"; + if (level>=11 && level<=20) + return "treasure_guard_villager"; + if (level>=21 && level<=30) + return "treasure_guard_trader"; + if (level>=31 && level<=40) + return "treasure_guard_bounty_hunter"; + if (level>=41 && level<=50) + return "treasure_guard_droid"; + if (level>=51 && level<=60) + return "treasure_guard_padawan"; + if (level>=61 && level<=70) + return "treasure_guard_jedi"; + if (level>=71 && level<=80) + return "treasure_guard_jedi_elder"; + if (level>=81 && level<=90) + return "treasure_guard_jedi_elite"; + return ""; + } + + + @@ -204,7 +245,6 @@ public class Forager { String name = ""; Point3D wormiePosition = SpawnPoint.getRandomPosition(forager.getPosition(), 1, 6, forager.getPlanetId()); CreatureObject wormie = NGECore.getInstance().spawnService.spawnCreature("forage_worm", forager.getPlanet().getName(), 0L, wormiePosition.x, wormiePosition.y, wormiePosition.z, (short)level); - switch (wormie.getTemplate()) { case "object/mobile/shared_col_forage_aggravated_worm.iff": @@ -269,35 +309,37 @@ public class Forager { case "object/mobile/shared_dressed_criminal_assassin_human_female_01.iff": name = "A criminal"; - barkString = "@forage_enemy:bark_criminal"; + barkString = "bark_criminal"; break; case "object/mobile/shared_dressed_criminal_assassin_human_male_01.iff": name = "A Scavenger"; - barkString = "@forage_enemy:bark_scavenger"; + barkString = "bark_scavenger"; break; case "object/mobile/shared_twilek_male.iff": name = "A Thief"; - barkString = "@forage_enemy:bark_thief"; + barkString = "bark_thief"; break; case "object/mobile/shared_dressed_binayre_pirate_zabrak_male_01.iff": name = "A Pirate"; - barkString = "@forage_enemy:bark_thief"; + barkString = "bark_thief"; break; case "object/mobile/shared_dressed_borvos_thug.iff": name = "A Thug"; - barkString = "@forage_enemy:bark_criminal"; + barkString = "bark_criminal"; break; case "object/mobile/shared_wookiee_male.iff": name = "A Thug"; - barkString = "@forage_enemy:bark_wookiee"; + barkString = "bark_wookiee"; break; } + + goon.addObserver(forager); goon.setCustomName(name); goon.setCustomName2(name); goon.setLevel(forager.getLevel()); @@ -305,8 +347,153 @@ public class Forager { goon.setOptions(Options.ATTACKABLE, true); AIActor actor = (AIActor) goon.getAttachment("AI"); actor.addDefender(forager); - NGECore.getInstance().chatService.spatialChat(goon, forager, barkString, short chatType, short moodId, int languageId, OutOfBand outOfBand); - long targetId; + forager.sendSystemMessage("@foraging/forage_enemy:" + barkString,(byte) 0); + //OutOfBand oob = new OutOfBand(new ProsePackage("@foraging/forage_enemy",barkString)); + OutOfBand oob = new OutOfBand(new ProsePackage("@jawa_trader","cant_understand")); + forager.sendSystemMessage("@jawa_trader:cant_understand",(byte) 0); + NGECore.getInstance().chatService.spatialChat(goon, forager, "", (short)0x0, (short)0x0, 1, oob); + } + + public void handleGuardSpawn(CreatureObject owner, TangibleObject map){ + + 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()); + int extractorGroupSize = 1; + if (extractorGroup!=null) + extractorGroupSize = extractorGroup.getMemberList().size(); + + int guardSpawnNumber = 2 + extractorGroupSize; + Vector guardList = new Vector(); + for (int i=0;i guardList = (Vector) treasureContainer.getAttachment("TreasureGuards"); + int aliveCount = 0; + for (CreatureObject guard:guardList){ + if (guard.getPosture()!=14 && guard.getPosture()!=15) + aliveCount++; + } + return aliveCount; + } + + + + public void configureTreasureLoot(TangibleObject treasureContainer, CreatureObject owner, short spawnLevel){ + List lootgroups = new ArrayList(); + + String levelRange = "61"; + + if (spawnLevel>60 && spawnLevel<=70){ + levelRange = "61"; + } + if (spawnLevel>70 && spawnLevel<=80){ + levelRange = "75"; + } + if (spawnLevel>80 && spawnLevel<=90){ + levelRange = "85"; + } + + + // PROFESSION BRACELETS HOUSE FURNITURE WEARABLE BACKPACKS + String[] lootPoolNames = new String[]{"profession_bracelets_"+levelRange,"house_furniture","wearable_backpacks"}; + int[] lootPoolChances = new int[]{50,25,25}; + int lootGroupChance = 80; + treasureContainer.addToLootGroups(lootPoolNames, lootPoolChances, lootGroupChance); + + // WEAPONSMITH COMPONENTS JEDI COMPONENTS GEM COLLECTION ITEMS TREASURE HUNTER COLLECTION ITEMS + + // CONSUMABLE BUFF ITEMS +// Flask of Elba Water +// Flask of Naris-bud Tea +// Small flask of Nerfmilk + + // COMMON LOOTS: +// Looted non-wearable Bounty Hunter armor pieces (Used to make Mandalorian armor at the Death Watch Bunker) +// Looted clothing (usually 20+) +// Looted armors (usually 20+) +// Looted weapons (700-800 DPS(Sometimes less, now includes the Nak'tra Crystal Rifle)) +// Advanced Agility Stim (CL80) +// Advanced Power Stim (CL80) +// Loot kits adhesives +// Various Schematics + + // VERY RARE BUFF ITEMS + lootPoolNames = new String[]{"Rare Nova Crystal"," Rare Rol Stone","Rare Power Gem", + " Rare Corusca Gem","Rare Sasho Gem","Rare Ankarres Sapphire "}; + lootPoolChances = new int[]{17,17,17,17,17,15}; + lootGroupChance = 1; + treasureContainer.addToLootGroups(lootPoolNames, lootPoolChances, lootGroupChance); + + // EXTRA + lootPoolNames = new String[]{"Mysterious Data Disk"}; + lootPoolChances = new int[]{100}; + lootGroupChance = 50; + treasureContainer.addToLootGroups(lootPoolNames, lootPoolChances, lootGroupChance); + } } diff --git a/src/services/LootService.java b/src/services/LootService.java index c9157d18..8f9fb3db 100644 --- a/src/services/LootService.java +++ b/src/services/LootService.java @@ -114,10 +114,10 @@ public class LootService implements INetworkDispatch { lootSituationAssessment(requester,lootedObject,lootRollSession); - CreatureObject lootedCreature = (CreatureObject) lootedObject; + //CreatureObject lootedCreature = (CreatureObject) lootedObject; //TreeSet> lootSpec = lootedObject.getLootSpecification(); - List lootGroups = lootedCreature.getLootGroups(); + List lootGroups = lootedObject.getLootGroups(); Iterator iterator = lootGroups.iterator(); int projectionCoefficientMatrixModulo = 0; projectionCoefficientMatrixModulo = outbound(requester); @@ -146,14 +146,17 @@ public class LootService implements INetworkDispatch { } // set info above corpse - float y = 0.5F; // 1.3356977F - float qz= 1.06535322E9F; - Point3D effectorPosition = new Point3D(0,y,0); - Quaternion effectorOrientation = new Quaternion(0,0,0,qz); - PlayClientEffectObjectTransformMessage lmsg = new PlayClientEffectObjectTransformMessage("appearance/pt_loot_disc.prt",lootedObject.getObjectID(),"lootMe",effectorPosition,effectorOrientation); - requester.getClient().getSession().write(lmsg.serialize()); - tools.CharonPacketUtils.printAnalysis(lmsg.serialize()); - + + if (lootedObject instanceof CreatureObject){ + float y = 0.5F; // 1.3356977F + float qz= 1.06535322E9F; + Point3D effectorPosition = new Point3D(0,y,0); + Quaternion effectorOrientation = new Quaternion(0,0,0,qz); + PlayClientEffectObjectTransformMessage lmsg = new PlayClientEffectObjectTransformMessage("appearance/pt_loot_disc.prt",lootedObject.getObjectID(),"lootMe",effectorPosition,effectorOrientation); + requester.getClient().getSession().write(lmsg.serialize()); + tools.CharonPacketUtils.printAnalysis(lmsg.serialize()); + } + // handle errors if (lootRollSession.getErrorMessages().size()>0){ for (String msg : lootRollSession.getErrorMessages()){ diff --git a/src/services/chat/ChatService.java b/src/services/chat/ChatService.java index cc620d77..be4cbb43 100644 --- a/src/services/chat/ChatService.java +++ b/src/services/chat/ChatService.java @@ -125,11 +125,15 @@ public class ChatService implements INetworkDispatch { Client speakerClient = speaker.getClient(); - if (speakerClient == null || speakerClient.getSession() == null) { - return; +// if (speakerClient == null || speakerClient.getSession() == null) { +// return; +// } + + if (speakerClient != null) { + if (speakerClient.getSession() != null) + speakerClient.getSession().write(objControllerMessage.serialize()); } - speakerClient.getSession().write(objControllerMessage.serialize()); if (speaker.getObservers().isEmpty()) { return; @@ -150,6 +154,7 @@ public class ChatService implements INetworkDispatch { SpatialChat spatialChat = new SpatialChat(client.getParent().getObjectId(), speaker.getObjectID(), targetId, message, chatType, moodId, languageId, outOfBand); objControllerMessage = new ObjControllerMessage(0x0B, spatialChat); client.getSession().write(objControllerMessage.serialize()); + tools.CharonPacketUtils.printAnalysis(objControllerMessage.serialize()); } } }