OSDN Git Service

[Fix] prf経由で長すぎる銘を刻むとメモリが破壊される
[hengbandforosx/hengbandosx.git] / src / window / display-sub-window-items.cpp
1 #include "window/display-sub-window-items.h"
2 #include "flavor/flavor-util.h"
3 #include "game-option/text-display-options.h"
4 #include "object-enchant/special-object-flags.h"
5 #include "perception/object-perception.h"
6 #include "system/object-type-definition.h"
7 #include "system/player-type-definition.h"
8 #include "util/quarks.h"
9 #include "util/string-processor.h"
10
11 void display_short_flavors(flavor_type *flavor_ptr)
12 {
13     flavor_ptr->tmp_val2[0] = '\0';
14     if ((abbrev_extra || abbrev_all) && flavor_ptr->o_ptr->is_fully_known()) {
15         if (!flavor_ptr->o_ptr->inscription || !angband_strchr(quark_str(flavor_ptr->o_ptr->inscription), '%')) {
16             bool kanji = _(true, false);
17             get_ability_abbreviation(flavor_ptr->tmp_val2, flavor_ptr->o_ptr, kanji, abbrev_all);
18         }
19     }
20
21     if (flavor_ptr->o_ptr->inscription == 0)
22         return;
23
24     char buff[1024] = "";
25     if (flavor_ptr->tmp_val2[0])
26         strcat(flavor_ptr->tmp_val2, ", ");
27
28     get_inscription(buff, flavor_ptr->o_ptr);
29     angband_strcat(flavor_ptr->tmp_val2, buff, sizeof(flavor_ptr->tmp_val2));
30 }
31
32 void display_item_discount(flavor_type *flavor_ptr)
33 {
34     if ((flavor_ptr->o_ptr->discount == 0) || (flavor_ptr->tmp_val2[0] && ((flavor_ptr->o_ptr->ident & IDENT_STORE) == 0)))
35         return;
36
37     char discount_num_buf[4];
38     if (flavor_ptr->fake_insc_buf[0])
39         strcat(flavor_ptr->fake_insc_buf, ", ");
40
41     (void)object_desc_num(discount_num_buf, flavor_ptr->o_ptr->discount);
42     strcat(flavor_ptr->fake_insc_buf, discount_num_buf);
43     strcat(flavor_ptr->fake_insc_buf, _("%引き", "% off"));
44 }
45
46 /*!
47  * @brief 呪いの有無や割引率等を表示する
48  * @param flavor_ptr アイテム表記への参照ポインタ
49  */
50 void display_item_fake_inscription(flavor_type *flavor_ptr)
51 {
52     if ((flavor_ptr->fake_insc_buf[0] == '\0') && (flavor_ptr->tmp_val2[0] == '\0'))
53         return;
54
55     flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
56     flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->c1);
57     if (flavor_ptr->fake_insc_buf[0])
58         flavor_ptr->t = object_desc_str(flavor_ptr->t, flavor_ptr->fake_insc_buf);
59
60     if ((flavor_ptr->fake_insc_buf[0] != '\0') && (flavor_ptr->tmp_val2[0] != '\0')) {
61         flavor_ptr->t = object_desc_chr(flavor_ptr->t, ',');
62         flavor_ptr->t = object_desc_chr(flavor_ptr->t, ' ');
63     }
64
65     if (flavor_ptr->tmp_val2[0])
66         flavor_ptr->t = object_desc_str(flavor_ptr->t, flavor_ptr->tmp_val2);
67
68     flavor_ptr->t = object_desc_chr(flavor_ptr->t, flavor_ptr->c2);
69 }