From: Hourier Date: Mon, 13 Jan 2020 09:04:46 +0000 (+0900) Subject: [Refactor] #38997 rumor.c の整形 / Reshaped rumor.c X-Git-Tag: vmacos3.0.0-alpha52~2036^2~29 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=492b6e7810b04fd38bd2077b057dff5fcd5dd97f;p=hengbandforosx%2Fhengbandosx.git [Refactor] #38997 rumor.c の整形 / Reshaped rumor.c --- diff --git a/src/rumor.c b/src/rumor.c index 559f56a82..ac69af42d 100644 --- a/src/rumor.c +++ b/src/rumor.c @@ -23,144 +23,121 @@ IDX rumor_num(char *zz, IDX max_idx) concptr rumor_bind_name(char *base, concptr fullname) { char *s, *v; - s = strstr(base, "{Name}"); if (s) { s[0] = '\0'; v = format("%s%s%s", base, fullname, (s + 6)); - } - else - { - v = base; + return v; } + v = base; return v; } void display_rumor(player_type *player_ptr, bool ex) { - errr err; - int section = 0; - char Rumor[1024]; + char rumor[1024]; + int section = (ex && (randint0(3) == 0)) ? 1 : 0; + errr err = _(get_rnd_line_jonly("rumors_j.txt", section, rumor, 10), + get_rnd_line("rumors.txt", section, rumor)); + if (err) strcpy(rumor, _("嘘の噂もある。", "Some rumors are wrong.")); + + if (strncmp(rumor, "R:", 2) != 0) + { + msg_format("%s", rumor); + return; + } - if (ex) + char *zz[4]; + if (tokenize(rumor + 2, 3, zz, TOKENIZE_CHECKQUOTE) != 3) { - if (randint0(3) == 0) section = 1; + msg_print(_("この情報は間違っている。", "This information is wrong.")); + return; } - err = _(get_rnd_line_jonly("rumors_j.txt", section, Rumor, 10), - get_rnd_line("rumors.txt", section, Rumor)); - if (err) strcpy(Rumor, _("嘘の噂もある。", "Some rumors are wrong.")); + concptr rumor_eff_format = NULL; + char fullname[1024] = ""; + if (strcmp(zz[0], "ARTIFACT") == 0) + { + ARTIFACT_IDX a_idx; + artifact_type *a_ptr; + while (TRUE) + { + a_idx = rumor_num(zz[1], max_a_idx); + + a_ptr = &a_info[a_idx]; + if (a_ptr->name) break; + } + + KIND_OBJECT_IDX k_idx = lookup_kind(a_ptr->tval, a_ptr->sval); + object_type forge; + object_type *q_ptr = &forge; + object_prep(q_ptr, k_idx); + q_ptr->name1 = a_idx; + q_ptr->ident = IDENT_STORE; + object_desc(fullname, q_ptr, OD_NAME_ONLY); + } + else if (strcmp(zz[0], "MONSTER") == 0) + { + monster_race *r_ptr; + while (TRUE) + { + MONRACE_IDX r_idx = rumor_num(zz[1], max_r_idx); + r_ptr = &r_info[r_idx]; + if (r_ptr->name) break; + } + + strcpy(fullname, r_name + r_ptr->name); + + if (!r_ptr->r_sights) + { + r_ptr->r_sights++; + } + } + else if (strcmp(zz[0], "DUNGEON") == 0) + { + DUNGEON_IDX d_idx; + dungeon_type *d_ptr; + while (TRUE) + { + d_idx = rumor_num(zz[1], current_world_ptr->max_d_idx); + d_ptr = &d_info[d_idx]; + if (d_ptr->name) break; + } - err = TRUE; + strcpy(fullname, d_name + d_ptr->name); - if (strncmp(Rumor, "R:", 2) == 0) + if (!max_dlv[d_idx]) + { + max_dlv[d_idx] = d_ptr->mindepth; + rumor_eff_format = _("%sに帰還できるようになった。", "You can recall to %s."); + } + } + else if (strcmp(zz[0], "TOWN") == 0) { - char *zz[4]; - concptr rumor_msg = NULL; - concptr rumor_eff_format = NULL; - char fullname[1024] = ""; + IDX t_idx; + while (TRUE) + { + t_idx = rumor_num(zz[1], NO_TOWN); + if (town_info[t_idx].name) break; + } + + strcpy(fullname, town_info[t_idx].name); - if (tokenize(Rumor + 2, 3, zz, TOKENIZE_CHECKQUOTE) == 3) + s32b visit = (1L << (t_idx - 1)); + if ((t_idx != SECRET_TOWN) && !(player_ptr->visit & visit)) { - if (strcmp(zz[0], "ARTIFACT") == 0) - { - ARTIFACT_IDX a_idx; - KIND_OBJECT_IDX k_idx; - object_type forge; - object_type *q_ptr = &forge; - artifact_type *a_ptr; - - while (TRUE) - { - a_idx = rumor_num(zz[1], max_a_idx); - - a_ptr = &a_info[a_idx]; - if (a_ptr->name) break; - } - - k_idx = lookup_kind(a_ptr->tval, a_ptr->sval); - object_prep(q_ptr, k_idx); - q_ptr->name1 = a_idx; - q_ptr->ident = IDENT_STORE; - object_desc(fullname, q_ptr, OD_NAME_ONLY); - } - else if (strcmp(zz[0], "MONSTER") == 0) - { - MONRACE_IDX r_idx; - monster_race *r_ptr; - - while (TRUE) - { - r_idx = rumor_num(zz[1], max_r_idx); - r_ptr = &r_info[r_idx]; - if (r_ptr->name) break; - } - - strcpy(fullname, r_name + r_ptr->name); - - /* Remember this monster */ - if (!r_ptr->r_sights) - { - r_ptr->r_sights++; - } - } - else if (strcmp(zz[0], "DUNGEON") == 0) - { - DUNGEON_IDX d_idx; - dungeon_type *d_ptr; - - while (TRUE) - { - d_idx = rumor_num(zz[1], current_world_ptr->max_d_idx); - d_ptr = &d_info[d_idx]; - if (d_ptr->name) break; - } - - strcpy(fullname, d_name + d_ptr->name); - - if (!max_dlv[d_idx]) - { - max_dlv[d_idx] = d_ptr->mindepth; - rumor_eff_format = _("%sに帰還できるようになった。", "You can recall to %s."); - } - } - else if (strcmp(zz[0], "TOWN") == 0) - { - IDX t_idx; - s32b visit; - - while (TRUE) - { - t_idx = rumor_num(zz[1], NO_TOWN); - if (town_info[t_idx].name) break; - } - - strcpy(fullname, town_info[t_idx].name); - - visit = (1L << (t_idx - 1)); - if ((t_idx != SECRET_TOWN) && !(player_ptr->visit & visit)) - { - player_ptr->visit |= visit; - rumor_eff_format = _("%sに行ったことがある気がする。", "You feel you have been to %s."); - } - } - - rumor_msg = rumor_bind_name(zz[2], fullname); - msg_print(rumor_msg); - if (rumor_eff_format) - { - msg_print(NULL); - msg_format(rumor_eff_format, fullname); - } - err = FALSE; + player_ptr->visit |= visit; + rumor_eff_format = _("%sに行ったことがある気がする。", "You feel you have been to %s."); } - /* error */ - if (err) msg_print(_("この情報は間違っている。", "This information is wrong.")); } - else + + concptr rumor_msg = rumor_bind_name(zz[2], fullname); + msg_print(rumor_msg); + if (rumor_eff_format) { - msg_format("%s", Rumor); + msg_print(NULL); + msg_format(rumor_eff_format, fullname); } }