From 6a743b5276de61b2b7fbbff7fa2242a5f484fee2 Mon Sep 17 00:00:00 2001 From: kinther Date: Sun, 14 Dec 2025 14:34:26 -0800 Subject: [PATCH] Level 1 limitation for NPC's addition --- src/db.c | 4 +++- src/dg_variables.c | 6 +++++- src/limits.c | 30 +++++------------------------- src/medit.c | 8 +++++--- 4 files changed, 18 insertions(+), 30 deletions(-) diff --git a/src/db.c b/src/db.c index 16e427d..f7381c6 100644 --- a/src/db.c +++ b/src/db.c @@ -1559,7 +1559,9 @@ static void parse_simple_mob(FILE *mob_f, int i, int nr) exit(1); } - GET_LEVEL(mob_proto + i) = t[0]; + if (t[0] != 1) + log("INFO: Forcing mob #%d level from %d to 1 per level lock.", nr, t[0]); + GET_LEVEL(mob_proto + i) = 1; /* max hit = 0 is a flag that H, M, V is xdy+z */ GET_MAX_HIT(mob_proto + i) = 0; diff --git a/src/dg_variables.c b/src/dg_variables.c index cb1a075..a12dd5a 100644 --- a/src/dg_variables.c +++ b/src/dg_variables.c @@ -830,7 +830,11 @@ void find_replacement(void *go, struct script_data *sc, trig_data *trig, if (!str_cmp(field, "level")) { if (subfield && *subfield) { int lev = atoi(subfield); - GET_LEVEL(c) = MIN(MAX(lev, 0), LVL_IMMORT-1); + if (IS_NPC(c)) { + if (GET_LEVEL(c) != 1) + GET_LEVEL(c) = 1; + } else + GET_LEVEL(c) = MIN(MAX(lev, 1), LVL_IMPL); } else snprintf(str, slen, "%d", GET_LEVEL(c)); } diff --git a/src/limits.c b/src/limits.c index 15c1e4f..18af7c7 100644 --- a/src/limits.c +++ b/src/limits.c @@ -271,9 +271,6 @@ void gain_skill(struct char_data *ch, char *skill, bool success) void gain_exp(struct char_data *ch, int gain) { - int is_altered = FALSE; - int num_levels = 0; - if (!IS_NPC(ch) && ((GET_LEVEL(ch) < 1 || GET_LEVEL(ch) >= LVL_IMMORT))) return; @@ -281,37 +278,20 @@ void gain_exp(struct char_data *ch, int gain) GET_EXP(ch) += gain; return; } + if (gain > 0) { - - gain = MIN(CONFIG_MAX_EXP_GAIN, gain); /* put a cap on the max gain per kill */ + gain = MIN(CONFIG_MAX_EXP_GAIN, gain); /* cap max gain per kill */ GET_EXP(ch) += gain; - while (GET_LEVEL(ch) < LVL_IMMORT - CONFIG_NO_MORT_TO_IMMORT && - GET_EXP(ch) >= level_exp(GET_CLASS(ch), GET_LEVEL(ch) + 1)) { - GET_LEVEL(ch) += 1; - num_levels++; - advance_level(ch); - is_altered = TRUE; - } - - if (is_altered) { - mudlog(BRF, MAX(LVL_IMMORT, GET_INVIS_LEV(ch)), TRUE, "%s advanced %d level%s to level %d.", - GET_NAME(ch), num_levels, num_levels == 1 ? "" : "s", GET_LEVEL(ch)); - if (num_levels == 1) - send_to_char(ch, "You rise a level!\r\n"); - else - send_to_char(ch, "You rise %d levels!\r\n", num_levels); - if (GET_LEVEL(ch) >= LVL_IMMORT && !PLR_FLAGGED(ch, PLR_NOWIZLIST)) - run_autowiz(); - } } else if (gain < 0) { - gain = MAX(-CONFIG_MAX_EXP_LOSS, gain); /* Cap max exp lost per death */ + gain = MAX(-CONFIG_MAX_EXP_LOSS, gain); /* cap max loss per death */ GET_EXP(ch) += gain; if (GET_EXP(ch) < 0) GET_EXP(ch) = 0; } + if (GET_LEVEL(ch) >= LVL_IMMORT && !PLR_FLAGGED(ch, PLR_NOWIZLIST)) run_autowiz(); - } +} void gain_exp_regardless(struct char_data *ch, int gain) { diff --git a/src/medit.c b/src/medit.c index 76e7a09..49a26c2 100644 --- a/src/medit.c +++ b/src/medit.c @@ -1148,7 +1148,9 @@ void medit_parse(struct descriptor_data *d, char *arg) break; case MEDIT_LEVEL: - GET_LEVEL(OLC_MOB(d)) = LIMIT(i, 1, LVL_IMPL); + if (i != 1) + write_to_output(d, "Mobile levels are locked to 1 in this world; ignoring value.\r\n"); + GET_LEVEL(OLC_MOB(d)) = 1; OLC_VAL(d) = TRUE; medit_disp_stats_menu(d); return; @@ -1214,8 +1216,8 @@ 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); + mob_lev = 1; + GET_LEVEL(OLC_MOB(d)) = 1; GET_MOVE(OLC_MOB(d)) = mob_lev * 10; /* hit point bonus (mobs don't use movement points) */ GET_HIT(OLC_MOB(d)) = mob_lev / 5; /* number of hitpoint dice */