Removed BuffInfo from effect handlers.

This commit is contained in:
MobiusDev
2017-12-09 07:32:32 +00:00
parent 584bc234f7
commit 247a5bc9f5
461 changed files with 2706 additions and 3035 deletions

View File

@@ -18,6 +18,11 @@ package events.HuntForSanta;
import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.events.EventType;
import com.l2jmobius.gameserver.model.events.ListenerRegisterType;
import com.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
import com.l2jmobius.gameserver.model.events.annotations.RegisterType;
import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerLogin;
import com.l2jmobius.gameserver.model.holders.SkillHolder;
import com.l2jmobius.gameserver.model.quest.LongTimeEvent;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
@@ -39,7 +44,7 @@ public final class HuntForSanta extends LongTimeEvent
private static final SkillHolder BUFF_TREE = new SkillHolder(16420, 1);
private static final SkillHolder BUFF_SNOWMAN = new SkillHolder(16421, 1);
// Item
// private static final int SANTAS_MARK = 40313;
private static final int SANTAS_MARK = 40313;
private HuntForSanta()
{
@@ -63,21 +68,27 @@ public final class HuntForSanta extends LongTimeEvent
case "receiveBuffStocking":
{
htmltext = applyBuff(npc, player, BUFF_STOCKING.getSkill());
startQuestTimer("rewardBuffStocking" + player.getObjectId(), 7200000, null, player);
break;
}
case "receiveBuffTree":
{
htmltext = applyBuff(npc, player, BUFF_TREE.getSkill());
startQuestTimer("rewardBuffTree" + player.getObjectId(), 7200000, null, player);
break;
}
case "receiveBuffSnowman":
{
htmltext = applyBuff(npc, player, BUFF_SNOWMAN.getSkill());
startQuestTimer("rewardBuffSnowman" + player.getObjectId(), 7200000, null, player);
break;
}
case "receiveBuffAll":
{
htmltext = applyAllBuffs(npc, player);
startQuestTimer("rewardBuffStocking" + player.getObjectId(), 7200000, null, player);
startQuestTimer("rewardBuffTree" + player.getObjectId(), 7200000, null, player);
startQuestTimer("rewardBuffSnowman" + player.getObjectId(), 7200000, null, player);
break;
}
case "changeBuff":
@@ -87,6 +98,17 @@ public final class HuntForSanta extends LongTimeEvent
break;
}
}
if (event.startsWith("rewardBuffStocking") //
|| event.startsWith("rewardBuffSnowman") //
|| event.startsWith("rewardBuffTree"))
{
if ((player != null) && (player.isOnlineInt() == 1))
{
giveItems(player, SANTAS_MARK, 1);
}
}
return htmltext;
}
@@ -128,20 +150,36 @@ public final class HuntForSanta extends LongTimeEvent
private void removeBuffs(L2PcInstance player)
{
player.getEffectList().stopSkillEffects(true, BUFF_STOCKING.getSkill());
player.getEffectList().stopSkillEffects(true, BUFF_TREE.getSkill());
player.getEffectList().stopSkillEffects(true, BUFF_SNOWMAN.getSkill());
cancelQuestTimer("rewardBuffStocking" + player.getObjectId(), null, player);
cancelQuestTimer("rewardBuffTree" + player.getObjectId(), null, player);
cancelQuestTimer("rewardBuffSnowman" + player.getObjectId(), null, player);
}
@RegisterEvent(EventType.ON_PLAYER_LOGIN)
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
public void OnPlayerLogin(OnPlayerLogin event)
{
final L2PcInstance player = event.getActiveChar();
final BuffInfo buffStocking = player.getEffectList().getBuffInfoBySkillId(BUFF_STOCKING.getSkillId());
final BuffInfo buffTree = player.getEffectList().getBuffInfoBySkillId(BUFF_TREE.getSkillId());
final BuffInfo buffSnowman = player.getEffectList().getBuffInfoBySkillId(BUFF_SNOWMAN.getSkillId());
if (buffStocking != null)
{
player.getEffectList().stopSkillEffects(true, buffStocking.getSkill());
cancelQuestTimer("rewardBuffStocking" + player.getObjectId(), null, player);
startQuestTimer("rewardBuffStocking" + player.getObjectId(), buffStocking.getTime() * 1000, null, player);
}
if (buffTree != null)
{
player.getEffectList().stopSkillEffects(true, buffTree.getSkill());
cancelQuestTimer("rewardBuffTree" + player.getObjectId(), null, player);
startQuestTimer("rewardBuffTree" + player.getObjectId(), buffTree.getTime() * 1000, null, player);
}
if (buffSnowman != null)
{
player.getEffectList().stopSkillEffects(true, buffSnowman.getSkill());
cancelQuestTimer("rewardBuffSnowman" + player.getObjectId(), null, player);
startQuestTimer("rewardBuffSnowman" + player.getObjectId(), buffSnowman.getTime() * 1000, null, player);
}
}

View File

@@ -280,7 +280,6 @@ public final class EffectMasterHandler
EffectHandler.getInstance().registerHandler("ResurrectionSpecial", ResurrectionSpecial::new);
EffectHandler.getInstance().registerHandler("Reuse", Reuse::new);
EffectHandler.getInstance().registerHandler("ReuseSkillById", ReuseSkillById::new);
EffectHandler.getInstance().registerHandler("RewardItemOnExit", RewardItemOnExit::new);
EffectHandler.getInstance().registerHandler("Root", Root::new);
EffectHandler.getInstance().registerHandler("SacrificeSummon", SacrificeSummon::new);
EffectHandler.getInstance().registerHandler("SafeFallHeight", SafeFallHeight::new);

View File

@@ -17,10 +17,11 @@
package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.EffectFlag;
import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
* An effect that blocks a debuff. Acts like DOTA's Linken Sphere.
@@ -36,9 +37,9 @@ public final class AbnormalShield extends AbstractEffect
}
@Override
public void onStart(BuffInfo info)
public void onStart(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().setAbnormalShieldBlocks(_times);
effected.setAbnormalShieldBlocks(_times);
}
@Override
@@ -48,9 +49,9 @@ public final class AbnormalShield extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().setAbnormalShieldBlocks(Integer.MIN_VALUE);
effected.setAbnormalShieldBlocks(Integer.MIN_VALUE);
}
@Override

View File

@@ -20,12 +20,13 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.events.EventType;
import com.l2jmobius.gameserver.model.events.impl.character.OnCreatureDamageReceived;
import com.l2jmobius.gameserver.model.events.listeners.FunctionEventListener;
import com.l2jmobius.gameserver.model.events.returns.DamageReturn;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
* @author Sdw
@@ -60,16 +61,16 @@ public class AbsorbDamage extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().removeListenerIf(EventType.ON_CREATURE_DAMAGE_RECEIVED, listener -> listener.getOwner() == this);
_damageHolder.remove(info.getEffected().getObjectId());
effected.removeListenerIf(EventType.ON_CREATURE_DAMAGE_RECEIVED, listener -> listener.getOwner() == this);
_damageHolder.remove(effected.getObjectId());
}
@Override
public void onStart(BuffInfo info)
public void onStart(L2Character effector, L2Character effected, Skill skill)
{
_damageHolder.put(info.getEffected().getObjectId(), _damage);
info.getEffected().addListener(new FunctionEventListener(info.getEffected(), EventType.ON_CREATURE_DAMAGE_RECEIVED, (OnCreatureDamageReceived event) -> onDamageReceivedEvent(event), this));
_damageHolder.put(effected.getObjectId(), _damage);
effected.addListener(new FunctionEventListener(effected, EventType.ON_CREATURE_DAMAGE_RECEIVED, (OnCreatureDamageReceived event) -> onDamageReceivedEvent(event), this));
}
}

View File

@@ -20,7 +20,6 @@ import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.holders.SkillHolder;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
@@ -52,8 +51,8 @@ public class AddSkillBySkill extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().removeSkill(_addedSkill.getSkill(), true);
effected.removeSkill(_addedSkill.getSkill(), true);
}
}

View File

@@ -30,7 +30,6 @@ import com.l2jmobius.gameserver.model.base.ClassId;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.network.serverpackets.ExAlterSkillRequest;
@@ -101,11 +100,11 @@ public final class AirBind extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
if (!info.getEffected().isPlayer())
if (!effected.isPlayer())
{
info.getEffected().getAI().notifyEvent(CtrlEvent.EVT_THINK);
effected.getAI().notifyEvent(CtrlEvent.EVT_THINK);
}
}

View File

@@ -24,7 +24,6 @@ import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.stat.CharStat;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.TraitType;
@@ -51,9 +50,9 @@ public final class AttackTrait extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
final CharStat charStat = info.getEffected().getStat();
final CharStat charStat = effected.getStat();
synchronized (charStat.getAttackTraits())
{
for (Entry<TraitType, Float> trait : _attackTraits.entrySet())

View File

@@ -21,7 +21,6 @@ import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.EffectFlag;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
@@ -35,9 +34,9 @@ public final class Betray extends AbstractEffect
}
@Override
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
return info.getEffector().isPlayer() && info.getEffected().isSummon();
return effector.isPlayer() && effected.isSummon();
}
@Override
@@ -53,8 +52,8 @@ public final class Betray extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
effected.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
}
}

View File

@@ -23,7 +23,6 @@ import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.network.serverpackets.FlyToLocation;
import com.l2jmobius.gameserver.network.serverpackets.FlyToLocation.FlyType;
@@ -70,10 +69,10 @@ public final class Blink extends AbstractEffect
}
@Override
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
// While affected by escape blocking effect you cannot use Blink or Scroll of Escape
return !info.getEffected().cannotEscape();
return !effected.cannotEscape();
}
@Override

View File

@@ -24,7 +24,6 @@ import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.AbnormalType;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
@@ -47,8 +46,8 @@ public final class BlockAbnormalSlot extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().getEffectList().removeBlockedAbnormalTypes(_blockAbnormalSlots);
effected.getEffectList().removeBlockedAbnormalTypes(_blockAbnormalSlots);
}
}

View File

@@ -27,7 +27,6 @@ import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.punishment.PunishmentAffect;
import com.l2jmobius.gameserver.model.punishment.PunishmentTask;
import com.l2jmobius.gameserver.model.punishment.PunishmentType;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
@@ -48,9 +47,9 @@ public final class BlockAction extends AbstractEffect
}
@Override
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
return (info.getEffected() != null) && info.getEffected().isPlayer();
return (effected != null) && effected.isPlayer();
}
@Override
@@ -74,15 +73,15 @@ public final class BlockAction extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
if (_blockedActions.contains(BotReportTable.PARTY_ACTION_BLOCK_ID))
{
PunishmentManager.getInstance().stopPunishment(info.getEffected().getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.PARTY_BAN);
PunishmentManager.getInstance().stopPunishment(effected.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.PARTY_BAN);
}
if (_blockedActions.contains(BotReportTable.CHAT_BLOCK_ID))
{
PunishmentManager.getInstance().stopPunishment(info.getEffected().getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN);
PunishmentManager.getInstance().stopPunishment(effected.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN);
}
}
}

View File

@@ -26,7 +26,6 @@ import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.EffectFlag;
import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
@@ -63,9 +62,8 @@ public final class BlockActions extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
final L2Character effected = info.getEffected();
_allowedSkills.stream().forEach(effected::removeBlockActionsAllowedSkill);
if (!effected.isPlayer())
{

View File

@@ -24,7 +24,6 @@ import com.l2jmobius.gameserver.model.effects.EffectFlag;
import com.l2jmobius.gameserver.model.punishment.PunishmentAffect;
import com.l2jmobius.gameserver.model.punishment.PunishmentTask;
import com.l2jmobius.gameserver.model.punishment.PunishmentType;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
@@ -38,9 +37,9 @@ public final class BlockChat extends AbstractEffect
}
@Override
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
return (info.getEffected() != null) && info.getEffected().isPlayer();
return (effected != null) && effected.isPlayer();
}
@Override
@@ -56,8 +55,8 @@ public final class BlockChat extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
PunishmentManager.getInstance().stopPunishment(info.getEffected().getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN);
PunishmentManager.getInstance().stopPunishment(effected.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.CHAT_BAN);
}
}

