@q @program whospec2.muf 1 99999 d i ( WhoSpecies Clone 1.1 Kahz@FurToonia 2/11/95 ) ( Ruffin patch 11/28/95 - _wsdark?:yes shows ws in dark room ) ( Ruffin patch 29 Mar 96 - Add IC/OOC column ) $include $lib/strings $def SPECIES "info" $def PSPECIES "species_prop" $def SEEDOING "_wsseedoing" $def DOING "_wsdoing" $def OBJECTION "_wsobjector" $def IDLETIME "_wsidle" $def PWSDARK "_wsdark?" (Ruffin) $def DEFIDLE 120 lvar DidHeader lvar DoDoDaDoing lvar IdleAfter lvar IsPuppet lvar Tmp : wstell "WS: " swap strcat .tell ; : do_help "WhoSpecies Clone 1.1 Kahz@FurToonia 30 Mar 96" .tell " " .tell "This command displays the name, awake or idle status, sex, species, and Doing" .tell "messages of players, zombies, and puppets in the current room." .tell " " .tell "ws - Show all players, zombies, and puppets in the current room." .tell "ws <player> - Show just the specified player in the current room." .tell "ws #far <player> - Show the specified player, who can be anywhere, but must" .tell " not be objecting to this command." .tell "ws #idle <time> - Sets what you consider to be the minimum time before a" .tell " player is displayed as being idle. Default is " DEFIDLE intostr strcat " seconds." strcat .tell "ws #doing - You will see Doing messages, if any." .tell "ws #!doing - You will not see Doing messages." .tell "ws do: <message> - Set your Doing message. Same as 'ws doing:'" .tell "ws #object - You object to someone using 'ws #far' on you." .tell "ws #!object - You don't object to someone using 'ws #far' on you." .tell "ws #stat - Shows your current ws settings." .tell "ic / ooc / noic - Set IC? to IC, OOC, or blank." .tell " IC is 'in character' (role playing), OOC is 'out of character'" .tell ; : idle_time 9999999 Tmp ! descriptors begin dup while swap descrcon conidle dup Tmp @ < if Tmp ! else pop then 1 - repeat pop Tmp @ IdleAfter @ < if "" exit then "[Idle " Tmp @ dup 86400 > if 86400 / intostr strcat "d" else dup 3600 > if 3600 / intostr strcat "h" else 60 / intostr strcat "m" then then strcat "]" strcat ; : do_stat "You will " Me @ SEEDOING getpropstr .yes? not if "NOT " strcat then "see any Doing lines." strcat wstell "You consider someone to be idle after " Me @ IDLETIME getpropstr dup if atoi else pop "the DEFAULT time of " strcat DEFIDLE then intostr strcat " seconds." strcat wstell "You are " Me @ OBJECTION getpropstr "far" stringcmp if "NOT " strcat then "objecting to someone doing a 'ws #far' on you." strcat wstell Me @ DOING getpropstr dup if "Doing: " swap strcat 75 strcut pop wstell else "No Doing message." wstell then ; : do_header DidHeader @ not if "Name Sex IC? Info" .tell 1 DidHeader ! then ; : get_species dup PSPECIES getpropstr dup not if pop SPECIES then getpropstr ; : is_dark "d" flag? Me @ "w" flag? not and ; : is_asleep dup awake? not swap is_dark or ; : do_one do_header dup thing? if "[" over name 20 strcut pop strcat "]" strcat else dup name then over player? if over is_asleep if "[asleep]" strcat else over idle_time strcat then then 23 strcut pop 24 STRleft IsPuppet @ if over owner name "Owner: " swap strcat strcat .tell exit then over "sex" getpropstr dup not if pop over "gender" getpropstr dup not if pop "-Unknown-" then then strcat 34 strcut pop 35 STRleft ( Ruffin section ) over "IC?" getpropstr strip dup "ic" stringcmp not if pop "IC" else dup "ooc" stringcmp not if pop "OOC" else pop "" then then " " strcat 4 strcut pop strcat " " strcat over get_species dup not if pop "-Unknown-" then strcat ( check for zombie, add owner's name at end ) over thing? if over owner dup name " | " swap strcat swap is_asleep if "[asleep]" strcat then dup Tmp ! strlen 79 swap - strcut pop Tmp @ strcat then 79 strcut pop .tell DoDoDaDoing @ if dup DOING getpropstr dup if " Doing: " swap strcat 79 strcut pop .tell else pop then then ; : do_one_nd dup is_dark if exit then do_one ; : do_whole_room dup is_dark if dup PWSDARK getpropstr "yes" strcmp if (Ruffin) "It's too dark in here. You don't see anyone." wstell exit then (Ruffin) then preempt contents begin dup ok? while 0 IsPuppet ! dup player? if do_one_nd else dup thing? if dup "z" flag? if do_one_nd else dup dup "_puppet" getpropstr .yes? swap "_puppet?" getpropstr .yes? or if 1 IsPuppet ! do_one_nd then then then then next repeat pop ; : setic ( sval snotify sother -- ; set ic/ooc/noic; Ruffin ) me @ "IC?" getpropstr 4 pick stringcmp not if pop swap pop "You are already " swap strcat .tell exit then me @ "IC?" 5 rotate setprop loc @ 0 me @ name " goes " strcat 5 rotate strcat notify_exclude "(Your other choices are " swap strcat ".)" strcat .tell ; : main 0 DidHeader ! "me" match me ! ( Ruffin ) ( Ruffin - moved this here ) dup "#help" stringcmp not if do_help exit then ( Ruffin section - brute force, yay! ) command @ dup "ic" stringcmp not if "IC" "in character (IC)." "'OOC' or 'NOIC'" setic exit then dup "ooc" stringcmp not if "OOC" "out of character (OOC)." "'IC' or 'NOIC'" setic exit then dup "noic" stringcmp not if "" "outside the bounds of OOC/IC." "'IC' or 'OOC'" setic exit else pop then Me @ SEEDOING getpropstr .yes? DoDoDaDoing ! Me @ IDLETIME getpropstr atoi dup 60 < if pop DEFIDLE then IdleAfter ! ( all players, zombies, and puppets in a room ) dup not if Loc @ do_whole_room exit then dup " " instr dup if strcut Tmp ! dup strlen 1 - strcut pop else pop 0 Tmp ! then dup dup "do:" stringcmp swap "doing:" stringcmp and not if Tmp @ if Me @ DOING Tmp @ 0 addprop else Me @ DOING remove_prop then do_stat exit then dup "#far" stringcmp not if Tmp @ dup if .pmatch dup player? if dup OBJECTION getpropstr "far" stringcmp not if "That players won't allow 'ws #far'." wstell else do_one then else "I don't see anyone with that name." wstell then exit else pop then then dup "#idle" stringcmp not if Me @ IDLETIME Tmp @ atoi dup 60 > if intostr 0 addprop else pop remove_prop then do_stat exit then Tmp @ if do_help exit then ( handle a player name ) dup 1 strcut pop "#" strcmp if dup "*" strcat Loc @ contents begin dup ok? while dup player? if dup name 3 pick smatch if Tmp @ if "I don't know which one you mean!" wstell exit then dup Tmp ! then then next repeat Tmp @ dup if dup is_dark not if do_one exit then then pop "I don't see that player here." wstell exit then dup "#doing" stringcmp not if Me @ SEEDOING "yes" 0 addprop do_stat exit then dup "#!doing" stringcmp not if Me @ SEEDOING remove_prop do_stat exit then dup "#object" stringcmp not if Me @ OBJECTION "far" 0 addprop do_stat exit then dup "#!object" stringcmp not if Me @ OBJECTION remove_prop do_stat exit then dup "#stat" stringcmp not if do_stat exit then Me @ "w" flag? if dup 1 strcut swap pop dup number? if atoi dbref dup room? if "Remote scan of " over name strcat "..." strcat wstell do_whole_room "Done." wstell exit else "Not a room." wstell then exit else pop then then "Type 'ws #help' for help." .tell ; . c q