From 7581355a15a4e4babc7c1dea49eae2b1561eccbb Mon Sep 17 00:00:00 2001 From: deskull Date: Tue, 11 Feb 2020 14:59:37 +0900 Subject: [PATCH] =?utf8?q?[Refactor]=20#37353=20calculate=5Fupkeep()=20?= =?utf8?q?=E3=82=92=20player-status.c/h=20=E3=81=B8=E7=A7=BB=E5=8B=95?= =?utf8?q?=EF=BC=8E=20/=20Move=20calculate=5Fupkeep()=20to=20player-status?= =?utf8?q?.c/h.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/cmd/cmd-pet.c | 58 ----------------------------------------------------- src/cmd/cmd-pet.h | 1 - src/player-status.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/player-status.h | 1 + 4 files changed, 59 insertions(+), 59 deletions(-) diff --git a/src/cmd/cmd-pet.c b/src/cmd/cmd-pet.c index 924200d04..127d83a01 100644 --- a/src/cmd/cmd-pet.c +++ b/src/cmd/cmd-pet.c @@ -69,64 +69,6 @@ bool player_can_ride_aux(player_type *creature_ptr, grid_type *g_ptr, bool now_r return p_can_enter; } - -/*! -* @brief ペットの維持コスト計算 -* @return 維持コスト(%) -*/ -PERCENTAGE calculate_upkeep(player_type *creature_ptr) -{ - MONSTER_IDX m_idx; - bool have_a_unique = FALSE; - DEPTH total_friend_levels = 0; - - total_friends = 0; - - for (m_idx = creature_ptr->current_floor_ptr->m_max - 1; m_idx >= 1; m_idx--) - { - monster_type *m_ptr; - monster_race *r_ptr; - - m_ptr = &creature_ptr->current_floor_ptr->m_list[m_idx]; - if (!monster_is_valid(m_ptr)) continue; - r_ptr = &r_info[m_ptr->r_idx]; - - if (is_pet(m_ptr)) - { - total_friends++; - if (r_ptr->flags1 & RF1_UNIQUE) - { - if (creature_ptr->pclass == CLASS_CAVALRY) - { - if (creature_ptr->riding == m_idx) - total_friend_levels += (r_ptr->level + 5) * 2; - else if (!have_a_unique && (r_info[m_ptr->r_idx].flags7 & RF7_RIDING)) - total_friend_levels += (r_ptr->level + 5) * 7 / 2; - else - total_friend_levels += (r_ptr->level + 5) * 10; - have_a_unique = TRUE; - } - else - total_friend_levels += (r_ptr->level + 5) * 10; - } - else - total_friend_levels += r_ptr->level; - - } - } - - if (total_friends) - { - int upkeep_factor; - upkeep_factor = (total_friend_levels - (creature_ptr->lev * 80 / (cp_ptr->pet_upkeep_div))); - if (upkeep_factor < 0) upkeep_factor = 0; - if (upkeep_factor > 1000) upkeep_factor = 1000; - return upkeep_factor; - } - else - return 0; -} - /*! * @brief ペットを開放するコマンドのメインルーチン * @return なし diff --git a/src/cmd/cmd-pet.h b/src/cmd/cmd-pet.h index 6065f61ae..75437116c 100644 --- a/src/cmd/cmd-pet.h +++ b/src/cmd/cmd-pet.h @@ -1,7 +1,6 @@ #pragma once extern bool do_cmd_riding(player_type *creature_ptr, bool force); -extern PERCENTAGE calculate_upkeep(player_type *creature_ptr); extern void do_cmd_pet_dismiss(player_type *creature_pt); extern void do_cmd_pet(player_type *creature_ptr); extern bool player_can_ride_aux(player_type *creature_ptr, grid_type *g_ptr, bool now_riding); diff --git a/src/player-status.c b/src/player-status.c index 1988b8bfb..0848baddc 100644 --- a/src/player-status.c +++ b/src/player-status.c @@ -5416,3 +5416,61 @@ void stop_mouth(player_type *caster_ptr) if (music_singing_any(caster_ptr)) stop_singing(caster_ptr); if (hex_spelling_any(caster_ptr)) stop_hex_spell_all(caster_ptr); } + + +/*! +* @brief ペットの維持コスト計算 +* @return 維持コスト(%) +*/ +PERCENTAGE calculate_upkeep(player_type *creature_ptr) +{ + MONSTER_IDX m_idx; + bool have_a_unique = FALSE; + DEPTH total_friend_levels = 0; + + total_friends = 0; + + for (m_idx = creature_ptr->current_floor_ptr->m_max - 1; m_idx >= 1; m_idx--) + { + monster_type *m_ptr; + monster_race *r_ptr; + + m_ptr = &creature_ptr->current_floor_ptr->m_list[m_idx]; + if (!monster_is_valid(m_ptr)) continue; + r_ptr = &r_info[m_ptr->r_idx]; + + if (is_pet(m_ptr)) + { + total_friends++; + if (r_ptr->flags1 & RF1_UNIQUE) + { + if (creature_ptr->pclass == CLASS_CAVALRY) + { + if (creature_ptr->riding == m_idx) + total_friend_levels += (r_ptr->level + 5) * 2; + else if (!have_a_unique && (r_info[m_ptr->r_idx].flags7 & RF7_RIDING)) + total_friend_levels += (r_ptr->level + 5) * 7 / 2; + else + total_friend_levels += (r_ptr->level + 5) * 10; + have_a_unique = TRUE; + } + else + total_friend_levels += (r_ptr->level + 5) * 10; + } + else + total_friend_levels += r_ptr->level; + + } + } + + if (total_friends) + { + int upkeep_factor; + upkeep_factor = (total_friend_levels - (creature_ptr->lev * 80 / (cp_ptr->pet_upkeep_div))); + if (upkeep_factor < 0) upkeep_factor = 0; + if (upkeep_factor > 1000) upkeep_factor = 1000; + return upkeep_factor; + } + else + return 0; +} diff --git a/src/player-status.h b/src/player-status.h index 25120d041..672d9e961 100644 --- a/src/player-status.h +++ b/src/player-status.h @@ -839,3 +839,4 @@ extern void cheat_death(player_type *creature_ptr); extern void stop_singing(player_type *creature_ptr); extern void stop_mouth(player_type *caster_ptr); +extern PERCENTAGE calculate_upkeep(player_type *creature_ptr); -- 2.11.0