|
@@ -18,7 +18,6 @@ import java.util.logging.Logger;
|
|
|
|
|
|
import com.l2jserver.Config;
|
|
|
import com.l2jserver.gameserver.model.actor.L2Character;
|
|
|
-import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
|
|
import com.l2jserver.gameserver.model.effects.EffectTemplate;
|
|
|
import com.l2jserver.gameserver.model.effects.L2Effect;
|
|
|
import com.l2jserver.gameserver.model.effects.L2EffectType;
|
|
@@ -59,12 +58,14 @@ public class Cancel extends L2Effect
|
|
|
|
|
|
private static boolean cancel(L2Character caster, L2Character target, L2Effect effect)
|
|
|
{
|
|
|
- if (!(target instanceof L2PcInstance)|| target.isDead())
|
|
|
+ if (target.isDead())
|
|
|
+ {
|
|
|
return false;
|
|
|
+ }
|
|
|
|
|
|
final int cancelLvl = effect.getSkill().getMagicLevel();
|
|
|
int count = effect.getSkill().getMaxNegatedEffects();
|
|
|
-
|
|
|
+
|
|
|
double rate = effect.getEffectPower();
|
|
|
final double vulnModifier = target.calcStat(Stats.CANCEL_VULN, 0, target, null);
|
|
|
final double profModifier = caster.calcStat(Stats.CANCEL_PROF, 0, target, null);
|
|
@@ -74,34 +75,32 @@ public class Cancel extends L2Effect
|
|
|
{
|
|
|
if (res < 0)
|
|
|
{
|
|
|
- resMod = 1 - 0.075 * res;
|
|
|
+ resMod = 1 - (0.075 * res);
|
|
|
resMod = 1 / resMod;
|
|
|
}
|
|
|
else
|
|
|
- resMod = 1 + 0.02 * res;
|
|
|
+ {
|
|
|
+ resMod = 1 + (0.02 * res);
|
|
|
+ }
|
|
|
|
|
|
rate *= resMod;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
if (caster.isDebug())
|
|
|
{
|
|
|
final StringBuilder stat = new StringBuilder(100);
|
|
|
- StringUtil.append(stat,
|
|
|
- effect.getSkill().getName(),
|
|
|
- " power:", String.valueOf((int)effect.getEffectPower()),
|
|
|
- " lvl:", String.valueOf(cancelLvl),
|
|
|
- " res:", String.format("%1.2f", resMod), "(",
|
|
|
- String.format("%1.2f", profModifier), "/",
|
|
|
- String.format("%1.2f", vulnModifier),
|
|
|
- ") total:", String.valueOf(rate)
|
|
|
- );
|
|
|
+ StringUtil.append(stat, effect.getSkill().getName(), " power:", String.valueOf((int) effect.getEffectPower()), " lvl:", String.valueOf(cancelLvl), " res:", String.format("%1.2f", resMod), "(", String.format("%1.2f", profModifier), "/", String.format("%1.2f", vulnModifier), ") total:", String.valueOf(rate));
|
|
|
final String result = stat.toString();
|
|
|
if (caster.isDebug())
|
|
|
+ {
|
|
|
caster.sendDebugMessage(result);
|
|
|
+ }
|
|
|
if (Config.DEVELOPER)
|
|
|
+ {
|
|
|
_log.info(result);
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
final L2Effect[] effects = target.getAllEffects();
|
|
|
|
|
|
if (effect.getSkill().getNegateAbnormals() != null) // Cancel for abnormals
|
|
@@ -109,14 +108,18 @@ public class Cancel extends L2Effect
|
|
|
for (L2Effect eff : effects)
|
|
|
{
|
|
|
if (eff == null)
|
|
|
+ {
|
|
|
continue;
|
|
|
+ }
|
|
|
|
|
|
for (String negateAbnormalType : effect.getSkill().getNegateAbnormals().keySet())
|
|
|
{
|
|
|
- if (negateAbnormalType.equalsIgnoreCase(eff.getAbnormalType()) && effect.getSkill().getNegateAbnormals().get(negateAbnormalType) >= eff.getAbnormalLvl())
|
|
|
+ if (negateAbnormalType.equalsIgnoreCase(eff.getAbnormalType()) && (effect.getSkill().getNegateAbnormals().get(negateAbnormalType) >= eff.getAbnormalLvl()))
|
|
|
{
|
|
|
- if (calcCancelSuccess(eff, cancelLvl, (int)rate))
|
|
|
+ if (calcCancelSuccess(eff, cancelLvl, (int) rate))
|
|
|
+ {
|
|
|
eff.exit();
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -130,7 +133,9 @@ public class Cancel extends L2Effect
|
|
|
{
|
|
|
eff = effects[i];
|
|
|
if (eff == null)
|
|
|
+ {
|
|
|
continue;
|
|
|
+ }
|
|
|
|
|
|
if (!eff.canBeStolen())
|
|
|
{
|
|
@@ -140,7 +145,9 @@ public class Cancel extends L2Effect
|
|
|
|
|
|
// first pass - dances/songs only
|
|
|
if (!eff.getSkill().isDance())
|
|
|
+ {
|
|
|
continue;
|
|
|
+ }
|
|
|
|
|
|
if (eff.getSkill().getId() == lastCanceledSkillId)
|
|
|
{
|
|
@@ -148,8 +155,10 @@ public class Cancel extends L2Effect
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- if (!calcCancelSuccess(eff, cancelLvl, (int)rate))
|
|
|
+ if (!calcCancelSuccess(eff, cancelLvl, (int) rate))
|
|
|
+ {
|
|
|
continue;
|
|
|
+ }
|
|
|
|
|
|
lastCanceledSkillId = eff.getSkill().getId();
|
|
|
|
|
@@ -157,7 +166,9 @@ public class Cancel extends L2Effect
|
|
|
count--;
|
|
|
|
|
|
if (count == 0)
|
|
|
+ {
|
|
|
break;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if (count != 0)
|
|
@@ -167,11 +178,15 @@ public class Cancel extends L2Effect
|
|
|
{
|
|
|
eff = effects[i];
|
|
|
if (eff == null)
|
|
|
+ {
|
|
|
continue;
|
|
|
+ }
|
|
|
|
|
|
// second pass - all except dances/songs
|
|
|
if (eff.getSkill().isDance())
|
|
|
+ {
|
|
|
continue;
|
|
|
+ }
|
|
|
|
|
|
if (eff.getSkill().getId() == lastCanceledSkillId)
|
|
|
{
|
|
@@ -179,15 +194,19 @@ public class Cancel extends L2Effect
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- if (!calcCancelSuccess(eff, cancelLvl, (int)rate))
|
|
|
+ if (!calcCancelSuccess(eff, cancelLvl, (int) rate))
|
|
|
+ {
|
|
|
continue;
|
|
|
+ }
|
|
|
|
|
|
lastCanceledSkillId = eff.getSkill().getId();
|
|
|
eff.exit();
|
|
|
count--;
|
|
|
|
|
|
if (count == 0)
|
|
|
+ {
|
|
|
break;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -198,13 +217,17 @@ public class Cancel extends L2Effect
|
|
|
private static boolean calcCancelSuccess(L2Effect effect, int cancelLvl, int baseRate)
|
|
|
{
|
|
|
int rate = 2 * (cancelLvl - effect.getSkill().getMagicLevel());
|
|
|
- rate += effect.getAbnormalTime()/120;
|
|
|
+ rate += effect.getAbnormalTime() / 120;
|
|
|
rate += baseRate;
|
|
|
|
|
|
if (rate < 25)
|
|
|
+ {
|
|
|
rate = 25;
|
|
|
+ }
|
|
|
else if (rate > 75)
|
|
|
+ {
|
|
|
rate = 75;
|
|
|
+ }
|
|
|
|
|
|
return Rnd.get(100) < rate;
|
|
|
}
|