#include <network.h>
mapping reply, notes;
string mssp_reply(){
    string *k;
    int i;
    string ret, ip = query_intermud_ip();
    string intermud = "";
   
    if(find_object(INTERMUD_D)) intermud += "i3";
    if(find_object(IMC2_D)){
        if(sizeof(intermud)) intermud += "\t";
        intermud += "IMC2";
    }
    if(!sizeof(intermud)) intermud = "0";
    reply = ([
            "NAME"             : mud_name(),
            "PLAYERS"          : itoa(sizeof(users())),
            "UPTIME"           : itoa(time() - uptime()),
            "PORT"             : itoa(query_host_port()),
            "CODEBASE"         : mudlib()+" "+mudlib_version(),
            "CONTACT"          : ADMIN_EMAIL,
            "WHO"              : implode(map(filter(users(),
            (: (environment($1) && !($1->GetInvis())) :)), 
            (: $1->GetCapName():)), "\t"),
            "HOSTNAME"         : ip,
            "DESCRIPTION"      : "A fun mud!",
            "CREATED"          : itoa(local_time()[5]),
            "ICON"             : "http://"+ip+":"+PORT_HTTP+"/favicon.ico",
            "IP"               : ip,
            "LANGUAGE"         : "English",
            "LOCATION"         : "United States",
            "MINIMUM AGE"      : "13",
            "WEBSITE"          : "http://"+ip+":"+PORT_HTTP,
            "FAMILY"           : "LPMud",
            "GENRE"            : "Adventure",
            "SUBGENRE"         : "Adventure",
            "GAMEPLAY"         : "Adventure",
            "GAMESYSTEM"       : "Custom",
            "INTERMUD"         : intermud,
            "STATUS"           : "Alpha",
            "AREAS"            : "7",
            "HELPFILES"        : "N/A",
            "MOBILES"          : "150",
            "OBJECTS"          : "300",
            "ROOMS"            : "300",
            "RESETS"           : "N/A",
            "MUDPROGS"         : "N/A",
            "MUDTRIGS"         : "N/A",
            "CLASSES"          : "5",
            "LEVELS"           : "300",
            "RACES"            : "72",
            "SKILLS"           : "N/A",
            "DBSIZE"           : "N/A",
            "EXITS"            : "N/A",
            "EXTRA DESCRIPTIONS" : "N/A",
            "ADULT MATERIAL"   : "0",
            "MULTICLASSING"    : "0",
            "PLAYER CITIES"    : "0",
            "PLAYER CLANS"     : "0",
            "PLAYER CRAFTING"  : "0",
            "PLAYER GUILDS"    : "0",
            "EQUIPMENT SYSTEM" : "N/A",
            "MULTIPLAYING"     : "Full",
            "PLAYERKILLING"    : "Full",
            "QUEST SYSTEM"     : "Automated\tIntegrated",
            "ROLEPLAYING"      : "None",
            "TRAINING SYSTEM"  : "Skill",
            "WORLD ORIGINALITY": "Mostly Original",
            "ANSI"             : "1",
            "MCCP"             : "0",
            "SSL"              : "0",
            "MCP"              : "0",
            "MSP"              : "0",
            "MXP"              : "0",
            "PUEBLO"           : "0",
            "VT100"            : "0",
            "XTERM 256 COLORS" : "0",
            "PAY TO PLAY"      : "0",
            "PAY FOR PERKS"    : "0",
            "HIRING BUILDERS"  : "1",
            "HIRING CODERS"    : "1",
            ]);
    notes = ([
            "FAMILY-NOTES"           : "descendant of Nightmare",
            "HELPFILES-NOTES"        : "each command, and hundreds of other docs",
            "MOBILES-NOTES"          : "npc's can be cloned, so there can be thousands",
            "OBJECTS-NOTES"          : "objects can be cloned, so there can be thousands",
            "ROOMS-NOTES"            : "areas have generated rooms, could be millions",
            "RESETS-NOTES"           : "doesn't apply, LPMud",
            "MUDPROGS-NOTES"         : "doesn't apply, LPMud",
            "MUDTRIGS-NOTES"         : "doesn't apply, LPMud",
            "RACES-NOTES"            : "not all are playable",
            "SKILLS-NOTES"           : "many, but not like Diku",
            ]);
    ret = "MSSP-REPLY-START\r\n";
    k = keys(reply);
#ifdef __DSLIB__
    k = sort_array(k, -1);
#endif
    for(i = (sizeof(k) - 1); i > -1; i--){
        ret += k[i];
        ret += "\t";
        ret += reply[k[i]];
        ret += "\r\n";
    }
    k = keys(notes);
#ifdef __DSLIB__
    k = sort_array(k, -1);
#endif
    for(i = (sizeof(k) - 1); i > -1; i--){
        ret += k[i];
        ret += "\t";
        ret += notes[k[i]];
        ret += "\r\n";
    }
    ret += "MSSP-REPLY-END\r\n";
    return ret;
}
mapping mssp_map(){
    string text = mssp_reply();
    mapping ret = ([]), tmp = add_maps(reply, notes);
    foreach(mixed key, mixed val in tmp){
        if(undefinedp(val)) continue;
        if(grepp(val, "\t")){
            ret[key] = explode(val, "\t");
        }
        else ret[key] = val;
    }
    return ret;
}