TinTin++ Mud Client Scripts
Arachnos is an Intermud standard utilizing MSDP. See: Arachnos Intermud Network for more information.

This script is written for v2.02.41 and higher

#EVENT {IAC WILL MSDP}
{
    #send {$TELNET[IAC]$TELNET[DO]$TELNET[MSDP]\};
    #nop The ID should be a unique number between 1 and 2000000000, but for testing this will work;
    #send {$TELNET[IAC]$TELNET[SB]$TELNET[MSDP]$MSDP[VAR]ARACHNOS_ID$MSDP[VAL]123456789$TELNET[IAC]$TELNET[SE]\};
    #send {$TELNET[IAC]$TELNET[SB]$TELNET[MSDP]$MSDP[VAR]REPORT$MSDP[VAL]ARACHNOS_DEVEL$MSDP[VAL]ARACHNOS_CHAT$TELNET[IAC]$TELNET[SE]\}
}

#EVENT {IAC WILL MSSP}
{
    update_mudlist
}

#EVENT {IAC SB MSSP NAME}
{
    #variable MUD_NAME %1
}

#EVENT {IAC SB MSSP PLAYERS}
{
    #variable MUD_PLAYERS %1
}

#EVENT {IAC SB MSSP UPTIME}
{
    #variable MUD_UPTIME %1
}

#EVENT {SESSION CONNECTED}
{
    #config {telnet} {debug};
    #variable MUD_NAME %0;
    #variable MUD_HOST %1;
    #variable MUD_PORT %3;
    #variable CONNECT_RETRY 0;
    #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 TELNET[MSSP] \x46;
    #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
}

#EVENT {SESSION DISCONNECTED}
{
    #math CONNECT_RETRY $CONNECT_RETRY + 1;
    #if {$CONNECT_RETRY < 10}
    {
        #gts #delay {10 * $CONNECT_RETRY} #session {%0} {%1} {%3}
    }
}

#EVENT {IAC SB MSDP ARACHNOS_DEVEL}
{
    #variable {DEVEL} {%1};
    #showme <118>[DEVEL DEBUG] $DEVEL[MSG_USER] : $DEVEL[MSG_BODY];
    #format time_stamp %T;
    #variable result {};
    #cat result $TELNET[IAC]$TELNET[SB]$TELNET[MSDP];
    #cat result $MSDP[VAR]ARACHNOS_DEVEL$MSDP[VAL]$MSDP[TABLE_OPEN];
    #cat result $MSDP[VAR]MUD_NAME$MSDP[VAL]$MUD_NAME;
    #cat result $MSDP[VAR]MUD_HOST$MSDP[VAL]$MUD_HOST;
    #cat result $MSDP[VAR]MUD_PORT$MSDP[VAL]$MUD_PORT;
    #cat result $MSDP[VAR]MSG_TIME$MSDP[VAL]$time_stamp;
    #cat result $MSDP[VAR]MSG_USER$MSDP[VAL]$DEVEL[MSG_USER];
    #cat result $MSDP[VAR]MSG_BODY$MSDP[VAL]$DEVEL[MSG_BODY];
    #cat result $MSDP[TABLE_CLOSE]$TELNET[IAC]$TELNET[SE];
    #all #send {$result\}
}

#EVENT {IAC SB MSDP ARACHNOS_CHAT}
{
    #variable {CHAT} {%1};
    #showme <118>[CHAT DEBUG] $CHAT[MSG_USER] : $CHAT[MSG_BODY];
    #format time_stamp %T;
    #variable result {};
    #cat result $TELNET[IAC]$TELNET[SB]$TELNET[MSDP];
    #cat result $MSDP[VAR]ARACHNOS_CHAT$MSDP[VAL]$MSDP[TABLE_OPEN];
    #cat result $MSDP[VAR]MUD_NAME$MSDP[VAL]$MUD_NAME;
    #cat result $MSDP[VAR]MUD_HOST$MSDP[VAL]$MUD_HOST;
    #cat result $MSDP[VAR]MUD_PORT$MSDP[VAL]$MUD_PORT;
    #cat result $MSDP[VAR]MSG_TIME$MSDP[VAL]$time_stamp;
    #cat result $MSDP[VAR]MSG_USER$MSDP[VAL]$CHAT[MSG_USER];
    #cat result $MSDP[VAR]MSG_BODY$MSDP[VAL]$CHAT[MSG_BODY];
    #cat result $MSDP[TABLE_CLOSE]$TELNET[IAC]$TELNET[SE];
    #all #send {$result\}
}

#ALIAS {update_mudlist}
{
    #send {$TELNET[IAC]$TELNET[DO]$MSSP\};
    #delay {12}{update_mudlist_delayed};
    #delay {update_mudlist} {update_mudlist} {3600}
}

#ALIAS {update_mudlist_delayed}
{
    #if {&MUD_UPTIME}
    {
        #format time_stamp %T;
        #variable result {};
        #cat result $TELNET[IAC]$TELNET[SB]$TELNET[MSDP];
        #cat result $MSDP[VAR]ARACHNOS_MUDLIST$MSDP[VAL]$MSDP[TABLE_OPEN];
        #cat result $MSDP[VAR]MUD_NAME$MSDP[VAL]$MUD_NAME;
        #cat result $MSDP[VAR]MUD_HOST$MSDP[VAL]$MUD_HOST;
        #cat result $MSDP[VAR]MUD_PORT$MSDP[VAL]$MUD_PORT;
        #cat result $MSDP[VAR]MUD_UPTIME$MSDP[VAL]$MUD_UPTIME;
        #cat result $MSDP[VAR]MUD_UPDATE$MSDP[VAL]$time_stamp;
        #cat result $MSDP[VAR]MUD_PLAYERS$MSDP[VAL]$MUD_PLAYERS;
        #cat result $MSDP[TABLE_CLOSE]$TELNET[IAC]$TELNET[SE];
        #all #send {$result\}
    }
}