View File

@@ -19,7 +19,6 @@ package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
@@ -39,8 +38,8 @@ public final class BlockMove extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().setIsImmobilized(false);
effected.setIsImmobilized(false);
}
}

View File

@@ -23,7 +23,6 @@ import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.punishment.PunishmentAffect;
import com.l2jmobius.gameserver.model.punishment.PunishmentTask;
import com.l2jmobius.gameserver.model.punishment.PunishmentType;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
@@ -37,9 +36,9 @@ public final class BlockParty extends AbstractEffect
}
@Override
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
return (info.getEffected() != null) && info.getEffected().isPlayer();
return (effected != null) && effected.isPlayer();
}
@Override
@@ -49,8 +48,8 @@ public final class BlockParty extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
PunishmentManager.getInstance().stopPunishment(info.getEffected().getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.PARTY_BAN);
PunishmentManager.getInstance().stopPunishment(effected.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.PARTY_BAN);
}
}

View File

@@ -18,12 +18,13 @@ package handlers.effecthandlers;
import com.l2jmobius.commons.util.CommonUtil;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.events.EventType;
import com.l2jmobius.gameserver.model.events.impl.character.OnCreatureSkillUse;
import com.l2jmobius.gameserver.model.events.listeners.FunctionEventListener;
import com.l2jmobius.gameserver.model.events.returns.TerminateReturn;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
* Block Skills by isMagic type.
@@ -49,20 +50,20 @@ public final class BlockSkill extends AbstractEffect
}
@Override
public void onStart(BuffInfo info)
public void onStart(L2Character effector, L2Character effected, Skill skill)
{
if ((_magicTypes == null) || (_magicTypes.length == 0))
{
return;
}
info.getEffected().addListener(new FunctionEventListener(info.getEffected(), EventType.ON_CREATURE_SKILL_USE, (OnCreatureSkillUse event) -> onSkillUseEvent(event), this));
effected.addListener(new FunctionEventListener(effected, EventType.ON_CREATURE_SKILL_USE, (OnCreatureSkillUse event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().removeListenerIf(EventType.ON_CREATURE_SKILL_USE, listener -> listener.getOwner() == this);
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_USE, listener -> listener.getOwner() == this);
}
}

View File

@@ -20,7 +20,6 @@ import com.l2jmobius.gameserver.model.L2World;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
@@ -46,8 +45,8 @@ public class BlockTarget extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().setTargetable(true);
effected.setTargetable(true);
}
}

View File

@@ -22,7 +22,6 @@ import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.holders.SkillHolder;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.skills.SkillCaster;
@@ -40,40 +39,35 @@ public final class CallSkillOnActionTime extends AbstractEffect
}
@Override
public boolean onActionTime(BuffInfo info)
public boolean onActionTime(L2Character effector, L2Character effected, Skill skill)
{
return castSkill(info);
}
private boolean castSkill(BuffInfo info)
{
if (info.getEffector().isDead())
if (effector.isDead())
{
return false;
}
final Skill skill = _skill.getSkill();
if (skill != null)
final Skill triggerSkill = _skill.getSkill();
if (triggerSkill != null)
{
if (skill.isSynergySkill())
if (triggerSkill.isSynergySkill())
{
skill.applyEffects(info.getEffector(), info.getEffector());
triggerSkill.applyEffects(effector, effector);
}
L2World.getInstance().forEachVisibleObjectInRange(info.getEffector(), L2Character.class, _skill.getSkill().getAffectRange(), c ->
L2World.getInstance().forEachVisibleObjectInRange(effector, L2Character.class, _skill.getSkill().getAffectRange(), c ->
{
final L2Object target = skill.getTarget(info.getEffector(), c, false, false, false);
final L2Object target = triggerSkill.getTarget(effector, c, false, false, false);
if ((target != null) && target.isCharacter())
{
SkillCaster.triggerCast(info.getEffector(), (L2Character) target, skill);
SkillCaster.triggerCast(effector, (L2Character) target, triggerSkill);
}
});
}
else
{
_log.warning("Skill not found effect called from " + info.getSkill());
_log.warning("Skill not found effect called from " + skill);
}
return info.getSkill().isToggle();
return skill.isToggle();
}
}

View File

@@ -22,7 +22,6 @@ import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.EffectFlag;
import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.network.SystemMessageId;
@@ -52,30 +51,30 @@ public final class ChameleonRest extends AbstractEffect
}
@Override
public boolean onActionTime(BuffInfo info)
public boolean onActionTime(L2Character effector, L2Character effected, Skill skill)
{
if (info.getEffected().isDead())
if (effected.isDead())
{
return false;
}
if (info.getEffected().isPlayer())
if (effected.isPlayer())
{
if (!info.getEffected().getActingPlayer().isSitting())
if (!effected.getActingPlayer().isSitting())
{
return false;
}
}
final double manaDam = _power * getTicksMultiplier();
if (manaDam > info.getEffected().getCurrentMp())
if (manaDam > effected.getCurrentMp())
{
info.getEffected().sendPacket(SystemMessageId.YOUR_SKILL_WAS_DEACTIVATED_DUE_TO_LACK_OF_MP);
effected.sendPacket(SystemMessageId.YOUR_SKILL_WAS_DEACTIVATED_DUE_TO_LACK_OF_MP);
return false;
}
info.getEffected().reduceCurrentMp(manaDam);
return info.getSkill().isToggle();
effected.reduceCurrentMp(manaDam);
return skill.isToggle();
}
@Override

View File

@@ -24,7 +24,6 @@ import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.holders.TemplateChanceHolder;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
@@ -44,9 +43,9 @@ public final class ChangeBody extends AbstractEffect
}
@Override
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
return !info.getEffected().isDoor();
return !effected.isDoor();
}
@Override
@@ -63,8 +62,8 @@ public final class ChangeBody extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().stopTransformation(false);
effected.stopTransformation(false);
}
}

View File

@@ -17,8 +17,9 @@
package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
* Cp Heal Over Time effect implementation.
@@ -34,15 +35,15 @@ public final class CpHealOverTime extends AbstractEffect
}
@Override
public boolean onActionTime(BuffInfo info)
public boolean onActionTime(L2Character effector, L2Character effected, Skill skill)
{
if (info.getEffected().isDead())
if (effected.isDead())
{
return false;
}
double cp = info.getEffected().getCurrentCp();
final double maxcp = info.getEffected().getMaxRecoverableCp();
double cp = effected.getCurrentCp();
final double maxcp = effected.getMaxRecoverableCp();
// Not needed to set the CP and send update packet if player is already at max CP
if (cp >= maxcp)
@@ -52,8 +53,8 @@ public final class CpHealOverTime extends AbstractEffect
cp += _power * getTicksMultiplier();
cp = Math.min(cp, maxcp);
info.getEffected().setCurrentCp(cp, false);
info.getEffected().broadcastStatusUpdate(info.getEffector());
effected.setCurrentCp(cp, false);
effected.broadcastStatusUpdate(effector);
return true;
}
}

View File

