/* * Copyright (C) 2004-2013 L2J DataPack * * This file is part of L2J DataPack. * * L2J DataPack 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. * * L2J DataPack 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 . */ package handlers.effecthandlers; import com.l2jserver.Config; import com.l2jserver.gameserver.GeoData; import com.l2jserver.gameserver.ai.CtrlEvent; import com.l2jserver.gameserver.ai.CtrlIntention; import com.l2jserver.gameserver.model.Location; import com.l2jserver.gameserver.model.actor.instance.L2DefenderInstance; import com.l2jserver.gameserver.model.actor.instance.L2FortCommanderInstance; import com.l2jserver.gameserver.model.actor.instance.L2NpcInstance; import com.l2jserver.gameserver.model.actor.instance.L2SiegeFlagInstance; import com.l2jserver.gameserver.model.actor.instance.L2SiegeSummonInstance; import com.l2jserver.gameserver.model.effects.EffectFlag; import com.l2jserver.gameserver.model.effects.EffectTemplate; import com.l2jserver.gameserver.model.effects.L2Effect; import com.l2jserver.gameserver.model.effects.L2EffectType; import com.l2jserver.gameserver.model.stats.Env; /** * Fear effect implementation. * @author littlecrow */ public class Fear extends L2Effect { public static final int FEAR_RANGE = 500; private int _dX = -1; private int _dY = -1; public Fear(Env env, EffectTemplate template) { super(env, template); } @Override public int getEffectFlags() { return EffectFlag.FEAR.getMask(); } @Override public L2EffectType getEffectType() { return L2EffectType.FEAR; } @Override public boolean onActionTime() { int posX = getEffected().getX(); int posY = getEffected().getY(); int posZ = getEffected().getZ(); if (getEffected().getX() > getEffector().getX()) { _dX = 1; } if (getEffected().getY() > getEffector().getY()) { _dY = 1; } posX += _dX * FEAR_RANGE; posY += _dY * FEAR_RANGE; if (Config.GEODATA > 0) { Location destiny = GeoData.getInstance().moveCheck(getEffected().getX(), getEffected().getY(), getEffected().getZ(), posX, posY, posZ, getEffected().getInstanceId()); posX = destiny.getX(); posY = destiny.getY(); } if (!getEffected().isPet()) { getEffected().setRunning(); } getEffected().getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new Location(posX, posY, posZ)); return false; } @Override public boolean onStart() { if ((getEffected() instanceof L2NpcInstance) || (getEffected() instanceof L2DefenderInstance) || (getEffected() instanceof L2FortCommanderInstance) || (getEffected() instanceof L2SiegeFlagInstance) || (getEffected() instanceof L2SiegeSummonInstance)) { return false; } if (getEffected().isAfraid()) { return false; } if (getEffected().isCastingNow() && getEffected().canAbortCast()) { getEffected().abortCast(); } if (getEffected().getX() > getEffector().getX()) { _dX = 1; } if (getEffected().getY() > getEffector().getY()) { _dY = 1; } getEffected().getAI().notifyEvent(CtrlEvent.EVT_AFRAID); onActionTime(); return super.onStart(); } }