浏览代码

Clarity fix: move consumption rates from L2Character to CharStat, so mana checks will operate with decreased numbers.
Now, for example, you will be able to use spell consuming 100 (with clarity 20% - 80) mana with 90 mana.

_DS_ 15 年之前
父节点
当前提交
ccd51e8cbc

+ 2 - 24
L2_GameServer/java/com/l2jserver/gameserver/model/actor/L2Character.java

@@ -1755,19 +1755,8 @@ public abstract class L2Character extends L2Object
 		int initmpcons = getStat().getMpInitialConsume(skill);
 		if (initmpcons > 0)
 		{
+			getStatus().reduceMp(initmpcons);
 			StatusUpdate su = new StatusUpdate(getObjectId());
-			if (skill.isDance())
-			{
-				getStatus().reduceMp(calcStat(Stats.DANCE_MP_CONSUME_RATE, initmpcons, null, null));
-			}
-			else if (skill.isMagic())
-			{
-				getStatus().reduceMp(calcStat(Stats.MAGICAL_MP_CONSUME_RATE, initmpcons, null, null));
-			}
-			else
-			{
-				getStatus().reduceMp(calcStat(Stats.PHYSICAL_MP_CONSUME_RATE, initmpcons, null, null));
-			}
 			su.addAttribute(StatusUpdate.CUR_MP, (int) getCurrentMp());
 			sendPacket(su);
 		}
@@ -6036,18 +6025,7 @@ public abstract class L2Character extends L2Object
 			
 			if (mpConsume > 0)
 			{
-				if (skill.isDance())
-				{
-					getStatus().reduceMp(calcStat(Stats.DANCE_MP_CONSUME_RATE, mpConsume, null, null));
-				}
-				else if (skill.isMagic())
-				{
-					getStatus().reduceMp(calcStat(Stats.MAGICAL_MP_CONSUME_RATE, mpConsume, null, null));
-				}
-				else
-				{
-					getStatus().reduceMp(calcStat(Stats.PHYSICAL_MP_CONSUME_RATE, mpConsume, null, null));
-				}
+				getStatus().reduceMp(mpConsume);
 				su.addAttribute(StatusUpdate.CUR_MP, (int) getCurrentMp());
 				isSendStatus = true;
 			}

+ 24 - 5
L2_GameServer/java/com/l2jserver/gameserver/model/actor/stat/CharStat.java

@@ -663,11 +663,23 @@ public class CharStat
 	{
 		if (skill == null)
 			return 1;
-		int mpconsume = skill.getMpConsume();
-		if (Config.DANCE_CONSUME_ADDITIONAL_MP && skill.isDance() && _activeChar != null && _activeChar.getDanceCount() > 0)
-			mpconsume += _activeChar.getDanceCount() * skill.getNextDanceMpCost();
+		double mpConsume = skill.getMpConsume();
+		if (skill.isDance())
+		{
+			if (Config.DANCE_CONSUME_ADDITIONAL_MP
+					&& _activeChar != null
+					&& _activeChar.getDanceCount() > 0)
+				mpConsume += _activeChar.getDanceCount() * skill.getNextDanceMpCost();
+		}
 		
-		return (int) calcStat(Stats.MP_CONSUME, mpconsume, null, skill);
+		mpConsume = calcStat(Stats.MP_CONSUME, mpConsume, null, skill);
+
+		if (skill.isDance())
+			return (int)calcStat(Stats.DANCE_MP_CONSUME_RATE, mpConsume, null, null);
+		else if (skill.isMagic())
+			return (int)calcStat(Stats.MAGICAL_MP_CONSUME_RATE, mpConsume, null, null);
+		else
+			return (int)calcStat(Stats.PHYSICAL_MP_CONSUME_RATE, mpConsume, null, null);
 	}
 
 	/** Return the mpInitialConsume. */
@@ -676,7 +688,14 @@ public class CharStat
     	if (skill == null)
     		return 1;
 
-		return (int) calcStat(Stats.MP_CONSUME, skill.getMpInitialConsume(), null, skill);
+		double mpConsume = calcStat(Stats.MP_CONSUME, skill.getMpInitialConsume(), null, skill);
+
+		if (skill.isDance())
+			return (int)calcStat(Stats.DANCE_MP_CONSUME_RATE, mpConsume, null, null);
+		else if (skill.isMagic())
+			return (int)calcStat(Stats.MAGICAL_MP_CONSUME_RATE, mpConsume, null, null);
+		else
+			return (int)calcStat(Stats.PHYSICAL_MP_CONSUME_RATE, mpConsume, null, null);
 	}
 
 	public byte getAttackElement()