Exemple #1
0
        /*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);
        }