/*
* This Code originally created by Matthew Peck, aka Valatar
* sauron@digital-genesis.com
* Modified by Nebseni of Clandestine MUD
* http://clandestine.mudnet.net
*
* Created so that I wouldn't have to make a CGI script that would update
* the page everytime you check. All you have to do to use this is email
* me and let me know that you are. Include your mud address and webpage
* if you don't mind. You have to know a bit of HTML to
* make the changes necessary for this to work for your mud, but other
* than that, its all self contained. This code is compatible with Lope's
* Colour codes, if you use some other system, you'll need to change
* get_who_data to fit. If there are any problems, email me and let me know.
*
* To get this to work, save this as a .c file. Then add a line in update.c
* that declares the function, and another that calls it. I added it to
* the pulse_music part, so it updates about every 5 seconds. You can add
* it elsewhere if you like. The declaration looks like this:
* void who_html_update args( ( void ) );
* Then the function call looks like this:
* who_html_update();
* Update the makefile to include this code, then compile and you'll be all set.
*/
#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <malloc.h>
#include "merc.h"
#include "recycle.h"
#include "lookup.h"
#include "tables.h"
#if !defined(macintosh)
extern int _filbuf args( (FILE *) );
#endif
int html_colour args (( char type, char *string ));
void html_colourconv args (( char *buffer, const char *txt, CHAR_DATA *ch ));
void who_html_update (void)
{
/* this code assumes 45-character titles and max color switches (485 bytes).
if title length is increased the buf sizes must be increased */
FILE *fp;
DESCRIPTOR_DATA *d;
char buf[2*MAX_INPUT_LENGTH];
char buf2[2*MAX_INPUT_LENGTH];
#ifdef DEBUG
Debug ("who_html_update");
#endif
buf[0] = '\0';
buf2[0] = '\0';
fclose(fpReserve);
if ( (fp = fopen("../../public_html/whoweb.html", "w") ) == NULL)
/* change the directory above to the absolute directory and filename
* of the page you are going to make. IMPORTANT: The file needs to
* exist before you attempt to run this.
* --Valatar
*/
{
bug( "whoweb.html: fopen", 0 );
perror( "whoweb.html" );
}
else
{
fprintf(fp, "<html>\n");
fprintf(fp, "<head>\n");
fprintf(fp, "<title>\n");
fprintf(fp, "Players currently on RoT2.0 - RoT2.\n");
/* INSERT YOUR MUD NAME THERE AND THREE LINES DOWN */
fprintf(fp, "</title>\n");
fprintf(fp, "<BODY TEXT=""#FFFFFF"" LINK=""#00FFFF""\n");
fprintf(fp, "<BODY BACKGROUND=""blk_005.jpg"">\n");
// fprintf(fp, "VLINK=""#FFFFFF"" ALINK=""#008080"">\n");
fprintf(fp, "<h1><center>Who's on RoT2.0 - RoT2</center></h1>\n");
fprintf(fp, "<CENTER><TABLE BORDER=1 BGCOLOR=""#000000"" >\n");
fprintf(fp, "<TR ALIGN=LEFT VALIGN=CENTER>\n");
fprintf(fp, "<TD>Level</TD>\n");
fprintf(fp, "<TD>Race</TD>\n");
fprintf(fp, "<TD>Class</TD>\n");
// fprintf(fp, "<TD>Clan</TD>\n"); /* Remove this if you don't have religions */
fprintf(fp, "<TD>Name</TD></TR>\n");
for ( d = descriptor_list; d != NULL ; d = d->next )
{
CHAR_DATA *wch;
char class[MAX_STRING_LENGTH];
if ( d->connected != CON_PLAYING)
continue;
wch = ( d->original != NULL ) ? d->original : d->character;
class[0] = '\0';
if (!(wch->invis_level > LEVEL_HERO))
{
fprintf(fp, "<TR ALIGN=LEFT VALIGN=CENTER>\n");
fprintf(fp, "<TD>%d</TD>\n", wch->level);
fprintf(fp, "<TD>%s</TD>\n", race_table[wch->race].name);
fprintf(fp, "<TD>%s</TD>\n", class_table[wch->class].name);
/* Remove the next line if you don't have religions */
// fprintf(fp, "<TD>%s</TD>\n", clan_table[wch->clan].name);
fprintf(fp, "<TD>%s", wch->name);
buf2[0] = '\0';
sprintf(buf2, "%s", (IS_NPC(wch)? "" : wch->pcdata->title));
html_colourconv( buf, buf2, wch );
fprintf(fp, buf);
fprintf(fp, "</TD></TR>\n");
} /*end if */
} /*end for */
fprintf(fp, "</TABLE></CENTER>\n");
fprintf(fp, "<br><font face=""Times New Roman""><center>\n");
sprintf(buf, "This file last updated at %s Eastern Time.\n", ((char *) ctime( ¤t_time )));
fprintf(fp, buf);
fprintf(fp, "</center></font>\n");
fprintf(fp, "<br><center>Host - hive.mudmagic.com Port - 4000</center>\n");
fprintf(fp, "<CENTER><P><A HREF=""./"" TARGET=""_top""><Font Size=+1>\n");
fprintf(fp, "Return to main page</A> </P></CENTER></Font>\n");
fprintf(fp, "</body>\n");
fprintf(fp, "</html>\n");
fclose( fp );
fpReserve = fopen( NULL_FILE, "r" );
} /*end if */
return;
}/* end function */
int html_colour( char type, char *string )
{
char code[ 25 ];
char *p = '\0';
#ifdef DEBUG
Debug ("html_colour");
#endif
switch( type )
{
default:
case '\0':
code[0] = '\0';
break;
case ' ':
sprintf( code, " " );
break;
case 'x':
sprintf( code, "<font color=""#006400"">" );
break;
case 'b':
sprintf( code, "<font color=""#00008B"">" );
break;
case 'c':
sprintf( code, "<font color=""#008B8B"">" );
break;
case 'g':
sprintf( code, "<font color=""#006400"">" );
break;
case 'm':
sprintf( code, "<font color=""#8B008B"">" );
break;
case 'r':
sprintf( code, "<font color=""#8B0000"">" );
break;
case 'w':
sprintf( code, "<font color=""#808080"">" );
break;
case 'y':
sprintf( code, "<font color=""#808000"">" );
break;
case 'B':
sprintf( code, "<font color=""#0000FF"">" );
break;
case 'C':
sprintf( code, "<font color=""#OOFFFF"">" );
break;
case 'G':
sprintf( code, "<font color=""#00FF00"">" );
break;
case 'M':
sprintf( code, "<font color=""#FF00FF"">" );
break;
case 'R':
sprintf( code, "<font color=""#FF0000"">" );
break;
case 'W':
sprintf( code, "<font color=""#FFFFFF"">" );
break;
case 'Y':
sprintf( code, "<font color=""#FFFF00"">" );
break;
case 'D':
sprintf( code, "<font color=""#636363"">" );
break;
case '{':
sprintf( code, "{" );
break;
}
p = code;
while( *p != '\0' )
{
*string = *p++;
*++string = '\0';
}
return( strlen( code ) );
}
void html_colourconv( char *buffer, const char *txt, CHAR_DATA *ch )
{
const char *point;
int skip = 0;
#ifdef DEBUG
Debug ("html_colourconv");
#endif
for( point = txt ; *point ; point++ )
{
if( *point == '{' )
{
point++;
if( *point == '\0' )
point--;
else
skip = html_colour( *point, buffer );
while( skip-- > 0 )
++buffer;
continue;
}
/* Following is put in to prevent adding HTML links to titles,
except for IMMS who know what they're doing and can be
punished if they screw it up! */
if( (*point == '<') && (!IS_IMMORTAL(ch)) )
{
*buffer = '[';
*++buffer = '\0';
continue;
}
if( (*point == '>') && (!IS_IMMORTAL(ch)) )
{
*buffer = ']';
*++buffer = '\0';
continue;
}
*buffer = *point;
*++buffer = '\0';
}
*buffer = '\0';
return;
}