@q @program ActivityCheck.muf 1 9999 d i ( ActivityCheck.muf v1.0 Jessy @ FurryMUCK 4/97 A simple utility for checking how many and which players have or have not logged on in the past X days. INSTALLATION: Create an action with a name such as 'idlecheck;activecheck' and link it to the program. One alias of the action needs to include the string 'active'. Link an action to the program. Ensure that the program is set M3 or W. ActivityCheck requires lib-edit and lib-mucktools, and a .tell macro. USE: Enter '<cmd> <number of days> If <cmd> includes the string 'active', ActivityCheck reports the players who *have* logged on the in past <number> days. Otherwise, it reports the players who *have not*. ActivityCheck may be freely ported. Please comment any changes. ) $include $lib/mucktools $include $lib/edit lvar ourCounter lvar ourString lvar ourTally lvar ourCount lvar ourBoolean : TallyLine ( -- ) (* show total number of positive results *) "Total: " ourTally @ intostr strcat " out of " strcat #-1 stats pop swap pop swap pop swap pop swap pop swap pop intostr strcat " players have " strcat ourBoolean @ not if "not " strcat then "logged on in the past " strcat ourString @ intostr strcat " days." strcat .tell "Numbers in parentheses indicate usecount." .tell ; : main "me" match me ! me @ "W" flag? not if (* check perm *) "Permission denied." .tell exit then command @ tolower "active" instr if 1 ourBoolean ! then 1 ourCounter ! dup number? not if (* check syntax *) ">> Syntax: '" command @ strcat " <number of days>" strcat .tell exit then atoi ourString ! 0 ourTally ! " " .tell "Scanning database for " ourBoolean @ if "active" else "idle" then strcat " players..." strcat .tell " " .tell background (* get process out of the way *) begin (* go check those players! *) ourCounter @ dbref dbtop dbcmp not while ourCounter @ dbref dup player? if dup timestamps ourCount ! swap pop swap pop systime swap - 86400 / ourString @ ourBoolean @ if < else > then if (* found one... put data on stack as a string *) name " (" strcat ourCount @ intostr strcat ")" strcat ourTally @ 1 + ourTally ! else pop then else pop then depth 500 > if "Impending stack overflow! Here's what we have up to 500... " .tell break then ourCounter @ 1 + ourCounter ! repeat depth not if (* tally what we came up with *) TallyLine exit then depth 0 0 EDITsort 3-col " " .tell TallyLine ; . c q