if (creature_ptr->wild_mode) return;
/* No useful feeling in quests */
- if (creature_ptr->current_floor_ptr->inside_quest && !random_quest_number(creature_ptr->current_floor_ptr->dun_level))
+ if (creature_ptr->current_floor_ptr->inside_quest && !random_quest_number(creature_ptr, creature_ptr->current_floor_ptr->dun_level))
{
msg_print(_("典型的なクエストのダンジョンのようだ。", "Looks like a typical quest level."));
return;
/* Print quest message if appropriate */
if (!player_ptr->current_floor_ptr->inside_quest && (player_ptr->dungeon_idx == DUNGEON_ANGBAND))
{
- quest_discovery(random_quest_number(player_ptr->current_floor_ptr->dun_level));
- player_ptr->current_floor_ptr->inside_quest = random_quest_number(player_ptr->current_floor_ptr->dun_level);
+ quest_discovery(random_quest_number(player_ptr, player_ptr->current_floor_ptr->dun_level));
+ player_ptr->current_floor_ptr->inside_quest = random_quest_number(player_ptr, player_ptr->current_floor_ptr->dun_level);
}
if ((player_ptr->current_floor_ptr->dun_level == d_info[player_ptr->dungeon_idx].maxdepth) && d_info[player_ptr->dungeon_idx].final_guardian)
{
/*!
* @brief 新しく入ったダンジョンの階層に固定されている一般のクエストを探し出しIDを返す。
* / Hack -- Check if a level is a "quest" level
+ * @param player_ptr プレーヤーへの参照ポインタ
* @param level 検索対象になる階
* @return クエストIDを返す。該当がない場合0を返す。
*/
}
/* Check for random quest */
- return (random_quest_number(level));
+ return random_quest_number(player_ptr, level);
}
/*!
* @brief 新しく入ったダンジョンの階層に固定されているランダムクエストを探し出しIDを返す。
+ * @param player_ptr プレーヤーへの参照ポインタ
* @param level 検索対象になる階
* @return クエストIDを返す。該当がない場合0を返す。
*/
-QUEST_IDX random_quest_number(DEPTH level)
+QUEST_IDX random_quest_number(player_type *player_ptr, DEPTH level)
{
QUEST_IDX i;
- if (p_ptr->dungeon_idx != DUNGEON_ANGBAND) return 0;
+ if (player_ptr->dungeon_idx != DUNGEON_ANGBAND) return 0;
for (i = MIN_RANDOM_QUEST; i < MAX_RANDOM_QUEST + 1; i++)
{
extern void check_find_art_quest_completion(player_type *player_ptr, object_type *o_ptr);
extern void quest_discovery(QUEST_IDX q_idx);
extern QUEST_IDX quest_number(player_type *player_ptr, DEPTH level);
-extern QUEST_IDX random_quest_number(DEPTH level);
+extern QUEST_IDX random_quest_number(player_type *player_ptr, DEPTH level);
extern void leave_quest_check(player_type *player_ptr);
extern void leave_tower_check(void);
extern void do_cmd_quest(player_type *player_ptr);
-
if (r_ptr->flags1 & (RF1_UNIQUE | RF1_QUESTOR)) resist = TRUE;
else if (r_ptr->flags7 & RF7_UNIQUE2) resist = TRUE;
else if (m_idx == caster_ptr->riding) resist = TRUE;
- else if ((caster_ptr->current_floor_ptr->inside_quest && !random_quest_number(caster_ptr->current_floor_ptr->dun_level)) || caster_ptr->current_floor_ptr->inside_arena || caster_ptr->phase_out) resist = TRUE;
+ else if ((caster_ptr->current_floor_ptr->inside_quest && !random_quest_number(caster_ptr, caster_ptr->current_floor_ptr->dun_level)) || caster_ptr->current_floor_ptr->inside_arena || caster_ptr->phase_out) resist = TRUE;
else if (player_cast && (r_ptr->level > randint0(power))) resist = TRUE;
else if (player_cast && (m_ptr->mflag2 & MFLAG2_NOGENO)) resist = TRUE;
else
bool symbol_genocide(player_type *caster_ptr, int power, bool player_cast)
{
floor_type *floor_ptr = caster_ptr->current_floor_ptr;
- bool is_special_floor = floor_ptr->inside_quest && !random_quest_number(floor_ptr->dun_level);
+ bool is_special_floor = floor_ptr->inside_quest && !random_quest_number(caster_ptr, floor_ptr->dun_level);
is_special_floor |= caster_ptr->current_floor_ptr->inside_arena;
is_special_floor |= caster_ptr->phase_out;
if (is_special_floor)
bool mass_genocide(player_type *caster_ptr, int power, bool player_cast)
{
floor_type *floor_ptr = caster_ptr->current_floor_ptr;
- bool is_special_floor = floor_ptr->inside_quest && !random_quest_number(floor_ptr->dun_level);
+ bool is_special_floor = floor_ptr->inside_quest && !random_quest_number(caster_ptr, floor_ptr->dun_level);
is_special_floor |= caster_ptr->current_floor_ptr->inside_arena;
is_special_floor |= caster_ptr->phase_out;
if (is_special_floor)
bool mass_genocide_undead(player_type *caster_ptr, int power, bool player_cast)
{
floor_type *floor_ptr = caster_ptr->current_floor_ptr;
- bool is_special_floor = floor_ptr->inside_quest && !random_quest_number(floor_ptr->dun_level);
+ bool is_special_floor = floor_ptr->inside_quest && !random_quest_number(caster_ptr, floor_ptr->dun_level);
is_special_floor |= caster_ptr->current_floor_ptr->inside_arena;
is_special_floor |= caster_ptr->phase_out;
if (is_special_floor)
{
floor_type *floor_ptr = caster_ptr->current_floor_ptr;
bool is_special_floor = floor_ptr->inside_arena || caster_ptr->phase_out ||
- (floor_ptr->inside_quest && !random_quest_number(floor_ptr->dun_level));
+ (floor_ptr->inside_quest && !random_quest_number(caster_ptr, floor_ptr->dun_level));
bool is_invalid_floor = idx <= 0;
is_invalid_floor &= quest_number(caster_ptr, floor_ptr->dun_level) || (floor_ptr->dun_level >= d_info[caster_ptr->dungeon_idx].maxdepth);
is_invalid_floor &= caster_ptr->current_floor_ptr->dun_level >= 1;