/*************************************************************************** * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. * * * * Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael * * Chastain, Michael Quan, and Mitchell Tse. * * * * In order to use any part of this Merc Diku Mud, you must comply with * * both the original Diku license in 'license.doc' as well the Merc * * license in 'license.txt'. In particular, you may not remove either of * * these copyright notices. * * * * Dystopia Mud improvements copyright (C) 2000, 2001 by Brian Graversen * * * * Much time and thought has gone into this software and you are * * benefitting. We hope that you share your changes too. What goes * * around, comes around. * ***************************************************************************/ /* * who_html.c * * This piece of code allows the mud to create a html file, that looks * a bit like the 'who screen'. By calling this function every few ticks, * the mud can keep an updated listing which can be accessed from the web. * * Code by Brian Graversen aka Jobo */ #include <sys/types.h> #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "merc.h" #define HTML_DIR "../../public_html/" char * plr_class_name(int arg) { static char buf[512]; buf[0] = '\0'; switch(arg) { case CLASS_DEMON: strcat(buf, " <font color=\"#FF0000\">[</font><font color=\"#666666\">Demon</font><font color=\"#FF0000\">]</font>"); break; case CLASS_MAGE: strcat(buf, " <font color=\"#666666\">{{</font><font color=\"#33CCFF\">Battlemage</font><font color=\"#666666\">}}</font>"); break; case CLASS_WEREWOLF: strcat(buf, " <font color=\"#FFFF00\">((</font><font color=\"#3333FF\">Werewolf</font><font color=\"#FFFF00\">))</font>"); break; case CLASS_VAMPIRE: strcat(buf, " <font color=\"#666666\"><<</font><font color=\"#FF0000\">Vampire</font><font color=\"#666666\">>></font>"); break; case CLASS_SAMURAI: strcat(buf, " <font color=\"#33CCFF\">-=</font><font color=\"#FF0000\">Samu</font><font color=\"#FFFF00\">rai</font><font color=\"#33CCFF\">=-</font>"); break; case CLASS_DROW: strcat(buf, " <font color=\"#CC33CC\">.o0</font><font color=\"#666666\">Drow</font><font color=\"#CC33CC\">0o.</font>"); break; case CLASS_MONK: strcat(buf, " <font color=\"#666666\">.x[</font><font color=\"#3333FF\">Monk</font><font color=\"#666666\">]x.</font>"); break; case CLASS_NINJA: strcat(buf, " <font color=\"#33CCFF\">***</font><font color=\"#FFFF00\">Ninja</font><font color=\"#33CCFF\">***</font>"); break; case CLASS_LICH: strcat(buf, " <font color=\"#33FF33\">>*<</font><font color=\"#FFFFFF\">Lich</font><font color=\"#33FF33\">>*<</font>"); break; case CLASS_SHAPESHIFTER: strcat(buf, " <font color=\"#666666\">[</font><font color=\"#CC33CC\">*</font><font color=\"#666666\">]</font><font color=\"#FF0000\">Shapeshifter</font><font color=\"#666666\">[</font><font color=\"#CC33CC\">*</font><font color=\"#666666\">]</font>"); break; case CLASS_TANARRI: strcat(buf, " <font color=\"#FFFF00\">{</font><font color=\"#FF0000\">Tanar'ri</font><font color=\"#FFFF00\">}</font>"); break; case CLASS_ANGEL: strcat(buf, " <font color=\"#FFFF00\">.x</font><font color=\"#666666\">(</font><font color=\"#FFFFFF\">Angel</font><font color=\"#666666\">)</font><font color=\"#FFFF00\">x.</font>"); break; case CLASS_UNDEAD_KNIGHT: strcat(buf, " <font color=\"#666666\">|[</font><font color=\"#3366FF\">Undead Knight</font><font color=\"#666666\">]|</font>"); break; case CLASS_DROID: strcat(buf, " <font color=\"#CC33CC\">{</font><font color=\"#666666\">-</font><font color=\"#CC33CC\">}</font><font color=\"#666666\">Spider Droid</font><font color=\"#CC33CC\">{</font><font color=\"#666666\">-</font><font color=\"#CC33CC\">}</font><font color=\"#FFFFFF\"></font>"); break; case CLASS_FAE: strcat(buf, " <font color=\"#33FF33\"><<</font><font color=\"#FF0000\">(</font><font color=\"#FFFF00\">Fae</font><font color=\"#FF0000\">)</font><font color=\"#33FF33\">>></font>"); break; case CLASS_DRONE: strcat(buf, " <font color=\"#33FF33\"><</font><font color=\"#666666\">=</font><font color=\"#FFFF00\">{</font><font color=\"#666666\">Drone</font><font color=\"#FFFF00\">}</font><font color=\"#666666\">=</font><font color=\"#33FF33\">></font>"); break; case CLASS_GIANT: strcat(buf, " <font color=\"#33CCFF\"><></font><font color=\"#33FF33\">Giant</font><font color=\"#33CCFF\"><></font>"); break; case CLASS_HOBBIT: strcat(buf, " <font color=\"#FFCC00\">(</font><font color=\"#66FFFF\">*</font><font color=\"#FFCC00\">)</font><font color=\"#FF0000\">Hobbit</font><font color=\"#FFCC00\">(</font><font color=\"#66FFFF\">*</font><font color=\"#FFCC00\">)</font>"); break; } return (buf[0] != '\0') ? buf+1 : "none"; } char * plr_kingdom_name(int arg) { static char buf[512]; buf[0] = '\0'; switch(arg) { case 1: strcat(buf, " <font color=\"#33FF33\">=</font><font color=\"#999999\">Loa</font><font color=\"#33FF33\">=</font>"); break; case 2: strcat(buf, " <font color=\"#3333FF\">-</font><font color=\"#FFFF00\">X</font><font color=\"#3333FF\">-S</font><font color=\"#999999\">tars</font><font color=\"#3333FF\">-</font><font color=\"#FFFF00\">X</font><font color=\"#3333FF\">-</font>"); break; case 3: strcat(buf, " <font color=\"#66FFFF\">::</font><font color=\"#FFCC00\">T</font><font color=\"#FFFF00\">he </font><font color=\"#FFCC00\">O</font><font color=\"#FFFF00\">ne </font><font color=\"#FFCC00\">T</font><font color=\"#FFFF00\">rue</font><font color=\"#66FFFF\">::</font>"); break; case 4: strcat(buf, " <font color=\"#33FF33\">=</font><font color=\"#FFFF00\">*</font><font color=\"#33FF33\">=</font><font color=\"#999999\">W</font><font color=\"#33FF33\">ild=</font><font color=\"#FFFF00\">*</font><font color=\"#33FF33\">=</font>"); break; case 5: strcat(buf, " <font color=\"#FF0000\">/></font><font color=\"#FFFFFF\">G</font><font color=\"#999999\">ahr</font><font color=\"#FF0000\"><\\</font>"); break; } return (buf[0] != '\0') ? buf+1 : " "; } void parse_who() { CHAR_DATA *ch; DESCRIPTOR_DATA *d; FILE *fp; char whofile[200]; char buf[MAX_STRING_LENGTH]; char fadein_data[MAX_STRING_LENGTH]; char fadeout_data[MAX_STRING_LENGTH]; char body_data[4 * MAX_STRING_LENGTH]; // should be enough int pcount = 0, pcountv = 0; sprintf(whofile, "%s%s", HTML_DIR, "who.html"); if ((fp = fopen(whofile, "w")) == NULL) { log_string("Error writing to who.html"); return; } /* * Now let's fill out the body of the file. */ sprintf(body_data, "\n"); for (d = descriptor_list; d; d = d->next) { if (d->connected != CON_PLAYING) continue; if ((ch = d->character) == NULL) continue; if (ch->level > 6) continue; // we don't list the immortals. pcount++; if (IS_SET(ch->act, PLR_WIZINVIS) || IS_SET(ch->act, AFF_HIDE) || IS_SET(ch->newbits, NEW_DARKNESS)) continue; pcountv++; strcat(body_data, "<tr>\n"); sprintf(buf, "<td>%s</td>\n", ch->name); strcat(body_data, buf); sprintf(buf, "<td>%s</td>\n", plr_class_name(ch->class)); strcat(body_data, buf); sprintf(buf, "<td>%s</td>\n", plr_kingdom_name(ch->pcdata->religion)); strcat(body_data, buf); strcat(body_data, "</tr>\n"); } /* * Setting up the header and foot of the file */ sprintf(fadein_data, "<html>\n"); strcat(fadein_data, "<body text=\"#FFFFFF\" bgcolor=\"#FFFFFF\" link=\"#000000\" vlink=\"#000000\" alink=\"#0055FF\">\n"); strcat(fadein_data, "<table><br>\n"); strcat(fadein_data, "<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor=\"#000000\"><tr><td>\n"); strcat(fadein_data, "<table width=100% border=0 cellspacing=1 cellpadding=3><tr><td colspan=1 bgcolor=\"#999999\">\n"); strcat(fadein_data, "<font size=4><center><b><font color=\"#000000\">Players Online</font></b></center></td></tr>\n"); strcat(fadein_data, "<tr><td bgcolor=\"#000000\"><font size=3>\n"); strcat(fadein_data, "<p><table WIDTH=\"100%\">\n\n<tr>\n"); strcat(fadein_data, "<td><b><u>Name</u></b></td>\n"); strcat(fadein_data, "<td><b><u>Class</u></b></td>\n"); strcat(fadein_data, "<td><b><u>Religion</u></b></td>\n</tr>\n\n"); sprintf(fadeout_data, "</table>\n"); sprintf(buf, "<p>%d/%d Visible Players Online\n", pcountv, pcount); strcat(fadeout_data, buf); strcat(fadeout_data, "<p><b><u>Mudinfo Data for this Week</u></b>\n"); strcat(fadeout_data, "<br><table WIDTH=\"50%\">\n"); sprintf(buf, "<tr><td>Average Players Online</td> <td>%d</td></tr>\n", (mudinfo[MUDINFO_MCCP_USERS] + mudinfo[MUDINFO_OTHER_USERS])/mudinfo[MUDINFO_UPDATED]); strcat(fadeout_data, buf); sprintf(buf, "<tr><td>Peak Players Online</td> <td>%d</td></tr>\n", mudinfo[MUDINFO_PEAK_USERS]); strcat(fadeout_data, buf); sprintf(buf, "<tr><td>Mccp Usage</td> <td>%d %%</td></tr>\n", 100 * mudinfo[MUDINFO_MCCP_USERS] / (mudinfo[MUDINFO_MCCP_USERS] + mudinfo[MUDINFO_OTHER_USERS])); strcat(fadeout_data, buf); strcat(fadeout_data, "</table>\n"); strcat(fadeout_data, "<p>This Page is updated every 60 seconds"); strcat(fadeout_data, "</td></tr>\n"); strcat(fadeout_data, "</table></td></tr>\n"); strcat(fadeout_data, "</table>\n"); strcat(fadeout_data, "</table>\n"); strcat(fadeout_data, "</body>\n"); strcat(fadeout_data, "</html>\n"); /* * Write it all to the file, and return. */ fprintf(fp, fadein_data); fprintf(fp, body_data); fprintf(fp, fadeout_data); fclose (fp); return; } void parse_top() { FILE *fp; char topfile[200]; char buf[MAX_STRING_LENGTH]; char fadein_data[MAX_STRING_LENGTH]; char fadeout_data[MAX_STRING_LENGTH]; char body_data[4 * MAX_STRING_LENGTH]; // should be enough int i; sprintf(topfile, "%s%s", HTML_DIR, "top.html"); if ((fp = fopen(topfile, "w")) == NULL) { log_string("Error writing to top.html"); return; } sprintf(fadein_data, "<html>\n"); strcat(fadein_data, "<body text=\"#000000\" bgcolor=\"#FFFFFF\" link=\"#000000\" vlink=\"#000000\" alink=\"#0055FF\">\n"); strcat(fadein_data, "<table><br>\n"); strcat(fadein_data, "<table><pre>\n"); strcat(fadein_data, " <b><>==<>==<>==<>==<>==<>==<>== Top PKscore ==<>==<>==<>==<>==<>==<>==<></b>\n"); sprintf(fadeout_data, " <b><>==<>==<>==<>==<>==<>==<>== Top PKscore ==<>==<>==<>==<>==<>==<>==<></b>\n"); strcat(fadeout_data, "</pre>\n</table>\n</table>\n</body>\n</html>\n<p>\n"); strcat(fadeout_data, "<b>This page is updated once every 3 hours</b><br>\n"); sprintf(body_data, "\n"); for (i = 1; i <= MAX_TOP_PLAYERS / 2; i++) { sprintf(buf, " %2d. %-15s %5d %2d. %-15s %5d\n", i, top_board[i].name, top_board[i].pkscore, i + MAX_TOP_PLAYERS / 2, top_board[i + MAX_TOP_PLAYERS / 2].name, top_board[i + MAX_TOP_PLAYERS / 2].pkscore); strcat(body_data, buf); } strcat(body_data, "\n"); fprintf(fp, fadein_data); fprintf(fp, body_data); fprintf(fp, fadeout_data); fclose (fp); return; } void parse_leader() { FILE *fp; char leaderfile[200]; char buf[MAX_STRING_LENGTH]; char fadein_data[MAX_STRING_LENGTH]; char fadeout_data[MAX_STRING_LENGTH]; char body_data[4 * MAX_STRING_LENGTH]; // should be enough sprintf(leaderfile, "%s%s", HTML_DIR, "leader.html"); if ((fp = fopen(leaderfile, "w")) == NULL) { log_string("Error writing to leader.html"); return; } sprintf(fadein_data, "<html>\n"); strcat(fadein_data, "<body text=\"#000000\" bgcolor=\"#FFFFFF\" link=\"#000000\" vlink=\"#000000\" alink=\"#0055FF\">\n"); strcat(fadein_data, "<table><br>\n"); strcat(fadein_data, "<table><pre>\n"); strcat(fadein_data, " <b><>==<>==<>==<>==<>==<> Leader Board <>==<>==<>==<>==<>==<></b>\n"); sprintf(fadeout_data, " <b><>==<>==<>==<>==<>==<> Leader Board <>==<>==<>==<>==<>==<></b>\n"); strcat(fadeout_data, "</pre>\n</table>\n</table>\n</body>\n</html>\n<p>\n"); strcat(fadeout_data, "<b>This page is updated once every 3 hours</b><br>\n"); sprintf(body_data, "\n"); strcat(body_data, " Most Player Kills ---> "); sprintf(buf, "<b>%-13s</b>", leader_board.pk_name); strcat(body_data, buf); sprintf(buf, " with %d Kills\n", leader_board.pk_number); strcat(body_data, buf); strcat(body_data, " Most Hours Played ---> "); sprintf(buf, "<b>%-13s</b>", leader_board.time_name); strcat(body_data, buf); sprintf(buf, " with %d Hours\n", leader_board.time_number); strcat(body_data, buf); strcat(body_data, " Most Qps Earned ---> "); sprintf(buf, "<b>%-13s</b>", leader_board.quest_name); strcat(body_data, buf); sprintf(buf, " with %d Qps\n", leader_board.quest_number); strcat(body_data, buf); strcat(body_data, " Most Mobs Killed ---> "); sprintf(buf, "<b>%-13s</b>", leader_board.mobkills_name); strcat(body_data, buf); sprintf(buf, " with %d Kills\n", leader_board.mobkills_number); strcat(body_data, buf); strcat(body_data, " Highest PK score ---> "); sprintf(buf, "<b>%-13s</b>", leader_board.pkscore_name); strcat(body_data, buf); sprintf(buf, " with %d Points\n", leader_board.pkscore_number); strcat(body_data, buf); strcat(body_data, " Most Arena Wins ---> "); sprintf(buf, "<b>%-13s</b>", leader_board.arena_name); strcat(body_data, buf); sprintf(buf, " with %d Wins\n", leader_board.arena_number); strcat(body_data, buf); strcat(body_data, "\n"); fprintf(fp, fadein_data); fprintf(fp, body_data); fprintf(fp, fadeout_data); fclose (fp); return; }