Package lineage2.gameserver.model.instances

Source Code of lineage2.gameserver.model.instances.TrapInstance$CastTask

/*
* 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 lineage2.gameserver.model.instances;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.ScheduledFuture;

import lineage2.commons.lang.reference.HardReference;
import lineage2.commons.threading.RunnableImpl;
import lineage2.gameserver.ThreadPoolManager;
import lineage2.gameserver.model.Creature;
import lineage2.gameserver.model.GameObjectTasks;
import lineage2.gameserver.model.Player;
import lineage2.gameserver.model.Skill;
import lineage2.gameserver.model.Skill.SkillTargetType;
import lineage2.gameserver.network.serverpackets.L2GameServerPacket;
import lineage2.gameserver.network.serverpackets.NpcInfo;
import lineage2.gameserver.network.serverpackets.components.CustomMessage;
import lineage2.gameserver.taskmanager.EffectTaskManager;
import lineage2.gameserver.templates.npc.NpcTemplate;
import lineage2.gameserver.utils.Location;

/**
* @author Mobius
* @version $Revision: 1.0 $
*/
public final class TrapInstance extends NpcInstance
{
  /**
   *
   */
  private static final long serialVersionUID = 1L;
 
  /**
   * @author Mobius
   */
  private static class CastTask extends RunnableImpl
  {
    /**
     * Field _trapRef.
     */
    private final HardReference<NpcInstance> _trapRef;
   
    /**
     * Constructor for CastTask.
     * @param trap TrapInstance
     */
    public CastTask(TrapInstance trap)
    {
      _trapRef = trap.getRef();
    }
   
    /**
     * Method runImpl.
     */
    @Override
    public void runImpl()
    {
      TrapInstance trap = (TrapInstance) _trapRef.get();
      if (trap == null)
      {
        return;
      }
      Creature owner = trap.getOwner();
      if (owner == null)
      {
        return;
      }
      if (trap._skill == null)
      {
        System.out.println("ERROR IN TRAP SKILL");
        trap.deleteMe();
        return;
      }
      for (Creature target : trap.getAroundCharacters(200, 200))
      {
        if (target != owner)
        {
          if (trap._skill.checkTarget(owner, target, null, false, false) == null)
          {
            List<Creature> targets = new ArrayList<>();
            if (trap._skill.getTargetType() != SkillTargetType.TARGET_AREA)
            {
              targets.add(target);
            }
            else
            {
              for (Creature t : trap.getAroundCharacters(trap._skill.getSkillRadius(), 128))
              {
                if (trap._skill.checkTarget(owner, t, null, false, false) == null)
                {
                  targets.add(target);
                }
              }
            }
            trap._skill.useSkill(trap, targets);
            if (target.isPlayer())
            {
              target.sendMessage(new CustomMessage("common.Trap", target.getPlayer()));
            }
            trap.deleteMe();
            break;
          }
        }
      }
    }
  }
 
  /**
   * Field _ownerRef.
   */
  private final HardReference<? extends Creature> _ownerRef;
  /**
   * Field _skill.
   */
  final Skill _skill;
  /**
   * Field _targetTask.
   */
  private ScheduledFuture<?> _targetTask;
  /**
   * Field _destroyTask.
   */
  private ScheduledFuture<?> _destroyTask;
  /**
   * Field _detected.
   */
  private boolean _detected;
 
  /**
   * Constructor for TrapInstance.
   * @param objectId int
   * @param template NpcTemplate
   * @param owner Creature
   * @param skill Skill
   */
  public TrapInstance(int objectId, NpcTemplate template, Creature owner, Skill skill)
  {
    this(objectId, template, owner, skill, owner.getLoc());
  }
 
  /**
   * Constructor for TrapInstance.
   * @param objectId int
   * @param template NpcTemplate
   * @param owner Creature
   * @param skill Skill
   * @param loc Location
   */
  public TrapInstance(int objectId, NpcTemplate template, Creature owner, Skill skill, Location loc)
  {
    super(objectId, template);
    _ownerRef = owner.getRef();
    _skill = skill;
    setReflection(owner.getReflection());
    setLevel(owner.getLevel());
    setTitle(owner.getName());
    setLoc(loc);
  }
 
  /**
   * Method isTrap.
   * @return boolean
   */
  @Override
  public boolean isTrap()
  {
    return true;
  }
 
