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 (lolamud.net 6969).

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 {%0}
     {
          #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
}