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; } }