OSDN Git Service

[Refactor] #40233 Separated service-checker.c/h from store-util.c/h
authorHourier <hourier@users.sourceforge.jp>
Fri, 17 Jul 2020 14:25:23 +0000 (23:25 +0900)
committerHourier <hourier@users.sourceforge.jp>
Fri, 17 Jul 2020 14:25:23 +0000 (23:25 +0900)
Hengband/Hengband/Hengband.vcxproj
Hengband/Hengband/Hengband.vcxproj.filters
src/Makefile.am
src/player/process-death.c
src/store/museum.c
src/store/sell-order.c
src/store/service-checker.c [new file with mode: 0644]
src/store/service-checker.h [new file with mode: 0644]
src/store/store-util.c
src/store/store-util.h
src/store/store.c

index 00b0969..8156be3 100644 (file)
     <ClCompile Include="..\..\src\store\pricing.c" />\r
     <ClCompile Include="..\..\src\store\purchase-order.c" />\r
     <ClCompile Include="..\..\src\store\sell-order.c" />\r
+    <ClCompile Include="..\..\src\store\service-checker.c" />\r
     <ClCompile Include="..\..\src\view\display-inventory.c" />\r
     <ClCompile Include="..\..\src\view\display-map.c" />\r
     <ClCompile Include="..\..\src\window\display-sub-window-items.c" />\r
     <ClInclude Include="..\..\src\store\pricing.h" />\r
     <ClInclude Include="..\..\src\store\purchase-order.h" />\r
     <ClInclude Include="..\..\src\store\sell-order.h" />\r
+    <ClInclude Include="..\..\src\store\service-checker.h" />\r
     <ClInclude Include="..\..\src\system\alloc-entries.h" />\r
     <ClInclude Include="..\..\src\term\screen-processor.h" />\r
     <ClInclude Include="..\..\src\util\bit-flags-calculator.h" />\r
index 850a841..a6c4405 100644 (file)
     <ClCompile Include="..\..\src\store\pricing.c">
       <Filter>store</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\store\service-checker.c">
+      <Filter>store</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\src\combat\shoot.h">
     <ClInclude Include="..\..\src\store\pricing.h">
       <Filter>store</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\src\store\service-checker.h">
+      <Filter>store</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <None Include="..\..\src\wall.bmp" />
index 4bcbacb..c5302f0 100644 (file)
@@ -656,6 +656,7 @@ hengband_SOURCES = \
        store/rumor.c store/rumor.h \
        store/say-comments.c store/say-comments.h \
        store/sell-order.c store/sell-order.h \
+       store/service-checker.c store/service-checker.h \
        store/store-util.c store/store-util.h \
        store/store-owners.c store/store-owners.h \
        store/store-owner-comments.c store/store-owner-comments.h \
index 06e298d..6131e12 100644 (file)
@@ -20,6 +20,7 @@
 #include "player/player-class.h"
 #include "store/store-util.h"
 #include "store/store.h"
+#include "system/object-type-definition.h"
 #include "term/gameterm.h"
 #include "term/screen-processor.h"
 #include "util/buffer-shaper.h"
index 3f56aa1..ce3a5ad 100644 (file)
@@ -1,10 +1,11 @@
 #include "store/museum.h"
-#include "store/store.h"
-#include "store/store-util.h"
-#include "view/display-messages.h"
-#include "flavor/flavor-describer.h"
 #include "core/asking-player.h"
+#include "flavor/flavor-describer.h"
 #include "store/home.h"
