예제 #1
0
        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();
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }