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 }
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; }
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 } }
/// <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); } }
/// <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); } }
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); }
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 }