+#include "store/store-util.h"
+#include "store/store.h"
+#include "system/object-type-definition.h"
+#include "view/display-messages.h"
 #include "view/display-store.h"
 
 /*!
index 8866490..caff403 100644 (file)
 #include "store/owner-insults.h"
 #include "store/pricing.h"
 #include "store/say-comments.h"
+#include "store/service-checker.h"
 #include "store/store-util.h"
 #include "store/store.h"
+#include "system/object-type-definition.h"
 #include "term/screen-processor.h"
 #include "view/display-messages.h"
 #include "view/display-store.h"
diff --git a/src/store/service-checker.c b/src/store/service-checker.c
new file mode 100644 (file)
index 0000000..b5a64de
--- /dev/null
@@ -0,0 +1,206 @@
+#include "store/service-checker.h"
+#include "monster-race/monster-race.h"
+#include "monster-race/race-flags3.h"
+#include "object-enchant/tr-types.h"
+#include "object/object-flags.h"
+#include "object/object-value.h"
+#include "store/store-util.h"
+#include "sv-definition/sv-potion-types.h"
+#include "sv-definition/sv-weapon-types.h"
+#include "system/object-type-definition.h"
+#include "util/bit-flags-calculator.h"
+#include "util/string-processor.h"
+
+/*!
+ * @brief オブジェクトが祝福されているかの判定を返す /
+ * @param o_ptr 判定したいオブジェクト構造体の参照ポインタ
+ * @return アイテムが祝福されたアイテムならばTRUEを返す
+ */
+static bool is_blessed_item(player_type *player_ptr, object_type *o_ptr)
+{
+    BIT_FLAGS flgs[TR_FLAG_SIZE];
+    object_flags(player_ptr, o_ptr, flgs);
+    return have_flag(flgs, TR_BLESSED);
+}
+
+/*!
+ * @brief オブジェクトが所定の店舗で引き取れるかどうかを返す /
+ * Determine if the current store will purchase the given item
+ * @param o_ptr 判定したいオブジェクト構造体の参照ポインタ
+ * @return アイテムが買い取れるならばTRUEを返す
+ * @note
+ * Note that a shop-keeper must refuse to buy "worthless" items
+ */
+bool store_will_buy(player_type *player_ptr, object_type *o_ptr)
+{
+    /* Unused */
+    (void)player_ptr;
+    if ((cur_store_num == STORE_HOME) || (cur_store_num == STORE_MUSEUM))
+        return TRUE;
+
+    switch (cur_store_num) {
+    case STORE_GENERAL: {
+        switch (o_ptr->tval) {
+        case TV_POTION:
+            if (o_ptr->sval != SV_POTION_WATER)
+                return FALSE;
+
+        case TV_WHISTLE:
+        case TV_FOOD:
+        case TV_LITE:
+        case TV_FLASK:
+        case TV_SPIKE:
+        case TV_SHOT:
+        case TV_ARROW:
+        case TV_BOLT:
+        case TV_DIGGING:
+        case TV_CLOAK:
+        case TV_BOTTLE:
+        case TV_FIGURINE:
+        case TV_STATUE:
+        case TV_CAPTURE:
+        case TV_CARD:
+            break;
+        default:
+            return FALSE;
+        }
+
+        break;
+    }
+    case STORE_ARMOURY: {
+        switch (o_ptr->tval) {
+        case TV_BOOTS:
+        case TV_GLOVES:
+        case TV_CROWN:
+        case TV_HELM:
+        case TV_SHIELD:
+        case TV_CLOAK:
+        case TV_SOFT_ARMOR:
+        case TV_HARD_ARMOR:
+        case TV_DRAG_ARMOR:
+            break;
+        default:
+            return FALSE;
+        }
+
+        break;
+    }
+    case STORE_WEAPON: {
+        switch (o_ptr->tval) {
+        case TV_SHOT:
+        case TV_BOLT:
+        case TV_ARROW:
+        case TV_BOW:
+        case TV_DIGGING:
+        case TV_POLEARM:
+        case TV_SWORD:
+        case TV_HISSATSU_BOOK:
+            break;
+        case TV_HAFTED:
+            if (o_ptr->sval == SV_WIZSTAFF)
+                return FALSE;
+
+            break;
+        default:
+            return FALSE;
+        }
+
+        break;
+    }
+    case STORE_TEMPLE: {
+        switch (o_ptr->tval) {
+        case TV_LIFE_BOOK:
+        case TV_CRUSADE_BOOK:
+        case TV_SCROLL:
+        case TV_POTION:
+        case TV_HAFTED:
+            break;
+        case TV_FIGURINE:
+        case TV_STATUE: {
+            monster_race *r_ptr = &r_info[o_ptr->pval];
+            if (!(r_ptr->flags3 & RF3_EVIL))
+                if (((r_ptr->flags3 & RF3_GOOD) != 0) || ((r_ptr->flags3 & RF3_ANIMAL) != 0) || (angband_strchr("?!", r_ptr->d_char) != '\0'))
+                    break;
+        }
+            /* Fall through */
+        case TV_POLEARM:
+        case TV_SWORD: {
+            if (is_blessed_item(player_ptr, o_ptr))
+                break;
+        }
+            /* Fall through */
+        default:
+            return FALSE;
+        }
+
+        break;
+    }
+    case STORE_ALCHEMIST: {
+        switch (o_ptr->tval) {
+        case TV_SCROLL:
+        case TV_POTION:
+            break;
+        default:
+            return FALSE;
+        }
+
+        break;
+    }
+    case STORE_MAGIC: {
+        switch (o_ptr->tval) {
+        case TV_SORCERY_BOOK:
+        case TV_NATURE_BOOK:
+        case TV_CHAOS_BOOK:
+        case TV_DEATH_BOOK:
+        case TV_TRUMP_BOOK:
+        case TV_ARCANE_BOOK:
+        case TV_CRAFT_BOOK:
+        case TV_DEMON_BOOK:
+        case TV_MUSIC_BOOK:
+        case TV_HEX_BOOK:
+        case TV_AMULET:
+        case TV_RING:
+        case TV_STAFF:
+        case TV_WAND:
+        case TV_ROD:
+        case TV_SCROLL:
+        case TV_POTION:
+        case TV_FIGURINE:
+            break;
+        case TV_HAFTED: {
+            if (o_ptr->sval == SV_WIZSTAFF)
+                break;
+            else
+                return FALSE;
+        }
+        default:
+            return FALSE;
+        }
+
+        break;
+    }
+    case STORE_BOOK: {
+        switch (o_ptr->tval) {
+        case TV_SORCERY_BOOK:
+        case TV_NATURE_BOOK:
+        case TV_CHAOS_BOOK:
+        case TV_DEATH_BOOK:
+        case TV_LIFE_BOOK:
+        case TV_TRUMP_BOOK:
+        case TV_ARCANE_BOOK:
+        case TV_CRAFT_BOOK:
+        case TV_DEMON_BOOK:
+        case TV_CRUSADE_BOOK:
+        case TV_MUSIC_BOOK:
+        case TV_HEX_BOOK:
+            break;
+        default:
+            return FALSE;
+        }
+
+        break;
+    }
+    }
+
+    return !object_value(player_ptr, o_ptr) <= 0;
+}
diff --git a/src/store/service-checker.h b/src/store/service-checker.h
new file mode 100644 (file)
index 0000000..ee7356f
--- /dev/null
@@ -0,0 +1,6 @@
+#pragma once
+
+#include "system/angband.h"
+
+typedef struct object_type object_type;
+bool store_will_buy(player_type *player_ptr, object_type *o_ptr);
index e84e510..fdfa2b2 100644 (file)
@@ -5,25 +5,17 @@
  */
 
 #include "store/store-util.h"
