/***************************************************************************\
[*] ___ ____ ____ __ __ ____ [*] ROGUE: ROM With Attitude [*]
[*] /#/ ) /#/ ) /#/ ) /#/ /#/ /#/ [*] All rights reserved [*]
[*] /#/ < /#/ / /#/ _ /#/ /#/ /#/-- [*] Copyright(C) 2000-2001 [*]
[*] /#/ \(#(__/ (#(__/ (#(__/#/ (#(___ [*] Kenneth Conley (Mendanbar) [*]
[*] Expression of Digital Creativity.. [*] scmud@mad.scientist.com [*]
[-]---------------------------------------+-+-----------------------------[-]
[*] File: webutils.c [*]
[*] Usage: Creating html files to go in a web directory and viewed online [*]
\***************************************************************************/
/***************************************************************************
* Rogue 2.4 is copyright 2000-2001 Kenneth Conley *
* Rogue has been brought to you by the Rogue consortium *
* Kenneth Conley (scmud@mad.scientist.com) *
* By using this code, you have agreed to follow the terms of the *
* Rogue license, in the file Rogue24/doc/rogue.license *
***************************************************************************/
#include "merc.h"
#include "recycle.h"
#include "staffcmds.h"
WIZLIST_DATA *wiz_list;
void gen_wiz_html args( ( void ) );
struct {
char *singular;
char *plural;
} WizTitles[] = {
{ "Coder", "Coders" },
{ "Admin", "Admin" },
{ "Associate", "Associates" },
{ "PR/Security", "PR/Security" },
{ "Web Master", "Web Masters" },
{ "Sr. Builder", "Sr. Builders" },
{ "Terraformer", "Terraformers" },
{ "Questor", "Questors" },
{ "Trainee", "Trainees" },
{ "<ERROR>", "<ERRORS>" },
{ "\n", "\n" }
};
const char *wiz_titles[][2]= {
{ "Implementor", "Implementors" },
{ "Creator", "Creators" },
{ "Supreme God", "Supreme Gods" },
{ "Deity", "Deities" },
{ "God", "Gods" },
{ "Immortal", "Immortals" },
{ "Demi God", "Demi Gods" },
{ "Angel", "Angels" },
{ "Avatar", "Avatars" },
{ "<ERROR>", "<ERRORS>" },
{ "\n", "\n" }
};
void change_wizlist args( (CHAR_DATA *ch, bool add, int level, char *argument) );
void save_wizlist( void ) {
FILE *fp;
WIZLIST_DATA *pWiz;
fclose(fpReserve);
if (!(fp = fopen(WIZ_FILE, "w"))) {
mudlogf(BRF, LVL_STAFF, TRUE, "SYSERR: Unable to open %s file.", WIZ_FILE);
return;
}
fprintf(fp, "#WIZLIST\n");
for (pWiz = wiz_list; pWiz != NULL; pWiz = pWiz->next)
fprintf(fp, "C %s %d\n", pWiz->name, pWiz->level);
fprintf(fp, "End\n");
fclose(fp);
fpReserve = fopen(NULL_FILE, "r");
gen_wiz_html();
}
void load_wizlist( void ) {
FILE *fp;
char *word;
WIZLIST_DATA *pWiz, *wiz_last = NULL;
bool fMatch = FALSE, drop_out = FALSE;
if (!(fp = fopen(WIZ_FILE, "r"))) {
mudlogf(BRF, LVL_STAFF, TRUE, "SYSERR: Unable to open %s for reading.", WIZ_FILE);
return;
}
fread_to_eol(fp);
while (!drop_out) {
word = feof(fp) ? str_dup("End") : fread_word(fp);
fMatch = FALSE;
switch (UPPER(word[0])) {
default:
case '*':
fMatch = TRUE;
fread_to_eol(fp);
break;
case 'C':
fMatch = TRUE;
pWiz = new_wizlist();
pWiz->name = str_dup(fread_word(fp));
pWiz->level = fread_number(fp);
if (wiz_list == NULL)
wiz_list = pWiz;
else
wiz_last->next = pWiz;
wiz_last = pWiz;
break;
case 'E':
if (!str_cmp(word, "End"))
drop_out = TRUE;
break;
}
if (!fMatch) fread_to_eol(fp);
}
fclose(fp);
}
ACMD(do_wizlist) {
BUFFER *buffer;
bool found;
WIZLIST_DATA *pWiz;
int level, amount, length;
char arg1[MAX_INPUT_LENGTH],
arg2[MAX_INPUT_LENGTH],
arg3[MAX_INPUT_LENGTH],
buf[MAX_STRING_LENGTH];
argument = one_argument(argument, arg1);
argument = first_arg(argument, arg2, FALSE);
argument = one_argument(argument, arg3);
if (*arg1 && STF_FLAGGED(ch, STAFF_ADMIN)) {
if (!str_prefix(arg1, "add")) {
if (!*arg2 || !is_number(arg3)) {
send_to_char("Usage: wizlist add <name> <level>\n\r", ch);
return;
}
level = atoi(arg3);
change_wizlist(ch, TRUE, level, arg2);
return;
}
if (!str_prefix(arg1, "delete")) {
if (!*arg2) {
send_to_char("Usage: wizlist delete <name>\n\r", ch);
return;
}
change_wizlist(ch, FALSE, 0, arg2);
return;
}
send_to_char("Usage: wizlist [add | delete] <name> <level>\n\r", ch);
return;
}
if (wiz_list == NULL) {
send_to_char("No immortals are listed at this time.\n\r", ch);
return;
}
buffer = new_buf();
add_buf(buffer, "The staff of Rogue MUD\n\r");
add_buf(buffer, "**********************\n\r\n\r");
for (level = MAX_LEVEL; level >= LEVEL_IMMORTAL; level--) {
amount = 0;
found = FALSE;
for (pWiz = wiz_list; pWiz != NULL; pWiz = pWiz->next) {
if (pWiz->level == level) {
amount++;
found = TRUE;
}
}
if (!found)
continue;
sprintf(buf, "%-12.12s: ",
wiz_titles[MAX_LEVEL-level][((amount == 1) ? 0 : 1)]);
add_buf(buffer, buf);
length = 1;
for (pWiz = wiz_list; pWiz != NULL; pWiz = pWiz->next) {
if (pWiz->level == level) {
if (((length % 3) == 1) && (length != 1)) {
sprintf(buf, "%15s ", " ");
add_buf(buffer, buf);
}
sprintf(buf, "%-12.12s%s", pWiz->name,
!(length % 3) ? "\n\r" : " ");
add_buf(buffer, buf);
length++;
}
}
if (--length % 3) add_buf(buffer, "\n\r");
add_buf(buffer, "\n\r");
}
add_buf(buffer, "Note: If you are not on this list contact Admin.\n\r");
page_to_char(buf_string(buffer), ch);
free_buf(buffer);
return;
}
void update_wizlist(CHAR_DATA *ch, int level)
{
WIZLIST_DATA *prev = NULL, *curr;
if (IS_NPC(ch))
return;
for (curr = wiz_list; curr != NULL; prev = curr, curr = curr->next) {
if (!str_cmp(ch->name, curr->name)) {
if (prev == NULL)
wiz_list = wiz_list->next;
else
prev->next = curr->next;
free_wizlist(curr);
}
}
if (level >= LEVEL_IMMORTAL) {
curr = new_wizlist();
curr->name = str_dup(ch->name);
curr->level = level;
curr->next = wiz_list;
wiz_list = curr;
}
save_wizlist();
return;
}
void change_wizlist(CHAR_DATA *ch, bool add, int level, char *argument) {
char arg[MAX_INPUT_LENGTH];
WIZLIST_DATA *prev = NULL, *curr;
argument = first_arg(argument, arg, FALSE);
arg[0] = UPPER(arg[0]);
if (!*arg) {
send_to_char("Usage: wizlist [add | delete] <name> <level>\n\r", ch);
return;
}
if (add && (level < LEVEL_IMMORTAL || level > MAX_LEVEL)) {
send_to_char("Usage: wizlist add <name> <level>\n\r", ch);
return;
}
if (!add) {
bool found = FALSE;
for (curr = wiz_list; curr != NULL; prev = curr, curr = curr->next) {
if (!str_cmp(arg, curr->name)) {
found = TRUE;
if (prev == NULL)
wiz_list = wiz_list->next;
else
prev->next = curr->next;
free_wizlist(curr);
}
}
if (found) {
save_wizlist();
ch->Send("%s deleted.\n\r", arg);
} else
send_to_char("No one with that name is listed.\n\r", ch);
} else {
curr = new_wizlist();
curr->name = str_dup(arg);
curr->level = level;
curr->next = wiz_list;
wiz_list = curr;
save_wizlist();
ch->Send("%s added.\n\r", arg);
}
return;
}