OSDN Git Service

鑑定する物がないとき、キャンセル扱いせずに全てのアイテムを選択可能にする。
authormogami <mogami@0568b783-4c39-0410-ac80-bf13821ea2a2>
Thu, 17 Jan 2002 04:29:52 +0000 (04:29 +0000)
committermogami <mogami@0568b783-4c39-0410-ac80-bf13821ea2a2>
Thu, 17 Jan 2002 04:29:52 +0000 (04:29 +0000)
src/externs.h
src/object1.c
src/spells3.c

index 9f2f76c..d6b0806 100644 (file)
@@ -888,6 +888,7 @@ extern void display_equip(void);
 extern int show_inven(int target_item);
 extern int show_equip(int target_item);
 extern void toggle_inven_equip(void);
+extern bool can_get_item(void);
 extern bool get_item(int *cp, cptr pmt, cptr str, int mode);
 extern void excise_object_idx(int o_idx);
 extern void delete_object_idx(int o_idx);
index f23fd87..a1f0e3c 100644 (file)
@@ -4950,7 +4950,24 @@ static int get_tag(int *cp, char tag)
        return (FALSE);
 }
 
+/*
+ * Determine whether get_item() can get some item or not
+ * assuming mode = (USE_EQUIP | USE_INVEN | USE_FLOOR).
+ */
+bool can_get_item(void)
+{
+       int j, floor_list[23], floor_num = 0;
 
+       for (j = 0; j < INVEN_TOTAL; j++)
+               if (item_tester_okay(&inventory[j]))
+                       return TRUE;
+
+       (void)scan_floor(floor_list, &floor_num, py, px, 0x01);
+       if (floor_num)
+               return TRUE;
+
+       return FALSE;
+}
 
 /*
  * Let the user select an item, save its "index"
index b24ee9a..d3e716b 100644 (file)
@@ -2606,6 +2606,18 @@ bool ident_spell(bool only_equip)
        else
                item_tester_hook = item_tester_hook_identify;
 
+       if (!can_get_item())
+       {
+               if (only_equip)
+               {
+                       item_tester_hook = item_tester_hook_weapon_armour;
+               }
+               else
+               {
+                       item_tester_hook = NULL;
+               }
+       }
+
        /* Get an item */
 #ifdef JP
 q = "¤É¤Î¥¢¥¤¥Æ¥à¤ò´ÕÄꤷ¤Þ¤¹¤«? ";
@@ -2768,6 +2780,14 @@ bool identify_fully(bool only_equip)
        else
                item_tester_hook = item_tester_hook_identify_fully;
 
+       if (!can_get_item())
+       {
+               if (only_equip)
+                       item_tester_hook = item_tester_hook_weapon_armour;
+               else
+                       item_tester_hook = NULL;
+       }
+
        /* Get an item */
 #ifdef JP
 q = "¤É¤Î¥¢¥¤¥Æ¥à¤ò´ÕÄꤷ¤Þ¤¹¤«? ";