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):
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!