diff --git a/scripts/buffs/me_buff_action_1.py b/scripts/buffs/me_buff_action_1.py new file mode 100644 index 00000000..32ae828b --- /dev/null +++ b/scripts/buffs/me_buff_action_1.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'stamina_modified', 35) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'stamina_modified', 35) + return + \ No newline at end of file diff --git a/scripts/buffs/me_buff_action_2.py b/scripts/buffs/me_buff_action_2.py new file mode 100644 index 00000000..e49831fc --- /dev/null +++ b/scripts/buffs/me_buff_action_2.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'stamina_modified', 80) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'stamina_modified', 80) + return + \ No newline at end of file diff --git a/scripts/buffs/me_buff_action_3.py b/scripts/buffs/me_buff_action_3.py new file mode 100644 index 00000000..ce6d1523 --- /dev/null +++ b/scripts/buffs/me_buff_action_3.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'stamina_modified', 250) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'stamina_modified', 250) + return + \ No newline at end of file diff --git a/scripts/buffs/me_buff_agility_1.py b/scripts/buffs/me_buff_agility_1.py new file mode 100644 index 00000000..f050bc50 --- /dev/null +++ b/scripts/buffs/me_buff_agility_1.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'agility_modified', 15) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'agility_modified', 15) + return + \ No newline at end of file diff --git a/scripts/buffs/me_buff_agility_2.py b/scripts/buffs/me_buff_agility_2.py new file mode 100644 index 00000000..780c1277 --- /dev/null +++ b/scripts/buffs/me_buff_agility_2.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'agility_modified', 45) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'agility_modified', 45) + return + \ No newline at end of file diff --git a/scripts/buffs/me_buff_agility_3.py b/scripts/buffs/me_buff_agility_3.py new file mode 100644 index 00000000..d33b9f7a --- /dev/null +++ b/scripts/buffs/me_buff_agility_3.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'agility_modified', 80) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'agility_modified', 80) + return + \ No newline at end of file diff --git a/scripts/buffs/me_buff_health.py b/scripts/buffs/me_buff_health.py new file mode 100644 index 00000000..7a5a8676 --- /dev/null +++ b/scripts/buffs/me_buff_health.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'constitution_modified', 80) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'constitution_modified', 80) + return + \ No newline at end of file diff --git a/scripts/buffs/me_buff_health_0.py b/scripts/buffs/me_buff_health_0.py new file mode 100644 index 00000000..7a850d74 --- /dev/null +++ b/scripts/buffs/me_buff_health_0.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'constitution_modified', 35) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'constitution_modified', 35) + return + \ No newline at end of file diff --git a/scripts/buffs/me_buff_health_2.py b/scripts/buffs/me_buff_health_2.py new file mode 100644 index 00000000..a6e1381b --- /dev/null +++ b/scripts/buffs/me_buff_health_2.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'constitution_modified', 250) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'constitution_modified', 250) + return + \ No newline at end of file diff --git a/scripts/buffs/me_buff_melee_gb_1.py b/scripts/buffs/me_buff_melee_gb_1.py new file mode 100644 index 00000000..69c881a6 --- /dev/null +++ b/scripts/buffs/me_buff_melee_gb_1.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'display_only_block', 1000) + core.skillModService.addSkillMod(actor, 'combat_block_value', 200) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'display_only_block', 1000) + core.skillModService.deductSkillMod(actor, 'combat_block_value', 200) + return + \ No newline at end of file diff --git a/scripts/buffs/me_buff_precision_1.py b/scripts/buffs/me_buff_precision_1.py new file mode 100644 index 00000000..6e0b34c6 --- /dev/null +++ b/scripts/buffs/me_buff_precision_1.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'precision_modified', 15) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'precision_modified', 15) + return + \ No newline at end of file diff --git a/scripts/buffs/me_buff_precision_2.py b/scripts/buffs/me_buff_precision_2.py new file mode 100644 index 00000000..38bb1839 --- /dev/null +++ b/scripts/buffs/me_buff_precision_2.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'precision_modified', 45) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'precision_modified', 45) + return + \ No newline at end of file diff --git a/scripts/buffs/me_buff_precision_3.py b/scripts/buffs/me_buff_precision_3.py new file mode 100644 index 00000000..19d4b742 --- /dev/null +++ b/scripts/buffs/me_buff_precision_3.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'precision_modified', 80) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'precision_modified', 80) + return + \ No newline at end of file diff --git a/scripts/buffs/me_buff_ranged_gb_1.py b/scripts/buffs/me_buff_ranged_gb_1.py new file mode 100644 index 00000000..2bde9ec4 --- /dev/null +++ b/scripts/buffs/me_buff_ranged_gb_1.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'display_only_dodge', 500) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'display_only_dodge', 500) + return + \ No newline at end of file diff --git a/scripts/buffs/me_buff_strength_1.py b/scripts/buffs/me_buff_strength_1.py new file mode 100644 index 00000000..df521dbc --- /dev/null +++ b/scripts/buffs/me_buff_strength_1.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'strength_modified', 15) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'strength_modified', 15) + return + \ No newline at end of file diff --git a/scripts/buffs/me_buff_strength_2.py b/scripts/buffs/me_buff_strength_2.py new file mode 100644 index 00000000..26b3b2cd --- /dev/null +++ b/scripts/buffs/me_buff_strength_2.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'strength_modified', 45) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'strength_modified', 45) + return + \ No newline at end of file diff --git a/scripts/buffs/me_buff_strength_3.py b/scripts/buffs/me_buff_strength_3.py index e09c02e5..7eb580c9 100644 --- a/scripts/buffs/me_buff_strength_3.py +++ b/scripts/buffs/me_buff_strength_3.py @@ -1,8 +1,10 @@ import sys def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'strength_modified', 80) return def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'strength_modified', 80) return \ No newline at end of file diff --git a/scripts/skillMods/acid.py b/scripts/skillMods/acid.py new file mode 100644 index 00000000..ee7769e2 --- /dev/null +++ b/scripts/skillMods/acid.py @@ -0,0 +1,10 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return + \ No newline at end of file diff --git a/scripts/skillMods/agility_modified.py b/scripts/skillMods/agility_modified.py new file mode 100644 index 00000000..80b31400 --- /dev/null +++ b/scripts/skillMods/agility_modified.py @@ -0,0 +1,16 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + actor.addSkillMod('display_only_dodge', base) + actor.addSkillMod('display_only_parry', base / 2) + actor.addSkillMod('display_only_evasion', base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + actor.deductSkillMod('display_only_dodge', base) + actor.deductSkillMod('display_only_parry', base / 2) + actor.deductSkillMod('display_only_evasion', base) + return + \ No newline at end of file diff --git a/scripts/skillMods/cold.py b/scripts/skillMods/cold.py new file mode 100644 index 00000000..ee7769e2 --- /dev/null +++ b/scripts/skillMods/cold.py @@ -0,0 +1,10 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return + \ No newline at end of file diff --git a/scripts/skillMods/combat_block_value.py b/scripts/skillMods/combat_block_value.py new file mode 100644 index 00000000..ee7769e2 --- /dev/null +++ b/scripts/skillMods/combat_block_value.py @@ -0,0 +1,10 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return + \ No newline at end of file diff --git a/scripts/skillMods/combat_strikethrough_value.py b/scripts/skillMods/combat_strikethrough_value.py new file mode 100644 index 00000000..ee7769e2 --- /dev/null +++ b/scripts/skillMods/combat_strikethrough_value.py @@ -0,0 +1,10 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return + \ No newline at end of file diff --git a/scripts/skillMods/constitution_modified.py b/scripts/skillMods/constitution_modified.py new file mode 100644 index 00000000..e08bbe6b --- /dev/null +++ b/scripts/skillMods/constitution_modified.py @@ -0,0 +1,14 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + actor.setMaxHealth(actor.getHealth() + base * 8) + actor.setMaxAction(actor.getAction() + base * 2) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + actor.setMaxHealth(actor.getHealth() - base * 8) + actor.setMaxAction(actor.getAction() - base * 2) + return + \ No newline at end of file diff --git a/scripts/skillMods/display_only_block.py b/scripts/skillMods/display_only_block.py new file mode 100644 index 00000000..ee7769e2 --- /dev/null +++ b/scripts/skillMods/display_only_block.py @@ -0,0 +1,10 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return + \ No newline at end of file diff --git a/scripts/skillMods/display_only_critical.py b/scripts/skillMods/display_only_critical.py new file mode 100644 index 00000000..ee7769e2 --- /dev/null +++ b/scripts/skillMods/display_only_critical.py @@ -0,0 +1,10 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return + \ No newline at end of file diff --git a/scripts/skillMods/display_only_dodge.py b/scripts/skillMods/display_only_dodge.py new file mode 100644 index 00000000..ee7769e2 --- /dev/null +++ b/scripts/skillMods/display_only_dodge.py @@ -0,0 +1,10 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return + \ No newline at end of file diff --git a/scripts/skillMods/display_only_evasion.py b/scripts/skillMods/display_only_evasion.py new file mode 100644 index 00000000..ee7769e2 --- /dev/null +++ b/scripts/skillMods/display_only_evasion.py @@ -0,0 +1,10 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return + \ No newline at end of file diff --git a/scripts/skillMods/display_only_glancing_blow.py b/scripts/skillMods/display_only_glancing_blow.py new file mode 100644 index 00000000..ee7769e2 --- /dev/null +++ b/scripts/skillMods/display_only_glancing_blow.py @@ -0,0 +1,10 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return + \ No newline at end of file diff --git a/scripts/skillMods/display_only_parry.py b/scripts/skillMods/display_only_parry.py new file mode 100644 index 00000000..ee7769e2 --- /dev/null +++ b/scripts/skillMods/display_only_parry.py @@ -0,0 +1,10 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return + \ No newline at end of file diff --git a/scripts/skillMods/display_only_strikethrough.py b/scripts/skillMods/display_only_strikethrough.py new file mode 100644 index 00000000..ee7769e2 --- /dev/null +++ b/scripts/skillMods/display_only_strikethrough.py @@ -0,0 +1,10 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return + \ No newline at end of file diff --git a/scripts/skillMods/electricity.py b/scripts/skillMods/electricity.py new file mode 100644 index 00000000..ee7769e2 --- /dev/null +++ b/scripts/skillMods/electricity.py @@ -0,0 +1,10 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return + \ No newline at end of file diff --git a/scripts/skillMods/energy.py b/scripts/skillMods/energy.py new file mode 100644 index 00000000..ee7769e2 --- /dev/null +++ b/scripts/skillMods/energy.py @@ -0,0 +1,10 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return + \ No newline at end of file diff --git a/scripts/skillMods/heat.py b/scripts/skillMods/heat.py new file mode 100644 index 00000000..ee7769e2 --- /dev/null +++ b/scripts/skillMods/heat.py @@ -0,0 +1,10 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return + \ No newline at end of file diff --git a/scripts/skillMods/kinetic.py b/scripts/skillMods/kinetic.py new file mode 100644 index 00000000..ee7769e2 --- /dev/null +++ b/scripts/skillMods/kinetic.py @@ -0,0 +1,10 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return + \ No newline at end of file diff --git a/scripts/skillMods/luck_modified.py b/scripts/skillMods/luck_modified.py new file mode 100644 index 00000000..d036f779 --- /dev/null +++ b/scripts/skillMods/luck_modified.py @@ -0,0 +1,18 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + actor.addSkillMod('display_only_dodge', base / 3) + actor.addSkillMod('display_only_evasion', base / 3) + actor.addSkillMod('display_only_critical', base / 3) + actor.addSkillMod('display_only_strikethrough', base / 2) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + actor.deductSkillMod('display_only_dodge', base / 3) + actor.deductSkillMod('display_only_evasion', base / 3) + actor.deductSkillMod('display_only_critical', base / 3) + actor.deductSkillMod('display_only_strikethrough', base / 2) + return + \ No newline at end of file diff --git a/scripts/skillMods/precision_modified.py b/scripts/skillMods/precision_modified.py new file mode 100644 index 00000000..6d31b77e --- /dev/null +++ b/scripts/skillMods/precision_modified.py @@ -0,0 +1,18 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + actor.addSkillMod('display_only_block', base / 2) + actor.addSkillMod('display_only_parry', base / 2) + actor.addSkillMod('display_only_critical', base) + actor.addSkillMod('display_only_strikethrough', base / 2) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + actor.deductSkillMod('display_only_block', base / 2) + actor.deductSkillMod('display_only_parry', base / 2) + actor.deductSkillMod('display_only_critical', base) + actor.deductSkillMod('display_only_strikethrough', base / 2) + return + \ No newline at end of file diff --git a/scripts/skillMods/stamina_modified.py b/scripts/skillMods/stamina_modified.py new file mode 100644 index 00000000..10032178 --- /dev/null +++ b/scripts/skillMods/stamina_modified.py @@ -0,0 +1,14 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + actor.setMaxHealth(actor.getHealth() + base * 2) + actor.setMaxAction(actor.getAction() + base * 8) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + actor.setMaxHealth(actor.getHealth() - base * 2) + actor.setMaxAction(actor.getAction() - base * 8) + return + \ No newline at end of file diff --git a/scripts/skillMods/strength_modified.py b/scripts/skillMods/strength_modified.py new file mode 100644 index 00000000..4e702217 --- /dev/null +++ b/scripts/skillMods/strength_modified.py @@ -0,0 +1,12 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + actor.addSkillMod('display_only_block', base / 2) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + actor.deductSkillMod('display_only_block', base / 2) + return + \ No newline at end of file diff --git a/src/main/NGECore.java b/src/main/NGECore.java index 3c22a351..8549db94 100644 --- a/src/main/NGECore.java +++ b/src/main/NGECore.java @@ -42,6 +42,7 @@ import services.LoginService; import services.PlayerService; import services.ScriptService; import services.SimulationService; +import services.SkillModService; import services.StaticService; import services.TerrainService; import services.chat.ChatService; @@ -116,6 +117,7 @@ public class NGECore { public BuffService buffService; public StaticService staticService; public GroupService groupService; + public SkillModService skillModService; // Login Server public NetworkDispatch loginDispatch; @@ -166,6 +168,8 @@ public class NGECore { playerService = new PlayerService(this); buffService = new BuffService(this); groupService = new GroupService(this); + skillModService = new SkillModService(this); + // Ping Server try { PingServer pingServer = new PingServer(config.getInt("PING.PORT")); diff --git a/src/resources/objects/creature/CreatureMessageBuilder.java b/src/resources/objects/creature/CreatureMessageBuilder.java index 7b22fd0d..61d214a1 100644 --- a/src/resources/objects/creature/CreatureMessageBuilder.java +++ b/src/resources/objects/creature/CreatureMessageBuilder.java @@ -753,6 +753,47 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { return buffer; } + + public IoBuffer buildAddSkillModDelta(String name, int base) { + + CreatureObject creature = (CreatureObject) object; + + IoBuffer buffer = bufferPool.allocate(19 + name.length(), false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putInt(1); + buffer.putInt(creature.getSkillModsUpdateCounter()); + buffer.put((byte) 0); + buffer.put(getAsciiString(name)); + buffer.putInt(base); + buffer.putInt(0); + + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("CREO", (byte) 4, (short) 1, (short) 3, buffer, size + 4); + + return buffer; + + } + + public IoBuffer buildRemoveSkillModDelta(String name, int base) { + + CreatureObject creature = (CreatureObject) object; + + IoBuffer buffer = bufferPool.allocate(19 + name.length(), false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putInt(1); + buffer.putInt(creature.getSkillModsUpdateCounter()); + buffer.put((byte) 1); + buffer.put(getAsciiString(name)); + buffer.putInt(base); + buffer.putInt(0); + + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("CREO", (byte) 4, (short) 1, (short) 3, buffer, size + 4); + + return buffer; + + } + diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index 01fe8e79..b6662e16 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -362,11 +362,51 @@ public class CreatureObject extends TangibleObject implements IPersistent { } public void addSkillMod(String name, int base) { - SkillMod skillMod = new SkillMod(); - skillMod.setBase(base); - skillMod.setSkillModString(name); - skillMod.setModifier(0); - skillMods.add(skillMod); + + if(getSkillMod(name) == null) { + SkillMod skillMod = new SkillMod(); + skillMod.setBase(base); + skillMod.setSkillModString(name); + skillMod.setModifier(0); + skillMods.add(skillMod); + } else { + SkillMod mod = getSkillMod(name); + mod.setBase(mod.getBase() + base); + if(getClient() != null) { + setSkillModsUpdateCounter((short) (getSkillModsUpdateCounter() + 1)); + getClient().getSession().write(messageBuilder.buildAddSkillModDelta(name, mod.getBase())); + } + } + + } + + public void deductSkillMod(String name, int base) { + + if(getSkillMod(name) == null) + return; + + SkillMod mod = getSkillMod(name); + mod.setBase(mod.getBase() - base); + + if(mod.getBase() <= 0) { + removeSkillMod(mod); + } else { + setSkillModsUpdateCounter((short) (getSkillModsUpdateCounter() + 1)); + getClient().getSession().write(messageBuilder.buildAddSkillModDelta(name, mod.getBase())); + } + + } + + public void removeSkillMod(SkillMod mod) { + + skillMods.remove(mod); + + if(getClient() != null) { + setSkillModsUpdateCounter((short) (getSkillModsUpdateCounter() + 1)); + getClient().getSession().write(messageBuilder.buildRemoveSkillModDelta(mod.getSkillModString(), mod.getBase())); + } + + } public short getSkillModsUpdateCounter() { diff --git a/src/services/SkillModService.java b/src/services/SkillModService.java new file mode 100644 index 00000000..8a68c282 --- /dev/null +++ b/src/services/SkillModService.java @@ -0,0 +1,66 @@ +/******************************************************************************* + * 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.Map; + +import resources.objects.creature.CreatureObject; + +import main.NGECore; + +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; + +public class SkillModService implements INetworkDispatch { + + private NGECore core; + + public SkillModService(NGECore core) { + this.core = core; + } + + public void addSkillMod(CreatureObject creature, String skillMod, int value) { + + core.scriptService.callScript("scripts/skillMods", skillMod, "add", core, creature, skillMod, value); + + } + + public void deductSkillMod(CreatureObject creature, String skillMod, int value) { + + core.scriptService.callScript("scripts/skillMods", skillMod, "deduct", core, creature, skillMod, value); + + } + + @Override + public void insertOpcodes(Map arg0, + Map arg1) { + // TODO Auto-generated method stub + + } + + @Override + public void shutdown() { + // TODO Auto-generated method stub + + } + +} diff --git a/src/services/combat/CombatService.java b/src/services/combat/CombatService.java index a12f68f6..809ba878 100644 --- a/src/services/combat/CombatService.java +++ b/src/services/combat/CombatService.java @@ -232,11 +232,14 @@ public class CombatService implements INetworkDispatch { if(hitType == HitType.STRIKETHROUGH) { - float stMaxValue = attacker.getSkillMod("combat_strikethrough_value").getBase() / 2; + float stMaxValue = attacker.getSkillMod("combat_strikethrough_value").getBase() / 2 + attacker.getSkillMod("luck_modified").getBase() / 10; + if(stMaxValue > 99) + stMaxValue = 99; float stMinValue = stMaxValue / 2; float stValue = new Random().nextInt((int) (stMaxValue - stMinValue + 1)) + stMinValue; stValue /= 100; + stValue = 1 - stValue; mitigation *= stValue; }