blank perm_invent after repeating spell cast

add mechanics to ensure display_inventory() refreshes perm_invent as
expected when update_inventory() is called from a repeat command.

Resolves #1454
This commit is contained in:
nhmall
2025-11-06 01:34:52 -05:00
parent 58c7d2fb3e
commit 7763f4c5b0
2 changed files with 4 additions and 1 deletions

View File

@@ -799,6 +799,7 @@ struct sinfo {
int in_role_selection; /* role/race/&c selection menus in progress */
int in_getlin; /* inside interface getlin routine */
int in_sanity_check; /* for impossible() during sanity checking */
int in_update_inventory; /* inside update_inventory() function */
int config_error_ready; /* config_error_add is ready, available */
int beyond_savefile_load; /* set when past savefile loading */
int savefile_completed; /* savefile has completed writing */

View File

@@ -2703,10 +2703,12 @@ update_inventory(void)
* attempt in the shop code handled it for unpaid items but not for
* paying for used-up shop items; that follows a different code path.)
*/
program_state.in_update_inventory = TRUE;
save_suppress_price = iflags.suppress_price;
iflags.suppress_price = 0;
(*windowprocs.win_update_inventory)(0);
iflags.suppress_price = save_suppress_price;
program_state.in_update_inventory = FALSE;
}
/* the #perminv command - call interface's persistent inventory routine */
@@ -4024,7 +4026,7 @@ display_inventory(const char *lets, boolean want_reply)
{
struct _cmd_queue *cmdq = cmdq_pop();
if (cmdq) {
if (cmdq && !program_state.in_update_inventory) {
if (cmdq->typ == CMDQ_KEY) {
struct obj *otmp;