浏览代码

BETA: Fixed reflect skill it should reflect only the debuff and apply instant effects on target.

Reported by: Gries, sodek
Reviewed by: Adry_85, St3eT, Zoey76, !UnAfraid
Nos 11 年之前
父节点
当前提交
fe7807ad14

+ 16 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/skills/Skill.java

@@ -1487,7 +1487,22 @@ public final class Skill implements IChanceSkillTrigger, IIdentifiable
 				{
 					if (Formulas.calcBuffDebuffReflection(target, this))
 					{
-						applyEffects(target, caster);
+						// if skill is reflected instant effects should be casted on target
+						// and continuous effects on caster
+						applyEffects(target, caster, false, 0);
+						
+						final Env env = new Env();
+						env.setCharacter(caster);
+						env.setTarget(target);
+						env.setSkill(this);
+						
+						final BuffInfo info = new BuffInfo(env);
+						applyEffectScope(EffectScope.GENERAL, info, true, false);
+						
+						EffectScope pvpOrPveEffectScope = caster.isPlayable() && target.isAttackable() ? EffectScope.PVE : caster.isPlayable() && target.isPlayable() ? EffectScope.PVP : null;
+						applyEffectScope(pvpOrPveEffectScope, info, true, false);
+						
+						applyEffectScope(EffectScope.CHANNELING, info, true, false);
 					}
 					else
 					{

+ 3 - 10
L2J_Server_BETA/java/com/l2jserver/gameserver/model/stats/Formulas.java

@@ -1867,19 +1867,12 @@ public final class Formulas
 	 */
 	public static boolean calcBuffDebuffReflection(L2Character target, Skill skill)
 	{
-		boolean reflect = false;
-		// Neither some special skills (like hero debuffs...) or those skills ignoring resistances can't be reflected
-		if ((skill.getPower() == -1) || ((skill.isHeroSkill() && skill.isDebuff()) || (!skill.isDebuff() && skill.isBad())))
+		if (!skill.isDebuff() || (skill.getActivateRate() == -1))
 		{
-			return reflect;
+			return false;
 		}
-		
 		final double reflectChance = target.calcStat(skill.isMagic() ? Stats.REFLECT_SKILL_MAGIC : Stats.REFLECT_SKILL_PHYSIC, 0, null, skill);
-		if (Rnd.get(100) < reflectChance)
-		{
-			reflect = true;
-		}
-		return reflect;
+		return reflectChance > Rnd.get(100);
 	}
 	
 	/**