@@ -19,8 +19,9 @@ package handlers.effecthandlers;
import com.l2jmobius.commons.util.MathUtil;
import com.l2jmobius.gameserver.enums.Position;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Stats;
/**
@@ -38,14 +39,14 @@ public class CriticalDamagePosition extends AbstractEffect
}
@Override
public void onStart(BuffInfo info)
public void onStart(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().getStat().mergePositionTypeValue(Stats.CRITICAL_DAMAGE, _position, (_amount / 100) + 1, MathUtil::mul);
effected.getStat().mergePositionTypeValue(Stats.CRITICAL_DAMAGE, _position, (_amount / 100) + 1, MathUtil::mul);
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().getStat().mergePositionTypeValue(Stats.CRITICAL_DAMAGE, _position, (_amount / 100) + 1, MathUtil::div);
effected.getStat().mergePositionTypeValue(Stats.CRITICAL_DAMAGE, _position, (_amount / 100) + 1, MathUtil::div);
}
}

View File

@@ -19,8 +19,9 @@ package handlers.effecthandlers;
import com.l2jmobius.commons.util.MathUtil;
import com.l2jmobius.gameserver.enums.Position;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Stats;
/**
@@ -38,14 +39,14 @@ public class CriticalRatePositionBonus extends AbstractEffect
}
@Override
public void onStart(BuffInfo info)
public void onStart(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().getStat().mergePositionTypeValue(Stats.CRITICAL_RATE, _position, (_amount / 100) + 1, MathUtil::mul);
effected.getStat().mergePositionTypeValue(Stats.CRITICAL_RATE, _position, (_amount / 100) + 1, MathUtil::mul);
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().getStat().mergePositionTypeValue(Stats.CRITICAL_RATE, _position, (-_amount / 100) - 1, MathUtil::div);
effected.getStat().mergePositionTypeValue(Stats.CRITICAL_RATE, _position, (-_amount / 100) - 1, MathUtil::div);
}
}

View File

@@ -20,7 +20,6 @@ import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
@@ -37,9 +36,9 @@ public final class CrystalGradeModify extends AbstractEffect
}
@Override
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
return info.getEffected().isPlayer();
return effected.isPlayer();
}
@Override
@@ -49,9 +48,9 @@ public final class CrystalGradeModify extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
final L2PcInstance player = info.getEffected().getActingPlayer();
final L2PcInstance player = effected.getActingPlayer();
if (player != null)
{
player.setExpertisePenaltyBonus(0);

View File

@@ -17,9 +17,10 @@
package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.network.SystemMessageId;
@@ -39,22 +40,22 @@ public final class DamOverTime extends AbstractEffect
}
@Override
public void onStart(BuffInfo info)
public void onStart(L2Character effector, L2Character effected, Skill skill)
{
if (!info.getSkill().isToggle() && info.getSkill().isMagic())
if (!skill.isToggle() && skill.isMagic())
{
// TODO: M.Crit can occur even if this skill is resisted. Only then m.crit damage is applied and not debuff
final boolean mcrit = Formulas.calcCrit(info.getSkill().getMagicCriticalRate(), info.getEffector(), info.getEffected(), info.getSkill());
final boolean mcrit = Formulas.calcCrit(skill.getMagicCriticalRate(), effector, effected, skill);
if (mcrit)
{
double damage = _power * 10; // Tests show that 10 times HP DOT is taken during magic critical.
if (!_canKill && (damage >= (info.getEffected().getCurrentHp() - 1)))
if (!_canKill && (damage >= (effected.getCurrentHp() - 1)))
{
damage = info.getEffected().getCurrentHp() - 1;
damage = effected.getCurrentHp() - 1;
}
info.getEffected().reduceCurrentHp(damage, info.getEffector(), info.getSkill(), true, false, true, false);
effected.reduceCurrentHp(damage, effector, skill, true, false, true, false);
}
}
}
@@ -66,19 +67,19 @@ public final class DamOverTime extends AbstractEffect
}
@Override
public boolean onActionTime(BuffInfo info)
public boolean onActionTime(L2Character effector, L2Character effected, Skill skill)
{
if (info.getEffected().isDead())
if (effected.isDead())
{
return false;
}
double damage = _power * getTicksMultiplier();
if (damage >= (info.getEffected().getCurrentHp() - 1))
if (damage >= (effected.getCurrentHp() - 1))
{
if (info.getSkill().isToggle())
if (skill.isToggle())
{
info.getEffected().sendPacket(SystemMessageId.YOUR_SKILL_HAS_BEEN_CANCELED_DUE_TO_LACK_OF_HP);
effected.sendPacket(SystemMessageId.YOUR_SKILL_HAS_BEEN_CANCELED_DUE_TO_LACK_OF_HP);
return false;
}
@@ -86,15 +87,15 @@ public final class DamOverTime extends AbstractEffect
if (!_canKill)
{
// Fix for players dying by DOTs if HP < 1 since reduceCurrentHP method will kill them
if (info.getEffected().getCurrentHp() <= 1)
if (effected.getCurrentHp() <= 1)
{
return info.getSkill().isToggle();
return skill.isToggle();
}
damage = info.getEffected().getCurrentHp() - 1;
damage = effected.getCurrentHp() - 1;
}
}
info.getEffector().doAttack(damage, info.getEffected(), info.getSkill(), true, false, false, false);
return info.getSkill().isToggle();
effector.doAttack(damage, effected, skill, true, false, false, false);
return skill.isToggle();
}
}

View File

@@ -17,9 +17,10 @@
package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.network.SystemMessageId;
/**
@@ -45,19 +46,19 @@ public final class DamOverTimePercent extends AbstractEffect
}
@Override
public boolean onActionTime(BuffInfo info)
public boolean onActionTime(L2Character effector, L2Character effected, Skill skill)
{
if (info.getEffected().isDead())
if (effected.isDead())
{
return false;
}
double damage = info.getEffected().getCurrentHp() * _power * getTicksMultiplier();
if (damage >= (info.getEffected().getCurrentHp() - 1))
double damage = effected.getCurrentHp() * _power * getTicksMultiplier();
if (damage >= (effected.getCurrentHp() - 1))
{
if (info.getSkill().isToggle())
if (skill.isToggle())
{
info.getEffected().sendPacket(SystemMessageId.YOUR_SKILL_HAS_BEEN_CANCELED_DUE_TO_LACK_OF_HP);
effected.sendPacket(SystemMessageId.YOUR_SKILL_HAS_BEEN_CANCELED_DUE_TO_LACK_OF_HP);
return false;
}
@@ -65,17 +66,17 @@ public final class DamOverTimePercent extends AbstractEffect
if (!_canKill)
{
// Fix for players dying by DOTs if HP < 1 since reduceCurrentHP method will kill them
if (info.getEffected().getCurrentHp() <= 1)
if (effected.getCurrentHp() <= 1)
{
return info.getSkill().isToggle();
return skill.isToggle();
}
damage = info.getEffected().getCurrentHp() - 1;
damage = effected.getCurrentHp() - 1;
}
}
info.getEffector().doAttack(damage, info.getEffected(), info.getSkill(), true, false, false, false);
effector.doAttack(damage, effected, skill, true, false, false, false);
return info.getSkill().isToggle();
return skill.isToggle();
}
}

View File

@@ -21,9 +21,10 @@ import java.util.Map;
import java.util.Map.Entry;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.stat.CharStat;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.TraitType;
/**
@@ -66,9 +67,9 @@ public final class DefenceTrait extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
final CharStat charStat = info.getEffected().getStat();
final CharStat charStat = effected.getStat();
synchronized (charStat.getDefenceTraits())
{
for (Entry<TraitType, Float> trait : _defenceTraits.entrySet())
@@ -87,9 +88,9 @@ public final class DefenceTrait extends AbstractEffect
}
@Override
public void onStart(BuffInfo info)
public void onStart(L2Character effector, L2Character effected, Skill skill)
{
final CharStat charStat = info.getEffected().getStat();
final CharStat charStat = effected.getStat();
synchronized (charStat.getDefenceTraits())
{
for (Entry<TraitType, Float> trait : _defenceTraits.entrySet())

View File

@@ -22,7 +22,6 @@ import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.EffectFlag;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
@@ -36,9 +35,9 @@ public final class Disarm extends AbstractEffect
}
@Override
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
return info.getEffected().isPlayer();
return effected.isPlayer();
}
@Override

View File

@@ -26,7 +26,6 @@ import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.items.L2Item;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
@@ -54,9 +53,9 @@ public final class Disarmor extends AbstractEffect
}
@Override
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
return (_slot != L2Item.SLOT_NONE) && info.getEffected().isPlayer();
return (_slot != L2Item.SLOT_NONE) && effected.isPlayer();
}
@Override
@@ -98,18 +97,18 @@ public final class Disarmor extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
if (!info.getEffected().isPlayer())
if (!effected.isPlayer())
{
return;
}
final Integer disarmedObjId = _unequippedItems.remove(info.getEffected().getObjectId());
final Integer disarmedObjId = _unequippedItems.remove(effected.getObjectId());
if ((disarmedObjId != null) && (disarmedObjId > 0))
{
final L2PcInstance player = info.getEffected().getActingPlayer();
info.getEffected().getInventory().unblockItemSlot(_slot);
final L2PcInstance player = effected.getActingPlayer();
player.getInventory().unblockItemSlot(_slot);
final L2ItemInstance item = player.getInventory().getItemByObjectId(disarmedObjId);
if (item != null)
@@ -137,6 +136,6 @@ public final class Disarmor extends AbstractEffect
}
}
}
super.onExit(info);
super.onExit(effector, effected, skill);
}
}

View File

@@ -22,10 +22,10 @@ import java.util.List;
import java.util.Map;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.EffectFlag;
import com.l2jmobius.gameserver.model.holders.SkillHolder;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
@@ -56,34 +56,34 @@ public final class DoubleCast extends AbstractEffect
}
@Override
public void onStart(BuffInfo info)
public void onStart(L2Character effector, L2Character effected, Skill skill)
{
if (info.getEffected().isPlayer())
if (effected.isPlayer())
{
for (SkillHolder holder : TOGGLE_SKILLS)
{
final Skill skill = holder.getSkill();
if ((skill != null) && !info.getEffected().isAffectedBySkill(holder))
final Skill s = holder.getSkill();
if ((s != null) && !effected.isAffectedBySkill(holder))
{
_addedToggles.computeIfAbsent(info.getEffected().getObjectId(), v -> new ArrayList<>()).add(holder);
skill.applyEffects(info.getEffected(), info.getEffected());
_addedToggles.computeIfAbsent(effected.getObjectId(), v -> new ArrayList<>()).add(holder);
s.applyEffects(effected, effected);
}
}
}
super.onStart(info);
super.onStart(effector, effected, skill);
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
if (info.getEffected().isPlayer())
if (effected.isPlayer())
{
_addedToggles.computeIfPresent(info.getEffected().getObjectId(), (k, v) ->
_addedToggles.computeIfPresent(effected.getObjectId(), (k, v) ->
{
v.forEach(h -> info.getEffected().stopSkillEffects(h.getSkill()));
v.forEach(h -> effected.stopSkillEffects(h.getSkill()));
return null;
});
}
super.onExit(info);
super.onExit(effector, effected, skill);
}
}

View File

@@ -19,7 +19,6 @@ package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
@@ -33,9 +32,9 @@ public final class EnableCloak extends AbstractEffect
}
@Override
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
return (info.getEffector() != null) && (info.getEffected() != null) && info.getEffected().isPlayer();
return (effector != null) && (effected != null) && effected.isPlayer();
}
@Override
@@ -45,8 +44,8 @@ public final class EnableCloak extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().getActingPlayer().getStat().setCloakSlotStatus(false);
effected.getActingPlayer().getStat().setCloakSlotStatus(false);
}
}

View File

@@ -19,7 +19,6 @@ package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
@@ -36,9 +35,9 @@ public final class EnlargeAbnormalSlot extends AbstractEffect
}
@Override
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
return (info.getEffector() != null) && (info.getEffected() != null) && info.getEffected().isPlayer();
return (effector != null) && (effected != null) && effected.isPlayer();
}
@Override
@@ -48,8 +47,8 @@ public final class EnlargeAbnormalSlot extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().getStat().setMaxBuffCount(Math.max(0, info.getEffected().getStat().getMaxBuffCount() - _slots));
effected.getStat().setMaxBuffCount(Math.max(0, effected.getStat().getMaxBuffCount() - _slots));
}
}

View File

@@ -22,7 +22,6 @@ import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
@@ -51,10 +50,10 @@ public final class Escape extends AbstractEffect
}
@Override
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
// While affected by escape blocking effect you cannot use Blink or Scroll of Escape
return super.canStart(info) && !info.getEffected().cannotEscape();
return super.canStart(effector, effected, skill) && !effected.cannotEscape();
}
@Override

View File

@@ -17,9 +17,10 @@
package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.EffectFlag;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
* @author Sdw
@@ -37,22 +38,22 @@ public class Faceoff extends AbstractEffect
}
@Override
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
return info.getEffected().isPlayer();
return effected.isPlayer();
}
@Override
public void onStart(BuffInfo info)
public void onStart(L2Character effector, L2Character effected, Skill skill)
{
info.getEffector().getActingPlayer().setAttackerObjId(info.getEffected().getObjectId());
info.getEffected().getActingPlayer().setAttackerObjId(info.getEffector().getObjectId());
effector.getActingPlayer().setAttackerObjId(effected.getObjectId());
effected.getActingPlayer().setAttackerObjId(effector.getObjectId());
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffector().getActingPlayer().setAttackerObjId(0);
info.getEffected().getActingPlayer().setAttackerObjId(0);
effector.getActingPlayer().setAttackerObjId(0);
effected.getActingPlayer().setAttackerObjId(0);
}
}

View File

@@ -17,9 +17,10 @@
package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.EffectFlag;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.network.serverpackets.ChangeWaitType;
import com.l2jmobius.gameserver.network.serverpackets.Revive;
@@ -45,43 +46,43 @@ public final class FakeDeath extends AbstractEffect
}
@Override
public boolean onActionTime(BuffInfo info)
public boolean onActionTime(L2Character effector, L2Character effected, Skill skill)
{
if (info.getEffected().isDead())
if (effected.isDead())
{
return false;
}
final double manaDam = _power * getTicksMultiplier();
if (manaDam > info.getEffected().getCurrentMp())
if (manaDam > effected.getCurrentMp())
{
if (info.getSkill().isToggle())
if (skill.isToggle())
{
info.getEffected().sendPacket(SystemMessageId.YOUR_SKILL_WAS_DEACTIVATED_DUE_TO_LACK_OF_MP);
effected.sendPacket(SystemMessageId.YOUR_SKILL_WAS_DEACTIVATED_DUE_TO_LACK_OF_MP);
return false;
}
}
info.getEffected().reduceCurrentMp(manaDam);
effected.reduceCurrentMp(manaDam);
return info.getSkill().isToggle();
return skill.isToggle();
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
if (info.getEffected().isPlayer())
if (effected.isPlayer())
{
info.getEffected().getActingPlayer().setRecentFakeDeath(true);
effected.getActingPlayer().setRecentFakeDeath(true);
}
info.getEffected().broadcastPacket(new ChangeWaitType(info.getEffected(), ChangeWaitType.WT_STOP_FAKEDEATH));
info.getEffected().broadcastPacket(new Revive(info.getEffected()));
effected.broadcastPacket(new ChangeWaitType(effected, ChangeWaitType.WT_STOP_FAKEDEATH));
effected.broadcastPacket(new Revive(effected));
}
@Override
public void onStart(BuffInfo info)
public void onStart(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().startFakeDeath();
effected.startFakeDeath();
}
}

View File

@@ -27,7 +27,6 @@ import com.l2jmobius.gameserver.model.actor.instance.L2DefenderInstance;
import com.l2jmobius.gameserver.model.actor.instance.L2FortCommanderInstance;
import com.l2jmobius.gameserver.model.actor.instance.L2SiegeFlagInstance;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.util.Util;
@@ -45,9 +44,9 @@ public final class Fear extends AbstractEffect
}
@Override
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
final L2Character creature = info.getEffected();
final L2Character creature = effected;
return creature.isPlayer() || creature.isSummon() || (creature.isAttackable() && //
!((creature instanceof L2DefenderInstance) || (creature instanceof L2FortCommanderInstance) || //
(creature instanceof L2SiegeFlagInstance) || (creature.getTemplate().getRace() == Race.SIEGE_WEAPON)));
@@ -60,9 +59,9 @@ public final class Fear extends AbstractEffect
}
@Override
public boolean onActionTime(BuffInfo info)
public boolean onActionTime(L2Character effector, L2Character effected, Skill skill)
{
fearAction(null, info.getEffected());
fearAction(null, effected);
return false;
}
@@ -74,11 +73,11 @@ public final class Fear extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
if (!info.getEffected().isPlayer())
if (!effected.isPlayer())
{
info.getEffected().getAI().notifyEvent(CtrlEvent.EVT_THINK);
effected.getAI().notifyEvent(CtrlEvent.EVT_THINK);
}
}

View File

@@ -19,7 +19,6 @@ package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
@@ -33,9 +32,9 @@ public final class Flag extends AbstractEffect
}
@Override
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
return (info.getEffected() != null) && info.getEffected().isPlayer();
return (effected != null) && effected.isPlayer();
}
@Override
@@ -45,8 +44,8 @@ public final class Flag extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().getActingPlayer().updatePvPFlag(0);
effected.getActingPlayer().updatePvPFlag(0);
}
}

View File

@@ -17,9 +17,10 @@
package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Stats;
import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.network.serverpackets.EtcStatusUpdate;
@@ -44,11 +45,11 @@ public class GetMomentum extends AbstractEffect
}
@Override
public boolean onActionTime(BuffInfo info)
public boolean onActionTime(L2Character effector, L2Character effected, Skill skill)
{
if (info.getEffected().isPlayer())
if (effected.isPlayer())
{
final L2PcInstance player = info.getEffected().getActingPlayer();
final L2PcInstance player = effected.getActingPlayer();
final int maxCharge = (int) player.getStat().getValue(Stats.MAX_MOMENTUM, 0);
final int newCharge = Math.min(player.getCharges() + 1, maxCharge);
@@ -68,6 +69,6 @@ public class GetMomentum extends AbstractEffect
player.sendPacket(new EtcStatusUpdate(player));
}
return info.getSkill().isToggle();
return skill.isToggle();
}
}

View File

@@ -20,7 +20,6 @@ import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
@@ -44,11 +43,11 @@ public final class Grow extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
if (info.getEffected().isNpc())
if (effected.isNpc())
{
final L2Npc npc = (L2Npc) info.getEffected();
final L2Npc npc = (L2Npc) effected;
npc.setCollisionHeight(npc.getTemplate().getCollisionHeight());
npc.setCollisionRadius(npc.getTemplate().getfCollisionRadius());
}

View File

@@ -20,7 +20,6 @@ import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.AbnormalType;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.network.serverpackets.ExRegenMax;
@@ -38,15 +37,15 @@ public final class HealOverTime extends AbstractEffect
}
@Override
public boolean onActionTime(BuffInfo info)
public boolean onActionTime(L2Character effector, L2Character effected, Skill skill)
{
if (info.getEffected().isDead() || info.getEffected().isDoor())
if (effected.isDead() || effected.isDoor())
{
return false;
}
double hp = info.getEffected().getCurrentHp();
final double maxhp = info.getEffected().getMaxRecoverableHp();
double hp = effected.getCurrentHp();
final double maxhp = effected.getMaxRecoverableHp();
// Not needed to set the HP and send update packet if player is already at max HP
if (hp >= maxhp)
@@ -56,19 +55,17 @@ public final class HealOverTime extends AbstractEffect
hp += _power * getTicksMultiplier();
hp = Math.min(hp, maxhp);
info.getEffected().setCurrentHp(hp, false);
info.getEffected().broadcastStatusUpdate(info.getEffector());
return info.getSkill().isToggle();
effected.setCurrentHp(hp, false);
effected.broadcastStatusUpdate(effector);
return skill.isToggle();
}
@Override
public void onStart(BuffInfo info)
public void onStart(L2Character effector, L2Character effected, Skill skill)
{
final L2Character effected = info.getEffected();
final Skill skill = info.getSkill();
if (effected.isPlayer() && (getTicks() > 0) && (skill.getAbnormalType() == AbnormalType.HP_RECOVER))
{
effected.sendPacket(new ExRegenMax(info.getAbnormalTime(), getTicks(), _power));
effected.sendPacket(new ExRegenMax(skill.getAbnormalTime(), getTicks(), _power));
}
}
}

View File

@@ -22,7 +22,6 @@ import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
@@ -61,11 +60,11 @@ public final class Hide extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
if (info.getEffected().isPlayer())
if (effected.isPlayer())
{
final L2PcInstance activeChar = info.getEffected().getActingPlayer();
final L2PcInstance activeChar = effected.getActingPlayer();
if (!activeChar.inObserverMode())
{
activeChar.setInvisible(false);

View File

@@ -17,9 +17,10 @@
package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas;
/**
@@ -39,16 +40,16 @@ public final class HpToOwner extends AbstractEffect
}
@Override
public void onStart(BuffInfo info)
public void onStart(L2Character effector, L2Character effected, Skill skill)
{
if (!info.getSkill().isToggle() && info.getSkill().isMagic())
if (!skill.isToggle() && skill.isMagic())
{
// TODO: M.Crit can occur even if this skill is resisted. Only then m.crit damage is applied and not debuff
final boolean mcrit = Formulas.calcCrit(info.getSkill().getMagicCriticalRate(), info.getEffector(), info.getEffected(), info.getSkill());
final boolean mcrit = Formulas.calcCrit(skill.getMagicCriticalRate(), effector, effected, skill);
if (mcrit)
{
final double damage = _power * 10; // Tests show that 10 times HP DOT is taken during magic critical.
info.getEffected().reduceCurrentHp(damage, info.getEffector(), info.getSkill(), true, false, true, false);
effected.reduceCurrentHp(damage, effector, skill, true, false, true, false);
}
}
}
@@ -60,22 +61,22 @@ public final class HpToOwner extends AbstractEffect
}
@Override
public boolean onActionTime(BuffInfo info)
public boolean onActionTime(L2Character effector, L2Character effected, Skill skill)
{
if (info.getEffected().isDead())
if (effected.isDead())
{
return false;
}
final double damage = _power * getTicksMultiplier();
info.getEffector().doAttack(damage, info.getEffected(), info.getSkill(), true, false, false, false);
effector.doAttack(damage, effected, skill, true, false, false, false);
if (_stealAmount > 0)
{
final double amount = (damage * _stealAmount) / 100;
info.getEffector().setCurrentHp(info.getEffector().getCurrentHp() + amount);
info.getEffector().setCurrentMp(info.getEffector().getCurrentMp() + amount);
effector.setCurrentHp(effector.getCurrentHp() + amount);
effector.setCurrentMp(effector.getCurrentMp() + amount);
}
return info.getSkill().isToggle();
return skill.isToggle();
}
}

View File

@@ -17,9 +17,10 @@
package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.L2Summon;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
* Immobile Pet Buff effect implementation.
@@ -32,17 +33,17 @@ public final class ImmobilePetBuff extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().setIsImmobilized(false);
effected.setIsImmobilized(false);
}
@Override
public void onStart(BuffInfo info)
public void onStart(L2Character effector, L2Character effected, Skill skill)
{
if (info.getEffected().isSummon() && info.getEffector().isPlayer() && (((L2Summon) info.getEffected()).getOwner() == info.getEffector()))
if (effected.isSummon() && effector.isPlayer() && (((L2Summon) effected).getOwner() == effector))
{
info.getEffected().setIsImmobilized(true);
effected.setIsImmobilized(true);
}
}
}

View File

@@ -33,7 +33,6 @@ import com.l2jmobius.gameserver.model.base.ClassId;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.network.serverpackets.ExAlterSkillRequest;
@@ -141,11 +140,11 @@ public final class KnockBack extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
if (!info.getEffected().isPlayer())
if (!effected.isPlayer())
{
info.getEffected().getAI().notifyEvent(CtrlEvent.EVT_THINK);
effected.getAI().notifyEvent(CtrlEvent.EVT_THINK);
}
}

View File

@@ -17,8 +17,9 @@
package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
* Lucky effect implementation.
@@ -31,8 +32,8 @@ public final class Lucky extends AbstractEffect
}
@Override
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
return (info.getEffector() != null) && (info.getEffected() != null) && info.getEffected().isPlayer();
return (effector != null) && (effected != null) && effected.isPlayer();
}
}

View File

@@ -18,8 +18,9 @@ package handlers.effecthandlers;
import com.l2jmobius.commons.util.MathUtil;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
* @author Sdw
@@ -36,14 +37,14 @@ public class MagicMpCost extends AbstractEffect
}
@Override
public void onStart(BuffInfo info)
public void onStart(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().getStat().mergeMpConsumeTypeValue(_magicType, (_amount / 100) + 1, MathUtil::mul);
effected.getStat().mergeMpConsumeTypeValue(_magicType, (_amount / 100) + 1, MathUtil::mul);
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().getStat().mergeMpConsumeTypeValue(_magicType, (_amount / 100) + 1, MathUtil::div);
effected.getStat().mergeMpConsumeTypeValue(_magicType, (_amount / 100) + 1, MathUtil::div);
}
}

View File

@@ -20,7 +20,7 @@ import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.network.SystemMessageId;
@@ -47,22 +47,22 @@ public final class MagicalDamOverTime extends AbstractEffect
}
@Override
public boolean onActionTime(BuffInfo info)
public boolean onActionTime(L2Character effector, L2Character effected, Skill skill)
{
final L2Character activeChar = info.getEffector();
final L2Character target = info.getEffected();
final L2Character activeChar = effector;
final L2Character target = effected;
if (target.isDead())
{
return false;
}
double damage = Formulas.calcMagicDam(activeChar, target, info.getSkill(), activeChar.getMAtk(), _power, target.getMDef(), false, false, false); // In retail spiritshots change nothing.
double damage = Formulas.calcMagicDam(activeChar, target, skill, activeChar.getMAtk(), _power, target.getMDef(), false, false, false); // In retail spiritshots change nothing.
damage *= getTicksMultiplier();
if (damage >= (target.getCurrentHp() - 1))
{
if (info.getSkill().isToggle())
if (skill.isToggle())
{
target.sendPacket(SystemMessageId.YOUR_SKILL_HAS_BEEN_CANCELED_DUE_TO_LACK_OF_HP);
return false;
@@ -74,13 +74,13 @@ public final class MagicalDamOverTime extends AbstractEffect
// Fix for players dying by DOTs if HP < 1 since reduceCurrentHP method will kill them
if (target.getCurrentHp() <= 1)
{
return info.getSkill().isToggle();
return skill.isToggle();
}
damage = target.getCurrentHp() - 1;
}
}
info.getEffector().doAttack(damage, info.getEffected(), info.getSkill(), true, false, false, false);
return info.getSkill().isToggle();
effector.doAttack(damage, effected, skill, true, false, false, false);
return skill.isToggle();
}
}

View File

@@ -17,8 +17,9 @@
package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.network.SystemMessageId;
/**
@@ -35,21 +36,21 @@ public final class ManaDamOverTime extends AbstractEffect
}
@Override
public boolean onActionTime(BuffInfo info)
public boolean onActionTime(L2Character effector, L2Character effected, Skill skill)
{
if (info.getEffected().isDead())
if (effected.isDead())
{
return false;
}
final double manaDam = _power * getTicksMultiplier();
if ((manaDam > info.getEffected().getCurrentMp()) && info.getSkill().isToggle())
if ((manaDam > effected.getCurrentMp()) && skill.isToggle())
{
info.getEffected().sendPacket(SystemMessageId.YOUR_SKILL_WAS_DEACTIVATED_DUE_TO_LACK_OF_MP);
effected.sendPacket(SystemMessageId.YOUR_SKILL_WAS_DEACTIVATED_DUE_TO_LACK_OF_MP);
return false;
}
info.getEffected().reduceCurrentMp(manaDam);
return info.getSkill().isToggle();
effected.reduceCurrentMp(manaDam);
return skill.isToggle();
}
}

View File

@@ -17,8 +17,9 @@
package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
* Mana Heal Over Time effect implementation.
@@ -34,15 +35,15 @@ public final class ManaHealOverTime extends AbstractEffect
}
@Override
public boolean onActionTime(BuffInfo info)
public boolean onActionTime(L2Character effector, L2Character effected, Skill skill)
{
if (info.getEffected().isDead())
if (effected.isDead())
{
return false;
}
double mp = info.getEffected().getCurrentMp();
final double maxmp = info.getEffected().getMaxRecoverableMp();
double mp = effected.getCurrentMp();
final double maxmp = effected.getMaxRecoverableMp();
// Not needed to set the MP and send update packet if player is already at max MP
if (mp >= maxmp)
@@ -52,8 +53,8 @@ public final class ManaHealOverTime extends AbstractEffect
mp += _power * getTicksMultiplier();
mp = Math.min(mp, maxmp);
info.getEffected().setCurrentMp(mp, false);
info.getEffected().broadcastStatusUpdate(info.getEffector());
return info.getSkill().isToggle();
effected.setCurrentMp(mp, false);
effected.broadcastStatusUpdate(effector);
return skill.isToggle();
}
}

View File

@@ -17,8 +17,9 @@
package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.network.SystemMessageId;
/**
@@ -35,22 +36,22 @@ public final class MpConsumePerLevel extends AbstractEffect
}
@Override
public boolean onActionTime(BuffInfo info)
public boolean onActionTime(L2Character effector, L2Character effected, Skill skill)
{
if (info.getEffected().isDead())
if (effected.isDead())
{
return false;
}
final double base = _power * getTicksMultiplier();
final double consume = (info.getAbnormalTime() > 0) ? ((info.getEffected().getLevel() - 1) / 7.5) * base * info.getAbnormalTime() : base;
if (consume > info.getEffected().getCurrentMp())
final double consume = (skill.getAbnormalTime() > 0) ? ((effected.getLevel() - 1) / 7.5) * base * skill.getAbnormalTime() : base;
if (consume > effected.getCurrentMp())
{
info.getEffected().sendPacket(SystemMessageId.YOUR_SKILL_WAS_DEACTIVATED_DUE_TO_LACK_OF_MP);
effected.sendPacket(SystemMessageId.YOUR_SKILL_WAS_DEACTIVATED_DUE_TO_LACK_OF_MP);
return false;
}
info.getEffected().reduceCurrentMp(consume);
return info.getSkill().isToggle();
effected.reduceCurrentMp(consume);
return skill.isToggle();
}
}

View File

@@ -17,10 +17,11 @@
package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.EffectFlag;
import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
* Noblesse Blessing effect implementation.
@@ -33,9 +34,9 @@ public final class NoblesseBless extends AbstractEffect
}
@Override
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
return (info.getEffector() != null) && (info.getEffected() != null) && info.getEffected().isPlayable();
return (effector != null) && (effected != null) && effected.isPlayable();
}
@Override

View File

@@ -19,7 +19,6 @@ package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
@@ -33,9 +32,9 @@ public final class Passive extends AbstractEffect
}
@Override
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
return info.getEffected().isAttackable();
return effected.isAttackable();
}
@Override
@@ -48,9 +47,9 @@ public final class Passive extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().enableAllSkills();
info.getEffected().setIsImmobilized(false);
effected.enableAllSkills();
effected.setIsImmobilized(false);
}
}

View File

@@ -19,7 +19,6 @@ package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Stats;
@@ -42,11 +41,11 @@ public class PolearmSingleTarget extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
if (info.getEffected().isPlayer())
if (effected.isPlayer())
{
info.getEffected().getStat().removeFixedValue(Stats.PHYSICAL_POLEARM_TARGET_SINGLE);
effected.getStat().removeFixedValue(Stats.PHYSICAL_POLEARM_TARGET_SINGLE);
}
}
}

View File

@@ -17,9 +17,10 @@
package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.EffectFlag;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
* Protection Blessing effect implementation.
@@ -32,9 +33,9 @@ public final class ProtectionBlessing extends AbstractEffect
}
@Override
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
return (info.getEffector() != null) && (info.getEffected() != null) && info.getEffected().isPlayer();
return (effector != null) && (effected != null) && effected.isPlayer();
}
@Override

View File

@@ -17,9 +17,11 @@
package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.stat.PcStat;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.zone.ZoneId;
/**
@@ -44,41 +46,44 @@ public final class RecoverVitalityInPeaceZone extends AbstractEffect
}
@Override
public boolean onActionTime(BuffInfo info)
public boolean onActionTime(L2Character effector, L2Character effected, Skill skill)
{
if ((info.getEffected() == null) //
|| info.getEffected().isDead() //
|| !info.getEffected().isPlayer() //
|| !info.getEffected().isInsideZone(ZoneId.PEACE))
if ((effected == null) //
|| effected.isDead() //
|| !effected.isPlayer() //
|| !effected.isInsideZone(ZoneId.PEACE))
{
return false;
}
long vitality = info.getEffected().getActingPlayer().getVitalityPoints();
long vitality = effected.getActingPlayer().getVitalityPoints();
vitality += _amount;
if (vitality >= PcStat.MAX_VITALITY_POINTS)
{
vitality = PcStat.MAX_VITALITY_POINTS;
}
info.getEffected().getActingPlayer().setVitalityPoints((int) vitality, true);
effected.getActingPlayer().setVitalityPoints((int) vitality, true);
return info.getSkill().isToggle();
return skill.isToggle();
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
if ((info.getEffected() != null) //
&& info.getEffected().isPlayer() //
&& !info.isRemoved())
if ((effected != null) //
&& effected.isPlayer())
{
long vitality = info.getEffected().getActingPlayer().getVitalityPoints();
vitality += _amount * 100;
if (vitality >= PcStat.MAX_VITALITY_POINTS)
final BuffInfo info = effected.getEffectList().getBuffInfoBySkillId(skill.getId());
if ((info != null) && !info.isRemoved())
{
vitality = PcStat.MAX_VITALITY_POINTS;
long vitality = effected.getActingPlayer().getVitalityPoints();
vitality += _amount * 100;
if (vitality >= PcStat.MAX_VITALITY_POINTS)
{
vitality = PcStat.MAX_VITALITY_POINTS;
}
effected.getActingPlayer().setVitalityPoints((int) vitality, true);
}
info.getEffected().getActingPlayer().setVitalityPoints((int) vitality, true);
}
}
}

View File

@@ -17,12 +17,13 @@
package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.events.EventType;
import com.l2jmobius.gameserver.model.events.impl.character.OnCreatureDamageReceived;
import com.l2jmobius.gameserver.model.events.listeners.FunctionEventListener;
import com.l2jmobius.gameserver.model.events.returns.DamageReturn;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
* @author Sdw
@@ -50,14 +51,14 @@ public class ReduceDamage extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().removeListenerIf(EventType.ON_CREATURE_DAMAGE_RECEIVED, listener -> listener.getOwner() == this);
effected.removeListenerIf(EventType.ON_CREATURE_DAMAGE_RECEIVED, listener -> listener.getOwner() == this);
}
@Override
public void onStart(BuffInfo info)
public void onStart(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().addListener(new FunctionEventListener(info.getEffected(), EventType.ON_CREATURE_DAMAGE_RECEIVED, (OnCreatureDamageReceived event) -> onDamageReceivedEvent(event), this));
effected.addListener(new FunctionEventListener(effected, EventType.ON_CREATURE_DAMAGE_RECEIVED, (OnCreatureDamageReceived event) -> onDamageReceivedEvent(event), this));
}
}

View File

@@ -22,7 +22,6 @@ import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.EffectFlag;
import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.network.SystemMessageId;
@@ -65,42 +64,42 @@ public final class Relax extends AbstractEffect
}
@Override
public boolean onActionTime(BuffInfo info)
public boolean onActionTime(L2Character effector, L2Character effected, Skill skill)
{
if (info.getEffected().isDead())
if (effected.isDead())
{
return false;
}
if (info.getEffected().isPlayer())
if (effected.isPlayer())
{
if (!info.getEffected().getActingPlayer().isSitting())
if (!effected.getActingPlayer().isSitting())
{
return false;
}
}
if ((info.getEffected().getCurrentHp() + 1) > info.getEffected().getMaxRecoverableHp())
if ((effected.getCurrentHp() + 1) > effected.getMaxRecoverableHp())
{
if (info.getSkill().isToggle())
if (skill.isToggle())
{
info.getEffected().sendPacket(SystemMessageId.THAT_SKILL_HAS_BEEN_DE_ACTIVATED_AS_HP_WAS_FULLY_RECOVERED);
effected.sendPacket(SystemMessageId.THAT_SKILL_HAS_BEEN_DE_ACTIVATED_AS_HP_WAS_FULLY_RECOVERED);
return false;
}
}
final double manaDam = _power * getTicksMultiplier();
if (manaDam > info.getEffected().getCurrentMp())
if (manaDam > effected.getCurrentMp())
{
if (info.getSkill().isToggle())
if (skill.isToggle())
{
info.getEffected().sendPacket(SystemMessageId.YOUR_SKILL_WAS_DEACTIVATED_DUE_TO_LACK_OF_MP);
effected.sendPacket(SystemMessageId.YOUR_SKILL_WAS_DEACTIVATED_DUE_TO_LACK_OF_MP);
return false;
}
}
info.getEffected().reduceCurrentMp(manaDam);
effected.reduceCurrentMp(manaDam);
return info.getSkill().isToggle();
return skill.isToggle();
}
}

View File

@@ -23,7 +23,6 @@ import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.holders.SkillHolder;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
@@ -63,11 +62,11 @@ public final class ResistSkill extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
for (SkillHolder holder : _skills)
{
info.getEffected().removeIgnoreSkillEffects(holder);
effected.removeIgnoreSkillEffects(holder);
}
}
}

View File

@@ -21,13 +21,13 @@ import java.util.HashSet;
import java.util.Set;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.actor.instance.L2PetInstance;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.EffectFlag;
import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.instancezone.Instance;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
@@ -71,30 +71,28 @@ public final class ResurrectionSpecial extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
if (!info.getEffected().isPlayer() && !info.getEffected().isPet())
if (!effected.isPlayer() && !effected.isPet())
{
return;
}
final L2PcInstance caster = info.getEffector().getActingPlayer();
final L2PcInstance caster = effector.getActingPlayer();
final Instance instance = caster.getInstanceWorld();
if (!_instanceId.isEmpty() && ((instance == null) || !_instanceId.contains(instance.getTemplateId())))
{
return;
}
final Skill skill = info.getSkill();
if (info.getEffected().isPlayer())
if (effected.isPlayer())
{
info.getEffected().getActingPlayer().reviveRequest(caster, skill, false, _power);
effected.getActingPlayer().reviveRequest(caster, skill, false, _power);
}
else if (info.getEffected().isPet())
else if (effected.isPet())
{
final L2PetInstance pet = (L2PetInstance) info.getEffected();
info.getEffected().getActingPlayer().reviveRequest(pet.getActingPlayer(), skill, true, _power);
final L2PetInstance pet = (L2PetInstance) effected;
effected.getActingPlayer().reviveRequest(pet.getActingPlayer(), skill, true, _power);
}
}
}

View File

@@ -18,8 +18,9 @@ package handlers.effecthandlers;
import com.l2jmobius.commons.util.MathUtil;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
* @author Sdw
@@ -36,14 +37,14 @@ public class Reuse extends AbstractEffect
}
@Override
public void onStart(BuffInfo info)
public void onStart(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().getStat().mergeReuseTypeValue(_magicType, (_amount / 100) + 1, MathUtil::mul);
effected.getStat().mergeReuseTypeValue(_magicType, (_amount / 100) + 1, MathUtil::mul);
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().getStat().mergeReuseTypeValue(_magicType, (_amount / 100) + 1, MathUtil::div);
effected.getStat().mergeReuseTypeValue(_magicType, (_amount / 100) + 1, MathUtil::div);
}
}

View File

@@ -1,50 +0,0 @@
/*
* This file is part of the L2J Mobius project.
*
* 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 handlers.effecthandlers;
import com.l2jmobius.gameserver.ThreadPoolManager;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
/**
* Reward Item on Exit effect implementation.
* @author Mobius
*/
public final class RewardItemOnExit extends AbstractEffect
{
private final int _itemId;
private final long _itemCount;
public RewardItemOnExit(StatsSet params)
{
_itemId = params.getInt("itemId", 40313); // Default item is Santa's Mark.
_itemCount = params.getLong("itemCount", 1);
}
@Override
public void onExit(BuffInfo info)
{
if (!info.isRemoved() && (info.getEffected() != null) && info.getEffected().isPlayer() && !info.getEffected().isDead())
{
ThreadPoolManager.execute(() -> // Make sure item is saved.
{
info.getEffected().getActingPlayer().addItem("RewardItemOnExitEffect", _itemId, _itemCount, info.getEffected(), true);
});
}
}
}

