diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index 2c76eff7..baa0e465 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -666,7 +666,7 @@ public class CreatureObject extends TangibleObject implements Serializable { public int getSkillModBase(String name) { SkillMod skillMod = getSkillMod(name); - return ((skillMod == null) ? 0 : skillMod.getBase()); + return ((skillMod == null) ? 0 : skillMod.getBase() + skillMod.getModifier()); } public int getSkillModModifier(String name) { @@ -674,9 +674,9 @@ public class CreatureObject extends TangibleObject implements Serializable { return ((skillMod == null) ? 0 : skillMod.getModifier()); } - public float getSkillModValue(String name, int divisor) { + public float getSkillModValue(String name, int divisor, boolean percent) { SkillMod skillMod = getSkillMod(name); - return ((skillMod == null) ? 0.0f : skillMod.getValue(divisor)); + return ((skillMod == null) ? 0.0f : skillMod.getValue(divisor, percent)); } public float getSpeedMultiplierBase() { diff --git a/src/resources/skills/SkillMod.java b/src/resources/skills/SkillMod.java index a667f6b0..cd5bc6a8 100644 --- a/src/resources/skills/SkillMod.java +++ b/src/resources/skills/SkillMod.java @@ -91,9 +91,9 @@ public class SkillMod extends Delta implements Serializable { } } - public float getValue(int divisor) { + public float getValue(int divisor, boolean percent) { synchronized(objectMutex) { - return ((divisor < 1) ? ((float) base) : ((float) base / (float) divisor)); + return (((divisor < 1) ? ((float) (base + modifier)) : ((float) (base + modifier) / (float) divisor)) * ((percent) ? 100f : 1f)); } } diff --git a/src/services/SkillModService.java b/src/services/SkillModService.java index 042e7bc9..9eb48a81 100644 --- a/src/services/SkillModService.java +++ b/src/services/SkillModService.java @@ -26,6 +26,7 @@ import java.util.Map; import resources.common.FileUtilities; import resources.objects.creature.CreatureObject; +import resources.objects.player.PlayerObject; import resources.skills.SkillMod; import main.NGECore; import engine.clientdata.ClientFileManager; @@ -106,7 +107,9 @@ public class SkillModService implements INetworkDispatch { public float getSkillModValue(CreatureObject creature, String name) { int divisor = (skillModMap.get(name) == null) ? 0 : (Integer) visitor.getObject(skillModMap.get(name), 5); - return creature.getSkillModValue(name, divisor); + boolean percent = (skillModMap.get(name) == null) ? false : (Boolean) visitor.getObject(skillModMap.get(name), 6); + String profession = (skillModMap.get(name) == null || creature.getSlottedObject("ghost") == null) ? null : (String) visitor.getObject(skillModMap.get(name), 1); + return ((profession == null || !profession.equals(((PlayerObject) creature.getSlottedObject("ghost")).getProfession())) ? 0.0f : creature.getSkillModValue(name, divisor, percent)); } public void deductSkillMod(CreatureObject creature, String name, SkillMod skillMod) { @@ -146,6 +149,14 @@ public class SkillModService implements INetworkDispatch { creature.getSkillMods().remove(name); } + public DatatableVisitor getVisitor() { + return visitor; + } + + public Map getSkillModMap() { + return skillModMap; + } + @Override public void insertOpcodes(Map arg0, Map arg1) {