private void SendCompleted()
        {
            PacketOut Out = new PacketOut((byte)Opcodes.F_USE_ABILITY, 20);

            Out.WriteUInt16(0);
            Out.WriteUInt16(AbInfo.Entry);
            Out.WriteUInt16(_caster.Oid);
            Out.WriteUInt16(AbInfo.ConstantInfo.EffectID);

            if (AbInfo.Target != null)
            {
                Out.WriteUInt16(AbInfo.Target.Oid);
            }
            else if (AbInfo.Range == 0)
            {
                Out.WriteUInt16(_caster.Oid);
            }
            else
            {
                Out.WriteUInt16(0);
            }

            Out.WriteByte(2);
            Out.WriteByte((byte)AbInfo.ConstantInfo.Origin);
            Out.WriteByte(0);
            Out.WriteByte(0); //result
            Out.WriteInt16((short)-(TCPManager.GetTimeStampMS() - _castStartTime));
            Out.WriteByte(_castSequence);
            Out.WriteUInt16(0); //time
            Out.WriteByte(0);
            _abInterface._Owner.DispatchPacket(Out, true);

            if (AbInfo.CastTime == 0)
            {
                //if (AbInfo.ConstantInfo.ChannelID == 0)
                _caster.SendUpdateState((byte)StateOpcode.CastCompletion, 0);
            }
        }