OSDN Git Service

ゲームのロード直後, あるいはフロアを移動した直後しばらくはペットの存
authornothere <nothere@0568b783-4c39-0410-ac80-bf13821ea2a2>
Sun, 25 Jul 2004 11:26:53 +0000 (11:26 +0000)
committernothere <nothere@0568b783-4c39-0410-ac80-bf13821ea2a2>
Sun, 25 Jul 2004 11:26:53 +0000 (11:26 +0000)
在判定が更新されず, ペットに制約されるレイシャルパワーの使用に影響が
出ていたバグを修正. また, ペットが増減した直後にもペットの総数やペッ
トによる属性影響が更新されなかったバグを修正.

src/cmd5.c
src/dungeon.c
src/externs.h
src/monster1.c
src/monster2.c

index f2c5c02..bf57b46 100644 (file)
@@ -1608,6 +1608,27 @@ static bool ang_sort_comp_pet_dismiss(vptr u, vptr v, int a, int b)
        return w1 <= w2;
 }
 
+void check_pets_num_and_align(monster_type *m_ptr, bool inc)
+{
+       s32b old_friend_align = friend_align;
+       monster_race *r_ptr = &r_info[m_ptr->r_idx];
+
+       if (inc)
+       {
+               total_friends++;
+               if (r_ptr->flags3 & RF3_GOOD) friend_align += r_ptr->level;
+               if (r_ptr->flags3 & RF3_EVIL) friend_align -= r_ptr->level;
+       }
+       else
+       {
+               total_friends--;
+               if (r_ptr->flags3 & RF3_GOOD) friend_align -= r_ptr->level;
+               if (r_ptr->flags3 & RF3_EVIL) friend_align += r_ptr->level;
+       }
+
+       if (old_friend_align != friend_align) p_ptr->update |= (PU_BONUS);
+}
+
 int calculate_upkeep(void)
 {
        s32b old_friend_align = friend_align;
index 8eb1c71..d1c9454 100644 (file)
@@ -6073,6 +6073,8 @@ static void dungeon(bool load_game)
                if (record_maxdepth) do_cmd_write_nikki(NIKKI_MAXDEAPTH, dun_level, NULL);
        }
 
+       (void)calculate_upkeep();
+
        /* Validate the panel */
        panel_bounds_center();
 
index c3fbf80..894e76d 100644 (file)
@@ -787,6 +787,7 @@ extern void do_cmd_study(void);
 extern void do_cmd_cast(void);
 extern bool rakuba(int dam, bool force);
 extern bool do_riding(bool force);
+extern void check_pets_num_and_align(monster_type *m_ptr, bool inc);
 extern int calculate_upkeep(void);
 extern void do_cmd_pet_dismiss(void);
 extern void do_cmd_pet(void);
index 5cd957b..430f803 100644 (file)
@@ -3361,6 +3361,8 @@ void set_friendly(monster_type *m_ptr)
 
 void set_pet(monster_type *m_ptr)
 {
+       if (!is_pet(m_ptr)) check_pets_num_and_align(m_ptr, TRUE);
+
        /* Check for quest completion */
        check_quest_completion(m_ptr);
 
@@ -3375,6 +3377,9 @@ void set_pet(monster_type *m_ptr)
 void set_hostile(monster_type *m_ptr)
 {
        if (p_ptr->inside_battle) return;
+
+       if (is_pet(m_ptr)) check_pets_num_and_align(m_ptr, FALSE);
+
        m_ptr->smart &= ~SM_PET;
        m_ptr->smart &= ~SM_FRIENDLY;
 }
index 11d8132..e271876 100644 (file)
@@ -261,6 +261,9 @@ void delete_monster_idx(int i)
        }
 
 
+       if (is_pet(m_ptr)) check_pets_num_and_align(m_ptr, FALSE);
+
+
        /* Wipe the Monster */
        (void)WIPE(m_ptr, monster_type);
 
@@ -2810,6 +2813,8 @@ void choose_new_monster(int m_idx, bool born, int r_idx)
                if (!r_idx) return;
        }
 
+       if (is_pet(m_ptr)) check_pets_num_and_align(m_ptr, FALSE);
+
        m_ptr->r_idx = r_idx;
        m_ptr->ap_r_idx = r_idx;
        update_mon(m_idx, FALSE);
@@ -2819,6 +2824,8 @@ void choose_new_monster(int m_idx, bool born, int r_idx)
            (r_ptr->flags7 & (RF7_LITE_MASK | RF7_DARK_MASK)))
                p_ptr->update |= (PU_MON_LITE);
 
+       if (is_pet(m_ptr)) check_pets_num_and_align(m_ptr, TRUE);
+
        if (born)
        {
                /* Sub-alignment of a chameleon */