mirror of
https://github.com/tbamud/tbamud.git
synced 2025-12-20 17:20:12 +01:00
271 lines
12 KiB
C
271 lines
12 KiB
C
/*
|
|
* The functions below this point is handling the context sensitive help system
|
|
* If you add more olc options, be sure to add a case for it here. - Welcor
|
|
*/
|
|
|
|
#include "conf.h"
|
|
#include "sysdep.h"
|
|
|
|
#include "structs.h"
|
|
#include "utils.h"
|
|
#include "comm.h"
|
|
#include "db.h"
|
|
#include "interpreter.h"
|
|
#include "oasis.h"
|
|
#include "dg_olc.h"
|
|
|
|
/* Extern functions */
|
|
ACMD(do_help);
|
|
|
|
/* local global */
|
|
char *context_help_list[NUM_CONTEXTS];
|
|
|
|
int find_context(struct descriptor_data *d)
|
|
{
|
|
switch STATE(d) {
|
|
case CON_TRIGEDIT: return find_context_trigedit(d);
|
|
case CON_REDIT: return find_context_redit(d);
|
|
case CON_MEDIT: return find_context_medit(d);
|
|
case CON_OEDIT: return find_context_oedit(d);
|
|
case CON_ZEDIT: return find_context_zedit(d);
|
|
case CON_SEDIT: return find_context_sedit(d);
|
|
default: return NOTHING;
|
|
}
|
|
}
|
|
|
|
int find_context_oedit(struct descriptor_data *d)
|
|
{
|
|
switch (OLC_MODE(d)) {
|
|
case OEDIT_MAIN_MENU: return CONTEXT_OEDIT_MAIN_MENU;
|
|
case OEDIT_EDIT_NAMELIST: return CONTEXT_OEDIT_EDIT_NAMELIST;
|
|
case OEDIT_SHORTDESC: return CONTEXT_OEDIT_SHORTDESC;
|
|
case OEDIT_LONGDESC: return CONTEXT_OEDIT_LONGDESC;
|
|
case OEDIT_ACTDESC: return CONTEXT_OEDIT_ACTDESC;
|
|
case OEDIT_TYPE: return CONTEXT_OEDIT_TYPE;
|
|
case OEDIT_EXTRAS: return CONTEXT_OEDIT_EXTRAS;
|
|
case OEDIT_WEAR: return CONTEXT_OEDIT_WEAR;
|
|
case OEDIT_WEIGHT: return CONTEXT_OEDIT_WEIGHT;
|
|
case OEDIT_COST: return CONTEXT_OEDIT_COST;
|
|
case OEDIT_COSTPERDAY: return CONTEXT_OEDIT_COSTPERDAY;
|
|
case OEDIT_TIMER: return CONTEXT_OEDIT_TIMER;
|
|
case OEDIT_VALUE_1: return CONTEXT_OEDIT_VALUE_1;
|
|
case OEDIT_VALUE_2: return CONTEXT_OEDIT_VALUE_2;
|
|
case OEDIT_VALUE_3: return CONTEXT_OEDIT_VALUE_3;
|
|
case OEDIT_VALUE_4: return CONTEXT_OEDIT_VALUE_4;
|
|
case OEDIT_APPLY: return CONTEXT_OEDIT_APPLY;
|
|
case OEDIT_APPLYMOD: return CONTEXT_OEDIT_APPLYMOD;
|
|
case OEDIT_EXTRADESC_KEY: return CONTEXT_OEDIT_EXTRADESC_KEY;
|
|
case OEDIT_CONFIRM_SAVEDB: return CONTEXT_OEDIT_CONFIRM_SAVEDB;
|
|
case OEDIT_CONFIRM_SAVESTRING: return CONTEXT_OEDIT_CONFIRM_SAVESTRING;
|
|
case OEDIT_PROMPT_APPLY: return CONTEXT_OEDIT_PROMPT_APPLY;
|
|
case OEDIT_EXTRADESC_DESCRIPTION: return CONTEXT_OEDIT_EXTRADESC_DESCRIPTION;
|
|
case OEDIT_EXTRADESC_MENU: return CONTEXT_OEDIT_EXTRADESC_MENU;
|
|
case OEDIT_LEVEL: return CONTEXT_OEDIT_LEVEL;
|
|
case OEDIT_PERM: return CONTEXT_OEDIT_PERM;
|
|
case OLC_SCRIPT_EDIT: return find_context_script_edit(d);
|
|
default: return NOTHING;
|
|
}
|
|
}
|
|
|
|
int find_context_redit(struct descriptor_data *d)
|
|
{
|
|
switch (OLC_MODE(d)) {
|
|
case REDIT_MAIN_MENU: return CONTEXT_REDIT_MAIN_MENU;
|
|
case REDIT_NAME: return CONTEXT_REDIT_NAME;
|
|
case REDIT_DESC: return CONTEXT_REDIT_DESC;
|
|
case REDIT_FLAGS: return CONTEXT_REDIT_FLAGS;
|
|
case REDIT_SECTOR: return CONTEXT_REDIT_SECTOR;
|
|
case REDIT_EXIT_MENU: return CONTEXT_REDIT_EXIT_MENU;
|
|
case REDIT_CONFIRM_SAVEDB: return CONTEXT_REDIT_CONFIRM_SAVEDB;
|
|
case REDIT_CONFIRM_SAVESTRING: return CONTEXT_REDIT_CONFIRM_SAVESTRING;
|
|
case REDIT_EXIT_NUMBER: return CONTEXT_REDIT_EXIT_NUMBER;
|
|
case REDIT_EXIT_DESCRIPTION: return CONTEXT_REDIT_EXIT_DESCRIPTION;
|
|
case REDIT_EXIT_KEYWORD: return CONTEXT_REDIT_EXIT_KEYWORD;
|
|
case REDIT_EXIT_KEY: return CONTEXT_REDIT_EXIT_KEY;
|
|
case REDIT_EXIT_DOORFLAGS: return CONTEXT_REDIT_EXIT_DOORFLAGS;
|
|
case REDIT_EXTRADESC_MENU: return CONTEXT_REDIT_EXTRADESC_MENU;
|
|
case REDIT_EXTRADESC_KEY: return CONTEXT_REDIT_EXTRADESC_KEY;
|
|
case REDIT_EXTRADESC_DESCRIPTION:return CONTEXT_REDIT_EXTRADESC_DESCRIPTION;
|
|
case OLC_SCRIPT_EDIT: return find_context_script_edit(d);
|
|
default: return NOTHING;
|
|
}
|
|
}
|
|
|
|
int find_context_zedit(struct descriptor_data *d)
|
|
{
|
|
switch (OLC_MODE(d)) {
|
|
case ZEDIT_MAIN_MENU: return CONTEXT_ZEDIT_MAIN_MENU;
|
|
case ZEDIT_DELETE_ENTRY: return CONTEXT_ZEDIT_DELETE_ENTRY;
|
|
case ZEDIT_NEW_ENTRY: return CONTEXT_ZEDIT_NEW_ENTRY;
|
|
case ZEDIT_CHANGE_ENTRY: return CONTEXT_ZEDIT_CHANGE_ENTRY;
|
|
case ZEDIT_COMMAND_TYPE: return CONTEXT_ZEDIT_COMMAND_TYPE;
|
|
case ZEDIT_IF_FLAG: return CONTEXT_ZEDIT_IF_FLAG;
|
|
case ZEDIT_ARG1: return CONTEXT_ZEDIT_ARG1;
|
|
case ZEDIT_ARG2: return CONTEXT_ZEDIT_ARG2;
|
|
case ZEDIT_ARG3: return CONTEXT_ZEDIT_ARG3;
|
|
case ZEDIT_ZONE_NAME: return CONTEXT_ZEDIT_ZONE_NAME;
|
|
case ZEDIT_ZONE_LIFE: return CONTEXT_ZEDIT_ZONE_LIFE;
|
|
case ZEDIT_ZONE_BOT: return CONTEXT_ZEDIT_ZONE_BOT;
|
|
case ZEDIT_ZONE_TOP: return CONTEXT_ZEDIT_ZONE_TOP;
|
|
case ZEDIT_ZONE_RESET: return CONTEXT_ZEDIT_ZONE_RESET;
|
|
case ZEDIT_CONFIRM_SAVESTRING:return CONTEXT_ZEDIT_CONFIRM_SAVESTRING;
|
|
case ZEDIT_SARG1: return CONTEXT_ZEDIT_SARG1;
|
|
case ZEDIT_SARG2: return CONTEXT_ZEDIT_SARG2;
|
|
default: return NOTHING;
|
|
}
|
|
}
|
|
|
|
int find_context_medit(struct descriptor_data *d)
|
|
{
|
|
switch (OLC_MODE(d)) {
|
|
case MEDIT_MAIN_MENU: return CONTEXT_MEDIT_MAIN_MENU;
|
|
case MEDIT_ALIAS: return CONTEXT_MEDIT_ALIAS;
|
|
case MEDIT_S_DESC: return CONTEXT_MEDIT_S_DESC;
|
|
case MEDIT_L_DESC: return CONTEXT_MEDIT_L_DESC;
|
|
case MEDIT_D_DESC: return CONTEXT_MEDIT_D_DESC;
|
|
case MEDIT_NPC_FLAGS: return CONTEXT_MEDIT_NPC_FLAGS;
|
|
case MEDIT_AFF_FLAGS: return CONTEXT_MEDIT_AFF_FLAGS;
|
|
case MEDIT_CONFIRM_SAVESTRING:return CONTEXT_MEDIT_CONFIRM_SAVESTRING;
|
|
case MEDIT_SEX: return CONTEXT_MEDIT_SEX;
|
|
case MEDIT_HITROLL: return CONTEXT_MEDIT_HITROLL;
|
|
case MEDIT_DAMROLL: return CONTEXT_MEDIT_DAMROLL;
|
|
case MEDIT_NDD: return CONTEXT_MEDIT_NDD;
|
|
case MEDIT_SDD: return CONTEXT_MEDIT_SDD;
|
|
case MEDIT_NUM_HP_DICE: return CONTEXT_MEDIT_NUM_HP_DICE;
|
|
case MEDIT_SIZE_HP_DICE: return CONTEXT_MEDIT_SIZE_HP_DICE;
|
|
case MEDIT_ADD_HP: return CONTEXT_MEDIT_ADD_HP;
|
|
case MEDIT_AC: return CONTEXT_MEDIT_AC;
|
|
case MEDIT_EXP: return CONTEXT_MEDIT_EXP;
|
|
case MEDIT_GOLD: return CONTEXT_MEDIT_GOLD;
|
|
case MEDIT_POS: return CONTEXT_MEDIT_POS;
|
|
case MEDIT_DEFAULT_POS: return CONTEXT_MEDIT_DEFAULT_POS;
|
|
case MEDIT_ATTACK: return CONTEXT_MEDIT_ATTACK;
|
|
case MEDIT_LEVEL: return CONTEXT_MEDIT_LEVEL;
|
|
case MEDIT_ALIGNMENT: return CONTEXT_MEDIT_ALIGNMENT;
|
|
case OLC_SCRIPT_EDIT: return find_context_script_edit(d);
|
|
default: return NOTHING;
|
|
}
|
|
}
|
|
|
|
int find_context_sedit(struct descriptor_data *d)
|
|
{
|
|
switch (OLC_MODE(d)) {
|
|
case SEDIT_MAIN_MENU: return CONTEXT_SEDIT_MAIN_MENU;
|
|
case SEDIT_CONFIRM_SAVESTRING:return CONTEXT_SEDIT_CONFIRM_SAVESTRING;
|
|
case SEDIT_NOITEM1: return CONTEXT_SEDIT_NOITEM1;
|
|
case SEDIT_NOITEM2: return CONTEXT_SEDIT_NOITEM2;
|
|
case SEDIT_NOCASH1: return CONTEXT_SEDIT_NOCASH1;
|
|
case SEDIT_NOCASH2: return CONTEXT_SEDIT_NOCASH2;
|
|
case SEDIT_NOBUY: return CONTEXT_SEDIT_NOBUY;
|
|
case SEDIT_BUY: return CONTEXT_SEDIT_BUY;
|
|
case SEDIT_SELL: return CONTEXT_SEDIT_SELL;
|
|
case SEDIT_PRODUCTS_MENU: return CONTEXT_SEDIT_PRODUCTS_MENU;
|
|
case SEDIT_ROOMS_MENU: return CONTEXT_SEDIT_ROOMS_MENU;
|
|
case SEDIT_NAMELIST_MENU: return CONTEXT_SEDIT_NAMELIST_MENU;
|
|
case SEDIT_NAMELIST: return CONTEXT_SEDIT_NAMELIST;
|
|
case SEDIT_OPEN1: return CONTEXT_SEDIT_OPEN1;
|
|
case SEDIT_OPEN2: return CONTEXT_SEDIT_OPEN2;
|
|
case SEDIT_CLOSE1: return CONTEXT_SEDIT_CLOSE1;
|
|
case SEDIT_CLOSE2: return CONTEXT_SEDIT_CLOSE2;
|
|
case SEDIT_KEEPER: return CONTEXT_SEDIT_KEEPER;
|
|
case SEDIT_BUY_PROFIT: return CONTEXT_SEDIT_BUY_PROFIT;
|
|
case SEDIT_SELL_PROFIT: return CONTEXT_SEDIT_SELL_PROFIT;
|
|
case SEDIT_TYPE_MENU: return CONTEXT_SEDIT_TYPE_MENU;
|
|
case SEDIT_DELETE_TYPE: return CONTEXT_SEDIT_DELETE_TYPE;
|
|
case SEDIT_DELETE_PRODUCT: return CONTEXT_SEDIT_DELETE_PRODUCT;
|
|
case SEDIT_NEW_PRODUCT: return CONTEXT_SEDIT_NEW_PRODUCT;
|
|
case SEDIT_DELETE_ROOM: return CONTEXT_SEDIT_DELETE_ROOM;
|
|
case SEDIT_NEW_ROOM: return CONTEXT_SEDIT_NEW_ROOM;
|
|
case SEDIT_SHOP_FLAGS: return CONTEXT_SEDIT_SHOP_FLAGS;
|
|
case SEDIT_NOTRADE: return CONTEXT_SEDIT_NOTRADE;
|
|
default: return NOTHING;
|
|
}
|
|
}
|
|
|
|
int find_context_trigedit(struct descriptor_data *d)
|
|
{
|
|
switch (OLC_MODE(d)) {
|
|
case TRIGEDIT_MAIN_MENU: return CONTEXT_TRIGEDIT_MAIN_MENU;
|
|
case TRIGEDIT_TRIGTYPE: return CONTEXT_TRIGEDIT_TRIGTYPE;
|
|
case TRIGEDIT_CONFIRM_SAVESTRING:return CONTEXT_TRIGEDIT_CONFIRM_SAVESTRING;
|
|
case TRIGEDIT_NAME: return CONTEXT_TRIGEDIT_NAME;
|
|
case TRIGEDIT_INTENDED: return CONTEXT_TRIGEDIT_INTENDED;
|
|
case TRIGEDIT_TYPES: return CONTEXT_TRIGEDIT_TYPES;
|
|
case TRIGEDIT_COMMANDS: return CONTEXT_TRIGEDIT_COMMANDS;
|
|
case TRIGEDIT_NARG: return CONTEXT_TRIGEDIT_NARG;
|
|
case TRIGEDIT_ARGUMENT: return CONTEXT_TRIGEDIT_ARGUMENT;
|
|
default: return NOTHING;
|
|
}
|
|
}
|
|
|
|
int find_context_script_edit(struct descriptor_data *d)
|
|
{
|
|
switch (OLC_SCRIPT_EDIT_MODE(d)) {
|
|
case SCRIPT_MAIN_MENU: return CONTEXT_SCRIPT_MAIN_MENU;
|
|
case SCRIPT_NEW_TRIGGER:return CONTEXT_SCRIPT_NEW_TRIGGER;
|
|
case SCRIPT_DEL_TRIGGER:return CONTEXT_SCRIPT_DEL_TRIGGER;
|
|
default: return NOTHING;
|
|
}
|
|
}
|
|
|
|
char *NO_HELP = "No help available (yet)!\r\n";
|
|
#define FIND_HELP_CHAR '*'
|
|
|
|
int context_help(struct descriptor_data *d, char *arg)
|
|
{
|
|
int context = NOTHING;
|
|
char actbuf[MAX_INPUT_LENGTH], *tmp;
|
|
/* skip if context help isn't wanted */
|
|
if (strncmp(arg, CONTEXT_HELP_STRING, strlen(CONTEXT_HELP_STRING)))
|
|
return FALSE;
|
|
|
|
tmp = one_argument(arg, actbuf); /* the totally useless 'help' string.. */
|
|
skip_spaces(&tmp);
|
|
|
|
if (!*tmp)
|
|
context = find_context(d);
|
|
|
|
if (context != NOTHING && context < NUM_CONTEXTS && *context_help_list[context]) {
|
|
if (*context_help_list[context] == FIND_HELP_CHAR) {
|
|
strncpy(actbuf, context_help_list[context]+1, sizeof(actbuf)-1);
|
|
do_help(d->character, actbuf, 0, 0);
|
|
} else {
|
|
write_to_output(d, "\r\n%s\r\n> ", context_help_list[context]);
|
|
}
|
|
return TRUE;
|
|
}
|
|
strncpy(actbuf, tmp, sizeof(actbuf)-1);
|
|
do_help(d->character, actbuf, 0, 0);
|
|
return TRUE;
|
|
}
|
|
|
|
void boot_context_help(void) {
|
|
int i, num;
|
|
FILE *fl;
|
|
char line[READ_SIZE];
|
|
|
|
fl = fopen(CONTEXT_HELP_FILE, "r");
|
|
|
|
/* init to 'no help' string */
|
|
for (i=0;i < NUM_CONTEXTS;i++)
|
|
context_help_list[i] = NO_HELP;
|
|
|
|
if (!fl) {
|
|
log("No context help found : %s", strerror(errno));
|
|
return;
|
|
}
|
|
while (get_line(fl, line)) {
|
|
if (sscanf(line, "#%d *", &num) == 1 && num >= 0 && num < NUM_CONTEXTS) /* got a number, now get the text */
|
|
context_help_list[num] = fread_string(fl, "Context sensitive help");
|
|
}
|
|
|
|
fclose(fl);
|
|
}
|
|
|
|
void free_context_help(void) {
|
|
int i;
|
|
|
|
for (i = 0; i < NUM_CONTEXTS; i++)
|
|
if (context_help_list[i] && context_help_list[i] != NO_HELP)
|
|
free(context_help_list[i]);
|
|
}
|