diff --git a/trunk/dist/game/data/scripts/handlers/effecthandlers/MagicalAttack.java b/trunk/dist/game/data/scripts/handlers/effecthandlers/MagicalAttack.java
index 5a5c90141e..fe298550f1 100644
--- a/trunk/dist/game/data/scripts/handlers/effecthandlers/MagicalAttack.java
+++ b/trunk/dist/game/data/scripts/handlers/effecthandlers/MagicalAttack.java
@@ -77,6 +77,13 @@ public final class MagicalAttack extends AbstractEffect
if (damage > 0)
{
+ // reduce damage if target has maxdamage buff
+ double maxDamage = (target.getStat().calcStat(Stats.MAX_SKILL_DAMAGE, 0, null, null));
+ if (maxDamage > 0)
+ {
+ damage = (int) maxDamage;
+ }
+
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!target.isRaid() && Formulas.calcAtkBreak(target, damage))
{
diff --git a/trunk/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormal.java b/trunk/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormal.java
index b40ca3c074..4ac4371d51 100644
--- a/trunk/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormal.java
+++ b/trunk/dist/game/data/scripts/handlers/effecthandlers/MagicalAttackByAbnormal.java
@@ -79,6 +79,13 @@ public final class MagicalAttackByAbnormal extends AbstractEffect
if (damage > 0)
{
+ // reduce damage if target has maxdamage buff
+ double maxDamage = (target.getStat().calcStat(Stats.MAX_SKILL_DAMAGE, 0, null, null));
+ if (maxDamage > 0)
+ {
+ damage = (int) maxDamage;
+ }
+
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!target.isRaid() && Formulas.calcAtkBreak(target, damage))
{
diff --git a/trunk/dist/game/data/scripts/handlers/effecthandlers/MagicalSoulAttack.java b/trunk/dist/game/data/scripts/handlers/effecthandlers/MagicalSoulAttack.java
index a310c05a1d..4bc24441ac 100644
--- a/trunk/dist/game/data/scripts/handlers/effecthandlers/MagicalSoulAttack.java
+++ b/trunk/dist/game/data/scripts/handlers/effecthandlers/MagicalSoulAttack.java
@@ -83,6 +83,13 @@ public final class MagicalSoulAttack extends AbstractEffect
if (damage > 0)
{
+ // reduce damage if target has maxdamage buff
+ double maxDamage = (target.getStat().calcStat(Stats.MAX_SKILL_DAMAGE, 0, null, null));
+ if (maxDamage > 0)
+ {
+ damage = (int) maxDamage;
+ }
+
// Manage attack or cast break of the target (calculating rate, sending message...)
if (!target.isRaid() && Formulas.calcAtkBreak(target, damage))
{
diff --git a/trunk/dist/game/data/scripts/handlers/effecthandlers/PhysicalAttack.java b/trunk/dist/game/data/scripts/handlers/effecthandlers/PhysicalAttack.java
index 4e8443e377..b8af7cdaa5 100644
--- a/trunk/dist/game/data/scripts/handlers/effecthandlers/PhysicalAttack.java
+++ b/trunk/dist/game/data/scripts/handlers/effecthandlers/PhysicalAttack.java
@@ -27,6 +27,7 @@ import com.l2jserver.gameserver.model.effects.L2EffectType;
import com.l2jserver.gameserver.model.skills.BuffInfo;
import com.l2jserver.gameserver.model.stats.BaseStats;
import com.l2jserver.gameserver.model.stats.Formulas;
+import com.l2jserver.gameserver.model.stats.Stats;
import com.l2jserver.gameserver.network.SystemMessageId;
import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
@@ -102,6 +103,13 @@ public final class PhysicalAttack extends AbstractEffect
if (damage > 0)
{
+ // reduce damage if target has maxdamage buff
+ double maxDamage = (target.getStat().calcStat(Stats.MAX_SKILL_DAMAGE, 0, null, null));
+ if (maxDamage > 0)
+ {
+ damage = (int) maxDamage;
+ }
+
activeChar.sendDamageMessage(target, damage, false, crit, false);
target.reduceCurrentHp(damage, activeChar, info.getSkill());
target.notifyDamageReceived(damage, activeChar, info.getSkill(), crit, false);
diff --git a/trunk/dist/game/data/scripts/handlers/effecthandlers/PhysicalAttackHpLink.java b/trunk/dist/game/data/scripts/handlers/effecthandlers/PhysicalAttackHpLink.java
index 54dba767ac..405ac5bd4b 100644
--- a/trunk/dist/game/data/scripts/handlers/effecthandlers/PhysicalAttackHpLink.java
+++ b/trunk/dist/game/data/scripts/handlers/effecthandlers/PhysicalAttackHpLink.java
@@ -27,6 +27,7 @@ import com.l2jserver.gameserver.model.effects.L2EffectType;
import com.l2jserver.gameserver.model.skills.BuffInfo;
import com.l2jserver.gameserver.model.stats.BaseStats;
import com.l2jserver.gameserver.model.stats.Formulas;
+import com.l2jserver.gameserver.model.stats.Stats;
import com.l2jserver.gameserver.network.SystemMessageId;
import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
@@ -92,6 +93,13 @@ public final class PhysicalAttackHpLink extends AbstractEffect
if (damage > 0)
{
+ // reduce damage if target has maxdamage buff
+ double maxDamage = (target.getStat().calcStat(Stats.MAX_SKILL_DAMAGE, 0, null, null));
+ if (maxDamage > 0)
+ {
+ damage = (int) maxDamage;
+ }
+
activeChar.sendDamageMessage(target, damage, false, crit, false);
target.reduceCurrentHp(damage, activeChar, info.getSkill());
target.notifyDamageReceived(damage, activeChar, info.getSkill(), crit, false);
diff --git a/trunk/dist/game/data/scripts/handlers/effecthandlers/PhysicalSoulAttack.java b/trunk/dist/game/data/scripts/handlers/effecthandlers/PhysicalSoulAttack.java
index 870b0ac7c5..b66de9a0fe 100644
--- a/trunk/dist/game/data/scripts/handlers/effecthandlers/PhysicalSoulAttack.java
+++ b/trunk/dist/game/data/scripts/handlers/effecthandlers/PhysicalSoulAttack.java
@@ -27,6 +27,7 @@ import com.l2jserver.gameserver.model.effects.L2EffectType;
import com.l2jserver.gameserver.model.skills.BuffInfo;
import com.l2jserver.gameserver.model.stats.BaseStats;
import com.l2jserver.gameserver.model.stats.Formulas;
+import com.l2jserver.gameserver.model.stats.Stats;
import com.l2jserver.gameserver.network.SystemMessageId;
import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
@@ -108,6 +109,13 @@ public final class PhysicalSoulAttack extends AbstractEffect
if (damage > 0)
{
+ // reduce damage if target has maxdamage buff
+ double maxDamage = (target.getStat().calcStat(Stats.MAX_SKILL_DAMAGE, 0, null, null));
+ if (maxDamage > 0)
+ {
+ damage = (int) maxDamage;
+ }
+
activeChar.sendDamageMessage(target, damage, false, crit, false);
target.reduceCurrentHp(damage, activeChar, info.getSkill());
target.notifyDamageReceived(damage, activeChar, info.getSkill(), crit, false);
diff --git a/trunk/dist/game/data/stats/skills/08800-08899.xml b/trunk/dist/game/data/stats/skills/08800-08899.xml
index 76afbd6a99..a4f1b6f8d4 100644
--- a/trunk/dist/game/data/stats/skills/08800-08899.xml
+++ b/trunk/dist/game/data/stats/skills/08800-08899.xml
@@ -498,6 +498,7 @@
+
diff --git a/trunk/dist/game/data/stats/skills/10000-10099.xml b/trunk/dist/game/data/stats/skills/10000-10099.xml
index 6d40519a89..369511dc37 100644
--- a/trunk/dist/game/data/stats/skills/10000-10099.xml
+++ b/trunk/dist/game/data/stats/skills/10000-10099.xml
@@ -750,7 +750,7 @@
-
+
67 63 59 54 50 46 41 37 33 28
31 32 33 34 35 36 37 38 39 40
@@ -761,6 +761,7 @@
+ 890000 880000 870000 860000 850000 840000 830000 820000 810000 800000
@@ -769,46 +770,37 @@
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
+
-
+
-
+
-
+
@@ -1019,7 +1011,7 @@
-
+
92 88 84 80 76 72 69 65 61 57
@@ -1038,18 +1030,18 @@
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/trunk/java/com/l2jserver/gameserver/model/stats/Stats.java b/trunk/java/com/l2jserver/gameserver/model/stats/Stats.java
index 359144bfba..c34bb2d573 100644
--- a/trunk/java/com/l2jserver/gameserver/model/stats/Stats.java
+++ b/trunk/java/com/l2jserver/gameserver/model/stats/Stats.java
@@ -206,7 +206,10 @@ public enum Stats
BROOCH_JEWELS("broochJewels"),
// Summon Points
- MAX_SUMMON_POINTS("summonPoints");
+ MAX_SUMMON_POINTS("summonPoints"),
+
+ // Max Skill Damage Receive
+ MAX_SKILL_DAMAGE("maxSkillDamage");
public static final int NUM_STATS = values().length;