public void SpawnMob(GameClient client, int mobId) // this shoudn't even rely on client or it's position though i know this is just a hack atm ;) /raist. { int nId = mobId; if (client.Player.Hero.Position == null) return; if (client.ObjectIdsSpawned == null) { client.ObjectIdsSpawned = new List<int>(); // why is this necessary? //client.ObjectIdsSpawned.Add(client.ObjectId - 100); client.ObjectIdsSpawned.Add(this.NextObjectId); } int objectId = this.NextObjectId; client.ObjectIdsSpawned.Add(objectId); #region ACDEnterKnown Hittable Zombie Vector3D pos = client.Player.Hero.Position; BasicNPC mob = new BasicNPC(objectId, mobId, new WorldPlace { Field0 = new Vector3D(pos.X - 5, pos.Y - 5, pos.Z), }); GetWorld(client.Player.Hero.WorldId).AddNpc(mob); mob.Reveal(client); client.SendMessage(new AffixMessage() { Id = 0x48, Field0 = objectId, Field1 = 0x1, aAffixGBIDs = new int[0] }); client.SendMessage(new AffixMessage() { Id = 0x48, Field0 = objectId, Field1 = 0x2, aAffixGBIDs = new int[0] }); client.SendMessage(new ACDCollFlagsMessage { Id = 0xa6, Field0 = objectId, Field1 = 0x1 }); GameAttributeMap attribs = new GameAttributeMap(); attribs[GameAttribute.Untargetable] = false; attribs[GameAttribute.Uninterruptible] = true; attribs[GameAttribute.Buff_Visual_Effect, 1048575] = true; attribs[GameAttribute.Buff_Icon_Count0, 30582] = 1; attribs[GameAttribute.Buff_Icon_Count0, 30286] = 1; attribs[GameAttribute.Buff_Icon_Count0, 30285] = 1; attribs[GameAttribute.Buff_Icon_Count0, 30284] = 1; attribs[GameAttribute.Buff_Icon_Count0, 30283] = 1; attribs[GameAttribute.Buff_Icon_Count0, 30290] = 1; attribs[GameAttribute.Buff_Icon_Count0, 79486] = 1; attribs[GameAttribute.Buff_Active, 30286] = true; attribs[GameAttribute.Buff_Active, 30285] = true; attribs[GameAttribute.Buff_Active, 30284] = true; attribs[GameAttribute.Buff_Active, 30283] = true; attribs[GameAttribute.Buff_Active, 30290] = true; attribs[GameAttribute.Hitpoints_Max_Total] = 4.546875f; attribs[GameAttribute.Buff_Active, 79486] = true; attribs[GameAttribute.Hitpoints_Max] = 4.546875f; attribs[GameAttribute.Hitpoints_Total_From_Level] = 0f; attribs[GameAttribute.Hitpoints_Cur] = 4.546875f; attribs[GameAttribute.Invulnerable] = true; attribs[GameAttribute.Buff_Active, 30582] = true; attribs[GameAttribute.TeamID] = 10; attribs[GameAttribute.Level] = 1; attribs.SendMessage(client, objectId); client.SendMessage(new ACDGroupMessage { Id = 0xb8, Field0 = objectId, Field1 = unchecked((int)0xb59b8de4), Field2 = unchecked((int)0xffffffff) }); client.SendMessage(new ANNDataMessage { Id = 0x3e, Field0 = objectId }); client.SendMessage(new ACDTranslateFacingMessage { Id = 0x70, Field0 = objectId, Field1 = (float)(RandomHelper.NextDouble() * 2.0 * Math.PI), Field2 = false }); client.SendMessage(new SetIdleAnimationMessage { Id = 0xa5, Field0 = objectId, Field1 = 0x11150 }); client.SendMessage(new SNONameDataMessage { Id = 0xd3, Field0 = new SNOName { Field0 = 0x1, Field1 = nId } }); #endregion client.PacketId += 30 * 2; client.SendMessage(new DWordDataMessage() { Id = 0x89, Field0 = client.PacketId, }); client.Tick += 20; client.SendMessage(new EndOfTickMessage() { Id = 0x008D, Field0 = client.Tick - 20, Field1 = client.Tick }); }
public void AddNpc(BasicNPC npc) { NPCs.Add(npc); }