  /**
   * Method getOwner.
   * @return Creature
   */
  public Creature getOwner()
  {
    return _ownerRef.get();
  }
 
  /**
   * Method onSpawn.
   */
  @Override
  protected void onSpawn()
  {
    super.onSpawn();
    _destroyTask = ThreadPoolManager.getInstance().schedule(new GameObjectTasks.DeleteTask(this), 120000L);
    _targetTask = EffectTaskManager.getInstance().scheduleAtFixedRate(new CastTask(this), 250L, 250L);
  }
 
  /**
   * Method broadcastCharInfo.
   */
  @Override
  public void broadcastCharInfo()
  {
    if (!isDetected())
    {
      return;
    }
    super.broadcastCharInfo();
  }
 
  /**
   * Method onDelete.
   */
  @Override
  protected void onDelete()
  {
    Creature owner = getOwner();
    if ((owner != null) && owner.isPlayer())
    {
      ((Player) owner).removeTrap(this);
    }
    if (_destroyTask != null)
    {
      _destroyTask.cancel(false);
    }
    _destroyTask = null;
    if (_targetTask != null)
    {
      _targetTask.cancel(false);
    }
    _targetTask = null;
    super.onDelete();
  }
 
  /**
   * Method isDetected.
   * @return boolean
   */
  public boolean isDetected()
  {
    return _detected;
  }
 
  /**
   * Method setDetected.
   * @param detected boolean
   */
  public void setDetected(boolean detected)
  {
    _detected = detected;
  }
 
  /**
   * Method getPAtk.
   * @param target Creature
   * @return int
   */
  @Override
  public int getPAtk(Creature target)
  {
    Creature owner = getOwner();
    return owner == null ? 0 : owner.getPAtk(target);
  }
 
  /**
   * Method getMAtk.
   * @param target Creature
   * @param skill Skill
   * @return int
   */
  @Override
  public int getMAtk(Creature target, Skill skill)
  {
    Creature owner = getOwner();
    return owner == null ? 0 : owner.getMAtk(target, skill);
  }
 
  /**
   * Method hasRandomAnimation.
   * @return boolean
   */
  @Override
  public boolean hasRandomAnimation()
  {
    return false;
  }
 
  /**
   * Method isAutoAttackable.
   * @param attacker Creature
   * @return boolean
   */
  @Override
  public boolean isAutoAttackable(Creature attacker)
  {
    return false;
  }
 
  /**
   * Method isAttackable.
   * @param attacker Creature
   * @return boolean
   */
  @Override
  public boolean isAttackable(Creature attacker)
  {
    return false;
  }
 
  /**
   * Method isInvul.
   * @return boolean
   */
  @Override
  public boolean isInvul()
  {
    return true;
  }
 
  /**
   * Method isFearImmune.
   * @return boolean
   */
  @Override
  public boolean isFearImmune()
  {
    return true;
  }
 
  /**
   * Method isParalyzeImmune.
   * @return boolean
   */
  @Override
  public boolean isParalyzeImmune()
  {
    return true;
  }
 
  /**
   * Method isLethalImmune.
   * @return boolean
   */
  @Override
  public boolean isLethalImmune()
  {
    return true;
  }
 
  /**
   * Method showChatWindow.
   * @param player Player
   * @param val int
   * @param arg Object[]
   */
  @Override
  public void showChatWindow(Player player, int val, Object... arg)
  {
  }
 
  /**
   * Method showChatWindow.
   * @param player Player
   * @param filename String
   * @param replace Object[]
   */
  @Override
  public void showChatWindow(Player player, String filename, Object... replace)
  {
  }
 
  /**
   * Method onBypassFeedback.
   * @param player Player
   * @param command String
   */
  @Override
  public void onBypassFeedback(Player player, String command)
  {
  }
 
  @Override
  public void onActionTargeted(final Player player, boolean forced)
  {
  }

 
  /**
   * Method addPacketList.
   * @param forPlayer Player
   * @param dropper Creature
   * @return List<L2GameServerPacket>
   */
  @Override
  public List<L2GameServerPacket> addPacketList(Player forPlayer, Creature dropper)
  {
    if (!isDetected() && (getOwner() != forPlayer))
    {
      return Collections.emptyList();
    }
    return Collections.<L2GameServerPacket> singletonList(new NpcInfo(this, forPlayer));
  }
}
TOP

Related Classes of lineage2.gameserver.model.instances.TrapInstance$CastTask

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.