/***************************************************************************
* 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. *
* *
* 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. *
***************************************************************************/
/***************************************************************************
* ROM 2.4 is copyright 1993-1995 Russ Taylor *
* ROM has been brought to you by the ROM consortium *
* Russ Taylor (rtaylor@pacinfo.com) *
* Gabrielle Taylor (gtaylor@pacinfo.com) *
* Brian Moore (rom@rom.efn.org) *
* By using this code, you have agreed to follow the terms of the *
* ROM license, in the file Rom24/doc/rom.license *
***************************************************************************/
/***************************************************************************
* ROT 1.4 is copyright 1996-1997 by Russ Walsh *
* By using this code, you have agreed to follow the terms of the *
* ROT license, in the file doc/rot.license *
***************************************************************************/
/***************************************************************************
* _/ _/ *
* _/_/_/ _/_/ _/_/_/ _/ _/_/ _/ _/ _/_/_/ *
* _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ *
* _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ *
* _/ _/ _/ _/_/_/ _/ _/_/ _/_/_/ _/_/_/ *
***************************************************************************
* Mindcloud Copyright 2001-2003 by Jeff Boschee (Zarius), *
* Additional credits are in the help file CODECREDITS *
* All Rights Reserved. *
***************************************************************************/
#if defined(macintosh)
#include <types.h>
#include <time.h>
#else
#include <sys/types.h>
#include <sys/time.h>
#endif
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include "merc.h"
#include "recycle.h"
WIZ_DATA *wiz_list;
char *const wiz_titles[] = {
"Administration ",
"Coder ",
"Enforcer ",
"NULL ",
"QuestMaster ",
"Builder ",
};
/*
* Local functions.
*/
void change_wizlist
args((CHAR_DATA * ch, bool add, int level, char *argument));
void save_wizlist(void)
{
WIZ_DATA *pwiz;
FILE *fp;
bool found = FALSE;
fclose(fpReserve);
if ((fp = fopen(WIZ_FILE, "w")) == NULL)
{
perror(WIZ_FILE);
}
for (pwiz = wiz_list; pwiz != NULL; pwiz = pwiz->next)
{
found = TRUE;
fprintf(fp, "%s %d\n", pwiz->name, pwiz->level);
}
fclose(fp);
fpReserve = fopen(NULL_FILE, "r");
if (!found)
unlink(WIZ_FILE);
}
void load_wizlist(void)
{
FILE *fp;
WIZ_DATA *wiz_last;
if ((fp = fopen(WIZ_FILE, "r")) == NULL)
{
return;
}
wiz_last = NULL;
for (;;)
{
WIZ_DATA *pwiz;
if (feof(fp))
{
fclose(fp);
return;
}
pwiz = new_wiz();
pwiz->name = str_dup(fread_word(fp));
pwiz->level = fread_number(fp);
fread_to_eol(fp);
if (wiz_list == NULL)
wiz_list = pwiz;
else
wiz_last->next = pwiz;
wiz_last = pwiz;
}
}
void do_wizlist(CHAR_DATA * ch, char *argument)
{
char arg1[MAX_INPUT_LENGTH];
char arg2[MAX_INPUT_LENGTH];
char arg3[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
char title[MAX_STRING_LENGTH];
BUFFER *buffer;
int level;
WIZ_DATA *pwiz;
int lngth;
int amt;
bool found;
argument = one_argument(argument, arg1);
argument = one_argument(argument, arg2);
argument = one_argument(argument, arg3);
/*
* Uncomment the following to use the old method of having
* a fixed wizlist in the rot.are file.
*/
/*
do_help(ch,"wizlist");
return;
*/
if ((arg1[0] != '\0') && (ch->level == MAX_LEVEL))
{
if (!str_prefix(arg1, "add"))
{
if (!is_number(arg2) || (arg3[0] == '\0'))
{
send_to_char
("Syntax: wizlist add <level> <name>\n\r",
ch);
return;
}
level = atoi(arg2);
change_wizlist(ch, TRUE, level, arg3);
return;
}
if (!str_prefix(arg1, "delete"))
{
if (arg2[0] == '\0')
{
send_to_char
("Syntax: wizlist delete <name>\n\r",
ch);
return;
}
change_wizlist(ch, FALSE, 0, arg2);
return;
}
send_to_char("Syntax:\n\r", ch);
send_to_char(" wizlist delete <name>\n\r", ch);
send_to_char(" wizlist add <level> <name>\n\r", ch);
return;
}
if (wiz_list == NULL)
{
send_to_char("No immortals listed at this time.\n\r", ch);
return;
}
buffer = new_buf();
xprintf(title, " #WThe Gods of Mindcloud#0");
xprintf(buf,
"#0 ___________________________________________________________________________\n\r");
add_buf(buffer, buf);
xprintf(buf, " /\\_\\%70s\\_\\\n\r", " ");
add_buf(buffer, buf);
lngth = (70 - strlen(title)) / 2;
for (; lngth >= 0; lngth--)
{
strcat(title, " ");
}
xprintf(buf, "|/\\\\_\\ %70s \\_\\\n\r", title);
add_buf(buffer, buf);
xprintf(buf, "#0\\_/_|_|%69s#0|_|#0\n\r", " ");
add_buf(buffer, buf);
for (level = 12; level > 5; level--)
{
found = FALSE;
amt = 0;
for (pwiz = wiz_list; pwiz != NULL; pwiz = pwiz->next)
{
if (pwiz->level == level)
{
amt++;
found = TRUE;
}
}
if (!found)
{
if (level == 6)
{
xprintf(buf, "#0 ___|_|%69s|_|\n\r", " ");
add_buf(buffer, buf);
}
continue;
}
xprintf(buf, "#0 |_|#R%40s #w%28s#0|_|#0\n\r",
wiz_titles[12 - level], " ");
add_buf(buffer, buf);
xprintf(buf,
"#0 |_|#W%25s******************#w%26s#0|_|#0\n\r",
" ", " ");
add_buf(buffer, buf);
lngth = 0;
for (pwiz = wiz_list; pwiz != NULL; pwiz = pwiz->next)
{
if (pwiz->level == level)
{
if (lngth == 0)
{
if (amt > 2)
{
xprintf(buf,
"#0 |_|#B%12s%-17s #B",
" ", pwiz->name);
add_buf(buffer, buf);
lngth = 1;
}
else if (amt > 1)
{
xprintf(buf,
"#0 |_|#B%21s%-17s #B",
" ", pwiz->name);
add_buf(buffer, buf);
lngth = 1;
}
else
{
xprintf(buf,
"#0 |_|#B%30s%-39s#0|_|\n\r",
" ", pwiz->name);
add_buf(buffer, buf);
lngth = 0;
}
}
else if (lngth == 1)
{
if (amt > 2)
{
xprintf(buf, "%-17s ",
pwiz->name);
add_buf(buffer, buf);
lngth = 2;
}
else
{
xprintf(buf, "%-30s#0|_|\n\r",
pwiz->name);
add_buf(buffer, buf);
lngth = 0;
}
}
else
{
xprintf(buf, "%-21s#0|_|\n\r",
pwiz->name);
add_buf(buffer, buf);
lngth = 0;
amt -= 3;
}
}
}
if (level == 6)
{
xprintf(buf, "#0 ___|_|%69s#0|_|\n\r", " ");
}
else
{
xprintf(buf, "#0 |_|%69s#0|_|\n\r", " ");
}
add_buf(buffer, buf);
}
xprintf(buf, "#0/ \\ |_|%69s#0|_|\n\r", " ");
add_buf(buffer, buf);
xprintf(buf, "#0|\\//_/%70s#0/_/\n\r", " ");
add_buf(buffer, buf);
xprintf(buf,
"#0 \\/_/______________________________________________________________________/_/#n\n\r");
add_buf(buffer, buf);
pager_to_char(buf_string(buffer), ch);
free_buf(buffer);
return;
}
void update_wizlist(CHAR_DATA * ch, int level)
{
WIZ_DATA *prev;
WIZ_DATA *curr;
if (IS_NPC(ch))
{
return;
}
prev = NULL;
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_wiz(curr);
save_wizlist();
}
}
if (level <= 6)
{
return;
}
curr = new_wiz();
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];
WIZ_DATA *prev;
WIZ_DATA *curr;
one_argument(argument, arg);
if (arg[0] == '\0')
{
send_to_char("Syntax:\n\r", ch);
if (!add)
send_to_char(" wizlist delete <name>\n\r", ch);
else
send_to_char(" wizlist add <level> <name>\n\r",
ch);
return;
}
if (add)
{
if ((level <= 6) || (level > MAX_LEVEL))
{
send_to_char("Syntax:\n\r", ch);
send_to_char(" wizlist add <level> <name>\n\r",
ch);
return;
}
}
if (!add)
{
prev = NULL;
for (curr = wiz_list; curr != NULL;
prev = curr, curr = curr->next)
{
if (!str_cmp(capitalize(arg), curr->name))
{
if (prev == NULL)
wiz_list = wiz_list->next;
else
prev->next = curr->next;
free_wiz(curr);
save_wizlist();
}
}
}
else
{
curr = new_wiz();
curr->name = str_dup(capitalize(arg));
curr->level = level;
curr->next = wiz_list;
wiz_list = curr;
save_wizlist();
}
return;
}