View File

@@ -22,7 +22,6 @@ import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.EffectFlag;
import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
@@ -48,11 +47,11 @@ public final class Root extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
if (!info.getEffected().isPlayer())
if (!effected.isPlayer())
{
info.getEffected().getAI().notifyEvent(CtrlEvent.EVT_THINK);
effected.getAI().notifyEvent(CtrlEvent.EVT_THINK);
}
}

View File

@@ -21,7 +21,6 @@ import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.L2Summon;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.network.SystemMessageId;
@@ -35,9 +34,9 @@ public final class SacrificeSummon extends AbstractEffect
}
@Override
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
return info.getEffected().isSummon();
return effected.isSummon();
}
@Override

View File

@@ -17,8 +17,9 @@
package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
* Note: In retail this effect doesn't stack. It appears that the active value is taken from the last such effect.
@@ -36,14 +37,14 @@ public class SkillEvasion extends AbstractEffect
}
@Override
public void onStart(BuffInfo info)
public void onStart(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().getStat().addSkillEvasionTypeValue(_magicType, _amount);
effected.getStat().addSkillEvasionTypeValue(_magicType, _amount);
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().getStat().removeSkillEvasionTypeValue(_magicType, _amount);
effected.getStat().removeSkillEvasionTypeValue(_magicType, _amount);
}
}

