mirror of
https://github.com/tbamud/tbamud.git
synced 2025-12-22 02:00:13 +01:00
Several bug-fixes, and new medit stats submenu (with cedit option for advanced options)
This commit is contained in:
parent
5ab5838acc
commit
ac7b71c4ca
16 changed files with 1064 additions and 617 deletions
10
changelog
10
changelog
|
|
@ -35,6 +35,16 @@ export (QQ's a zone into a tarball)t
|
|||
Xlist (mlist, olist, rlist, zlist, slist, tlist, qlist)
|
||||
(lots of major bugfixes too)
|
||||
tbaMUD 3.59
|
||||
[Feb 24 2009] - Jamdog
|
||||
Bug-Fix: Fixed levels command, so it only shows immortal level if it's in the specified range
|
||||
Bug-Fix: write_mobile_espec now saves CON and CHA values for mobiles in world files
|
||||
Bug-Fix: stat zone <num> now shows the same as vstat zone <num> (instead of show zone (num)
|
||||
Bug-Fix: zone 'stat' info (print_zone, oasis_list.c) now shows the number of shops and triggers
|
||||
Bug-Fix: zone 'show' info (print_zone_to_buf, act.wizard.c) now shows number of quests.
|
||||
Added saving throws to write_mobile_espec (genmob.c) and interpret_espec (db.c)
|
||||
Added 'whois' command for all players
|
||||
medit: All numerical stats moved to new sub-menu, with 'autoroll' option
|
||||
medit: Advanced or Standard stats sub-menu with cedit toggle (in Game Operations)
|
||||
[Feb 17 2009] - Jamdog
|
||||
Fixed a bug with %obj.extra% so that it now returns the list of extra flags
|
||||
[Feb 11 2009] - Jamdog
|
||||
|
|
|
|||
|
|
@ -215,8 +215,19 @@ the test mob~
|
|||
Test mobs can be whatever you want them to be.
|
||||
~
|
||||
8 0 0 0 0 0 0 0 0 E
|
||||
3 19 8 0d0+30 1d2+0
|
||||
30 900
|
||||
22 13 -3 4d4+220 3d3+3
|
||||
220 48400
|
||||
8 8 0
|
||||
Str: 14
|
||||
Dex: 14
|
||||
Int: 14
|
||||
Wis: 14
|
||||
Con: 14
|
||||
Cha: 14
|
||||
SavingPara: 5
|
||||
SavingRod: 5
|
||||
SavingPetri: 5
|
||||
SavingBreath: 5
|
||||
SavingSpell: 5
|
||||
E
|
||||
$
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@ ACMD(do_users);
|
|||
ACMD(do_weather);
|
||||
ACMD(do_where);
|
||||
ACMD(do_who);
|
||||
ACMD(do_whois);
|
||||
|
||||
/*****************************************************************************
|
||||
* Begin Functions and defines for act.item.c
|
||||
|
|
|
|||
|
|
@ -1722,7 +1722,7 @@ ACMD(do_levels)
|
|||
len += nlen;
|
||||
}
|
||||
|
||||
if (len < sizeof(buf))
|
||||
if (len < sizeof(buf) && max_lev == LVL_IMMORT)
|
||||
snprintf(buf + len, sizeof(buf) - len, "[%2d] %8d : Immortality\r\n",
|
||||
LVL_IMMORT, level_exp(GET_CLASS(ch), LVL_IMMORT));
|
||||
page_string(ch->desc, buf, TRUE);
|
||||
|
|
@ -2313,3 +2313,90 @@ void add_history(struct char_data *ch, char *str, int type)
|
|||
if (type != HIST_ALL)
|
||||
add_history(ch, str, HIST_ALL);
|
||||
}
|
||||
|
||||
ACMD(do_whois)
|
||||
{
|
||||
struct char_data *victim = 0;
|
||||
int hours;
|
||||
int got_from_file = 0;
|
||||
char buf[MAX_STRING_LENGTH];
|
||||
|
||||
one_argument(argument, buf);
|
||||
|
||||
if (!*buf) {
|
||||
send_to_char(ch, "Whois who?\r\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(victim=get_player_vis(ch, buf, NULL, FIND_CHAR_WORLD)))
|
||||
{
|
||||
CREATE(victim, struct char_data, 1);
|
||||
clear_char(victim);
|
||||
CREATE(victim->player_specials, struct player_special_data, 1);
|
||||
|
||||
if (load_char(buf, victim) > -1)
|
||||
got_from_file = 1;
|
||||
else {
|
||||
send_to_char (ch, "There is no such player.\r\n");
|
||||
free_char (victim);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* We either have our victim from file or he's playing or function has returned. */
|
||||
sprinttype(GET_SEX(victim), genders, buf, sizeof(buf));
|
||||
send_to_char(ch, "Name: %s %s\r\nSex: %s\r\n", GET_NAME(victim),
|
||||
(victim->player.title ? victim->player.title : ""), buf);
|
||||
|
||||
sprinttype (victim->player.chclass, pc_class_types, buf, sizeof(buf));
|
||||
send_to_char(ch, "Class: %s\r\n", buf);
|
||||
|
||||
send_to_char(ch, "Level: %d\r\n", GET_LEVEL(victim));
|
||||
|
||||
if (!(GET_LEVEL(victim) < LVL_IMMORT) || (GET_LEVEL(ch) >= GET_LEVEL(victim)))
|
||||
{
|
||||
strcpy (buf, (char *) asctime(localtime(&(victim->player.time.logon))));
|
||||
buf[10] = '\0';
|
||||
|
||||
hours = (time(0) - victim->player.time.logon) / 3600;
|
||||
|
||||
if (!got_from_file)
|
||||
{
|
||||
send_to_char(ch, "Last Logon: They're playing now! (Idle %d Minutes)",
|
||||
victim->char_specials.timer * SECS_PER_MUD_HOUR / SECS_PER_REAL_MIN);
|
||||
|
||||
if (!victim->desc)
|
||||
{
|
||||
send_to_char(ch, " (Linkless)\r\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
send_to_char(ch, "\r\n");
|
||||
}
|
||||
if (PRF_FLAGGED(victim, PRF_AFK))
|
||||
{
|
||||
send_to_char(ch, "%s%s is afk right now, so %s may not respond to communication.%s\r\n", CBGRN(ch, C_NRM), GET_NAME(victim), GET_SEX(victim) == SEX_NEUTRAL ? "it" : (GET_SEX(victim) == SEX_MALE ? "he" : "she"), CCNRM(ch, C_NRM));
|
||||
}
|
||||
}
|
||||
else if (hours > 0)
|
||||
{
|
||||
send_to_char(ch, "Last Logon: %s (%d days & %d hours ago.)\r\n", buf, hours/24, hours%24);
|
||||
}
|
||||
else
|
||||
{
|
||||
send_to_char(ch, "Last Logon: %s (0 hours & %d minutes ago.)\r\n",
|
||||
buf, (int)(time(0) - victim->player.time.logon)/60);
|
||||
}
|
||||
}
|
||||
|
||||
if (has_mail(GET_IDNUM(victim)))
|
||||
send_to_char (ch, "They have mail waiting.\r\n");
|
||||
else
|
||||
send_to_char (ch, "They have no mail waiting.\r\n");
|
||||
|
||||
if (PLR_FLAGGED(victim, PLR_DELETED))
|
||||
send_to_char (ch, "***DELETED***\r\n");
|
||||
|
||||
if (got_from_file)
|
||||
free_char (victim);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1367,7 +1367,7 @@ ACMD(do_vstat)
|
|||
break;
|
||||
case 'z':
|
||||
sprintf(buf2, "zone %d", atoi(buf2));
|
||||
do_show(ch, buf2, 0, 0);
|
||||
do_stat(ch, buf2, 0, 0);
|
||||
break;
|
||||
case 't':
|
||||
sprintf(buf2, "%d", atoi(buf2));
|
||||
|
|
@ -2353,7 +2353,7 @@ static size_t print_zone_to_buf(char *bufptr, size_t left, zone_rnum zone, int l
|
|||
size_t tmp;
|
||||
|
||||
if (listall) {
|
||||
int i, j, k, l, m, n;
|
||||
int i, j, k, l, m, n, o;
|
||||
|
||||
tmp = snprintf(bufptr, left,
|
||||
"%3d %-30.30s%s By: %-10.10s%s Age: %3d; Reset: %3d (%1d); Range: %5d-%5d\r\n",
|
||||
|
|
@ -2361,7 +2361,7 @@ static size_t print_zone_to_buf(char *bufptr, size_t left, zone_rnum zone, int l
|
|||
zone_table[zone].age, zone_table[zone].lifespan,
|
||||
zone_table[zone].reset_mode,
|
||||
zone_table[zone].bot, zone_table[zone].top);
|
||||
i = j = k = l = m = n = 0;
|
||||
i = j = k = l = m = n = o = 0;
|
||||
|
||||
for (i = 0; i < top_of_world; i++)
|
||||
if (world[i].number >= zone_table[zone].bot && world[i].number <= zone_table[zone].top)
|
||||
|
|
@ -2383,6 +2383,8 @@ static size_t print_zone_to_buf(char *bufptr, size_t left, zone_rnum zone, int l
|
|||
if (trig_index[i]->vnum >= zone_table[zone].bot && trig_index[i]->vnum <= zone_table[zone].top)
|
||||
n++;
|
||||
|
||||
o = count_quests(zone_table[zone].bot, zone_table[zone].top);
|
||||
|
||||
tmp += snprintf(bufptr + tmp, left - tmp,
|
||||
" Zone stats:\r\n"
|
||||
" ---------------\r\n"
|
||||
|
|
@ -2390,8 +2392,9 @@ static size_t print_zone_to_buf(char *bufptr, size_t left, zone_rnum zone, int l
|
|||
" Objects: %2d\r\n"
|
||||
" Mobiles: %2d\r\n"
|
||||
" Shops: %2d\r\n"
|
||||
" Triggers: %2d\r\n",
|
||||
j, k, l, m, n);
|
||||
" Triggers: %2d\r\n"
|
||||
" Quests: %2d\r\n",
|
||||
j, k, l, m, n, o);
|
||||
|
||||
return tmp;
|
||||
}
|
||||
|
|
|
|||
13
src/cedit.c
13
src/cedit.c
|
|
@ -131,6 +131,7 @@ static void cedit_setup(struct descriptor_data *d)
|
|||
OLC_CONFIG(d)->operation.use_new_socials = CONFIG_NEW_SOCIALS;
|
||||
OLC_CONFIG(d)->operation.auto_save_olc = CONFIG_OLC_SAVE;
|
||||
OLC_CONFIG(d)->operation.nameserver_is_slow = CONFIG_NS_IS_SLOW;
|
||||
OLC_CONFIG(d)->operation.medit_advanced = CONFIG_MEDIT_ADVANCED;
|
||||
|
||||
/* Autowiz */
|
||||
OLC_CONFIG(d)->autowiz.use_autowiz = CONFIG_USE_AUTOWIZ;
|
||||
|
|
@ -228,6 +229,7 @@ static void cedit_save_internally(struct descriptor_data *d)
|
|||
CONFIG_NEW_SOCIALS = OLC_CONFIG(d)->operation.use_new_socials;
|
||||
CONFIG_NS_IS_SLOW = OLC_CONFIG(d)->operation.nameserver_is_slow;
|
||||
CONFIG_OLC_SAVE = OLC_CONFIG(d)->operation.auto_save_olc;
|
||||
CONFIG_MEDIT_ADVANCED = OLC_CONFIG(d)->operation.medit_advanced;
|
||||
|
||||
/* Autowiz */
|
||||
CONFIG_USE_AUTOWIZ = OLC_CONFIG(d)->autowiz.use_autowiz;
|
||||
|
|
@ -517,6 +519,10 @@ int save_config( IDXTYPE nowhere )
|
|||
"START_MESSG = \n%s~\n\n", buf);
|
||||
}
|
||||
|
||||
fprintf(fl, "* Should the medit OLC show the advanced stats menu (1) or not (0).\n"
|
||||
"medit_advanced_stats = %d\n\n",
|
||||
CONFIG_MEDIT_ADVANCED);
|
||||
|
||||
fprintf(fl, "\n\n\n* [ Autowiz Options ]\n");
|
||||
|
||||
fprintf(fl, "* Should the game automatically create a new wizlist/immlist every time\n"
|
||||
|
|
@ -709,6 +715,7 @@ static void cedit_disp_operation_options(struct descriptor_data *d)
|
|||
"%sL%s) Main Menu : \r\n%s%s\r\n"
|
||||
"%sM%s) Welcome Message : \r\n%s%s\r\n"
|
||||
"%sN%s) Start Message : \r\n%s%s\r\n"
|
||||
"%sO%s) Medit Stats Menu : %s%s\r\n"
|
||||
"%sQ%s) Exit To The Main Menu\r\n"
|
||||
"Enter your choice : ",
|
||||
grn, nrm, cyn, OLC_CONFIG(d)->operation.DFLT_PORT,
|
||||
|
|
@ -725,6 +732,7 @@ static void cedit_disp_operation_options(struct descriptor_data *d)
|
|||
grn, nrm, cyn, OLC_CONFIG(d)->operation.MENU ? OLC_CONFIG(d)->operation.MENU : "<None>",
|
||||
grn, nrm, cyn, OLC_CONFIG(d)->operation.WELC_MESSG ? OLC_CONFIG(d)->operation.WELC_MESSG : "<None>",
|
||||
grn, nrm, cyn, OLC_CONFIG(d)->operation.START_MESSG ? OLC_CONFIG(d)->operation.START_MESSG : "<None>",
|
||||
grn, nrm, cyn, OLC_CONFIG(d)->operation.medit_advanced ? "Advanced" : "Standard",
|
||||
grn, nrm
|
||||
);
|
||||
|
||||
|
|
@ -1183,6 +1191,11 @@ void cedit_parse(struct descriptor_data *d, char *arg)
|
|||
string_write(d, &OLC_CONFIG(d)->operation.START_MESSG, MAX_INPUT_LENGTH, 0, oldtext);
|
||||
return;
|
||||
|
||||
case 'o':
|
||||
case 'O':
|
||||
TOGGLE_VAR(OLC_CONFIG(d)->operation.medit_advanced);
|
||||
break;
|
||||
|
||||
case 'q':
|
||||
case 'Q':
|
||||
cedit_disp_menu(d);
|
||||
|
|
|
|||
|
|
@ -299,3 +299,6 @@ int display_closed_doors = YES;
|
|||
int map_option = MAP_IMM_ONLY;
|
||||
int default_map_size = 6;
|
||||
int default_minimap_size = 2;
|
||||
|
||||
/* Medit Stats menu - show 'advanced' options? */
|
||||
int medit_advanced_stats = YES;
|
||||
|
|
|
|||
|
|
@ -71,6 +71,8 @@ extern int display_closed_doors;
|
|||
extern int map_option;
|
||||
extern int default_map_size;
|
||||
extern int default_minimap_size;
|
||||
|
||||
extern int medit_advanced_stats;
|
||||
/*
|
||||
* Variables not controlled by cedit
|
||||
*/
|
||||
|
|
|
|||
28
src/db.c
28
src/db.c
|
|
@ -1561,6 +1561,31 @@ static void interpret_espec(const char *keyword, const char *value, int i, int n
|
|||
mob_proto[i].real_abils.cha = num_arg;
|
||||
}
|
||||
|
||||
CASE("SavingPara") {
|
||||
RANGE(0, 100);
|
||||
mob_proto[i].char_specials.saved.apply_saving_throw[SAVING_PARA] = num_arg;
|
||||
}
|
||||
|
||||
CASE("SavingRod") {
|
||||
RANGE(0, 100);
|
||||
mob_proto[i].char_specials.saved.apply_saving_throw[SAVING_ROD] = num_arg;
|
||||
}
|
||||
|
||||
CASE("SavingPetri") {
|
||||
RANGE(0, 100);
|
||||
mob_proto[i].char_specials.saved.apply_saving_throw[SAVING_PETRI] = num_arg;
|
||||
}
|
||||
|
||||
CASE("SavingBreath") {
|
||||
RANGE(0, 100);
|
||||
mob_proto[i].char_specials.saved.apply_saving_throw[SAVING_BREATH] = num_arg;
|
||||
}
|
||||
|
||||
CASE("SavingSpell") {
|
||||
RANGE(0, 100);
|
||||
mob_proto[i].char_specials.saved.apply_saving_throw[SAVING_SPELL] = num_arg;
|
||||
}
|
||||
|
||||
if (!matched) {
|
||||
log("SYSERR: Warning: unrecognized espec keyword %s in mob #%d",
|
||||
keyword, nr);
|
||||
|
|
@ -3388,6 +3413,7 @@ static void load_default_config( void )
|
|||
CONFIG_MENU = strdup(MENU);
|
||||
CONFIG_WELC_MESSG = strdup(WELC_MESSG);
|
||||
CONFIG_START_MESSG = strdup(START_MESSG);
|
||||
CONFIG_MEDIT_ADVANCED = medit_advanced_stats;
|
||||
|
||||
/* Autowiz options. */
|
||||
CONFIG_USE_AUTOWIZ = use_autowiz;
|
||||
|
|
@ -3543,6 +3569,8 @@ void load_config( void )
|
|||
CONFIG_MORTAL_START = num;
|
||||
else if (!str_cmp(tag, "map_option"))
|
||||
CONFIG_MAP = num;
|
||||
else if (!str_cmp(tag, "medit_advanced_stats"))
|
||||
CONFIG_MEDIT_ADVANCED = num;
|
||||
break;
|
||||
|
||||
case 'n':
|
||||
|
|
|
|||
15
src/genmob.c
15
src/genmob.c
|
|
@ -16,6 +16,7 @@
|
|||
#include "genmob.h"
|
||||
#include "genzon.h"
|
||||
#include "dg_olc.h"
|
||||
#include "spells.h"
|
||||
|
||||
/* local functions */
|
||||
static void extract_mobile_all(mob_vnum vnum);
|
||||
|
|
@ -302,6 +303,20 @@ int write_mobile_espec(mob_vnum mvnum, struct char_data *mob, FILE *fd)
|
|||
fprintf(fd, "Int: %d\n", GET_INT(mob));
|
||||
if (GET_WIS(mob) != 11)
|
||||
fprintf(fd, "Wis: %d\n", GET_WIS(mob));
|
||||
if (GET_CON(mob) != 11)
|
||||
fprintf(fd, "Con: %d\n", GET_CON(mob));
|
||||
if (GET_CHA(mob) != 11)
|
||||
fprintf(fd, "Cha: %d\n", GET_CHA(mob));
|
||||
if (GET_SAVE(mob, SAVING_PARA) != 0)
|
||||
fprintf(fd, "SavingPara: %d\n", GET_SAVE(mob, SAVING_PARA));
|
||||
if (GET_SAVE(mob, SAVING_ROD) != 0)
|
||||
fprintf(fd, "SavingRod: %d\n", GET_SAVE(mob, SAVING_ROD));
|
||||
if (GET_SAVE(mob, SAVING_PETRI) != 0)
|
||||
fprintf(fd, "SavingPetri: %d\n", GET_SAVE(mob, SAVING_PETRI));
|
||||
if (GET_SAVE(mob, SAVING_BREATH) != 0)
|
||||
fprintf(fd, "SavingBreath: %d\n", GET_SAVE(mob, SAVING_BREATH));
|
||||
if (GET_SAVE(mob, SAVING_SPELL) != 0)
|
||||
fprintf(fd, "SavingSpell: %d\n", GET_SAVE(mob, SAVING_SPELL));
|
||||
fputs("E\n", fd);
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -313,6 +313,7 @@ cpp_extern const struct command_info cmd_info[] = {
|
|||
{ "wear" , "wea" , POS_RESTING , do_wear , 0, 0 },
|
||||
{ "weather" , "weather" , POS_RESTING , do_weather , 0, 0 },
|
||||
{ "who" , "wh" , POS_DEAD , do_who , 0, 0 },
|
||||
{ "whois" , "whoi" , POS_DEAD , do_whois , 0, 0 },
|
||||
{ "whoami" , "whoami" , POS_DEAD , do_gen_ps , 0, SCMD_WHOAMI },
|
||||
{ "where" , "where" , POS_RESTING , do_where , 1, 0 },
|
||||
{ "whisper" , "whisper" , POS_RESTING , do_spec_comm, 0, SCMD_WHISPER },
|
||||
|
|
|
|||
475
src/medit.c
475
src/medit.c
|
|
@ -228,6 +228,12 @@ static void init_mobile(struct char_data *mob)
|
|||
mob->real_abils.dex = mob->real_abils.con = mob->real_abils.cha = 11;
|
||||
mob->aff_abils = mob->real_abils;
|
||||
|
||||
GET_SAVE(mob, SAVING_PARA) = 0;
|
||||
GET_SAVE(mob, SAVING_ROD) = 0;
|
||||
GET_SAVE(mob, SAVING_PETRI) = 0;
|
||||
GET_SAVE(mob, SAVING_BREATH) = 0;
|
||||
GET_SAVE(mob, SAVING_SPELL) = 0;
|
||||
|
||||
SET_BIT_AR(MOB_FLAGS(mob), MOB_ISNPC);
|
||||
mob->player_specials = &dummy_mob;
|
||||
}
|
||||
|
|
@ -378,41 +384,25 @@ static void medit_disp_menu(struct descriptor_data *d)
|
|||
"%s1%s) Sex: %s%-7.7s%s %s2%s) Keywords: %s%s\r\n"
|
||||
"%s3%s) S-Desc: %s%s\r\n"
|
||||
"%s4%s) L-Desc:-\r\n%s%s"
|
||||
"%s5%s) D-Desc:-\r\n%s%s"
|
||||
"%s6%s) Level: [%s%4d%s], %s7%s) Alignment: [%s%4d%s]\r\n"
|
||||
"%s8%s) Hitroll: [%s%4d%s], %s9%s) Damroll: [%s%4d%s]\r\n"
|
||||
"%sA%s) NumDamDice: [%s%4d%s], %sB%s) SizeDamDice: [%s%4d%s]\r\n"
|
||||
"%sC%s) Num HP Dice: [%s%4d%s], %sD%s) Size HP Dice: [%s%4d%s], %sE%s) HP Bonus: [%s%5d%s]\r\n"
|
||||
"%sF%s) Armor Class: [%s%4d%s], %sG%s) Exp: [%s%9d%s], %sH%s) Gold: [%s%8d%s]\r\n",
|
||||
"%s5%s) D-Desc:-\r\n%s%s",
|
||||
|
||||
cyn, OLC_NUM(d), nrm,
|
||||
grn, nrm, yel, genders[(int)GET_SEX(mob)], nrm,
|
||||
grn, nrm, yel, GET_ALIAS(mob),
|
||||
grn, nrm, yel, GET_SDESC(mob),
|
||||
grn, nrm, yel, GET_LDESC(mob),
|
||||
grn, nrm, yel, GET_DDESC(mob),
|
||||
grn, nrm, cyn, GET_LEVEL(mob), nrm,
|
||||
grn, nrm, cyn, GET_ALIGNMENT(mob), nrm,
|
||||
grn, nrm, cyn, GET_HITROLL(mob), nrm,
|
||||
grn, nrm, cyn, GET_DAMROLL(mob), nrm,
|
||||
grn, nrm, cyn, GET_NDD(mob), nrm,
|
||||
grn, nrm, cyn, GET_SDD(mob), nrm,
|
||||
grn, nrm, cyn, GET_HIT(mob), nrm,
|
||||
grn, nrm, cyn, GET_MANA(mob), nrm,
|
||||
grn, nrm, cyn, GET_MOVE(mob), nrm,
|
||||
grn, nrm, cyn, GET_AC(mob), nrm,
|
||||
grn, nrm, cyn, GET_EXP(mob), nrm,
|
||||
grn, nrm, cyn, GET_GOLD(mob), nrm
|
||||
grn, nrm, yel, GET_DDESC(mob)
|
||||
);
|
||||
|
||||
sprintbitarray(MOB_FLAGS(mob), action_bits, AF_ARRAY_MAX, flags);
|
||||
sprintbitarray(AFF_FLAGS(mob), affected_bits, AF_ARRAY_MAX, flag2);
|
||||
write_to_output(d,
|
||||
"%sI%s) Position : %s%s\r\n"
|
||||
"%sJ%s) Default : %s%s\r\n"
|
||||
"%sK%s) Attack : %s%s\r\n"
|
||||
"%sL%s) NPC Flags : %s%s\r\n"
|
||||
"%sM%s) AFF Flags : %s%s\r\n"
|
||||
"%s6%s) Position : %s%s\r\n"
|
||||
"%s7%s) Default : %s%s\r\n"
|
||||
"%s8%s) Attack : %s%s\r\n"
|
||||
"%s9%s) Stats Menu...\r\n"
|
||||
"%sA%s) NPC Flags : %s%s\r\n"
|
||||
"%sB%s) AFF Flags : %s%s\r\n"
|
||||
"%sS%s) Script : %s%s\r\n"
|
||||
"%sW%s) Copy mob\r\n"
|
||||
"%sX%s) Delete mob\r\n"
|
||||
|
|
@ -422,6 +412,7 @@ static void medit_disp_menu(struct descriptor_data *d)
|
|||
grn, nrm, yel, position_types[(int)GET_POS(mob)],
|
||||
grn, nrm, yel, position_types[(int)GET_DEFAULT_POS(mob)],
|
||||
grn, nrm, yel, attack_hit_text[(int)GET_ATTACK(mob)].singular,
|
||||
grn, nrm,
|
||||
grn, nrm, cyn, flags,
|
||||
grn, nrm, cyn, flag2,
|
||||
grn, nrm, cyn, OLC_SCRIPT(d) ?"Set.":"Not Set.",
|
||||
|
|
@ -433,6 +424,71 @@ static void medit_disp_menu(struct descriptor_data *d)
|
|||
OLC_MODE(d) = MEDIT_MAIN_MENU;
|
||||
}
|
||||
|
||||
/* Display main menu. */
|
||||
static void medit_disp_stats_menu(struct descriptor_data *d)
|
||||
{
|
||||
struct char_data *mob;
|
||||
char buf[MAX_STRING_LENGTH];
|
||||
|
||||
mob = OLC_MOB(d);
|
||||
get_char_colors(d->character);
|
||||
clear_screen(d);
|
||||
|
||||
/* Color codes have to be used here, for count_color_codes to work */
|
||||
sprintf(buf, "(range @y%d@n to @y%d@n)", GET_HIT(mob) + GET_MOVE(mob), (GET_HIT(mob) * GET_MANA(mob)) + GET_MOVE(mob));
|
||||
|
||||
/* Top section - standard stats */
|
||||
write_to_output(d,
|
||||
"-- Mob Number: %s[%s%d%s]%s\r\n"
|
||||
"(%s1%s) Level: %s[%s%4d%s]%s\r\n"
|
||||
"(%s2%s) %sAuto Set Stats (based on level)%s\r\n\r\n"
|
||||
"Hit Points (xdy+z): Bare Hand Damage (xdy+z): \r\n"
|
||||
"(%s3%s) HP NumDice: %s[%s%5d%s]%s (%s6%s) BHD NumDice: %s[%s%5d%s]%s\r\n"
|
||||
"(%s4%s) HP SizeDice: %s[%s%5d%s]%s (%s7%s) BHD SizeDice: %s[%s%5d%s]%s\r\n"
|
||||
"(%s5%s) HP Addition: %s[%s%5d%s]%s (%s8%s) DamRoll: %s[%s%5d%s]%s\r\n"
|
||||
"%-*s(range %s%d%s to %s%d%s)\r\n\r\n"
|
||||
|
||||
"(%sA%s) Armor Class: %s[%s%4d%s]%s (%sD%s) Hitroll: %s[%s%5d%s]%s\r\n"
|
||||
"(%sB%s) Exp Points: %s[%s%10d%s]%s (%sE%s) Alignment: %s[%s%5d%s]%s\r\n"
|
||||
"(%sC%s) Gold: %s[%s%10d%s]%s\r\n\r\n",
|
||||
cyn, yel, OLC_NUM(d), cyn, nrm,
|
||||
cyn, nrm, cyn, yel, GET_LEVEL(mob), cyn, nrm,
|
||||
cyn, nrm, cyn, nrm,
|
||||
cyn, nrm, cyn, yel, GET_HIT(mob), cyn, nrm, cyn, nrm, cyn, yel, GET_NDD(mob), cyn, nrm,
|
||||
cyn, nrm, cyn, yel, GET_MANA(mob), cyn, nrm, cyn, nrm, cyn, yel, GET_SDD(mob), cyn, nrm,
|
||||
cyn, nrm, cyn, yel, GET_MOVE(mob), cyn, nrm, cyn, nrm, cyn, yel, GET_DAMROLL(mob), cyn, nrm,
|
||||
|
||||
count_color_chars(buf)+28, buf,
|
||||
yel, GET_NDD(mob) + GET_DAMROLL(mob), nrm,
|
||||
yel, (GET_NDD(mob) * GET_SDD(mob)) + GET_DAMROLL(mob), nrm,
|
||||
|
||||
cyn, nrm, cyn, yel, GET_AC(mob), cyn, nrm, cyn, nrm, cyn, yel, GET_HITROLL(mob), cyn, nrm,
|
||||
cyn, nrm, cyn, yel, GET_EXP(mob), cyn, nrm, cyn, nrm, cyn, yel, GET_ALIGNMENT(mob), cyn, nrm,
|
||||
cyn, nrm, cyn, yel, GET_GOLD(mob), cyn, nrm
|
||||
);
|
||||
|
||||
/* Bottom section - non-standard stats, togglable in cedit */
|
||||
write_to_output(d,
|
||||
"(%sF%s) Str: %s[%s%2d/%3d%s]%s Saving Throws\r\n"
|
||||
"(%sG%s) Int: %s[%s%3d%s]%s (%sL%s) Paralysis %s[%s%3d%s]%s\r\n"
|
||||
"(%sH%s) Wis: %s[%s%3d%s]%s (%sM%s) Rods/Staves %s[%s%3d%s]%s\r\n"
|
||||
"(%sI%s) Dex: %s[%s%3d%s]%s (%sN%s) Petrification %s[%s%3d%s]%s\r\n"
|
||||
"(%sJ%s) Con: %s[%s%3d%s]%s (%sO%s) Breath %s[%s%3d%s]%s\r\n"
|
||||
"(%sK%s) Cha: %s[%s%3d%s]%s (%sP%s) Spells %s[%s%3d%s]%s\r\n\r\n",
|
||||
cyn, nrm, cyn, yel, GET_STR(mob), GET_ADD(mob), cyn, nrm,
|
||||
cyn, nrm, cyn, yel, GET_INT(mob), cyn, nrm, cyn, nrm, cyn, yel, GET_SAVE(mob, SAVING_PARA), cyn, nrm,
|
||||
cyn, nrm, cyn, yel, GET_WIS(mob), cyn, nrm, cyn, nrm, cyn, yel, GET_SAVE(mob, SAVING_ROD), cyn, nrm,
|
||||
cyn, nrm, cyn, yel, GET_DEX(mob), cyn, nrm, cyn, nrm, cyn, yel, GET_SAVE(mob, SAVING_PETRI), cyn, nrm,
|
||||
cyn, nrm, cyn, yel, GET_CON(mob), cyn, nrm, cyn, nrm, cyn, yel, GET_SAVE(mob, SAVING_BREATH), cyn, nrm,
|
||||
cyn, nrm, cyn, yel, GET_CHA(mob), cyn, nrm, cyn, nrm, cyn, yel, GET_SAVE(mob, SAVING_SPELL), cyn, nrm
|
||||
);
|
||||
|
||||
/* Quit to previous menu option */
|
||||
write_to_output(d, "(%sQ%s) Quit to main menu\r\nEnter choice : ", cyn, nrm);
|
||||
|
||||
OLC_MODE(d) = MEDIT_STATS_MENU;
|
||||
}
|
||||
|
||||
void medit_parse(struct descriptor_data *d, char *arg)
|
||||
{
|
||||
int i = -1;
|
||||
|
|
@ -519,83 +575,28 @@ void medit_parse(struct descriptor_data *d, char *arg)
|
|||
OLC_VAL(d) = 1;
|
||||
return;
|
||||
case '6':
|
||||
OLC_MODE(d) = MEDIT_LEVEL;
|
||||
i++;
|
||||
break;
|
||||
case '7':
|
||||
OLC_MODE(d) = MEDIT_ALIGNMENT;
|
||||
i++;
|
||||
break;
|
||||
case '8':
|
||||
OLC_MODE(d) = MEDIT_HITROLL;
|
||||
i++;
|
||||
break;
|
||||
case '9':
|
||||
OLC_MODE(d) = MEDIT_DAMROLL;
|
||||
i++;
|
||||
break;
|
||||
case 'a':
|
||||
case 'A':
|
||||
OLC_MODE(d) = MEDIT_NDD;
|
||||
i++;
|
||||
break;
|
||||
case 'b':
|
||||
case 'B':
|
||||
OLC_MODE(d) = MEDIT_SDD;
|
||||
i++;
|
||||
break;
|
||||
case 'c':
|
||||
case 'C':
|
||||
OLC_MODE(d) = MEDIT_NUM_HP_DICE;
|
||||
i++;
|
||||
break;
|
||||
case 'd':
|
||||
case 'D':
|
||||
OLC_MODE(d) = MEDIT_SIZE_HP_DICE;
|
||||
i++;
|
||||
break;
|
||||
case 'e':
|
||||
case 'E':
|
||||
OLC_MODE(d) = MEDIT_ADD_HP;
|
||||
i++;
|
||||
break;
|
||||
case 'f':
|
||||
case 'F':
|
||||
OLC_MODE(d) = MEDIT_AC;
|
||||
i++;
|
||||
break;
|
||||
case 'g':
|
||||
case 'G':
|
||||
OLC_MODE(d) = MEDIT_EXP;
|
||||
i++;
|
||||
break;
|
||||
case 'h':
|
||||
case 'H':
|
||||
OLC_MODE(d) = MEDIT_GOLD;
|
||||
i++;
|
||||
break;
|
||||
case 'i':
|
||||
case 'I':
|
||||
OLC_MODE(d) = MEDIT_POS;
|
||||
medit_disp_positions(d);
|
||||
return;
|
||||
case 'j':
|
||||
case 'J':
|
||||
case '7':
|
||||
OLC_MODE(d) = MEDIT_DEFAULT_POS;
|
||||
medit_disp_positions(d);
|
||||
return;
|
||||
case 'k':
|
||||
case 'K':
|
||||
case '8':
|
||||
OLC_MODE(d) = MEDIT_ATTACK;
|
||||
medit_disp_attack_types(d);
|
||||
return;
|
||||
case 'l':
|
||||
case 'L':
|
||||
case '9':
|
||||
OLC_MODE(d) = MEDIT_STATS_MENU;
|
||||
medit_disp_stats_menu(d);
|
||||
return;
|
||||
case 'a':
|
||||
case 'A':
|
||||
OLC_MODE(d) = MEDIT_NPC_FLAGS;
|
||||
medit_disp_mob_flags(d);
|
||||
return;
|
||||
case 'm':
|
||||
case 'M':
|
||||
case 'b':
|
||||
case 'B':
|
||||
OLC_MODE(d) = MEDIT_AFF_FLAGS;
|
||||
medit_disp_aff_flags(d);
|
||||
return;
|
||||
|
|
@ -628,6 +629,139 @@ void medit_parse(struct descriptor_data *d, char *arg)
|
|||
write_to_output(d, "Oops...\r\n");
|
||||
return;
|
||||
|
||||
case MEDIT_STATS_MENU:
|
||||
i=0;
|
||||
switch(*arg) {
|
||||
case 'q':
|
||||
case 'Q':
|
||||
medit_disp_menu(d);
|
||||
return;
|
||||
case '1': /* Edit level */
|
||||
OLC_MODE(d) = MEDIT_LEVEL;
|
||||
i++;
|
||||
break;
|
||||
case '2': /* Autoroll stats */
|
||||
medit_autoroll_stats(d);
|
||||
medit_disp_stats_menu(d);
|
||||
return;
|
||||
case '3':
|
||||
OLC_MODE(d) = MEDIT_NUM_HP_DICE;
|
||||
i++;
|
||||
break;
|
||||
case '4':
|
||||
OLC_MODE(d) = MEDIT_SIZE_HP_DICE;
|
||||
i++;
|
||||
break;
|
||||
case '5':
|
||||
OLC_MODE(d) = MEDIT_ADD_HP;
|
||||
i++;
|
||||
break;
|
||||
case '6':
|
||||
OLC_MODE(d) = MEDIT_NDD;
|
||||
i++;
|
||||
break;
|
||||
case '7':
|
||||
OLC_MODE(d) = MEDIT_SDD;
|
||||
i++;
|
||||
break;
|
||||
case '8':
|
||||
OLC_MODE(d) = MEDIT_DAMROLL;
|
||||
i++;
|
||||
break;
|
||||
case 'a':
|
||||
case 'A':
|
||||
OLC_MODE(d) = MEDIT_AC;
|
||||
i++;
|
||||
break;
|
||||
case 'b':
|
||||
case 'B':
|
||||
OLC_MODE(d) = MEDIT_EXP;
|
||||
i++;
|
||||
break;
|
||||
case 'c':
|
||||
case 'C':
|
||||
OLC_MODE(d) = MEDIT_GOLD;
|
||||
i++;
|
||||
break;
|
||||
case 'd':
|
||||
case 'D':
|
||||
OLC_MODE(d) = MEDIT_HITROLL;
|
||||
i++;
|
||||
break;
|
||||
case 'e':
|
||||
case 'E':
|
||||
OLC_MODE(d) = MEDIT_ALIGNMENT;
|
||||
i++;
|
||||
break;
|
||||
case 'f':
|
||||
case 'F':
|
||||
OLC_MODE(d) = MEDIT_STR;
|
||||
i++;
|
||||
break;
|
||||
case 'g':
|
||||
case 'G':
|
||||
OLC_MODE(d) = MEDIT_INT;
|
||||
i++;
|
||||
break;
|
||||
case 'h':
|
||||
case 'H':
|
||||
OLC_MODE(d) = MEDIT_WIS;
|
||||
i++;
|
||||
break;
|
||||
case 'i':
|
||||
case 'I':
|
||||
OLC_MODE(d) = MEDIT_DEX;
|
||||
i++;
|
||||
break;
|
||||
case 'j':
|
||||
case 'J':
|
||||
OLC_MODE(d) = MEDIT_CON;
|
||||
i++;
|
||||
break;
|
||||
case 'k':
|
||||
case 'K':
|
||||
OLC_MODE(d) = MEDIT_CHA;
|
||||
i++;
|
||||
break;
|
||||
case 'l':
|
||||
case 'L':
|
||||
OLC_MODE(d) = MEDIT_PARA;
|
||||
i++;
|
||||
break;
|
||||
case 'm':
|
||||
case 'M':
|
||||
OLC_MODE(d) = MEDIT_ROD;
|
||||
i++;
|
||||
break;
|
||||
case 'n':
|
||||
case 'N':
|
||||
OLC_MODE(d) = MEDIT_PETRI;
|
||||
i++;
|
||||
break;
|
||||
case 'o':
|
||||
case 'O':
|
||||
OLC_MODE(d) = MEDIT_BREATH;
|
||||
i++;
|
||||
break;
|
||||
case 'p':
|
||||
case 'P':
|
||||
OLC_MODE(d) = MEDIT_SPELL;
|
||||
i++;
|
||||
break;
|
||||
default:
|
||||
medit_disp_stats_menu(d);
|
||||
return;
|
||||
}
|
||||
if (i == 0)
|
||||
break;
|
||||
else if (i == 1)
|
||||
write_to_output(d, "\r\nEnter new value : ");
|
||||
else if (i == -1)
|
||||
write_to_output(d, "\r\nEnter new text :\r\n] ");
|
||||
else
|
||||
write_to_output(d, "Oops...\r\n");
|
||||
return;
|
||||
|
||||
case OLC_SCRIPT_EDIT:
|
||||
if (dg_script_edit_parse(d, arg)) return;
|
||||
break;
|
||||
|
|
@ -694,47 +828,134 @@ void medit_parse(struct descriptor_data *d, char *arg)
|
|||
|
||||
case MEDIT_SEX:
|
||||
GET_SEX(OLC_MOB(d)) = LIMIT(i, 0, NUM_GENDERS - 1);
|
||||
break;
|
||||
medit_disp_stats_menu(d);
|
||||
return;
|
||||
|
||||
case MEDIT_HITROLL:
|
||||
GET_HITROLL(OLC_MOB(d)) = LIMIT(i, 0, 50);
|
||||
break;
|
||||
OLC_VAL(d) = TRUE;
|
||||
medit_disp_stats_menu(d);
|
||||
return;
|
||||
|
||||
case MEDIT_DAMROLL:
|
||||
GET_DAMROLL(OLC_MOB(d)) = LIMIT(i, 0, 50);
|
||||
break;
|
||||
OLC_VAL(d) = TRUE;
|
||||
medit_disp_stats_menu(d);
|
||||
return;
|
||||
|
||||
case MEDIT_NDD:
|
||||
GET_NDD(OLC_MOB(d)) = LIMIT(i, 0, 30);
|
||||
break;
|
||||
OLC_VAL(d) = TRUE;
|
||||
medit_disp_stats_menu(d);
|
||||
return;
|
||||
|
||||
case MEDIT_SDD:
|
||||
GET_SDD(OLC_MOB(d)) = LIMIT(i, 0, 127);
|
||||
break;
|
||||
OLC_VAL(d) = TRUE;
|
||||
medit_disp_stats_menu(d);
|
||||
return;
|
||||
|
||||
case MEDIT_NUM_HP_DICE:
|
||||
GET_HIT(OLC_MOB(d)) = LIMIT(i, 0, 30);
|
||||
break;
|
||||
OLC_VAL(d) = TRUE;
|
||||
medit_disp_stats_menu(d);
|
||||
return;
|
||||
|
||||
case MEDIT_SIZE_HP_DICE:
|
||||
GET_MANA(OLC_MOB(d)) = LIMIT(i, 0, 1000);
|
||||
break;
|
||||
OLC_VAL(d) = TRUE;
|
||||
medit_disp_stats_menu(d);
|
||||
return;
|
||||
|
||||
case MEDIT_ADD_HP:
|
||||
GET_MOVE(OLC_MOB(d)) = LIMIT(i, 0, 30000);
|
||||
break;
|
||||
OLC_VAL(d) = TRUE;
|
||||
medit_disp_stats_menu(d);
|
||||
return;
|
||||
|
||||
case MEDIT_AC:
|
||||
GET_AC(OLC_MOB(d)) = LIMIT(i, -200, 200);
|
||||
break;
|
||||
OLC_VAL(d) = TRUE;
|
||||
medit_disp_stats_menu(d);
|
||||
return;
|
||||
|
||||
case MEDIT_EXP:
|
||||
GET_EXP(OLC_MOB(d)) = LIMIT(i, 0, MAX_MOB_EXP);
|
||||
break;
|
||||
OLC_VAL(d) = TRUE;
|
||||
medit_disp_stats_menu(d);
|
||||
return;
|
||||
|
||||
case MEDIT_GOLD:
|
||||
GET_GOLD(OLC_MOB(d)) = LIMIT(i, 0, MAX_MOB_GOLD);
|
||||
break;
|
||||
OLC_VAL(d) = TRUE;
|
||||
medit_disp_stats_menu(d);
|
||||
return;
|
||||
|
||||
case MEDIT_STR:
|
||||
GET_STR(OLC_MOB(d)) = LIMIT(i, 11, 25);
|
||||
OLC_VAL(d) = TRUE;
|
||||
medit_disp_stats_menu(d);
|
||||
return;
|
||||
|
||||
case MEDIT_INT:
|
||||
GET_INT(OLC_MOB(d)) = LIMIT(i, 11, 25);
|
||||
OLC_VAL(d) = TRUE;
|
||||
medit_disp_stats_menu(d);
|
||||
return;
|
||||
|
||||
case MEDIT_WIS:
|
||||
GET_WIS(OLC_MOB(d)) = LIMIT(i, 11, 25);
|
||||
OLC_VAL(d) = TRUE;
|
||||
medit_disp_stats_menu(d);
|
||||
return;
|
||||
|
||||
case MEDIT_DEX:
|
||||
GET_DEX(OLC_MOB(d)) = LIMIT(i, 11, 25);
|
||||
OLC_VAL(d) = TRUE;
|
||||
medit_disp_stats_menu(d);
|
||||
return;
|
||||
|
||||
case MEDIT_CON:
|
||||
GET_CON(OLC_MOB(d)) = LIMIT(i, 11, 25);
|
||||
OLC_VAL(d) = TRUE;
|
||||
medit_disp_stats_menu(d);
|
||||
return;
|
||||
|
||||
case MEDIT_CHA:
|
||||
GET_CHA(OLC_MOB(d)) = LIMIT(i, 11, 25);
|
||||
OLC_VAL(d) = TRUE;
|
||||
medit_disp_stats_menu(d);
|
||||
return;
|
||||
|
||||
case MEDIT_PARA:
|
||||
GET_SAVE(OLC_MOB(d), SAVING_PARA) = LIMIT(i, 0, 100);
|
||||
OLC_VAL(d) = TRUE;
|
||||
medit_disp_stats_menu(d);
|
||||
return;
|
||||
|
||||
case MEDIT_ROD:
|
||||
GET_SAVE(OLC_MOB(d), SAVING_ROD) = LIMIT(i, 0, 100);
|
||||
OLC_VAL(d) = TRUE;
|
||||
medit_disp_stats_menu(d);
|
||||
return;
|
||||
|
||||
case MEDIT_PETRI:
|
||||
GET_SAVE(OLC_MOB(d), SAVING_PETRI) = LIMIT(i, 0, 100);
|
||||
OLC_VAL(d) = TRUE;
|
||||
medit_disp_stats_menu(d);
|
||||
return;
|
||||
|
||||
case MEDIT_BREATH:
|
||||
GET_SAVE(OLC_MOB(d), SAVING_BREATH) = LIMIT(i, 0, 100);
|
||||
OLC_VAL(d) = TRUE;
|
||||
medit_disp_stats_menu(d);
|
||||
return;
|
||||
|
||||
case MEDIT_SPELL:
|
||||
GET_SAVE(OLC_MOB(d), SAVING_SPELL) = LIMIT(i, 0, 100);
|
||||
OLC_VAL(d) = TRUE;
|
||||
medit_disp_stats_menu(d);
|
||||
return;
|
||||
|
||||
case MEDIT_POS:
|
||||
GET_POS(OLC_MOB(d)) = LIMIT(i, 0, NUM_POSITIONS - 1);
|
||||
|
|
@ -749,22 +970,10 @@ void medit_parse(struct descriptor_data *d, char *arg)
|
|||
break;
|
||||
|
||||
case MEDIT_LEVEL:
|
||||
GET_LEVEL(OLC_MOB(d)) = LIMIT(i, 1, 34);
|
||||
{
|
||||
int mob_lev = GET_LEVEL(OLC_MOB(d));
|
||||
|
||||
GET_MOVE(OLC_MOB(d)) = mob_lev*10; /* hit point bonus */
|
||||
GET_HIT(OLC_MOB(d)) = mob_lev/5; /* number of hitpoint dice */
|
||||
GET_MANA(OLC_MOB(d)) = mob_lev/5; /* size of hitpoint dice */
|
||||
GET_HITROLL(OLC_MOB(d)) = mob_lev/3; /* hitroll 0-10 */
|
||||
GET_DAMROLL(OLC_MOB(d)) = mob_lev/6; /* damroll 0-5 */
|
||||
GET_AC(OLC_MOB(d)) = (100-(mob_lev*6)); /* AC 94 to -80 */
|
||||
GET_NDD(OLC_MOB(d)) = MAX(1, mob_lev/6); /* number damage dice 1-5 */
|
||||
GET_SDD(OLC_MOB(d)) = MAX(2, mob_lev/6); /* size of damage dice 2-5 */
|
||||
GET_EXP(OLC_MOB(d)) = (mob_lev*mob_lev*100);
|
||||
GET_GOLD(OLC_MOB(d)) = (mob_lev*10);
|
||||
}
|
||||
break;
|
||||
GET_LEVEL(OLC_MOB(d)) = LIMIT(i, 1, LVL_IMPL);
|
||||
OLC_VAL(d) = TRUE;
|
||||
medit_disp_stats_menu(d);
|
||||
return;
|
||||
|
||||
case MEDIT_ALIGNMENT:
|
||||
GET_ALIGNMENT(OLC_MOB(d)) = LIMIT(i, -1000, 1000);
|
||||
|
|
@ -819,3 +1028,37 @@ void medit_string_cleanup(struct descriptor_data *d, int terminator)
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void medit_autoroll_stats(struct descriptor_data *d)
|
||||
{
|
||||
int mob_lev;
|
||||
|
||||
mob_lev = GET_LEVEL(OLC_MOB(d));
|
||||
mob_lev = GET_LEVEL(OLC_MOB(d)) = LIMIT(mob_lev, 1, LVL_IMPL);
|
||||
|
||||
GET_MOVE(OLC_MOB(d)) = mob_lev*10; /* hit point bonus */
|
||||
GET_HIT(OLC_MOB(d)) = mob_lev/5; /* number of hitpoint dice */
|
||||
GET_MANA(OLC_MOB(d)) = mob_lev/5; /* size of hitpoint dice */
|
||||
|
||||
GET_NDD(OLC_MOB(d)) = MAX(1, mob_lev/6); /* number damage dice 1-5 */
|
||||
GET_SDD(OLC_MOB(d)) = MAX(2, mob_lev/6); /* size of damage dice 2-5 */
|
||||
GET_DAMROLL(OLC_MOB(d)) = mob_lev/6; /* damroll (dam bonus) 0-5 */
|
||||
|
||||
GET_HITROLL(OLC_MOB(d)) = mob_lev/3; /* hitroll 0-10 */
|
||||
GET_EXP(OLC_MOB(d)) = (mob_lev*mob_lev*100);
|
||||
GET_GOLD(OLC_MOB(d)) = (mob_lev*10);
|
||||
GET_AC(OLC_MOB(d)) = (100-(mob_lev*6)); /* AC 94 to -80 */
|
||||
|
||||
GET_STR(OLC_MOB(d)) = LIMIT((mob_lev*2)/3, 11, 18); /* 2/3 level in range 11 to 18 */
|
||||
GET_INT(OLC_MOB(d)) = LIMIT((mob_lev*2)/3, 11, 18);
|
||||
GET_WIS(OLC_MOB(d)) = LIMIT((mob_lev*2)/3, 11, 18);
|
||||
GET_DEX(OLC_MOB(d)) = LIMIT((mob_lev*2)/3, 11, 18);
|
||||
GET_CON(OLC_MOB(d)) = LIMIT((mob_lev*2)/3, 11, 18);
|
||||
GET_CHA(OLC_MOB(d)) = LIMIT((mob_lev*2)/3, 11, 18);
|
||||
|
||||
GET_SAVE(OLC_MOB(d), SAVING_PARA) = mob_lev / 4; /* All Saving throws */
|
||||
GET_SAVE(OLC_MOB(d), SAVING_ROD) = mob_lev / 4; /* set to a quarter */
|
||||
GET_SAVE(OLC_MOB(d), SAVING_PETRI) = mob_lev / 4; /* of the mobs level */
|
||||
GET_SAVE(OLC_MOB(d), SAVING_BREATH) = mob_lev / 4;
|
||||
GET_SAVE(OLC_MOB(d), SAVING_SPELL) = mob_lev / 4;
|
||||
}
|
||||
|
|
|
|||
13
src/oasis.h
13
src/oasis.h
|
|
@ -238,6 +238,7 @@ extern const char *nrm, *grn, *cyn, *yel;
|
|||
#define MEDIT_NPC_FLAGS 5
|
||||
#define MEDIT_AFF_FLAGS 6
|
||||
#define MEDIT_CONFIRM_SAVESTRING 7
|
||||
#define MEDIT_STATS_MENU 8
|
||||
|
||||
/* Numerical responses. */
|
||||
#define MEDIT_NUMERICAL_RESPONSE 10
|
||||
|
|
@ -259,6 +260,17 @@ extern const char *nrm, *grn, *cyn, *yel;
|
|||
#define MEDIT_ALIGNMENT 26
|
||||
#define MEDIT_DELETE 27
|
||||
#define MEDIT_COPY 28
|
||||
#define MEDIT_STR 29
|
||||
#define MEDIT_INT 30
|
||||
#define MEDIT_WIS 31
|
||||
#define MEDIT_DEX 32
|
||||
#define MEDIT_CON 33
|
||||
#define MEDIT_CHA 34
|
||||
#define MEDIT_PARA 35
|
||||
#define MEDIT_ROD 36
|
||||
#define MEDIT_PETRI 37
|
||||
#define MEDIT_BREATH 38
|
||||
#define MEDIT_SPELL 39
|
||||
|
||||
/* Submodes of SEDIT connectedness. */
|
||||
#define SEDIT_MAIN_MENU 0
|
||||
|
|
@ -373,6 +385,7 @@ void medit_save_internally(struct descriptor_data *d);
|
|||
void medit_parse(struct descriptor_data *d, char *arg);
|
||||
void medit_string_cleanup(struct descriptor_data *d, int terminator);
|
||||
ACMD(do_oasis_medit);
|
||||
void medit_autoroll_stats(struct descriptor_data *d);
|
||||
|
||||
/* public functions from oedit.c */
|
||||
void oedit_setup_existing(struct descriptor_data *d, int rnum);
|
||||
|
|
|
|||
|
|
@ -441,7 +441,7 @@ static void list_zones(struct char_data *ch, zone_rnum rnum, zone_vnum vmin, zon
|
|||
void print_zone(struct char_data *ch, zone_vnum vnum)
|
||||
{
|
||||
zone_rnum rnum;
|
||||
int size_rooms, size_objects, size_mobiles, size_quests, i;
|
||||
int size_rooms, size_objects, size_mobiles, size_quests, size_shops, size_trigs, i;
|
||||
room_vnum top, bottom;
|
||||
int largest_table;
|
||||
|
||||
|
|
@ -462,6 +462,8 @@ void print_zone(struct char_data *ch, zone_vnum vnum)
|
|||
size_rooms = 0;
|
||||
size_objects = 0;
|
||||
size_mobiles = 0;
|
||||
size_shops = 0;
|
||||
size_trigs = 0;
|
||||
size_quests = 0;
|
||||
top = zone_table[rnum].top;
|
||||
bottom = zone_table[rnum].bot;
|
||||
|
|
@ -479,6 +481,14 @@ void print_zone(struct char_data *ch, zone_vnum vnum)
|
|||
if (mob_index[i].vnum >= bottom && mob_index[i].vnum <= top)
|
||||
size_mobiles++;
|
||||
}
|
||||
for (i = 0; i<= top_shop; i++)
|
||||
if (SHOP_NUM(i) >= bottom && SHOP_NUM(i) <= top)
|
||||
size_shops++;
|
||||
|
||||
for (i = 0; i < top_of_trigt; i++)
|
||||
if (trig_index[i]->vnum >= bottom && trig_index[i]->vnum <= top)
|
||||
size_trigs++;
|
||||
|
||||
size_quests = count_quests(bottom, top);
|
||||
|
||||
/* Display all of the zone information at once. */
|
||||
|
|
@ -495,6 +505,8 @@ void print_zone(struct char_data *ch, zone_vnum vnum)
|
|||
"%s Rooms = %s%d\r\n"
|
||||
"%s Objects = %s%d\r\n"
|
||||
"%s Mobiles = %s%d\r\n"
|
||||
"%s Shops = %s%d\r\n"
|
||||
"%s Triggers = %s%d\r\n"
|
||||
"%s Quests = %s%d%s\r\n",
|
||||
QGRN, QCYN, zone_table[rnum].number,
|
||||
QGRN, QCYN, zone_table[rnum].name,
|
||||
|
|
@ -509,6 +521,8 @@ void print_zone(struct char_data *ch, zone_vnum vnum)
|
|||
QGRN, QCYN, size_rooms,
|
||||
QGRN, QCYN, size_objects,
|
||||
QGRN, QCYN, size_mobiles,
|
||||
QGRN, QCYN, size_shops,
|
||||
QGRN, QCYN, size_trigs,
|
||||
QGRN, QCYN, size_quests, QNRM);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1285,6 +1285,7 @@ struct game_operation
|
|||
char *MENU; /**< The MAIN MENU. */
|
||||
char *WELC_MESSG; /**< The welcome message. */
|
||||
char *START_MESSG; /**< The start msg for new characters. */
|
||||
int medit_advanced; /**< Does the medit OLC show the advanced stats menu ? */
|
||||
};
|
||||
|
||||
/** The Autowizard options. */
|
||||
|
|
|
|||
|
|
@ -925,6 +925,8 @@ void char_from_furniture(struct char_data *ch);
|
|||
#define CONFIG_WELC_MESSG config_info.operation.WELC_MESSG
|
||||
/** Get the standard new character message. */
|
||||
#define CONFIG_START_MESSG config_info.operation.START_MESSG
|
||||
/** Should medit show the advnaced stats menu? */
|
||||
#define CONFIG_MEDIT_ADVANCED config_info.operation.medit_advanced
|
||||
|
||||
/* Autowiz */
|
||||
/** Use autowiz or not? */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue