Frand Help DB #139
Aliases: Frand Help DB, Frand_Help
0 verbs · 26 properties · 0 children
Verbs
none
Properties
| Property | Definer | Flags | Owner | Value |
|---|---|---|---|---|
frand-index | #139 | rc | #36 | {"*index*", "Frand's Player Class Help Topics"} |
@find | #139 | rc | #36 | list of 7{" @find #<object> - locate an object by number", " @find <player> - locate a player", " @find :<verb> - locate a verb on an object in your vicinity", " @find .<property> - locate a property on objects in your vicinity.", " @find ?<topic> - locate a help topic on a help database.", "", "For example, '@find frand' shows Frand's number and location. '@find :jump' lists every object in the same room as you (including you and the room itself) which has a 'jump' verb. For properties and verbs, output is a list of pairs of objects: each object on which the property or verb exists, and the ancestor that actually defines it."} |
@rooms | #139 | rc | #36 | list of 7{"When you aren't in the same room with an object, you have to refer to it by number. When teleporting, that means you usually have to give your destination as a number. To avoid this, Frand's player class provides a way for you to store a database of rooms by name. If the library is in your list of rooms, you can just '@go library' to teleport there. Or '@move book to lib' to teleport an object there.", "", " @rooms - see a list of the rooms you know by name", " @addr*oom <name> <number> - remember a room by name", " @rmr*oom <name> - forget about a room's name", "", "For example, to add the kitchen to your database of rooms, type '@addr Kitchen #24'. To remove it, type '@rmr kitchen'."} |
@addroom | #139 | rc | #36 | {"*forward*", "@rooms"} |
@rmroom | #139 | rc | #36 | {"*forward*", "@rooms"} |
@join | #139 | rc | #36 | {"*forward*", "@move"} |
@go | #139 | rc | #36 | {"*forward*", "@move"} |
@move | #139 | rc | #36 | list of 10{" @move <obj> to <location> - teleport an object to a given location", " @go <location> - teleport yourself to a given location", " @join <player> - teleport yourself to a player's location", "", "You can teleport an object (if it allows this) to any location that will accept it. For example, `@move rock to #11' will teleport the rock to the closet. `@move #123 to here' will move object #123 to your location. `@go home' will teleport you home. `@join yduj' will teleport you to yduJ's location. You can also teleport an object to #-1, which is nowhere.", "", "See help teleport-messages for information on customizing the text that appears", "(both to you and to others in the vicinity) when you teleport.", "See also help @rooms for information on naming rooms for convenient movement.", "If @move doesn't work and you own the place where the object is located, try using @eject instead."} |
teleport-messages | #139 | rc | #36 | list of 16{"Teleporting using @go, @move, or @join causes various messages to appear. The messages are defined on you as properties. Here are the messages, who sees them, and when.", "", " when you teleport - yourself a player a thing", "", " you see - self_port player_port thing_port", " others see - oself_port oplayer_port othing_port", " destination sees - self_arrive player_arrive thing_arrive", " teleportee sees - victim_port object_port", "", "When you @join a player, your join message is printed to you.", "", "You can set the messages with commands like '@oself_port me is \"vanishes in a shimmering haze.\"', '@join me is \"You visit %n.\"', and so on.", "", "The messages to you are printed as they stand. The messages to others are printed after your name. If you set a message to \"\", the null string, nothing will print for that message. But if you have a non-empty message which does not include your name, then your name will be added in front of the message. You can use the usual pronoun substitutions, like '%n' to refer to the object you are teleporting. You can also use the special substitutions %<from room> and %<to room> to refer to the original and destination rooms for the teleport.", "", "If you are leaving your name out of the messages, and relying on its being inserted automatically, you have to be careful about the substitutions you use. If Frand has an oself_port message \"jumps to %<to room>.\", for example, and Frand teleports to Frand's MOOhome, the message printed will be \"jumps to Frand's MOOhome.\" My name is there, so it isn't added in. If you want to include your name as a substitution, the one to use is %t, 'this'. \"%t jumps to %<to room>.\" will work."} |
@refuse | #139 | rc | #36 | list of 63{"", "The refusal facility allows you to ignore specific actions by players. You can ignore all mail that Stupid_Jerk (#34567) sends you, for", "example, or you can ignore all whispers and pages, no matter who they are from.", "", "There are three basic refusal commands. They are explained below.", "", " @refuse <action> from <player>", " @unrefuse <action> from <player>", " @refusals", "", "The actions you can refuse are page, whisper, mail, move, join, and accept. These are explained in a table farther down.", "", "For example, '@refuse mail from Stupid_Jerk'. Any future mail that Stupid_Jerk sends you will be dropped on the floor, and Stupid_Jerk will", "be told that you refused to receive it. The refusal stays active for a week; after the week is over, Stupid_Jerk's mail will again get", "through. (If you want the refusal to last a longer or shorter time, keep on reading.)", "", "You can refuse more than one action at a time. '@refuse page whisper from Stupid_Jerk' refuses both pages and whispers.", "", "You can also refuse actions from everybody.", "", " @refuse <actions>", "", "For example, '@refuse page' refuses every page. These refusals are listed as refusals of 'everybody' when you use the @refusals command,", "below.", "", "See `help @unrefuse' and `help @refusal-reporting' for information on undoing refusals and finding out what you're refusing.", "", " - the actions", "", "The actions everybody can refuse are page, whisper, mail, move, and join.", "refuse other things as well, depending on your player class.", "", " refuse this to prevent somebody from doing this", " ----------- -----------------------------------", " page - tell you a message with the 'page' command", " whisper - tell you a message with the 'whisper' or 'murmur' command", " mail - send you a MOOmail message via @send", " move - teleport you", " join - enter the same room as you (only works in a some rooms)", " accept - hand you an object (or teleport it to you)", " flames - posts are suppressed on mail lists", " politics - set yourself `apolitical' [see `help apolitical']", " all - all of the above", "", "Refusing move is a little tricky. The player will not be able to teleport you, but you will not be able to pass through any special exits", "that the player may have programmed either. Refusing move means refusing *all* movement, including movement through programmed exits.", "Fortunately most exits are plain exits, and you will always be able to pass through them. Only specially programmed exits by the player you", "are refusing move from are barred to you.", "", "Refusing join only works in special rooms that support it.", "", " - time limits", "", "Refusals expire after a certain amount of time has gone by. Unless you say otherwise, they expire after a week. You can add '... for", "<time>' to the end of a @refuse command:", "", " @refuse <action> from <player> for <time>", " @refuse <action> for <time>", "", "For example, '@refuse join from Stupid_Jerk for 3 days'.", "", "The <time> is always a number followed by a unit, like '10 weeks' or '45 seconds'. The possible units are second, minute, hour, day, week,", "and month."} |
@unrefuse | #139 | rc | #36 | list of 15{"Syntax:", " @unrefuse <actions> from <player>", "", "If Stupid_Jerk reforms, you can change your mind. '@unrefuse mail from Stupid_Jerk' will remove the refusal.", "", "'@unrefuse' can also be called '@allow', for those who prefer English over clarity.", "", " @unrefuse <actions>", "", "If you don't mention a player, you remove only refusals that apply to everybody. '@unrefuse page' turns off any '@refuse page' command you", "gave before, but does not affect refusals of specific players. You will still be refusing pages from Stupid_Jerk, if you were before.", "", " @unrefuse everything", "", " If you '@unrefuse everything', all your refusals are removed. This command asks if you are sure before erasing them all."} |
@refusal-reporting | #139 | rc | #36 | list of 26{"[See help @refuse for a discussion of the refusal facility]", "", " @refusals", " @refusals for <player>", "", "List the players and actions you are refusing, or the players and actions that another player is refusing. For example, you can see if", "Stupid_Jerk is refusing your mail too: '@refusals for Stupid_Jerk'.", "", "Normally refusal works without your awareness. You don't even notice when Stupid_Jerk attempts to send you mail. If you would rather be", "notified when it happens (so you can thumb your nose), then do", "", " @refusal-reporting on", "", "Actually, all you need to type is '@refusal-r on'. You will see a message like 'Mail from Stupid_Jerk (#34567) refused.' as soon as", "Stupid_Jerk types 'send' in the mail editor.", "", "Refusal reporting only works for some actions. It works for page, whisper, and mail, but not for move, join or accept. Sorry.", "", "You will only be notified if you are connected when the refusal happens. If you are not connected when Stupid_Jerk tries to send you mail,", "you won't know about it, no matter whether refusal reporting is on or off.", "", "You can turn off refusal reporting with '@refusal-r off'. You can check whether it is on or off with '@refusal-r'. Here's the list:", "", " @refusal-reporting on - turn on refusal reporting", " @refusal-reporting off - turn off refusal reporting", " @refusal-reporting - see whether it is on or off"} |
@refusals | #139 | rc | #36 | {"*forward*", "@refusal-reporting"} |
refusal-programming | #139 | rc | #36 | list of 123{"", " -- -- -- refusal programming", "", "This entry explains how to program new kinds of refusal for the refusal mechanism. This information is only useful for programmers. For basic information about the refusal mechanism, read the 'refusal' entry.", "", " - making a new refusable action", "", "Making a refusable action has several steps. You have to (1) override the verb that lists your refusable actions, (2) write a verb to handle any special cases in determining when an action should be refused, and (3) write the code that does the actual acceptance or refusal of the action.", "", "You can put new refusable actions on yourself, or on a player class. If you put them on yourself, then you are the only one who can use them. If you put them on a player class, then everyone who belongs to that class can use them.", "", "I'll walk you through the example of making a refusable action 'smirk'. If you '@refuse smirk from Munchkin' then anything Munchkin tells you with the word 'smirk' in it will be refused. Since this is useless, I'll assume that you're defining it on yourself, instead of on a player class.", "", "(1) You have to make 'smirk' a refusable action. You do that by overriding your :refusable_actions verb. :Refusable_actions is a verb which returns the actions that you know how to refuse. It is a verb instead of a property so that players can add refusable actions at all levels of the player class hierarc #36hy without interfering with each other.", "", " @verb me:refusable_actions this none this", " @program me:refusable_actions", " return {@pass(@args), \"smirk\"};", " .", "", "'@pass (@args)' means 'include the actions that my parent knows how to refuse, because I know how to refuse them too.'", "", "(2) The refusal mechanism provides for special cases in deciding whether an action should be refused. None of the refusals defined on Frand's Player Class actually make use of this special case, and you probably won't have to use it either. But you still have to write a verb to deal with it.", "", "The verb should be named :refuses_action_<action>, where <action> is the action that the verb is for. In this case, it should be :refuses_action_smirk. The verb takes some arguments and returns whether the action should be refused. The details of this will someday be explained in the next section, 'fancy refusable actions', but in all simple cases the verb should simply return 1.", "", " @verb me:refuses_action_smirk this none this", " @program me:refuses_action_smirk", " return 1;", " .", "", "(3) Finally you must implement the refusal itself. The code that performs the action should call <target>:refuses_action (player, <action>). <target> is the target of the action; it is you, because others are smirking at you. 'Player' is the current player, the one who is attempting to perform the action. <action> is the action the player is attempting, 'smirk'.", "", "In this case, you want to change your :tell verb to check whether its message contains the word 'smirk', and whether you are refusing smirks from the player who's talking. It also has to do two other things: (1) inform the player whose smirk was refused, and (2) call this:report_refusal, which tests whether you have refusal reporting turned on, and if so, reports the refusal to you. The call is this:report_refusal (<player>, <message>).", "", " @verb me:tell this none this", " @program me:tell", " line = tostr (@args);", " if (index (line, \"smirk\") &&", " this:refuses_action (player, \"smirk\"))", " player:tell (this.name, \" refuses your s m i r k.\");", " this:report_refusal (player, \"You refused a s m i r k.\");", " else", " pass (@args);", " endif", " .", "", "The messages say 's m i r k' instead of 'smirk' to prevent an infinite :tell loop.", "", "It may help to study some examples. To see how whisper refusal works, read #3133:whisper. For page refusal, see #3133:receive_page and #3133:page_echo_msg. For mail refusal, #3133:receive_message. For move and accept refusal, #3133:moveto or #3133:accept (they are the same verb).", "", " - refusal data structures", "", "Refusal information is stored in four main properties, all lists.", "", " .refused_origins - who you are refusing actions from", " .refused_actions - for each, what actions you're refusing", " .refused_until - when the refusals expire", " .refused_extra - any further information about each refused action", "", "These properties are all readable and owned by Frand. You (or anyone) can see their values, but you can only change them by calling verbs for the purpose. The verbs are explained later on.", "", "Your .refused_origins property remembers who you are refusing actions from. It might have the value {#47, #34567} if you are refusing actions from Frand (#47) and Stupid_Jerk (#34567). If you are refusing actions by guests, it will have entries like \"xxP1Xw.nkQzft\". This weird string is a code word that stands for the guest's connection site; you are refusing actions not by a certain guest character, but by any guest who may connect from that site. The verb :player_to_refusal_origin (<player>) converts a player object to a refusal origin (either the same player object or a guest's site code) suitable to be stored in .refused_origins.", "", "Your .refused_actions property stores, for each origin in .refused_origins, a list of the actions you are refusing for that origin. Continuing the example from the last paragraph, if you are refusing page from Frand and page, whisper, and mail from Stupid_Jerk, then your .refused_actions has the value {{\"page\"}, {\"page\", \"whisper\", \"mail\"}}.", "", "Your .refused_until stores an expiration time for each refusal origin, in the form used by time(), the number of seconds since midnight, 1 January 1970, GMT. All actions that you are refusing from a given player expire at the same time. If you are refusing Frand until 19 December 1992, and Stupid_Jerk for seven years, your .refused_until might have the value {724763397, 928384392}.", "", "Your .refused_extra property stores any additional information needed for fancy refusals. It stores one piece of information for every action you are refusing from every player. In other words, .refused_extra contains a list of lists which are parallel to the lists in .refused_actions. None of the built-in refusals on #3133 is fancy, so for them, the extra piece of information is always 0. In the example, your .refused_extra has the value {{0}, {0, 0, 0}}. The next section explains how to use .refused_extra in fancy refusals.", "", "Another property, .default_refusal_time, stores the duration in seconds that a refusal lasts by default. This property is readable and owned by Frand. Its value is usually 604800, seven days. You can set it via the verb :set_default_refusal_time.", "", " - fancy refusable actions", "", "THIS SECTION IS NOT YET WRITTEN", "", " - selective refusal reporting", "", "If you have done '@refusal-reporting on', then you see a message when you refuse somebody else's action (for some actions). This reporting is done by the verb :report_refusal.", "", " :report_refusal (<player>, <message>, ...)", "", "The first argument is the player whose action is refused, and the rest are concatenated to form the message that you see.", "", "You can override this verb if you want more selective refusal reporting. If you're refusing pages, for example, you might find that the refusal report is just as annoying as the original page--but you still don't want to turn it off. In that case, you might decide to give no more than one refusal report per minute, using code like this:", "", " @property me.refusal_time 0", " @property me.refusal_count 0", " @verb me:report_refusal this none this", " @program me:report_refusal", " if (time() - this.refusal_time < 60)", " this.refusal_count = this.refusal_count + 1;", " else", " if (this.refusal_count > 0)", " pass (args [1], \"You've refused \", this.refusal_count+1,", " \" actions recently.\");", " else", " pass (@args);", " endif", " this.refusal_time = time();", " this.refusal_count = 0;", " endif", " .", "", "The property that remembers whether refusal reporting is turned on is .report_refusal, which may have the values 0 or 1. The property is owned by Frand, so you can't change it directly.", "", " - refusal synonyms", "", "You can give a refusal more than one name by overriding the verb :translate_refusal_synonym. The verb takes one argument, a word from the command line, and it returns a list of refusal names that the word stands for. If the word is not a synonym, :translate_refusal_synonym should return the empty list, {}.", "", " :translate_refusal_synonym (<word>) -> <list>", "", "If you want 'noise' to mean both page and whisper for you, then you'd write this. You need to pass(@args) to get the synonym 'all', which stands for all refusable actions. If you type '@refuse noises from Munchkin', the plural 's' is removed automatically, so you don't have to worry about that.", "", " @verb me:translate_refusal_synonym this none this", " @program me:translate_refusal_synonym", " return pass(@args) ||", " (args [1] == \"noise\") ? {\"page\", \"whisper\"} | {};", " .", "", " - refusing actions by classes of players", "", "THIS SECTION IS NOT YET WRITTEN"} |
@ways | #139 | rc | #36 | {"'@ways', '@ways <room>' - List any obvious exits from the given room (or this room, if none is given)."} |
@at | #139 | rc | #36 | list of 8{" '@at' - Find out where everyone is.", " '@at <player>' - Find out where <player> is, and who else is there.", " '@at <obj>' - Find out who else is at the same place as <obj>.", " '@at <place>' - Find out who is at the place.", " The place can be given by number, or it can be a name from your @rooms list.", " '@at #-1' - Find out who is at #-1.", " '@at me' - Find out who is in the room with you.", " '@at home' - Find out who is at your home."} |
@awards | #139 | rc | #36 | {"*verbdoc*", "$frand_class", "@award"} |
@sanctuaries | #139 | rc | #36 | {"*verbdoc*", "$frand_class", "@sanctuaries"} |
whois | #139 | rc | #36 | {"*verbdoc*", "$frand_class", "whois"} |
index | #30 | rc | #36 | <clear> |
index_cache | #30 | r | #36 | {"frand-index"} |
key | #1 | c | #36 | 0 |
aliases | #1 | rc | #36 | {"Frand Help DB", "Frand_Help"} |
description | #1 | rc | #36 | "A help database for $frand_class verbs" |
object_size | #1 | r | #36 | {27270, -1090650497} |
html | #1 | rc | #36 | <clear> |
Ancestry
Ancestors (nearest first): #30 Generic Help Database → #1 Root Class
Children: none