View File

@@ -18,8 +18,9 @@ package handlers.effecthandlers;
import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas;
/**
@@ -38,19 +39,19 @@ public final class SkillTurningOverTime extends AbstractEffect
}
@Override
public boolean onActionTime(BuffInfo info)
public boolean onActionTime(L2Character effector, L2Character effected, Skill skill)
{
if ((info.getEffected() == null) || (info.getEffected() == info.getEffector()) || info.getEffected().isRaid())
if ((effected == null) || (effected == effector) || effected.isRaid())
{
return false;
}
final boolean skillSuccess = _staticChance ? Formulas.calcProbability(_chance, info.getEffector(), info.getEffected(), info.getSkill()) : ((_chance >= 100) || (Rnd.get(100) < _chance));
final boolean skillSuccess = _staticChance ? Formulas.calcProbability(_chance, effector, effected, skill) : ((_chance >= 100) || (Rnd.get(100) < _chance));
if (skillSuccess)
{
info.getEffected().breakCast();
effected.breakCast();
}
return super.onActionTime(info);
return super.onActionTime(effector, effected, skill);
}
}

View File

@@ -25,7 +25,6 @@ import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.events.EventType;
import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayableExpChanged;
import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Stats;
import com.l2jmobius.gameserver.network.SystemMessageId;
@@ -56,11 +55,11 @@ public final class SoulEating extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
if (info.getEffected().isPlayer())
if (effected.isPlayer())
{
info.getEffected().removeListenerIf(EventType.ON_PLAYABLE_EXP_CHANGED, listener -> listener.getOwner() == this);
effected.removeListenerIf(EventType.ON_PLAYABLE_EXP_CHANGED, listener -> listener.getOwner() == this);
}
}

View File

@@ -17,8 +17,9 @@
package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.MoveType;
import com.l2jmobius.gameserver.model.stats.Stats;
@@ -40,20 +41,20 @@ public class StatByMoveType extends AbstractEffect
}
@Override
public void onStart(BuffInfo info)
public void onStart(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().getStat().mergeMoveTypeValue(_stat, _type, _value);
effected.getStat().mergeMoveTypeValue(_stat, _type, _value);
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().getStat().mergeMoveTypeValue(_stat, _type, -_value);
effected.getStat().mergeMoveTypeValue(_stat, _type, -_value);
}
@Override
public boolean onActionTime(BuffInfo info)
public boolean onActionTime(L2Character effector, L2Character effected, Skill skill)
{
return info.getSkill().isPassive() || info.getSkill().isToggle();
return skill.isPassive() || skill.isToggle();
}
}

View File

@@ -26,7 +26,6 @@ import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.holders.SkillHolder;
import com.l2jmobius.gameserver.model.skills.AbnormalType;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.skills.SkillCaster;
@@ -78,22 +77,22 @@ public final class Synergy extends AbstractEffect
}
@Override
public boolean onActionTime(BuffInfo info)
public boolean onActionTime(L2Character effector, L2Character effected, Skill skill)
{
if (info.getEffector().isDead())
if (effector.isDead())
{
return false;
}
for (AbnormalType required : _requiredSlots)
{
if (!info.getEffector().hasAbnormalType(required))
if (!effector.hasAbnormalType(required))
{
return info.getSkill().isToggle();
return skill.isToggle();
}
}
final int abnormalCount = (int) _optionalSlots.stream().filter(info.getEffector()::hasAbnormalType).count();
final int abnormalCount = (int) _optionalSlots.stream().filter(effector::hasAbnormalType).count();
if (abnormalCount >= _minSlot)
{
@@ -102,19 +101,19 @@ public final class Synergy extends AbstractEffect
if (partyBuffSkill != null)
{
final L2Object target = partyBuffSkill.getTarget(info.getEffector(), info.getEffected(), false, false, false);
final L2Object target = partyBuffSkill.getTarget(effector, effected, false, false, false);
if ((target != null) && target.isCharacter())
{
SkillCaster.triggerCast(info.getEffector(), (L2Character) target, partyBuffSkill);
SkillCaster.triggerCast(effector, (L2Character) target, partyBuffSkill);
}
}
else
{
_log.warning("Skill not found effect called from " + info.getSkill());
_log.warning("Skill not found effect called from " + skill);
}
}
return info.getSkill().isToggle();
return skill.isToggle();
}
}

View File

@@ -19,7 +19,6 @@ package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
@@ -36,9 +35,9 @@ public final class TalismanSlot extends AbstractEffect
}
@Override
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
return (info.getEffector() != null) && (info.getEffected() != null) && info.getEffected().isPlayer();
return (effector != null) && (effected != null) && effected.isPlayer();
}
@Override
@@ -48,8 +47,8 @@ public final class TalismanSlot extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().getActingPlayer().getStat().addTalismanSlots(-_slots);
effected.getActingPlayer().getStat().addTalismanSlots(-_slots);
}
}

View File

@@ -17,9 +17,10 @@
package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.L2Playable;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
* Target Me effect implementation.
@@ -32,25 +33,25 @@ public final class TargetMe extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
if (info.getEffected().isPlayable())
if (effected.isPlayable())
{
((L2Playable) info.getEffected()).setLockedTarget(null);
((L2Playable) effected).setLockedTarget(null);
}
}
@Override
public void onStart(BuffInfo info)
public void onStart(L2Character effector, L2Character effected, Skill skill)
{
if (info.getEffected().isPlayable())
if (effected.isPlayable())
{
if (info.getEffected().getTarget() != info.getEffector())
if (effected.getTarget() != effector)
{
info.getEffected().setTarget(info.getEffector());
effected.setTarget(effector);
}
((L2Playable) info.getEffected()).setLockedTarget(info.getEffector());
((L2Playable) effected).setLockedTarget(effector);
}
}
}

View File

@@ -25,7 +25,6 @@ import com.l2jmobius.gameserver.model.actor.L2Summon;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.network.serverpackets.FlyToLocation;
import com.l2jmobius.gameserver.network.serverpackets.FlyToLocation.FlyType;
@@ -58,9 +57,9 @@ public final class TeleportToSummon extends AbstractEffect
}
@Override
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
return info.getEffected().hasServitors();
return effected.hasServitors();
}
@Override

View File

@@ -17,8 +17,9 @@
package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.L2Playable;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Stats;
/**
@@ -33,20 +34,20 @@ public final class TransferDamageToPlayer extends AbstractStatAddEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
if (info.getEffected().isPlayable() && info.getEffector().isPlayer())
if (effected.isPlayable() && effector.isPlayer())
{
((L2Playable) info.getEffected()).setTransferDamageTo(null);
((L2Playable) effected).setTransferDamageTo(null);
}
}
@Override
public void onStart(BuffInfo info)
public void onStart(L2Character effector, L2Character effected, Skill skill)
{
if (info.getEffected().isPlayable() && info.getEffector().isPlayer())
if (effected.isPlayable() && effector.isPlayer())
{
((L2Playable) info.getEffected()).setTransferDamageTo(info.getEffector().getActingPlayer());
((L2Playable) effected).setTransferDamageTo(effector.getActingPlayer());
}
}
}

View File

@@ -22,7 +22,6 @@ import com.l2jmobius.gameserver.model.actor.L2Attackable;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.util.Util;
@@ -47,9 +46,9 @@ public final class TransferHate extends AbstractEffect
}
@Override
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
return Util.checkIfInRange(info.getSkill().getEffectRange(), info.getEffector(), info.getEffected(), true);
return Util.checkIfInRange(skill.getEffectRange(), effector, effected, true);
}
@Override

View File

@@ -24,7 +24,6 @@ import com.l2jmobius.commons.util.Rnd;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
@@ -53,9 +52,9 @@ public final class Transformation extends AbstractEffect
}
@Override
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
return !info.getEffected().isDoor();
return !effected.isDoor();
}
@Override
@@ -68,8 +67,8 @@ public final class Transformation extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().stopTransformation(false);
effected.stopTransformation(false);
}
}

View File

@@ -160,14 +160,14 @@ public final class TriggerSkillByAttack extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().removeListenerIf(EventType.ON_CREATURE_DAMAGE_DEALT, listener -> listener.getOwner() == this);
effected.removeListenerIf(EventType.ON_CREATURE_DAMAGE_DEALT, listener -> listener.getOwner() == this);
}
@Override
public void onStart(BuffInfo info)
public void onStart(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().addListener(new ConsumerEventListener(info.getEffected(), EventType.ON_CREATURE_DAMAGE_DEALT, (OnCreatureDamageDealt event) -> onAttackEvent(event), this));
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_DAMAGE_DEALT, (OnCreatureDamageDealt event) -> onAttackEvent(event), this));
}
}

View File

@@ -29,7 +29,6 @@ import com.l2jmobius.gameserver.model.events.EventType;
import com.l2jmobius.gameserver.model.events.impl.character.OnCreatureAttackAvoid;
import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
import com.l2jmobius.gameserver.model.holders.SkillHolder;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.skills.SkillCaster;
import com.l2jmobius.gameserver.model.skills.targets.TargetType;
@@ -92,14 +91,14 @@ public final class TriggerSkillByAvoid extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().removeListenerIf(EventType.ON_CREATURE_ATTACK_AVOID, listener -> listener.getOwner() == this);
effected.removeListenerIf(EventType.ON_CREATURE_ATTACK_AVOID, listener -> listener.getOwner() == this);
}
@Override
public void onStart(BuffInfo info)
public void onStart(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().addListener(new ConsumerEventListener(info.getEffected(), EventType.ON_CREATURE_ATTACK_AVOID, (OnCreatureAttackAvoid event) -> onAvoidEvent(event), this));
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_ATTACK_AVOID, (OnCreatureAttackAvoid event) -> onAvoidEvent(event), this));
}
}

View File

@@ -29,7 +29,6 @@ import com.l2jmobius.gameserver.model.events.EventType;
import com.l2jmobius.gameserver.model.events.impl.character.OnCreatureDamageReceived;
import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
import com.l2jmobius.gameserver.model.holders.SkillHolder;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.skills.SkillCaster;
import com.l2jmobius.gameserver.model.skills.targets.TargetType;
@@ -99,14 +98,14 @@ public final class TriggerSkillByDamage extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().removeListenerIf(EventType.ON_CREATURE_DAMAGE_RECEIVED, listener -> listener.getOwner() == this);
effected.removeListenerIf(EventType.ON_CREATURE_DAMAGE_RECEIVED, listener -> listener.getOwner() == this);
}
@Override
public void onStart(BuffInfo info)
public void onStart(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().addListener(new ConsumerEventListener(info.getEffected(), EventType.ON_CREATURE_DAMAGE_RECEIVED, (OnCreatureDamageReceived event) -> onDamageReceivedEvent(event), this));
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_DAMAGE_RECEIVED, (OnCreatureDamageReceived event) -> onDamageReceivedEvent(event), this));
}
}

View File

@@ -29,7 +29,6 @@ import com.l2jmobius.gameserver.model.events.EventType;
import com.l2jmobius.gameserver.model.events.impl.character.OnCreatureDamageReceived;
import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
import com.l2jmobius.gameserver.model.holders.SkillHolder;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.skills.SkillCaster;
import com.l2jmobius.gameserver.model.skills.targets.TargetType;
@@ -102,14 +101,14 @@ public final class TriggerSkillByDeathBlow extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().removeListenerIf(EventType.ON_CREATURE_DAMAGE_RECEIVED, listener -> listener.getOwner() == this);
effected.removeListenerIf(EventType.ON_CREATURE_DAMAGE_RECEIVED, listener -> listener.getOwner() == this);
}
@Override
public void onStart(BuffInfo info)
public void onStart(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().addListener(new ConsumerEventListener(info.getEffected(), EventType.ON_CREATURE_DAMAGE_RECEIVED, (OnCreatureDamageReceived event) -> onDamageReceivedEvent(event), this));
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_DAMAGE_RECEIVED, (OnCreatureDamageReceived event) -> onDamageReceivedEvent(event), this));
}
}

View File

@@ -24,7 +24,6 @@ import com.l2jmobius.gameserver.model.events.EventType;
import com.l2jmobius.gameserver.model.events.impl.character.OnCreatureKilled;
import com.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
import com.l2jmobius.gameserver.model.holders.SkillHolder;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.skills.SkillCaster;
@@ -64,14 +63,14 @@ public final class TriggerSkillByKill extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().removeListenerIf(EventType.ON_CREATURE_KILLED, listener -> listener.getOwner() == this);
effected.removeListenerIf(EventType.ON_CREATURE_KILLED, listener -> listener.getOwner() == this);
}
@Override
public void onStart(BuffInfo info)
public void onStart(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().addListener(new ConsumerEventListener(info.getEffected(), EventType.ON_CREATURE_KILLED, (OnCreatureKilled event) -> onCreatureKilled(event, info.getEffected()), this));
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_KILLED, (OnCreatureKilled event) -> onCreatureKilled(event, effected), this));
}
}

View File

@@ -112,20 +112,19 @@ public final class TriggerSkillByMagicType extends AbstractEffect
}
@Override
public void onStart(BuffInfo info)
public void onStart(L2Character effector, L2Character effected, Skill skill)
{
if ((_chance == 0) || (_skill.getSkillId() == 0) || (_skill.getSkillLevel() == 0) || (_magicTypes.length == 0))
{
return;
}
info.getEffected().addListener(new ConsumerEventListener(info.getEffected(), EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
effected.addListener(new ConsumerEventListener(effected, EventType.ON_CREATURE_SKILL_FINISH_CAST, (OnCreatureSkillFinishCast event) -> onSkillUseEvent(event), this));
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
}
}

View File

@@ -62,9 +62,9 @@ public final class TriggerSkillBySkill extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
effected.removeListenerIf(EventType.ON_CREATURE_SKILL_FINISH_CAST, listener -> listener.getOwner() == this);
}
private void onSkillUseEvent(OnCreatureSkillFinishCast event)

View File

@@ -72,9 +72,9 @@ public final class TriggerSkillBySkillAttack extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().removeListenerIf(EventType.ON_CREATURE_DAMAGE_DEALT, listener -> listener.getOwner() == this);
effected.removeListenerIf(EventType.ON_CREATURE_DAMAGE_DEALT, listener -> listener.getOwner() == this);
}
private void onAttackEvent(OnCreatureDamageDealt event)

View File

@@ -23,7 +23,6 @@ import com.l2jmobius.gameserver.model.actor.L2Summon;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.Formulas;
import com.l2jmobius.gameserver.network.SystemMessageId;
@@ -63,9 +62,9 @@ public final class Unsummon extends AbstractEffect
}
@Override
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
return info.getEffected().isSummon();
return effected.isSummon();
}
@Override

View File

@@ -21,7 +21,6 @@ import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.EffectFlag;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
@@ -35,9 +34,9 @@ public final class Untargetable extends AbstractEffect
}
@Override
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
return info.getEffected().isPlayer();
return effected.isPlayer();
}
@Override

View File

@@ -20,7 +20,6 @@ import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.network.serverpackets.UserInfo;
@@ -38,9 +37,9 @@ public final class VitalityPointUp extends AbstractEffect
}
@Override
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
return (info.getEffected() != null) && info.getEffected().isPlayer();
return (effected != null) && effected.isPlayer();
}
@Override

View File

@@ -203,10 +203,6 @@
<amount>7</amount>
<mode>DIFF</mode>
</effect>
<effect name="RewardItemOnExit">
<itemId>40313</itemId>
<itemCount>1</itemCount>
</effect>
</effects>
</skill>
<skill id="16420" toLevel="2" name="Tree Fairy's Blessing">
@@ -241,10 +237,6 @@
<amount>30</amount>
<mode>DIFF</mode>
</effect>
<effect name="RewardItemOnExit">
<itemId>40313</itemId>
<itemCount>1</itemCount>
</effect>
</effects>
</skill>
<skill id="16421" toLevel="2" name="Snowman Fairy's Blessing">
@@ -279,10 +271,6 @@
<amount>2013</amount>
<mode>DIFF</mode>
</effect>
<effect name="RewardItemOnExit">
<itemId>40313</itemId>
<itemCount>1</itemCount>
</effect>
</effects>
</skill>
<skill id="16422" toLevel="1" name="Winter Holiday Reward">

View File

@@ -248,7 +248,6 @@ Resurrection: Resurrects target Player or Summon.
ResurrectionSpecial: Resurrects target Player or Summon only in specified instance IDs.
Reuse: Decreases skill reuse time based on its magic type.
ReuseSkillById: Resets reuse time for the skill with the specific id. (l2jmobius)
RewardItemOnExit: Reward an item when effect ends. (l2jmobius)
Root: Stops movement.
SacrificeSummon: Sacrifices the players summon. (l2jmobius)
SafeFallHeight: Minimum falling height for taking damage stat.

View File

@@ -780,7 +780,7 @@ public class CharStat
// Call pump to each effect
//@formatter:off
effectsStream.forEach(info -> info.getEffects().stream()
.filter(effect -> effect.canStart(info))
.filter(effect -> effect.canStart(info.getEffector(), info.getEffected(), info.getSkill()))
.filter(effect -> effect.canPump(info.getEffector(), info.getEffected(), info.getSkill()))
.forEach(effect -> effect.pump(info.getEffected(), info.getSkill())));
//@formatter:on
@@ -792,7 +792,7 @@ public class CharStat
.filter(BuffInfo::isInUse)
.filter(info -> info.isAbnormalType(AbnormalType.ABILITY_CHANGE))
.forEach(info -> info.getEffects().stream()
.filter(effect -> effect.canStart(info))
.filter(effect -> effect.canStart(info.getEffector(), info.getEffected(), info.getSkill()))
.filter(effect -> effect.canPump(_activeChar, _activeChar, info.getSkill()))
.forEach(effect -> effect.pump(_activeChar, info.getSkill())));
//@formatter:on

View File

@@ -21,14 +21,13 @@ import java.util.logging.Logger;
import com.l2jmobius.Config;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
* Abstract effect implementation.<br>
* Instant effects should not override {@link #onExit(BuffInfo)}.<br>
* Instant effects should not override {@link #canStart(BuffInfo)}, all checks should be done {@link #onStart(BuffInfo)}.<br>
* Do not call super class methods {@link #onStart(BuffInfo)} nor {@link #onExit(BuffInfo)}.
* Instant effects should not override {@link #onExit(L2Character, L2Character, Skill)}.<br>
* Instant effects should not override {@link #canStart(L2Character, L2Character, Skill)}, all checks should be done {@link #onStart(L2Character, L2Character, Skill)}.<br>
* Do not call super class methods {@link #onStart(L2Character, L2Character, Skill)} nor {@link #onExit(L2Character, L2Character, Skill)}.
* @author Zoey76
*/
public abstract class AbstractEffect
@@ -75,23 +74,15 @@ public abstract class AbstractEffect
return true;
}
/**
* Get this effect's type.<br>
* TODO: Remove.
* @return the effect type
*/
public L2EffectType getEffectType()
{
return L2EffectType.NONE;
}
/**
* Verify if the buff can start.<br>
* Used for continuous effects.
* @param info the buff info
* @param effector
* @param effected
* @param skill
* @return {@code true} if all the start conditions are meet, {@code false} otherwise
*/
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
return true;
}
@@ -111,34 +102,24 @@ public abstract class AbstractEffect
}
/**
* Called on effect start.
* @param info the buff info
*/
public void onStart(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
}
/**
* Called on each tick.<br>
* If the abnormal time is lesser than zero it will last forever.
* @param info the buff info
* @param effector
* @param effected
* @param skill
* @return if {@code true} this effect will continue forever, if {@code false} it will stop after abnormal time has passed
*/
public boolean onActionTime(BuffInfo info)
public boolean onActionTime(L2Character effector, L2Character effected, Skill skill)
{
return false;
}
/**
* Called when the effect is exited.
* @param info the buff info
*/
public void onExit(BuffInfo info)
{
}
/**
* Get the effect flags.
* @return bit flag for current effect
@@ -148,12 +129,6 @@ public abstract class AbstractEffect
return EffectFlag.NONE.getMask();
}
@Override
public String toString()
{
return "Effect " + getClass().getSimpleName();
}
public boolean checkCondition(Object obj)
{
return true;
@@ -187,4 +162,20 @@ public abstract class AbstractEffect
{
}
/**
* Get this effect's type.<br>
* TODO: Remove.
* @return the effect type
*/
public L2EffectType getEffectType()
{
return L2EffectType.NONE;
}
@Override
public String toString()
{
return "Effect " + getClass().getSimpleName();
}
}