-#include "monster-race/monster-race.h"
-#include "monster-race/race-flags3.h"
 #include "object-enchant/apply-magic.h"
 #include "object-enchant/item-apply-magic.h"
 #include "object-enchant/item-feeling.h"
 #include "object-enchant/special-object-flags.h"
-#include "object-enchant/tr-types.h"
 #include "object-hook/hook-enchant.h"
-#include "object/object-flags.h"
 #include "object/object-generator.h"
 #include "object/object-kind.h"
 #include "object/object-value.h"
 #include "perception/object-perception.h"
 #include "sv-definition/sv-lite-types.h"
-#include "sv-definition/sv-potion-types.h"
 #include "sv-definition/sv-scroll-types.h"
-#include "sv-definition/sv-weapon-types.h"
-#include "util/bit-flags-calculator.h"
-#include "util/string-processor.h"
 #include "world/world-object.h"
 
 int cur_store_num = 0;
@@ -274,7 +266,7 @@ static void mass_produce(player_type *player_ptr, object_type *o_ptr)
  * Should we check for "permission" to have the given item?
  * </pre>
  */
-void store_create(player_type *player_ptr, bool (*black_market_crap)(player_type *, object_type *))
+void store_create(player_type *player_ptr, bool (*black_market_crap)(player_type *, object_type *), bool (*store_will_buy)(player_type *, object_type *))
 {
     if (st_ptr->stock_num >= st_ptr->stock_size)
         return;
@@ -297,7 +289,7 @@ void store_create(player_type *player_ptr, bool (*black_market_crap)(player_type
         q_ptr = &forge;
         object_prep(player_ptr, q_ptr, i);
         apply_magic(player_ptr, q_ptr, level, AM_NO_FIXED_ART);
-        if (!store_will_buy(player_ptr, q_ptr))
+        if (!(*store_will_buy)(player_ptr, q_ptr))
             continue;
 
         if (q_ptr->tval == TV_LITE) {
@@ -328,200 +320,6 @@ void store_create(player_type *player_ptr, bool (*black_market_crap)(player_type
 }
 
 /*!
- * @brief オブジェクトが祝福されているかの判定を返す /
- * @param o_ptr 判定したいオブジェクト構造体の参照ポインタ
- * @return アイテムが祝福されたアイテムならばTRUEを返す
- */
-static bool is_blessed_item(player_type *player_ptr, object_type *o_ptr)
-{
-    BIT_FLAGS flgs[TR_FLAG_SIZE];
-    object_flags(player_ptr, o_ptr, flgs);
-    return have_flag(flgs, TR_BLESSED);
-}
-
-/*!
- * @brief オブジェクトが所定の店舗で引き取れるかどうかを返す /
- * Determine if the current store will purchase the given item
- * @param o_ptr 判定したいオブジェクト構造体の参照ポインタ
- * @return アイテムが買い取れるならばTRUEを返す
- * @note
- * Note that a shop-keeper must refuse to buy "worthless" items
- */
-bool store_will_buy(player_type *player_ptr, object_type *o_ptr)
-{
-    /* Unused */
-    (void)player_ptr;
-    if ((cur_store_num == STORE_HOME) || (cur_store_num == STORE_MUSEUM))
-        return TRUE;
-
-    switch (cur_store_num) {
-    case STORE_GENERAL: {
-        switch (o_ptr->tval) {
-        case TV_POTION:
-            if (o_ptr->sval != SV_POTION_WATER)
-                return FALSE;
-
-        case TV_WHISTLE:
-        case TV_FOOD:
-        case TV_LITE:
-        case TV_FLASK:
-        case TV_SPIKE:
-        case TV_SHOT:
-        case TV_ARROW:
-        case TV_BOLT:
-        case TV_DIGGING:
-        case TV_CLOAK:
-        case TV_BOTTLE:
-        case TV_FIGURINE:
-        case TV_STATUE:
-        case TV_CAPTURE:
-        case TV_CARD:
-            break;
-        default:
-            return FALSE;
-        }
-
-        break;
-    }
-    case STORE_ARMOURY: {
-        switch (o_ptr->tval) {
-        case TV_BOOTS:
-        case TV_GLOVES:
-        case TV_CROWN:
-        case TV_HELM:
-        case TV_SHIELD:
-        case TV_CLOAK:
-        case TV_SOFT_ARMOR:
-        case TV_HARD_ARMOR:
-        case TV_DRAG_ARMOR:
-            break;
-        default:
-            return FALSE;
-        }
-
-        break;
-    }
-    case STORE_WEAPON: {
-        switch (o_ptr->tval) {
-        case TV_SHOT:
-        case TV_BOLT:
-        case TV_ARROW:
-        case TV_BOW:
-        case TV_DIGGING:
-        case TV_POLEARM:
-        case TV_SWORD:
-        case TV_HISSATSU_BOOK:
-            break;
-        case TV_HAFTED:
-            if (o_ptr->sval == SV_WIZSTAFF)
-                return FALSE;
-
-            break;
-        default:
-            return FALSE;
-        }
-
-        break;
-    }
-    case STORE_TEMPLE: {
-        switch (o_ptr->tval) {
-        case TV_LIFE_BOOK:
-        case TV_CRUSADE_BOOK:
-        case TV_SCROLL:
-        case TV_POTION:
-        case TV_HAFTED:
-            break;
-        case TV_FIGURINE:
-        case TV_STATUE: {
-            monster_race *r_ptr = &r_info[o_ptr->pval];
-            if (!(r_ptr->flags3 & RF3_EVIL))
-                if (((r_ptr->flags3 & RF3_GOOD) != 0) || ((r_ptr->flags3 & RF3_ANIMAL) != 0) || (angband_strchr("?!", r_ptr->d_char) != '\0'))
-                    break;
-        }
-            /* Fall through */
-        case TV_POLEARM:
-        case TV_SWORD: {
-            if (is_blessed_item(player_ptr, o_ptr))
-                break;
-        }
-            /* Fall through */
-        default:
-            return FALSE;
-        }
-
-        break;
-    }
-    case STORE_ALCHEMIST: {
-        switch (o_ptr->tval) {
-        case TV_SCROLL:
-        case TV_POTION:
-            break;
-        default:
-            return FALSE;
-        }
-
-        break;
-    }
-    case STORE_MAGIC: {
-        switch (o_ptr->tval) {
-        case TV_SORCERY_BOOK:
-        case TV_NATURE_BOOK:
-        case TV_CHAOS_BOOK:
-        case TV_DEATH_BOOK:
-        case TV_TRUMP_BOOK:
-        case TV_ARCANE_BOOK:
-        case TV_CRAFT_BOOK:
-        case TV_DEMON_BOOK:
-        case TV_MUSIC_BOOK:
-        case TV_HEX_BOOK:
-        case TV_AMULET:
-        case TV_RING:
-        case TV_STAFF:
-        case TV_WAND:
-        case TV_ROD:
-        case TV_SCROLL:
-        case TV_POTION:
-        case TV_FIGURINE:
-            break;
-        case TV_HAFTED: {
-            if (o_ptr->sval == SV_WIZSTAFF)
-                break;
-            else
-                return FALSE;
-        }
-        default:
-            return FALSE;
-        }
-
-        break;
-    }
-    case STORE_BOOK: {
-        switch (o_ptr->tval) {
-        case TV_SORCERY_BOOK:
-        case TV_NATURE_BOOK:
-        case TV_CHAOS_BOOK:
-        case TV_DEATH_BOOK:
-        case TV_LIFE_BOOK:
-        case TV_TRUMP_BOOK:
-        case TV_ARCANE_BOOK:
-        case TV_CRAFT_BOOK:
-        case TV_DEMON_BOOK:
-        case TV_CRUSADE_BOOK:
-        case TV_MUSIC_BOOK:
-        case TV_HEX_BOOK:
-            break;
-        default:
-            return FALSE;
-        }
-
-        break;
-    }
-    }
-
-    return !object_value(player_ptr, o_ptr) <= 0;
-}
-
-/*!
  * @brief 店舗に並べた品を同一品であるかどうか判定する /
  * Determine if a store item can "absorb" another item
  * @param o_ptr 判定するオブジェクト構造体の参照ポインタ1
index e7ff7a7..5c2d036 100644 (file)
@@ -1,7 +1,6 @@
 #pragma once
 
 #include "system/angband.h"
-#include "system/object-type-definition.h"
 
 #define STORE_OBJ_LEVEL 5 /* Magic Level for normal stores */
 
 #define STORE_BOOK      8 /*!< 店舗の種類: 書店 */
 #define STORE_MUSEUM    9 /*!< 店舗の種類: 博物館 */
 
-typedef struct store_type
-{
+typedef struct object_type object_type;
+typedef struct store_type {
        byte type;                              /* Store type */
-
        byte owner;                             /* Owner index */
        byte extra;                             /* Unused for now */
-
        s16b insult_cur;                /* Insult counter */
-
        s16b good_buy;                  /* Number of "good" buys */
        s16b bad_buy;                   /* Number of "bad" buys */
-
        s32b store_open;                /* Closed until this turn */
-
        s32b last_visit;                /* Last visited on this turn */
-
        s16b table_num;                 /* Table -- Number of entries */
        s16b table_size;                /* Table -- Total Size of Array */
        s16b *table;                    /* Table -- Legal item kinds */
-
        s16b stock_num;                 /* Stock -- Number of entries */
        s16b stock_size;                /* Stock -- Total Size of Array */
        object_type *stock;             /* Stock -- Actual stock items */
@@ -45,9 +37,8 @@ extern int cur_store_num;
 extern store_type *st_ptr;
 
 void store_delete(void);
-void store_create(player_type *player_ptr, bool(*black_market_crap)(player_type*, object_type*));
+void store_create(player_type *player_ptr, bool (*black_market_crap)(player_type *, object_type *), bool (*store_will_buy)(player_type *, object_type *));
 void store_item_increase(INVENTORY_IDX item, int num);
 void store_item_optimize(INVENTORY_IDX item);
-bool store_will_buy(player_type *player_ptr, object_type *o_ptr);
 int store_carry(player_type *player_ptr, object_type *o_ptr);
 bool store_object_similar(object_type *o_ptr, object_type *j_ptr);
index e605bc1..43cebca 100644 (file)
@@ -24,6 +24,7 @@
 #include "perception/identification.h"
 #include "perception/object-perception.h"
 #include "store/black-market.h"
+#include "store/service-checker.h"
 #include "store/store-util.h"
 #include "term/screen-processor.h"
 #include "util/int-char-converter.h"
@@ -316,7 +317,7 @@ void store_maintenance(player_type *player_ptr, int town_num, int store_num)
         j = st_ptr->stock_size - 1;
 
     while (st_ptr->stock_num < j)
-        store_create(player_ptr, black_market_crap);
+        store_create(player_ptr, black_market_crap, store_will_buy);
 }
 
 /*!