Browse Source

BETA: H5 Arcane Shield core-support

Rumen Nikiforov 14 years ago
parent
commit
64f6a9c055

+ 24 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/status/PcStatus.java

@@ -94,6 +94,7 @@ public class PcStatus extends PlayableStatus
 		
 		int fullValue = (int) value;
 		int tDmg = 0;
+		int mpDam = 0;
 		
 		if (attacker != null && attacker != getActiveChar())
 		{
@@ -119,8 +120,7 @@ public class PcStatus extends PlayableStatus
 			
 			// Check and calculate transfered damage
 			final L2Summon summon = getActiveChar().getPet();
-			//TODO correct range
-			if (summon != null && summon instanceof L2SummonInstance && Util.checkIfInRange(900, getActiveChar(), summon, true))
+			if (summon != null && summon instanceof L2SummonInstance && Util.checkIfInRange(1000, getActiveChar(), summon, true))
 			{
 				tDmg = (int)value * (int)getActiveChar().getStat().calcStat(Stats.TRANSFER_DAMAGE_PERCENT, 0, null, null) /100;
 				
@@ -134,6 +134,28 @@ public class PcStatus extends PlayableStatus
 				}
 			}
 			
+			mpDam = (int) value * (int) getActiveChar().getStat().calcStat(Stats.MANA_SHIELD_PERCENT, 0, null, null) / 100;
+			
+			if (mpDam > 0)
+			{
+				mpDam = (int) (value - mpDam);
+				if (mpDam > getActiveChar().getCurrentMp())
+				{
+					getActiveChar().sendPacket(SystemMessage.getSystemMessage(SystemMessageId.MP_BECAME_0_ARCANE_SHIELD_DISAPPEARING));
+					getActiveChar().getFirstEffect(1556).stopEffectTask();
+					value = mpDam - getActiveChar().getCurrentMp();
+					getActiveChar().setCurrentMp(0);
+				}
+				else
+				{
+					getActiveChar().reduceCurrentMp(mpDam);
+					SystemMessage smsg = SystemMessage.getSystemMessage(SystemMessageId.ARCANE_SHIELD_DECREASED_YOUR_MP_BY_S1_INSTEAD_OF_HP);
+					smsg.addNumber(mpDam);
+					getActiveChar().sendPacket(smsg);
+					return;
+				}
+			}
+			
 			if (!ignoreCP && attacker instanceof L2Playable)
 			{
 				if (getCurrentCp() >= value)

+ 14 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/network/SystemMessageId.java

@@ -14668,6 +14668,18 @@ public final class SystemMessageId
 	 */
 	public static final SystemMessageId YOU_OBTAINED_S1_RECOMMENDATIONS;
 	
+	/**
+	 * ID: 3255<br>
+	 * Message: Arcane Shield decreased your MP by $1 instead of HP.
+	 */
+	public static final SystemMessageId ARCANE_SHIELD_DECREASED_YOUR_MP_BY_S1_INSTEAD_OF_HP;
+
+	/**
+	 * ID: 3256<br>
+	 * Message: MP became 0 and the Arcane Shield is disappearing.
+	 */
+	public static final SystemMessageId MP_BECAME_0_ARCANE_SHIELD_DISAPPEARING;
+	
 	/**
 	 * ID: 6501<br>
 	 * Message: You cannot bookmark this location because you do not have a My Teleport Flag.
@@ -17112,6 +17124,8 @@ public final class SystemMessageId
 		C1_IS_SET_TO_REFUSE_DUEL_REQUEST = new SystemMessageId(3169);
 		YOU_CURRENTLY_DO_NOT_HAVE_ANY_RECOMMENDATIONS = new SystemMessageId(3206);
 		YOU_OBTAINED_S1_RECOMMENDATIONS = new SystemMessageId(3207);
+		ARCANE_SHIELD_DECREASED_YOUR_MP_BY_S1_INSTEAD_OF_HP = new SystemMessageId(3255);
+		MP_BECAME_0_ARCANE_SHIELD_DISAPPEARING = new SystemMessageId(3256);
 		YOU_CANNOT_BOOKMARK_THIS_LOCATION_BECAUSE_YOU_DO_NOT_HAVE_A_MY_TELEPORT_FLAG = new SystemMessageId(6501);
 		THOMAS_D_TURKEY_APPEARED = new SystemMessageId(6503);
 		THOMAS_D_TURKEY_DEFETED = new SystemMessageId(6504);

+ 1 - 0
L2J_Server_BETA/java/com/l2jserver/gameserver/skills/Stats.java

@@ -193,6 +193,7 @@ public enum Stats
 	VENGEANCE_SKILL_PHYSICAL_DAMAGE("vengeancePdam"),
 	ABSORB_DAMAGE_PERCENT("absorbDam"),
 	TRANSFER_DAMAGE_PERCENT("transDam"),
+	MANA_SHIELD_PERCENT("manaShield"),
 	ABSORB_MANA_DAMAGE_PERCENT("absorbDamMana"),
 	
 	MAX_LOAD("maxLoad"),