if (o_ptr->tval >= TV_LIFE_BOOK && 3 == o_ptr->sval)
ADD_FLG(FLG_FOURTH);
- if (object_is_ammo(o_ptr))
+ if (o_ptr->is_ammo())
ADD_FLG(FLG_MISSILES);
else if (o_ptr->tval == TV_SCROLL || o_ptr->tval == TV_STAFF || o_ptr->tval == TV_WAND || o_ptr->tval == TV_ROD)
ADD_FLG(FLG_DEVICES);
if (!o_ptr->is_armour())
return false;
} else if (IS_FLG(FLG_MISSILES)) {
- if (!object_is_ammo(o_ptr))
+ if (!o_ptr->is_ammo())
return false;
} else if (IS_FLG(FLG_DEVICES)) {
switch (o_ptr->tval) {
paid = restore_all_status(player_ptr);
break;
case BACT_ENCHANT_ARROWS:
- enchant_item(player_ptr, bcost, 1, 1, 0, FuncItemTester(object_is_ammo));
+ enchant_item(player_ptr, bcost, 1, 1, 0, FuncItemTester(&object_type::is_ammo));
break;
case BACT_ENCHANT_BOW:
enchant_item(player_ptr, bcost, 1, 1, 0, TvalItemTester(TV_BOW));
return true;
return false;
}
-
-/*!
- * @brief オブジェクトが矢弾として使用できるかどうかを返す / Check if an object is ammo
- * @param o_ptr 対象のオブジェクト構造体ポインタ
- * @return 矢弾として使えるならばTRUEを返す
- */
-bool object_is_ammo(const object_type *o_ptr)
-{
- if (TV_MISSILE_BEGIN <= o_ptr->tval && o_ptr->tval <= TV_MISSILE_END)
- return true;
-
- return false;
-}
typedef struct object_type object_type;
typedef struct player_type player_type;
bool object_is_convertible(const object_type *o_ptr);
-bool object_is_ammo(const object_type *o_ptr);
return this->is_melee_weapon() && ((this->weight > 99) || (this->tval == TV_POLEARM));
}
+/*!
+ * @brief オブジェクトが矢弾として使用できるかどうかを返す / Check if an object is ammo
+ * @return 矢弾として使えるならばtrueを返す
+ */
+bool object_type::is_ammo() const
+{
+ return (TV_MISSILE_BEGIN <= this->tval) && (this->tval <= TV_MISSILE_END);
+}
+
+
bool object_type::is_lance() const
{
auto is_lance = this->tval == TV_POLEARM;
bool allow_enchant_weapon() const;
bool allow_enchant_melee_weapon() const;
bool allow_two_hands_wielding() const;
+ bool is_ammo() const;
bool is_lance() const;
bool is_armour() const;
} object_type;