diff --git a/scripts/radial/item/tunable.py b/scripts/radial/item/tunable.py index dc9eef3f..a4afca74 100644 --- a/scripts/radial/item/tunable.py +++ b/scripts/radial/item/tunable.py @@ -1,4 +1,5 @@ from resources.common import RadialOptions +import time import sys def createRadial(core, owner, target, radials): @@ -14,13 +15,14 @@ def handleSelection(core, owner, target, option): #owner.sendSystemMessage('You are not attuned enough with the force yet.',1) if target.getAttachment("tunerId") == None or target.getAttachment("tunerId") == 0: + + if target.getAttributes().get("@obj_attr_n:color") is None: + time.sleep(3) + core.lootService.tuneProcess(target) + target.getAttributes().put("@obj_attr_n:crystal_owner", owner.getCustomName()) target.setAttachment("tunerId", int(owner.getObjectId())) - - # Need to change this to generate valid numbers based on the quality and type ... stats found here: http://swg.wikia.com/wiki/Lightsaber_Crystal - if target.getAttributes().get("@obj_attr_n:color") is None: - target.getAttributes().put("@obj_attr_n:componentbonuslow", "23") - target.getAttributes().put("@obj_attr_n:componentbonushigh", "25") + else: owner.sendSystemMessage("You cannot tune this crystal.",1) return diff --git a/src/services/DevService.java b/src/services/DevService.java index 596659fa..7b79dcfe 100644 --- a/src/services/DevService.java +++ b/src/services/DevService.java @@ -1025,6 +1025,13 @@ public class DevService implements INetworkDispatch { core.lootService.handleSpecialItems(kraytPearl5, "kraytpearl"); inventory.add(kraytPearl5); + TangibleObject kraytPearl6 = (TangibleObject) core.objectService.createObject("object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff", planet); + kraytPearl6.setAttachment("LootItemName", "kraytpearl_premium"); + core.lootService.handleSpecialItems(kraytPearl6, "kraytpearl"); + inventory.add(kraytPearl6); + + + TangibleObject colorCrystal = (TangibleObject) core.objectService.createObject("object/tangible/component/weapon/lightsaber/shared_lightsaber_module_force_crystal.iff", planet); colorCrystal.getAttributes().put("@obj_attr_n:condition", "100/100"); colorCrystal.getAttributes().put("@obj_attr_n:crystal_owner", "\\#D1F56F UNTUNED \\#FFFFFF "); diff --git a/src/services/LootService.java b/src/services/LootService.java index 84038d1b..81591c26 100644 --- a/src/services/LootService.java +++ b/src/services/LootService.java @@ -722,6 +722,7 @@ public class LootService implements INetworkDispatch { droppedItem.getAttributes().put("@obj_attr_n:crystal_owner", "\\#D1F56F UNTUNED \\#FFFFFF "); droppedItem.getAttributes().put("@obj_attr_n:crystal_quality", qualityString); droppedItem.setAttachment("radial_filename", "item/tunable"); + droppedItem.setAttachment("TuneType", "KraytPearl"); } private void handlePowerCrystal(TangibleObject droppedItem) { @@ -762,8 +763,123 @@ public class LootService implements INetworkDispatch { droppedItem.getAttributes().put("@obj_attr_n:crystal_owner", "\\#D1F56F UNTUNED \\#FFFFFF "); droppedItem.getAttributes().put("@obj_attr_n:crystal_quality", qualityString); droppedItem.setAttachment("radial_filename", "item/tunable"); + droppedItem.setAttachment("TuneType", "PowerCrystal"); } + public void tuneProcess(SWGObject tunableObject){ + + String objectType = (String) tunableObject.getAttachment("LootItemName"); + if (objectType==null || objectType.length()==0) + return; + + int finalMinDmg = 0; + int finalMaxDmg = 0; + + if (objectType.contains("powercrystal")){ + switch (objectType) { + case "powercrystal_poor": // Poor - Up to 3/4 damage + int minValue1 = 1; + int maxValue1 = 3; + finalMinDmg = minValue1+new Random().nextInt(maxValue1+1-minValue1); + finalMaxDmg = finalMinDmg+1; + break; + case "powercrystal_fair": // Fair - Up to 5/6 damage + minValue1 = 3; + maxValue1 = 5; + finalMinDmg = minValue1+new Random().nextInt(maxValue1+1-minValue1); + finalMaxDmg = finalMinDmg+1; + break; + case "powercrystal_good": // Good - Up to 10/11 damage + minValue1 = 6; + maxValue1 = 10; + finalMinDmg = minValue1+new Random().nextInt(maxValue1+1-minValue1); + finalMaxDmg = finalMinDmg+1; + break; + case "powercrystal_quality": // Quality - Up to 12/13 damage + minValue1 = 11; + maxValue1 = 12; + finalMinDmg = minValue1+new Random().nextInt(maxValue1+1-minValue1); + finalMaxDmg = finalMinDmg+1; + break; + case "powercrystal_select": // Select - Up to 14/15 damage + minValue1 = 13; + maxValue1 = 14; + finalMinDmg = minValue1+new Random().nextInt(maxValue1+1-minValue1); + finalMaxDmg = finalMinDmg+1; + break; + case "powercrystal_premium": // Premium - Up to 17/18 damage + minValue1 = 15; + maxValue1 = 17; + finalMinDmg = minValue1+new Random().nextInt(maxValue1+1-minValue1); + finalMaxDmg = finalMinDmg+1; + break; + case "powercrystal_flawless": // Flawless - 20-22 possibly more or less + finalMinDmg = 20; + finalMaxDmg = 22; + break; + case "powercrystal_perfect": // Perfect - Up to 23/25 damage + minValue1 = 21; + maxValue1 = 23; + finalMinDmg = minValue1+new Random().nextInt(maxValue1+1-minValue1); + finalMaxDmg = finalMinDmg+1; + break; + } + } + + if (objectType.contains("kraytpearl")){ + switch (objectType) { + case "kraytpearl_poor": // Poor - Up to 3/4 damage + int minValue1 = 1; + int maxValue1 = 3; + finalMinDmg = minValue1+new Random().nextInt(maxValue1+1-minValue1); + finalMaxDmg = finalMinDmg+1; + break; + case "kraytpearl_fair": // Fair - Up to 5/6 damage + minValue1 = 3; + maxValue1 = 5; + finalMinDmg = minValue1+new Random().nextInt(maxValue1+1-minValue1); + finalMaxDmg = finalMinDmg+1; + break; + case "kraytpearl_good": // Good - Up to 10/11 damage + minValue1 = 6; + maxValue1 = 10; + finalMinDmg = minValue1+new Random().nextInt(maxValue1+1-minValue1); + finalMaxDmg = finalMinDmg+1; + break; + case "kraytpearl_quality": // Quality - Up to 12/13 damage + minValue1 = 11; + maxValue1 = 12; + finalMinDmg = minValue1+new Random().nextInt(maxValue1+1-minValue1); + finalMaxDmg = finalMinDmg+1; + break; + case "kraytpearl_select": // Select - Up to 14/15 damage + minValue1 = 13; + maxValue1 = 14; + finalMinDmg = minValue1+new Random().nextInt(maxValue1+1-minValue1); + finalMaxDmg = finalMinDmg+1; + break; + case "kraytpearl_premium": // Premium - Up to 18/19 damage + minValue1 = 15; + maxValue1 = 17; + finalMinDmg = minValue1+new Random().nextInt(maxValue1+1-minValue1); + finalMaxDmg = finalMinDmg+1; + break; + case "kraytpearl_flawless": // Flawless - 19/20 damage + finalMinDmg = 19; + finalMaxDmg = 20; + break; + case "kraytpearl_ancient": // Ancient - 20/22 damage + finalMinDmg = 20; + finalMaxDmg = 22; + break; + } + } + + tunableObject.getAttributes().remove("@obj_attr_n:crystal_quality"); + tunableObject.setIntAttribute("@obj_attr_n:componentbonuslow", finalMinDmg); + tunableObject.setIntAttribute("@obj_attr_n:componentbonushigh", finalMaxDmg); + } + private void setWeaponStat(WeaponObject weapon, String statName, String minValue, String maxValue){ // weapon.setConditionDamage(100); shows 1000/926 ??!!