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.
    • header()/footer()/divider()/wheader()/etc.
    • 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
    • plural()
    • 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.

    @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=
        convtime( get( #230/conf_ooc_launch ), utc ), 
        convtime( get( #230/conf_ic_launch ), utc ))
    &gfn_ictimeof %va=
          sub( %0, convtime( get( #230/conf_ooc_launch ), utc )),
          get( #230/conf_ic_ratio )),
        convtime( get( #230/conf_ic_launch ), utc ))
    &gfn_ooctimeof %va=
        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 %#=
        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,

    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.

    header() ...

    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.

    msg() ...



    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=visual or 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.

  • @Chime said:

    header() ...
    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.

Log in to reply