Beispiel #1
0
        private static void LockObject(CharacterInstance ch, ObjectInstance obj, string arg)
        {
            if (CheckFunctions.CheckIfTrue(ch, obj.ItemType != ItemTypes.Container, "That's not a container."))
            {
                return;
            }
            if (CheckFunctions.CheckIfNotSet(ch, obj.Values.Flags, ContainerFlags.Closed, "It's not closed."))
            {
                return;
            }
            if (CheckFunctions.CheckIfTrue(ch, obj.Values.KeyID <= 0, "It can't be locked."))
            {
                return;
            }

            var key = ch.HasKey((int)obj.Values.KeyID);

            if (CheckFunctions.CheckIfNullObject(ch, key, "You lack the key."))
            {
                return;
            }
            if (CheckFunctions.CheckIfSet(ch, obj.Values.Flags, ContainerFlags.Locked, "It's already locked."))
            {
                return;
            }

            obj.Values.Flags = obj.Values.Flags.SetBit(ContainerFlags.Locked);
            ch.SendTo("*Click*");
            var count = key.Count;

            key.Count = 1;
            comm.act(ATTypes.AT_ACTION, "$n locks $p with $P.", ch, obj, key, ToTypes.Room);
            key.Count = count;
        }
        public void CheckIfNotSet()
        {
            var actor = new CharacterInstance(1, "TestNpc");

            const int bitField = 2 | 4 | 8;

            Assert.That(CheckFunctions.CheckIfNotSet(actor, bitField, 16), Is.True);
        }
Beispiel #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
            }
        }
Beispiel #4
0
        private static void UnlockDoor(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 not closed."))
            {
                return;
            }
            if (CheckFunctions.CheckIfTrue(ch, exit.Key < 0, "It can't be unlocked."))
            {
                return;
            }

            var key = ch.HasKey(exit.Key);

            if (CheckFunctions.CheckIfNullObject(ch, key, "You lack the key."))
            {
                return;
            }
            if (CheckFunctions.CheckIfNotSet(ch, exit.Flags, ExitFlags.Locked, "It's already unlocked."))
            {
                return;
            }

            if (!exit.Flags.IsSet(ExitFlags.Secret) || exit.Keywords.IsAnyEqual(firstArg))
            {
                ch.SendTo("*Click*");
                var count = key.Count;
                key.Count = 1;
                comm.act(ATTypes.AT_ACTION, "$n unlocks the $d with $p.", ch, key, exit.Keywords, ToTypes.Room);
                key.Count = count;

                if (exit.Flags.IsSet(ExitFlags.EatKey))
                {
                    key.Split();
                    key.Extract();
                }

                exit.RemoveFlagFromSelfAndReverseExit(ExitFlags.Locked);
            }
        }
Beispiel #5
0
        public static void do_unbolt(CharacterInstance ch, string argument)
        {
            var firstArg = argument.FirstWord();

            if (CheckFunctions.CheckIfEmptyString(ch, firstArg, "Unbolt what?"))
            {
                return;
            }

            var exit = ch.FindExit(firstArg, true);

            if (exit == null)
            {
                ch.Printf("You see no %s here.", firstArg);
                return;
            }

            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 not closed."))
            {
                return;
            }
            if (CheckFunctions.CheckIfNotSet(ch, exit.Flags, ExitFlags.IsBolt, "You don't see a bolt."))
            {
                return;
            }
            if (CheckFunctions.CheckIfNotSet(ch, exit.Flags, ExitFlags.Bolted, "It's already unbolted."))
            {
                return;
            }

            if (!exit.Flags.IsSet(ExitFlags.Secret))
            {
                ch.SendTo("*Clunk*");
                comm.act(ATTypes.AT_ACTION, "$n unbolts the $d.", ch, null, exit.Keywords, ToTypes.Room);
                exit.RemoveFlagFromSelfAndReverseExit(ExitFlags.Bolted);
            }
        }
Beispiel #6
0
        private static void UnlockObject(CharacterInstance ch, ObjectInstance obj)
        {
            if (CheckFunctions.CheckIfTrue(ch, obj.ItemType != ItemTypes.Container, "That's not a container."))
            {
                return;
            }
            if (CheckFunctions.CheckIfNotSet(ch, obj.Value.ToList()[1], ContainerFlags.Closed, "It's not closed."))
            {
                return;
            }
            if (CheckFunctions.CheckIfTrue(ch, obj.Value.ToList()[2] < 0, "It can't be unlocked."))
            {
                return;
            }

            var key = ch.HasKey(obj.Value.ToList()[2]);

            if (CheckFunctions.CheckIfNullObject(ch, key, "You lack the key."))
            {
                return;
            }
            if (CheckFunctions.CheckIfNotSet(ch, obj.Value.ToList()[1], ExitFlags.Locked, "It's already unlocked."))
            {
                return;
            }

            obj.Value.ToList()[1].RemoveBit(ContainerFlags.Locked);
            ch.SendTo("*Click*");
            var count = key.Count;

            key.Count = 1;
            comm.act(ATTypes.AT_ACTION, "$n unlocks $p with $P.", ch, obj, key, ToTypes.Room);
            key.Count = count;

            if (obj.Value.ToList()[1].IsSet(ContainerFlags.EatKey))
            {
                key.Split();
                key.Extract();
            }
        }
Beispiel #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
        }