Must-Have Mux Functions?
Both @Chime and I share a love-hate relationship with Mux Code these days, but she keeps going back to make possible changes to the server to make it more usable, and I keep doing softcode bits for it. Right now my medium-term project with this is bringing the core SGP install up to date.
With that, I present a list of what I have put in as mandatory functions. Input or additions welcome.
(The addition I don't have here and am waffling on is
ictime(). Seems like something that would belong to a different system.)
- isstaff(): Not just 'is staff?' but levels for 'wizard' and 'admin/royalty' too.
- msg(): Instead of having multiple ways of formatting '<game> message', we should have one
- titlestr(): Makes Text Look a Lot Like This
- lmax()/lmin(): max/min with a delimiter
- isic(): for a different system?
- shortdesc(): for a different system?
- vcolumns()/vtable(): Chime and my vertical-column-output code
- crumple(): trim() + squish(), I use this a lot
- say(): simple way to format input into say/pose/emit output
- lpmatch(): list-pmatch
- width(): a replacement to built-in width() that uses a user-definable '&width' attribute
Regarding lpmatch, does mux not have namelist()?
It does not.
For IC vs OOC time, I'd recommend using the code I wrote for DarkSpires there.
QUIT @va me=#230 - @wipe %va - @name %va=Time Commands - &conf_ic_ratio %va=1.5 - &conf_ooc_launch %va=Tue Jan 01 00:00:00 2013 - &conf_ic_launch %va=Tue Jan 01 00:00:00 2002 - &fn_offset %va= sub( convtime( get( #230/conf_ooc_launch ), utc ), convtime( get( #230/conf_ic_launch ), utc )) - &gfn_ictimeof %va= add( mul( sub( %0, convtime( get( #230/conf_ooc_launch ), utc )), get( #230/conf_ic_ratio )), convtime( get( #230/conf_ic_launch ), utc )) - &gfn_ooctimeof %va= add( trunc( fdiget( #230/ sub( %0, convtime( get( #230/conf_ic_launch ), utc )), get( #230/conf_ic_ratio ))), convtime( get( #230/conf_ooc_launch ), utc )) - &gfn_icsecs %va=ictimeof( secs() ) - &cmd_time %va=$+time: @pemit %#= strcat( header( +time )%r, OOC Time:%b, convsecs( secs(), utc ) UTC.%r, %bIC Time:%b, convsecs( icsecs(), utc ) UTC.%r, %rEventually cool moon and weather stuff will go here.%r, %rRemember that this game runs on loose-IC time%;%b, feel free to RP with an IC time-setting near the IC time listed above.%r, footer()) -
isstaff() et all
These should probably change into a more general purpose group membership test system, but in the absence of consensus, isstaff() is a pretty good simple answer. Given more time/energy/giveadamn, I'd recommend something like
hasrole( dbref, rolename )
were rolename might be staff, etc.
I regret the existence of wheader() as a separate things. Most newer games using my base code just have header() and it is wide. That looks bad with certain older crufty mushcode. It might be good to have a more general api for visual-form construction, but header/divider/footer is the basic minimum.
I know you're proud of how very clever it is, but... is it really used that much?
Brazil added hardcode for these in the 2.12 tree in January. Otherwise yes.
Hmmmmmm. I want to say that a more general concept of "situational context" should be articulated here, but isic is reasonable.
is an approach to permissions. Really it should just be
@attribute short-desc=visualor something, but people never seem to remember that.
Never heard of it, but sounds handy.
Only if it is per-object overridable, like MOOs tend to do.
How is this different than iter( ...,pmatch(%i0))?
Hrm. Yeah, I guess. Might be wise to call it uwidth() or the like. Along these lines it might also be good to have header/divider/footer take an optional width argument, so that they can be used in the construction of more complex form combinators.
I regret the existence of wheader() as a separate things.
And so, my header is really:
- header( <text>[, <width>] )
- wheader( <text>) -> header( <text>, width( %# ))
More comments and replies later.