Chain skill rework.

This commit is contained in:
MobiusDevelopment
2020-03-29 08:27:18 +00:00
parent d8021624a1
commit 9cb1ed319e
39 changed files with 1241 additions and 1221 deletions

View File

@@ -16,6 +16,9 @@
*/
package handlers.effecthandlers;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import org.l2jmobius.gameserver.ai.CtrlEvent;
import org.l2jmobius.gameserver.ai.CtrlIntention;
import org.l2jmobius.gameserver.geoengine.GeoEngine;
@@ -23,7 +26,6 @@ import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.effects.EffectType;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Formulas;
@@ -45,6 +47,8 @@ public class KnockBack extends AbstractEffect
private final boolean _knockDown;
private final FlyType _type;
private static final Set<Creature> ACTIVE_KNOCKBACKS = ConcurrentHashMap.newKeySet();
public KnockBack(StatSet params)
{
_distance = params.getInt("distance", 50);
@@ -67,12 +71,6 @@ public class KnockBack extends AbstractEffect
return !_knockDown;
}
@Override
public EffectType getEffectType()
{
return EffectType.KNOCK;
}
@Override
public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
@@ -94,6 +92,8 @@ public class KnockBack extends AbstractEffect
@Override
public void onExit(Creature effector, Creature effected, Skill skill)
{
ACTIVE_KNOCKBACKS.remove(effected);
if (!effected.isPlayer())
{
effected.getAI().notifyEvent(CtrlEvent.EVT_THINK);
@@ -102,26 +102,31 @@ public class KnockBack extends AbstractEffect
private void knockBack(Creature effector, Creature effected)
{
// Prevent knocking back raids and town NPCs.
if ((effected == null) || effected.isRaid() || (effected.isNpc() && !effected.isAttackable()))
if (!ACTIVE_KNOCKBACKS.contains(effected))
{
return;
ACTIVE_KNOCKBACKS.add(effected);
// Prevent knocking back raids and town NPCs.
if ((effected == null) || effected.isRaid() || (effected.isNpc() && !effected.isAttackable()))
{
return;
}
final double radians = Math.toRadians(Util.calculateAngleFrom(effector, effected));
final int x = (int) (effected.getX() + (_distance * Math.cos(radians)));
final int y = (int) (effected.getY() + (_distance * Math.sin(radians)));
final int z = effected.getZ();
final Location loc = GeoEngine.getInstance().canMoveToTargetLoc(effected.getX(), effected.getY(), effected.getZ(), x, y, z, effected.getInstanceWorld());
effected.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
effected.broadcastPacket(new FlyToLocation(effected, loc, _type, _speed, _delay, _animationSpeed));
if (_knockDown)
{
effected.setHeading(Util.calculateHeadingFrom(effected, effector));
}
effected.setXYZ(loc);
effected.broadcastPacket(new ValidateLocation(effected));
effected.revalidateZone(true);
}
final double radians = Math.toRadians(Util.calculateAngleFrom(effector, effected));
final int x = (int) (effected.getX() + (_distance * Math.cos(radians)));
final int y = (int) (effected.getY() + (_distance * Math.sin(radians)));
final int z = effected.getZ();
final Location loc = GeoEngine.getInstance().canMoveToTargetLoc(effected.getX(), effected.getY(), effected.getZ(), x, y, z, effected.getInstanceWorld());
effected.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
effected.broadcastPacket(new FlyToLocation(effected, loc, _type, _speed, _delay, _animationSpeed));
if (_knockDown)
{
effected.setHeading(Util.calculateHeadingFrom(effected, effector));
}
effected.setXYZ(loc);
effected.broadcastPacket(new ValidateLocation(effected));
effected.revalidateZone(true);
}
}

View File

@@ -57,7 +57,6 @@ public enum EffectType
SLEEP,
STEAL_ABNORMAL,
BLOCK_ACTIONS,
KNOCK,
SUMMON,
SUMMON_PET,
SUMMON_NPC,