Procházet zdrojové kódy

Improved handling of the invul/paralyze/petrify effects using EffectFlags.

_DS_ před 14 roky
rodič
revize
5513020e44

+ 2 - 0
L2_GameServer/java/com/l2jserver/gameserver/model/CharEffectList.java

@@ -63,6 +63,8 @@ public class CharEffectList
 	public static final int EFFECT_FLAG_SLEEP = 0x4000;
 	public static final int EFFECT_FLAG_STUNNED = 0x8000;
 	public static final int EFFECT_FLAG_BETRAYED = 0x10000;
+	public static final int EFFECT_FLAG_INVUL = 0x40000;
+	public static final int EFFECT_FLAG_PARALYZED = 0x80000;
 	
 	private FastList<L2Effect> _buffs;
 	private FastList<L2Effect> _debuffs;

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

@@ -159,7 +159,7 @@ public abstract class L2Character extends L2Object
 	private boolean _isNoRndWalk							= false; // Is no random walk
 	protected boolean _showSummonAnimation					= false;
 	protected boolean _isTeleporting						= false;
-	protected boolean _isInvul								= false;
+	private boolean _isInvul								= false;
 	private boolean _isMortal								= true; // Char will die when HP decreased to 0
 	private boolean _isFlying								= false;
 	
@@ -2403,7 +2403,7 @@ public abstract class L2Character extends L2Object
 	/** Set the overloaded status of the L2Character is overloaded (if True, the L2PcInstance can't take more item). */
 	public final void setIsOverloaded(boolean value) { _isOverloaded = value; }
 	
-	public final boolean isParalyzed() { return _isParalyzed; }
+	public final boolean isParalyzed() { return _isParalyzed || isAffected(CharEffectList.EFFECT_FLAG_PARALYZED); }
 	public final void setIsParalyzed(boolean value) { _isParalyzed = value; }
 	
 	public final boolean isPendingRevive() { return isDead() && _isPendingRevive; }
@@ -2463,7 +2463,7 @@ public abstract class L2Character extends L2Object
 	public final boolean isTeleporting() { return _isTeleporting; }
 	public void setIsTeleporting(boolean value) { _isTeleporting = value; }
 	public void setIsInvul(boolean b){_isInvul = b;}
-	public boolean isInvul(){return _isInvul  || _isTeleporting;}
+	public boolean isInvul(){return _isInvul  || _isTeleporting || isAffected(CharEffectList.EFFECT_FLAG_INVUL);}
 	public void setIsMortal(boolean b) { _isMortal = b; }
 	public boolean isMortal(){ return _isMortal; }
 	public boolean isUndead() { return false; }

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/model/actor/L2Summon.java

@@ -510,7 +510,7 @@ public abstract class L2Summon extends L2Playable
 	@Override
 	public boolean isInvul()
 	{
-		return _isInvul  || _isTeleporting ||  getOwner().isSpawnProtected();
+		return super.isInvul() ||  getOwner().isSpawnProtected();
 	}
 	
 	/**

+ 2 - 2
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java

@@ -6774,7 +6774,7 @@ public final class L2PcInstance extends L2Playable
 	@Override
 	public boolean isInvul()
 	{
-		return _isInvul  || _isTeleporting || _teleportProtectEndTime > GameTimeController.getGameTicks();
+		return super.isInvul() || _teleportProtectEndTime > GameTimeController.getGameTicks();
 	}
 	
 	/**
@@ -10930,7 +10930,7 @@ public final class L2PcInstance extends L2Playable
 		
 		if (isGM())
 		{
-			if (_isInvul)
+			if (isInvul())
 				sendMessage("Entering world in Invulnerable mode.");
 			if (getAppearance().getInvisible())
 				sendMessage("Entering world in Invisible mode.");

+ 5 - 17
L2_GameServer/java/com/l2jserver/gameserver/skills/effects/EffectInvincible.java

@@ -14,6 +14,7 @@
  */
 package com.l2jserver.gameserver.skills.effects;
 
+import com.l2jserver.gameserver.model.CharEffectList;
 import com.l2jserver.gameserver.model.L2Effect;
 import com.l2jserver.gameserver.skills.Env;
 import com.l2jserver.gameserver.templates.effects.EffectTemplate;
