diff --git a/src/engine/net/client/ClientMessagePump.java b/src/engine/net/client/ClientMessagePump.java index 0d89f91d..70177a74 100644 --- a/src/engine/net/client/ClientMessagePump.java +++ b/src/engine/net/client/ClientMessagePump.java @@ -28,6 +28,7 @@ import engine.net.client.msg.*; import engine.net.client.msg.chat.AbstractChatMsg; import engine.net.client.msg.commands.ClientAdminCommandMsg; import engine.objects.*; +import engine.powers.effectmodifiers.AbstractEffectModifier; import engine.server.MBServerStatics; import engine.server.world.WorldServer; import engine.session.Session; @@ -36,6 +37,7 @@ import org.pmw.tinylog.Logger; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ThreadLocalRandom; @@ -2022,10 +2024,17 @@ boolean updateCity = false; //make sure item is damaged and not destroyed short dur = toRepair.getDurabilityCurrent(); short max = toRepair.getDurabilityMax(); - - if (dur >= max || dur < 1) + //account for durability modifications + float durMod = toRepair.getBonusPercent(ModType.Durability,SourceType.None); + max *= (1 + (durMod * 0.01f)); + if (dur >= max || dur < 1) { + //redundancy message to clear item from window in client + toRepair.setDurabilityCurrent(max); + msg.setupRepairAck(max - dur); + dispatch = Dispatch.borrow(player, msg); + DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.SECONDARY); return; - + } //TODO get cost to repair int cost = (int) ((max - dur) * 80.1); Building b = (!npc.isStatic()) ? npc.getBuilding() : null; @@ -2056,14 +2065,11 @@ boolean updateCity = false; ugm.configure(); dispatch = Dispatch.borrow(player, ugm); DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.SECONDARY); - //update durability to database if (!DbManager.ItemQueries.SET_DURABILITY(toRepair, max)) return; - //repair the item toRepair.setDurabilityCurrent(max); - //send repair msg msg.setupRepairAck(max - dur); dispatch = Dispatch.borrow(player, msg); diff --git a/src/engine/objects/Item.java b/src/engine/objects/Item.java index 3bc048dc..46777997 100644 --- a/src/engine/objects/Item.java +++ b/src/engine/objects/Item.java @@ -489,7 +489,6 @@ public class Item extends AbstractWorldObject { } return max; } - public void setDurabilityCurrent(short value) { this.durabilityCurrent = value; } diff --git a/src/engine/objects/Resists.java b/src/engine/objects/Resists.java index 4342ae3b..c084f5c6 100644 --- a/src/engine/objects/Resists.java +++ b/src/engine/objects/Resists.java @@ -16,11 +16,13 @@ import engine.Enum.SourceType; import engine.gameManager.ChatManager; import engine.gameManager.DbManager; import engine.powers.EffectsBase; +import engine.powers.effectmodifiers.ArmorPiercingEffectModifier; import engine.server.MBServerStatics; import org.pmw.tinylog.Logger; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.concurrent.ConcurrentHashMap; @@ -305,9 +307,10 @@ public class Resists { public float getResistedDamage(AbstractCharacter source, AbstractCharacter target, DamageType type, float damage, int trains) { //handle fortitudes damage = handleFortitude(target, type, damage); - + //calculate armor piercing + float ap = source.getBonuses().getFloatPercentAll(ModType.ArmorPiercing,SourceType.None); + float damageAfterResists = damage * (1 - (this.getResist(type, trains) * 0.01f) + ap); //check to see if any damage absorbers should cancel - float damageAfterResists = damage * (1 - (this.getResist(type, trains) / 100)); if (target != null) { //debug damage shields if any found if (source.getDebug(2) && source.getObjectType().equals(Enum.GameObjectType.PlayerCharacter)) { diff --git a/src/engine/powers/effectmodifiers/ArmorPiercingEffectModifier.java b/src/engine/powers/effectmodifiers/ArmorPiercingEffectModifier.java index 29ee21fe..39ec058e 100644 --- a/src/engine/powers/effectmodifiers/ArmorPiercingEffectModifier.java +++ b/src/engine/powers/effectmodifiers/ArmorPiercingEffectModifier.java @@ -10,10 +10,7 @@ package engine.powers.effectmodifiers; import engine.jobs.AbstractEffectJob; -import engine.objects.AbstractCharacter; -import engine.objects.AbstractWorldObject; -import engine.objects.Building; -import engine.objects.Item; +import engine.objects.*; import java.sql.ResultSet; import java.sql.SQLException; @@ -32,7 +29,10 @@ public class ArmorPiercingEffectModifier extends AbstractEffectModifier { @Override public void applyBonus(AbstractCharacter ac, int trains) { - + Float amount = 0f; + PlayerBonuses bonus = ac.getBonuses(); + amount = this.percentMod; + bonus.addFloat(this, amount * 0.01f); } @Override diff --git a/src/engine/powers/effectmodifiers/DurabilityEffectModifier.java b/src/engine/powers/effectmodifiers/DurabilityEffectModifier.java index 2af78999..cc50dc66 100644 --- a/src/engine/powers/effectmodifiers/DurabilityEffectModifier.java +++ b/src/engine/powers/effectmodifiers/DurabilityEffectModifier.java @@ -9,14 +9,13 @@ package engine.powers.effectmodifiers; +import engine.Enum; import engine.jobs.AbstractEffectJob; -import engine.objects.AbstractCharacter; -import engine.objects.AbstractWorldObject; -import engine.objects.Building; -import engine.objects.Item; +import engine.objects.*; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.concurrent.ConcurrentHashMap; public class DurabilityEffectModifier extends AbstractEffectModifier { @@ -35,7 +34,17 @@ public class DurabilityEffectModifier extends AbstractEffectModifier { } @Override - public void applyBonus(Item item, int trains) {} + public void applyBonus(Item item, int trains) + { + if(item == null){ + return; + } + float amount = 0; + amount = this.percentMod; + item.addBonus(this,amount); + + + } @Override public void applyBonus(Building building, int trains) {} }