@Override
  public List<L2GameServerPacket> addPacketList(Player forPlayer, Creature dropper) {
    if (isInvisible()) return Collections.emptyList();

    List<L2GameServerPacket> list = new ArrayList<L2GameServerPacket>();
    list.add(new FakePlayerInfo(this));

    boolean dualCast = isDualCastingNow();
    if (isCastingNow()) {
      Creature castingTarget = getCastingTarget();
      Skill castingSkill = getCastingSkill();
      long animationEndTime = getAnimationEndTime();
      if (castingSkill != null
          && castingTarget != null
          && castingTarget.isCreature()
          && animationEndTime > 0)
        list.add(
            new MagicSkillUse(
                this,
                castingTarget,
                castingSkill.getId(),
                castingSkill.getLevel(),
                (int) (animationEndTime - System.currentTimeMillis()),
                0,
                dualCast));
    }

    if (dualCast) {
      Creature castingTarget = getDualCastingTarget();
      Skill castingSkill = getDualCastingSkill();
      long animationEndTime = getDualAnimationEndTime();
      if (castingSkill != null
          && castingTarget != null
          && castingTarget.isCreature()
          && animationEndTime > 0)
        list.add(
            new MagicSkillUse(
                this,
                castingTarget,
                castingSkill.getId(),
                castingSkill.getLevel(),
                (int) (animationEndTime - System.currentTimeMillis()),
                0,
                dualCast));
    }

    if (isInCombat()) list.add(new AutoAttackStart(getObjectId()));

    // list.add(RelationChanged.update(forPlayer, this, forPlayer));

    if (isMoving || isFollow) list.add(movePacket());

    return list;
  }