diff --git a/src/services/LootService.java b/src/services/LootService.java index c2adab60..c216b0e4 100644 --- a/src/services/LootService.java +++ b/src/services/LootService.java @@ -2003,6 +2003,11 @@ public class LootService implements INetworkDispatch { item12.setIntAttribute("@obj_attr_n:sockets", 1); playerInventory.add(item12); + TangibleObject item12a = (TangibleObject)core.objectService.createObject("object/tangible/wearables/shirt/shared_shirt_s07.iff", player.getPlanet()); + item12a.setCustomName("Socketed Shirt"); + item12a.setIntAttribute("cat_stat_mod_bonus.@stat_n:agility_modified", 18); + playerInventory.add(item12a); + TangibleObject item13 = (TangibleObject)core.objectService.createObject("object/tangible/component/reverse_engineering/shared_modifier_bit.iff", player.getPlanet()); item13.setCustomName("Modifier Bit"); playerInventory.add(item13); @@ -2028,6 +2033,19 @@ public class LootService implements INetworkDispatch { item24.setCustomName("Droid Motor (Red)"); playerInventory.add(item24); +// TangibleObject stacker1 = (TangibleObject)core.objectService.createObject("object/tangible/loot/misc/shared_damaged_datapad.iff", player.getPlanet()); +// stacker1.setCustomName("Damaged Datapad stacker1"); +// stacker1.setStackable(true); +// stacker1.setUses(5); +// playerInventory.add(stacker1); + + TangibleObject stacker2 = (TangibleObject)core.objectService.createObject("object/tangible/loot/misc/shared_damaged_datapad.iff", player.getPlanet()); + stacker2.setCustomName("Damaged Datapad stacker1"); + stacker2.setStackable(true); + stacker2.setUses(99); + + core.objectService.addStackableItem(stacker2,playerInventory); + } diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index 8c2fcf21..1eef27c2 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -1237,4 +1237,35 @@ public class ObjectService implements INetworkDispatch { odb.remove(key); } + public void addStackableItem(TangibleObject item, SWGObject container) { + // Maybe even better placed inside SWGObject.add(), so whenever an item is added to a container + // it will bechecked if it is stackable and if there is already a stack to add it to + if (! item.isStackable()) + container.add(item); + final Vector alikeItemsInContainer = new Vector(); + container.viewChildren(container, false, false, new Traverser() { + @Override + public void process(SWGObject obj) { + if (obj.getTemplate().equals(item.getTemplate())){ + alikeItemsInContainer.add(obj); + System.out.println(obj.getTemplate()); + } + } + }); + + if (alikeItemsInContainer.size()==0){ + container.add(item); + return; + } + TangibleObject alikeItem = (TangibleObject)alikeItemsInContainer.get(0); + int alikeUses = alikeItem.getUses(); + int itemUses = item.getUses(); + if (itemUses==0) + itemUses=1; + int newUses = alikeUses+itemUses; + + alikeItem.setUses(newUses); + core.objectService.destroyObject(item.getObjectID()); + } + } diff --git a/src/services/reverseengineering/ReverseEngineeringService.java b/src/services/reverseengineering/ReverseEngineeringService.java index 59fc5999..049e7905 100644 --- a/src/services/reverseengineering/ReverseEngineeringService.java +++ b/src/services/reverseengineering/ReverseEngineeringService.java @@ -2996,10 +2996,10 @@ public class ReverseEngineeringService implements INetworkDispatch { if (piece.getStringAttribute("bio_link")!=null) return; - if (! piece.getTemplate().contains("armor/") && ! piece.getTemplate().contains("clothing/")) + if (! piece.getTemplate().contains("object/tangible/wearables/")) return; - if (piece.getTemplate().contains("armor/")){ + if (piece.getTemplate().contains("object/tangible/wearables/")){ // Determine how powerful the bit will be int highestStat = getHighestStat(piece); @@ -3014,12 +3014,12 @@ public class ReverseEngineeringService implements INetworkDispatch { // Determine the quality factor based on total buffs (RE Chance, Luck etc.) float qualityfactor = 1.0F; // For now it's 1 int luck = engineer.getLuck(); - qualityfactor += 5*luck/100; // luck adds a bit - - //core.skillModService.addSkillMod(engineer, "expertise_reverse_engineering_bonus", 100, 10); - //int re_Chance = engineer.getSkillModBase("expertise_reverse_engineering_bonus"); - //qualityfactor += 5*re_Chance/100; // re_Chance adds a bit - + qualityfactor += luck/1000; // around 1200 luck was top + qualityfactor = Math.max(1.0F, qualityfactor); + int re_Chance = engineer.getSkillModBase("expertise_reverse_engineering_bonus"); + float re_factor = re_Chance/140 * qualityfactor; // 159 RE-Chance was top + qualityfactor = Math.max(re_factor, qualityfactor); + powerBitValue = Math.round(highestStat * qualityfactor); if (numberOfStats==1){ @@ -3051,10 +3051,15 @@ public class ReverseEngineeringService implements INetworkDispatch { String pcr = ""; String modifierBitNameResult = null; if (reToolContentList.size()==2){ + TangibleObject piece1 = (TangibleObject) reToolContentList.get(0); TangibleObject piece2 = (TangibleObject) reToolContentList.get(1); //if (! piece1.getTemplate().contains("lootItems/npc_loot/") || piece2.getTemplate().contains("lootItems/npc_loot/")) //return; // No junk loot +// if (piece1.getTemplate().contains("modifier_bit") && piece2.getTemplate().contains("power_bit") +// || piece1.getTemplate().contains("power_bit") && piece2.getTemplate().contains("modifier_bit")){ +// return; // Fail-safe if someone wants to RE bits +// } String modifierBitName = null; for (RE_Combination comb : re_Combinations){ @@ -3117,9 +3122,10 @@ public class ReverseEngineeringService implements INetworkDispatch { if (bit1.getTemplate().contains("modifier_bit") && bit2.getTemplate().contains("power_bit") || bit1.getTemplate().contains("power_bit") && bit2.getTemplate().contains("modifier_bit")){ - int amount = 250; // Needs to be randomized and skillmod-related - // PUP = 3 * Power_bit / Modifier_Ratio - + int amount = 200 + new Random().nextInt()*50; // Needs to be randomized and skillmod-related + int luck = engineer.getLuck(); + amount = luck/700 * amount; // around 1200 luck was top + int powerValue = 1; String effectName = null; @@ -3140,10 +3146,13 @@ public class ReverseEngineeringService implements INetworkDispatch { if (bit2.getTemplate().contains("power_bit")){ powerBitValue = (int) bit2.getAttachment("PowerBitValue"); } - - powerValue = 3*powerBitValue/ratio; // rough - System.out.println("effectName " + effectName); + int re_Chance = engineer.getSkillModBase("expertise_reverse_engineering_bonus"); + + double X = 1.1; // Magic number + + //powerValue = 3*powerBitValue/ratio; // rough + powerValue = (int) Math.floor( 2 * powerBitValue / ratio * re_Chance / 100 * X ); // Assuming munition String powerUpLabel = "item_reverse_engineering_powerup_armor_02_01"; @@ -3222,7 +3231,7 @@ public class ReverseEngineeringService implements INetworkDispatch { modifierValue = (int) bit2.getAttachment("PowerBitValue"); } - modifierValue = modifierValue/ratio; + modifierValue = modifierValue/ratio; // int cast truncates // Assuming munition String SEALabel = "socket_gem_armor";