public override void ApplyRoomLayout() { this.Background = RoomBackground.PlainDirt; this.BlockedRoomExits = BlockedExits.None; this.AddRoomDecoration(RoomDecoration.FromCode(2606, 161, 91, 150, 5043)); this.AddRoomDecoration(RoomDecoration.FromCode(2501, 44, 58, 20, 5043)); this.AddRoomDecoration(RoomDecoration.FromCode(2513, 262, 111, 70, 5043)); this.AddRoomDecoration(RoomDecoration.FromCode(2602, 67, 206, 160, 5043)); this.AddRoomDecoration(RoomDecoration.FromCode(35370, 217, 138, 90, 5043)); this.AddRoomDecoration(RoomDecoration.FromCode(2595, 247, 150, 20, 5043)); this.AddRoomDecoration(RoomDecoration.FromCode(2525, 158, 47, 0, 5043)); this.AddRoomDecoration(RoomDecoration.FromCode(21, 380, 3, 65486, 5043)); this.AddRoomDecoration(RoomDecoration.FromCode(32782, 192, 210, 65516, 5043)); this.AddRoomDecoration(RoomDecoration.FromCode(14, 116, 228, 0, 5043)); this.AddRoomDecoration(RoomDecoration.FromCode(2526, 161, 53, 0, 5043)); this.AddRoomDecoration(RoomDecoration.FromCode(32789, 548, 287, 0, 5043)); this.AddRoomDecoration(RoomDecoration.FromCode(21, 656, 31, 0, 5043)); this.AddRoomDecoration(RoomDecoration.FromCode(112, 382, 64, 0, 5043)); this.AddRoomDecoration(RoomDecoration.FromCode(2605, 140, 50, 0, 5043)); this.AddRoomDecoration(RoomDecoration.FromCode(154, 626, 62, 0, 5043)); this.AddRoomDecoration(RoomDecoration.FromCode(2535, 714, 336, 0, 5043)); this.AddRoomDecoration(RoomDecoration.FromCode(2535, 717, 176, 0, 5043)); this.AddRoomDecoration(RoomDecoration.FromCode(2715, 564, 299, 0, 5043)); this.AddRoomDecoration(RoomDecoration.FromCode(2713, 612, 290, 0, 5043)); this.AddRoomDecoration(RoomDecoration.FromCode(35485, 560, 321, 0, 5043)); this.AddRoomDecoration(RoomDecoration.FromCode(49, 318, 14, 65386, 5043)); this.AddRoomDecoration(RoomDecoration.FromCode(2586, 272, 148, 0, 5043)); this.AddRoomDecoration(RoomDecoration.FromCode(2724, 155, 207, 0, 5043)); this.AddRoomDecoration(RoomDecoration.FromCode(2582, 119, 156, 0, 5043)); this.AddRoomDecoration(RoomDecoration.FromCode(2525, 144, 46, 0, 5043)); this.AddRoomDecoration(RoomDecoration.FromCode(32881, 313, 82, 65456, 5043)); this.AddRoomDecoration(RoomDecoration.FromCode(154, 366, 7, 65456, 5043)); // allow casting ? not for this room //this.AllowCasting = false; // First we build the npc face NPCFace face = new NPCFace(0, 0, 3, 0x0C, 1, 3, 0, 1, 0x0A, 0, 2, 5, 4); // then we build the body and set its location RealmOffline.NPC npc = RealmOffline.NPC.NPCFromCode(2197, 100, 100, "Blaustrom (NPC)", 10000, 10000, this.RoomID, 0x9A, 0xC4, 2, face, this); // Now we add it to room this.Npcs.Add(npc); // 0, 0, 3, 12 1, 3, 0, 1, 10, 0, 2, 5, 4); base.ApplyRoomLayout(); }
public static NPC NPCFromCode(ushort graphicID, byte girth, byte height, string name, int currentHP, int maxHP, uint inRoomNum, ushort locX, ushort locY, ushort facing, NPCFace face, Room room) { NPC n = new NPC(); n.Face = face; n.GraphicID = graphicID; n.GameID = ServerGlobals.GetNextAvailableID(); // Set up locs n room n.Location = new RoomLocation(inRoomNum, locX, locY, facing); n.Location.CurrentRoom = room; // Continue n.Girth = girth; n.Height = height; n.Name = name; n.CurrentHitPoints = currentHP; n.MaxHitPoints = maxHP; n.RaceHead = face.RaceHead; n.Gender = face.Gender; n.ChinPart = face.ChinPart; n.HairPart = face.HairPart; n.EyeBrowPart = face.EyeBrowPart; n.EyePart = face.EyePart; n.NosePart = face.NosePart; n.EarPart = face.EarPart; n.MouthPart = face.MouthPart; n.FacialHairPart = face.FacialHairPart; n.SkinColor = face.SkinColor; n.HairColor = face.HairColor; n.EyeColor = face.EyeColor; n.Inventory = BasicInventory(); return(n); }
public virtual byte[] GetRoomPacket(uint forAccountID) { PacketWriter writer = new PacketWriter(0x21); writer.WriteUInt32(forAccountID); writer.WriteInt32(0x00); writer.WriteByte(0x01); writer.WriteString(this.RoomName); writer.WriteBytes(new byte[] { 0x00, 0x17 }); // still dunno writer.WriteUInt32(this.RoomID); writer.WriteUShort((ushort)this.Background); writer.WriteByte(0); writer.WriteByte((byte)this.BlockedRoomExits); writer.WriteByte(0x00); int cast = this.AllowCasting ? 0 : 7; writer.WriteByte((byte)cast); // casting no = 7, yes = 0 // How many decorations writer.WriteByte((byte)this.Decorations.Count); //writer.WriteUShort((ushort)this.Decorations.Count); foreach (RoomDecoration dec in this.Decorations) { writer.WriteBytes(dec.Serialize()); } // How many items in room ? writer.WriteUShort((ushort)(this.Items.Count)); Console.WriteLine("Loading {0} items.", this.Items.Count); foreach (BaseGameItem item in this.Items) { ItemType type = BaseItem.GetItemType(item.GraphicID); if (type == ItemType.Container) { Container c = Container.CastFromBaseGameItem(item); writer.WriteBytes(c.Serialize()); } else if (item is Door) { Door d = item as Door; writer.WriteBytes(d.Serialize()); } else { Item i = Item.CastFromBaseItem(item); writer.WriteBytes(i.Serialize()); } } // Now all mobs, players, and npc's // Ok so we dont want to list us here or it adds a extra slot to room for npc / player but has no data afterwards // so if we are the only player we do not want to list us, we only want to list all other players ushort totalMobiles = (ushort)(this.Players.Count - 1 + this.Npcs.Count); // -1 for not you writer.WriteUShort(totalMobiles); // everyone but you. // npcs first Console.WriteLine("{0} Players.", this.Players.Count - 1); foreach (Character c in this.Players) { Account a = ServerGlobals.GetAccountFromCharacter(c); if (a.AccountId != forAccountID) { writer.WriteBytes(c.AddToRoom()); // dont add yourself twice } } Console.WriteLine("Loading {0} npcs and {1} players.", this.Npcs.Count, this.Players.Count - 1); foreach (Mobile m in this.Npcs) { MobileType type = MobileType.None; string name = BaseMobile.MobNameFromID((short)m.GraphicID, out type); if (m is NPC) { NPC n = m as NPC; NPCFace f = n.Face; if (n != null) { writer.WriteBytes(n.AppearInRoom()); if (!string.IsNullOrEmpty(n.Name)) { name = n.Name; } Console.WriteLine("Added Npc {0} to room {1} at LocX:{2} LocY:{3} Facing:{4}.", name, this.RoomID, m.Location.X, m.Location.Y, m.Location.Facing); } } if (m is Mob) { Mob n = m as Mob; // NPCFace f = n.Face; if (n != null) { writer.WriteBytes(n.Serialize()); if (!string.IsNullOrEmpty(n.Name)) { name = n.Name; } Console.WriteLine("Added Mob {0} to room {1} at LocX:{2} LocY:{3} Facing:{4}.", name, this.RoomID, m.Location.X, m.Location.Y, m.Location.Facing); } } } writer.WriteBytes(new byte[7]); byte[] room = writer.ToArray(); string fileLocation = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "loadroom.txt"); File.WriteAllText(fileLocation, BitConverter.ToString(room)); return(room); }