@@ -36,17 +37,6 @@ public class EffectInvincible extends L2Effect
 		return L2EffectType.INVINCIBLE;
 	}
 	
-	/**
-	 * 
-	 * @see com.l2jserver.gameserver.model.L2Effect#onStart()
-	 */
-	@Override
-	public boolean onStart()
-	{
-		getEffected().setIsInvul(true);
-		return super.onStart();
-	}
-	
 	/**
 	 * 
 	 * @see com.l2jserver.gameserver.model.L2Effect#onActionTime()
@@ -58,14 +48,12 @@ public class EffectInvincible extends L2Effect
 		return false;
 	}
 	
-	/**
-	 * 
-	 * @see com.l2jserver.gameserver.model.L2Effect#onExit()
+	/* (non-Javadoc)
+	 * @see com.l2jserver.gameserver.model.L2Effect#getEffectFlags()
 	 */
 	@Override
-	public void onExit()
+	public int getEffectFlags()
 	{
-		getEffected().setIsInvul(false);
-		super.onExit();
+		return CharEffectList.EFFECT_FLAG_INVUL;
 	}
 }

+ 12 - 3
L2_GameServer/java/com/l2jserver/gameserver/skills/effects/EffectParalyze.java

@@ -14,6 +14,7 @@
  */
 package com.l2jserver.gameserver.skills.effects;
 
+import com.l2jserver.gameserver.model.CharEffectList;
 import com.l2jserver.gameserver.model.L2Effect;
 import com.l2jserver.gameserver.skills.AbnormalEffect;
 import com.l2jserver.gameserver.skills.Env;
@@ -45,8 +46,7 @@ public class EffectParalyze extends L2Effect
 	public boolean onStart()
 	{
 		getEffected().startAbnormalEffect(AbnormalEffect.HOLD_1);
-		getEffected().startParalyze();
-		return true;
+		return super.onStart();
 	}
 	
 	/**
@@ -57,7 +57,7 @@ public class EffectParalyze extends L2Effect
 	public void onExit()
 	{
 		getEffected().stopAbnormalEffect(AbnormalEffect.HOLD_1);
-		getEffected().stopParalyze(false);
+		super.onExit();
 	}
 	
 	/**
@@ -69,4 +69,13 @@ public class EffectParalyze extends L2Effect
 	{
 		return false;
 	}
+
+	/* (non-Javadoc)
+	 * @see com.l2jserver.gameserver.model.L2Effect#getEffectFlags()
+	 */
+	@Override
+	public int getEffectFlags()
+	{
+		return CharEffectList.EFFECT_FLAG_PARALYZED;
+	}
 }

+ 12 - 6
L2_GameServer/java/com/l2jserver/gameserver/skills/effects/EffectPetrification.java

@@ -14,6 +14,7 @@
  */
 package com.l2jserver.gameserver.skills.effects;
 
+import com.l2jserver.gameserver.model.CharEffectList;
 import com.l2jserver.gameserver.model.L2Effect;
 import com.l2jserver.gameserver.skills.AbnormalEffect;
 import com.l2jserver.gameserver.skills.Env;
@@ -45,9 +46,7 @@ public class EffectPetrification extends L2Effect
 	public boolean onStart()
 	{
 		getEffected().startAbnormalEffect(AbnormalEffect.HOLD_2);
-		getEffected().startParalyze();
-		getEffected().setIsInvul(true);
-		return true;
+		return super.onStart();
 	}
 	
 	/**
@@ -58,8 +57,7 @@ public class EffectPetrification extends L2Effect
 	public void onExit()
 	{
 		getEffected().stopAbnormalEffect(AbnormalEffect.HOLD_2);
-		getEffected().stopParalyze(false);
-		getEffected().setIsInvul(false);
+		super.onExit();
 	}
 	
 	/**
@@ -71,5 +69,13 @@ public class EffectPetrification extends L2Effect
 	{
 		return false;
 	}
-	
+
+	/* (non-Javadoc)
+	 * @see com.l2jserver.gameserver.model.L2Effect#getEffectFlags()
+	 */
+	@Override
+	public int getEffectFlags()
+	{
+		return CharEffectList.EFFECT_FLAG_PARALYZED | CharEffectList.EFFECT_FLAG_INVUL;
+	}
 }