I do some modifications on EffectCancelDebuff but can't make Cleanse don't remove malaria and flu.
I try to change skills from DeBuff to Buff, but still removing it.
/*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package net.sf.l2j.gameserver.skills.effects;
import net.sf.l2j.gameserver.model.L2Effect;
import net.sf.l2j.gameserver.model.L2Skill;
import net.sf.l2j.gameserver.model.actor.L2Character;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.skills.Env;
import net.sf.l2j.gameserver.skills.Formulas;
import net.sf.l2j.gameserver.templates.skills.L2EffectType;
import net.sf.l2j.gameserver.templates.skills.L2SkillType;
import net.sf.l2j.util.Rnd;
/**
* @author UnAfraid
*/
public class EffectCancelDebuff extends L2Effect
{
public EffectCancelDebuff(Env env, EffectTemplate template)
{
super(env, template);
}
@Override
public L2EffectType getEffectType()
{
return L2EffectType.CANCEL_DEBUFF;
}
@Override
public boolean onStart()
{
return cancel(getEffector(), getEffected(), getSkill(), getEffectTemplate().effectType);
}
@Override
public boolean onActionTime()
{
return false;
}
private static boolean cancel(L2Character caster, L2Character target, L2Skill skill, L2SkillType effectType)
{
if (!(target instanceof L2PcInstance) || target.isDead())
return false;
final int cancelLvl = skill.getMagicLevel();
int count = skill.getMaxNegatedEffects();
double baseRate = Formulas.calcSkillVulnerability(caster, target, skill, effectType);
L2Effect effect;
int lastCanceledSkillId = 0;
final L2Effect[] effects = target.getAllEffects();
for (int i = effects.length; --i >= 0;)
{
effect = effects[i];
if (effect == null)
continue;
if (!effect.getSkill().isDebuff() || !effect.getSkill().canBeDispeled() || effect.getSkill().getId() != 4554 || effect.getSkill().getId() != 4553)
{
effects[i] = null;
continue;
}
if (effect.getSkill().getId() == lastCanceledSkillId)
{
effect.exit(); // this skill already canceled
continue;
}
if (!calcCancelSuccess(effect, cancelLvl, (int) baseRate))
continue;
lastCanceledSkillId = effect.getSkill().getId();
effect.exit();
count--;
if (count == 0)
break;
}
if (count != 0)
{
lastCanceledSkillId = 0;
for (int i = effects.length; --i >= 0;)
{
effect = effects[i];
if (effect == null)
continue;
if (!effect.getSkill().isDebuff() || !effect.getSkill().canBeDispeled() || effect.getSkill().getId() != 4554 || effect.getSkill().getId() != 4553)
{
effects[i] = null;
continue;
}
if (effect.getSkill().getId() == lastCanceledSkillId)
{
effect.exit(); // this skill already canceled
continue;
}
if (!calcCancelSuccess(effect, cancelLvl, (int) baseRate))
continue;
lastCanceledSkillId = effect.getSkill().getId();
effect.exit();
count--;
if (count == 0)
break;
}
}
return true;
}
private static boolean calcCancelSuccess(L2Effect effect, int cancelLvl, int baseRate)
{
int rate = 2 * (cancelLvl - effect.getSkill().getMagicLevel());
rate += (effect.getPeriod() - effect.getTime()) / 1200;
rate *= baseRate;
if (rate < 25)
rate = 25;
else if (rate > 75)
rate = 75;
return Rnd.get(100) < rate;
}
}
⭐️ Interlude — Just Like You Remember, But a Bit More Modern
We know many of you love classic Interlude for its unique atmosphere, and we want to preserve it as close to the original as possible.
But let's be honest: the original client in 2025 looks a bit outdated.
That's why we've chosen High Five as our base! What does this mean?
Visuals — Nearly identical to Interlude, with slight improvements
Stability — Fewer crashes and lags than the old client
Convenience — Flexible interface customization (skill bars, UI elements)
Enhanced graphics (water, lighting, draw distance)
Clear tooltips — Accurate skill descriptions
👉 What do you think? Do you like these changes? Ask questions — let's discuss! 🚀
Question
Miracles
I do some modifications on EffectCancelDebuff but can't make Cleanse don't remove malaria and flu.
I try to change skills from DeBuff to Buff, but still removing it.
5 answers to this question
Recommended Posts