View File

@@ -176,7 +176,7 @@ public class Options
effect.continuousInstant(info.getEffector(), info.getEffected(), info.getSkill(), info.getItem());
effect.pump(player, info.getSkill());
if (effect.canStart(info))
if (effect.canStart(info.getEffector(), info.getEffected(), info.getSkill()))
{
info.addEffect(effect);
}

View File

@@ -334,7 +334,6 @@ public final class BuffInfo
// Call on start.
effect.onStart(getEffector(), getEffected(), getSkill());
effect.onStart(this);
// If it's a continuous effect, if has ticks schedule a task with period, otherwise schedule a simple task to end it.
if (effect.getTicks() > 0)
@@ -361,7 +360,7 @@ public final class BuffInfo
if (_isInUse)
{
// Callback for on action time event.
continueForever = effect.onActionTime(this);
continueForever = effect.onActionTime(getEffector(), getEffected(), getSkill());
}
if (!continueForever && _skill.isToggle())
@@ -392,7 +391,7 @@ public final class BuffInfo
// Instant effects shouldn't call onExit(..).
if (!effect.isInstant())
{
effect.onExit(this);
effect.onExit(getEffector(), getEffected(), getSkill());
}
}

View File

@@ -1265,7 +1265,7 @@ public final class Skill implements IIdentifiable
effect.continuousInstant(info.getEffector(), info.getEffected(), info.getSkill(), info.getItem());
}
if (effect.canStart(info))
if (effect.canStart(info.getEffector(), info.getEffected(), info.getSkill()))
{
info.addEffect(effect);
}

