/***************************************************************************\ [*] ___ ____ ____ __ __ ____ [*] 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; }