/**************************************************************************
* File: prefedit.c Part of tbaMUD *
* Usage: Player-level OLC for setting preferences and toggles *
* *
* Created by Jamdog for tbaMUD 3.59 *
* All rights reserved. See license for complete information. *
* *
* Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University *
* CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991. *
**************************************************************************/
#include "conf.h"
#include "sysdep.h"
#include "structs.h"
#include "comm.h"
#include "utils.h"
#include "handler.h"
#include "interpreter.h"
#include "db.h"
#include "oasis.h"
#include "prefedit.h"
#include "screen.h"
/* Internal (static) functions */
static void prefedit_setup(struct descriptor_data *d, struct char_data *vict);
static void prefedit_save_to_char(struct descriptor_data *d);
static void prefedit_disp_main_menu(struct descriptor_data *d);
static void prefedit_disp_toggles_menu(struct descriptor_data *d);
static void prefedit_disp_prompt_menu(struct descriptor_data *d);
static void prefedit_disp_color_menu(struct descriptor_data *d);
static void prefedit_disp_syslog_menu(struct descriptor_data *d);
/* Note: there is no setup_new, as you can ONLY edit an existing player */
/* vict is normally = d->character, except when imps edit players */
static void prefedit_setup(struct descriptor_data *d, struct char_data *vict)
{
int i;
struct prefs_data *toggles;
if (!vict) vict = d->character;
/*. Build a copy of the player's toggles .*/
CREATE (toggles, struct prefs_data, 1);
/* no strings to allocate space for */
for (i=0; i<PR_ARRAY_MAX; i++)
toggles->pref_flags[i] = PRF_FLAGS(vict)[i];
toggles->wimp_level = GET_WIMP_LEV(vict);
toggles->page_length = GET_PAGE_LENGTH(vict);
toggles->screen_width = GET_SCREEN_WIDTH(vict);
toggles->ch = vict;
/*. Attach toggles copy to editors descriptor .*/
OLC_PREFS(d) = toggles;
OLC_VAL(d) = 0;
prefedit_disp_main_menu(d);
}
static void prefedit_save_to_char(struct descriptor_data *d)
{
int i;
struct char_data *vict;
vict = PREFEDIT_GET_CHAR;
if (vict && vict->desc && IS_PLAYING(vict->desc))
{
for (i=0; i<PR_ARRAY_MAX; i++)
PRF_FLAGS(vict)[i] = OLC_PREFS(d)->pref_flags[i];
GET_WIMP_LEV(vict) = OLC_PREFS(d)->wimp_level;
GET_PAGE_LENGTH(vict) = OLC_PREFS(d)->page_length;
GET_SCREEN_WIDTH(vict) = OLC_PREFS(d)->screen_width;
save_char(vict);
}
else
{
if (!vict) {
mudlog(BRF, LVL_BUILDER, TRUE, "SYSERR: Unable to save toggles (no vict)");
send_to_char(d->character, "Unable to save toggles (no vict)");
} else if (!vict->desc) {
mudlog(BRF, LVL_BUILDER, TRUE, "SYSERR: Unable to save toggles (no vict descriptor)");
send_to_char(d->character, "Unable to save toggles (no vict descriptor)");
} else if (!IS_PLAYING(vict->desc)) {
mudlog(BRF, LVL_BUILDER, TRUE, "SYSERR: Unable to save toggles (vict not playing)");
send_to_char(d->character, "Unable to save toggles (vict not playing)");
} else {
mudlog(BRF, LVL_BUILDER, TRUE, "SYSERR: Unable to save toggles (unknown reason)");
send_to_char(d->character, "Unable to save toggles (unknown reason)");
}
}
}
static void prefedit_disp_main_menu(struct descriptor_data *d)
{
struct char_data *vict;
char prompt_string[10], color_string[10], syslog_string[10];
const char *multi_types[] = { "Off", "Brief", "Normal", "Complete", "\n" };
/* Set up the required variables and strings */
vict = PREFEDIT_GET_CHAR;
sprintf(prompt_string, "%s%s%s", PREFEDIT_FLAGGED(PRF_DISPHP) ? "H" : "", PREFEDIT_FLAGGED(PRF_DISPMANA) ? "M" : "",
PREFEDIT_FLAGGED(PRF_DISPMOVE) ? "V" : "" );
sprintf(color_string, "%s", multi_types[(PREFEDIT_FLAGGED(PRF_COLOR_1) ? 1 : 0) + (PREFEDIT_FLAGGED(PRF_COLOR_2) ? 2 : 0)]);
send_to_char(d->character, "\r\n%sPreferences for %s%s\r\n",
CCYEL(d->character, C_NRM),
GET_NAME(vict),
CCNRM(d->character, C_NRM) );
/* The mortal preferences section of the actual menu */
send_to_char(d->character, "\r\n"
"%sPreferences\r\n"
"%sP%s) Prompt : %s[%s%-3s%s] %sL%s) Pagelength : %s[%s%-3d%s]\r\n"
"%sC%s) Color : %s[%s%-8s%s] %sS%s) Screenwidth: %s[%s%-3d%s]\r\n"
"%sW%s) Wimpy : %s[%s%-4d%s]%s\r\n",
CCWHT(d->character, C_NRM),
/* Line 1 - prompt and pagelength */
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM),
prompt_string, CCCYN(d->character, C_NRM), CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM),
CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM), PREFEDIT_GET_PAGELENGTH, CCCYN(d->character, C_NRM),
/* Line 2 - color and screenwidth */
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM),
color_string, CCCYN(d->character, C_NRM), CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM),
CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM), PREFEDIT_GET_SCREENWIDTH, CCCYN(d->character, C_NRM),
/* Line 2 - wimpy */
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM),
PREFEDIT_GET_WIMP_LEV, CCCYN(d->character, C_NRM), CCNRM(d->character, C_NRM)
);
send_to_char(d->character, "%sT%s) Toggle Preferences...\r\n",
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM) );
/* Imm Prefs */
if (GET_LEVEL(PREFEDIT_GET_CHAR) >= LVL_IMMORT)
{
sprintf(syslog_string, "%s", multi_types[((PREFEDIT_FLAGGED(PRF_LOG1) ? 1 : 0)+ (PREFEDIT_FLAGGED(PRF_LOG2) ? 2 : 0))] );
send_to_char(d->character, "\r\n"
"%sImmortal Preferences\r\n"
"%s1%s) Syslog Level %s[%s%8s%s] %s4%s) ClsOLC %s[%s%3s%s]\r\n"
"%s2%s) Show Flags %s[%s%3s%s] %s5%s) No WizNet %s[%s%3s%s]\r\n"
"%s3%s) No Hassle %s[%s%3s%s] %s6%s) Holylight %s[%s%3s%s]\r\n",
CBWHT(d->character, C_NRM),
/* Line 1 - syslog and clsolc */
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM),
syslog_string, CCCYN(d->character, C_NRM), CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM),
CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM), ONOFF(PREFEDIT_FLAGGED(PRF_CLS)), CCCYN(d->character, C_NRM),
/* Line 2 - show vnums and nowiz */
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM),
ONOFF(PREFEDIT_FLAGGED(PRF_SHOWVNUMS)), CCCYN(d->character, C_NRM), CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM),
CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM), ONOFF(PREFEDIT_FLAGGED(PRF_NOWIZ)), CCCYN(d->character, C_NRM),
/* Line 3 - nohassle and holylight */
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM),
ONOFF(PREFEDIT_FLAGGED(PRF_NOHASSLE)), CCCYN(d->character, C_NRM), CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM),
CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM), ONOFF(PREFEDIT_FLAGGED(PRF_HOLYLIGHT)), CCCYN(d->character, C_NRM)
);
}
/* Finishing Off */
send_to_char(d->character, "\r\n"
"%sD%s) Restore all default values\r\n"
"%sQ%s) Quit\r\n"
"\r\n",
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM),
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM)
);
/* Bottom of the menu */
OLC_MODE(d) = PREFEDIT_MAIN_MENU;
}
static void prefedit_disp_toggles_menu(struct descriptor_data *d)
{
struct char_data *vict;
/* Set up the required variables and strings */
vict = OLC_PREFS(d)->ch;
/* Top of the menu */
send_to_char(d->character, "Toggle preferences for %s%-20s\r\n",
CBGRN(d->character, C_NRM), GET_NAME(vict));
send_to_char(d->character, "\r\n"
"%sAuto-flags Channels\r\n",
CBWHT(d->character, C_NRM));
/* The top section of the actual menu */
send_to_char(d->character, "%s1%s) Autoexits %s[%s%3s%s] %sA%s) Gossip %s[%s%3s%s]\r\n"
"%s2%s) Autoloot %s[%s%3s%s] %sB%s) Shout %s[%s%3s%s]\r\n"
"%s3%s) Autogold %s[%s%3s%s] %sC%s) Tell %s[%s%3s%s]\r\n"
"%s4%s) Autosac %s[%s%3s%s] %sD%s) Auction %s[%s%3s%s]\r\n"
"%s5%s) Autoassist %s[%s%3s%s] %sE%s) Gratz %s[%s%3s%s]\r\n"
"%s6%s) Autosplit %s[%s%3s%s]\r\n",
/* Line 1 - autoexits and gossip */
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM), PREFEDIT_FLAGGED(PRF_AUTOEXIT) ? CBGRN(d->character, C_NRM) : CBRED(d->character, C_NRM),
ONOFF(PREFEDIT_FLAGGED(PRF_AUTOEXIT)), CCCYN(d->character, C_NRM), CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM),
PREFEDIT_FLAGGED(PRF_NOGOSS) ? CBRED(d->character, C_NRM) : CBGRN(d->character, C_NRM), ONOFF(!PREFEDIT_FLAGGED(PRF_NOGOSS)), CCCYN(d->character, C_NRM),
/* Line 2 - autoloot and shout */
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM), PREFEDIT_FLAGGED(PRF_AUTOLOOT) ? CBGRN(d->character, C_NRM) : CBRED(d->character, C_NRM),
ONOFF(PREFEDIT_FLAGGED(PRF_AUTOLOOT)), CCCYN(d->character, C_NRM), CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM),
PREFEDIT_FLAGGED(PRF_NOSHOUT) ? CBRED(d->character, C_NRM) : CBGRN(d->character, C_NRM), ONOFF(!PREFEDIT_FLAGGED(PRF_NOSHOUT)), CCCYN(d->character, C_NRM),
/* Line 3 - autogold and tell */
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM), PREFEDIT_FLAGGED(PRF_AUTOGOLD) ? CBGRN(d->character, C_NRM) : CBRED(d->character, C_NRM),
ONOFF(PREFEDIT_FLAGGED(PRF_AUTOGOLD)), CCCYN(d->character, C_NRM), CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM),
PREFEDIT_FLAGGED(PRF_NOTELL) ? CBRED(d->character, C_NRM) : CBGRN(d->character, C_NRM), ONOFF(!PREFEDIT_FLAGGED(PRF_NOTELL)), CCCYN(d->character, C_NRM),
/* Line 4 - autosac and auction */
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM), PREFEDIT_FLAGGED(PRF_AUTOSAC) ? CBGRN(d->character, C_NRM) : CBRED(d->character, C_NRM),
ONOFF(PREFEDIT_FLAGGED(PRF_AUTOSAC)), CCCYN(d->character, C_NRM), CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM),
PREFEDIT_FLAGGED(PRF_NOAUCT) ? CBRED(d->character, C_NRM) : CBGRN(d->character, C_NRM), ONOFF(!PREFEDIT_FLAGGED(PRF_NOAUCT)), CCCYN(d->character, C_NRM),
/* Line 5 - autoassist and grats */
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM), PREFEDIT_FLAGGED(PRF_AUTOASSIST) ? CBGRN(d->character, C_NRM) : CBRED(d->character, C_NRM),
ONOFF(PREFEDIT_FLAGGED(PRF_AUTOASSIST)), CCCYN(d->character, C_NRM), CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM),
PREFEDIT_FLAGGED(PRF_NOGRATZ) ? CBRED(d->character, C_NRM) : CBGRN(d->character, C_NRM), ONOFF(!PREFEDIT_FLAGGED(PRF_NOGRATZ)), CCCYN(d->character, C_NRM),
/* Line 6 - autosplit */
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM), PREFEDIT_FLAGGED(PRF_AUTOSPLIT) ? CBGRN(d->character, C_NRM) : CBRED(d->character, C_NRM),
ONOFF(PREFEDIT_FLAGGED(PRF_AUTOSPLIT)), CCCYN(d->character, C_NRM)
);
send_to_char(d->character, "%s7%s) Automap %s[%s%3s%s]\r\n"
"%s8%s) Autokey %s[%s%3s%s]\r\n"
"%s9%s) Autodoor %s[%s%3s%s]\r\n",
/* Line 7 - automap */
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM), PREFEDIT_FLAGGED(PRF_AUTOMAP) ? CBGRN(d->character, C_NRM) : CBRED(d->character, C_NRM),
ONOFF(PREFEDIT_FLAGGED(PRF_AUTOMAP)), CCCYN(d->character, C_NRM),
/* Line 8 - autokey */
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM), PREFEDIT_FLAGGED(PRF_AUTOKEY) ? CBGRN(d->character, C_NRM) : CBRED(d->character, C_NRM),
ONOFF(PREFEDIT_FLAGGED(PRF_AUTOKEY)), CCCYN(d->character, C_NRM),
/* Line 9 - autodoor */
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM), PREFEDIT_FLAGGED(PRF_AUTODOOR) ? CBGRN(d->character, C_NRM) : CBRED(d->character, C_NRM),
ONOFF(PREFEDIT_FLAGGED(PRF_AUTODOOR)), CCCYN(d->character, C_NRM)
);
/* The bottom section of the toggles menu */
send_to_char(d->character, "\r\n"
"%sOther Flags\r\n"
"%sF%s) No Summon %s[%s%3s%s] %sH%s) Brief %s[%s%3s%s]\r\n"
"%sG%s) No Repeat %s[%s%3s%s] %sI%s) Compact %s[%s%3s%s]\r\n",
CBWHT(d->character, C_NRM),
/* Line 10 - nosummon and brief */
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM),
ONOFF(!PREFEDIT_FLAGGED(PRF_SUMMONABLE)), CCCYN(d->character, C_NRM), CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM),
CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM), ONOFF(PREFEDIT_FLAGGED(PRF_BRIEF)), CCCYN(d->character, C_NRM),
/* Line 11 - norepeat and compact */
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM),
ONOFF(PREFEDIT_FLAGGED(PRF_NOREPEAT)), CCCYN(d->character, C_NRM), CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM),
CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM), ONOFF(PREFEDIT_FLAGGED(PRF_COMPACT)), CCCYN(d->character, C_NRM)
);
/* The bottom section of the toggles menu */
send_to_char(d->character, "\r\n"
"%sProtocol Settings:\r\n"
"%sJ%s) Xterm 256 %s[%s%3s%s] %sM%s) MXP %s[%s%3s%s]\r\n"
"%sK%s) ANSI %s[%s%3s%s] %sN%s) MSDP %s[%s%3s%s]\r\n"
"%sL%s) Charset %s[%s%3s%s] %sO%s) ATCP %s[%s%3s%s]\r\n"
"%sP%s) UTF-8 %s[%s%3s%s] %sR%s) MSP %s[%s%3s%s]\r\n"
"\r\n",
CBWHT(d->character, C_NRM),
/* Line 12 - 256 and mxp */
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM),
ONOFF(d->pProtocol->pVariables[eMSDP_XTERM_256_COLORS]->ValueInt), CCCYN(d->character, C_NRM), CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM),
CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM), ONOFF(d->pProtocol->pVariables[eMSDP_MXP]->ValueInt), CCCYN(d->character, C_NRM),
/* Line 13 - ansi and msdp */
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM),
ONOFF(d->pProtocol->pVariables[eMSDP_ANSI_COLORS]->ValueInt), CCCYN(d->character, C_NRM), CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM),
CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM), ONOFF(d->pProtocol->bMSDP), CCCYN(d->character, C_NRM),
/* Line 14 - charset and atcp */
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM),
ONOFF(d->pProtocol->bCHARSET), CCCYN(d->character, C_NRM), CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM),
CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM), ONOFF(d->pProtocol->bATCP), CCCYN(d->character, C_NRM),
/* Line 15 - utf-8 and msp */
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM),
ONOFF(d->pProtocol->pVariables[eMSDP_UTF_8]->ValueInt), CCCYN(d->character, C_NRM), CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM),
CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM), ONOFF(d->pProtocol->bMSP), CCCYN(d->character, C_NRM)
);
/* Finishing Off */
send_to_char(d->character, "%sQ%s) Quit toggle preferences...\r\n",
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM) );
OLC_MODE(d) = PREFEDIT_TOGGLE_MENU;
}
static void prefedit_disp_prompt_menu(struct descriptor_data *d)
{
char prompt_string[7];
if (PREFEDIT_FLAGGED(PRF_DISPAUTO))
sprintf(prompt_string, "<Auto>");
else
sprintf(prompt_string, "%s%s%s", PREFEDIT_FLAGGED(PRF_DISPHP) ? "H" : "", PREFEDIT_FLAGGED(PRF_DISPMANA) ? "M" : "",
PREFEDIT_FLAGGED(PRF_DISPMOVE) ? "V" : "");
send_to_char(d->character, "%sPrompt Settings\r\n"
"%s1%s) Toggle HP\r\n"
"%s2%s) Toggle Mana\r\n"
"%s3%s) Toggle Moves\r\n"
"%s4%s) Toggle auto flag\r\n\r\n"
"%sCurrent Prompt: %s%s%s\r\n\r\n"
"%s0%s) Quit (to main menu)\r\n",
CBWHT(d->character, C_NRM), CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM),
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM),
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM),
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM),
CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM), prompt_string, CCNRM(d->character, C_NRM),
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM) );
send_to_char(d->character, "Enter Choice :");
OLC_MODE(d) = PREFEDIT_PROMPT;
}
static void prefedit_disp_color_menu(struct descriptor_data *d)
{
send_to_char(d->character, "%sColor level\r\n"
"%s1%s) Off %s(do not display any color - monochrome)%s\r\n"
"%s2%s) Brief %s(show minimal color where necessary)%s\r\n"
"%s3%s) Normal %s(show game-enhancing color)%s\r\n"
"%s4%s) On %s(show all colors whenever possible)%s\r\n",
CBWHT(d->character, C_NRM),
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCYEL(d->character, C_NRM), CCNRM(d->character, C_NRM),
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCYEL(d->character, C_NRM), CCNRM(d->character, C_NRM),
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCYEL(d->character, C_NRM), CCNRM(d->character, C_NRM),
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCYEL(d->character, C_NRM), CCNRM(d->character, C_NRM) );
send_to_char(d->character, "Enter Choice :");
OLC_MODE(d) = PREFEDIT_COLOR;
}
static void prefedit_disp_syslog_menu(struct descriptor_data *d)
{
send_to_char(d->character, "%sSyslog level\r\n"
"%s1%s) Off %s(do not display any logs or error messages)%s\r\n"
"%s2%s) Brief %s(show only important warnings or errors)%s\r\n"
"%s3%s) Normal %s(show all warnings and errors)%s\r\n"
"%s4%s) Complete %s(show all logged information for your level)%s\r\n",
CBWHT(d->character, C_NRM),
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCYEL(d->character, C_NRM), CCNRM(d->character, C_NRM),
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCYEL(d->character, C_NRM), CCNRM(d->character, C_NRM),
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCYEL(d->character, C_NRM), CCNRM(d->character, C_NRM),
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCYEL(d->character, C_NRM), CCNRM(d->character, C_NRM) );
send_to_char(d->character, "Enter Choice :");
OLC_MODE(d) = PREFEDIT_SYSLOG;
}
void prefedit_parse(struct descriptor_data * d, char *arg)
{
int number;
switch (OLC_MODE(d)) {
case PREFEDIT_CONFIRM_SAVE:
switch (*arg) {
case 'y':
case 'Y':
prefedit_save_to_char(d);
mudlog(CMP, LVL_BUILDER, TRUE, "OLC: %s edits toggles for %s", GET_NAME(d->character), GET_NAME(OLC_PREFS(d)->ch));
/*. No strings to save - cleanup all .*/
cleanup_olc(d, CLEANUP_ALL);
break;
case 'n':
case 'N':
/* don't save to char, just free everything up */
cleanup_olc(d, CLEANUP_ALL);
break;
default:
send_to_char(d->character, "Invalid choice!\r\n");
send_to_char(d->character, "Do you wish to save these toggle settings? : ");
break;
}
return;
case PREFEDIT_MAIN_MENU:
switch (*arg) {
case 'q':
case 'Q':
if (OLC_VAL(d))
{ /*. Something has been modified .*/
send_to_char(d->character, "Do you wish to save these toggle settings? : ");
OLC_MODE(d) = PREFEDIT_CONFIRM_SAVE;
} else
cleanup_olc(d, CLEANUP_ALL);
return;
case 'p':
case 'P':
prefedit_disp_prompt_menu(d);
return;
case 'c':
case 'C':
prefedit_disp_color_menu(d);
return;
case 'l':
case 'L':
send_to_char(d->character, "Enter number of lines per page (10-60): ");
OLC_MODE(d) = PREFEDIT_PAGELENGTH;
return;
case 's':
case 'S':
send_to_char(d->character, "Enter number of columns per page (40-120): ");
OLC_MODE(d) = PREFEDIT_SCREENWIDTH;
return;
case 'w':
case 'W':
send_to_char(d->character, "Enter HP at which to flee (0-%d): ", MIN(GET_MAX_HIT(d->character)/2, 500));
OLC_MODE(d) = PREFEDIT_WIMPY;
return;
case 't':
case 'T':
prefedit_disp_toggles_menu(d);
return;
case 'd':
case 'D':
prefedit_Restore_Defaults(d);
break;
/* Below this point are Imm-only toggles */
case '1':
if (GET_LEVEL(PREFEDIT_GET_CHAR) < LVL_IMMORT)
{
send_to_char(d->character, "%sInvalid choice!%s\r\n", CBRED(d->character, C_NRM), CCNRM(d->character, C_NRM));
prefedit_disp_main_menu(d);
}
else
{
prefedit_disp_syslog_menu(d);
return;
}
break;
case '2':
if (GET_LEVEL(PREFEDIT_GET_CHAR) < LVL_IMMORT)
{
send_to_char(d->character, "%sInvalid choice!%s\r\n", CBRED(d->character, C_NRM), CCNRM(d->character, C_NRM));
prefedit_disp_main_menu(d);
}
else
{
TOGGLE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_SHOWVNUMS);
}
break;
case '3':
if (GET_LEVEL(PREFEDIT_GET_CHAR) < LVL_IMMORT)
{
send_to_char(d->character, "%sInvalid choice!%s\r\n", CBRED(d->character, C_NRM), CCNRM(d->character, C_NRM));
prefedit_disp_main_menu(d);
}
else
{
TOGGLE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_NOHASSLE);
}
break;
case '4':
if (GET_LEVEL(PREFEDIT_GET_CHAR) < LVL_IMMORT)
{
send_to_char(d->character, "%sInvalid choice!%s\r\n", CBRED(d->character, C_NRM), CCNRM(d->character, C_NRM));
prefedit_disp_main_menu(d);
}
else
{
TOGGLE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_CLS);
}
break;
case '5':
if (GET_LEVEL(PREFEDIT_GET_CHAR) < LVL_IMMORT)
{
send_to_char(d->character, "%sInvalid choice!%s\r\n", CBRED(d->character, C_NRM), CCNRM(d->character, C_NRM));
prefedit_disp_main_menu(d);
}
else
{
TOGGLE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_NOWIZ);
}
break;
case '6':
if (GET_LEVEL(PREFEDIT_GET_CHAR) < LVL_IMMORT)
{
send_to_char(d->character, "%sInvalid choice!%s\r\n", CBRED(d->character, C_NRM), CCNRM(d->character, C_NRM));
prefedit_disp_main_menu(d);
}
else
{
TOGGLE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_HOLYLIGHT);
}
break;
default:
send_to_char(d->character, "%sInvalid choice!%s\r\n", CBRED(d->character, C_NRM), CCNRM(d->character, C_NRM));
prefedit_disp_main_menu(d);
break;
}
break;
case PREFEDIT_PAGELENGTH:
number = atoi(arg);
OLC_PREFS(d)->page_length = MAX(10, MIN(number, 60));
break;
case PREFEDIT_SCREENWIDTH:
number = atoi(arg);
OLC_PREFS(d)->screen_width = MAX(40, MIN(number, 120));
break;
case PREFEDIT_WIMPY:
number = atoi(arg);
OLC_PREFS(d)->wimp_level = MAX(0, MIN(number, 500));
break;
case PREFEDIT_COLOR:
number = atoi(arg) - 1;
if ((number < 0) || (number > 3)) {
send_to_char(d->character, "%sThat's not a valid choice!%s\r\n", CBRED(d->character, C_NRM), CCNRM(d->character, C_NRM));
prefedit_disp_color_menu(d);
return;
}
REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_COLOR_1);
REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_COLOR_2);
if (number % 2) SET_BIT_AR(PREFEDIT_GET_FLAGS, PRF_COLOR_1);
if (number >= 2) SET_BIT_AR(PREFEDIT_GET_FLAGS, PRF_COLOR_2);
break;
case PREFEDIT_TOGGLE_MENU:
switch (*arg) {
case 'q':
case 'Q':
case 'x' :
case 'X' : prefedit_disp_main_menu(d);
return;
case '1':
TOGGLE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_AUTOEXIT);
break;
case '2':
TOGGLE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_AUTOLOOT);
break;
case '3':
TOGGLE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_AUTOGOLD);
break;
case '4':
TOGGLE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_AUTOSAC);
break;
case '5':
TOGGLE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_AUTOASSIST);
break;
case '6':
TOGGLE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_AUTOSPLIT);
break;
case '7':
TOGGLE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_AUTOMAP);
break;
case '8':
TOGGLE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_AUTOKEY);
break;
case '9':
TOGGLE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_AUTODOOR);
break;
case 'a':
case 'A':
TOGGLE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_NOGOSS);
break;
case 'b':
case 'B':
TOGGLE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_NOSHOUT);
break;
case 'c':
case 'C':
TOGGLE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_NOTELL);
break;
case 'd':
case 'D':
TOGGLE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_NOAUCT);
break;
case 'e':
case 'E':
TOGGLE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_NOGRATZ);
break;
case 'f':
case 'F':
TOGGLE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_SUMMONABLE);
break;
case 'g':
case 'G':
TOGGLE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_NOREPEAT);
break;
case 'h':
case 'H':
TOGGLE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_BRIEF);
break;
case 'i':
case 'I':
TOGGLE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_COMPACT);
break;
case 'j':
case 'J':
TOGGLE_VAR(d->pProtocol->pVariables[eMSDP_XTERM_256_COLORS]->ValueInt);
break;
case 'k':
case 'K':
TOGGLE_VAR(d->pProtocol->pVariables[eMSDP_ANSI_COLORS]->ValueInt);
break;
case 'l':
case 'L':
TOGGLE_VAR(d->pProtocol->bCHARSET);
break;
case 'm':
case 'M':
TOGGLE_VAR(d->pProtocol->pVariables[eMSDP_MXP]->ValueInt);
break;
case 'n':
case 'N':
TOGGLE_VAR(d->pProtocol->bMSDP);
break;
case 'o':
case 'O':
TOGGLE_VAR(d->pProtocol->bATCP);
break;
case 'p':
case 'P':
TOGGLE_VAR(d->pProtocol->pVariables[eMSDP_UTF_8]->ValueInt);
break;
case 'r':
case 'R':
TOGGLE_VAR(d->pProtocol->bMSP);
break;
default : send_to_char(d->character, "Invalid Choice, try again (Q to Quit to main menu): ");
return;
}
/* Set the 'value has changed' flag thing */
OLC_VAL(d) = 1;
prefedit_disp_toggles_menu(d);
return;
case PREFEDIT_SYSLOG:
number = atoi(arg) - 1;
if ((number < 0) || (number > 3)) {
send_to_char(d->character, "%sThat's not a valid choice!%s\r\n", CBRED(d->character, C_NRM), CCNRM(d->character, C_NRM));
prefedit_disp_color_menu(d);
return;
}
if ((number % 2) == 1) SET_BIT_AR(PREFEDIT_GET_FLAGS, PRF_LOG1);
else REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_LOG1);
if (number >= 2) SET_BIT_AR(PREFEDIT_GET_FLAGS, PRF_LOG2);
else REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_LOG2);
break;
/* Sub-menu's and flag toggle menu's */
case PREFEDIT_PROMPT:
number = atoi(arg);
if ((number < 0) || (number > 7)) {
send_to_char(d->character, "%sThat's not a valid choice!%s\r\n", CBRED(d->character, C_NRM), CCNRM(d->character, C_NRM));
prefedit_disp_prompt_menu(d);
} else {
if (number == 0)
break;
else
{
/* toggle bits */
if (number == 1)
{
if (PREFEDIT_FLAGGED(PRF_DISPHP))
REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_DISPHP);
else
SET_BIT_AR(PREFEDIT_GET_FLAGS, PRF_DISPHP);
}
else if (number == 2)
{
if (PREFEDIT_FLAGGED(PRF_DISPMANA))
REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_DISPMANA);
else
SET_BIT_AR(PREFEDIT_GET_FLAGS, PRF_DISPMANA);
}
else if (number == 3)
{
if (PREFEDIT_FLAGGED(PRF_DISPMOVE))
REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_DISPMOVE);
else
SET_BIT_AR(PREFEDIT_GET_FLAGS, PRF_DISPMOVE);
}
else if (number == 4)
{
if (PREFEDIT_FLAGGED(PRF_DISPAUTO))
REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_DISPAUTO);
else
SET_BIT_AR(PREFEDIT_GET_FLAGS, PRF_DISPAUTO);
}
prefedit_disp_prompt_menu(d);
}
}
return;
default:
/* we should never get here */
mudlog(BRF,LVL_BUILDER,TRUE,"SYSERR: Reached default case in parse_prefedit");
break;
}
/*. If we get this far, something has be changed .*/
OLC_VAL(d) = 1;
prefedit_disp_main_menu(d);
}
void prefedit_Restore_Defaults(struct descriptor_data *d)
{
/* Let's do toggles one at a time */
/* PRF_BRIEF - Off */
if (PREFEDIT_FLAGGED(PRF_BRIEF))
REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_BRIEF);
/* PRF_COMPACT - Off */
if (PREFEDIT_FLAGGED(PRF_COMPACT))
REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_COMPACT);
/* PRF_NOSHOUT - Off */
if (PREFEDIT_FLAGGED(PRF_NOSHOUT))
REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_NOSHOUT);
/* PRF_NOTELL - Off */
if (PREFEDIT_FLAGGED(PRF_NOTELL))
REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_NOTELL);
/* PRF_DISPHP - On */
if (!PREFEDIT_FLAGGED(PRF_DISPHP))
SET_BIT_AR(PREFEDIT_GET_FLAGS, PRF_DISPHP);
/* PRF_DISPMANA - On */
if (!PREFEDIT_FLAGGED(PRF_DISPMANA))
SET_BIT_AR(PREFEDIT_GET_FLAGS, PRF_DISPMANA);
/* PRF_DISPMOVE - On */
if (!PREFEDIT_FLAGGED(PRF_DISPMOVE))
SET_BIT_AR(PREFEDIT_GET_FLAGS, PRF_DISPMOVE);
/* PRF_AUTOEXIT - On */
if (!PREFEDIT_FLAGGED(PRF_AUTOEXIT))
SET_BIT_AR(PREFEDIT_GET_FLAGS, PRF_AUTOEXIT);
/* PRF_NOHASSLE - On for Imms */
if (!PREFEDIT_FLAGGED(PRF_NOHASSLE) && GET_LEVEL(PREFEDIT_GET_CHAR) > LVL_IMMORT)
SET_BIT_AR(PREFEDIT_GET_FLAGS, PRF_NOHASSLE);
else
REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_NOHASSLE);
/* PRF_QUEST - Off */
if (PREFEDIT_FLAGGED(PRF_QUEST))
REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_QUEST);
/* PRF_SUMMONABLE - Off */
if (PREFEDIT_FLAGGED(PRF_SUMMONABLE))
REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_SUMMONABLE);
/* PRF_NOREPEAT - Off */
if (PREFEDIT_FLAGGED(PRF_NOREPEAT))
REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_NOREPEAT);
/* PRF_HOLYLIGHT - On for Imms */
if (!PREFEDIT_FLAGGED(PRF_HOLYLIGHT) && GET_LEVEL(PREFEDIT_GET_CHAR) > LVL_IMMORT)
SET_BIT_AR(PREFEDIT_GET_FLAGS, PRF_HOLYLIGHT);
else
REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_HOLYLIGHT);
/* PRF_COLOR - On (Complete) */
if (!PREFEDIT_FLAGGED(PRF_COLOR_1))
SET_BIT_AR(PREFEDIT_GET_FLAGS, PRF_COLOR_1);
if (!PREFEDIT_FLAGGED(PRF_COLOR_2))
SET_BIT_AR(PREFEDIT_GET_FLAGS, PRF_COLOR_2);
/* PRF_NOWIZ - Off */
if (PREFEDIT_FLAGGED(PRF_NOWIZ))
REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_NOWIZ);
/* PRF_LOG1 - Off */
if (PREFEDIT_FLAGGED(PRF_LOG1))
REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_LOG1);
/* PRF_LOG2 - Off */
if (PREFEDIT_FLAGGED(PRF_LOG2))
REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_LOG2);
/* PRF_NOAUCT - Off */
if (PREFEDIT_FLAGGED(PRF_NOAUCT))
REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_NOAUCT);
/* PRF_NOGOSS - Off */
if (PREFEDIT_FLAGGED(PRF_NOGOSS))
REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_NOGOSS);
/* PRF_NOGRATZ - Off */
if (PREFEDIT_FLAGGED(PRF_NOGRATZ))
REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_NOGRATZ);
/* PRF_SHOWVNUMS - On for Imms */
if (!PREFEDIT_FLAGGED(PRF_SHOWVNUMS) && GET_LEVEL(PREFEDIT_GET_CHAR) > LVL_IMMORT)
SET_BIT_AR(PREFEDIT_GET_FLAGS, PRF_SHOWVNUMS);
else
REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_SHOWVNUMS);
/* PRF_DISPAUTO - Off */
if (PREFEDIT_FLAGGED(PRF_DISPAUTO))
REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_DISPAUTO);
/* PRF_CLS - Off */
if (PREFEDIT_FLAGGED(PRF_CLS))
REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_CLS);
/* PRF_AFK - Off */
if (PREFEDIT_FLAGGED(PRF_AFK))
REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_AFK);
/* PRF_AUTOLOOT - On */
if (!PREFEDIT_FLAGGED(PRF_AUTOLOOT))
SET_BIT_AR(PREFEDIT_GET_FLAGS, PRF_AUTOLOOT);
/* PRF_AUTOGOLD - On */
if (!PREFEDIT_FLAGGED(PRF_AUTOGOLD))
SET_BIT_AR(PREFEDIT_GET_FLAGS, PRF_AUTOGOLD);
/* PRF_AUTOSPLIT - Off */
if (PREFEDIT_FLAGGED(PRF_AUTOSPLIT))
REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_AUTOSPLIT);
/* PRF_AUTOSAC - Off */
if (PREFEDIT_FLAGGED(PRF_AUTOSAC))
REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_AUTOSAC);
/* PRF_AUTOASSIST - Off */
if (PREFEDIT_FLAGGED(PRF_AUTOASSIST))
REMOVE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_AUTOASSIST);
/* PRF_AUTOMAP - On */
if (PREFEDIT_FLAGGED(PRF_AUTOMAP))
SET_BIT_AR(PREFEDIT_GET_FLAGS, PRF_AUTOMAP);
/* PRF_AUTOKEY - On */
if (PREFEDIT_FLAGGED(PRF_AUTOKEY))
SET_BIT_AR(PREFEDIT_GET_FLAGS, PRF_AUTOKEY);
/* PRF_AUTODOOR - On */
if (PREFEDIT_FLAGGED(PRF_AUTODOOR))
SET_BIT_AR(PREFEDIT_GET_FLAGS, PRF_AUTODOOR);
/* Other (non-toggle) options */
PREFEDIT_GET_WIMP_LEV = 0; /* Wimpy off by default */
PREFEDIT_GET_PAGELENGTH = 22; /* Default telnet screen is 22 lines */
PREFEDIT_GET_SCREENWIDTH = 80; /* Default telnet screen is 80 columns */
}
ACMD(do_oasis_prefedit)
{
struct descriptor_data *d;
struct char_data *vict;
char *buf3;
char buf[MAX_STRING_LENGTH];
char buf1[MAX_STRING_LENGTH];
char buf2[MAX_STRING_LENGTH];
/****************************************************************************/
/** Parse any arguments. **/
/****************************************************************************/
buf3 = two_arguments(argument, buf1, buf2);
/****************************************************************************/
/** If there aren't any arguments...well...they can only modify their **/
/** own toggles, can't they? **/
/****************************************************************************/
if (!*buf1) {
vict = ch;
}
else if (GET_LEVEL(ch) >= LVL_IMPL)
{
if ((vict = get_player_vis(ch, buf1, NULL, FIND_CHAR_WORLD)) == NULL)
{
send_to_char(ch, "There is no-one here by that name.\r\n");
return;
}
}
else
{
send_to_char(ch, "You can't do that!\r\n");
return;
}
if (IS_NPC(vict))
{
send_to_char(ch, "Don't be ridiculous! Mobs don't have toggles.\r\n");
return;
}
/****************************************************************************/
/** Check that whatever it is isn't already being edited. **/
/****************************************************************************/
for (d = descriptor_list; d; d = d->next) {
if (STATE(d) == CON_PREFEDIT) {
if (d->olc && OLC_PREFS(d)->ch == vict) {
if (ch == vict)
send_to_char(ch, "Your preferences are currently being edited by %s.\r\n", PERS(d->character, ch));
else
sprintf(buf, "$S$u preferences are currently being edited by %s.", PERS(d->character, ch));
act(buf, FALSE, ch, 0, vict, TO_CHAR);
return;
}
}
}
/****************************************************************************/
/** Point d to the builder's descriptor (for easier typing later). **/
/****************************************************************************/
d = ch->desc;
/****************************************************************************/
/** Give the descriptor an OLC structure. **/
/****************************************************************************/
if (d->olc) {
mudlog(BRF, LVL_IMMORT, TRUE, "SYSERR: do_oasis_prefedit: Player already had olc structure.");
free(d->olc);
}
CREATE(d->olc, struct oasis_olc_data, 1);
OLC_NUM(d) = 0;
/****************************************************************************/
/** If this is a new quest, setup a new quest, otherwise setup the **/
/** existing quest. **/
/****************************************************************************/
prefedit_setup(d, vict);
STATE(d) = CON_PREFEDIT;
/****************************************************************************/
/** Send the OLC message to the players in the same room as the builder. **/
/****************************************************************************/
act("$n starts editing toggles.", TRUE, d->character, 0, 0, TO_ROOM);
SET_BIT_AR(PLR_FLAGS(ch), PLR_WRITING);
/****************************************************************************/
/** Log the OLC message. **/
/****************************************************************************/
/* No need - done elsewhere */
// mudlog(CMP, LVL_IMMORT, TRUE, "OLC: (prefedit) %s starts editing toggles for %s", GET_NAME(ch), GET_NAME(vict));
}