View File

@@ -18,6 +18,11 @@ package events.HuntForSanta;
import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.events.EventType;
import com.l2jmobius.gameserver.model.events.ListenerRegisterType;
import com.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
import com.l2jmobius.gameserver.model.events.annotations.RegisterType;
import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerLogin;
import com.l2jmobius.gameserver.model.holders.SkillHolder;
import com.l2jmobius.gameserver.model.quest.LongTimeEvent;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
@@ -39,7 +44,7 @@ public final class HuntForSanta extends LongTimeEvent
private static final SkillHolder BUFF_TREE = new SkillHolder(16420, 1);
private static final SkillHolder BUFF_SNOWMAN = new SkillHolder(16421, 1);
// Item
// private static final int SANTAS_MARK = 40313;
private static final int SANTAS_MARK = 40313;
private HuntForSanta()
{
@@ -63,21 +68,27 @@ public final class HuntForSanta extends LongTimeEvent
case "receiveBuffStocking":
{
htmltext = applyBuff(npc, player, BUFF_STOCKING.getSkill());
startQuestTimer("rewardBuffStocking" + player.getObjectId(), 7200000, null, player);
break;
}
case "receiveBuffTree":
{
htmltext = applyBuff(npc, player, BUFF_TREE.getSkill());
startQuestTimer("rewardBuffTree" + player.getObjectId(), 7200000, null, player);
break;
}
case "receiveBuffSnowman":
{
htmltext = applyBuff(npc, player, BUFF_SNOWMAN.getSkill());
startQuestTimer("rewardBuffSnowman" + player.getObjectId(), 7200000, null, player);
break;
}
case "receiveBuffAll":
{
htmltext = applyAllBuffs(npc, player);
startQuestTimer("rewardBuffStocking" + player.getObjectId(), 7200000, null, player);
startQuestTimer("rewardBuffTree" + player.getObjectId(), 7200000, null, player);
startQuestTimer("rewardBuffSnowman" + player.getObjectId(), 7200000, null, player);
break;
}
case "changeBuff":
@@ -87,6 +98,17 @@ public final class HuntForSanta extends LongTimeEvent
break;
}
}
if (event.startsWith("rewardBuffStocking") //
|| event.startsWith("rewardBuffSnowman") //
|| event.startsWith("rewardBuffTree"))
{
if ((player != null) && (player.isOnlineInt() == 1))
{
giveItems(player, SANTAS_MARK, 1);
}
}
return htmltext;
}
@@ -128,20 +150,36 @@ public final class HuntForSanta extends LongTimeEvent
private void removeBuffs(L2PcInstance player)
{
player.getEffectList().stopSkillEffects(true, BUFF_STOCKING.getSkill());
player.getEffectList().stopSkillEffects(true, BUFF_TREE.getSkill());
player.getEffectList().stopSkillEffects(true, BUFF_SNOWMAN.getSkill());
cancelQuestTimer("rewardBuffStocking" + player.getObjectId(), null, player);
cancelQuestTimer("rewardBuffTree" + player.getObjectId(), null, player);
cancelQuestTimer("rewardBuffSnowman" + player.getObjectId(), null, player);
}
@RegisterEvent(EventType.ON_PLAYER_LOGIN)
@RegisterType(ListenerRegisterType.GLOBAL_PLAYERS)
public void OnPlayerLogin(OnPlayerLogin event)
{
final L2PcInstance player = event.getActiveChar();
final BuffInfo buffStocking = player.getEffectList().getBuffInfoBySkillId(BUFF_STOCKING.getSkillId());
final BuffInfo buffTree = player.getEffectList().getBuffInfoBySkillId(BUFF_TREE.getSkillId());
final BuffInfo buffSnowman = player.getEffectList().getBuffInfoBySkillId(BUFF_SNOWMAN.getSkillId());
if (buffStocking != null)
{
player.getEffectList().stopSkillEffects(true, buffStocking.getSkill());
cancelQuestTimer("rewardBuffStocking" + player.getObjectId(), null, player);
startQuestTimer("rewardBuffStocking" + player.getObjectId(), buffStocking.getTime() * 1000, null, player);
}
if (buffTree != null)
{
player.getEffectList().stopSkillEffects(true, buffTree.getSkill());
cancelQuestTimer("rewardBuffTree" + player.getObjectId(), null, player);
startQuestTimer("rewardBuffTree" + player.getObjectId(), buffTree.getTime() * 1000, null, player);
}
if (buffSnowman != null)
{
player.getEffectList().stopSkillEffects(true, buffSnowman.getSkill());
cancelQuestTimer("rewardBuffSnowman" + player.getObjectId(), null, player);
startQuestTimer("rewardBuffSnowman" + player.getObjectId(), buffSnowman.getTime() * 1000, null, player);
}
}

