A TinyMUX RP Approval System


  • Coder

    I didn't expect this to be a stand-alone system, but in all the years I've coded for RP Mu*s here is a system that covers everything that I was asked to (and sometimes not asked to do):

    A TinyMUX RP Approval System

    The setup instructions are in the file, and though it currently is buried within my GMC (nWoD v2) chargen.


    WHAT IS THIS FOR?

    This is to make a user-defined function and a system to keep track of the various approval states of characters. This system can keep track of:

    • chargen (never approved ever)
    • approved (a-ok for the RP)
    • unapproved (no longer ok for RP; a revoked 'approve')
    • npc (approved + npc)
    • storyteller (approved + storyteller)
    • frozen (unapproved + frozen)
    • dead (unapproved + dead)

    The states of 'npc', 'storyteller', and probably 'frozen' are for other systems to access. You don't have to use them if you don't want to.

    <GAMENAME>.CONF

    You're going to need a few things, the most important of which is access to the server account. User-defined flags are relied upon, and you'll need to be the one to make them.

    Depending on your install, you're probably looking for <gamename>.conf in which you'll want to make sure you're not clobbering flags made by other people. You'll need four.

    Suffice it to say, re-name the 'marker*<x>*' to the free flag markers. You only get nine.

    ## flags ########################################
    ## flags: approval
    flag_name marker0 approved
    flag_name marker1 NPC
    flag_name marker2 unapproved
    flag_name marker3 storyteller
    
    flag_access marker0 wizard
    flag_access marker1 wizard
    flag_access marker2 wizard
    flag_access marker3 wizard
    

    USER-DEFINED FUNCTIONS

    Each game has a slightly different way of defining functions, that is, of using the @function wiz-only command. After you install the system, make sure that isapproved() is not using the /privileged switch!

    This system makes only one function, isapproved(), but like most of my code, I use it to death. Even isapproved() uses isapproved()!

    INSTALLATION

    Because this is currently buried in the GMCCG, you'll need to make an object for it first. From someone who is wizard-endowed:

    @create Character Generation Approval System <cg>=10
    @set cg=inherit safe
    

    Then, go to the link above. Copy all of it. Paste it in @Glitch's Muxify.

    Finally, make sure that &ufunc.isapproved is caught by whatever @function machine you have on your game.

    Then drop the object in your master room and @restart. Viola!

    TWEAKING THE APPROVAL TYPES

    Each approval type has its own command, and each approval type can be tweaked. After doing the usual log-handling stuff, the system triggers an attribute specifically for that command/approval type.

    Here is cg/freeze, which is probably the one that will be tweaked the most.

    &trig.approval.switch/freeze cg=
    	@set %1=unapproved !approved !npc !storyteller; 
    	@set %1=_approval.frozen:%2; 
    

    You might want to rename the character, or teleport them, or do other things to them. Add it here. Let's add the semi-standard re-name:

    	@name %1=[name( %1 )]_[rest( %1, # )]; 
    	@teleport/quiet %1=#<my freezer>; 
    	@trigger %!/trig.unapprove.foo=%1; 
    

    TWEAKING THE CG/LOG

    I'm not currently a huge fan of the timestamp output for cg/log, or adding the dbref to the enacting staffer for that log entry, so I made each column of output flexible. &format.approval.<thing> is where you want to look:

    &format.approval.timestamp cg=
    	timefmt( $H:$M $d.$m.$y, %0 )
    

    A NOTE ABOUT DISPLAY WIDTH

    I use wheader() et al. because it stretches across the player's screen, and the rest of the code in this system expects to know how wide the user's screen is. Use it. Thanks.

    A HELP FILE

    I don't really have one written yet. Sorry!


  • Coder

    Maybe you want to know how long someone has spent approved, so I created a function to pull that information from the middle of this code (but not, yet, via the isapproved() function). It hasn't been tested, yet, but I'm sure it will be.

    Here's the commit.