/*public static void delete_room(RoomTemplate room) * { * RoomTemplate limbo = RepositoryManager.Instance.ROOMS.CastAs<Repository<long, RoomTemplate>>().Get(VnumConstants.ROOM_VNUM_LIMBO); * * CharacterInstance ch; * while ((ch = room.Persons.FirstOrDefault()) != null) * { * if (!ch.IsNpc()) * { * room.RemoveFrom(ch); * limbo.AddTo(ch); * } * else * CharacterInstanceExtensions.Extract(ch, true); * } * * foreach (CharacterInstance och in RepositoryManager.Instance.CHARACTERS.CastAs<Repository<long, CharacterInstance>>().Values) * { * if (och.PreviousRoom == room) * och.PreviousRoom = och.CurrentRoom; * if (och.SubState == CharacterSubStates.RoomDescription * && och.DestinationBuffer == room) * { * ch.SetColor("The room is no more.\r\n", och); * build.stop_editing(och); * och.SubState = CharacterSubStates.None; * och.DestinationBuffer = null; * } * else if (och.SubState == CharacterSubStates.RoomExtra * && och.DestinationBuffer != null) * { * if (room.ExtraDescriptions.Any(e => e == och.DestinationBuffer)) * { * ch.SetColor("The room is no more.\r\n", och); * build.stop_editing(och); * och.SubState = CharacterSubStates.None; * och.DestinationBuffer = null; * } * } * } * * room.Contents.ForEach(handler.extract_obj); * reset.wipe_resets(room); * room.ExtraDescriptions.Clear(); * room.Affects.Clear(); * room.PermanentAffects.Clear(); * room.Exits.ForEach(x => handler.extract_exit(room, x)); * room.MudProgActs.Clear(); * room.MudProgs.Clear(); * RepositoryManager.Instance.ROOMS.CastAs<Repository<long, RoomTemplate>>().Delete(room.Vnum); * * // TODO: Room hash stuff here, but can be removed? * } * * public static void delete_obj(ObjectTemplate obj) * { * RepositoryManager.Instance.OBJECTS.CastAs<Repository<long, ObjectInstance>>().Values.Where(x => x.ObjectIndex == obj).ToList().ForEach(handler.extract_obj); * obj.ExtraDescriptions.Clear(); * obj.Affects.Clear(); * obj.MudProgs.Clear(); * RepositoryManager.Instance.OBJECT_INDEXES.CastAs<Repository<long, ObjectTemplate>>().Delete(obj.Vnum); * * // TODO Object hash stuff here, but can be removed? * } * * public static void delete_mob(MobTemplate mob) * { * foreach (CharacterInstance ch in RepositoryManager.Instance.CHARACTERS.CastAs<Repository<long, CharacterInstance>>().Values) * { * if (ch.MobIndex == mob) * CharacterInstanceExtensions.Extract(ch, true); * else if (ch.SubState == CharacterSubStates.MProgEditing * && ch.DestinationBuffer != null) * { * if (mob.MudProgs.Any(mp => mp == ch.DestinationBuffer)) * { * ch.SetColor("Your victim has departed.\r\n", ch); * build.stop_editing(ch); * ch.DestinationBuffer = null; * ch.SubState = CharacterSubStates.MProgEditing; * } * } * } * * mob.MudProgs.Clear(); * if (mob.Shop != null) * SHOP.Remove(mob.Shop); * if (mob.RepairShop != null) * REPAIR.Remove(mob.RepairShop); * RepositoryManager.Instance.MOBILE_INDEXES.CastAs<Repository<long, MobTemplate>>().Delete(mob.Vnum); * * // TODO Mob hash stuff here, but can be removed? * }*/ public static ExitData make_exit(RoomTemplate room, RoomTemplate to_room, int door) { var newExit = new ExitData(door, "An exit") { Direction = EnumerationExtensions.GetEnum <DirectionTypes>(door), Room_vnum = room.ID, Destination = to_room.ID, Distance = 1, Key = -1 }; var reverseExit = to_room.GetExitTo(LookupConstants.rev_dir[door], room.ID); if (reverseExit != null) { reverseExit.Reverse = newExit.ID; newExit.Reverse = reverseExit.ID; } var broke = room.Exits.Any(exit => door < (int)exit.Direction); if (room.Exits == null) { room.Exits.Add(newExit); } else { if (broke && reverseExit != null) { room.Exits.ToList().Insert(room.Exits.First() == reverseExit ? 0 : 1, newExit); return(newExit); } } return(newExit); }