View File

@@ -280,7 +280,6 @@ public final class EffectMasterHandler
EffectHandler.getInstance().registerHandler("ResurrectionSpecial", ResurrectionSpecial::new);
EffectHandler.getInstance().registerHandler("Reuse", Reuse::new);
EffectHandler.getInstance().registerHandler("ReuseSkillById", ReuseSkillById::new);
EffectHandler.getInstance().registerHandler("RewardItemOnExit", RewardItemOnExit::new);
EffectHandler.getInstance().registerHandler("Root", Root::new);
EffectHandler.getInstance().registerHandler("SacrificeSummon", SacrificeSummon::new);
EffectHandler.getInstance().registerHandler("SafeFallHeight", SafeFallHeight::new);

View File

@@ -17,10 +17,11 @@
package handlers.effecthandlers;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.EffectFlag;
import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
* An effect that blocks a debuff. Acts like DOTA's Linken Sphere.
@@ -36,9 +37,9 @@ public final class AbnormalShield extends AbstractEffect
}
@Override
public void onStart(BuffInfo info)
public void onStart(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().setAbnormalShieldBlocks(_times);
effected.setAbnormalShieldBlocks(_times);
}
@Override
@@ -48,9 +49,9 @@ public final class AbnormalShield extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().setAbnormalShieldBlocks(Integer.MIN_VALUE);
effected.setAbnormalShieldBlocks(Integer.MIN_VALUE);
}
@Override

View File

@@ -20,12 +20,13 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.events.EventType;
import com.l2jmobius.gameserver.model.events.impl.character.OnCreatureDamageReceived;
import com.l2jmobius.gameserver.model.events.listeners.FunctionEventListener;
import com.l2jmobius.gameserver.model.events.returns.DamageReturn;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
* @author Sdw
@@ -60,16 +61,16 @@ public class AbsorbDamage extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().removeListenerIf(EventType.ON_CREATURE_DAMAGE_RECEIVED, listener -> listener.getOwner() == this);
_damageHolder.remove(info.getEffected().getObjectId());
effected.removeListenerIf(EventType.ON_CREATURE_DAMAGE_RECEIVED, listener -> listener.getOwner() == this);
_damageHolder.remove(effected.getObjectId());
}
@Override
public void onStart(BuffInfo info)
public void onStart(L2Character effector, L2Character effected, Skill skill)
{
_damageHolder.put(info.getEffected().getObjectId(), _damage);
info.getEffected().addListener(new FunctionEventListener(info.getEffected(), EventType.ON_CREATURE_DAMAGE_RECEIVED, (OnCreatureDamageReceived event) -> onDamageReceivedEvent(event), this));
_damageHolder.put(effected.getObjectId(), _damage);
effected.addListener(new FunctionEventListener(effected, EventType.ON_CREATURE_DAMAGE_RECEIVED, (OnCreatureDamageReceived event) -> onDamageReceivedEvent(event), this));
}
}

View File

@@ -20,7 +20,6 @@ import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.holders.SkillHolder;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
@@ -52,8 +51,8 @@ public class AddSkillBySkill extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().removeSkill(_addedSkill.getSkill(), true);
effected.removeSkill(_addedSkill.getSkill(), true);
}
}

View File

@@ -30,7 +30,6 @@ import com.l2jmobius.gameserver.model.base.ClassId;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.L2EffectType;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.network.serverpackets.ExAlterSkillRequest;
@@ -101,11 +100,11 @@ public final class AirBind extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
if (!info.getEffected().isPlayer())
if (!effected.isPlayer())
{
info.getEffected().getAI().notifyEvent(CtrlEvent.EVT_THINK);
effected.getAI().notifyEvent(CtrlEvent.EVT_THINK);
}
}

View File

@@ -24,7 +24,6 @@ import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.stat.CharStat;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.stats.TraitType;
@@ -51,9 +50,9 @@ public final class AttackTrait extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
final CharStat charStat = info.getEffected().getStat();
final CharStat charStat = effected.getStat();
synchronized (charStat.getAttackTraits())
{
for (Entry<TraitType, Float> trait : _attackTraits.entrySet())

View File

@@ -21,7 +21,6 @@ import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.effects.AbstractEffect;
import com.l2jmobius.gameserver.model.effects.EffectFlag;
import com.l2jmobius.gameserver.model.skills.BuffInfo;
import com.l2jmobius.gameserver.model.skills.Skill;
/**
@@ -35,9 +34,9 @@ public final class Betray extends AbstractEffect
}
@Override
public boolean canStart(BuffInfo info)
public boolean canStart(L2Character effector, L2Character effected, Skill skill)
{
return info.getEffector().isPlayer() && info.getEffected().isSummon();
return effector.isPlayer() && effected.isSummon();
}
@Override
@@ -53,8 +52,8 @@ public final class Betray extends AbstractEffect
}
@Override
public void onExit(BuffInfo info)
public void onExit(L2Character effector, L2Character effected, Skill skill)
{
info.getEffected().getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
effected.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
}
}

Some files were not shown because too many files have changed in this diff Show More