OSDN Git Service

[Refactor] #39963 Separated spells-type.h from spells.h
[hengband/hengband.git] / src / cmd / cmd-zapwand.c
index 34d7e5f..3b50ff5 100644 (file)
@@ -1,19 +1,20 @@
 #include "angband.h"
 #include "util.h"
+#include "main/sound-definitions-table.h"
 
 #include "avatar.h"
-#include "spells.h"
+#include "spell/spells-type.h"
 #include "spells-status.h"
 #include "player-status.h"
 #include "player-effects.h"
 #include "player-class.h"
 #include "player-inventory.h"
-#include "objectkind.h"
+#include "object/object-kind.h"
 #include "object-hook.h"
 #include "cmd-basic.h"
 #include "floor.h"
 #include "targeting.h"
-#include "view-mainwindow.h"
+#include "view/display-main-window.h"
 
 /*!
 * @brief 魔法棒の効果を発動する
@@ -404,7 +405,14 @@ void exe_aim_wand(player_type *creature_ptr, INVENTORY_IDX item)
        sound(SOUND_ZAP);
 
        ident = wand_effect(creature_ptr, o_ptr->sval, dir, FALSE, FALSE);
-       creature_ptr->update |= (PU_COMBINE | PU_REORDER);
+       
+       /*
+        * Temporarily remove the flags for updating the inventory so
+        * gain_exp() does not reorder the inventory before the charge
+        * is deducted from the wand.
+        */
+       BIT_FLAGS inventory_flags = (PU_COMBINE | PU_REORDER | (creature_ptr->update & PU_AUTODESTROY));
+       creature_ptr->update &= ~(PU_COMBINE | PU_REORDER | PU_AUTODESTROY);
 
        if (!(object_is_aware(o_ptr)))
        {
@@ -424,6 +432,7 @@ void exe_aim_wand(player_type *creature_ptr, INVENTORY_IDX item)
        }
 
        creature_ptr->window |= (PW_INVEN | PW_EQUIP | PW_PLAYER);
+       creature_ptr->update |= inventory_flags;
 
        /* Use a single charge */
        o_ptr->pval--;