Browse Source

BETA: Fixing effects with recursive calls to effect effect on exit!
* Stack over flow fixed.

Reported by: takhs7

'''Note:''' In the future don't call "exit effect" inside "on exit", it creates endless loop.

Zoey76 12 years ago
parent
commit
bfa70c7484

+ 7 - 13
L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/CharmOfLuck.java

@@ -18,7 +18,6 @@
  */
 package handlers.effecthandlers;
 
-import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.effects.EffectFlag;
 import com.l2jserver.gameserver.model.effects.EffectTemplate;
 import com.l2jserver.gameserver.model.effects.L2Effect;
@@ -26,6 +25,7 @@ import com.l2jserver.gameserver.model.effects.L2EffectType;
 import com.l2jserver.gameserver.model.stats.Env;
 
 /**
+ * Charm Of Luck effect.
  * @author kerberos_20
  */
 public class CharmOfLuck extends L2Effect
@@ -36,21 +36,15 @@ public class CharmOfLuck extends L2Effect
 	}
 	
 	@Override
-	public L2EffectType getEffectType()
-	{
-		return L2EffectType.CHARM_OF_LUCK;
-	}
-	
-	@Override
-	public boolean onStart()
+	public int getEffectFlags()
 	{
-		return true;
+		return EffectFlag.CHARM_OF_LUCK.getMask();
 	}
 	
 	@Override
-	public void onExit()
+	public L2EffectType getEffectType()
 	{
-		((L2Playable) getEffected()).stopCharmOfLuck(this);
+		return L2EffectType.CHARM_OF_LUCK;
 	}
 	
 	@Override
@@ -60,8 +54,8 @@ public class CharmOfLuck extends L2Effect
 	}
 	
 	@Override
-	public int getEffectFlags()
+	public boolean onStart()
 	{
-		return EffectFlag.CHARM_OF_LUCK.getMask();
+		return (getEffector() != null) && (getEffected() != null) && getEffected().isPlayer();
 	}
 }

+ 7 - 13
L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/NoblesseBless.java

@@ -25,6 +25,7 @@ import com.l2jserver.gameserver.model.effects.L2EffectType;
 import com.l2jserver.gameserver.model.stats.Env;
 
 /**
+ * Noblesse Blessing effect.
  * @author earendil
  */
 public class NoblesseBless extends L2Effect
@@ -34,7 +35,6 @@ public class NoblesseBless extends L2Effect
 		super(env, template);
 	}
 	
-	// Special constructor to steal this effect
 	public NoblesseBless(Env env, L2Effect effect)
 	{
 		super(env, effect);
@@ -47,32 +47,26 @@ public class NoblesseBless extends L2Effect
 	}
 	
 	@Override
-	public L2EffectType getEffectType()
-	{
-		return L2EffectType.NOBLESSE_BLESSING;
-	}
-	
-	@Override
-	public boolean onStart()
+	public int getEffectFlags()
 	{
-		return true;
+		return EffectFlag.NOBLESS_BLESSING.getMask();
 	}
 	
 	@Override
-	public void onExit()
+	public L2EffectType getEffectType()
 	{
+		return L2EffectType.NOBLESSE_BLESSING;
 	}
 	
 	@Override
 	public boolean onActionTime()
 	{
-		// just stop this effect
 		return false;
 	}
 	
 	@Override
-	public int getEffectFlags()
+	public boolean onStart()
 	{
-		return EffectFlag.NOBLESS_BLESSING.getMask();
+		return (getEffector() != null) && (getEffected() != null) && getEffected().isPlayable();
 	}
 }

+ 7 - 17
L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/PhoenixBless.java

@@ -18,7 +18,6 @@
  */
 package handlers.effecthandlers;
 
-import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.effects.EffectFlag;
 import com.l2jserver.gameserver.model.effects.EffectTemplate;
 import com.l2jserver.gameserver.model.effects.L2Effect;
@@ -26,6 +25,7 @@ import com.l2jserver.gameserver.model.effects.L2EffectType;
 import com.l2jserver.gameserver.model.stats.Env;
 
 /**
+ * Phoenix Blessing effect.
  * @author Faror
  */
 public class PhoenixBless extends L2Effect
