From 8d77be5bbbc5781c4fafa3986cafc28b5e005491 Mon Sep 17 00:00:00 2001 From: Habu Date: Sat, 6 Feb 2021 00:45:13 +0900 Subject: [PATCH] =?utf8?q?[fix]=20#41478=20=E9=9A=8E=E6=AE=B5=E3=82=92?= =?utf8?q?=E4=B8=8A=E3=81=A3=E3=81=9F=E3=81=A8=E3=81=8D=E3=81=AB=E3=82=AF?= =?utf8?q?=E3=83=A9=E3=83=83=E3=82=B7=E3=83=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 新たなフロアに移動した時に、フロアの最大保存数を超えた場合は 一番古く生成されたフロアを消して使う仕様だが、 その処理にあたるfind_oldest_floor_id関数周りが 想定通りに動作していない。 うまいことやろうとしてスベってる感があるので、 フロアの保存数を超えた場合の処理をわかりやすく書き直す。 --- src/floor/floor-save.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/floor/floor-save.c b/src/floor/floor-save.c index 95d63a067..57a6bce07 100644 --- a/src/floor/floor-save.c +++ b/src/floor/floor-save.c @@ -139,25 +139,21 @@ void kill_saved_floor(player_type *creature_ptr, saved_floor_type *sf_ptr) sf_ptr->floor_id = 0; } -static void find_oldest_floor_id(player_type *creature_ptr, saved_floor_type *sf_ptr, FLOOR_IDX *fl_idx) +static FLOOR_IDX find_oldest_floor_idx(player_type *creature_ptr) { - if (*fl_idx != MAX_SAVED_FLOORS) - return; - - s16b oldest = 0; + FLOOR_IDX oldest_floor_idx = 0; u32b oldest_visit = 0xffffffffL; - for (*fl_idx = 0; *fl_idx < MAX_SAVED_FLOORS; (*fl_idx)++) { - sf_ptr = &saved_floors[*fl_idx]; + + for (FLOOR_IDX fl_idx = 0; fl_idx < MAX_SAVED_FLOORS; fl_idx++) { + const saved_floor_type* sf_ptr = &saved_floors[fl_idx]; if ((sf_ptr->floor_id == creature_ptr->floor_id) || (sf_ptr->visit_mark > oldest_visit)) continue; - oldest = *fl_idx; + oldest_floor_idx = fl_idx; oldest_visit = sf_ptr->visit_mark; } - sf_ptr = &saved_floors[oldest]; - kill_saved_floor(creature_ptr, sf_ptr); - *fl_idx = oldest; + return oldest_floor_idx; } /*! @@ -177,7 +173,12 @@ FLOOR_IDX get_new_floor_id(player_type *creature_ptr) break; } - find_oldest_floor_id(creature_ptr, sf_ptr, &fl_idx); + if (fl_idx == MAX_SAVED_FLOORS) { + fl_idx = find_oldest_floor_idx(creature_ptr); + sf_ptr = &saved_floors[fl_idx]; + kill_saved_floor(creature_ptr, sf_ptr); + } + sf_ptr->savefile_id = fl_idx; sf_ptr->floor_id = max_floor_id; sf_ptr->last_visit = 0; -- 2.11.0