Example #1
0
        private static void CloseExit(CharacterInstance ch, ObjectInstance obj, ExitData exit, string txt)
        {
            exit.Flags = exit.Flags.SetBit(ExitFlags.Closed);

            var room = RepositoryManager.Instance.ROOMS.Get(obj.Value.ToList()[1]);

            if (room == null)
            {
                throw new InvalidDataException($"Room {obj.Value.ToList()[1]} was null");
            }

            foreach (var rch in room.Persons)
            {
                comm.act(ATTypes.AT_ACTION, "The $d closes.", rch, null, exit.Keywords, ToTypes.Character);
            }

            var reverseExit = exit.GetReverse();

            if (reverseExit != null && reverseExit.Destination == exit.Destination)
            {
                reverseExit.Flags = reverseExit.Flags.SetBit(ExitFlags.Closed);

                var destRoom = exit.GetDestination(RepositoryManager.Instance);
                foreach (var rch in destRoom.Persons)
                {
                    comm.act(ATTypes.AT_ACTION, "The $d closes.", rch, null, reverseExit.Keywords, ToTypes.Character);
                }
            }

            // TODO Check room for traps
        }
Example #2
0
        public static void Extract(this ExitData exit)
        {
            var room = RepositoryManager.Instance.ROOMS.Get(exit.Room_vnum);

            room.Exits.Remove(exit);
            var reverseExit = exit.GetReverse();

            reverseExit.Reverse = 0;
        }
Example #3
0
        private static void OpenDoor(CharacterInstance ch, ExitData exit, string arg)
        {
            if (exit.Flags.IsSet(ExitFlags.Secret) && !exit.Keywords.IsAnyEqual(arg))
            {
                ch.Printf("You see no %s here.", arg);
                return;
            }

            if (CheckFunctions.CheckIfTrue(ch, !exit.Flags.IsSet(ExitFlags.IsDoor) ||
                                           exit.Flags.IsSet(ExitFlags.Dig), "You can't do that."))
            {
                return;
            }

            if (CheckFunctions.CheckIfNotSet(ch, exit.Flags, ExitFlags.Closed, "It's already open."))
            {
                return;
            }

            if (CheckFunctions.CheckIfTrue(ch, exit.Flags.IsSet(ExitFlags.Locked) &&
                                           exit.Flags.IsSet(ExitFlags.Bolted), "The bolt is locked."))
            {
                return;
            }

            if (CheckFunctions.CheckIfSet(ch, exit.Flags, ExitFlags.Bolted, "It's bolted."))
            {
                return;
            }
            if (CheckFunctions.CheckIfSet(ch, exit.Flags, ExitFlags.Locked, "It's locked."))
            {
                return;
            }

            if (!exit.Flags.IsSet(ExitFlags.Secret) || exit.Keywords.IsAnyEqual(arg))
            {
                comm.act(ATTypes.AT_ACTION, "$n opens the $d.", ch, null, exit.Keywords, ToTypes.Room);
                comm.act(ATTypes.AT_ACTION, "You open the $d.", ch, null, exit.Keywords, ToTypes.Character);

                var reverseExit = exit.GetReverse();
                if (reverseExit != null)
                {
                    var room = exit.GetDestination(RepositoryManager.Instance);
                    foreach (var vch in room.Persons)
                    {
                        comm.act(ATTypes.AT_ACTION, "The $d opens.", vch, null, reverseExit.Keywords, ToTypes.Character);
                    }
                }

                exit.RemoveFlagFromSelfAndReverseExit(ExitFlags.Closed);

                // TODO Check for traps
            }
        }
Example #4
0
        /// <summary>
        /// Was formerly toggle_bexit_flag
        /// </summary>
        /// <param name="exit"></param>
        /// <param name="flag"></param>
        public static void ToggleFlagOnSelfAndReverseExit(this ExitData exit, ExitFlags flag)
        {
            exit.Flags = exit.Flags.ToggleBit(flag);

            var reverseExit = exit.GetReverse();

            if (reverseExit != null && reverseExit != exit)
            {
                reverseExit.Flags = reverseExit.Flags.ToggleBit(flag);
            }
        }
