Home
LambdaCore Database Programmer`s Manual Version 1.3
Contents
1. amp amp 45 446 1 47 48 1 3 8 Verbs for Manipulating Locks and Keys The following utility verbs defined on the 1ock utils class can be used by the pro grammer to manipulate locks on objects and key expressions num eval key list key obj who Verb This verb evaluates the key expression key in the context of the candidate object who It returns 1 if the key will allow who to pass otherwise it returns 0 The simple examples below are intended to show the ways in which this verb can be invoked Verb Call Returned eval key 35 35 1 eval key i 35 35 0 eval_key 35 123 1 The key expression is given as a list in the format described above list parse_keyexp stringkeyexp obj who Verb This verb parses the string keyexp and returns the internal representation of the expression for use with lock_utils eval_key It is used for example by the verb player lock to parse the text given by a player into a key expression to store on the key property of an object none init scanner Verb none scan token Verb none match object Verb none canonicalize spaces Verb none parse E Verb none parse A Verb These verbs are used by the verb lock_utils parse_keyexp to perform it s parsing functions They can be called from user programs but are really part of the parse keyexp verb string unparse key list keyexp Verb This verb takes the key exp
2. dobjstr player tell Showing help on Vin topic NV Chapter 1 The LambdaCore Classes 62 player tell endif endif help print topic topic First the verb help find topics is called This takes the topic given by the player and searches through the help database index for possible matches This returns a list of possible topics in the variable topics If the list is empty than no help was available for the topic given by the player and the verb ends If the list contains more than one item the player is told what matched and asked to be more specific next time If just one help topic was found it is printed out using the verb help print topic The help class has three verbs defined on it which are used to implement the help system They are described in detail below list none find topics string handle Verb This verb is used to search the list of topics on the help class for one that matches handle The list of topics is given by the list of properties defined on the help class In the simple case if the handle matches one property name exactly then this name is returned The player is allowed to omit the leading on commands This is checked for in this verb by adding an temporarily and then checking for this in the topic list along with the un prefixed handle If no direct match is found the verb looks at all the properties stored on the help class and tries to make a m
3. list varg Verb This function returns a list of the return values of a specified verb verb on each of the objects in the list objs varg is optional and defines the arguments to verb it defaults to the empty list If verb does not exist on one of the objects an error occurs Chapter 1 The LambdaCore Classes 75 As an example the following code will list all the connected players using the title verb on each to do so It uses the map verb function to generate a list of each of the player s title strings cp 1ist utils map verb connected players title player tell Connected players are string utils english list cp list assoc target list list num index Verb This verb requires list to be a list of lists It returns the first element of list whose own indexth element is target If not supplied index defaults to 1 Consider the following examples Verb Call Returned assoc 1 112 3 1 2 1 2 assoc 1 2 3 2 1 assoc 1 Consider a more interesting example Suppose that you have a list of heights for a number of players in the following format namel height1 ftnameN heightN and you want to search through the list to find out how tall a particular player is This can be done using the following code assuming that the variable heights is the list of name height pairs and ourplayer is the player whose height you wish to look up player tell ourplayer
4. The code in question is shown below who tell string utils index delimited pagemsg player name player psc player name pages msg Here the string utils index delimited verb is used to check if the player s name occurs in the string we sent to the recipient as pagemsg If it does then we print the player s subjective pronoun capitalised If it doesn t we print the player s name rename Verb This verb is a player command used to change the name and aliases of an object or verb It first tries to parse the supplied direct object as a verb reference If this succeeds then it tries to match the object and then the verb name If both are found the indirect object string is used to set verb name If the direct object string cannot be parsed as a verb then a match is attempted using the string as an object name If this succeeds then building utils set names is used to set the name and aliases of the matched object Any permission errors ambiguous object specifications or syntax errors are flagged appropriately num accept obj thing Verb none This verb is used to determine if a player will allow thing to be moved into his her inventory The verb defined for the player class allows anything that is not a player to be moved into the player s possession You could override this verb to restrict the sorts of things you would want other people to be able to place on your person tell Verb This verb s
5. str from_seconds num secs Verb This verb is used to return a string showing time in units of days hours minutes or seconds from seconds 0 returns 0 seconds from seconds 2 returns 2 seconds from seconds 61 returns a minute from seconds 130 returns 2 minutes from seconds 7000 returns an hour from seconds 1000000 returns 11 days num find prefix str subject list choices Verb This verb is used to find a string from a list of choices which has the prefix subject For example if choices hat hand face help then find prefix f choices 3 find prefix g choices 0 find_prefix h choices ambiguous_match find_prefix he choices 4 find_prefix ha choices ambiguous_match str trim str text str what Verb This verb is used to trim leading and trailing characters from the string text what is the optional character to trim and defaults to space trim help returns help trim help returns help trim gt gt help lt lt gt returns help lt lt str capitalise str text Verb str capitalize str text Verb str cap fast str text Verb This verb is used to capitalise its argument Note that it depends on strcmpO returning the difference of the first non matching letters Chapter 1 The LambdaCore Classes 69 cap_fast hello returns Hello cap_fast Ezeke returns Ezeke str strip_chars str subject str
6. take succeeded MSE occo c ridieroane eee kiai ias 50 78 52 93 H ER TEE d E EE 59 tol p 20 the subject er Re oe et tae eee ES 52 EE ene ege Se ndr RUP EA ri E A scot hee ws weeded Mada ud T Eent eren Ze ae Meer planets acca s 52 ORS A gt Me wpe E a a 47 ET TEE 86 To vale EE 70 GED E ERE 68 U Unparse key ch D Er EEDE EE eE eE 78 UR TEE 48 E EE 16 Uppe rcase s ies dees EE re V yactim ejection mSg i p RR Un Rn ns Le W RIEDER ee Sien Kg Sag a ERG 24 WhDerelsciciseBePR ee eet edd A Ee RE 31 whereis location msg esee 39 WHO ei oti edd MN ode tye eine LEES 48 who location HSE e gt er RP REG 38 whodunnl i2 1243 63a et ee did bid 30 WOES usse icu p Ceemvekes ui tiens 69 working ON oa vent Sane Gta eine cece tees Sone oe 46 WICEYUO bic ue eee Ben aera eS eee EE 59 X XCOS 220 BRPTDSU RR BG cd nbIp E nea nd 83 EE pedet Pbi breite de Ais 83 Property Index Property Index A beer be err eitie St erter ae Seed meren Lennin RTE A ambiguous matchD e bisects d ge niv arrive mSE e gd beak ee eee Ree B blessed object e niceties e erie ea blessed CAS leis oe os cien te ewe ates doh ena deeds building utilsS 4222 09e e as C code uUutilS l 222299 aca bk da ean a had command ubilsS c Gh cs abana aed are aoe Eum due cs CONTAINGET ie oS ew IT i UTE Eee EE eve drop failed MSE orreee neato aie ERE drop succeeded msg sss eee has dumpo3nterval 2 2 22 4
7. a list of items one per player currently composing a letter The index of the player in the writers list is used to locate the correct entries for that player s message in all the other property lists subjects Property This is a list of strings Each string contains the subject line for a message currently being composed abortable Property This is a list of boolean number values If set the relevant message can be aborted by the player using the abort command in the mail room If not set the message cannot be aborted places Property This is a list of room object references When a player enters the mail room using one of the mail composition commands his her current location is stored here When the player has finished in the mail room s he is returned to the original room recipients Property This is a list of lists of object references referring to players Each entry in the list looks like the following playerl player2 playerN The message currently being composed will be sent to playerl thru playerN when it is sent messages Property This property stores the actual message text being composed by the player Each entry in the list is a list of strings one per line of the message writers Property This is the list of players currently engaged in composing a message in the mail room Every time a player enters the mail room using one of the mail commands his her object reference is added to thi
8. is list_utils assoc ourplayer heights 2 ft high Suppose that heights is defined as follows blip 2 Ezeke 6 Geezer 10 For different lookups we would get the following results ourplayer Results blip blip 2 Ezeke Ezeke 6 Fred num iassoc target list list num index Verb This verb works similarly to string_utils assoc except that it returns an index into list rather than the actual matching element from list If no matching element is found it returns 0 Consider the following examples Verb Call Returned assoc 1 2 3 1 2 2 assoc 1 2 3 2 1 0 assoc 1 0 0 list sort alist list list num index Verb This verb requires list to be a list of lists It sorts the list into ascending order using the indexth element of each list element as the sort key For example Chapter 1 The LambdaCore Classes 76 Verb Call Returned sort_alist 5 2 3 2 3 5 sort_alist sort_alist 2 3 5 1 3 6 2 5 1 2 3 3 6 list map pronoun sub list objects string Verb This verb returns the result of calling string utils pronoun sub for each object in the list objects on the string supplied For example where 28 is named blip and 35 is named Ezeke our_objs 28 35 our msg Hello n our output 1ist utils map pronoun sub our objs our msg player tell lines our output Executing this short program
9. 4 and returns the number of seconds elapsed since 00 00 00 num sun num time Verb I can t work out what this verb is supposed to do I include the code for those interested persons who might find it useful r 10000 h rx rt r 2 time args time args 1 t time 120 86400 240 s 5 time 14957676 31556952 438291 phi s t this corr cs trig utils cos s spss trig utils sin phi trig utils sin s h r r cpcs trig utils cos phi cs h r rj return this stsd cs this ctcd cpcs this ct spss h r rj num from ctime str string Verb This verb given a string such as that returned by ctime returns the corresponding time in seconds since 1970 time returned by time or E DIV if the format is wrong in some essential way Note that ctime doesn t return a time zone yet it arbitrarily decides whether it s standard or daylight savings time The following properties are defined on the time utils class stsd Property ctcd Property ct Property corr Property These properties are used by the mysterious time_utils sun verb Becuase of this I have no comment to make on what information they contain or how they are used dayabbrs Property This property contains a list of day abbreviations such as are found in the string returned by ctime They are used to produce an index into the property days that contains the full names of each day o
10. LambdaCore Classes 42 page_echo_msg Property This property holds the message sent to a player that pages you when you are logged in The default message is Your message has been sent whereis_location_msg Property This property holds the message sent when someone locates you through the whereis command The default message is AN CAS is in 41 Z 1 This might expand out to something like Blip 35 is in The Toilet 96 who_location_msg Property This property holds the message printed in a who list to inform other player s of your location The default value is 41 which returns your current location mail_notify Property mail_options Property mail_forward Property These properties define your MOO mail environment They are discussed in more detail in the section on the MOO Mail system edit_options Property This property defines your MOO editor environment It is discussed in more detail in the section on the MOO editor 1 2 The Mail Room Class To be updated for MOO 1 3 This class provides the mail facility used within LambdaMOO Some would say that to provide an electronic mail facility within a game is slightly insane but it is very useful for passing around game related messages Coupled with the use of a suitable client program for example the excellent mud el with MOO Mail extensions sending MOO mail can be easy and efficient It also allows players to separate their MOO based mail
11. Look zelt verb on the room If the object is the blessed_object for this room then the blessed_object property for the room is reset to nothing For further details on blessed objects refer to the description of room bless_for_entry none exitfunc obj thing Verb This verb is invoked by the LambdaMOO server when an object is moved out of a room as part of the action of the move primitive The action defined for the room class is to do nothing This verb and the enterfunc verb can be used for a variety of effects that need to take note of objects moving in and out of rooms For example consider a torch object that casts light on it s surroundings When the torch is moved out of a room the light that is casts moves with it This can be tackled using the room s exitfunc which could check if the object leaving is a torch and if it is the room could become dark Similarly when the torch enters a room the enterfunc can be used to detect this and brighten the room accordingly num remove_exit obj exit Verb This verb performs the opposite function to the add_exit verb It removes exit from the room s list of exits If it is not possible to remove exit from the room s exit list normally because the object that invoked the verb does not have the required permission then the verb returns 0 Otherwise a successful addition returns 1 Chapter 1 The LambdaCore Classes 15 num remove entrance obj entrance Verb T
12. MOO code property reference returning object string prop name string for a successful parse and false otherwise It always returns the right object string to pass to for example room match_object The following examples show how this verb works parse_propref me returns 0 parse propref me name returns me name parse_propref room location returns 3 location parse_propref thing returns 0 thing parse_propref player tell returns 0 parse_verbref str string Verb This function parses string as a MOO code verb reference returning object string verb name string for a successful parse and false otherwise It always returns the right object string to pass to for example room match_object The following examples show how this verb works parse_verbref me returns 0 parse_verbref me title returns me title parse_verbref room blow_up returns 3 blow up parse_verbref thing returns 0 parse_verbref player tell1 returns player tell show object obj obj Verb show property obj obj str pname Verb show verbdef obj obj str vname Verb These verbs are the ones used by the show command to display details of an object a property on an object or a verb on an object Below is some sample code used to display details on the paranoid property of ezeke fullpropref ezeke paranoid here player location prop code_utils p
13. Sais e epe FS 24 OnoOgo HSg cionenreenret shane ema eee hee 23 otake failed mSg dices ee ta eae AR 21 otake succeeded neg 21 ownership quota v drigai rokit e gees 39 P page absent weg 41 page echo msg oi secs desea p EE IR sues 42 page origin MSE erg STE d SET eR RA 41 E DEE 41 password eri vue Le EPOR 41 perm Util Si cei bib S ia pau soe Pees 56 places indc ebe bsc 54 player icsseeddbden ip bre pe EE RA 55 PLAYVSr ClasS vens psa do pee ea edad desl 57 Player Start j xerit aree 57 pp t 38 88 DOC vb dais eh hata eile edema 40 88 pj E 40 88 PC isdem suo edet odd Seta acs Sten as 40 88 DD MCCC 40 88 ppp IPC 40 88 PIs Gee P 40 88 oq C 40 88 POF ieee lB REC bred rar 55 EE EE EE 87 EE be Abert iim Ars 39 87 95 roCcipientS ceeredbes ti eens E 48 54 TOPUY COS seeders ses Ee teh ae ech he ee Pes 48 residents orrore Siesta whee es dedu ed dna dcn 18 responsible cea e tages hae edes pee d 41 LOOM ni eo Tues due em icai eeh 56 IO00t CLlASBSz iu pets RR Beet a aras 56 SOUECO 050 owes bep iaceqe iu bue TW Dr E 23 String UCU Sis ceed sea haa See an eE a 56 SUS oo brat ESSA vieni anten cece sees 86 S bJeCtS i os Lio dpeshR RES UET EG Nd 48 54 take failed msg iii cocci eta ens 21 take_succeeded_msg 0 0 000 21 e EE 60 EE 56 victim TEE 18 welcome message en n nn 57 whereis location msg esses 42 who locatio
14. This is indexed from a list of abbreviated day names stored in a property list called dayabbrs str month time Verb This verb takes a time specification in time and returns the full name of the month This verb expects time to be the result of a either the time primitive or ctime In the first case time is a number In the second case time is a string For example gt time_utils month time 4 July The names for the months are stored on a property list called months on the time_ utils class This is indexed from a list of abbreviated month names stored in a property list called monthabbrs string ampm time num precision Verb This verb takes a time specification in time and returns string containing a time in the form h h mm ss fa m p m time is either the result of the time or ctime primitives and is either a number or a string respectively If given precision specifies the accuracy required 1 Only the hours are returned 2 The hours and minutes are returned 3 The hours minutes and seconds are returned If not given then precision defaults to minutes For example Verb Call Returns ampm time 8 58 p m ampm time 1 8 p m ampm time 2 8 58 p m ampm time 3 3 58 23 p m Chapter 1 The LambdaCore Classes 86 num to_seconds str string Verb This verb takes a string in the form hh mm ss for example created using the expression string_utils explode ctime time
15. amp valid o gagobjs o gagobjs else player tell Could not find args i as either a player or an object endif endfor Chapter 1 The LambdaCore Classes 26 none changed 0 for p in gagplayers if p in player gaglist player tell You are already gagging p name else changed 1 player gaglist setadd this gaglist p endif endfor for o in gagobjs if o in player object_gaglist player tell You are already gagging o name else changed 1 player object_gaglist setadd this object_gaglist 0 endif endfor if changed fork 0 this listgag O endfork endif Note that you can only manipulate your own gag list Other objects cannot change your gag list Another interesting point is the call to listgag after the new objects have been added to the gag list to print the current gag list The code first tries to match the argument list against the players in the database using string_utils match_player Then for each argument given if a match was not found using that method a match for an object in the room is tried using the utility routine string_utils match_object If this fails the argument is rejected This results in a list of objects to be added to the player s gag lists Any objects already in the player s gag lists are removed from the to do list If this yields an empty to do list the command is aborted Any objects that are not already in the gag
16. as appropriate string utils pronoun sub replaces the string 4o with the value of this property Chapter 1 The LambdaCore Classes 40 pp Property This property is used to hold the possessive pronoun set to either his her or its as appropriate string utils pronoun sub replaces the string Ap with the value of this property pr Property This property is used to hold the reflexive pronoun set to either himself herself or itself as appropriate string utils pronoun sub replaces the string Ar with the value of this property Pq Property This property is used to hold the possessive pronoun in it s noun form set to either his hers or its as appropriate string_utils pronoun_sub replaces the string Aq with the value of this property psc Property This property is used to hold the subjective pronoun set to either He She or It as appropriate string utils pronoun sub replaces the string AS with the value of this property poc Property This property is used to hold the objective pronoun set to either Him Her or It as appropriate string utils pronoun sub replaces the string 40 with the value of this property ppc Property This property is used to hold the possessive pronoun set to either His Her or Its as appropriate string utils pronoun sub replaces the string AP with the value of this property prc Property This property is used to hold the reflexive pronoun set to either H
17. entrances list of the dest room object nogo msg Property This is the message printed to an object if it is unable to move through the exit onogo msg Property This is the message printed to everyone in an object s location if it is unable to move through the exit arrive msg Property This is the message printed to an object using an exit when it arrives in the destination room Chapter 1 The LambdaCore Classes 24 oarrive_msg Property This is the message printed in the destination room of the exit when something is moved through it oleave_msg Property This is the message printed in the exit s source room when an object moves through the exit leave_msg Property This is the message printed to an object using the exit as it leaves the source room 1 1 5 The Player Class The player class is the one of the basic classes of the virtual world A player object is the same as any other object except that has it s player bit set This allows the server to connect a user to that object A number of player commands are defined as verbs of the player class as well as other useful functions none g et Verb none take Verb This verb is called in the situation when another object tries to get or take a player Given that this is a fairly nonsensical thing to do it is not allowed Suitable messages are sent to the object that invoked the action and the player object none i nventory Verb This verb is used to tell a pl
18. follows the parser s search path for verbs looking for a match with verb If one is found this means that the parser rejected the match because the argument s did not match Having established this explain syntax compares the user input to the verb ar gument definition and prints some explanatory text to try and help the player enter a correct command This verb usually catches mistakes such as entering the wrong preposition or forgetting to use an indirect object It is provided as part of the room Chapter 1 The LambdaCore Classes 17 class to allow other room subclasses to provide more specific help for certain verbs defined in their rooms if the user should make an error trying to use one of them none huh2 list args Verb This verb is called by the huh verb to handle commands that the parser couldn t sensibly pass to another object In the case of a room the verb covers a number of different possibilities First the sentence is checked to see if it matches any of the exits that lead out of the room This is done using the match_exit verb Ifa matching exit is found then the invoke verb for the exit is called which causes it to be activated This provides for a flexible approach to handling exits If this does not produce a sensible match then the verb is treated in one of two ways If it starts with an at character then we attempt to match the remainder of the verb in the sentence with a message field on the dire
19. for each different gender If a gender is given by gender utils genders x then the corresponding gender pronouns is given by gender utils pq x Property This property holds the reflexive pronouns for each different gender If a gender is given by gender utils genders x then the corresponding gender pronouns is given by gender_utils pr x Property This property holds the capitalised subjective pronouns for each different gender If a gender is given by gender utils genders x then the corresponding gender pronouns is given by gender utils psc x Property This property holds the capitalised objective pronouns for each different gender If a gender is given by gender utils genders x then the corresponding gender pronouns is given by gender utils poc x Property This property holds the capitalised possessive pronouns for each different gender If a gender is given by gender utils genders x then the corresponding gender pronouns is given by gender utils ppc x Property This property holds the capitalised possessive pronouns in their noun form for each different gender If a gender is given by gender utils genders x then the cor responding gender pronouns is given by gender utils pqc x Property This property holds the capitalised reflexive pronouns for each different gender If a gender is given by gender utils genders x then the corresponding gender pronouns is given by gender utils prc x Chapte
20. for the room This causes player to be added to the mail_room writers property In addition to this the recipients list is added to the list mail_room recipients The original location of the player before being moved to the mail room is stored in the mail_room places list The subject line and message text for this message is set to the empty string in the property lists mail_room subjects and mail_ room messages The message is also marked as being abortable by adding a 0 to the mail room abortable list This is done because there is no warning given for deletion of an empty message If the player is already in the list of people composing messages in the mail room then the listset primitive is used to change the recipients subject and abortable property for the message associated with the player This means that a player can only be composing one message at a time Once the above has been performed the player is moved from his her current location to the mail room A suitable message is sent to all the objects in the player s current location telling them what has happened Throughout all user interaction in the mail room the position of the player object reference in the mail_room writers list is used to index into all the other property lists used when dealing with a mail message recipients obj player Verb This verb returns the list of recipients for the message being composed by player message_so_far ob
21. from other more important mail LambdaMOO does not yet provide any facility for reading input from a player For this reason programs such as the mail room use a pseudo room to catch player input For example when you start to compose a mail message you are transported to the mail pseudo room Once there anything you enter is trapped by various verbs in the room and stored in the message you are entering This method means that commands used in the mail composition environment are ac tually verbs on the mail pseudo room Mail messages are actually stored on the player object in a property list called messages Each message occupies one entry called a mail record in the following format num date from to subject linel lineN Apart from the num field these are all strings The num field stores the message number for each message When a new piece of mail arrives it is allocated a message number 1 Chapter 1 The LambdaCore Classes 43 greater than the last message in the player s mailbox If the mailbox is empty the message is numbered 1 Each message retains it s unique message number until it is deleted using rmmail The number of messages in the mailbox is given by the length of the messages list A current message pointer is maintained in the property player current_message This is used to determine which message to print when the read command is used The MOO Mail system is implemented by
22. last_connect_time property and places a particular list depending on whether the player conncted within the last day week or month or longer When all players have been placed in one or other of the lists they are printed out along with the exact connect time as found in the player s last_connect_time property none n orth e east w west s south Verb none northwest northeast southwest southeast Verb none up down Verb In general when a player wants to move out of a room using an exit the recognition of the exit name is done by the huh and huh2 verbs for the room However to cope with the most common cases verbs are defined for each of the compass directions and up and down The code for these verbs is the same and is shown below as an example exit this match exit verb if valid exit exit invoke elseif exit failed match player tell You can t go that way else player tell I don t know which verb you mean endif What this does is check to see if the exit is defined for the room If it is then the exit is invoked If not a suitable message is sent to the player This case is included simply to speed up processing for certain common cases none explain syntax string verb Verb This verb is used to provide helpful information to the player should s he fail to enter a command correctly It is called by the huh2 verb as a last resort to process the player command The verb
23. line number Verb none rem ove string line number Verb Deletes the given line number from the note Only the owner of the note may modify it Negative numbers can be given to delete lines counting from the end of the note hence delete 5 from note would delete the 5th line from the bottom list text Verb Returns a list of strings containing the message text on the note Called by the verb r ead Chapter 1 The LambdaCore Classes 60 num is_readable_by obj PLAYER Verb This verb uses the lock_utils eval_key verb to evaluate the key stored in the encryption_key property and determine if the note is readable or not by the player This verb will return a 1 if it is readable or a O if it is not none encrypt string ENCRYPTION Verb This verb will encrypt a message so that it can only be read if the encryption con straints are satisfied Refer to the lock command for details on the syntax for encryption Encryption is stored in the encryption_key property You must have permission to do this none decrypt Verb This verb will remove any existing encryption from a note allowing it to be read by anybody You must have permission to do this The following properties are defined for the note class encryption_key Property This is encryption string for the note It is formed within the verb encrypt by pars ing its input with lock_utils parse_keyexp The verb is_readable_by then uses this to determi
24. list are added to it Finally this listgag is called to print the list if it has changed listgag Verb This verb is used as a player command to list the objects in the player s gag lists If the gag lists are not empty a list of the names of the players in the gaglist property on the player and the objects in the object_gaglist property are produced The verb uses a test based on the callers primitive to determine if it is being called by another verb or invoked by a player as a command If callers returns a null list and hence is not TRUE then the verb is being invoked as a player command This affects the text printed by the verb In addition the verb checks through the gag lists of all the player s in the database to see if the player who invoked the command is listed in anyone else s gag list If this is the case a list of the people doing the gagging is printed Chapter 1 The LambdaCore Classes 27 none none none none none none none ungag args Verb This verb is used as a player command to remove an object from one of the player s gag lists if it is a member The dobjstr is used as the name of the thing to remove from the gag list If this name is everyone then the player gag and object gag lists are reset to the empty list Otherwise if a valid direct object has been referred to by checking dobj that is used as the object to gag Otherwise an attempt is made to match the dobjs
25. map EE 74 MAP ver De ccs todtiesent eee dete es RES 74 EN dE 6 65 80 Match xit i il e b EXPE Pebebber 10 match TISE n ee nr d b REP enu otc des 82 match A 010 dg eb sede ee DIS EDS 81 match object c ert eb ll 78 match playert 22 ios ee se DE PE be UU 69 match SUP 3BB oir s ee 70 MATCH verbu eve quu papa quida e ache 82 message SO faf 2 wei abate 49 message with headers 47 52 Dont esses Seated Sie phe esp ues 85 MOV Gs reci d RR RR ER RR UR FD ALS AE 22 E EE eee ERE 5 20 N n orth e east w west s south 16 name JliSt j 24 20 90 PY XE i3 v RET 48 53 ICD CT 27 BOBEO NBSB Ge EE SE 29 northwest northeast southwest southeast 16 O OATTIVG 5g iit 2c BER DX ve REA Laas 23 object match failed Rte 73 odr p failed mee AEN ERE eS 20 odrop succeeded msg esses 20 oejection MSE 1 226 Ras eee Ra Rede md Ze Oleave JiSE c eie reve SEN rE ETE 23 ONO fomir PPM 23 OPED es aea e an at ari ese E Hid das ges 58 otake failed mSE 2 9 xil bRLE e AE 20 otake succeeded msg 20 92 P PUT einasi alg au cet n wd bey eei RE RE ES 5T pn o PUDE 28 page absent msg e t v4 PP bee ed E 39 page echo HSE 2 2 9 ele pe REPRE SER 39 page origin MSP cepe de E 39 parserA onesie er epa E PT E neas 78 parse commahnd eere ba Rh hd 70 parse E hiss EELER EE IER s 78 parse invok6 c12c3 o e he niorir iR 46 parse keyexp i 6 ng taun ba IUE ERE VA 78 parse msg headers cre
26. match_string Jack waves to Jill waves to iN Jack RR str uppercase lowercase str string Verb This verb returns either the uppercase or lowercase version of string as appropriate No properties are defined on the string_utils class 1 3 2 The Permissions Utils Class The permission utilities class perm_utils provides a couple of useful verbs for dealing with permissions of objects i e the ability of a player to read or access another object num controls obj who obj what Verb Returns true 1 if who is the owner of what or if who is a wizard else returns false 0 str apply str perms str mods Verb This verb is used to modify the permissions given in perms with the modifiers shown in mods The following modifiers are possible negate a permission add a permission remove a permission Consider the following examples Verb Call Returns perm utils apply rw w ay perm utils apply rw r w perm utils apply rw w rt perm utils apply rw un perm utils apply rw x xen perm utils apply rw x rwx No properties are defined on the perm_utils class Chapter 1 The LambdaCore Classes 72 1 3 3 The Code Utils Class The code utils class is somewhere to hang code functions These are defined as verbs of the code_utils class list list none none none parse_propref str string Verb This function parses string as a
27. no contents list is printed As usual this verb can be overridden to provide special effects For example you could apply a filter so that certain objects do not appear in the printed contents of a room even if they appear in the contents list This can be use to hide objects for example as part of a puzzle or to vary how objects are seen for example if you are looking through water at something obj match object string name Verb This is the verb used to search the player s locale for an object that has the name or pseudonym name This verb handles mapping of me to the player object here to the player s location as well as the use of lt number gt to refer to a particular object If none of these cases match the verb searches the room contents and the players contents or possessions for a match If a match is found then the unique object number is returned If name matches more than one object then ambiguous match is returned If no match is found then failed match is returned The verb match object is the one to use to map names of objects to object numbers when referring to objects that the player is able to see in his current location This includes objects that the player might be carrying but does not include objects that are contained in other objects none Qexits Verb This verb is a player command used to print a list of the exits in a room It can only be used by the owner of the room The verb simply runs thr
28. permutations 3 2 6 list simpson list num a num b list num f a num f atb 2 num Verb LI Given two endpoints a and b and the function s value at a atb 2 and b this verb will calculate a numerical approximation of the integral using Simpson s rule The answer is returned in the form integer part fractional part list abs num x Verb This verb returns the absoluate value of x Note that this is available in the server as the abs primitive so this verb is redundant list parts num n num q num i Verb This verb returns a decomposition of n by q into integer and floating point parts i gives the number of digits after the decimal point If not given i defaults to 5 For example Verb Call Returned trig utils parts 5 1 5 0 trig utils parts 5 2 2 50000 trig utils parts 3 2 2 1 50 Chapter 1 The LambdaCore Classes 85 1 3 12 The Time Utilities The time utilities class time_utils provides a few useful functions for dealing with dates and times The following verbs are provided str day time Verb This verb takes a time specification in time and returns the full name of the day This verb expects time to be the result of a either the time primitive or ctime In the first case time is a number In the second case time is a string For example gt time_utils day time 4 Friday The names for the days are stored on a property list called days on the time_utils class
29. printed to the objects in the destination room No messages are printed if an object is moved If a permission problem is found it is reported to the player who typed the command par anoid Verb This verb is used to set the player s paranoid level as stored in the paranoid prop erty Three different levels are available e 0 The normal case where no paranoia is applied to any messages sent to the player e 1 In this case the anti spoofer is enabled and the value of the lines property on the player is set to 20 This determines how many messages are stored on the player for checking with the check command e 2 In this case every message sent to the player is prefixed with the name and object number of the sender This is the immediate mode of the anti spoofer mechanism s how Verb This is a player command used to examine other objects in detail It returns details of an object s owner location parent and all the verbs and properties defined for the object along with their values if permissions allow desc ribe Verb This is a player command used to set the description of an object It takes the dobjstr and tries to match it with an object If a match is found then the object s describe verb is invoked with the dobjstr as an argument Chapter 1 The LambdaCore Classes 38 none none none none none create args Verb This verb is a player command used to create an instance of an obj
30. recursively to evaluate the descendants of each node in the tree of objects The string space is the visual indentation factor used to represent different levels in the hierarchy none count Verb This verb is a player command used to print the number of objects owned by a particular player If no player name is given in the dobjstr then the number of objects owned by the player invoking the verb is printed In both cases the verb this count_2 is called to do the actual counting and displaying none count_2 num count num start Verb This verb is called to count the number of objects owned by the player indicated by dobj The verb first checks the current remaining time available for it to execute in If it is in danger of running out of time it forks another count_2 verb to carry on from where it left off This enables the verb to count lots of objects in a large database Foe each object if it is valid and the owner is the same as dobj then the count is incremented This is performed for every object in the database from start to the last item When all the objects in the database have been looked at the total is printed Chapter 1 The LambdaCore Classes 34 num set_name Verb none none none none none none none none none This verb is used to set the name of the player object It overrides the verb root_ class set_name to provide some extra checking needed for player objects This checking basically stop
31. string is You can t pick that up Chapter 1 The LambdaCore Classes 22 odrop_succeeded_msg Property This message is the text sent to other people in the thing s location when the thing is dropped by another object The default value of this string is drops Zt odrop failed msg Property This message is the text sent to other people in the thing s location when an attempt by another object to drop the thing fails The default value of this string is tries to drop t but fails drop succeeded msg Property When an object successfully drops a thing this message is sent to inform the object of success The default value of this message is You drop t drop failed msg Property When an object unsuccessfully tries to drop a thing this message is sent to tell the object that the attempt failed The default value of this string is You can t seem to drop 4t here 1 1 4 The Exit Class The exit class is the other type of object used to construct the fabric of the virtual world You can imagine an exit to be a flexible tube connecting two room objects Each exit object goes in one direction only It leads from a source object to a destination object Note that it takes no virtual time to traverse an exit When an object moves through an exit it moves from one room to another instantaneously The verbs defined for the exit class are fairly simple and obvious Several messages are defined as properties on an
32. the game administrators to quality control the things that are placed in the database With no argument the player s quota is displayed taken from the property ownership quota If an argument is given in the dobjst it is taken as a player name and matched to find a player object reference If one is found and the user is a wizard then the value of that player s ownership_quota is returned Otherwise a permission denied message is returned none realm args Verb This is a player command used to examine the object hierarchy The arguments can specify the players whose objects are to be shown the root object number to start from and a list of objects to miss from the tree search Firstly the verb parses the arguments to determine the root to start from the players whose objects we are intersted in and any objects that are to be ignored Any ancestors of the root are printed by a short loop with the owner appended in square brackets The verb this realm2 is called to produce the hierarchical list of objects to printed A summary of the number of objects in the list and how many are owned by the player is printed at the end list realm2 obj root list owners string space list missing Verb This verb puts toegther a number of lines of text indicating the object hierarchy from the root object downwards Only objects owned by people in the owners list are included Objects in the missing list are excluded The verb is called
33. the huh verb could detect this and provide a useful response that would help the player construct the correct sentence The following section lists the verbs defined for the room class Those verbs which are more properly described as player commands are detailed in a preceding section none confunc Verb This verb is called by the LambdaMOO server when a player connects in a room The action coded into the room class simply shows the player what the room looks like using the Look self verb of the room and tells everyone else in the room that the player has connected Chapter 1 The LambdaCore Classes 9 none none none none none none disfunc Verb This verb is called by the LambdaMOO server when a player disconnects from the game The room class definition of this verb moves the player home if s he is not already there using the moveto verb on the player One possible enhancement of this verb already implemented in some MOOs is to include a time delay between disconnection and movement of the player to his her home This would allow some tolerance of disconnection due to network problems say string message Verb This verb provides one of the basic ways in which players communicate The action of the say verb is very simple it tells the player what s he has just said and tells everyone else what the player said The text spoken is passed to all the objects in a room not just the players through the te11 ver
34. the property list mail_room places This verb causes that location to be looked up and the player is returned to his her original location A suitable message is sent to the objects in the player s original location to inform them that s he has returned from the mail room look self Verb This verb overrides the room class definition This is done to inhibit the room name and contents list being printed when the player uses the look command Instead this verb uses mail room description as help text which is sent to the player using root class tell lines help Verb This verb is a player command invoked to get some help on the mail room facilities This results in the mail room look self verb being called to print the help text stored in the mail room description Note that this overrides also the LambdaMOO help system abort Verb This is a player command used to abort composition of a message and throw the text away A check is made to see if the message is abortable If it is then the player is sent back to his her original location and the message is destroyed using mail_room destroy If this message is marked as being non abortable the player is given an Are you sure message The mail room abortable property is used to provide a safety net for players Typing abort once will not throw away the message unless it is empty num abortable obj player Verb none This verb is used to return the abo
35. this to mean 999 1001 That is players could only use the exit if they were or were carrying either 999 or 1001 There is one other kind of clause that can appear in a key expression object This is evaluated by testing whether the given object is unlocked for the candidate object if so this clause is true and otherwise it is false This allows you to have several locks all sharing some single other one when the other one is changed all of the locks change their behavior simultaneously The internal representation of key expressions is stored in the property key on every object 1 3 7 1 Key Representation For Locks Objects are represented by their object numbers and all other kinds of key expressions are represented by lists These lists have as their first element a string drawn from the following set ee gen For the first two of these the list should be three elements long the second and third elements are the representations of the key expressions on the left and right hand sides of Chapter 1 The LambdaCore Classes 78 the appropriate operator In the third case the list should be two elements long the second element is again a representation of the operand Finally in the case the list is also two elements long but the second element must be an object number As an example the key expression 45 FE 7446 amp amp 47 48 would be represented as follows amp amp
36. to remove objects which are sent to nothing and players which are sent to player_start The verb first matches the supplied object with something in the room If a match is found and the player controls the current room then the ejection messages are printed and the victim s eject verb is invoked to actually remove the object string ejection_msg Verb string oejection_msg Verb string victim_ejection_msg Verb These three verbs return the messages used by the Geject mechanism The code for the verb is shown below as it illustrates how to deal with multiple messages with a single verb Chapter 1 The LambdaCore Classes 18 set_task_perms caller_perms return string utils pronoun sub this verb Note the permission setting at the start of the verb This is necessary because the verb is owned by the Wizard and hence would have permission to read the ejection messages on any object By restricting the permissions of the verb to those of the verb that called it this verb restricts who may access the ejection messages on objects The following properties are defined for the room class victim ejection msg Property This is a string containing the message sent to objects that are ejected from a room by the owner It is sent to the victim by the room s eject verb ejection msg Property This is a string containing the message sent to the owner when they eject an object from the room It is printed by the room s e
37. verb is called to do the actual counting and displaying of objects audit_2 num count num start Verb This verb is called by the audit command to print the objects owned by player given in dobj In a similar way to count the verb first checks how much time it has left If it might run out then it forks another occurrence of itself to carry on auditing where it left off A loop is entered running from start to the last item in the database Each object in the database is looked at If it is valid and the owner matches the dobj then the object name and reference number are printed and the count is incremented When all the objects in the database have been covered the total count is printed out eject Verb This verb is a player command used to remove objects from rooms or the player s inventory T he indirect object is used to specify what the direct object is to be ejected from The special cases of me and here are caught and handled Similarly the case where the direct object is me is also handled If neither of the special cases match the direct and indirect object are matched on to give an object reference to use Suitable error messages are printed if a match is not found If matches are found then a sequence of message printing is started The indirect object s victim ejection msg verb is invoked and the returned result printed to the victim The string returned by the indirect object s ejection m
38. verb is to allow you to specify particular objects in situations where a normal match would return ambiguous_match This verb uses index to do it s matching and so returns objects which partially match string num match_verb str verb obj what args Verb This verb returns 1 if verb is found on the object what The code for this is shown below vrb args 1 what args 2 ret what vrb args 3 return ret E VERBNF Note that the verb being matched is executed with the args given but the result returned by the verb is lost If the verb is not found then 0 is returned list match list str string list where Verb This verb returns a list of objects taken from the list where that match with string The aliases property of each object is checked to see if it can be matched against string If it can then it is added to the returned list This verb is used in cases where you wish to know all the objects that match a particular string This verb uses index to do its matching and so returns objects which partially match string 1 3 11 The Trigonometric Utilities This class provides various numerical routines including trigonometric routines gener ation of number sequences and permutations and combinations The trigonometric routines all take a parameter x in degrees Result returned are to four decimal places multiplied by 10000 so that they can be represented by numbers For example Verb Call Resu
39. verbs dark Property If set to a non zero value then this property inhibits display of the contents of a room when the room look self verb is invoked It can be used for example in rooms where a large number of objects are likely to be located that you do not wish to see for instance a limbo type room where sleeping players and lost objects reside If the dark is set to zero then the contents of a room are displayed when room look self is invoked ctype Property This property determines the format of the room contents list as printed by the verb room look self It can take a value between 0 and 3 An example for each of the contents formats is given below 0 Traditional TinyMU format Contents Wizard a newspaper a fruitbat zapper 1 Enhanced TinyMU format Wizard is here You see a newspaper here You see a fruitbat zapper here 2 All in one format You see Wizard a newspaper and a fruitbat zapper here 3 The default objects and player descriptive format You see a newspaper and a fruitbat zapper here Wizard is here 1 1 3 The Thing Class The thing defines verbs and properties for objects that exist in the virtual world This class includes everything that is not a player room or exit For example the classes container and note are descended from the thing class The two basic operations that can be performed on a thing are picking it up and putting it down Two verbs are defi
40. with radar sights based on the generic zapper class In this case the test fails because the children of the super zapper class are not first generation descendants of the original generic zapper class A better way to code this test is to look at the ancestors of the objects and see if the generic zapper class is numbered amongst them If this is the case then we can definitely know who is armed and who isn t Chapter 1 The LambdaCore Classes 80 list descendants obj object Verb Returns a list of all this object s descendants going down the object hierarchy obj has_verb obj object string vname Verb This verb returns the object number of object if it defines the verb vname If object does not define vname then the object number of any ancestor of object that does define the verb is returned If the verb is not defined on object or any of it s ancestors then 0 is returned obj has_property obj object string pname Verb This vernb returns 1 if object has a property pname else it returns 0 1 3 10 The Matching Utilities The matching utilities class match_utils provides several useful verbs for matching strings to objects The following facilities are provided obj match str string list where Verb This is a general purpose matching verb It tries to match string against the list of objects in where if string does not match any of the special cases listed below me This matches with the value of t
41. would produce the following output run test program 4 Hello blip Hello Ezeke list slice list list num index Verb This verb returns a list of the indexth elements of the elements of list If index is not given it defaults to 1 For example Verb Call Returns slice 1 2 3 4 5 6 1 3 5 slice 1 2 3 4 5 6 2 2 4 6 slice tt No properties are defined on the list_utils class 1 3 6 The Building Utils Class This class provides a couple of utility functions used in building rooms and exits in the core database structure The verbs provided are used mainly by the building command dig although they can of course be used by other verbs none set_names obj object string spec Verb The function is used to set both the name of an object and any aliases that the programmer needs It expects 2 arguments first the object reference whose name is to be set and then a string which contains the name and any aliases as a comma delimited string none make_exit string spec obj source obj dest Verb This is a function that is used to create a named exit with given source and destination rooms The code will do a protection check to verify that an exit can be created and which if any links specified can be made Chapter 1 The LambdaCore Classes 77 The following will try to create an exit called Out owned by the calling player and then link that exit to 25 as the source exit
42. 1 118 does not exist 28 blip 0 This could be used in the following way in the implementation of a hop command defined as a verb on a player bop lt any gt here player location victim here match dobjstr if command_utils object_match_failed victim dobjstr player tell You bop dobj name over the head dobj tell player name bops you over the head here announce_all_but player dobj player name bops dobj name over the head endif none player_match_result list results list strings str prefix Verb This verb is used to inform the player of the results of trying to match the player names in string with players in the database It assumes that results are the result of a string_utils match_player strings and prints out nasty messages to the player concerning strings that didn t match with any player in teh database It returns a list in the following format our_result playerl playerN Chapter 1 The LambdaCore Classes 74 where our result is an overall result set to true if some string didn t match followed by the object reference numbers of players that matched An optional third argument prefix gives an identifying string to prefix to each of the nasty messages For example supposing there are only players named blip and blipster in the database Results Strings Ret Player Sees nothing George 0 nothing failed_match Geo
43. 9p ew cease RATS 13 BUEN sis n nd nels aaah ER E dae 60 Verb Index C CAaNONICALIZE space S cds eee sew er eet 78 Cap fast cedri duh m eek oa weed eS 68 cap property onti EEEE Ge ees 69 CapitaliS6 p alicia e boe ere REG 68 capitalize cereri 9 pip e EX eed ee rs 68 E ibl HOES wt ME ade aa p Eris 67 check answer fl gS l12kzco ems 48 lasse s 2 4 b rp RR bleed aah eer DEN 38 clear abort ble o m d a RP 52 CLOSE E 58 EE deeg E E eens 70 combinati on8 B 8 0 RR RPSL RISE 84 Confunc us Desig ales Rip vo pror eae dates 8 31 contase boo e e Ee 79 eier 254a EP ERR E val COS pac techie od eae nee IL MARE 82 GOUID 2 it oss ses taies acted cine tienda ities bassin Aen eee 33 OEP Opi EUMD 20 57 ENEE ER e EE 60 re p Et AARTE Rer RR PRSE db Ree cs 59 descendants eisien tal et a Enes een aes 80 descrlb6 eed tae CER S RU E be d eds 4 desScrlptlOH 26seerbebg sv eEE RO EXE Uere 4 destroy ieiwecRu Reg pre eor dbi eds 52 e OR 9 31 EE 83 drop failed Sg 92 9 ss ee ee ne nae 20 drop Sncceeded meg os cei cee sse s 20 CJCCH oves hedge E P ERE RHUERELI es 7 ejection mnSg lex n obe aad dead aa 17 ET 9 50 Emote said die aee pie oud des Fe Sd nde alone 9 encryptcleie vete Med ie seat bee be RES ES 60 english liSt oo lio RR RES 68 E se e ge eds gare ee ekere os 14 48 EE 59 e val Key l o ee E e etc ace CEDE 78 OXAM ING oss aad deeb ea hat ER sale wholes 6 OXItfUDhC is dE
44. Communications are secure is printed and the player can breath easily ish Chapter 1 The LambdaCore Classes 37 none none none none none che ck list args Verb This is a player command used to check the origin of the last few messages received by the player The args list can contain the number of lines to print as the first element followed by a list of player names Each player name in the list is a person to be trusted unless the name is prefixed by an exclamation point in which case the person is not to be trusted The verb starts by building up a list of trusted and mistrusted individuals based on the names given on the command line Then it runs through last n messages in the player s responsible property list checking the origin of the messages using the this whodunnit verb with the trust and mistrust lists Any dubious messages found are printed along with details of who sent them move Verb This is a player command used to move objects from one location to another The direct and indirect object strings are used to match an object and location to move to The moveto verb on the dobj is invoked to move it to the iobj location If the location changes and the object is a player then the message blip disappears suddenly for parts unknown is displayed in the player s location before the move took place Similarly at the new location the message blip materializes out of thin air is
45. LambdaCore Database Programmer s Manual For LambdaMOO version 1 3 July 1991 Mike Prudence blip Simon Hunt Ezeke Floyd Moore Phantom Kelly Larson Zaphod Al Harringtom Geezer Copyright 1991 Mike Prudence Simon Hunt Floyd Moore Kelly Larson Al Harrington Copies of the electronic source for this document can be obtained using anonymous FTP on the Internet At the site belch berkeley edu the files are pub moo LambdaMO0 LambdaCoreProgMan several different file formats are provided including Texinfo plain text and Postscript Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies Permission is granted to copy and distribute modified versions of this manual under the con ditions for verbatim copying provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one Permission is granted to copy and distribute translations of this manual into another lan guage under the above conditions for modified versions except that this permission notice may be stated in a translation approved by the author Introduction 1 Introduction The LambdaCore database provides the facilities needed to make a LambdaMOO server useful for Multi User Adventuring If you compare the LambdaMOO server to a piece of computer hardware then LambdaCore is the operating system need
46. Se EE ae eels 14 52 91 explain syntax ge e EE IE ER 16 explode i ice E gedisesegae ig es 65 F factorral 120 ib Geet eka e edie dt 3 eS 83 PL DONACCH oii e delet ented erties Sree eeeiadns 83 PANG REES A dd apt Ki 68 e Ke BEE EE 62 find verbs EUREN cick 3 d ees 73 fix current message sess 233 45 from Ctimes4 2 pP d hinreichend 86 from Listesi 2e RP esed 65 from Seconds cep pe le AS 68 from Ehe ee aerer M er dee PEU Rd ud 65 G BRC en BEER EE 20 24 57 Bag Doocsil e E IE EROS Sean S erRE 30 geometriC cviloperede dej e ue EUR Da RA 83 Bi Ve 252iieieemrekesr sent EPI PCS qa reru ee 27 EO aiid hays ee E ded oues 13 H hakid HEEN 2r h s property ces dE iseyi 80 has VST Dis a cased ep Renee obe ed RAE RUE eh 80 WOU E 51 61 h c P 30 LEET 10 e KEE aor eee ne EUIS I7 I i nyentOZy ssisenprese tae DEn p SA eens oe 24 SE T5 InkSert iilisnildne ee fede eee ehaned 57 index delimited er gege ee 70 Init Scanner vec e ded bea eR DIU e 78 init SesSTOn ee eU beh dod aa dered ehh ae AT INVOKES 2 zeejwec a pre PUO e AN DUI RE gat 22 is openable by ices lex eer 58 is readable by ee exam Ev 60 is nlocked fOr 2 9 4 REPE AY 7 Verb Index L Leger See e 23 left Mt page teka nirp E ERE a eddies 67 Eenelter a ee a Sao LS LOOK SEVP 2 2 x ee 5 11 24 51 M lake exit 2i isilsgunac wed RIA RR pecus esr v ets 76 make message 12 363 9 be eee 48 53 nap pronoun eben dE EEN E ye 76
47. arse_propref fullpropref if prop player tell Could not parse string else obj here match prop 1 if obj lt 0 player tell Could not match prop 1 else code utils show property obj prop 2 endif endif Chapter 1 The LambdaCore Classes 73 none find verbs containing str pattern num start obj num count Verb This verb prints to the player the name and owner of every verb in the database whose code contains pattern as a substring It starts at the object number start obj as a number not an object and goes to the end of the database count specifies how many verbs have been found so far Because it searches the entire database this function may not be finished when it returns it may have forked a task to continue the job For example code utils find verbs containing show property 0 0 Jjit4 O0s how line 18 Wizard 2 1 3 4 The Command Utilities Class The command utilities class command_utils provides a couple of useful verbs for deal ing with player commands as follows num object match failed obj result str string Verb This function tells the player of a failed match and returns true if so If result is valid it returns false without telling the player anything For example where 118 has been recycled Result String Ret Player sees failed match blip 1 I see no blip here ambiguous_match blip 1 I don t know which blip you mean 118 a
48. atch using index between the handle the handle with an prepended and all the property names Every possible match is returned by this verb so that the help command can give the list to the user If no matches are found an empty list is returned print index Verb This verb is used to print an alphabetical list of help topics as given by the properties stored on the help class The code for this function is shown below as it illustrates one method of sorting strings in MOO using lists topics setremove properties this summary buckets abcdefghijklmnopqrstuvwxyz else bucket length buckets 1 counts names for i in 1 else_bucket names names counts counts 1 endfor keys names count 1 for name in topics if mame amp amp index name 1 Chapter 1 The LambdaCore Classes key name 2 length name else key name endif k index buckets key 1 else_bucket bucket keys k count counts k i 1 while i lt count amp amp key gt bucket i i i 1 endwhile names listset names listappend names k name i 1 k keys listset keys listappend keys k key i 1 k counts listset counts count 1 k endfor sorted for i in 1 length names sorted sorted names i 2 counts i endfor sorted sorted n length sorted 4 su string_utils for iin 1 n player tel
49. ayer what s he has in his her pockets The code for the verb provides the best documentation so it is printed below Note the use of the thing title verb to get the name of an object if length player contents player tell You are carrying for thing in player contents player tell thing title endfor else player tell You are empty handed endif none wh isper Verb This verb is used to send secret messages between two players as if they were whis pering to each other The way this works is slightly the reverse of what might be expected because the whisper verb on the person being whispered to is the one that is invoked The message referred to by the dobjstr is printed to the recipient with suitable text surrounding it to indicate that is it a whisper none look self Verb This verb overrides the root class definition to provide an indication to other players of whether this player is currently active or not It uses pass O to allow the Chapter 1 The LambdaCore Classes 25 none parent class to print a description and then looks at the connected players list to determine if this player is currently connected If not then the text He is sleeping is printed If the player is connected and has been idle for less than 60 seconds then the string He is awake and looks alert is printed If the player is connected but has been inactive for more than 60 seconds the string He is awake but has been starin
50. b This verb will lock the container with object The container can only be opened if the player is holding object or the object is the player trying to open the container The container will remained locked until it is unlocked see below none unlock_for_open Verb This verb will remove the lock set by unlock for open It can only be run by the owner of the container num is openable by obj PLAYER Verb This verb uses the 1ock utils eval key verb to determine if the container can be opened by the player The verb will return 1 if the player has permission to open the container and 0 otherwise none close Verb This is the opposite of open If the pipe is already close an error message is printed none tell contents Verb This verb displays the contents of the container If the container is empty the message It is empty is displayed none set opened int number Verb This verb is called by open and close with the arguments 1 and 0 respectively The property opened is set to either 1 opened or 0 closed none opacity int number Verb Opacity determines when if you can look at the contents of the container There are three levels of opacity O transparent 1 opaque 2 black hole When the opacity is set to 0 you can see the contents when the pipe is open or closed When the opacity is set to 1 you can only see the contents when the container is open If opacity is
51. bdaCore Classes 31 none none none If this is not the case the verb sets the home to the default player_start and stops with a suitable message Having decided that the player has a valid home s he is not already in the verb uses player moveto to send the player to the home location If this doesn t work checked by comparing the player s home with the player s location after the move then for some reason the player s home location has not allowed him her to enter A suitable message is printed and no further action is taken sethome Verb This verb is a player command used to set the player s home to be the his her current location You can only set your home to a room if the room will accept you determined by checking the room s accept verb This allows builders to restrict which rooms may be used by players as their homes If the room does not allow the player to set it as his her home a suitable message is printed to inform the user of this fact Otherwise the player s home property is set to the player s current location confunc Verb This verb is called when the player connects to the LambdaMOO server It can be used to perform actions that should be done every time the player logs in to the MUD This is much the same idea as having a cshrc or kshrc file that is activated when you log into a UN X account The verb defined for the player class is listed below news check this for x in
52. bject string would match more than one item The string number is something like first second or dst 2nd These two forms can be combined as show in the examples below Here we assume that wizard 2 is carrying two newspapers with object numbers 10 and 23 Wiz ard is currently standing in a room with object reference 11 The verb calls are made by the Wizard so that referring to me or my refers to the wizard Verb Call obj match nth str string list where num n me here i player wizard wizard 2 my newspaper wizard s newspaper wizard s newspaper 2 wizard s first newspaper 2 wizard s second newspaper 2 first newspaper 2 first newspaper 10 23 second newspaper 10 23 Returns 2 11 nothing 4 failed_match 2 10 failed_match ambiguous_match 10 23 failed_match 10 23 Verb This verb is used to match the nth occurrence of string in the list of objects given in where This verb is used for example by match_utils match to pick out one particular object from a list with more than one possible match This verb looks at the aliases property of each of the objects in the where list and returns the nth match If there is no nth match then failed match is returned Chapter 1 The LambdaCore Classes 82 The idea behind this
53. bs on the objects in the room By overriding this verb it is possible to provide all sorts of effects that work on everything said in the room For example you could redirect messages to other rooms or repeat messages to provide cavernous echoes emote string message Verb This verb is used for the pose type of interaction with other players It functions in a similar way to the say verb but instead places the player s name at the front of the text The actual output is done in two stages The emote verb is responsible for telling the player the action s he has just performed The emote1 verb is then called to tell the other objects in the room of the pose action This provides a two stage mechanism either or both of the verbs can be overridden to provide special effects emotel string message Verb This verb is invoked by the emote verb to send the emote text to the other objectss in the room By overriding this verb it is possible to create special effects for emote ac tions that are only seen by the other people in a room emote1 uses room announce to send it s message announce string message Verb This verb is a general purpose verb used to send a message to every object in the room except the player that invoked it This is intended to be the way other verbs pass messages to objects in a room For example when an exit is activated it uses announce to inform the other players in the room of what has happened annou
54. ci ci Perii ati ee ends 48 parse propref 5 Eege ia eS 72 parse recipientS s eee ern eae 48 parse verbref 9 e pb pa RR i 12 prio EE 84 pauseg ciilslemcc0i eee ee EE 50 permutationsS sessnicbkedecrsWebt Wes 84 player match result edd ENEE runi 73 POW rosita pina Gimni tu aoak ii EEE Eaa E 83 pri nt xe bau pA a AT PHANG chy 2c teats md nt bd pides Aa 50 print index ood sr enii eiei nce arate 62 print mBE i2 gie ree Pike 47 50 print topYC 2i 2c cide eis 4cee E uer REUS 63 pronoun su b welt Y v ue ek ete ness 66 Q QUIT S eost degen eg GE 35 R Tread roroi irten i pinan idua naea a aea a 59 Ie HOye v1 dedu gd rbd aden e 57 realm2 2 99 244L ve e pg E 33 receive message ce eee eee 32 45 r cipient names gm y EYES 48 50 rOCIDiOntSi L pleb obs bbs eee I 49 ENEE osnan senie aean as 7 15 23 EEN e Eer ee Ae 59 remove entrance o exam ERR 14 remove E 14 Ireply tO 2 ew hese pidaded wid Yeats des 48 Verb Index Set NAMES iis d ba i See a Onis EV aee GI ee EE EE EE set Opened A arasi Pa ed Era SEC E DOE oie ie ene REP EPE TIRE EAS 47 show object is aies eaa egu mac da ee ed Show property ic 84 inti ja ee pres show verbdef eee Gee he Ee IEEE ShHOWLIStS 5245445404290 S428 G9 ESE beRRBR ag EE Char S sew Aere EE SUDE SCE ie see ae EY dae re XR rd eae Subj ect ldem rex Rr ex d yx bares s bsC rib6 2 sc3d aka bREGS bee hens take failed mSg m e erre
55. ct object A message field is a property whose name ends in msg If a match is found then this is treated as a field setting command This approach is used to avoid having to define a verb for every message field that can exist on an object It also allows players to add extra message fields to objects simply by ending the name of the property with msg For example if you define a message on an object called foobar msg then you can set the message with the command foobar lt object gt is lt message text gt If the verb does not start with an at character then we call the explain_syntax verb This tries to match the verb with a verb defined on the player room direct object if any and indirect object if any If a match is found the syntax of the verb ie number and type of arguments and prepositions is checked and a useful message sent to the player This approach is taken to provide flexibility By not placing this sort of code within the server the LambdaMOO administrator has the choice of changing the way erroneous commands are handled One application could be an augmentation of the basic huh action to log failed commands in a list somewhere This mechanism long used in other MUDs can provide a builder with an idea of what other players have tried and failed to do in his or her areas none eject object Verb This verb is a player command used to remove unwanted objects from places that you own It can be used
56. dobj name hi iobj name AT iobj name ht this name AT this name A xyz who xyz A Oyz who xyz str space num num str str 67 himself herself itself Himself Herself Itself capitalised capitalised capitalised capitalised capitalised Verb This verb returns a string of num occurences of str str is optional and defaults to space space 8 returns space 8 z returns zzzzzzzz Space 4 lt gt returns lt gt lt gt lt gt lt gt str right str text num len str fill Verb This verb is used to right justify text in a string of length len fill is the optional fill character which defaults to space This function calls string utils space described above It is interesting to note that text need not be a string as tostr is applied to it before justification right help 9 returns right me 9 returns right 200 9 returns right 1 2 9 returns str centre str text num len str fill help kkk kkk 200 list Verb This verb aka string_utils center is used to centre text in a string of length len fill is the optional fill character which defaults to space string_utils space described above centre help 9 returns centre me 9 returns centre 200 9 returns centre 1 2 9 returns str left str text num len str fill help Mm See aaa ek 20 Qokek list Thi
57. e the default the tell_contents verb produces the following output You see a newspaper and a fruitbat zapper here Wizard is here This format provides the separation of player objects from other objects and provides the list in a way that fits in with the idea of a virtual reality It is easy to read and looks natural If the ctype value is changed to 2 the following is printed You see Wizard a newspaper and a fruitbat zapper here This format treats players and objects the same and is useful if you wish to hide the fact that an object is not a player or vice versa Chapter 1 The LambdaCore Classes 11 With a ctype value of one the following is seen Wizard is here You see a newspaper here You see a fruitbat zapper here This format provides the advantage of having each item on a separate line although it does mean that rooms with a large number of objects in might have excessively long contents lists Finally with a ctype of zero the following is seen Contents Wizard a newspaper a fruitbat zapper This is the sort of listing obtained in traditional TinyMU games It benefits from clarity but is not as natural as any of the other forms If a value of ctype is set that is outside of the range zero thru three then no contents list is printed This can be useful if you want to handle the room contents listing as part of the description of the room Also if the dark property of a room is set to a non zero value then
58. e Ree ur E edit OptiONS s e sr A dale ote rs edutOE titties ga ua ben dorados E EU Fera omn ejection mSgioceeLesexesc 43 ex ey crie encryption Key i ec l4 er pb dee ERE entrancesS oii e eT Aes ae eRe IG 94 faired match vo wr RD RI Ere 56 fre Ontry lij0s6valb9ees ru re PIRE de ea 18 gaglliSt o 20 ss Eae EE porcus s A1 Eend6rusisozini p Rita Dia MEPE DEAE RR CAR 39 genders 6 eds pg sides SARA ee Bi d e pnus 87 gripe recipients ge srami eridi 56 help iisesmzseidda cer eg Dc ep iir be dee 55 hiuc D E 40 KOY Luo cece picasa ee Be og hei Rae eg 8 last connect time eiris 39 leave HSg i i4 da SE OL bee ne ig 24 DGC CCP es ance Maras Rae Rb QUEDA d 56 Jaunes eld ore so ed cep b bv pancis ed er 41 Ji8St 0tllSg 55 2er Ghi ana e dd dole od 55 Tock AGS WSs cobi ted biben ii ns 55 mail forward sr mr E ed 42 nail notify vue iri e E REPENS UEG 42 E DEE EE 42 mail rOOm ee le ees ees 14 x wur Y e RE 55 NeSSageg irienesicaduen eaten qe denies 39 54 monthabbrs ceLec4cr294 d REPRE A e ar ds 87 e ei TEE 86 NEWS st cacweannesne ss eU nhan A e nares 56 NOO m8Bg ci bi pU edipi eed aed 23 EE sone aa ai ee ee uf alot me icq s 56 Property Index O E HBSgollornehtef hide 40er ER oiataws 24 object pgagliSt i a gd EEN 41 object E tans sor ako bRiedu ie 55 odrop failed msg 9 RR ds 22 odrop succeeded ueg rrerceirii tarii rert 22 OCJECELON MSE olg dud e RE ER ER 18 Ol6av Ng dE wie bode ba
59. ecipients recips pos player tell Your message is now to this recipient_names player Each name in the argument list is matched to a player name If there is no match the name is rejected from the list of recipients and further processing is aborted If there is a match the player object reference is added to the list of recipients If there is an ambiguous match the name is ignored and further processing is aborted Valid names are added one by one to the recipient list for the message list make message obj player list to string subj list msg Verb This verb returns the message as it will be sent to the recipients in the list to It takes the arguments given and puts together a list of strings that gives the current message being written by player In addition to the supplied arguments the date and sender s name are added to the message as header string name list list names Verb This verb returns an english style list of the names in names none send message obj from list to string subj list msg Verb This verb is used to actually send a mail message to the players given in the to list of recipients If you wish to send mail from another verb this is the verb to use The arguments given are passed to mail room make message for formatting and then sent to each of the recipients in turn Chapter 1 The LambdaCore Classes 54 The following properties are defined for the mail_room class Each property contains
60. ect Look self uses description to obtain the text to display none describe value Verb The describe verb is used to set the description property of an object This is only allowed if we have permission determined using the perm utils controls verb By overriding this verb and the description verb it is possible to completely change the representation of an object description This is done invisibly to anyone outside the object as long as you adhere to the same interface to description and describe Chapter 1 The LambdaCore Classes 5 none look self Verb The 1ook self verb on any object is used to tell another object what this object looks like in detail This verb makes use of the description verb on the object to obtain a string or list of strings to print It would be possible to override this verb to produce a special description for an object However any other verbs that use the description verb of the object will not see the extra information added by the overriding function The room class overrides this verb with code to print the room name and a list of objects that are in the room none tell string strings Verb This verb is used to send a message from one object to another The root class definition of this verb tests to see if the object is a player and if it is uses the notify primitive to print the argument list on the player s screen if they are connected However this verb can be overridden to a
61. ect or class It parses the arguments to extract the parent object we wish to create an instance of along with the name we wish to give to the created object The create primitive is called with the derived parent as an argument The resulting object is moved to the player s inventory using the move primitive and it s names and aliases set using building_utils set_names recycle Verb This is a player command used to recycle an object This simply matches the dobjstr with an object and calls the recycle primitive to recycle the object The returned value in the case of an error is printed to the player Otherwise a suitable success message is sent dig Verb This is a player command used to create a room or exit that is instances of the class room or exit The verb parses the arguments to determine the type and number of objects that are to be created It uses the create primitive with room as a parent to create a room Note that you can only use the dig command to dig an exit from within a room The building_utils make_exit verb is called to dig an exit cl asses Verb This is a player command used to list the publicly available classes in the database The public classes are divided into different sections as defined by the property class_registry This contains a list of entries in the following form name description members where name is the name of the superclass of objects de
62. ed as a command and the preposition is not on or in then the verb attempts to match the direct object with something in the room If the match succeeds the look_self verb of the matched object is called to tell the player what the object looks like If the preposition is on or in then the player wishes to look inside a container of some sort be it a member of the container class or in a player s inventory for example An attempt is made to match the indirect object with something in the room If it succeeds then an attempt is made to match the direct object with something inside the container previously matched If this final match is made the look self verb of the matched object is invoked to print it s description If the direct object is the empty string then the container s Look self verb is called to print it s description Any ambiguous or failed matches produce suitable error messages none announce all list args Verb This verb is another general purpose verb used to send a message to every object in the room It is used for messages that we wish everyone to see with no exceptions none enterfunc obj thing Verb This verb is invoked by the LambdaMOO server when an object moves into a room as part of action of the move primitive The actions taken for a room are very straight forward If thing is a player object then we tell the player where s he has moved into using the room
63. ed to allow the user to do useful work This document gives a rundown on the elements of the LambdaCore database and provides details of each of the verbs used by the database It also provides source for some of the verbs to aid understanding and provide extra information The user is assumed to have read the two companion manuals to this one The Lamb daMOO Programmer s Manual and The LambdaCore User s Manual An understanding of MOO concepts the MOO language and the facilities provided by the LambdaCore database is needed to follow the explanations given in this document Chapter 1 The LambdaCore Classes 2 1 The LambdaCore Classes The LambdaCore database provides several basic classes that are used to define the virtual world It is these classes that provide the core of any MOO database built on the LambdaCore database As well as defining obvious things like players rooms and exits the classes also provide all the commands used to interact with the database and several utility functions for use by the MOO programmer writing his or her own verbs The LambdaCore classes can be divided into two categories e Generics These are classes containing generic objects for example players rooms exits and so on If a new generic object is created it would be placed in this list e Utilities These are classes containing utility verbs that can be used by other verbs Example include string utilities trig functions etc The secti
64. er objects inside it then the contents list is printed out too If the object has verbs defined on it then these verbs are listed provided they are readable and have not been hidden by setting the argument specifiers to the triplet this none this none tell_lines list strings Verb This outputs out the list of strings strings to the object using the tell verb for this object Each string in strings is output on a separate line num set name string value Verb This verb sets the name of the object to value It returns 1 if the name was set to the value successfully otherwise it returns 0 This verb and the title verb are used to control access to the name property of an object num is unlocked for obj thing Verb Returns 1 if the object is unlocked for the argument If the value of this key is zero the object is unlocked If this is not the case the verb lock_utils eval_key is used to determine the result string title Verb This verb is used to get the name property of this object One example where it might be useful to redefine this verb is if you want to add an honorific or descriptive phrase to the end of your name By overriding the title verb you can append anything you like to the name property of the object none recycle Verb This verb contains no code for the root class It is called by the recycle primitive just before an object is recycled This is useful to make su
65. er Verb answer msg Verb reply Verb reply msg Verb This command is used to reply to a message sent by another player If no argument is given the current message number if valid is taken to be the message to reply to Once a valid message has been located in the player s messages property the verb mail_editor invoke 2 verb x 2 this mail_options G args is invoked to allow the player to compose a reply where x is the message being replied to num receive_message list message Verb none none This function is called by other mail system verbs to place a message in the player s mailbox property messages If the calling verb has permission to modify the prop erties on the player the message is simply added to the end of the current list of messages and given a message number one greater than the maximum current mes sage number A notification is sent to the player informing him her that new mail has arrived The verb returns 1 for a successful delivery and an error code normally E_PERM otherwise fix_current_message Verb This verb is used to validate the current message number property on the player For example if a player deletes the current message then the number stored in the current_message property no longer points to a valid message This verb checks through all the messages in the mailbox player messages until it finds message number current_message or it passes the place in the list whe
66. erb mail room parse recipients The flags parameter is a list of possible mail Chapter 1 The LambdaCore Classes 4T none none none none none none none none options In this case it is searched for the replyto option and a variable set if it is found The parameter subject can optionally give the subject for the message For an send command the returned list from this verb contains the following information list rcpts str subject str replyto For an answer command the arguments are invoke 2 verb msg flags For answering a message a different set of information is given and returned The verb mail editor parse msg headers is used to parse the options given by the player into a variable hdrs Several options can be specified in this way to the G answer command as shown below incl include the original message text all reply to everyone in the mail header sender reply to the sender only noincl do not include the original message in your reply If the incl option is given the original message text is placed into a variable incl for returned to the calling verb Every line is prepended with the characters gt as one would expect The list shown below is returned to the calling verb hdrs include where hdrs is the list returned by parsing msg supplied to the verb and include contains any included message text If any problem is encountered in parsing the messa
67. erty is a list of object numbers It gives a list of people who will receive mail sent by players using gripe This can loosely be interpreted as being a list of players that are involved in running the game and are not strictly wizards dump_interval Property This property specified the interval between database dumps in seconds The default value is 600 seconds which is every ten minutes A database dump should be initiated at regular intervals to provide a backup in case the LambdaMOO server crashes or the host machine goes down Chapter 1 The LambdaCore Classes 57 welcome_message Property This property is a list of strings containing the message sent to players when they log in to the LambdaMOO server It should be used to convey simple help information to first time players as well as making urgent announcements that you wish everyone to see player start Property This is an object reference of the starting room for new players When a player is created using the create command when initially connecting to the LambdaMOO server S he is placed in the player start room This is also set as the default home for a new player If you wish to place new players into a different starting room then you should change the object reference stored in player start player class Property This is an object reference for the class that newly created players belong to by default The initial value of this property is player If yo
68. etermined by the return value of a player s who_location_msg verb A summary of player activity is attached to the end of the list typo args Verb bug args Verb Osuggest ion args Verb idea args Verb These commands are used register a typo bug suggestion idea with the person who owns the room the player is currently in If args is given this is used as the text of the message and is delivered straightaway to the room owner If no argument is given the player is taken to the mail room to compose a full message However if the room the player is in does not have it s free_entry property set then the verb doesn t move the player to the mail room as s he may not be able to reenter the current room after the message has been completed Similarly if the generic editor is a parent of the current room then the move is not performed Generally Chapter 1 The LambdaCore Classes 35 none none none none none speaking is is not a good idea to be taken to the mail room from within another editor quit Verb This verb is a player command used to exit in an orderly fashion from the MOO server It simply calls the boot_player primitive to disconnect the player audit Verb This verb is a player command used to print the objects owned by this or another player If a direct object is given this is taken as a player name to audit otherwise the current value of player is used In both cases the this audit_2
69. exit These are pronoun substituted and printed when the exit is invoked under various conditions none invoke Verb This verb is used to trigger an exit In the room class when a player elects to move through an exit this verb is called to move the player through the exit The code for this verb is very simple It calls the exit s move verb with the player object as an argument This is the verb to use for moving players through exits It does not allow objects to be moved For that a direct call to the exit s move verb is needed with the object you wish to move through the exit as an argument none move obj thing Verb This verb is used to move thing through the exit It provides a general mechanism for moving any sort of object through the exit not necessarily just players The code for this verb performs a number of actions First the lock on the exit is checked to see if thing is allowed to use the exit If this is not the case the nogo_msg and onogo nsg text is sent to thing and everyone else in thing s location respectively If the object is allowed to use the exit it is blessed for entry to the destination room This is done to ensure that the object will be accepted by the destination room It Chapter 1 The LambdaCore Classes 23 provides a way to stop objects moving into a room by any means other than an exit leading into the room By simply prohibiting all objects from entering the room the only way in is then
70. f other MUD topics The help class is used to store help text and verbs used to implement the help system A verb on the player class player help is used to give the player access to the help database Each entry in the help database is stored as a property on the help class By doing this an index can be generated by using the properties primitive to list all the properties on help No other properties are stored on the help class The help command defined on the player class is described below none help Verb none help topic Verb none help index Verb This verb part of the player class is used to gain access to the help system The first form is used to obtain help on the topic summary which is a top level help with pointers to other topics in the database If the third form help index is used the verb help print index is invoked to print a list of all the help topics currently available The most complex case is the second form where help is being requested on a par ticular topic The relevant code segment is shown below topics help find_topics dobjstr if topics player tell Sorry but no help is available on dobjstr return elseif length topics gt 1 player tell Sorry but the topic name dobjstr is ambiguous I don t know which of the following topics you mean for x in topics player tell X25 endfor return else topic topics 1 if topic
71. f the week days Property This property contains a list of the seven full names of the days of the week months Property This property contains a list of the twelve full names of the months of the year Chapter 1 The LambdaCore Classes 87 monthabbrs Property This property contains a list of month name abbreviations such as are returned from ctime They are used to produce an index into the property months that contains the full names of each month of the year zones Property This contains a list of some time zones for some random purpose as yet unknown If anyone can enlighten me 1 3 13 The Gender Utilities The gender utilities class gender_utils contains a couple of verbs used for manipu lating the gender pronouns of objects num set obj object str gender Verb This verb is used to set the pronoun properties of object according to the gen der specified gender is a string one of the strings in the property list gender_ utils genders the list of rcognized genders The verb checks gender against the gender list and sets the pronouns on object with strings taken from property lists stored on gender_utils If the gender change is successful the full name of the gender e g female is returned E_NONE is returned if gender does not match any recognized gender Any other error encountered e g ELPERM E_PROPNF is likewise returned and the object s pronoun properties are left unaltered num add ob
72. four separate objects and some verbs on the player class e The Mail Room Editor mail_room or mail_editor This room is the place where mail messages are composed It also contains a number of mail utility verbs The mail editor is a child of the Generic Editor e The Mail Distribution Center mail_agent This is a child of root_class and has verbs used to handle mail distribution It is also the database of mailing lists and mail folders e The Generic Mail Recipient mail_recipient This is a special class used to set up mailing lists and folders e The Player Class player This class holds various player commands used to deal with the MOO Mail system The sections that follow detail the verbs in each of the classes along with any relevant properties 1 2 1 Mail Commands and Properties on The Player Class A number of verbs are defined in the player class to provide access to the mail system These verbs are detailed below none mail args Verb This command is used to list the messages currently stored in the player s mailbox Mail messages are stored in the property list messages on the player This is a list of complete messages stored one per list item in the format shown above The mail command first checks the current message number still exists using the verb this fix_current_message It then attempts to parse the arguments given to it to get a set of message numbers that the user wishes to have d
73. from and 26 as the destination entrance to building utils make exit Out 25 26 1 3 7 The Lock Utilities Class This class provides some useful functions related to the use of locks for objects in the database The LambdaCore database supports a simple but powerful notation for specifying locks on objects encryption on notes and other applications The idea is to describe a constraint that must be satisfied concerning what some object must be or contain in order to use some other object The constraint is given in the form of a logical expression made up of object num bers connected with the operators and or and not written amp amp and for compatibility with the MOO programming language These logical expressions called key expressions are always evaluated in the context of some particular candidate object to see if that object meets the constraint To do so we consider the candidate object along with every object it contains and the ones those objects contain and so on to be true and all other objects to be false As an example suppose the player blip wanted to lock the exit leading to his home so that only he and the holder of his magic wand could use it Further suppose that blip was object 999 and the wand was 1001 blip would use the lock command to lock the exit with the following key expression me magic wand and the system would understand
74. func of the parent class none destroy obj player Verb This verb is used to delete the message currently being composed by player This involves removing the message state from the various property lists stored in the room The code for this verb is shown below as the best explanation who args 1 pos who in this writers this writers listdelete this writers pos this recipients listdelete this recipients pos this messages listdelete this messages pos this places listdelete this places pos this abortable listdelete this abortable pos this subjects listdelete this subjects pos none send Verb This verb is a player command invoked to send the current message to the list of recipients It retrieves the message as a list of strings and then sends it to each recipient in turn Note that no third part mail agent is involved When the send command is invoked by a player it delivers mail to the recipients using the verb player receive message After a message has been sent it is destroyed The invoking player is returned to the room s he was in when the mail system was started list message with headers obj player Verb This verb returns a list of strings giving the message plus any headers which are added to the front by the mail system The mail room make message verb is used to produce the list of strings string the subject obj player Verb This verb returns the subject text for the messa
75. g off into space for X is printed where X is an indication of the time the player has been inactive The gender pronoun inserted is taken from the pronoun list for the player This means it can vary with the gender of the player object If the player is carrying any objects a simple list of these is printed gag args Verb The concept of gagging is fairly simple to understand If there is a player or object you do not wish to see any output from then you can place the player or object into your gag list If any output is sent to you from that object using it s tell verb then it is ignored and not printed on your terminal screen Two gaglists are maintained one for players in the property gaglist and one for objects in the property object gaglist Three verbs are used to maintain and observe the list of objects that are in the gag lists The gag verb is used as a player command to add objects to the gag lists The code for this is fairly straightforward and is included below if player this player tell Permission denied return endif victims string utils match player args if victims player tell Usage O0gag player or object lt player or object gt return endif gagplayers gagobjs for i in 1 length args if valid victims i gagplayers victims i Ogagplayers elseif valid o player location match args i gagobjs o gagobjs elseif tonum o toobj args i amp
76. g utils match player args args if length who lt 1 if who 1 player tell Where is who endif return elseif who 1 player tell endif them listdelete who 1 endif lmax rmax 0 for p in them player tell p whereis location msg endfor If an argument is given the verb attempts to match with one or more player names If no valid matches are found a suitable error message is printed by invoking the verb command utils player match result That verb returns a list The first element indicates whether any of the elements of the argument list didn t match The rest of the list contains the objects references that did match The verb runs through the list of object references and reports the string returned by each player s whereis location msg verb mail Verb rmm ail Verb send Verb read Verb answer Verb reply Verb renumber Verb receive_message Verb fix_current_message Verb next Verb prev Verb These functions are player commands used to access the MOO Mail system They are fully described in the section on the MOO mail system Chapter 1 The LambdaCore Classes 33 none quota Verb This verb is a player command used to print a player s current building quota This is a numerical value of the number of objects that the player may create without recycling anything Quotas are used to limit the number of objects that can be created in principle to allow
77. ge being composed by player This is done by retrieving the correct entry from the property list mail room subjects none sub ject Verb This is a player command used to set the subject text of the current message A simple call is made to the mail room set subject verb with the arguments supplied by the player in argstr none to Verb This is a player command used to set the list of recipients for the current message Without any arguments the command prints the current list of recipients If one or Chapter 1 The LambdaCore Classes 53 more arguments are supplied then the recipients list for the message is cleared and the verb mail_room also to is invoked to take tge player arguments and set the message recipients list accordingly none set_subject obj player Verb This verb is used to set the subject text for the message being composed by player none also to string args Verb This verb goes through the list of names given in args adding each name to the recipients list for the current message The code for the verb is shown below pos player in this writers recips this recipients pos for x in args r string utils match x players aliases if r failed match player tell There is no player named x return elseif r ambiguous_match player tell I don t know which x you mean return endif recips setadd recips r endfor this recipients listset this r
78. ge headers or in recognising which command originated the call to this verb 0 is returned init_session Verb pri nt Verb print_msg Verb message_with_headers Verb subj ect Verb set_subject Verb tore Verb also to cc Verb Chapter 1 The LambdaCore Classes none none none none none none none none none none none none none parse_recipients recipient_names make_message name list parse_msg_headers check_answer _flags reply to replyto send who showlists send message subsc ribe unsubsc ribe 48 Verb Verb Verb Verb Verb Verb Verb Verb Verb Verb Verb Verb Verb The following properties are also defined on the mail editor or mail room class replytos recipients subjects num accept obj thing This verb overrides the room class definition In this case thing is allowed to enter the room only if it is in the list mail_room writers In practice this stops anyone from moving into the room unless they have used a mail system command that enters their object number into the list of message writers This is necessary because the none action of entering the room causes certain mail related state to be setup Property Property Property Verb Note that the normal way to enter the mail room is to use the send for example When a player enters the r
79. gender_utils set takes care of setting the correct pronouns If an error is returned when trying to set the player s gender this could indicate that permission to change the pronouns was denied or some other problem existed If a value of E_NONE is returned by gender_utils set then the gender of the player is set but the pronouns are left unchanged The gender of a player is used in the string_utils pronoun_sub verb to insert the appropriate pronouns in places where substitutions have been used When the gender of a player is changed it results in a set of 8 properties being assigned on the player one for every type of possible pronoun substitution A further property containing the gender of the player is also set for example to either male female or neuter depending on the argument given to the gender command page list args Verb This verb is a player command used to send messages between players who are not physically located in the same room in the virtual world You can imagine a page to be a worldwide form of whispering Without an argument a message like You sense that blip is looking for you in The Venue Hallway is sent to the recipient of the page If an argument is given it is treated as a message to send to the other player This results in the recipient getting a message like You sense that blip is looking for you in Hallway He pages Hello are you busy Paging is used primarily to attract t
80. he Matching U lties 80 1 3 11 The Trigonometric Utilities 82 1 3 12 The Time Uubues 0 00 c ee eee 85 1 3 13 The Gender Utilities na aaaaaaaaaaaeaa 87 2 Common Questions How to do Useful Things 89 Property Index
81. he attention of a player or to pass short messages between players in different locations It is not intended to be used for conversation If a player name has been given as an argument the page verb first tries to match the first argument with a player name using string utils match player If a match is found then there are two possibilities Firstly if the player is not connected a pronoun substituted version of the string returned by that player s page absent msg verb is printed to the sender and the verb is aborted Otherwise if the recipient is connected we send him her the string returned by the sender s page origin msg We then check to see if optonally with followed by a message is part of the argument list for the verb If so then the message is extracted from the argument list and sent to the recipient suitably pronoun substituted The string returned by the recipient s page echo msg verb is printed to the sending player Chapter 1 The LambdaCore Classes 29 none An interesting piece of coding is used to stop the line containing the message from duplicating the sender s name if it has already been sent as part of the page_origin_ msg For example if blip page s Ezeke Ezeke might see the following You sense that blip is looking for you in The Venue Hallway He pages Hello which would be better than something like You sense that blip is looking for you in The Venue Hallway blip pages Hello
82. he player variable i e the player who is running the verb here This returns the value of the player location property nn If a null argument is supplied this verb returns the value of the caller variable class This returns the value of the corresponding property on the system object 0 This is used to match with for example player exit etc num This returns the value of num as an object reference as long as the object referred to is valid and meets one of the following conditions e The object is in the object that called this verb e The object is in the same location as the player e The object is being carried by the player e The object is in the same location as the caller e The object is owned by the player Chapter 1 The LambdaCore Classes string 8l In the general case a match is attempted using the string utils match verb using the value of where as the list of objects to match against The aliases property is used to match the string against If no match is found using the above rules a more general algorithm is used This recognises forms such as the following person s object This matches against the item object in the inventory of person The special case where person is specified by using my is catered for Note that match utils match is used to match the person string number object This form allows you to specify a particular object in situations where the o
83. hing entrances Verb This verb is a player command used to list the entrances to the player s current location Only the owner of a room may list it s entrances For every object kept in the room s entrances list the exit name object reference number and aliases are displayed to the player go list args Verb The verb is a player command used to move from one room to another One special feature of this command is that it allows the player to string together a number of different movement commands into one use of the go command This can save typing when we know where we want to go The code for this verb is shown below for dir in args exit player location match_exit dir if exit lt 0 player tell Go where else exit invoke endif endfor This simply moves through the list of exits given in args matching the exit name in the current room and invoking the exit if a valid match is found look Verb This verb is a player command used to look at various things in the player s current location It can be used meaningfully in other verbs however if the verb is called with no arguments In this case it calls the Look self on the room which the verb was invoked on You could use this verb to print the description of a room you are not in but it is stylistically better to use the Look self verb of the room Chapter 1 The LambdaCore Classes 14 If a preposition is supplied via this verb being invok
84. his verb performs the opposite function to the add entrance verb It removes entrance from the room s list of entrances If it is not possible to remove entrance from the room s entrance list normally because the object that invoked the verb does not have the required permission then the verb returns 0 Otherwise a successful addition returns 1 none add exit Verb This is a player command used to add an exit to the current room This is normally used when someone else has created an exit they want to lead out of a room you own The verb matches the direct object string with an object in the room to get the object reference number for the exit If the object found is not a descendant of the exit object the verb is aborted with an error Otherwise if the destination of the exit is readable and leads to a valid room an attempt is made to add the exit using the room s add_exit verb If this fails a suitable error message is sent to the user none add entrance Verb This is a player command used to add an entrance to the current room This follows much the same sequence as for the add exit An attempt is made to match the direct object supplied with an object in the room If this fails the verb is aborted with a suitable error message Otherwise if the object found is a descendant of the exit class then the exit is checked to make sure it goes to this room If this is the case then the exit is added as an entrance u
85. hould be used to send a message to a player The player tell filters messages in two different ways as show below Remember that the player referred to in the code is the player sending the message this refers to the player receiving the message if this gag pO if this paranoid 2 z this whodunnit listappend callers player player this 3 pass z name z Qargs else pass args Chapter 1 The LambdaCore Classes 30 if this paranoid 1 this responsible listappend this responsible listappend callers player lt cmd line gt player args while length this responsible gt this lines this responsible listdelete this responsible 1 endwhile else this responsible endif endif endif The verb player gag_p returns true if the player sending the message is in the recipient s gag list For this verb the output from any gagged player is ignored and not printed to the recipient s terminal If the paranoid level of the recipient is 2 this means that they wish to see who has sent them a message The player whodunnit verb returns the object reference of the player that sent the message This is prepended to the message text which is then printed to the player If the paranoid level of the recipient is 1 then the message and it s originator are stored in the property list responsible on the player The list is kept to player lines length a
86. iffers from using for example string_utils explode in that it recognises a quoted piece of text as being one word For example Verb Call Returned words There is a dog There is a dog words A red nose A red nose words words Hello Hello str cap property obj what str prop num ucase Verb This verb returns what prop but capitalised if either ucase is true or the prop erty name specified is capitalised If prop is blank the verb returns the value of Chapter 1 The LambdaCore Classes 70 what title If prop is not specified on what or is otherwise irretrievable then an error is returned If capitalisation is indicated by ucase being true we return what propc if that exists otherwise what prop is capitalised in the normal fashion using string_ utils capitalise A special case exists if we are trying to retrieve the name of a player This is never capitalised num index delimited str string str target num casem Verb This verb works in the same way as the primitive index O except that it only matches on occurrences of target in string that are delimited by word boundaries That is it will not match on occurrences that are preceded or followed by an alphanumeric For example Verb Call Returned index delimited Hi there he 0 index delimited Hi there hi 1 0 1 index delimited Hi there hi 1 index delimited Hi there Hi 1 num
87. imagine an exit object as a flexible tube connecting two rooms then the concept of specifying both ends of the tube seems natural It is not usual to search the entrance list for a match as you would with the exit list but the concept of an entrance is included to cover unexpected cases Chapter 1 The LambdaCore Classes 13 none none none none If it is not possible to add entrance to the room s entrance list normally because the object that invoked the verb does not have the required permission then the verb returns 0 Otherwise a successful addition returns 1 bless_for_entry obj thing Verb This verb is called by an exit to allow an object special permission to enter a room Two properties on the room store thing and the task_id of the calling task The idea behind blessed objects is to allow an object temporary permission to enter The permission is only granted if the request is made by an object that is an entrance into the room The idea here is that a normally inaccessible room can be entered providing you use an exit that leads into the room In addition the task ID of the task that asked for the blessing is stored so that there is no way an object can become blessed and then later gain entry to the room The object being blessed is only allowed to enter once per blessing Once the object has moved into the room it s blessed status is removed by resetting the blessed_object property in the room to not
88. imself Herself or Itself as appropriate string utils pronoun sub replaces the string AR with the value of this property DOC Property This property is used to hold the possessive pronoun in it s noun form set to either His Hers or Its as appropriate string_utils pronoun_sub replaces the string AQ with the value of this property home Property This property stores the object number of the player s home This is the place that the player is taken to when s he types in home The home room is normally either a general sleeping area or the player s hotel room or apartment Chapter 1 The LambdaCore Classes 41 password Property This property stores the encrypted password used to connect to the LambdaMOO server as this player It is changed by using the password command and is checked by the server upon login gaglist Property This property stores a list of object numbers Any output received using player tell from any of the objects in the list is filtered out of the text sent to the player s ter minal screen Items are added and deleted to this list using the gag and ungag commands paranoid Property This property is an integer representing the paranoid level of the player If set to 2 any output received by the player via player tell is prefixed with the name of the object that originated the message This is used to that a player can detect spoof output from other players or
89. is is set to a non zero value then the object is allowed to enter the room If the owner of an object is the owner of a room the object is allowed to enter Finally if a residents list is defined in the room and the object is in the list then it is allowed to enter This complex set of conditions shows how an arbitrary set of criteria can be applied to the movement of objects into other objects obj match string name Verb none This verb is used to find things that are located within this object It tries to match name to something in the contents list of this object using object names and object aliases This verb uses the string_utils match verb to do the actual searching If a match is found the object that matched is returned If more than one object matches then ambiguous_match is returned If no match is found then failed_ match is returned exam ine Verb This prints out some useful information about the object to the player It is provided as a player command to allow every player to determine basic information about any other objects they come across For example gt exam 0 The System Object 0 is owned by Wizard 2 Aliases The Known and Universe No description set The idea is to allow every player to discover the owner full name description and aliases of any object Chapter 1 The LambdaCore Classes if If you control the object the lock for the object is shown If the object has oth
90. is residents Starting at the top of the conditional expression we see the locking condition being checked If the room lock forbids this object to enter the room then the accept verb returns zero If this is not the case then we consider the value of the free entry property If this is set to a non zero value then the object is allowed to enter the room This is used to provide public places where anything and everything is allowed to enter The default value of this property is 1 If the object has been blessed for entry into this room and the task that is moving the object is the same as the task that requested the blessing then the object is allowed to enter Refer to the bless for entry verb for further details on the concept of blessed objects If the owner of an object is the owner of a room the object is allowed to enter This is a general rule used as a catch all case It can be overridden by specifically locking against an object but as a rule it is desirable for objects owned by the room owner to be allowed to enter Finally if a residents list is defined in the room and the object is in the list then it is allowed to enter This concept can be used to define a set of objects that are allowed to enter the room without specifying a long and complex locking condition num add entrance obj entrance Verb This verb functions similarly to the add exit verb but applies to exit objects that lead into the room If we
91. isplayed The possible arguments are as follows cur the current message new all messages after the current message num where num is a number the message numbered num if there is one numi num2 all messages in the given range if any Chapter 1 The LambdaCore Classes 44 none none none none last num the last num messages num the last num messages These may be combined on the mail command line When a list of messages to display has been gathered in the variable msglist the following code is used to display the list to the user for x in msglist msg num x 1 player tell this current message msg num Ms string_utils right msg_num 2 mail recipient summary line x 2 endfor For example You have 3 messages 1 May 30 12 18 Ezeke 57 Classes Documentation 2 Jun 4 19 35 Ezeke 457 Room contents using title gt 3 Jun 5 10 23 Ezeke 57 Potential problems The pointer gt indicates the current message The date subject and sender of each message along with the message number is taken from the relevant mail record stored in the player s messages property rmm ail args Verb This command is used to delete mail from the player s mailbox property messages The verb takes each message number given as an argument and searches for the message in the player s mailbox If an argument is the string cur then this is taken as the number of
92. it were a list of that object Each prop name should be a string naming a property on every object in the corresponding obj list The value of that property in each case should be either a string or a list of strings The argument string is matched against all of the strings in the property values If it exactly matches exactly one of them the object containing that property is returned Ifit exactly matches more than one of them ambiguous match is returned If there are no exact matches then partial matches are considered ones in which the given string is a prefix of some property string Again if exactly one match is found the object with that property is returned and if there is more than one match ambiguous match is returned Finally if there are no exact or partial matches then failed match is returned str from value item value str quote strings num list depth Verb This verb is used to print the given value into a string Note that quote strings defaults to 0 false and List depth defaults to 1 This is best described by example string utils from value v gives value result b b b 3 8 5 3 5g F 341 2 3 41 2 3 41 12 3 4 1 list 4 1 12 3 4 1 list 4 string_utils from_value value 1 gives value result Chapter 1 The LambdaCore Classes 5 543 5 T KM 1 2 3 1 2 3 4 1 49 3 4 pu g MB Dun y itis s 3 1 lis
93. j object str perms obj owner Verb This verb is used to add pronoun properties to object if they are not already there The owner and perms arguments allow you to optionally specify the permissions and owner of the gender properties that are being created If not given owner defaults to the object s owner and perms defaults to rc The following properties are defined on the gender_utils class pronouns Property This property holds a list of the pronoun properties that can be given to an object It is used by the gender_utils add verb when adding the gender properties to an object genders Property This property holds a list of legal genders for objects as strings ps Property This property holds the subjective pronouns for each different gender If a gender is given by gender_utils genders x then the corresponding gender pronouns is given by gender_utils ps x Chapter 1 The LambdaCore Classes 88 PP pq psc poc ppc pqc prc Property This property holds the objective pronouns for each different gender If a gender is given by gender utils genders x then the corresponding gender pronouns is given by gender utils po x Property This property holds the possessive pronouns for each different gender If a gender is given by gender utils genders x then the corresponding gender pronouns is given by gender_utils ppLx Property This property holds the possessive pronouns in the noun form
94. j player Verb This verb returns the text of the message currently being composed by player This is returned as a list of strings Chapter 1 The LambdaCore Classes 50 none none none none none list none say string text Verb This verb overrides the room class definition It is intercepted to allow the mail program to capture input from the user to append to the message currently being composed The mail_room say verb itself just passes the player object reference and text to the mail_room add_line verb for processing emote string text Verb This verb overrides the room class definition It is intercepted to allow the mail program to capture input from the user to append to the message currently being composed The mail_room say verb itself just passes the player object reference and text with the player name prepended to the mail_room add_line verb for processing This allows both say and emote input to be captured in the current message add_line obj player string text Verb This verb is used to add text to the current message being composed by player Once a line has been added to a text message it is not allowed to be immediately aborted This is set using the mail_room clear_abortable verb print Verb This verb is a player command used to print the text stored in the current message The code itself first allows the message to be aborted using mail_room clear_ abortable and then call
95. ject verb oejection msg Property This is a string containing the message sent to everyone else in a room when the owner ejects an object It is printed by the room s eject verb residents Property This is a simple list of objects that have their homes in this room It is examined by the accept verb on the room class as one of the criteria used to determine whether an object is allowed to enter the room or not The sethome verb could be enhanced to include players as residents when their home is set to be a particular room free entry Property If this is set to a non zero value then the room is considered public and any object is allowed to move in to the room Setting the value to zero will stop objects that do not meet any of the other acceptance criteria from entering Refer to the room accept verb for further details on these criteria entrances Property This is a simple list of the exits that lead into this room It is manipulated by the room add entrance and room remove entrance blessed object Property This contains the object number of the object that has been blessed for entry into this room blessed task Property This contains the task ID of the task that requested an object be blessed for entry into the room Chapter 1 The LambdaCore Classes 19 exits Property This is a simple list of the exit objects that lead out of this room It is manipulated by the room add_exit room remove_exit and room match exit
96. l su left sorted i 20 su left sorted i n 20 su left sorted i n n 20 sorted i 3 n endfor none print topic string topic 1 3 The LambdaCore Utility Classes The following utility classes are provided in the LambdaCore database String Utils string utils This class provides a number of verbs containing string utility functions Building Utils building utils This class provides a couple of verbs used in building commands Permissions Utils perm utils This class provides verbs used in manipulating permissions on objects 63 Verb Chapter 1 The LambdaCore Classes 64 Code Utils code utils This class provides some useful general purpose verbs Command Utils command utils This class provides some verbs used for command line parsing List Utilities list_utils This class provides a couple of verbs used in manipulating lists Matching Utils match utils This class provides verbs used in matching names to objects Trignometric Utilities trig_utils This class provides some trigonometric functions and other mathematical utilities Lock Utilities 1ock utils This class provides verbs used in dealing with locks on objects Object Utilities object_utils This class provides some useful verbs used in manipulating objects Time Utilities time_utils This provide some time manipulation utilities Gender Utilities gender_utils These provide so
97. llow arbitrary objects to pass messages between each other or to augment the way the message is handled One simple example is that of an object that listens to everything that happens in a room Every verb that needs to send text to players uses the tell verb If an object has it s own tell verb it too will be able to act upon the messages sent between objects in a room The player class overrides this verb to filter messages in two different ways as show below if typeof this gaglist LIST player in this gaglist if player this amp amp this paranoid 1 pass lt player name player gt Qargs else pass args endif endif Firstly if the message comes from a player that we don t want to listen to the player has been gagged then the message is thrown away Secondly if the player is being paranoid and the message is not from ourselves it is prefaced with the name of the originating object The pass primitive is used to allow the tell verb of the parent class to send the message after it has been modified none moveto obj where Verb This verb is used to change the location of an object to be where The built in function move is used by this verb Any error codes generated by it are returned by this function This verb is intended to be used by any other verbs that must move an object to another location One important point to note is that this uses the set_task_perms primitive t
98. lt sin 0 0 sin 90 10000 sin 45 7063 sin 270 10000 The following verbs are available num sin num x Verb This verb returns the sine of x where x is in degrees The returned value is to four decimal places multiplied by 10000 num cos num x Verb This verb returns the cosine of x where x is in degrees The returned value is to four decimal places multiplied by 10000 num tan num x Verb This verb returns the tangent of x where x is in degrees The returned value is to four decimal places multiplied by 10000 Chapter 1 The LambdaCore Classes 83 num xsin num x Verb num Xcos num x Verb These two verbs are used by the above verbs to compute the sin cos and tan values using Taylor s Theorem They are not really of use to the average programmer num factorial num x Verb This verb returns the factorial using the traditional recursive method Note that n must be greater than or equal to 0 num pow num x num n Verb This verb returns x raised to the nth power Note that n must be greater than or equal to 0 Again a recursive method is used to generate the result list exp num x num all Verb This verb calculates an nth order Taylor approximation for e x n defaults to 5 The result returned is in the format integer part fractional part For example gt trig_utils exp 1 412 71666 gt trig_utils exp 2 6 Jr 35555 list fibonacci num n Verb This verbn calculates the Fibonacci seq
99. matches description Property This is a string or list of strings giving the description of the object what we see when we look at the object 1 1 2 The Room Class The Room Class is the basic class from which all the rooms in the virtual world are descended It is one of the very basic classes essential to constructing a virtual world an exit is the other essential class A room can be thought of as a container for players and objects It can have a number of exits that connect it to other rooms These exits are directed they lead from one room to another room For a two way passage to exist two exits are needed going in opposite directions The room class defines a lot of verbs which are used to provide an interface to the properties of the room One special point is worth noting about rooms and exits An exit can have an arbitrary name indeed this is the usual case In order for the room to recognise the exit name and match it up with an exit that exists in the room some form of catchall mechanism is used If a player types a sentence that the parser cannot match with anything it executes a verb called huh in the current room if one exists When this happens the huh verb is free to take the player s sentence search for a valid exit and act accordingly This mechanism provides a very flexible arrangement for dealing with exits and also allows a degree of player help to be added If a close match to a command is found
100. me gender based utilities 1 3 1 The String Utilities Class The string utilities class string_utils defines a number of verbs useful for performing operations on strings Chapter 1 The LambdaCore Classes 65 list explode list subject str break Verb This verb is used to explode a string into a list of substrings separated by runs of break as the delimiting character If break is not specified it defaults to space As an example string_utils explode This isa test will return the list This is a test str from list list list str separator Verb This verb is used to implode the string representations of the elements of a list into a single string each pair being separated by separator which defaults to the empty string This function is essentially the inverse of explode Note that the elements of list need not be strings themselves as the function tostr is applied to each element before it is catenated As an example to reassemble the list above into the original string with just one space between words you could write oldstr string_utils from_list This is a test object match str string list obj list str prop name Verb This verb is used to search for a match to string in all the specified properties of all the specified objects returning either object ambiguous match or failed match Each obj list should be a list of objects or a single object which is treated as if
101. n msg ie rri 42 WIE QU raga rr e e REV IEEE des 55 wizard mail recipients 56 Oh EE 54 ZODES ise eeaddadocoa4u bei dduu ea ge uds ane ace 87 Table of Contents Introduction ie 62 54 45 CC EE 1 1 The LambdaCore Classes 2 1 1 The LambdaCore Generic Classe 2 1 1 1 The Root Cas 4 1 1 2 The Room Class 8 1 1 3 The Thing Class assos cid er erected 19 11A The Exit Class gek erae oe RR ex S 22 1 1 5 The Player Class lesse esses 24 1 2 The Mail Room Class 42 1 2 1 Mail Commands and Properties on The Player Class Pp 43 1 2 2 The Mail Room or Mail Editor 46 1 2 3 The generic Editor Oase 54 1 2 4 The System Object Class 55 1 2 5 The Container Class 57 1 2 6 The Note Cl 88 ido See e Eu cae 59 1 2 7 The Newspaper OUlass 0000 60 1 2 8 The Letter Class 60 1 2 9 The Generic Programmer Class 61 1 2 10 The Help Database Class 61 1 3 The LambdaCore Utility Classen 63 1 3 1 The String Utilities Class 64 1 3 2 The Permissions Utils Class T1 1 3 3 The Code Utils Oase T2 1 3 4 The Command Utilities Class 73 1 3 5 The List Utilities Cas 74 1 3 6 The Building Utils Oass 76 1 3 7 The Lock Utilities Class fa 1 3 7 1 Key Representation For Locks 77 1 3 8 Verbs for Manipulating Locks and Keys 78 1 3 9 The Object Utilities Class 79 1 3 10 T
102. nce all but list args Verb This general purpose verb is used to send a message to everyone in the room except a particular object This can be used in situations where we wish to present one view to the world in general and another view to a particular object normally a player Another common usage is to prevent robots that trigger actions based on a redefined tellO verb on themselves from recursing using something like place announce all but this message Chapter 1 The LambdaCore Classes 10 none huh string sentence Verb This verb is a stub used to call the huh2 verb It is called by the LambdaMOO server when it can t match a sentence given to it by a player The server calls huh with verb equal to the actual verb in the erroneous command line This means it is not possible to use pass if you override huh in a room it would pass control up to a verb on the parent named verb i e whatever the verb was on the command line This by definition doesn t exist To get around this and allow you to use pass to get the default huh behaviour huh calls huh2 You should override huh2 if you wish to be able to use pass to get the default huh behaviour obj match_exit string exit Verb This verb is used to determine if exit is the name of an exit leading out of the room It performs a simple string match on the names and aliases of the objects in the exits list stored as a property of the room The intent here is to all
103. ne whether or not the note can be read by calling lock_utils eval_ key text Property This is a list of strings where the body of the note message is kept Each entry in the list corresponds to one line in the note text 1 2 7 The Newspaper Class To be written 1 2 8 The Letter Class The letter class is a subclass of the note class A letter object provides all of the functions of a note with the addition of a burn command This command will recycle the note after it has been read by the recipient completely removing it from the database The letter is read written erased and encrypted just as if it were simply a note object none burn Verb This verb first checks to see if the letter is readable by the person who is attempting to burn it If it is the letter will be completely destroyed If it is not readable the command will fail The code for this is shown below for illustration if this is readable by player player tell this name might be damp in any case it won t burn else player tell this name Chapter 1 The LambdaCore Classes 61 burns with a smokeless flame and leaves no ash player location announce player name stares at this name and it catches alight recycle this endif 1 2 9 The Generic Programmer Class 1 2 10 The Help Database Class The LambdaCore database provides an extensive help facility As well as command syntax it provides other useful information on a variety o
104. ned for the thing class to implement this idea Configurable messages are used so that someone using an object of this class can set the text printed when an attempt is made to take an object No messages are available for the case of dropping an object Chapter 1 The LambdaCore Classes 20 none g et Verb none t ake Verb One or the other of these verbs is invoked when a player tries to take possession of an object i e pick it up The code involved is fairly straightforward It checks to see if the player already has the object and prints a suitable message if this is the case If not then the moveto verb on the object is invoked If this results in the object moving into the player s inventory then the take_succeeded messages defined on the object are printed If the moveto failed then the take_failed messages for the object are printed This scheme allows you to add extra conditions to restrict whether a player can take an object or not For example you may place a notion of strength onto a player and add weight to objects If an object is too heavy for a player to lift then the object cannot be taken by the player This sort of condition should be added to the take verb for the object none d rop Verb none th row Verb One or the other of these verbs is invoked when a player tries to place an object in the room s he is currently located i e when the player tries to drop the object Again the code is fairly straigh
105. ngs If extra complexity were to be added to the messages then these verbs should be overridden The default values of these strings are shown below Chapter 1 The LambdaCore Classes 21 drop_failed_msg You can t seem to drop t here drop_succeeded_msg You drop t odrop_failed_msg tries to drop t but fails odrop_succeeded_msg drops t otake_succeeded_msg picks up t otake_failed_msg take_succeeded_msg You take t take_failed_msg You can t pick that up The following properties are defined for the thing class They are the messages used by the thing take and thing drop verbs in various situations All of these message can use standard pronoun substitutions otake_succeeded_msg Property This message is the text sent to other people in the thing s location when the thing is taken by another object The default value of this string is picks up Zt otake_failed_msg Property This message is the text sent to other people in the thing s location when an attempt by another object to take the thing fails The default value of this string is take_succeeded_msg Property When an object successfully takes a thing this message is sent to inform the object of success The default value of this string is You take 4t take failed msg Property When an object unsuccessfully tries to take a thing this message is sent to tell the object that the attempt failed The default value of this
106. o set the task permissions to those of the thing that is being moved Again by overriding the verb definition on an object it is possible to augment or change the way an object is moved For example you could keep a list of places visited by simply recording the where objects in a list every time this function is called Chapter 1 The LambdaCore Classes 6 num accept obj thing Verb This verb is used to control what objects are permitted to be placed inside other objects If this verb returns 0 then the object where cannot be moved into this object Conversely if the verb returns a non zero value the object is allowed to be placed inside this object The verb is called by the server when it executes a move primitive The root_class definition returns a zero value In this case no objects are allowed inside any objects that are children of the root_class The room class definition provides for a flexible scheme using various different criteria as shown in the following code what args 1 return this is_unlocked_for what amp amp this free_entry what owner this owner typeof this residents LIST amp amp what in this residents Starting at the top of the conditional expression we see the locking condition being checked If the room lock forbids this object to enter the room then the accept verb returns zero If this is not the case then we consider the value of the free_entry property If th
107. objects If set to 1 any messages sent using player tell are stored in a small cache in the property responsible along with details of where the message came from This can be used for later checking with the check command If set to 0 no spoof checking is performed This is the normal case responsible Property This property stores a list in the following format callers text The callers part is in the same format returned by the callers primitive and lists the verb stack at the time that the message stored in text was sent This property is set by player tell and looked at by player check It contains a maximum number of entries as determined by the value of the lines property on the player lines Property This property stores the number of lines kept in the property responsible for anti spoof checking object _gaglist Property This property holds a list of objects that are in the player s gaglist Any output from these objects is ignored by the player s tell verb page absent msg Property This property holds the message sent to someone when they try to page the player while s he is not connected It may contain the usual pronoun substitutions The default value is n is not currently logged in page origin msg Property This property holds the message sent to a player you page telling them where you are The default message is You sense that n is looking for you in 1 Chapter 1 The
108. ons that follow describe the LambdaCore classes in detail providing insight into what each verb and property is used for and some idea of how they should be used in your own MOO programs 1 1 The LambdaCore Generic Classes The following generic classes are available in the LambdaCore database The Root Class root_class This is the basic class from which everything else in the database is descended It defines basic operations and properties on an object The Generic Room room This class is the parent for all the rooms in the database The Mail Distribution Center mail_room This is a special class used to define a room for dealing with MOO mail It is a child of the generic Room class The Generic Mail Recipient To be written The Generic Editor s Office editor This is a special class used to define a room used for program editing It is a child of the generic Room class Chapter 1 The LambdaCore Classes 3 System Object 0 The The The The The The The This is the keystone object for the database It holds various important system properties as well as pointers to the various other classes and objects that are system wide Generic Thing thing This class defines a TinyMUD style object that is something that can be picked up and put down It defines various messages related to taking and dropping the object Generic Container container This is a child class of the Thing cla
109. oom using one of the mail commands s he is added to the list of writers If for some reason the player has to move out of the room then s he can move back in using move because s he is in the mail room writers list enterfunc obj player Verb This function is triggered when a player moves into the room by the LambdaMOO server t performs a number of actions related to setting up the state of the mail room ready for the user to interact with the mail system The code for this verb is shown below Chapter 1 The LambdaCore Classes 49 none list list who args 1 recips this recipient_names who if this message_so_far who player tell You are in the middle of writing a letter to recips To discard that message type abort this print_msg who else player tell Sending a message to recips pass args endif First we get the list of recipients for the mail message specified before the player has entered the room If the player already has part of a message stored in the mail room then s he is allowed to continue the message Finally pass is used to invoke the room class verb enterfunc add_writer obj player list recipients Verb This verb is used to add a plyer to the list of people composing letters in the mail room Only players are allowed to do this If the player is not already composing a message then s he is simply added to the list of writers
110. ough the list of defined exits stored in the property exits and prints the exit name object reference number destination name and exit aliases none look self Verb This verb overrides the root class definition of the verb Look self in order to provide a fuller description of a room than the description property gives This Chapter 1 The LambdaCore Classes 12 verb prints the room name followed by the room s description property and then the list of contents of the room using the room s tell_contents verb This is what the player would see if he was looking at the room The description property of the room is actually printed by using the passt prim itive to invoke the parent verb 1ook self Changes in the way an object s descrip tion is stored by the root class are invisible to this verb because of the way pass is used num accept object thing Verb This verb overrides the root class definition The room class definition provides for a flexible scheme using various different criteria The idea is to allow the builder flexibility in preventing objects from moving into the room The following code shows how the room accept verb decides whether to allow thing to enter the room or not what args 1 return this is unlocked for what amp amp this free entry rhat this blessed object amp amp task id this blessed task what owner this owner typeof this residents LIST amp amp what in th
111. ow for more sophisticated matching algorithms to be implemented One might even go so far as implementing a fuzzy matching scheme to allow for player misspellings If a successful match is made this signifies that an exit with the name exit leads from this room It s object number is returned If more than one match is found the value ambiguous_match is returned If no match is found the value failed_match is returned num add_exit obj exit Verb This verb is used to add exit to the list of exits leading out of the room This verb and the match_exit verb provide the interface to the room exits list The way in which exits are stored removed and matched has been separated from the interface so that different implementations of the exits concept can be used in different sub classes of the room class If it is not possible to add exit to the room s exit list normally because the object that invoked the verb does not have the required permission then the verb returns 0 Otherwise a successful addition returns 1 none tell_contents Verb This verb tells us what things are visible in the room It goes through the contents list of the room and if it is not dark prints the name of the object in a nicely formatted way Three different formats are available depending on the value of the ctype property of the room These are best illustrated by example Consider the a room in the LambdaCore database With a ctype value of thre
112. player command used to exchange objects between players It performs a moveto on the direct object to the inventory of the indirect object If after the move the object is still in the possession of the donor then it is obvious that the recipient has rejected the gift If this is the case a suitable message is printed to the doner 7 help info rmation Verb This verb is a player command used to activate the help system It is described more fully in the section on the help system password Verb This verb is a player command used to change a player s password A player s pass word is stored in a property on the player called surprisingly enough password The crypt primitive is used to store the password in encrypted form using the standard Chapter 1 The LambdaCore Classes 28 none none UN X encryption algorithm Note that you need to know your old password in order to change it unless a password has not been previously set for this player gender string gender Verb This verb is used to set the gender of a player object Without any arguments it prints the player s gender currently set pronouns and the available genders stored on gender_utils genders If a gender is given as the argument gender then the gender_utils set verb is called to actually change the player s gender pronouns If this verb does not return an error then the gender of the player is set to the full gender name which is returned
113. plete list of verbs that define an object s behaviour Using the verbs thing primitive in MOO lists only those verbs actually defined on thing ancestors obj object Verb This verb returns a list of the parent objects of this object This is all the objects that lie above this object in the hierarchy All objects have the root_class in their list of parents For example the newspaper class object has the note class the thing class and the root class as it s parents This verb can be used by an object to tell if another object is descended from the same ancestor class Consider for example a generic zapper object This is an object which can be used to shoot at other people with amusing and sometimes unexpected results Bearing in mind that it is unfair to try and zap someone who is unarmed the verb zapper shoot looks at the possessions of the victim and decides whether s he is armed If this is the case then the victim is fair game and deserves all s he gets If not the zapper refuses to shoot with embarrassing results for the aggressive attacker Considering the implementation of the zapper shoot verb we could determine if the victim has a zapper by comparing the parents of the assailant s zapper and each of the victim s possessions However this would only work if the zappers were first generation children of the same parent the generic zapper class Suppose however that the crafty player has built a super zapper class
114. r 2 Common Questions How to do Useful Things 2 Common Questions How to do Useful Things To be written 89 Verb Index Verb Index Qadd entr nce engste dE EE e re W EE RE RER serias ee ue Aree y d pas te EE et EE e EE QrecyCle 5l EE dE e ds ke 90 Beete sia ee Mere eege N 31 Qsuggest iOH iisela c eee dG ae Ree dd 34 OSWHCCD mms 36 QUYDO fe ices Le ee HERI UN ae bet 34 Qungag alsssese qug EES 27 Blo bierg ER Ware neds neces 36 Qunlock for open e tee RR dek 58 QversiOn etae e rh EE 36 Quhereis osse t PER RN n OR Y UIS 32 QuhO i exu uera Ae RECRIC P er ede tad 34 A AabOEU p ett Vibes ahah aed e E ELO Bice 51 abortable i2 IE ae EV Y RE PESE 51 ilot desea tales nee viv Wee teas 84 Accepts so e doce p s 6 12 29 48 add WEE 87 add entrance cer bees TEE 12 add exit nece she rue ii eee OR s 10 add lidJe i ue vL IRSE BER 50 add WErIEGE unies 5e B aded ain a ge 49 all propertieS 9 ee pb Ee 19 all weber eer E tee OYE OS 79 alSO tO iee e RR DR DUREE ates abe 53 AlSO tOi esee aac ed ier deer e Y ae es 47 Et eeen eee nd eye eee ae aera P E e 85 ANCESCOTS ooe sco epar ERE RC Ra adus 79 announce sce pem a HARDER E vse ees 9 34 announce a3lb 290 2555 b gr rebels As 14 announce all but 9 34 Genk i Arrive mBgB c Pees beset kde ek 23 ASSOCS ceca daga eR dde RR RR date dedos 75 audit Z eebebic veu Geared eee Gai coded S 35 B pless FOr Entry 2 2 26
115. re that recycling objects does not leave the database in a strange state For example the exit class uses the recycle verb to remove the exit from the the entrance and exit lists of its destination and source rooms string titlec Verb This verb performs the same function as the title verb but returns a capitalised version of the name property of the object using the string utils cap property verb none eject Verb This verb is used to remove something from the contents of an object The owner of an object or a wizard can use this verb to eject a victim from inside the object The victim is sent to nothing for most objects or to player start if the victim is a player The root class defines a few basic properties that every object has The verbs discussed above make reference to these properties as well as the built in properties name owner location contents programmer wizard r and w The following properties are defined for the root class Chapter 1 The LambdaCore Classes 8 key Property This is used to determine what if anything an item is locked to aliases Property This gives a list of the alternative names that can be used to refer to an object The value of this property should be a list of strings the various alternatives for naming the object Note that the name of the object in question should be included in this list because the built in name matcher uses only the aliases property when searching for
116. re the current message is supposed to be If this happens the current message property is set to the next message along in the list If this does not produce a valid message number then the current message is taken to be the last message on the list or 0 if there are no more messages next Verb This command is used to advance the current message pointer to the next message in the player s mailbox This is done by incrementing the pointer and then calling player fix_current_message to validate it If there is no message after the current message the pointer is moved off the list Once a new current message has been found it is printed out using the player read verb Chapter 1 The LambdaCore Classes 46 none prev Verb This command is used to backtrack the current message pointer to the previous message in the player s mailbox This is done by looking for the current message in the message list and then decrementing the index that expression returns by one place Once a new current message has been found it is printed out using the player read verb none renumber Verb This verb is used to renumber the messages in a player s mailbox to all consecutive numbers starting from one After checking that the person invoking the verb has permission to perform the renumbering and there are messages to renumber the verb executes the following code newmsgs i 0 for x in this messages newmsg
117. ression keyexp and returns the input expression that could be used to obtain that key It is the reverse operation to 1ock utils parse keyexp A few properties are defined on the lock_utils class but these are only used internally by the lock evaluation routines and are of no real interest to the programmer Chapter 1 The LambdaCore Classes 79 1 3 9 The Object Utilities Class This class provides some utilities used to ascertain information about objects num contains obj container target Verb list list list This verb returns 1 if target is in any way contained by container This includes being directly in the contents list of the object and also in the contents list of any object that is contained by container This verb is a partner to the match verb as they both embody the same concept all properties obj object Verb This verb returns a list of names of all the properties of object This includes prop erties defined on the parent s of this object Recall that properties defined on the parent s of an object do not appear in the set given by the properties thing prim itive in MOO The all properties verb is useful for seeing the properties that an object actually has values for all verbs obj object Verb Returns a list of all the names of the verbs defined for object This includes verbs de fined on the parent s of this object Again as for the all_properties verb list_ all verbs provides the com
118. rge 1 George is not the name of any player ambiguous_match blip 1 blip could refer to any of a number of people 28 blip 0 28 nothing The following code fragment from player page shows how you might use this func tion in your own programs who string_utils match_player args 1 if command utils player match result who args 1 1 return The variable args 1 contains the name of the player we are trying to page No properties are defined on the command utils class 1 3 5 The List Utilities Class The list utilities class 1ist utils defines a number of functions that manipulate lists list map prop list objs string prop Verb This function returns a list of the values of a specified property prop on each of the objects in the list objs If prop does not exist on one of the objects an error occurs As an example the following code will list all the locations that have at least one player in them It uses the map prop verb to generate a list corresponding to each player s location Set addition is used to provide a list of the location names without duplication Note that the players primitive returns a list of all the player objects in the database locs 1ist utils map prop playersO location rooms for x in locs rooms setadd rooms x name endfor player tell Inhabited locations are string_utils english_list rooms list map verb list objs string verb
119. rtable status of the message currently being entered by player The mail room abortable property list contains a boolean value for each player currently composing a message The mechanism is included to stop a player accidentally deleting a message by using the abort command If the abortable flag for a message is set then the message may be deleted by using the abort command If the flag is clear then deletion is prevented One invocation of abort results in an Are you sure message being printed and the mail room abortable flag for the player s message is reset to allow aborts A subsequent abort by the player will then destroy the message An empty message can be aborted without any warning Once a line of text has been entered into a message this saftey feature is enabled by clearing the abortable flag for the message set abortable obj player Verb This verb is used to set the mail room abortable flag for the message currently being composed by player If the flag is set the message is allowed to be aborted Chapter 1 The LambdaCore Classes 52 none clear abortable Verb This verb is used to clear the mail_room abortable flag for the message currently being composed by player If the flag is reset the message cannoted be aborted none exitfunc obj player Verb This verb is invoked when a player leaves the mail room It clears the abortable flag for the player s message and then invokes the exit
120. s newmsgs i i 1 x 2 endfor this messages newmsgs which is fairly self explanatory The current message number is preserved by getting it s index in the list of messages This is the number that the message will have after the renumbering operation 1 2 2 The Mail Room or Mail Editor When a player wishes to send a mail message s he is transported to the mail room to compose the message This room is a child of the generic editor and provides all the func tions documented in the section on that class In addition it provides verbs and properties related specifically to the sending of mail messages The following section describes each of the mail_room verbs and properties in detail string working on num who Verb This verb returns a string describing the mail message currently being worked on by the player identified by who It executes the following code return this ok who args 1 amp amp a letter to this recipient names who subject this subjects who amp amp entitled subject list parse_invoke args Verb This verb parses the arguments given to mail_room invoke to determine the type of mail editor invocation required either produced by an answer or a send command In the latter case the arguments passed to mail_room invoke are invoke rcpts verb flags subject The argument rcpts is a list of recipients for the message This list is parsed using the v
121. s mail_room print_msg to print the message text print_msg obj player Verb This verb prints the text of the current message being composed by player Again the code is fairly simple and is shown below who args 1 who tell Your message so far who tell who tell lines this message with headers who who tell who tell End of message gt Note the use of the root_class tell_lines verb to print the message contents mail_room message_with_headers returns a list of strings comprising the mail header and message text recipient_names obj player Verb This verb returns a list of the names of the recipients of the current message be ing composed by player It retrieves the correct list of recipients from the mail_ room recipients property list and then maps this from a list of object references to a list of object names using mail_room name_list pause Verb This is a player command used to temporarily stop composition of a message by a player A suitable message is printed by the player and then the mail room send back verb is invoked to send the player back to the room s he was in when letter composition was started Chapter 1 The LambdaCore Classes 51 none none none none send_back obj player Verb This verb is used to return a player to the room s he was in when a letter composition command was invoked When a player enters the mail room the original location of the player is stored in
122. s by using for example the following command list root class description This lists the program definition for the verb root class description An interesting point to note is that this code can be changed by the owner in this case the Wizard to provide any functionality desired l his configurability of the basis of the whole LambdaCore database allows a large degree of flexibility in the way the LambdaMOO server is used It also allows for very subtle and perplexing problems Care must be taken when editing definitions on any of the fundamental classes the root class in particular However as the base classes of the LambdaCore database have been thoroughly tested and debugged there should be very little need for any changes by the average database administrator The following section lists the verb and property definitions for the root class For each verb a description of it s function is given along with any interesting points The intent is to present each verb in such a way that it is possible to grasp the whole picture rather than just looking at the individual brushstrokes string description Verb The description verb on any object is supposed to return a string or list of strings describing the object in the detail someone would notice if they were specifically looking at it The default implementation of the look command defined on the room class prints this description using the Look self verb on the obj
123. s function calls Verb This verb is used to left justify text in a string of length len fill is the optional fill character which defaults to space This function calls string_utils space described above It is interesting to note that text need not be a string as tostr is applied to it before justification left help 9 returns left me 9 returns left 200 9 returns left 1 2 9 returns help 200 3ek KK list Chapter 1 The LambdaCore Classes 68 str english list list list str empty str and str sep str penum Verb This verb is used to return a list of things as an english sentence Note that tostr is applied so things in the list need not necessarily be strings The optional arguments allow you to control how the list is presented empty is the string returned if the list is empty The default is nothing and is the string to use instead of and in the list A common usage of this is replace and with or sep is the separator to use between words the default being Finally penum is the string to use after the penultimate elements before the and The default is to have a comma without a space english_list nothing english_list cat cat english_list cat dog cat and dog english_list cat dog pig cat dog and pig english_list 1 Mp english_list 1 2 3 Hi 300 list Hi and 300
124. s list If a player enters the mail room and is already on this list this indicates a resumption of a previously pause d mail session 1 2 3 The generic Editor Class This class provides a basic MOO code editing facility for those players who do not have access to an external editor such as Emacs It provides basic facilities for editing and compiling MOO code on verbs but cannot be considered complete or extensive Chapter 1 The LambdaCore Classes 55 1 2 4 The System Object Class The system object class is the fundamental cornerstone of the whole LambdaMOO database It is the first item in the database and hence has an object number of 0 It has no verbs defined on it but a number of interesting properties that are used to deter mine the behaviour of parts of the LambdaMOO server and Core functions In particular properties defined on the root class can be referred to using the notation as a shorthand For example if I define a property called 0 foobar 1234 then I can refer to 1234 thereafter using the shorthand foobar Shorthand references are provided for all of the base classes If a new public class is added it should be given a shorthand by adding a suitable property to the system object 0 In this way players can refer to the shorthand when creating objects that belong to the new class For example if foobar were the name of a new class then I could use create foobar named gadge
125. s you changing your name to be the same as another player Note also that spaces are not allowed in player names If the extra checks are passed the parent set_name verb is called to actually set the name memory Verb This is a player command used to return memory usage statistics for the LambdaMOO server It uses the memory_usage primitive to gather usage information which is then printed in a nicely formatted fashion announce args Verb announce_all_but args Verb This verb is used to call the announce and announce_all_but verbs in the player s location if those verbs are defined and the player is in a valid location It is used by noisy objects in player s inventories that wish to broadcast messages to both the player and others in the surrounding room notedit args Verb This is a simple verb used as a player command to invoke the note editor on the argument who list names Verb This verb is a player command used to determine who is currently connected to the MOO If names is given it is a list of player names to display in the who list In both cases the list is sorted using list_utils sort_alist and displayed Player names connection times idle times and locations are displayed Player name is determined by getting the value of the name property on the player Connection time is determined by using the connected seconds primitive Idle time is determined using the idle_seconds primitive The location is d
126. scription is a short one line description of the superclass and members is a list of object references that are in the superclass If no argument is given to the classes command it runs through the entries in the class_registry and prints out the name and description If an argument is given it is taken as one or more names of an entries in the class_ registry The names of the members of the requested classes are printed in this case using this classes_2 classes_2 obj root indent list members list printed Verb This verb is called by classes to print the members of the classes given in members It is called recursively to list all the children of every class in members If root is in the list of members then it is printed as the class root name Otherwise it is printed as a member of the class For every child of the root if it is in the set printed this classes_2 is called to print any descendants Chapter 1 The LambdaCore Classes 39 str who location msg Verb str whereis location msg Verb str page origin msg Verb str page echo msg Verb str page absent msg Verb These verbs return the value of the corresponding property on the player after pronoun substitution They are provided to allow the player to override the verbs for more distinctive and complex messages The following properties are defined for the player class current message Property This property contains an integer inde
127. set to 2 you can never see the contents when looking at the container The syntax for opacity is opacity container is where is either O 1 or 2 Chapter 1 The LambdaCore Classes 59 int set_opaque int number Verb This verb is called by Gopacity It sets the property opaque to be either 0 1 or 2 1 2 6 The Note Class The note class provides a handy way of communicating in MOO whether you want to leave somebody a quick message or perhaps leave a clue for solving an adventure The note class can also provide a good starting base for more specialized objects The letter and newspaper objects are examples of this none r ead Verb This verb first checks to see if the note can be read by the person who is attempting to read the it If they have permission to read it the note text which is stored in the property text is shown to the player none er ase Verb This verb erases all text stored on the note Only the owner of a note can erase it none wr ite string message Verb Appends the string message to the note text This function simply adds another line to the list stored in the note property text A carriage return is inserted between each list entry therefore the command write Zaphod was here on note would be read as Zaphod was here whereas the commands write Zaphod on note write was on note write here on note would be read as Zaphod was here none del ete string
128. sg is printed to the player doing the ejecting T he result returned by the indirect object s oejection msg verb is printed to everyone else in the room Finally the indirect object s eject verb is called to remove the victim QUIT Verb This player command used to be the way to disconnect from the MOO It has been replaced with the quit command Some rooms for example editors define the QUIT command If the room the player is in has a QUIT verb it is called Otherwise the verb prints a message telling the player to use the quit command Chapter 1 The LambdaCore Classes 36 none none none none none unlock Verb This verb is a player command used to unlock an object The direct object string dobjstr is matched to try and find an object to unlock If a match is found the key property is reset to 0 Any errors are reported to the invoking player lock Verb This verb is a player command used to lock an object with a specified key It first matches the direct object dobj to get an object reference number If that succeeds the lock_utils parse_keyexp verb is called to parse the key expression given for thelock If that fails a suitable error message is printed Othwerwise the key property of the object being locked is set to the returned value from the parsing verb Again any errors are reported to the invoking player version Verb This is a player command used to print the c
129. sing the room s add entrance verb none recycle Verb This verb is called by the LambdaMOO server when a room is recycled When a room is recycled something has to be done with the room s contents both players and objects to stop them ending up in nothing This is done by trying to move everything home The code to do this is shown below for x in this contents if is player x if typeof x home OBJ amp amp valid x home x moveto x home endif if x location this move x player start endif elseif valid x owner x moveto x owner endif endfor The main loop goes through the complete contents list of the room If the object is a player then it is moved home using it s moveto verb or to the player start room using the move primitive All other objects are moved to the inventories of their owners Chapter 1 The LambdaCore Classes 16 Note that if the attempt to move an object fails then no action is taken The server will place all objects still in the room into nothing when the room is recycled none lastlog Verb none lastlog player Commabd This verb is a player command used to list the times that players last connected to the MOO If player is supplied by invoking the verb as a command only the last connect time for that player is shown If no argument is supplied the verb uses the players primitive to return a list of all players in the database It then looks at each players
130. ss A container is an object that can have other objects placed within it Generic Note note A note is a child class of the Thing class It is used to store text messages which may be encrypted A note can only be recycled by the owner Generic Letter letter A letter is a child class of the Note class It provides the same facilities but also has a burn verb which the recipient can use to recycle the letter Generic Player player This is the class from which all players are descended Generic Programmer prog This is a child of the Player class used for players that are MOO programmers It defines a set of verbs that are useful for programming activities Generic Wizard wiz This is a child of the generic programmer class used for wizards Chapter 1 The LambdaCore Classes 4 The Generic Exit exit This class defines a generic exit used to link one object of class Room to another object of class Room It defines a number of messages that may be generated when an exit is used 1 1 1 The Root Class The root class is the base class from which all objects are descended It is the keystone of the database and defines fundamental verbs and properties common to every object If you are a programmer ie you have a player object with the programmer bit set you can examine the properties and verbs of the root class using the command show root class You can examine the code for a verb on the clas
131. stripped Verb This verb is used to remove the characters in the string stripped from the string subject strip_chars The quick brown fox Thequickbrownfox Strip chars The quick brown fox aeiou Th qck brwn fx list match_player str name obj meobj Verb obj match player str name obj meobj Verb This verb is used to match one or more names to player objects in the database Note that name need not be complete nor in the same case as the player s actual name If the name given is me then the value of player or meobj is returned If meobj is not a player then failed match is returned In the case where a name is not matched against a player name or alias the value failed match is returned If a name matches more than one player then the value ambiguous match is returned For example Verb Call Returned match player blip 35 match_player bli 35 match_player blip Fred 35 failed_match match_player blip Ezeke 35 99 match_player me 35 35 match_player me 1234 failed_match match_player b ambiguous_match This assumes that players named blip and Ezeke exist in the database but Fred doesn t Additionally there is more than one player whose name starts with b list words str text Verb This verb is used to split a piece of text into words in the same wat that the com mand line parser turns args into argstr This verb d
132. t 4 ININ list 4 string_utils from_value value 0 2 gives value 5 5 3 5 3 1 2 3 1 2 3 4 i 2 3h 4 string_utils from_value value 1 2 gives value 5 5 3 5 3 tr dt SS 1 2 3 4 1i 2 3 4 result pn g 5 3 y 1 2 3 1 2 3 4 41 12 3 4 result pn g 5 3 4 2 3 1 12 3 4 ININ 2 3 4 It is interesting to note that from value calls itself recursively to evaluate lists str pronoun sub str text obj who This verb is used to substitute the pronoun properties of who in all occurances of s o p r in text who is optional and defaults to player Also ni 4d i 66 Verb H ht hh are substituted by player dobj iobj this and respectively Further A propname is substituted by who propname Capitalised versions of each of these are AS 40 AP AR AN AD AT AT and Propname The full list is given below Code Property Ah S who ps S who psc ho who po 0 who poc p who pp AP who ppc Pronoun subjective subjective objective objective possessive possessive Defaults he she it He She him her Him Her his her His Her It it It its Its Chapter 1 The LambdaCore Classes Ar who pr reflexive AR who prc reflexive n who name AN who name hd dobj name AD
133. t to create an instance of the class foobar Shorthand notation is provided in the following properties Most of them refer to public classes A few refer to other global values that are used in the database editor Property mail_room Property object utiles Property lock_utils Property list _utils Property command_utils Property player Property wiz Property prog Property code_utils Property help Property nothing Property This should be used similarly to a void pointer in C Chapter 1 The LambdaCore Classes 56 failed_match Property This is the value used in all matching verbs to indicate that nothing matched ambiguous_match Property This value is used in matching verbs to indicate that more than one possible result was found perm_utils Property building_utils Property string_utils Property news Property note Property letter Property container Property thing Property exit Property room Property root_class Property This points to the class from which everything else is descended The other properties defined for the system object are listed below with details given as to their function and derivation wizard_mail_recipients Property This property is a list of object numbers It gives a list of people who will receive mail sent by players to the wizard This can loosely be interpreted as being a list of players that are involved in running the game and are not strictly wizards gripe_recipients Property This prop
134. t most This option is used for later processing by the check command list whodunnit list callers list trust list mistrust Verb This verb runs through the list of callers until it finds an object reference that is not a wizard is not in the list trust or is in the list mistrust The verb is used by player tell to locate the originator of a message It returns a list of three elements in the same format as that returned by the callers primitive this verb name programmer where this is the initial value of the variable this in that verb verb name is the name used to invoke the chosen verb and programmer is the player with whose permissions that verb is running num gag_p Verb This verb returns TRUE if the current value of the player variable is in the gag list of the object indicated by the variable this or if a non player object mentioned in the gag list if the first elements of the verbs callers list none home Verb This verb is normally invoked by the player as a command The home of a player is the room where s he goes to when they disconnect Unlike some flavours of MUD MOO does not cause you to lose all your possessions if you go home The home verb performs a simple sequence It first checks whether the player is already at home and tells him her so if this is the case Secondly a check is made that the player s home stored in the home property on the player is a valid object Chapter 1 The Lam
135. tforward If the object is not located on the player then a suitable message is sent to the player telling him her to check his her pockets If the player does possess the object and the current location accept verb indicates that the room will allow the object to be dropped the object moveto verb is invoked to move the object from the player s inventory to the contents list of the player s location Suitable messages are printed to inform the player that the action succeeded and to tell other people in the room that the object has just been dropped none moveto obj where Verb This verb should be used to move an thing object from one location to another It checks to see that where is a valid object and that the lock on wher permits the object to enter If this is the case then the root_class moveto verb is invoked to actually move the object using pass where string take_failed_msg Verb string take_succeeded_msg Verb string otake_failed_msg Verb string otake_succeeded_msg Verb string drop_failed_msg Verb string drop_succeeded_msg Verb string odrop failed msg Verb string odrop succeeded msg Verb These eight verbs are used to access the message fields used by a thing object In each case the value returned by the verb is a a version of the corresponding msg property of the object with standard pronoun substitutions performed This allows the messages to be more flexible than simple constant text stri
136. the current message If a match is found by checking the first entry in each mail record the message is removed from the messages property list If a message is not found the player is informed with a suitable message send playerl player2 Verb This command is used to send mail messages to other players The verb simply calls mail_editor invoke args verb this mail_options to start composition of a message read Verb read numi num2 Verb This command is used to read mail messages in the player s mailbox If no argument is given the current message is displayed on the player s terminal screen If a list of one or more message numbers is given each message is printed out in turn The verb first checks to see if an argument has been given If this is not the case it attempts to get the current message number and use this as the argument If there are no messages or no possible current message the verb is aborted with a warning message to the player Chapter 1 The LambdaCore Classes 45 none none none none Once the message number s to display has been decided a loop is entered which lists each message in turn For each message number given the mailbox is searched for the message with that number If no message is found with a given number a warning message is sent to the user Printing a message simply involves printing the message number and the message text the second item in the mail record Oansw
137. this messages if x 1 gt this current message this tell You have new mail Type help mail for info on reading it return endif endfor This performs a couple of actions First it calls news check to see whether the news has been updated since this player last looked at it Then it checks through the MOO Mail list on the player to see if any mail has arrived since they were last connected You could place a variety of actions into this verb For example you may wish to tell your friends when you log in by sending a suitable message to them if they are connected Similarly you may wish to produce a special message in the room you are in when you connect disfunc Verb This verb is invoked when the player disconnects from the LambdaMOO server The verb defined for the player class does nothing You might choose to override this verb to print a special message when you log out or perhaps to retrieve some of your possessions Chapter 1 The LambdaCore Classes 32 none whereis args Verb none none none none none none none none none none none none whereis args Verb This verb is a player command used to locate a player in the virtual world The code shown below allows any player to locate any other player If no argument is given a list of the locations of all the currently connected players is printed if args them connected players else who command utils player match result strin
138. to value str expr Verb This verb is used to convert a string into a value It is the opposite operation to string utils from value As with that verb this is best explained by examples string utils to value s gives S result B 5 5 3 5 3 error 1 2 3 error E H 1 2 3 list columnize columnise list items num n num width Verb This verb is used to turn a one column list of items into an n column list width is the last character position that may be occupied it defaults to a standard screen width of 79 characters For example to tell a player a list of number in three columns use the following code player tell lines string utils columnise 1 2 3 4 5 6 7 3 list parse command str command who Verb This verb is used to parse a command line in the same way that the built in command line parser does the job It returns an horrendous list of stuff that Im not quite sure about yet list match str ing str input str match Verb This verb performs wildcard matching of match to input using the character as a wildcard It returns a list of what the s actually matched Note that this verb will Chapter 1 The LambdaCore Classes 71 not catch every match if there are several different ways to parse the input More than one wildcard string may be given If a numeric argument is given it is taken to indicate whether case sensitivity should be used For example string_utils
139. to use an exit that leads into that room If the object is accepted by the room determined using the room accept verb then the leave messages are printed to thing and the other people in the room Then thing moveto is invoked to move the object from the current room to the destination of the exit Once this has been done the arrive messages for the exit are printed out to thing and the destination room s occupants none recycle Verb This verb is defined to allow an exit to be tidily removed from the database The exit is removed from the entrance and exit lists of the destination and source rooms respectively if the caller of this verb has permission to do so This is done using the room removeientrance exit verbs none leave msg Verb none oleave msg Verb none arrive msg Verb none oarrive msg Verb none nogo msg Verb none onogo msg Verb These verbs return a pronoun substituted version of the corresponding properties stored on the exit object They are used by exit move The following properties are defined for the exit class Most of them are messages used when the exit is invoked source Property This is the object that the exit leads out of If the exit has been created using the correct verbs the exit object should be in the exits list of the source room object dest Property This is the object that the exit leads to If the exit has been created using the correct verbs the exit object should be in the
140. tr with something in the player gag list If no match is found it is retried with the object gag list If this fails the command is aborted with an error message If a valid match is found it is removed from the relevant list and the player informed listgag is used to print the list after the operation has been completed news Verb This is a very simple verb used as a player command to print out the current MOO news It makes a simple call to the verb news read to actually perform the reading task gripe args Verb A gripe is a player complaint or observation that is sent using MOO mail to all the administrators in the game It is intended to provide a way to report problems with the MOO in a high priority way that will attract the attention of the people who can do something about it A good example of the use of a gripe is to complain about a bug in one of the core classes or maybe even a request for something to be added The implementation of the gripe concept involves a property on the System Object called gripe_recipients This is a list of all the players who will be mailed the gripe message When a player types in gripe they are taken to the mail room to enter their message Any text entered on the line with the gripe command is taken to be the subject of the gripe message When the message is finished and sent it is received by all the people on the gripe_recipients list gi ve Verb ha nd Verb This verb is a
141. u create an enhanced player class that you wish all new players to belong to you should change the value of this property to be the object reference of the new enhanced player class 1 2 5 The Container Class A container is a an object that can hold other object inside itself This is similar to the idea of a room except that a container has no notion of exits and can only hold things it cannot hold players The following verbs are defined for the container class none d rop obj object Verb none in sert obj object Verb none p ut obj object Verb This verb puts object into the container The container is first checked to verify that it is open if not an error message is printed For example if you have a container named pipe and an object named tobacco you could enter put tobacco in pipe If pipe is open then tobacco will be put into the pipe If you look at pipe you should see pipe Contents tobacco none g et obj object Verb none ta ke obj object Verb none re move obj object Verb This does the opposite of the put insert drop commands To remove the tobacco from the pipe you would enter Chapter 1 The LambdaCore Classes 58 remove tobacco from pipe When you look at pipe now you should see pipe It is empty none open Verb This verb will open the container and allow objects to be put into it via the put verb This verb sets the property opened to 1 none lock_for_open obj object Ver
142. uence to the nth term and returns the result as a list of numbers Note that n must be greater than or equal to zero For example gt trig_utils fibonacci 10 0 1 1 2 3 5 B 13 21 34 55 num geometric num x num n Verb This verb calculates the value of the geometric series at x to the nth term i e it approximates 1 1 x when x 1 This of course is impossible in MOO but someone may find it useful in some way n defaults to 5 Note that n must be greater than or equal to zero list div num n num q Verb This verb returns a decomposition of n by q using the division algorithm The re turned list contains the divisor and the remainder For example Verb Call Returned i trig utila div 5 1 5 OF trig utils div 5 2 2 1 trig utils div 5 3 1 2 trig utils div 5 4 131 trig utils div 5 5 11 0 Chapter 1 The LambdaCore Classes 84 num combinations num n num r Verb This verb returns the number of ways one can choose r objects from n distinct choices For example Verb Call Returned trig utils combinations 5 1 5 trig utils combinations 5 2 10 trig utils combinations 3 2 3 num permutations num n num r Verb This verb returns the number of ways possible for r objects to be ordered given n distinct locations using the formula P n r n n r For example Verb Call Returned trig utils permutations 5 1 5 trig utils permutations 5 2 20 trig utils
143. urrent server version number using the server version primitive mess ages Verb This is a player command used to list the possible message properties those that end in _msg on the dobjstr supplied The names of the messages along with their current values are displayed sw eep Verb This is a player command used to list the objects that are capable of receiving any messages sent out from the player in the current room It gathers a list of the objects in the current room from the contents property of the player s location In any element in the list is a connected player the message blip 42 is listening is printed for example If an element has a sweep_msg verb defined the returned string from this verb is printed prepended by the object s name If an element has a tell verb defined and the owner is not the invoking player or a wizard then this object is a potential snooper and is reported by a phrase such as The Fruitbat 999 has been taught to listen by blip 42 The verbs announce announce_all announce_all_but say emote huh huh2 and whisper are checked to see if the current room has a definition not owned by the invoking player or a wizard If any of these are found a message such as The Venue Hallway 1234 may have been bugged by blip if the player s location was the Venue hallway If no potential bugs are found the the message
144. x into the list of MOO Mail messages currently stored in the messages property It is used by the mail handler to determine which message the player is currently looking at messages Property This property contains a list of mail messages Each mail message is a list in the following format num line 1 line 2 line n num gives the message number used in the various MOO mail commands The list of strings contains the text of the message one line per string last connect time Property This property is an integer holding the time that this player last connected to the MUD The integer is in the format returned by the time primitive i e the number of seconds elasped since 1 January 1970 GMT ownership quota Property This property stores the current quota for the player It is not accessible by the player to prevent you increasing your building quota arbitrarily This field can be only changed by a wizard gender Property This property is used to hold a string representing the gender of the player In the normal case this is one of male female neuter This property is affected by the gender command ps Property This property is used to hold the subjective pronoun set to either he she or it as appropriate string_utils pronoun_sub replaces the string As with the value of this property po Property This property is used to hold the objective pronoun set to either him her or it
Download Pdf Manuals
Related Search
Related Contents
PIANO DI SICUREZZA E DI COORDINAMENTO ControlKey 49, ControlKey 61, ControlKey 88 clavier MIDI HP Pavilion 15-n041se AWOS System Description Samsung VP-D385 Kullanıcı Klavuzu KYOCERA FS-4020DN/KL3 User Manual - Cloudinary MANUAL DO USUÁRIO PLATAFORMA VIBRATÓRIA KIKOS P200 PAR64 CX-1 RGBW LED PAR user manual Copyright © All rights reserved.
Failed to retrieve file