OSDN Git Service

[Refactor] #37353 item_tester_learn_spell() を object-hook.c へ移動。 / Move item_tester_l...
[hengband/hengband.git] / src / object-hook.c
index cbf3490..8122eff 100644 (file)
@@ -434,3 +434,32 @@ bool item_tester_hook_recharge(object_type *o_ptr)
 
        return (FALSE);
 }
+
+/*!
+ * @brief オブジェクトがプレイヤーが使用可能な魔道書かどうかを判定する
+ * @param o_ptr 判定したいオブ会ジェクトの構造体参照ポインタ
+ * @return 学習できる魔道書ならばTRUEを返す
+ */
+bool item_tester_learn_spell(object_type *o_ptr)
+{
+       s32b choices = realm_choices2[p_ptr->pclass];
+
+       if (p_ptr->pclass == CLASS_PRIEST)
+       {
+               if (is_good_realm(p_ptr->realm1))
+               {
+                       choices &= ~(CH_DEATH | CH_DAEMON);
+               }
+               else
+               {
+                       choices &= ~(CH_LIFE | CH_CRUSADE);
+               }
+       }
+
+       if ((o_ptr->tval < TV_LIFE_BOOK) || (o_ptr->tval > (TV_LIFE_BOOK + MAX_REALM - 1))) return (FALSE);
+       if ((o_ptr->tval == TV_MUSIC_BOOK) && (p_ptr->pclass == CLASS_BARD)) return (TRUE);
+       else if (!is_magic(tval2realm(o_ptr->tval))) return FALSE;
+       if ((REALM1_BOOK == o_ptr->tval) || (REALM2_BOOK == o_ptr->tval)) return (TRUE);
+       if (choices & (0x0001 << (tval2realm(o_ptr->tval) - 1))) return (TRUE);
+       return (FALSE);
+}