From f8909fbda199b787c12baed5495ddc94d79dcaea Mon Sep 17 00:00:00 2001 From: CharonInferar Date: Sat, 19 Apr 2014 05:08:37 +0200 Subject: [PATCH 01/12] Command and animation done --- options.cfg | 4 +- scripts/commands/forage.py | 12 +++++ src/services/TreasureService.java | 88 +++++++++++++++++++++++++++++++ 3 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 scripts/commands/forage.py create mode 100644 src/services/TreasureService.java diff --git a/options.cfg b/options.cfg index 5a3a7f8e..cb743c88 100644 --- a/options.cfg +++ b/options.cfg @@ -1,3 +1,3 @@ -LOAD.SNAPSHOT_OBJECTS=1 -LOAD.BUILDOUT_OBJECTS=1 +LOAD.SNAPSHOT_OBJECTS=0 +LOAD.BUILDOUT_OBJECTS=0 LOAD.RESOURCE.SYSTEM=1 \ No newline at end of file diff --git a/scripts/commands/forage.py b/scripts/commands/forage.py new file mode 100644 index 00000000..3b7c2d66 --- /dev/null +++ b/scripts/commands/forage.py @@ -0,0 +1,12 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + actor.sendSystemMessage('@skl_use:sys_forage_start', 1) + + actor.setCurrentAnimation('forage') + + return + \ No newline at end of file diff --git a/src/services/TreasureService.java b/src/services/TreasureService.java new file mode 100644 index 00000000..4684d045 --- /dev/null +++ b/src/services/TreasureService.java @@ -0,0 +1,88 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services; + +import java.util.Collections; +import java.util.Map; +import java.util.Vector; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; +import main.NGECore; +import engine.resources.objects.SWGObject; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; + +public class TreasureService implements INetworkDispatch { + + private NGECore core; + private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + + private Vector allRequesters = new Vector(); + + public TreasureService(NGECore core) { + this.core = core; + + scheduleTreasureService(); + } + + @Override + public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { + + } + + public void scheduleTreasureService(){ + + final ScheduledFuture task = scheduler.scheduleAtFixedRate(new Runnable() { + + @Override + public void run() { + ServiceProcessing(); + } + + }, 10, 5000, TimeUnit.MILLISECONDS); + } + + + public void ServiceProcessing(){ + synchronized(allRequesters){ + for (SWGObject requester : allRequesters){ + if (requester!=null) + handleRequester(requester); + } + allRequesters.removeAll(Collections.singleton(null)); + } + + } + + public void handleRequester(SWGObject requester){ + + } + + @Override + public void shutdown() { + // TODO Auto-generated method stub + + } + +} From ea947869ebf5dd01bf2959adb215a4f84b01e52e Mon Sep 17 00:00:00 2001 From: CharonInferar Date: Sat, 19 Apr 2014 23:56:15 +0200 Subject: [PATCH 02/12] Added foraged items and worms worms spawn Enzymes and maps can be foraged --- scripts/commands/forage.py | 65 +++++++- scripts/commands/suspendtest.py | 30 ++++ scripts/mobiles/forage/worm.py | 30 ++++ src/resources/common/Forager.java | 260 ++++++++++++++++++++++++++++++ 4 files changed, 384 insertions(+), 1 deletion(-) create mode 100644 scripts/commands/suspendtest.py create mode 100644 scripts/mobiles/forage/worm.py create mode 100644 src/resources/common/Forager.java diff --git a/scripts/commands/forage.py b/scripts/commands/forage.py index 3b7c2d66..8d47c825 100644 --- a/scripts/commands/forage.py +++ b/scripts/commands/forage.py @@ -1,12 +1,75 @@ import sys +import engine.resources.scene.Point3D +import resources.common.Forager +import time + def setup(): return def run(core, actor, target, commandString): - actor.sendSystemMessage('@skl_use:sys_forage_start', 1) + #if actor.getSkills('Foraging')==0: + #actor.sendSystemMessage('@skl_use:sys_forage_noskill'),0) + + #if actor.isForaging()==1: + #actor.sendSystemMessage('@skl_use:sys_forage_already',0) + #return + + if actor.getCombatFlag()!=0: + actor.sendSystemMessage('@skl_use:sys_forage_combatfail',0) + return + + if actor.getPosture()!=0: + actor.sendSystemMessage('@skl_use:sys_forage_cant',0) + return + + if core.terrainService.isWater(actor.getPlanet(), actor.getPosition().x, actor.getPosition().z): + actor.sendSystemMessage('You cannot forage while in water.',0) + return + + if actor.getContainer() != None: + actor.sendSystemMessage('@skl_use:sys_forage_inside',0) + return + + if actor.getAction() < 200: + actor.sendSystemMessage('@skl_use:sys_forage_attrib',0) + return + + somepoint = engine.resources.scene.Point3D(0,0,0) + if actor.getAttachment('PostForagePosition')==None: + actor.setAttachment('PostForagePosition', somepoint) + + 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 + + + actor.sendSystemMessage('@skl_use:sys_forage_start', 0) + + actor.setAttachment("PreForagePosition", actor.getPosition()) actor.setCurrentAnimation('forage') + time.sleep(1) # does NOT stall other python scripts, tested + # Each command might be its own thread + + actor.setAttachment("PostForagePosition", actor.getPosition()) + + if actor.getCombatFlag()!=0: + actor.sendSystemMessage('@skl_use:sys_forage_combatfail',0) + return + + oldposition = actor.getAttachment("PreForagePosition") + if actor.getPosition().getDistance2D(oldposition)>2: + actor.sendSystemMessage('@skl_use:sys_forage_movefail',0) + return + + + + forager = resources.common.Forager() + forager.handleForageResults(actor) return \ No newline at end of file diff --git a/scripts/commands/suspendtest.py b/scripts/commands/suspendtest.py new file mode 100644 index 00000000..61d95fd7 --- /dev/null +++ b/scripts/commands/suspendtest.py @@ -0,0 +1,30 @@ +import sys +import resources.common.Forager +import time + + +def setup(): + return + +def run(core, actor, target, commandString): + actor.sendSystemMessage('Test1', 1) + time.sleep(1) + actor.sendSystemMessage('Test2', 1) + time.sleep(1) + actor.sendSystemMessage('Test3', 1) + time.sleep(1) + actor.sendSystemMessage('Test4', 1) + time.sleep(1) + actor.sendSystemMessage('Test5', 1) + time.sleep(1) + actor.sendSystemMessage('Test6', 1) + time.sleep(1) + actor.sendSystemMessage('Test7', 1) + time.sleep(1) + actor.sendSystemMessage('Test8', 1) + time.sleep(1) + + + + return + \ No newline at end of file diff --git a/scripts/mobiles/forage/worm.py b/scripts/mobiles/forage/worm.py new file mode 100644 index 00000000..605b5a28 --- /dev/null +++ b/scripts/mobiles/forage/worm.py @@ -0,0 +1,30 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('forage_worm') + mobileTemplate.setLevel(1) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + + templates = Vector() + templates.add('object/mobile/shared_col_forage_aggravated_worm.iff') + templates.add('object/mobile/shared_col_forage_angry_worm.iff') + templates.add('object/mobile/shared_col_forage_brutal_worm.iff') + templates.add('object/mobile/shared_col_forage_carnivorous_worm.iff') + templates.add('object/mobile/shared_col_forage_ferocious_worm.iff') + templates.add('object/mobile/shared_col_forage_fierce_worm.iff') + templates.add('object/mobile/shared_col_forage_hungry_worm.iff') + templates.add('object/mobile/shared_col_forage_oozing_worm.iff') + templates.add('object/mobile/shared_col_forage_savage_worm.iff') + templates.add('object/mobile/shared_col_forage_territorial_worm.iff') + mobileTemplate.setTemplates(templates) + + core.spawnService.addMobileTemplate('forage_worm', mobileTemplate) + \ No newline at end of file diff --git a/src/resources/common/Forager.java b/src/resources/common/Forager.java new file mode 100644 index 00000000..8a4f49fc --- /dev/null +++ b/src/resources/common/Forager.java @@ -0,0 +1,260 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.common; + +import java.util.Random; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Point3D; +import main.NGECore; +import resources.objects.creature.CreatureObject; +import resources.objects.tangible.TangibleObject; + +/** + * @author Charon + */ + +public class Forager { + + public static final int LYASE_ENZYME = 0; + public static final int RARE_COMPONENT = 1; + public static final int INSECT_BAIT = 2; + 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 + + + // tangible/item/treasure_map/shared_relic_buff_s01.iff + + public Forager(){ + + } + + public boolean handleForageResults(CreatureObject forager){ + // determine foraged object + SWGObject foragerInventory = forager.getSlottedObject("inventory"); + + + // you can use Kommerken Steak food which increases your + // foraging chance by 12% and gives you a + // 5% bonus chance of finding a treasure map. + + int randomForageRoll = new Random().nextInt(100); + int randomForageObjectRoll = new Random().nextInt(100); + int remainder = 0; + int forageResultChance = 50; + int kommerkenBonus = 0; + + int[] forageChances = new int[]{10,10,25,25,25,5}; + int[] forageChances2 = new int[]{12,10,21,23,24,10}; // Kommerken Steak + int[] forageChances3 = new int[]{20,9,22,22,22,5}; // if you got the pig + + + int chosenObject = 0; + +// if (forager.hasChuckedIn(KommerkenSteak)){ +// kommerkenBonus = 12; +// forageChances = forageChances2; +// } + +// if (forager.gotThePig(pig)){ +// forageChances = forageChances3; +//} + forager.sendSystemMessage("randomForageRoll " + randomForageRoll,(byte) 0); + if (randomForageRoll=80){ + chosenObject = 6; + forager.sendSystemMessage("@skl_use:sys_forage_noroom",(byte) 0); + } + + forager.sendSystemMessage("chosenObject " + chosenObject,(byte) 0); + switch (chosenObject) { + + case LYASE_ENZYME: String template = "object/tangible/loot/beast/shared_enzyme_2.iff"; + TangibleObject foragedObject = (TangibleObject) NGECore.getInstance().objectService.createObject(template, forager.getPlanet()); + // determine color here + foragedObject.setCustomizationVariable("/private/index_color_1", (byte) new Random().nextInt(10)); // edb_vial.pal + foragerInventory.add(foragedObject); + forager.sendSystemMessage("",(byte) 0); + break; + + case RARE_COMPONENT: template = "object/tangible/loot/beast/shared_enzyme_1.iff"; // for now, must find temp + foragedObject = (TangibleObject) NGECore.getInstance().objectService.createObject(template, forager.getPlanet()); + foragerInventory.add(foragedObject); + forager.sendSystemMessage("",(byte) 0); + break; + + case INSECT_BAIT: template = "object/tangible/fishing/bait/shared_bait_insect.iff"; + foragedObject = (TangibleObject) NGECore.getInstance().objectService.createObject(template, forager.getPlanet()); + foragerInventory.add(foragedObject); + forager.sendSystemMessage("",(byte) 0); + break; + + case GRUB_BAIT: template = "object/tangible/fishing/bait/shared_bait_grub.iff"; + foragedObject = (TangibleObject) NGECore.getInstance().objectService.createObject(template, forager.getPlanet()); + foragerInventory.add(foragedObject); + forager.sendSystemMessage("",(byte) 0); + break; + + case WORM_BAIT: template = "object/tangible/fishing/bait/shared_bait_worm.iff"; + foragedObject = (TangibleObject) NGECore.getInstance().objectService.createObject(template, forager.getPlanet()); + foragerInventory.add(foragedObject); + forager.sendSystemMessage("",(byte) 0); + break; + + case MYSTERIOUS_DATA_DISC: template = "object/tangible/loot/generic_usable/shared_datadisk_generic.iff"; + foragedObject = (TangibleObject) NGECore.getInstance().objectService.createObject(template, forager.getPlanet()); + foragedObject.setCustomName(getLevelDependentMapName(forager.getLevel())); + foragedObject.setAttachment("MapLevel", forager.getLevel()); + foragerInventory.add(foragedObject); + forager.sendSystemMessage("",(byte) 0); + break; + + default: break; + + } + + if (chosenObject<6) + forager.sendSystemMessage("@skl_use:sys_forage_success",(byte) 0); + + // spawn adversaries + int adversaryRoll = new Random().nextInt(100); + // A new buff is imaginable that would decrease the chance of running into adversaries here, just an idea + + if (chosenObject>6) + adversaryRoll=999; + + if (adversaryRoll<100) { + int adversaryTypeRoll = new Random().nextInt(100); + if (adversaryTypeRoll<100){ + // wormie + spawnWormie(forager); + } else { + // goon + spawnGoon(forager); + } + } + + } else { + forager.sendSystemMessage("@skl_use:sys_forage_fail",(byte) 0); + + } + + return true; + } + + private String getLevelDependentMapName(int level){ + if (level>=1 && level<=10) + return "Mysterious Data Disk (Adventurer's Treasure)"; + if (level>=11 && level<=20) + return "Mysterious Data Disk (Villager's Hidden Savings)"; + if (level>=21 && level<=30) + return "A map to a Trader's Hidden Treasure"; + if (level>=31 && level<=40) + return "A map to a Bounty Hunter's Hidden Stash"; + if (level>=41 && level<=50) + return "A droid's data disk with map coordinates"; + if (level>=51 && level<=60) + return "A map to a Jedi Knight's body"; + if (level>=61 && level<=70) + return "A map to Jedi Artifacts"; + if (level>=71 && level<=80) + return "A map to a cursed item"; + if (level>=81 && level<=90) + return "Mysterious Data Disk (Mysterious Container) "; + return ""; + } + + + + + public void spawnWormie(CreatureObject forager){ + int level = forager.getLevel(); + 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": + name = "An Aggravated Worm"; + break; + + case "object/mobile/shared_col_forage_angry_worm.iff": + name = "An Angry Worm"; + break; + + case "object/mobile/shared_col_forage_brutal_worm.iff": + name = "A Brutal Worm"; + break; + + case "object/mobile/shared_col_forage_carnivorous_worm.iff": + name = "A Carnivorous Worm"; + break; + + case "object/mobile/shared_col_forage_ferocious_worm.iff": + name = "A Ferocious Worm"; + break; + + case "object/mobile/shared_col_forage_fierce_worm.iff": + name = "A Fierce Worm"; + break; + + case "object/mobile/shared_col_forage_hungry_worm.iff": + name = "A Hungry Worm"; + break; + + case "object/mobile/shared_col_forage_oozing_worm.iff": + name = "An Oozing Worm"; + break; + + case "object/mobile/shared_col_forage_savage_worm.iff": + name = "A Savage Worm"; + break; + + case "object/mobile/shared_col_forage_territorial_worm.iff": + name = "A Territorial Worm"; + break; + } + wormie.setCustomName(name); + wormie.setCustomName2(name); + wormie.setLevel(forager.getLevel()); + } + + public void spawnGoon(CreatureObject forager){ + int level = forager.getLevel(); + String name = ""; + Point3D wormiePosition = SpawnPoint.getRandomPosition(forager.getPosition(), 1, 6, forager.getPlanetId()); + CreatureObject goon = NGECore.getInstance().spawnService.spawnCreature("forage_goon", forager.getPlanet().getName(), 0L, wormiePosition.x, wormiePosition.y, wormiePosition.z, (short)level); + + } + +} From 44f5c0bd9237a87de001274d99dc8fe68863b156 Mon Sep 17 00:00:00 2001 From: CharonInferar Date: Sun, 20 Apr 2014 17:00:34 +0200 Subject: [PATCH 03/12] Forage enemies now attack the forager Worms/goons attack --- scripts/mobiles/forage/goon.py | 39 +++++++++++++++++++++ scripts/mobiles/forage/worm.py | 9 +++++ src/resources/common/Forager.java | 56 +++++++++++++++++++++++++++++-- 3 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 scripts/mobiles/forage/goon.py diff --git a/scripts/mobiles/forage/goon.py b/scripts/mobiles/forage/goon.py new file mode 100644 index 00000000..071fdafa --- /dev/null +++ b/scripts/mobiles/forage/goon.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('forage_goon') + mobileTemplate.setLevel(1) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_assassin_human_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_assassin_human_male_01.iff') + templates.add('object/mobile/shared_twilek_male.iff') + templates.add('object/mobile/shared_dressed_binayre_pirate_zabrak_male_01.iff') + templates.add('object/mobile/shared_dressed_borvos_thug.iff') + templates.add('object/mobile/shared_wookiee_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_dh17.iff', 1, 0.6) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_dl44.iff', 2, 0.4) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_dlt20a.iff', 0, 0.8) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('forage_goon', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/forage/worm.py b/scripts/mobiles/forage/worm.py index 605b5a28..c8e96a8c 100644 --- a/scripts/mobiles/forage/worm.py +++ b/scripts/mobiles/forage/worm.py @@ -26,5 +26,14 @@ def addTemplate(core): templates.add('object/mobile/shared_col_forage_territorial_worm.iff') mobileTemplate.setTemplates(templates) + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + #mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + core.spawnService.addMobileTemplate('forage_worm', mobileTemplate) \ No newline at end of file diff --git a/src/resources/common/Forager.java b/src/resources/common/Forager.java index 8a4f49fc..cfd63791 100644 --- a/src/resources/common/Forager.java +++ b/src/resources/common/Forager.java @@ -22,11 +22,14 @@ package resources.common; import java.util.Random; + import engine.resources.objects.SWGObject; import engine.resources.scene.Point3D; import main.NGECore; +import resources.datatables.Options; import resources.objects.creature.CreatureObject; import resources.objects.tangible.TangibleObject; +import services.ai.AIActor; /** * @author Charon @@ -152,9 +155,9 @@ public class Forager { if (chosenObject>6) adversaryRoll=999; - if (adversaryRoll<100) { + if (adversaryRoll<14) { int adversaryTypeRoll = new Random().nextInt(100); - if (adversaryTypeRoll<100){ + if (adversaryTypeRoll<50){ // wormie spawnWormie(forager); } else { @@ -247,14 +250,63 @@ public class Forager { wormie.setCustomName(name); wormie.setCustomName2(name); wormie.setLevel(forager.getLevel()); + wormie.setOptions(Options.AGGRESSIVE, true); + wormie.setOptions(Options.ATTACKABLE, true); + AIActor actor = (AIActor) wormie.getAttachment("AI"); + actor.addDefender(forager); } public void spawnGoon(CreatureObject forager){ + System.out.println("GOON"); int level = forager.getLevel(); String name = ""; Point3D wormiePosition = SpawnPoint.getRandomPosition(forager.getPosition(), 1, 6, forager.getPlanetId()); CreatureObject goon = NGECore.getInstance().spawnService.spawnCreature("forage_goon", forager.getPlanet().getName(), 0L, wormiePosition.x, wormiePosition.y, wormiePosition.z, (short)level); + // thief wookie criminal scavenger @forage_enemy:bark_thief + String barkString = ""; + + switch (goon.getTemplate()) { + case "object/mobile/shared_dressed_criminal_assassin_human_female_01.iff": + name = "A criminal"; + barkString = "@forage_enemy:bark_criminal"; + break; + + case "object/mobile/shared_dressed_criminal_assassin_human_male_01.iff": + name = "A Scavenger"; + barkString = "@forage_enemy:bark_scavenger"; + break; + + case "object/mobile/shared_twilek_male.iff": + name = "A Thief"; + barkString = "@forage_enemy:bark_thief"; + break; + + case "object/mobile/shared_dressed_binayre_pirate_zabrak_male_01.iff": + name = "A Pirate"; + barkString = "@forage_enemy:bark_thief"; + break; + + case "object/mobile/shared_dressed_borvos_thug.iff": + name = "A Thug"; + barkString = "@forage_enemy:bark_criminal"; + break; + + case "object/mobile/shared_wookiee_male.iff": + name = "A Thug"; + barkString = "@forage_enemy:bark_wookiee"; + break; + + } + goon.setCustomName(name); + goon.setCustomName2(name); + goon.setLevel(forager.getLevel()); + goon.setOptions(Options.AGGRESSIVE, true); + 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; } } From 14f774447fd568dd7b241b07d031554548baa948 Mon Sep 17 00:00:00 2001 From: CharonInferar Date: Mon, 21 Apr 2014 03:23:07 +0200 Subject: [PATCH 04/12] 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()); } } } From b8d4187a78279ff48532de43b26124025c823088 Mon Sep 17 00:00:00 2001 From: CharonInferar Date: Mon, 21 Apr 2014 04:23:54 +0200 Subject: [PATCH 05/12] More treasure loot items and pools added Rare items profession bracelets --- scripts/loot/lootPools/advanced_stims_80.py | 0 scripts/loot/lootPools/bh_armor_for_mando.py | 0 .../loot/lootPools/consumable_buff_items.py | 6 +++++ scripts/loot/lootPools/loot_kits_adhesives.py | 0 .../loot/lootPools/profession_bracelets_61.py | 8 +++++++ .../loot/lootPools/profession_bracelets_75.py | 8 +++++++ .../loot/lootPools/profession_bracelets_85.py | 10 ++++++++ scripts/loot/lootPools/rare_buff_items.py | 8 +++++++ scripts/loot/lootPools/various_schematics.py | 0 .../loot/lootPools/weaponsmith_components.py | 0 scripts/loot/lootPools/wearable_backpacks.py | 6 +++++ src/resources/common/Forager.java | 24 ++++++++++++------- 12 files changed, 61 insertions(+), 9 deletions(-) create mode 100644 scripts/loot/lootPools/advanced_stims_80.py create mode 100644 scripts/loot/lootPools/bh_armor_for_mando.py create mode 100644 scripts/loot/lootPools/loot_kits_adhesives.py create mode 100644 scripts/loot/lootPools/various_schematics.py create mode 100644 scripts/loot/lootPools/weaponsmith_components.py diff --git a/scripts/loot/lootPools/advanced_stims_80.py b/scripts/loot/lootPools/advanced_stims_80.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/bh_armor_for_mando.py b/scripts/loot/lootPools/bh_armor_for_mando.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/consumable_buff_items.py b/scripts/loot/lootPools/consumable_buff_items.py index e69de29b..66f6cfb3 100644 --- a/scripts/loot/lootPools/consumable_buff_items.py +++ b/scripts/loot/lootPools/consumable_buff_items.py @@ -0,0 +1,6 @@ + +def itemNames(): + return ['flask_of_elba_water ','flask_of_naris-bud_tea','small_flask_of_nerfmilk'] + +def itemChances(): + return [33,33,33] \ No newline at end of file diff --git a/scripts/loot/lootPools/loot_kits_adhesives.py b/scripts/loot/lootPools/loot_kits_adhesives.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 index e69de29b..68043333 100644 --- a/scripts/loot/lootPools/profession_bracelets_61.py +++ b/scripts/loot/lootPools/profession_bracelets_61.py @@ -0,0 +1,8 @@ + +def itemNames(): + names = ['jedi_wristguard(right)'] + + return names + +def itemChances(): + return [100] \ No newline at end of file diff --git a/scripts/loot/lootPools/profession_bracelets_75.py b/scripts/loot/lootPools/profession_bracelets_75.py index e69de29b..8a765e2f 100644 --- a/scripts/loot/lootPools/profession_bracelets_75.py +++ b/scripts/loot/lootPools/profession_bracelets_75.py @@ -0,0 +1,8 @@ + +def itemNames(): + names = ['jedi_knight_meditation_bracelet_(right)','wrist_communications_scanner_SCNv4_(right)'] + names += ['insurgent_scanner_wrist_module_(right)','counter-toxin_wristband_prototype_IV_(right)'] + return names + +def itemChances(): + return [25,25,25,25] \ No newline at end of file diff --git a/scripts/loot/lootPools/profession_bracelets_85.py b/scripts/loot/lootPools/profession_bracelets_85.py index e69de29b..9d609ba1 100644 --- a/scripts/loot/lootPools/profession_bracelets_85.py +++ b/scripts/loot/lootPools/profession_bracelets_85.py @@ -0,0 +1,10 @@ + +def itemNames(): + names = ['jedi_knights_wristguard_(right)','wrist_assault_booster_zulu_(right)','targeting_assist_wrist_implant_PTI-IV_(right)'] + names += ['personnel_comlink_wrist-P4_(right)','manufacturing_verdicator_200a_(right)','insurgency_wrist_implantat-BLACK-(right)'] + names += ['targeter_ranging_wrist_assist_V4_(right)','bracelet_of_Inspired_Status(right)'] + + return names + +def itemChances(): + return [16,12,12,12,12,12,12,12] \ No newline at end of file diff --git a/scripts/loot/lootPools/rare_buff_items.py b/scripts/loot/lootPools/rare_buff_items.py index e69de29b..b816eb79 100644 --- a/scripts/loot/lootPools/rare_buff_items.py +++ b/scripts/loot/lootPools/rare_buff_items.py @@ -0,0 +1,8 @@ + +def itemTemplates(): + names = ['rare_nova_crystal','rare_rol_stone','rare_power_gem'] + names += ['rare_corusca_gem','rare_sasho_gem','rare_ankarres_sapphire'] + return names + +def itemChances(): + return [15,17,17,17,17,17] \ No newline at end of file diff --git a/scripts/loot/lootPools/various_schematics.py b/scripts/loot/lootPools/various_schematics.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/weaponsmith_components.py b/scripts/loot/lootPools/weaponsmith_components.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/wearable_backpacks.py b/scripts/loot/lootPools/wearable_backpacks.py index e69de29b..ac7a299e 100644 --- a/scripts/loot/lootPools/wearable_backpacks.py +++ b/scripts/loot/lootPools/wearable_backpacks.py @@ -0,0 +1,6 @@ + +def itemNames(): + return ['textiles_survival_backpack_(schematic)','textiles_survival_backpack_V2_(schematic)'] + +def itemChances(): + return [60,40] \ No newline at end of file diff --git a/src/resources/common/Forager.java b/src/resources/common/Forager.java index 557b4153..0f027675 100644 --- a/src/resources/common/Forager.java +++ b/src/resources/common/Forager.java @@ -460,16 +460,16 @@ public class Forager { // 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[] lootPoolChances = new int[]{60,30,10}; 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 + lootPoolNames = new String[]{"weaponsmith_components","jedi_components","gem_collection_items","treasure_hunter_collection_items"}; + lootPoolChances = new int[]{15,25,30,30}; + 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,11 +480,17 @@ 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); + + + //GEM COLLECTION ITEMS CONSUMABLE BUFF ITEMS // 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}; + lootPoolNames = new String[]{"rare_buff_items"}; + lootPoolChances = new int[]{100}; lootGroupChance = 1; treasureContainer.addToLootGroups(lootPoolNames, lootPoolChances, lootGroupChance); From 0425810f5192f64ba5c9ce57b9f05f85515d3df3 Mon Sep 17 00:00:00 2001 From: CharonInferar Date: Thu, 24 Apr 2014 04:59:51 +0200 Subject: [PATCH 06/12] Added more very rare loot and prof jewelry --- .../bracelet_of_Inspired_Status(right).py | 21 ++++++++++++++ ...er-toxin_wristband_prototype_IV_(right).py | 24 ++++++++++++++++ ...nsurgency_wrist_implantat-BLACK-(right).py | 24 ++++++++++++++++ .../insurgent_scanner_wrist_module_(right).py | 21 ++++++++++++++ ...jedi_knight_meditation_bracelet_(right).py | 26 +++++++++++++++++ .../jedi_knights_wristguard_(right).py | 24 ++++++++++++++++ .../treasureloot/jedi_wristguard(right).py | 28 +++++++++++++++++++ .../manufacturing_verdicator_200a_(right).py | 24 ++++++++++++++++ .../personnel_comlink_wrist-P4_(right).py | 24 ++++++++++++++++ ...argeter_ranging_wrist_assist_V4_(right).py | 24 ++++++++++++++++ ...ing_assist_wrist_implant_PTI-IV_(right).py | 24 ++++++++++++++++ .../wrist_assault_booster_zulu_(right).py | 24 ++++++++++++++++ ...st_communications_scanner_SCNv4_(right).py | 22 +++++++++++++++ .../veryrareloot/rare_ankarres_sapphire.py | 17 +++++++++++ .../veryrareloot/rare_corusca_gem.py | 16 +++++++++++ .../veryrareloot/rare_nova_crystal.py | 17 +++++++++++ .../lootItems/veryrareloot/rare_power_gem.py | 17 +++++++++++ .../lootItems/veryrareloot/rare_rol_stone.py | 17 +++++++++++ .../lootItems/veryrareloot/rare_sasho_gem.py | 17 +++++++++++ .../loot/lootPools/profession_bracelets_75.py | 4 +-- .../loot/lootPools/profession_bracelets_85.py | 4 +-- src/services/LootService.java | 19 +++++++++++++ 22 files changed, 434 insertions(+), 4 deletions(-) create mode 100644 scripts/loot/lootItems/treasureloot/bracelet_of_Inspired_Status(right).py create mode 100644 scripts/loot/lootItems/treasureloot/counter-toxin_wristband_prototype_IV_(right).py create mode 100644 scripts/loot/lootItems/treasureloot/insurgency_wrist_implantat-BLACK-(right).py create mode 100644 scripts/loot/lootItems/treasureloot/insurgent_scanner_wrist_module_(right).py create mode 100644 scripts/loot/lootItems/treasureloot/jedi_knight_meditation_bracelet_(right).py create mode 100644 scripts/loot/lootItems/treasureloot/jedi_knights_wristguard_(right).py create mode 100644 scripts/loot/lootItems/treasureloot/jedi_wristguard(right).py create mode 100644 scripts/loot/lootItems/treasureloot/manufacturing_verdicator_200a_(right).py create mode 100644 scripts/loot/lootItems/treasureloot/personnel_comlink_wrist-P4_(right).py create mode 100644 scripts/loot/lootItems/treasureloot/targeter_ranging_wrist_assist_V4_(right).py create mode 100644 scripts/loot/lootItems/treasureloot/targeting_assist_wrist_implant_PTI-IV_(right).py create mode 100644 scripts/loot/lootItems/treasureloot/wrist_assault_booster_zulu_(right).py create mode 100644 scripts/loot/lootItems/treasureloot/wrist_communications_scanner_SCNv4_(right).py create mode 100644 scripts/loot/lootItems/veryrareloot/rare_ankarres_sapphire.py create mode 100644 scripts/loot/lootItems/veryrareloot/rare_corusca_gem.py create mode 100644 scripts/loot/lootItems/veryrareloot/rare_nova_crystal.py create mode 100644 scripts/loot/lootItems/veryrareloot/rare_power_gem.py create mode 100644 scripts/loot/lootItems/veryrareloot/rare_rol_stone.py create mode 100644 scripts/loot/lootItems/veryrareloot/rare_sasho_gem.py diff --git a/scripts/loot/lootItems/treasureloot/bracelet_of_Inspired_Status(right).py b/scripts/loot/lootItems/treasureloot/bracelet_of_Inspired_Status(right).py new file mode 100644 index 00000000..57fbb45d --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/bracelet_of_Inspired_Status(right).py @@ -0,0 +1,21 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + +def customItemName(): + + return 'Bracelet of Inspired Status (Right)' + +def requiredProfession(): + + return 'Entertainer' + +def requiredCL(): + + return 80 + +def itemSkillMods(): + + mods = ['expertise_en_inspire_pulse_duration_increase','1'] + return mods 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 new file mode 100644 index 00000000..13e10f5e --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/counter-toxin_wristband_prototype_IV_(right).py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + +def customItemName(): + + return 'Adventurer Hiker & Hunter Counter-Toxin Wristband Prototype IV (right)' + +def biolink(): + + return 1 + +def requiredCL(): + + return 75 + +def itemSkillMods(): + + mods = ['absorption_bleeding','8'] + mods += ['absorption_disease','8'] + mods += ['absorption_fire','8'] + mods += ['absorption_poison','8'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/insurgency_wrist_implantat-BLACK-(right).py b/scripts/loot/lootItems/treasureloot/insurgency_wrist_implantat-BLACK-(right).py new file mode 100644 index 00000000..91289dfb --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/insurgency_wrist_implantat-BLACK-(right).py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + +def customItemName(): + + return 'Corellidyne Personal Insurgency Wris Implantat -BLACK- (Right)' + +def requiredProfession(): + + return 'Spy' + +def requiredCL(): + + return 75 + +def itemSkillMods(): + + mods = ['expertise_action_line_sp_dm','4'] + mods += ['expertise_critical_line_sp_dm','4'] + mods += ['expertise_damage_line_sp_dm','4'] + mods += ['expertise_freeshot_sp_dm','4'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/insurgent_scanner_wrist_module_(right).py b/scripts/loot/lootItems/treasureloot/insurgent_scanner_wrist_module_(right).py new file mode 100644 index 00000000..9311b78f --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/insurgent_scanner_wrist_module_(right).py @@ -0,0 +1,21 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + +def customItemName(): + + return 'Idellian Arrays PLFS-4000 Insurgent Scanner Wrist Module (Right)' + +def biolink(): + + return 1 + +def requiredCL(): + + return 75 + +def itemSkillMods(): + + mods = ['detect_hidden','10'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/jedi_knight_meditation_bracelet_(right).py b/scripts/loot/lootItems/treasureloot/jedi_knight_meditation_bracelet_(right).py new file mode 100644 index 00000000..92ef3974 --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/jedi_knight_meditation_bracelet_(right).py @@ -0,0 +1,26 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + +def customItemName(): + + return 'Jedi Knight Meditation Bracelet (right)' + +def requiredProfession(): + + return 'Jedi' + +def requiredCL(): + + return 75 + +def biolink(): + + return 1 + +def itemSkillMods(): + + mods = ['jedi_saber_assembly','3'] + mods += ['jedi_saber_experimentation','10'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/jedi_knights_wristguard_(right).py b/scripts/loot/lootItems/treasureloot/jedi_knights_wristguard_(right).py new file mode 100644 index 00000000..0056d769 --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/jedi_knights_wristguard_(right).py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + +def customItemName(): + + return 'Jedi Knight\'s Wristguard (Right)' + +def requiredProfession(): + + return 'Jedi' + +def requiredCL(): + + return 85 + +def itemSkillMods(): + + mods = ['expertise_action_line_fs_dm','4'] + mods += ['expertise_critical_line_fs_dm','4'] + mods += ['expertise_damage_line_fs_dm','4'] + mods += ['expertise_freeshot_fs_dm','4'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/jedi_wristguard(right).py b/scripts/loot/lootItems/treasureloot/jedi_wristguard(right).py new file mode 100644 index 00000000..ecc1101b --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/jedi_wristguard(right).py @@ -0,0 +1,28 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + +def customItemName(): + + return 'Jedi\'s Wristguard (Right)' + +def requiredProfession(): + + return 'Jedi' + +def biolink(): + + return 1 + +def requiredCL(): + + return 61 + +def itemSkillMods(): + + mods = ['expertise_action_line_fs_dm','3'] + mods += ['expertise_critical_line_fs_dm','3'] + mods += ['expertise_damage_line_fs_dm','3'] + mods += ['expertise_freeshot_fs_dm','3'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/manufacturing_verdicator_200a_(right).py b/scripts/loot/lootItems/treasureloot/manufacturing_verdicator_200a_(right).py new file mode 100644 index 00000000..0442286f --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/manufacturing_verdicator_200a_(right).py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + +def customItemName(): + + return 'Saldalith Manufacturing Verdicator 200A (Right)' + +def requiredProfession(): + + return 'Medic' + +def requiredCL(): + + return 85 + +def itemSkillMods(): + + mods = ['expertise_action_line_me_dm','4'] + mods += ['expertise_critical_line_me_dm','4'] + mods += ['expertise_damage_line_me_dm','4'] + mods += ['expertise_healing_all','4'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/personnel_comlink_wrist-P4_(right).py b/scripts/loot/lootItems/treasureloot/personnel_comlink_wrist-P4_(right).py new file mode 100644 index 00000000..86de451f --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/personnel_comlink_wrist-P4_(right).py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + +def customItemName(): + + return 'SoroSuub Personnel Comlink Wrist-P4 (right)' + +def requiredProfession(): + + return 'Officer' + +def requiredCL(): + + return 85 + +def itemSkillMods(): + + mods = ['expertise_action_line_of_sure','4'] + mods += ['expertise_critical_line_of_sure','4'] + mods += ['expertise_damage_line_of_sure','4'] + mods += ['expertise_freeshot_of_sure','4'] + return mods 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 new file mode 100644 index 00000000..79e0623d --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/targeter_ranging_wrist_assist_V4_(right).py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + +def customItemName(): + + return 'Merr-Sonn Targeter Ranging Wrist Assist V4 (right)' + +def requiredProfession(): + + return 'Smuggler' + +def requiredCL(): + + return 85 + +def itemSkillMods(): + + mods = ['fast_attack_line_sm_dm','4'] + mods += ['expertise_critical_line_sm_dm','4'] + mods += ['expertise_damage_line_sm_dm','4'] + mods += ['expertise_freeshot_sm_dm','4'] + return mods 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 new file mode 100644 index 00000000..0c4d1431 --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/targeting_assist_wrist_implant_PTI-IV_(right).py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + +def customItemName(): + + return 'Traxes BioElectronic Targeting Assist Wrist Implant PTI-IV (Right)' + +def requiredProfession(): + + return 'Commando' + +def requiredCL(): + + return 85 + +def itemSkillMods(): + + mods = ['expertise_action_line_co_dm','4'] + mods += ['expertise_critical_line_co_dm','4'] + mods += ['expertise_damage_line_co_dm','4'] + mods += ['expertise_freeshot_co_dm','4'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/wrist_assault_booster_zulu_(right).py b/scripts/loot/lootItems/treasureloot/wrist_assault_booster_zulu_(right).py new file mode 100644 index 00000000..fb8787d9 --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/wrist_assault_booster_zulu_(right).py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + +def customItemName(): + + return 'Blastech Wristek - Wrist Assault Booster Zulu (right)' + +def requiredProfession(): + + return 'Bounty Hunter' + +def requiredCL(): + + return 85 + +def itemSkillMods(): + + mods = ['expertise_action_line_fs_dm','4'] + mods += ['expertise_critical_line_dm','4'] + mods += ['expertise_damage_line_dm','4'] + mods += ['expertise_freeshot_dm','4'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/wrist_communications_scanner_SCNv4_(right).py b/scripts/loot/lootItems/treasureloot/wrist_communications_scanner_SCNv4_(right).py new file mode 100644 index 00000000..b90c0a36 --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/wrist_communications_scanner_SCNv4_(right).py @@ -0,0 +1,22 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + +def customItemName(): + + return 'Courier Wrist Communications Scanner SCNv4 (Right)' + +def requiredProfession(): + + return 'Bounty Hunter' + +def requiredCL(): + + return 75 + +def itemSkillMods(): + + mods = ['droid_find_speed','10'] + mods += ['expertise_critical_niche_pvp','2'] + return mods diff --git a/scripts/loot/lootItems/veryrareloot/rare_ankarres_sapphire.py b/scripts/loot/lootItems/veryrareloot/rare_ankarres_sapphire.py new file mode 100644 index 00000000..652de8d4 --- /dev/null +++ b/scripts/loot/lootItems/veryrareloot/rare_ankarres_sapphire.py @@ -0,0 +1,17 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + +def customItemName(): + + return 'Rare Ankarres Sapphire' + +def biolink(): + + return 1 + +def requiredCL(): + + return 80 + diff --git a/scripts/loot/lootItems/veryrareloot/rare_corusca_gem.py b/scripts/loot/lootItems/veryrareloot/rare_corusca_gem.py new file mode 100644 index 00000000..ffac6875 --- /dev/null +++ b/scripts/loot/lootItems/veryrareloot/rare_corusca_gem.py @@ -0,0 +1,16 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + +def customItemName(): + + return 'Rare Corusca Gem' + +def biolink(): + + return 1 + +def requiredCL(): + + return 80 diff --git a/scripts/loot/lootItems/veryrareloot/rare_nova_crystal.py b/scripts/loot/lootItems/veryrareloot/rare_nova_crystal.py new file mode 100644 index 00000000..0e6c09cb --- /dev/null +++ b/scripts/loot/lootItems/veryrareloot/rare_nova_crystal.py @@ -0,0 +1,17 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + +def customItemName(): + + return 'Rare Nova Crystal' + +def biolink(): + + return 1 + +def requiredCL(): + + return 80 + diff --git a/scripts/loot/lootItems/veryrareloot/rare_power_gem.py b/scripts/loot/lootItems/veryrareloot/rare_power_gem.py new file mode 100644 index 00000000..98e4c801 --- /dev/null +++ b/scripts/loot/lootItems/veryrareloot/rare_power_gem.py @@ -0,0 +1,17 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + +def customItemName(): + + return 'Rare Power Gem' + +def biolink(): + + return 1 + +def requiredCL(): + + return 80 + diff --git a/scripts/loot/lootItems/veryrareloot/rare_rol_stone.py b/scripts/loot/lootItems/veryrareloot/rare_rol_stone.py new file mode 100644 index 00000000..122d8292 --- /dev/null +++ b/scripts/loot/lootItems/veryrareloot/rare_rol_stone.py @@ -0,0 +1,17 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + +def customItemName(): + + return 'Rare Rol Stone' + +def biolink(): + + return 1 + +def requiredCL(): + + return 80 + diff --git a/scripts/loot/lootItems/veryrareloot/rare_sasho_gem.py b/scripts/loot/lootItems/veryrareloot/rare_sasho_gem.py new file mode 100644 index 00000000..50c7655d --- /dev/null +++ b/scripts/loot/lootItems/veryrareloot/rare_sasho_gem.py @@ -0,0 +1,17 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + +def customItemName(): + + return 'Rare Sasho Gem' + +def biolink(): + + return 1 + +def requiredCL(): + + return 80 + diff --git a/scripts/loot/lootPools/profession_bracelets_75.py b/scripts/loot/lootPools/profession_bracelets_75.py index 8a765e2f..1ac31b60 100644 --- a/scripts/loot/lootPools/profession_bracelets_75.py +++ b/scripts/loot/lootPools/profession_bracelets_75.py @@ -1,8 +1,8 @@ def itemNames(): names = ['jedi_knight_meditation_bracelet_(right)','wrist_communications_scanner_SCNv4_(right)'] - names += ['insurgent_scanner_wrist_module_(right)','counter-toxin_wristband_prototype_IV_(right)'] + names += ['insurgent_scanner_wrist_module_(right)','counter-toxin_wristband_prototype_IV_(right)','insurgency_wrist_implantat-BLACK-(right)'] return names def itemChances(): - return [25,25,25,25] \ No newline at end of file + return [20,20,20,20,20] \ No newline at end of file diff --git a/scripts/loot/lootPools/profession_bracelets_85.py b/scripts/loot/lootPools/profession_bracelets_85.py index 9d609ba1..dbaba8db 100644 --- a/scripts/loot/lootPools/profession_bracelets_85.py +++ b/scripts/loot/lootPools/profession_bracelets_85.py @@ -1,10 +1,10 @@ def itemNames(): names = ['jedi_knights_wristguard_(right)','wrist_assault_booster_zulu_(right)','targeting_assist_wrist_implant_PTI-IV_(right)'] - names += ['personnel_comlink_wrist-P4_(right)','manufacturing_verdicator_200a_(right)','insurgency_wrist_implantat-BLACK-(right)'] + names += ['personnel_comlink_wrist-P4_(right)','manufacturing_verdicator_200a_(right)'] names += ['targeter_ranging_wrist_assist_V4_(right)','bracelet_of_Inspired_Status(right)'] return names def itemChances(): - return [16,12,12,12,12,12,12,12] \ No newline at end of file + return [16,14,14,14,14,14,14] \ No newline at end of file diff --git a/src/services/LootService.java b/src/services/LootService.java index 8f9fb3db..eabfc27a 100644 --- a/src/services/LootService.java +++ b/src/services/LootService.java @@ -292,6 +292,7 @@ public class LootService implements INetworkDispatch { Vector customizationAttributes = null; Vector customizationValues = null; Vector itemStats = null; + Vector itemSkillMods = null; if(core.scriptService.getMethod(itemPath,"","itemTemplate")==null){ String errorMessage = "Loot item '" + itemName + "' has no template function assigned in its script. Please contact Charon about this issue."; @@ -322,6 +323,9 @@ public class LootService implements INetworkDispatch { if(core.scriptService.getMethod(itemPath,"","itemStats")!=null) itemStats = (Vector)core.scriptService.fetchStringVector(itemPath,"itemStats"); + if(core.scriptService.getMethod(itemPath,"","itemStats")!=null) + itemSkillMods = (Vector)core.scriptService.fetchStringVector(itemPath,"itemSkillMods"); + if(core.scriptService.getMethod(itemPath,"","biolink")!=null) biolink = (Integer)core.scriptService.fetchInteger(itemPath,"biolink"); @@ -376,6 +380,13 @@ public class LootService implements INetworkDispatch { } handleStats(droppedItem, itemStats); } + + if (itemSkillMods!=null){ + handleSkillMods(droppedItem, itemSkillMods); + } + + + // if (customizationValues!=null) // setCustomization(droppedItem, itemName); @@ -532,6 +543,14 @@ public class LootService implements INetworkDispatch { } } + private void handleSkillMods(TangibleObject droppedItem, Vector skillMods) { + for (int i=0;i Date: Fri, 25 Apr 2014 01:49:50 +0200 Subject: [PATCH 07/12] Jedi Loot templates inserted Buried treasure loot realized --- options.cfg | 4 +- scripts/commands/forage.py | 1 - .../lootItems/kraytpearl_ancient_flawless.py | 8 +++ .../bracelet_of_Inspired_Status(right).py | 2 +- ...er-toxin_wristband_prototype_IV_(right).py | 2 +- ...nsurgency_wrist_implantat-BLACK-(right).py | 2 +- .../insurgent_scanner_wrist_module_(right).py | 2 +- ...jedi_knight_meditation_bracelet_(right).py | 2 +- .../jedi_knights_wristguard_(right).py | 2 +- .../treasureloot/jedi_wristguard(right).py | 2 +- .../manufacturing_verdicator_200a_(right).py | 2 +- .../treasureloot/mysterious_data_disk.py | 9 +++ .../personnel_comlink_wrist-P4_(right).py | 2 +- ...argeter_ranging_wrist_assist_V4_(right).py | 2 +- ...ing_assist_wrist_implant_PTI-IV_(right).py | 2 +- .../wrist_assault_booster_zulu_(right).py | 2 +- ...st_communications_scanner_SCNv4_(right).py | 2 +- .../lootPools/jedi_components_treasure.py | 14 ++++ scripts/loot/lootPools/treasure_extra.py | 8 +++ scripts/mobiles/tatooine/tusken_raider.py | 1 + scripts/radial/object/treasuremap.py | 2 +- scripts/radial/object/treasuremapExtract.py | 8 +-- scripts/radial/object/treasuremapRead.py | 3 +- src/resources/common/Forager.java | 67 ++++++++++++------- src/resources/objects/loot/LootGroup.java | 12 ++-- .../objects/tangible/TangibleObject.java | 4 +- src/services/DevService.java | 3 +- src/services/LootService.java | 60 +++++++++++++---- src/services/ScriptService.java | 10 +++ src/services/object/ObjectService.java | 8 ++- 30 files changed, 176 insertions(+), 72 deletions(-) create mode 100644 scripts/loot/lootItems/kraytpearl_ancient_flawless.py create mode 100644 scripts/loot/lootItems/treasureloot/mysterious_data_disk.py create mode 100644 scripts/loot/lootPools/treasure_extra.py 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); From c7a9b8492b402d2baf0b5e4e4bc47289b9f7f6e5 Mon Sep 17 00:00:00 2001 From: CharonInferar Date: Fri, 25 Apr 2014 03:14:29 +0200 Subject: [PATCH 08/12] Added a preliminary template to gems --- .../lootItems/treasureloot/force_amplification_crystal.py | 5 +++++ .../loot/lootItems/veryrareloot/rare_ankarres_sapphire.py | 2 +- scripts/loot/lootItems/veryrareloot/rare_corusca_gem.py | 2 +- scripts/loot/lootItems/veryrareloot/rare_nova_crystal.py | 2 +- scripts/loot/lootItems/veryrareloot/rare_power_gem.py | 2 +- scripts/loot/lootItems/veryrareloot/rare_rol_stone.py | 2 +- scripts/loot/lootItems/veryrareloot/rare_sasho_gem.py | 2 +- 7 files changed, 11 insertions(+), 6 deletions(-) create mode 100644 scripts/loot/lootItems/treasureloot/force_amplification_crystal.py diff --git a/scripts/loot/lootItems/treasureloot/force_amplification_crystal.py b/scripts/loot/lootItems/treasureloot/force_amplification_crystal.py new file mode 100644 index 00000000..aaf1e4d9 --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/force_amplification_crystal.py @@ -0,0 +1,5 @@ + +def itemTemplate(): + + return ['object/tangible/loot/misc/shared_force_crystal.iff'] + diff --git a/scripts/loot/lootItems/veryrareloot/rare_ankarres_sapphire.py b/scripts/loot/lootItems/veryrareloot/rare_ankarres_sapphire.py index 652de8d4..5559fc50 100644 --- a/scripts/loot/lootItems/veryrareloot/rare_ankarres_sapphire.py +++ b/scripts/loot/lootItems/veryrareloot/rare_ankarres_sapphire.py @@ -1,7 +1,7 @@ def itemTemplate(): - return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + return ['object/tangible/loot/creature_loot/collections/shared_purple_rnd_cut_gem_style1.iff'] def customItemName(): diff --git a/scripts/loot/lootItems/veryrareloot/rare_corusca_gem.py b/scripts/loot/lootItems/veryrareloot/rare_corusca_gem.py index ffac6875..4b6c1544 100644 --- a/scripts/loot/lootItems/veryrareloot/rare_corusca_gem.py +++ b/scripts/loot/lootItems/veryrareloot/rare_corusca_gem.py @@ -1,7 +1,7 @@ def itemTemplate(): - return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + return ['object/tangible/loot/creature_loot/collections/shared_purple_rnd_cut_gem_style1.iff'] def customItemName(): diff --git a/scripts/loot/lootItems/veryrareloot/rare_nova_crystal.py b/scripts/loot/lootItems/veryrareloot/rare_nova_crystal.py index 0e6c09cb..ccd74091 100644 --- a/scripts/loot/lootItems/veryrareloot/rare_nova_crystal.py +++ b/scripts/loot/lootItems/veryrareloot/rare_nova_crystal.py @@ -1,7 +1,7 @@ def itemTemplate(): - return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + return ['object/tangible/loot/creature_loot/collections/shared_purple_rnd_cut_gem_style1.iff'] def customItemName(): diff --git a/scripts/loot/lootItems/veryrareloot/rare_power_gem.py b/scripts/loot/lootItems/veryrareloot/rare_power_gem.py index 98e4c801..f51777d3 100644 --- a/scripts/loot/lootItems/veryrareloot/rare_power_gem.py +++ b/scripts/loot/lootItems/veryrareloot/rare_power_gem.py @@ -1,7 +1,7 @@ def itemTemplate(): - return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + return ['object/tangible/loot/creature_loot/collections/shared_purple_rnd_cut_gem_style1.iff'] def customItemName(): diff --git a/scripts/loot/lootItems/veryrareloot/rare_rol_stone.py b/scripts/loot/lootItems/veryrareloot/rare_rol_stone.py index 122d8292..2795adff 100644 --- a/scripts/loot/lootItems/veryrareloot/rare_rol_stone.py +++ b/scripts/loot/lootItems/veryrareloot/rare_rol_stone.py @@ -1,7 +1,7 @@ def itemTemplate(): - return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + return ['object/tangible/loot/creature_loot/collections/shared_purple_rnd_cut_gem_style1.iff'] def customItemName(): diff --git a/scripts/loot/lootItems/veryrareloot/rare_sasho_gem.py b/scripts/loot/lootItems/veryrareloot/rare_sasho_gem.py index 50c7655d..17a9ec0b 100644 --- a/scripts/loot/lootItems/veryrareloot/rare_sasho_gem.py +++ b/scripts/loot/lootItems/veryrareloot/rare_sasho_gem.py @@ -1,7 +1,7 @@ def itemTemplate(): - return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + return ['object/tangible/loot/creature_loot/collections/shared_purple_rnd_cut_gem_style1.iff'] def customItemName(): From f1834d52ffb6e96045b4a65b37dd6a536a1f70d1 Mon Sep 17 00:00:00 2001 From: CharonInferar Date: Fri, 25 Apr 2014 03:27:45 +0200 Subject: [PATCH 09/12] Adv Stim loot pool added --- options.cfg | 4 ++-- scripts/loot/lootPools/advanced_stims_80.py | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/options.cfg b/options.cfg index 5a3a7f8e..cb743c88 100644 --- a/options.cfg +++ b/options.cfg @@ -1,3 +1,3 @@ -LOAD.SNAPSHOT_OBJECTS=1 -LOAD.BUILDOUT_OBJECTS=1 +LOAD.SNAPSHOT_OBJECTS=0 +LOAD.BUILDOUT_OBJECTS=0 LOAD.RESOURCE.SYSTEM=1 \ No newline at end of file diff --git a/scripts/loot/lootPools/advanced_stims_80.py b/scripts/loot/lootPools/advanced_stims_80.py index e69de29b..ea905ef8 100644 --- a/scripts/loot/lootPools/advanced_stims_80.py +++ b/scripts/loot/lootPools/advanced_stims_80.py @@ -0,0 +1,8 @@ + +def itemNames(): + + return ['adv_agility_stim_80','adv_power_stim_80'] + +def itemChances(): + + return [50,50] \ No newline at end of file From d1f33de57d77829cd7f272cdb4062800f0af811c Mon Sep 17 00:00:00 2001 From: Bronco69 Date: Thu, 24 Apr 2014 16:31:52 +0200 Subject: [PATCH 10/12] Fixed bonus sets equip message Added system message for all bonus sets when activating bonus --- .../equipment/bonus_sets/set_bonus_bh_dps.py | 3 ++ .../bonus_sets/set_bonus_bh_utility_a.py | 3 ++ .../equipment/bonus_sets/set_bonus_co_dps.py | 3 ++ .../bonus_sets/set_bonus_co_utility_a.py | 3 ++ scripts/equipment/bonus_sets/set_bonus_ent.py | 31 +++++++++++++++++++ .../bonus_sets/set_bonus_jedi_dps.py | 3 ++ .../bonus_sets/set_bonus_jedi_utility_a.py | 3 ++ .../bonus_sets/set_bonus_medic_dps.py | 3 ++ .../bonus_sets/set_bonus_medic_utility_a.py | 3 ++ .../bonus_sets/set_bonus_medic_utility_b.py | 4 ++- .../bonus_sets/set_bonus_officer_dps.py | 3 ++ .../bonus_sets/set_bonus_officer_utility_a.py | 3 ++ .../bonus_sets/set_bonus_smuggler_dps.py | 3 ++ .../set_bonus_smuggler_utility_a.py | 3 ++ .../equipment/bonus_sets/set_bonus_spy_dps.py | 3 ++ .../bonus_sets/set_bonus_spy_utility_a.py | 3 ++ .../bonus_sets/set_bonus_spy_utility_b.py | 3 ++ 17 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 scripts/equipment/bonus_sets/set_bonus_ent.py diff --git a/scripts/equipment/bonus_sets/set_bonus_bh_dps.py b/scripts/equipment/bonus_sets/set_bonus_bh_dps.py index 61b48b47..4a18c18e 100644 --- a/scripts/equipment/bonus_sets/set_bonus_bh_dps.py +++ b/scripts/equipment/bonus_sets/set_bonus_bh_dps.py @@ -18,10 +18,13 @@ def handleChange(core, creature, set): if wornItems == 3: core.buffService.addBuffToCreature(creature, "set_bonus_bh_dps_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_bh_dps_1_sys', 0) elif wornItems == 4: core.buffService.addBuffToCreature(creature, "set_bonus_bh_dps_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_bh_dps_2_sys', 0) elif wornItems == 5: core.buffService.addBuffToCreature(creature, "set_bonus_bh_dps_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_bh_dps_3_sys', 0) else: core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_bh_dps_1") core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_bh_dps_2") diff --git a/scripts/equipment/bonus_sets/set_bonus_bh_utility_a.py b/scripts/equipment/bonus_sets/set_bonus_bh_utility_a.py index 609c2d28..6dd6bfb8 100644 --- a/scripts/equipment/bonus_sets/set_bonus_bh_utility_a.py +++ b/scripts/equipment/bonus_sets/set_bonus_bh_utility_a.py @@ -18,10 +18,13 @@ def handleChange(core, creature, set): if wornItems == 3: core.buffService.addBuffToCreature(creature, "set_bonus_bh_utility_a_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_bh_utility_a_1_sys', 0) elif wornItems == 4: core.buffService.addBuffToCreature(creature, "set_bonus_bh_utility_a_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_bh_utility_a_2_sys', 0) elif wornItems == 5: core.buffService.addBuffToCreature(creature, "set_bonus_bh_utility_a_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_bh_utility_a_3_sys', 0) else: core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_bh_utility_a_1") core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_bh_utility_a_2") diff --git a/scripts/equipment/bonus_sets/set_bonus_co_dps.py b/scripts/equipment/bonus_sets/set_bonus_co_dps.py index 50588030..fa3533b2 100644 --- a/scripts/equipment/bonus_sets/set_bonus_co_dps.py +++ b/scripts/equipment/bonus_sets/set_bonus_co_dps.py @@ -18,10 +18,13 @@ def handleChange(core, creature, set): if wornItems == 3: core.buffService.addBuffToCreature(creature, "set_bonus_co_dps_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_co_dps_1_sys', 0) elif wornItems == 4: core.buffService.addBuffToCreature(creature, "set_bonus_co_dps_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_co_dps_2_sys', 0) elif wornItems == 5: core.buffService.addBuffToCreature(creature, "set_bonus_co_dps_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_co_dps_3_sys', 0) else: core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_co_dps_1") core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_co_dps_2") diff --git a/scripts/equipment/bonus_sets/set_bonus_co_utility_a.py b/scripts/equipment/bonus_sets/set_bonus_co_utility_a.py index 28d058d1..f70cd5c3 100644 --- a/scripts/equipment/bonus_sets/set_bonus_co_utility_a.py +++ b/scripts/equipment/bonus_sets/set_bonus_co_utility_a.py @@ -18,10 +18,13 @@ def handleChange(core, creature, set): if wornItems == 3: core.buffService.addBuffToCreature(creature, "set_bonus_co_utility_a_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_co_utility_a_1_sys', 0) elif wornItems == 4: core.buffService.addBuffToCreature(creature, "set_bonus_co_utility_a_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_co_utility_a_2_sys', 0) elif wornItems == 5: core.buffService.addBuffToCreature(creature, "set_bonus_co_utility_a_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_co_utility_a_3_sys', 0) else: core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_co_utility_a_1") core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_co_utility_a_2") diff --git a/scripts/equipment/bonus_sets/set_bonus_ent.py b/scripts/equipment/bonus_sets/set_bonus_ent.py new file mode 100644 index 00000000..b0f90f98 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_ent.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_ent") + + bonusSet.addRequiredItem("item_band_set_ent_01_01") + bonusSet.addRequiredItem("item_ring_set_ent_01_01") + bonusSet.addRequiredItem("item_necklace_set_ent_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_ent_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_ent_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_ent_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_ent_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_ent_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_ent_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_ent_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_ent_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_ent_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_ent_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_ent_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_jedi_dps.py b/scripts/equipment/bonus_sets/set_bonus_jedi_dps.py index 3a08c9e9..6b127317 100644 --- a/scripts/equipment/bonus_sets/set_bonus_jedi_dps.py +++ b/scripts/equipment/bonus_sets/set_bonus_jedi_dps.py @@ -18,10 +18,13 @@ def handleChange(core, creature, set): if wornItems == 3: core.buffService.addBuffToCreature(creature, "set_bonus_jedi_dps_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_jedi_dps_1_sys', 0) elif wornItems == 4: core.buffService.addBuffToCreature(creature, "set_bonus_jedi_dps_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_jedi_dps_2_sys', 0) elif wornItems == 5: core.buffService.addBuffToCreature(creature, "set_bonus_jedi_dps_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_jedi_dps_3_sys', 0) else: core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_jedi_dps_1") core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_jedi_dps_2") diff --git a/scripts/equipment/bonus_sets/set_bonus_jedi_utility_a.py b/scripts/equipment/bonus_sets/set_bonus_jedi_utility_a.py index 52ebf5ce..ec88e7bb 100644 --- a/scripts/equipment/bonus_sets/set_bonus_jedi_utility_a.py +++ b/scripts/equipment/bonus_sets/set_bonus_jedi_utility_a.py @@ -18,10 +18,13 @@ def handleChange(core, creature, set): if wornItems == 3: core.buffService.addBuffToCreature(creature, "set_bonus_jedi_utility_a_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_jedi_utility_a_1_sys', 0) elif wornItems == 4: core.buffService.addBuffToCreature(creature, "set_bonus_jedi_utility_a_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_jedi_utility_a_2_sys', 0) elif wornItems == 5: core.buffService.addBuffToCreature(creature, "set_bonus_jedi_utility_a_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_jedi_utility_a_3_sys', 0) else: core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_jedi_utility_a_1") core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_jedi_utility_a_2") diff --git a/scripts/equipment/bonus_sets/set_bonus_medic_dps.py b/scripts/equipment/bonus_sets/set_bonus_medic_dps.py index f1966755..8d6c1346 100644 --- a/scripts/equipment/bonus_sets/set_bonus_medic_dps.py +++ b/scripts/equipment/bonus_sets/set_bonus_medic_dps.py @@ -18,10 +18,13 @@ def handleChange(core, creature, set): if wornItems == 3: core.buffService.addBuffToCreature(creature, "set_bonus_medic_dps_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_medic_dps_1_sys', 0) elif wornItems == 4: core.buffService.addBuffToCreature(creature, "set_bonus_medic_dps_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_medic_dps_2_sys', 0) elif wornItems == 5: core.buffService.addBuffToCreature(creature, "set_bonus_medic_dps_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_medic_dps_3_sys', 0) else: core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_dps_1") core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_dps_2") diff --git a/scripts/equipment/bonus_sets/set_bonus_medic_utility_a.py b/scripts/equipment/bonus_sets/set_bonus_medic_utility_a.py index c21b2adb..6853e429 100644 --- a/scripts/equipment/bonus_sets/set_bonus_medic_utility_a.py +++ b/scripts/equipment/bonus_sets/set_bonus_medic_utility_a.py @@ -18,10 +18,13 @@ def handleChange(core, creature, set): if wornItems == 3: core.buffService.addBuffToCreature(creature, "set_bonus_medic_utility_a_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_medic_utility_a_1_sys', 0) elif wornItems == 4: core.buffService.addBuffToCreature(creature, "set_bonus_medic_utility_a_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_medic_utility_a_2_sys', 0) elif wornItems == 5: core.buffService.addBuffToCreature(creature, "set_bonus_medic_utility_a_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_medic_utility_a_3_sys', 0) else: core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_utility_a_1") core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_utility_a_2") diff --git a/scripts/equipment/bonus_sets/set_bonus_medic_utility_b.py b/scripts/equipment/bonus_sets/set_bonus_medic_utility_b.py index ced4b40f..a46fe246 100644 --- a/scripts/equipment/bonus_sets/set_bonus_medic_utility_b.py +++ b/scripts/equipment/bonus_sets/set_bonus_medic_utility_b.py @@ -1,4 +1,3 @@ - import sys from services.equipment import BonusSetTemplate from java.util import Vector @@ -19,10 +18,13 @@ def handleChange(core, creature, set): if wornItems == 3: core.buffService.addBuffToCreature(creature, "set_bonus_medic_utility_b_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_medic_utility_b_1_sys', 0) elif wornItems == 4: core.buffService.addBuffToCreature(creature, "set_bonus_medic_utility_b_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_medic_utility_b_2_sys', 0) elif wornItems == 5: core.buffService.addBuffToCreature(creature, "set_bonus_medic_utility_b_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_medic_utility_b_3_sys', 0) else: core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_utility_b_1") core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_utility_b_2") diff --git a/scripts/equipment/bonus_sets/set_bonus_officer_dps.py b/scripts/equipment/bonus_sets/set_bonus_officer_dps.py index 26d8f62a..d990eae6 100644 --- a/scripts/equipment/bonus_sets/set_bonus_officer_dps.py +++ b/scripts/equipment/bonus_sets/set_bonus_officer_dps.py @@ -18,10 +18,13 @@ def handleChange(core, creature, set): if wornItems == 3: core.buffService.addBuffToCreature(creature, "set_bonus_officer_dps_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_officer_dps_1_sys', 0) elif wornItems == 4: core.buffService.addBuffToCreature(creature, "set_bonus_officer_dps_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_officer_dps_2_sys', 0) elif wornItems == 5: core.buffService.addBuffToCreature(creature, "set_bonus_officer_dps_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_officer_dps_3_sys', 0) else: core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_officer_dps_1") core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_officer_dps_2") diff --git a/scripts/equipment/bonus_sets/set_bonus_officer_utility_a.py b/scripts/equipment/bonus_sets/set_bonus_officer_utility_a.py index 7e9a33d7..16558a5c 100644 --- a/scripts/equipment/bonus_sets/set_bonus_officer_utility_a.py +++ b/scripts/equipment/bonus_sets/set_bonus_officer_utility_a.py @@ -18,10 +18,13 @@ def handleChange(core, creature, set): if wornItems == 3: core.buffService.addBuffToCreature(creature, "set_bonus_officer_utility_a_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_officer_utility_a_1_sys', 0) elif wornItems == 4: core.buffService.addBuffToCreature(creature, "set_bonus_officer_utility_a_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_officer_utility_a_2_sys', 0) elif wornItems == 5: core.buffService.addBuffToCreature(creature, "set_bonus_officer_utility_a_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_officer_utility_a_3_sys', 0) else: core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_officer_utility_a_1") core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_officer_utility_a_2") diff --git a/scripts/equipment/bonus_sets/set_bonus_smuggler_dps.py b/scripts/equipment/bonus_sets/set_bonus_smuggler_dps.py index 99ac8ecf..d29d0981 100644 --- a/scripts/equipment/bonus_sets/set_bonus_smuggler_dps.py +++ b/scripts/equipment/bonus_sets/set_bonus_smuggler_dps.py @@ -18,10 +18,13 @@ def handleChange(core, creature, set): if wornItems == 3: core.buffService.addBuffToCreature(creature, "set_bonus_smuggler_dps_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_smuggler_dps_1_sys', 0) elif wornItems == 4: core.buffService.addBuffToCreature(creature, "set_bonus_smuggler_dps_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_smuggler_dps_2_sys', 0) elif wornItems == 5: core.buffService.addBuffToCreature(creature, "set_bonus_smuggler_dps_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_smuggler_dps_3_sys', 0) else: core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_smuggler_dps_1") core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_smuggler_dps_2") diff --git a/scripts/equipment/bonus_sets/set_bonus_smuggler_utility_a.py b/scripts/equipment/bonus_sets/set_bonus_smuggler_utility_a.py index 9b3d928f..94bec671 100644 --- a/scripts/equipment/bonus_sets/set_bonus_smuggler_utility_a.py +++ b/scripts/equipment/bonus_sets/set_bonus_smuggler_utility_a.py @@ -18,10 +18,13 @@ def handleChange(core, creature, set): if wornItems == 3: core.buffService.addBuffToCreature(creature, "set_bonus_smuggler_utility_a_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_smuggler_utility_a_1_sys', 0) elif wornItems == 4: core.buffService.addBuffToCreature(creature, "set_bonus_smuggler_utility_a_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_smuggler_utility_a_2_sys', 0) elif wornItems == 5: core.buffService.addBuffToCreature(creature, "set_bonus_smuggler_utility_a_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_smuggler_utility_a_3_sys', 0) else: core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_smuggler_utility_a_1") core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_smuggler_utility_a_2") diff --git a/scripts/equipment/bonus_sets/set_bonus_spy_dps.py b/scripts/equipment/bonus_sets/set_bonus_spy_dps.py index 0cd1747e..3da099f0 100644 --- a/scripts/equipment/bonus_sets/set_bonus_spy_dps.py +++ b/scripts/equipment/bonus_sets/set_bonus_spy_dps.py @@ -18,10 +18,13 @@ def handleChange(core, creature, set): if wornItems == 3: core.buffService.addBuffToCreature(creature, "set_bonus_spy_dps_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_spy_dps_1_sys', 0) elif wornItems == 4: core.buffService.addBuffToCreature(creature, "set_bonus_spy_dps_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_spy_dps_2_sys', 0) elif wornItems == 5: core.buffService.addBuffToCreature(creature, "set_bonus_spy_dps_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_spy_dps_3_sys', 0) else: core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_dps_1") core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_dps_2") diff --git a/scripts/equipment/bonus_sets/set_bonus_spy_utility_a.py b/scripts/equipment/bonus_sets/set_bonus_spy_utility_a.py index 7ecc68fa..629ce660 100644 --- a/scripts/equipment/bonus_sets/set_bonus_spy_utility_a.py +++ b/scripts/equipment/bonus_sets/set_bonus_spy_utility_a.py @@ -18,10 +18,13 @@ def handleChange(core, creature, set): if wornItems == 3: core.buffService.addBuffToCreature(creature, "set_bonus_spy_utility_a_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_spy_utility_a_1_sys', 0) elif wornItems == 4: core.buffService.addBuffToCreature(creature, "set_bonus_spy_utility_a_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_spy_utility_a_2_sys', 0) elif wornItems == 5: core.buffService.addBuffToCreature(creature, "set_bonus_spy_utility_a_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_spy_utility_a_3_sys', 0) else: core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_utility_a_1") core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_utility_a_2") diff --git a/scripts/equipment/bonus_sets/set_bonus_spy_utility_b.py b/scripts/equipment/bonus_sets/set_bonus_spy_utility_b.py index 09536bd4..b60b1c8f 100644 --- a/scripts/equipment/bonus_sets/set_bonus_spy_utility_b.py +++ b/scripts/equipment/bonus_sets/set_bonus_spy_utility_b.py @@ -18,10 +18,13 @@ def handleChange(core, creature, set): if wornItems == 3: core.buffService.addBuffToCreature(creature, "set_bonus_spy_utility_b_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_spy_utility_b_1_sys', 0) elif wornItems == 4: core.buffService.addBuffToCreature(creature, "set_bonus_spy_utility_b_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_spy_utility_b_2_sys', 0) elif wornItems == 5: core.buffService.addBuffToCreature(creature, "set_bonus_spy_utility_b_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_spy_utility_b_3_sys', 0) else: core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_utility_b_1") core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_utility_b_2") From 46850e012cf7ce090d6a72488ef7082ab35baf9b Mon Sep 17 00:00:00 2001 From: Waverunner Date: Thu, 24 Apr 2014 18:02:10 -0400 Subject: [PATCH 11/12] Fixed #497: Talus Imperial Outpost wrong spawn point --- src/services/travel/TravelService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/travel/TravelService.java b/src/services/travel/TravelService.java index a6929851..addfbfe1 100644 --- a/src/services/travel/TravelService.java +++ b/src/services/travel/TravelService.java @@ -320,7 +320,7 @@ public class TravelService implements INetworkDispatch { public void doTransport(SWGObject actor, TravelPoint tp) { Planet planet = core.terrainService.getPlanetByName(tp.getPlanetName()); - Point3D spawnLocation = SpawnPoint.getRandomPosition(tp.getShuttle().getPosition(), 5, 20, actor.getPlanetId()); + Point3D spawnLocation = SpawnPoint.getRandomPosition(tp.getLocation(), 5, 20, actor.getPlanetId()); core.simulationService.transferToPlanet(actor, planet, spawnLocation, new Quaternion(0, 0, 0, 0), null); } From 608fb42e2f9fd03b64aee8e48e779d717c226114 Mon Sep 17 00:00:00 2001 From: CharonInferar Date: Fri, 25 Apr 2014 17:07:12 +0200 Subject: [PATCH 12/12] removed system.outs and system messages related to rolls --- options.cfg | 4 ++-- src/resources/common/Forager.java | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) 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/src/resources/common/Forager.java b/src/resources/common/Forager.java index f1245db8..e0445f29 100644 --- a/src/resources/common/Forager.java +++ b/src/resources/common/Forager.java @@ -91,7 +91,7 @@ public class Forager { // if (forager.gotThePig(pig)){ // forageChances = forageChances3; //} - forager.sendSystemMessage("randomForageRoll " + randomForageRoll,(byte) 0); + //forager.sendSystemMessage("randomForageRoll " + randomForageRoll,(byte) 0); if (randomForageRoll