Example #5
0
        /// <summary>
        /// Was formerly remove_bexit_flag
        /// </summary>
        /// <param name="exit"></param>
        /// <param name="flag"></param>
        public static void RemoveFlagFromSelfAndReverseExit(this ExitData exit, ExitFlags flag)
        {
            exit.Flags = exit.Flags.RemoveBit(flag);

            var reverseExit = exit.GetReverse();

            if (reverseExit != null && reverseExit != exit)
            {
                reverseExit.Flags = reverseExit.Flags.RemoveBit(flag);
            }
        }
Example #6
0
        private static void BashSomething(CharacterInstance actor, ExitData exit, SkillData skill, string arg)
        {
            if (CheckFunctions.CheckIfSet(actor, exit.Flags, ExitFlags.Closed, "Calm down. It is already open."))
            {
                return;
            }

            Macros.WAIT_STATE(actor, skill.Rounds);

            var keyword = exit.Flags.IsSet(ExitFlags.Secret) ? "wall" : exit.Keywords;

            var chance = !actor.IsNpc()
                ? Macros.LEARNED(actor, (int)skill.ID) / 2
                : 90;

            if (exit.Flags.IsSet(ExitFlags.Locked))
            {
                chance /= 3;
            }

            if (exit.Flags.IsSet(ExitFlags.BashProof) ||
                actor.CurrentMovement < 15 ||
                SmaugRandom.D100() >= chance + 4 * (actor.GetCurrentStrength() - 19))
            {
                Bash(actor, skill, arg);
                return;
            }

            BashExit(exit);

            comm.act(ATTypes.AT_SKILL, "Crash! You bashed open the $d!", actor, null, keyword, ToTypes.Character);
            comm.act(ATTypes.AT_SKILL, "$n bashes open the $d!", actor, null, keyword, ToTypes.Room);
            skill.LearnFromSuccess(actor);

            var reverseExit = exit.GetReverse();

            BashExit(reverseExit);

            var destination = exit.GetDestination(RepositoryManager.Instance);

            foreach (var ch in destination.Persons)
            {
                comm.act(ATTypes.AT_SKILL, "The $d crashes open!", ch, null, reverseExit.Keywords, ToTypes.Character);
            }

            actor.CauseDamageTo(actor, actor.CurrentHealth / 20, (int)skill.ID);
        }
Example #7
0
        private static void CloseDoor(CharacterInstance ch, ExitData exit, string firstArg)
        {
            if (exit.Flags.IsSet(ExitFlags.Secret) &&
                !exit.Keywords.IsAnyEqual(firstArg))
            {
                ch.Printf("You see no %s here.", firstArg);
                return;
            }

            if (CheckFunctions.CheckIfNotSet(ch, exit.Flags, ExitFlags.IsDoor, "You can't do that."))
            {
                return;
            }
            if (CheckFunctions.CheckIfNotSet(ch, exit.Flags, ExitFlags.Closed, "It's already closed."))
            {
                return;
            }

            comm.act(ATTypes.AT_ACTION, "$n closes the $d.", ch, null, exit.Keywords, ToTypes.Room);
            comm.act(ATTypes.AT_ACTION, "You close the $d.", ch, null, exit.Keywords, ToTypes.Character);

            var reverseExit = exit.GetReverse();

            if (reverseExit != null)
            {
                reverseExit.Flags.SetBit(ExitFlags.Closed);
                foreach (var vch in exit.GetDestination(RepositoryManager.Instance).Persons)
                {
                    comm.act(ATTypes.AT_ACTION, "The $d closes.", vch, null, reverseExit.Keywords, ToTypes.Character);
                }
            }

            exit.SetFlagOnSelfAndReverseExit(ExitFlags.Closed);

            // TODO Check room for traps
        }