From 5b4c96392f712c7756dd0316db9c17eea404d282 Mon Sep 17 00:00:00 2001 From: Habu Date: Mon, 13 Jun 2022 20:13:44 +0900 Subject: [PATCH] =?utf8?q?[Fix]=20chest=5Ftraps=20=E9=85=8D=E5=88=97?= =?utf8?q?=E5=A4=96=E3=82=A2=E3=82=AF=E3=82=BB=E3=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 箱にしかけられたトラップの種類は chest_traps 配列に定義されており、どのトラップが仕 掛けられているかは ObjectType::pval にこの配列の要素番号を格納することで決定している。 しかし、トラップを解除した時解除済みのマークとしてこの pval の符号を逆転して負にする 仕様となっている。 これを考慮せずそのまま配列にアクセスしてしまい、結果として負の値の要素にアクセスして しまっている。 chest_traps 配列にアクセスする時は pval が確実に正の値であることをチェックするように 修正する。 --- src/action/open-util.cpp | 2 +- src/player/player-move.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/action/open-util.cpp b/src/action/open-util.cpp index 6a56b972b..ad2048903 100644 --- a/src/action/open-util.cpp +++ b/src/action/open-util.cpp @@ -62,7 +62,7 @@ int count_chests(PlayerType *player_ptr, POSITION *y, POSITION *x, bool trapped) continue; } - if (trapped && (!o_ptr->is_known() || chest_traps[o_ptr->pval].none())) { + if (trapped && (!o_ptr->is_known() || ((o_ptr->pval > 0) && chest_traps[o_ptr->pval].none()))) { continue; } diff --git a/src/player/player-move.cpp b/src/player/player-move.cpp index edd12f873..88897c443 100644 --- a/src/player/player-move.cpp +++ b/src/player/player-move.cpp @@ -89,7 +89,7 @@ static void discover_hidden_things(PlayerType *player_ptr, POSITION y, POSITION continue; } - if (chest_traps[o_ptr->pval].none()) { + if (o_ptr->pval <= 0 || chest_traps[o_ptr->pval].none()) { continue; } -- 2.11.0