@@ -36,36 +36,26 @@ public class PhoenixBless extends L2Effect
 	}
 	
 	@Override
-	public L2EffectType getEffectType()
-	{
-		return L2EffectType.PHOENIX_BLESSING;
-	}
-	
-	@Override
-	public boolean onStart()
+	public int getEffectFlags()
 	{
-		return true;
+		return EffectFlag.PHOENIX_BLESSING.getMask();
 	}
 	
 	@Override
-	public void onExit()
+	public L2EffectType getEffectType()
 	{
-		if (getEffected().isPlayable())
-		{
-			((L2Playable) getEffected()).stopPhoenixBlessing(this);
-		}
+		return L2EffectType.PHOENIX_BLESSING;
 	}
 	
 	@Override
 	public boolean onActionTime()
 	{
-		// just stop this effect
 		return false;
 	}
 	
 	@Override
-	public int getEffectFlags()
+	public boolean onStart()
 	{
-		return EffectFlag.PHOENIX_BLESSING.getMask();
+		return (getEffector() != null) && (getEffected() != null) && getEffected().isPlayer();
 	}
 }

+ 7 - 16
L2J_DataPack_BETA/dist/game/data/scripts/handlers/effecthandlers/ProtectionBlessing.java

@@ -18,7 +18,6 @@
  */
 package handlers.effecthandlers;
 
-import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.effects.EffectFlag;
 import com.l2jserver.gameserver.model.effects.EffectTemplate;
 import com.l2jserver.gameserver.model.effects.L2Effect;
@@ -26,6 +25,7 @@ import com.l2jserver.gameserver.model.effects.L2EffectType;
 import com.l2jserver.gameserver.model.stats.Env;
 
 /**
+ * Protection Blessing effect.
  * @author kerberos_20
  */
 public class ProtectionBlessing extends L2Effect
@@ -36,35 +36,26 @@ public class ProtectionBlessing extends L2Effect
 	}
 	
 	@Override
-	public L2EffectType getEffectType()
-	{
-		return L2EffectType.PROTECTION_BLESSING;
-	}
-	
-	/** Notify started */
-	@Override
-	public boolean onStart()
+	public int getEffectFlags()
 	{
-		return false;
+		return EffectFlag.PROTECTION_BLESSING.getMask();
 	}
 	
-	/** Notify exited */
 	@Override
-	public void onExit()
+	public L2EffectType getEffectType()
 	{
-		((L2Playable) getEffected()).stopProtectionBlessing(this);
+		return L2EffectType.PROTECTION_BLESSING;
 	}
 	
 	@Override
 	public boolean onActionTime()
 	{
-		// just stop this effect
 		return false;
 	}
 	
 	@Override
-	public int getEffectFlags()
+	public boolean onStart()
 	{
-		return EffectFlag.PROTECTION_BLESSING.getMask();
+		return (getEffector() != null) && (getEffected() != null) && getEffected().isPlayer();
 	}
 }

+ 3 - 2
L2J_DataPack_BETA/dist/game/data/scripts/handlers/skillhandlers/Disablers.java

@@ -33,6 +33,7 @@ import com.l2jserver.gameserver.model.actor.L2Summon;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2SiegeSummonInstance;
 import com.l2jserver.gameserver.model.effects.L2Effect;
+import com.l2jserver.gameserver.model.effects.L2EffectType;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.model.skills.L2SkillType;
 import com.l2jserver.gameserver.model.skills.targets.L2TargetType;
@@ -318,12 +319,12 @@ public class Disablers implements ISkillHandler
 							{
 								if (summon.isNoblesseBlessed())
 								{
-									summon.stopNoblesseBlessing(null);
+									summon.stopEffects(L2EffectType.NOBLESSE_BLESSING);
 								}
 							}
 							else if (summon.isNoblesseBlessed())
 							{
-								summon.stopNoblesseBlessing(null);
+								summon.stopEffects(L2EffectType.NOBLESSE_BLESSING);
 							}
 							else
 							{