OSDN Git Service

730dd770c6be311d2c53e97624d511c47a1519be
[hengbandforosx/hengbandosx.git] / src / store / store-key-processor.cpp
1 #include "store/store-key-processor.h"
2 #include "autopick/autopick-pref-processor.h"
3 #include "cmd-action/cmd-mind.h"
4 #include "cmd-action/cmd-spell.h"
5 #include "cmd-io/cmd-diary.h"
6 #include "cmd-io/cmd-dump.h"
7 #include "cmd-io/cmd-gameoption.h"
8 #include "cmd-io/cmd-help.h"
9 #include "cmd-io/cmd-knowledge.h"
10 #include "cmd-io/cmd-process-screen.h"
11 #include "cmd-item/cmd-destroy.h"
12 #include "cmd-item/cmd-item.h"
13 #include "cmd-item/cmd-magiceat.h"
14 #include "cmd-io/cmd-lore.h"
15 #include "cmd-io/cmd-macro.h"
16 #include "cmd-item/cmd-equipment.h"
17 #include "cmd-item/cmd-smith.h"
18 #include "cmd-visual/cmd-draw.h"
19 #include "cmd-visual/cmd-visuals.h"
20 #include "game-option/birth-options.h"
21 #include "game-option/input-options.h"
22 #include "io/command-repeater.h"
23 #include "io/input-key-requester.h"
24 #include "mind/mind-elementalist.h"
25 #include "mind/mind-sniper.h"
26 #include "store/home.h"
27 #include "store/museum.h"
28 #include "store/purchase-order.h"
29 #include "store/sell-order.h"
30 #include "store/store-util.h"
31 #include "store/store.h"
32 #include "system/player-type-definition.h"
33 #include "util/int-char-converter.h"
34 #include "view/display-messages.h"
35 #include "view/display-store.h"
36 #include "window/display-sub-windows.h"
37
38 /* Set this to leave the store */
39 bool leave_store = FALSE;
40
41 /*!
42  * @brief 店舗処理コマンド選択のメインルーチン /
43  * Process a command in a store
44  * @param client_ptr 顧客となるクリーチャーの参照ポインタ
45  * @return なし
46  * @note
47  * <pre>
48  * Note that we must allow the use of a few "special" commands
49  * in the stores which are not allowed in the dungeon, and we
50  * must disable some commands which are allowed in the dungeon
51  * but not in the stores, to prevent chaos.
52  * </pre>
53  */
54 void store_process_command(player_type *client_ptr)
55 {
56     repeat_check();
57     if (rogue_like_commands && (command_cmd == 'l'))
58         command_cmd = 'x';
59
60     switch (command_cmd) {
61     case ESCAPE: {
62         leave_store = TRUE;
63         break;
64     }
65     case '-': {
66         /* 日本語版追加 */
67         /* 1 ページ戻るコマンド: 我が家のページ数が多いので重宝するはず By BUG */
68         if (st_ptr->stock_num <= store_bottom) {
69             msg_print(_("これで全部です。", "Entire inventory is shown."));
70         } else {
71             store_top -= store_bottom;
72             if (store_top < 0)
73                 store_top = ((st_ptr->stock_num - 1) / store_bottom) * store_bottom;
74
75             if ((cur_store_num == STORE_HOME) && (powerup_home == FALSE))
76                 if (store_top >= store_bottom)
77                     store_top = store_bottom;
78
79             display_store_inventory(client_ptr);
80         }
81
82         break;
83     }
84     case ' ': {
85         if (st_ptr->stock_num <= store_bottom) {
86             msg_print(_("これで全部です。", "Entire inventory is shown."));
87         } else {
88             store_top += store_bottom;
89
90             /*
91              * 隠しオプション(powerup_home)がセットされていないときは
92              * 我が家では 2 ページまでしか表示しない
93              */
94             auto inven_max = store_get_stock_max(STORE_HOME, powerup_home);
95             if (store_top >= st_ptr->stock_num || store_top >= inven_max)
96                 store_top = 0;
97
98             display_store_inventory(client_ptr);
99         }
100
101         break;
102     }
103     case KTRL('R'): {
104         do_cmd_redraw(client_ptr);
105         display_store(client_ptr);
106         break;
107     }
108     case 'g': {
109         store_purchase(client_ptr);
110         break;
111     }
112     case 'd': {
113         store_sell(client_ptr);
114         break;
115     }
116     case 'x': {
117         store_examine(client_ptr);
118         break;
119     }
120     case '\r': {
121         break;
122     }
123     case 'w': {
124         do_cmd_wield(client_ptr);
125         break;
126     }
127     case 't': {
128         do_cmd_takeoff(client_ptr);
129         break;
130     }
131     case 'k': {
132         do_cmd_destroy(client_ptr);
133         break;
134     }
135     case 'e': {
136         do_cmd_equip(client_ptr);
137         break;
138     }
139     case 'i': {
140         do_cmd_inven(client_ptr);
141         break;
142     }
143     case 'I': {
144         do_cmd_observe(client_ptr);
145         break;
146     }
147     case KTRL('I'): {
148         toggle_inventory_equipment(client_ptr);
149         break;
150     }
151     case 'b': {
152         if ((client_ptr->pclass == CLASS_MINDCRAFTER) || (client_ptr->pclass == CLASS_BERSERKER) || (client_ptr->pclass == CLASS_NINJA)
153             || (client_ptr->pclass == CLASS_MIRROR_MASTER))
154             do_cmd_mind_browse(client_ptr);
155         else if (client_ptr->pclass == CLASS_ELEMENTALIST)
156             do_cmd_element_browse(client_ptr);
157         else if (client_ptr->pclass == CLASS_SMITH)
158             do_cmd_kaji(client_ptr, TRUE);
159         else if (client_ptr->pclass == CLASS_MAGIC_EATER)
160             do_cmd_magic_eater(client_ptr, TRUE, FALSE);
161         else if (client_ptr->pclass == CLASS_SNIPER)
162             do_cmd_snipe_browse(client_ptr);
163         else
164             do_cmd_browse(client_ptr);
165
166         break;
167     }
168     case '{': {
169         do_cmd_inscribe(client_ptr);
170         break;
171     }
172     case '}': {
173         do_cmd_uninscribe(client_ptr);
174         break;
175     }
176     case '?': {
177         do_cmd_help(client_ptr);
178         break;
179     }
180     case '/': {
181         do_cmd_query_symbol(client_ptr);
182         break;
183     }
184     case 'C': {
185         client_ptr->town_num = old_town_num;
186         do_cmd_player_status(client_ptr);
187         client_ptr->town_num = inner_town_num;
188         display_store(client_ptr);
189         break;
190     }
191     case '!': {
192         (void)term_user(0);
193         break;
194     }
195     case '"': {
196         client_ptr->town_num = old_town_num;
197         do_cmd_pref(client_ptr);
198         client_ptr->town_num = inner_town_num;
199         break;
200     }
201     case '@': {
202         client_ptr->town_num = old_town_num;
203         do_cmd_macros(client_ptr);
204         client_ptr->town_num = inner_town_num;
205         break;
206     }
207     case '%': {
208         client_ptr->town_num = old_town_num;
209         do_cmd_visuals(client_ptr);
210         client_ptr->town_num = inner_town_num;
211         break;
212     }
213     case '&': {
214         client_ptr->town_num = old_town_num;
215         do_cmd_colors(client_ptr);
216         client_ptr->town_num = inner_town_num;
217         break;
218     }
219     case '=': {
220         do_cmd_options(client_ptr);
221         (void)combine_and_reorder_home(client_ptr, STORE_HOME);
222         do_cmd_redraw(client_ptr);
223         display_store(client_ptr);
224         break;
225     }
226     case ':': {
227         do_cmd_note();
228         break;
229     }
230     case 'V': {
231         do_cmd_version();
232         break;
233     }
234     case KTRL('F'): {
235         do_cmd_feeling(client_ptr);
236         break;
237     }
238     case KTRL('O'): {
239         do_cmd_message_one();
240         break;
241     }
242     case KTRL('P'): {
243         do_cmd_messages(0);
244         break;
245     }
246     case '|': {
247         do_cmd_diary(client_ptr);
248         break;
249     }
250     case '~': {
251         do_cmd_knowledge(client_ptr);
252         break;
253     }
254     case '(': {
255         do_cmd_load_screen();
256         break;
257     }
258     case ')': {
259         do_cmd_save_screen(client_ptr);
260         break;
261     }
262     default: {
263         if ((cur_store_num == STORE_MUSEUM) && (command_cmd == 'r')) {
264             museum_remove_object(client_ptr);
265         } else {
266             msg_print(_("そのコマンドは店の中では使えません。", "That command does not work in stores."));
267         }
268
269         break;
270     }
271     }
272 }