OSDN Git Service

[Fix] #41308 一定条件下で無を選択する不具合を修正
authordis- <dis.rogue@gmail.com>
Fri, 22 Jan 2021 08:51:16 +0000 (17:51 +0900)
committerdis- <dis.rogue@gmail.com>
Fri, 22 Jan 2021 08:51:16 +0000 (17:51 +0900)
タグを使用してアイテムを選択しているとき、コマンド繰り返しの挙動が正しくなかった。

個数0のときの条件を貫通していたので、該当の条件節を訂正。

src/inventory/floor-item-getter.c
src/inventory/item-getter.c

index a26391c..2de6f36 100644 (file)
@@ -80,8 +80,18 @@ static bool get_floor_item_tag_inventory(player_type *owner_ptr, fis_type *fis_p
     if ((*prev_tag == '\0') || !command_cmd)
         return FALSE;
 
-    if (!get_tag(owner_ptr, &fis_ptr->k, *prev_tag, (*fis_ptr->cp >= INVEN_RARM) ? USE_EQUIP : USE_INVEN, fis_ptr->tval)
-        || ((fis_ptr->k < INVEN_RARM) ? !fis_ptr->inven : !fis_ptr->equip) || !get_item_okay(owner_ptr, fis_ptr->k, fis_ptr->tval)) {
+    bool flag = FALSE;
+    item_use_flag use_flag = (*fis_ptr->cp >= INVEN_RARM) ? USE_EQUIP : USE_INVEN;
+
+    flag |= !get_tag(owner_ptr, &fis_ptr->k, *prev_tag, use_flag, fis_ptr->tval);
+    flag |= !get_item_okay(owner_ptr, fis_ptr->k, fis_ptr->tval);
+
+    if (fis_ptr->k < INVEN_RARM)
+        flag |= !fis_ptr->inven;
+    else
+        flag |= !fis_ptr->equip;
+
+    if (!flag) {
         *prev_tag = '\0';
         return FALSE;
     }
index b528147..63923aa 100644 (file)
@@ -81,10 +81,19 @@ static bool check_item_tag_inventory(player_type *owner_ptr, item_selection_type
         return FALSE;
 
     if (*prev_tag && command_cmd) {
-        if (!get_tag(owner_ptr, &item_selection_ptr->k, *prev_tag, (*item_selection_ptr->cp >= INVEN_RARM) ? USE_EQUIP : USE_INVEN, item_selection_ptr->tval)
-                    || (item_selection_ptr->k < INVEN_RARM)
-                ? !item_selection_ptr->inven
-                : !item_selection_ptr->equip || !get_item_okay(owner_ptr, item_selection_ptr->k, item_selection_ptr->tval)) {
+        
+        bool flag = FALSE;
+        item_use_flag use_flag = (*item_selection_ptr->cp >= INVEN_RARM) ? USE_EQUIP : USE_INVEN;
+
+        flag |= !get_tag(owner_ptr, &item_selection_ptr->k, *prev_tag, use_flag, item_selection_ptr->tval);
+        flag |= !get_item_okay(owner_ptr, item_selection_ptr->k, item_selection_ptr->tval);
+
+        if (item_selection_ptr->k < INVEN_RARM)
+            flag |= !item_selection_ptr->inven;
+        else
+            flag |= !item_selection_ptr->equip;
+
+        if (flag) {
             *prev_tag = '\0';
             return FALSE;
         }