public void Read(RakNet.BitStream stream, RakNet.Packet packet, Client client)
        {
            int plID = 0;

            stream.Read(out plID);

            if (plID == 0 || !sWorld.VobDict.ContainsKey(plID))
            {
                throw new Exception("Vob not found!");
            }
            Vob vob = sWorld.VobDict[plID];

            if (!(vob is NPCProto))
            {
                throw new Exception("Vob is not an NPC!");
            }

            if (vob.Address == 0)
            {
                return;
            }
            Process process = Process.ThisProcess();
            oCNpc   npc     = new oCNpc(process, vob.Address);

            zVec3 pos = npc.GetPosition();

            npc.ResetPos(pos);
            pos.Dispose();
        }
        public override void Despawn()
        {
            if (!IsSpawned || this.Address == 0)
            {
                return;
            }

            Process process = Process.ThisProcess();

            oCNpc npc = new oCNpc(process, this.Address);

            using (zVec3 vec = npc.GetPosition())
            {
                Position = (Vec3f)(new float[] { vec.X, vec.Y, vec.Z });
            }
            npc.HP = 0;
            npc.SetPosition(-1000, -100000, -100000);



            int WeaponMode = weaponMode;

            setWeaponMode(0);
            weaponMode = WeaponMode;

            oCGame.Game(process).World.DisableVob(npc);
            oCGame.Game(process).GetSpawnManager().DeleteNPC(npc);

            //oCGame.Game(process).GetSpawnManager().DeleteNPC(npc);//Bei verwandlung wird bedmempointer aufgerufen :/
            //new DespawnTimer(this.Address);
            this.Address = 0;

            sWorld.SpawnedVobDict.Remove(npc.Address);

            foreach (Item it in itemList)
            {
                sWorld.SpawnedVobDict.Remove(it.Address);
                it.Address = 0;
            }
        }