int process_do_mssp( DESCRIPTOR_DATA *d, unsigned char *src, int srclen ) { DESCRIPTOR_DATA *dc; int cnt = 0; extern int int_boot_time; for ( dc = first_desc; dc != NULL; dc = dc->next ) if ( dc->character != NULL ) cnt++; write_to_buffer(d, (const char *)IAC_SB_MSSP); /* Required */ mssp_reply(d, "PLAYERS", cnt); mssp_reply(d, "UPTIME", int_boot_time); /* Generic */ mssp_reply(d, "HOSTNAME", MSSP_HOSTNAME); mssp_reply(d, "PORT", MSSP_PORT); mssp_reply(d, "CODEBASE", VERS_STRING); mssp_reply(d, "CONTACT", MSSP_CONTACT); mssp_reply(d, "CREATED", MSSP_CREATED); mssp_reply(d, "ICON", MSSP_ICON); mssp_reply(d, "IP", MSSP_IP); mssp_reply(d, "LANGUAGE", MSSP_LANGUAGE); mssp_reply(d, "LOCATION", MSSP_LOCATION); mssp_reply(d, "MINIMUM AGE", MSSP_MIN_AGE); mssp_reply(d, "NAME", MSSP_NAME); mssp_reply(d, "WEBSITE", MSSP_WEBSITE); /* Categorization */ mssp_reply(d, "FAMILY", MSSP_FAMILY); mssp_reply(d, "GENRE", MSSP_GENRE); mssp_reply(d, "GAMEPLAY", MSSP_GAMEPLAY); mssp_reply(d, "GAMESYSTEM", MSSP_GAMESYSTEM); mssp_reply(d, "INTERMUD", MSSP_INTERMUD); mssp_reply(d, "STATUS", MSSP_STATUS); mssp_reply(d, "SUBGENRE", MSSP_SUBGENRE); /* World */ mssp_reply(d, "AREAS", area_list.size()); mssp_reply(d, "HELPFILES", mudinfo.total_helpfiles); mssp_reply(d, "MOBILES", mob_index_list.size()); mssp_reply(d, "OBJECTS", obj_index_list.size()); mssp_reply(d, "ROOMS", room_index_list.size()); mssp_reply(d, "RESETS", reset_list.size()); mssp_reply(d, "MUDPROGS", 0); mssp_reply(d, "MUDTRIGS", 0); mssp_reply(d, "CLASSES", MSSP_CLASSES); mssp_reply(d, "LEVELS", MSSP_LEVELS); mssp_reply(d, "RACES", MSSP_RACES); mssp_reply(d, "SKILLS", count_skills()); /* Protocols */ mssp_reply(d, "ANSI", 1); mssp_reply(d, "MCCP", 0); mssp_reply(d, "MCP", 0); mssp_reply(d, "MSP", 0); mssp_reply(d, "SSL", 0); mssp_reply(d, "MXP", 0); mssp_reply(d, "PUEBLO", 0); mssp_reply(d, "VT100", 0); mssp_reply(d, "XTERM 256 COLORS", 0); /* Commercial */ mssp_reply(d, "PAY TO PLAY", 0); mssp_reply(d, "PAY FOR PERKS", 0); /* Hiring */ mssp_reply(d, "HIRING BUILDERS", MSSP_HIRE_BUILDER); mssp_reply(d, "HIRING CODERS", MSSP_HIRE_CODER); write_to_buffer(d, (const char *)IAC_SE); return 3; }
void send_mssp_data( DESCRIPTOR_DATA *d ) { if ( !d ) { bug( "%s: NULL d", __FUNCTION__ ); return; } write_to_descriptor( d, "\r\nMSSP-REPLY-START\r\n", 0 ); mssp_reply( d, "HOSTNAME", "%s", mssp_info->hostname ); mssp_reply( d, "PORT", "%d", port ); mssp_reply( d, "UPTIME", "%d", ( int ) mud_start_time ); mssp_reply( d, "PLAYERS", "%d", player_count( ) ); mssp_reply( d, "CODEBASE", "%s", codebase ); mssp_reply( d, "CONTACT", "%s", mssp_info->contact ); mssp_reply( d, "CREATED", "%d", mssp_info->created ); mssp_reply( d, "ICON", "%s", mssp_info->icon ); mssp_reply( d, "LANGUAGE", "%s", mssp_info->language ); mssp_reply( d, "LOCATION", "%s", mssp_info->location ); mssp_reply( d, "MINIMUM AGE", "%d", mssp_info->minAge ); mssp_reply( d, "NAME", "%s", sysdata.mud_name ); mssp_reply( d, "WEBSITE", "%s", mssp_info->website ); mssp_reply( d, "FAMILY", "%s", mssp_info->family ); mssp_reply( d, "GENRE", "%s", mssp_info->genre ); mssp_reply( d, "GAMEPLAY", "%s", mssp_info->gamePlay ); mssp_reply( d, "GAMESYSTEM", "%s", mssp_info->gameSystem ); mssp_reply( d, "INTERMUD", "%s", mssp_info->intermud ); mssp_reply( d, "STATUS", "%s", mssp_info->status ); mssp_reply( d, "SUBGENRE", "%s", mssp_info->subgenre ); mssp_reply( d, "AREAS", "%d", top_area ); mssp_reply( d, "HELPFILES", "%d", top_help ); mssp_reply( d, "MOBILES", "%d", top_mob_index ); mssp_reply( d, "OBJECTS", "%d", top_obj_index ); mssp_reply( d, "ROOMS", "%d", top_room ); mssp_reply( d, "RESETS", "%d", top_reset ); // mssp_reply( d, "MUDPROGS", "%d", top_prog ); mssp_reply( d, "CLASSES", "%d", MAX_CLASS ); mssp_reply( d, "LEVELS", "%d", MAX_LEVEL ); mssp_reply( d, "RACES", "%d", MAX_RACE ); // mssp_reply( d, "SKILLS", "%d", num_skills ); mssp_reply( d, "WORLDS", "%d", mssp_info->worlds ); mssp_reply( d, "ANSI", "%d", mssp_info->ansi ); mssp_reply( d, "MCCP", "%d", mssp_info->mccp ); mssp_reply( d, "MCP", "%d", mssp_info->mcp ); mssp_reply( d, "MSP", "%d", mssp_info->msp ); mssp_reply( d, "SSL", "%d", mssp_info->ssl ); mssp_reply( d, "MXP", "%d", mssp_info->mxp ); mssp_reply( d, "PUEBLO", "%d", mssp_info->pueblo ); mssp_reply( d, "VT100", "%d", mssp_info->vt100 ); mssp_reply( d, "XTERM 256 COLORS", "%d", mssp_info->xterm256 ); mssp_reply( d, "PAY TO PLAY", "%d", mssp_info->pay2play ); mssp_reply( d, "PAY FOR PERKS", "%d", mssp_info->pay4perks ); mssp_reply( d, "HIRING BUILDERS", "%d", mssp_info->hiringBuilders ); mssp_reply( d, "HIRING CODERS", "%d", mssp_info->hiringCoders ); mssp_reply( d, "ADULT MATERIAL", "%d", mssp_info->adultMaterial ); mssp_reply( d, "MULTICLASSING", "%d", mssp_info->multiclassing ); mssp_reply( d, "NEWBIE FRIENDLY", "%d", mssp_info->newbieFriendly ); mssp_reply( d, "PLAYER CITIES", "%d", mssp_info->playerCities ); mssp_reply( d, "PLAYER CLANSS", "%d", mssp_info->playerClans ); mssp_reply( d, "PLAYER CRAFTING", "%d", mssp_info->playerCrafting ); mssp_reply( d, "PLAYER GUILDS", "%d", mssp_info->playerGuilds ); mssp_reply( d, "EQUIPMENT SYSTEM", "%s", mssp_info->equipmentSystem ); mssp_reply( d, "MULTIPLAYING", "%s", mssp_info->multiplaying ); mssp_reply( d, "PLAYERKILLING", "%s", mssp_info->playerKilling ); mssp_reply( d, "QUEST SYSTEM", "%s", mssp_info->questSystem ); mssp_reply( d, "ROLEPLAYING", "%s", mssp_info->roleplaying ); mssp_reply( d, "TRAINING SYSTEM", "%s", mssp_info->trainingSystem ); mssp_reply( d, "WORLD ORIGINALITY", "%s", mssp_info->worldOriginality ); write_to_descriptor( d, "MSSP-REPLY-END\r\n", 0 ); }