TinTin++ Mud Client Scripts
This script will enable a promptbar and automapping for any MSDP enabled MUD supporting the ROOM, HEALTH, MANA, MOVEMENT, EXPERIENCE, MONEY, and ROOM_EXITS variables. You can test this script on Lowlands (mudhalla.grapevine.haus 4321).

This script is written for v2.01.97 and higher

#EVENT {SESSION CONNECTED}
{
    #variable TELNET[IAC]  \xFF;
    #variable TELNET[DONT] \xFE;
    #variable TELNET[DO]   \xFD;
    #variable TELNET[WONT] \xFC;
    #variable TELNET[WILL] \xFB;
    #variable TELNET[SB]   \xFA;
    #variable TELNET[SE]   \xF0;
    #variable TELNET[MSDP] \x45;
    #variable MSDP[VAR]   \x01;
    #variable MSDP[VAL]   \x02;
    #variable MSDP[TABLE_OPEN]  \x03;
    #variable MSDP[TABLE_CLOSE] \x04;
    #variable MSDP[ARRAY_OPEN]  \x05;
    #variable MSDP[ARRAY_CLOSE] \x06;
    #variable {MSDP_REPORTABLE_VARIABLES}{{ROOM};{ROOM_EXITS};{ALIGNMENT};{EXPERIENCE};{EXPERIENCE_MAX};{HEALTH};{HEALTH_MAX};{LEVEL};{MANA};{MANA_MAX};{MONEY};{MOVEMENT};{MOVEMENT_MAX};{ROOM_EXITS};};
    #nop Turn telnet debug on if there are problems.;
    #config {debug telnet} {off};
    #split 16 1;
    #map create 100000;
    #map flag nofollow;
    #map flag vtmap;
    #map flag static;
    #map read msdp.map
}

#EVENT {SESSION DISCONNECTED}
{
    #map write msdp.map
}

#VARIABLE {DIR_NAME}
{
    {d} {D}
    {down} {D}
    {e} {E}
    {east} {E}
    {n} {N}
    {north} {N}
    {s} {S}
    {south} {S}
    {u} {U}
    {up} {U}
    {w} {W}
    {west} {W}
}
#FUNCTION {colscale}
{
    #switch {10 * %1 / %2}
    {
        #case {0}
        {
            #return {<faa>}
        };
        #case {1}
        {
            #return {<fba>}
        };
        #case {2}
        {
            #return {<fca>}
        };
        #case {3}
        {
            #return {<fda>}
        };
        #case {4}
        {
            #return {<fea>}
        };
        #case {5}
        {
            #return {<ffa>}
        };
        #case {6}
        {
            #return {<efa>}
        };
        #case {7}
        {
            #return {<dfa>}
        };
        #case {8}
        {
            #return {<cfa>}
        };
        #case {9}
        {
            #return {<bfa>}
        };
        #default
        {
            #return {<afa>}
        }
    }
}

#EVENT {IAC WILL MSDP}
{
    #send {$TELNET[IAC]$TELNET[DO]$TELNET[MSDP]\};
    msdp_report
}

#EVENT {IAC SB MSDP}
{
    #nop Save all variables with an MSDP_ prefix.;
    #variable {MSDP_%0} {%1}
}

#EVENT {IAC SB MSDP IAC SE}
{
    #if {&{MSDP_ROOM_EXITS} == 0}
    {
        #return
    };
    #format {prompt} {};
    #format {prompt} {$prompt<038> Hp: @colscale{$MSDP_HEALTH;$MSDP_HEALTH_MAX}%+4s<238>/<138>%-4s } {$MSDP_HEALTH} {$MSDP_HEALTH_MAX};
    #format {prompt} {$prompt<238> Mn: @colscale{$MSDP_MANA;$MSDP_MANA_MAX}%+4s<238>/<138>%-4s } {$MSDP_MANA} {$MSDP_MANA_MAX};
    #format {prompt} {$prompt<238> Mv: @colscale{$MSDP_MOVEMENT;$MSDP_MOVEMENT_MAX}%+4s<238>/<138>%-4s } {$MSDP_MOVEMENT} {$MSDP_MOVEMENT_MAX};
    #format {prompt} {$prompt<238> Xp: @colscale{$MSDP_EXPERIENCE;$MSDP_EXPERIENCE_MAX}%-3m } {100 * $MSDP_EXPERIENCE / $MSDP_EXPERIENCE_MAX};
    #format {prompt} {$prompt<238> Gd: %-8s } {$MSDP_MONEY};
    #variable exits {};
    #foreach {n;north;e;east;s;south;w;west;u;up;d;down} {exit}
    {
        #if {&MSDP_ROOM_EXITS[$exit] == 0}
        {
            #continue
        };
        #if {"$MSDP_ROOM_EXITS[$exit]" == "{O|OPEN}"}
        {
            #variable {exits} {$exits<138>$DIR_NAME[$exit]}
        };
        #else
        {
            #variable {exits} {$exits<168>$DIR_NAME[$exit]}
        }
    };
    #format {prompt} {$prompt <238>Ex: %-6s} {$exits   <088>};
    #line ignore #showme {$prompt} {-2}
}

#EVENT {IAC SB MSDP ROOM}
{
    #variable {MSDP_ROOM} {%1};
    #map goto {$MSDP_ROOM[VNUM]} {dig};
    #map set roomarea $MSDP_ROOM[AREA];
    #map set roomname $MSDP_ROOM[NAME];
    #map set roomterrain $MSDP_ROOM[TERRAIN];
    #map set roomcolor <178>;
    #nop Create unmapped exits and color unexplored rooms red.;
    #foreach {*MSDP_ROOM[EXITS][%*]} {EXIT}
    {
        #map get {roomexit} {EXIT_LIST};
        #if {&EXIT_LIST[$EXIT] == 0}
        {
            #map get {roomvnum} {EXIT_VNUM} {$MSDP_ROOM[EXITS][$EXIT]};
            #map dig {$EXIT} {$MSDP_ROOM[EXITS][$EXIT]};
            #if {$EXIT_VNUM == 0}
            {
                #map set {roomcolor} {<118>} {$MSDP_ROOM[EXITS][$EXIT]}
            }
        }
    }
}

#ALIAS {msdp_report}
{
    #nop Ask the server to report all keys inside REPORTABLE_VARIABLES;
    #variable result {$TELNET[IAC]$TELNET[SB]$TELNET[MSDP]$MSDP[VAR]REPORT};
    #foreach {*MSDP_REPORTABLE_VARIABLES[]} {tmp}
    {
        #variable result {$result$MSDP[VAL]$tmp}
    };
    #send {$result$TELNET[IAC]$TELNET[SE]\}
}

#ALIAS {msdp_list}
{
    #send {$TELNET[IAC]$TELNET[SB]$TELNET[MSDP]$MSDP[VAR]LIST$MSDP[VAL]%0$TELNET[IAC]$TELNET[SE]\}
}

#ALIAS {msdp_send}
{
    #send {$TELNET[IAC]$TELNET[SB]$TELNET[MSDP]$MSDP[VAR]SEND$MSDP[VAL]%0$TELNET[IAC]$TELNET[SE]\}
}

#ALIAS {example}
{
    msdp_list COMMANDS;
    msdp_list REPORTABLE_VARIABLES;
    msdp_report
}