GCC Code Coverage Report
Directory: src/ Exec Total Coverage
File: src/input/inputactionmap.h Lines: 2 2 100.0 %
Date: 2017-11-29 Branches: 670 1340 50.0 %

Line Branch Exec Source
1
/*
2
 *  The ManaPlus Client
3
 *  Copyright (C) 2007  Joshua Langley <[email protected]>
4
 *  Copyright (C) 2009-2010  The Mana Developers
5
 *  Copyright (C) 2011-2017  The ManaPlus Developers
6
 *
7
 *  This file is part of The ManaPlus Client.
8
 *
9
 *  This program is free software; you can redistribute it and/or modify
10
 *  it under the terms of the GNU General Public License as published by
11
 *  the Free Software Foundation; either version 2 of the License, or
12
 *  any later version.
13
 *
14
 *  This program is distributed in the hope that it will be useful,
15
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
16
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
 *  GNU General Public License for more details.
18
 *
19
 *  You should have received a copy of the GNU General Public License
20
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
21
 */
22
23
#ifndef INPUT_INPUTACTIONMAP_H
24
#define INPUT_INPUTACTIONMAP_H
25
26
#include "sdlshared.h"
27
28
#include "actions/actions.h"
29
#include "actions/chat.h"
30
#include "actions/commands.h"
31
#include "actions/move.h"
32
#include "actions/pets.h"
33
#include "actions/statusbar.h"
34
#include "actions/tabs.h"
35
#include "actions/target.h"
36
#include "actions/windows.h"
37
38
#include "enums/input/inputcondition.h"
39
#include "enums/input/inputgroup.h"
40
41
#include "input/inputactiondata.h"
42
#include "input/inputmanager.h"
43
44
#include "localconsts.h"
45
46
#define defaultAction(name) \
47
        InputType::UNKNOWN, -1, \
48
        InputType::UNKNOWN, -1, \
49
        Input::GRP_DEFAULT, \
50
        name, \
51
        InputAction::NO_VALUE, 50
52
53
#define addKey(name) InputType::KEYBOARD, name
54
#define emptyKey InputType::UNKNOWN, -1
55
#define joystickButton(num) InputType::JOYSTICK, num
56
57
// keyData must be in same order as enum keyAction.
58
12
static const InputActionData inputActionData
59
    [CAST_SIZE(InputAction::TOTAL)] =
60
    {
61
    {"keyMoveUp",
62
        addKey(SDLK_UP),
63
        emptyKey,
64
        Input::GRP_DEFAULT,
65
        &Actions::moveUp,
66
        InputAction::NO_VALUE, 50,
67
        InputCondition::KEY_DOWN | InputCondition::ARROWKEYS,
68
        "",
69
        UseArgs_false,
70
        Protected_false},
71
    {"keyMoveDown",
72
        addKey(SDLK_DOWN),
73
        emptyKey,
74
        Input::GRP_DEFAULT,
75
        &Actions::moveDown,
76
        InputAction::NO_VALUE, 50,
77
        InputCondition::KEY_DOWN | InputCondition::ARROWKEYS,
78
        "",
79
        UseArgs_false,
80
        Protected_false},
81
    {"keyMoveLeft",
82
        addKey(SDLK_LEFT),
83
        emptyKey,
84
        Input::GRP_DEFAULT,
85
        &Actions::moveLeft,
86
        InputAction::NO_VALUE, 50,
87
        InputCondition::KEY_DOWN | InputCondition::ARROWKEYS,
88
        "",
89
        UseArgs_false,
90
        Protected_false},
91
    {"keyMoveRight",
92
        addKey(SDLK_RIGHT),
93
        emptyKey,
94
        Input::GRP_DEFAULT,
95
        &Actions::moveRight,
96
        InputAction::NO_VALUE, 50,
97
        InputCondition::KEY_DOWN | InputCondition::ARROWKEYS,
98
        "",
99
        UseArgs_false,
100
        Protected_false},
101
    {"keyAttack",
102
        addKey(SDLK_x),
103
        emptyKey,
104
        Input::GRP_DEFAULT | Input::GRP_REPEAT,
105
        &Actions::attack,
106
        InputAction::NO_VALUE, 50,
107
        InputCondition::KEY_DOWN |
108
            InputCondition::GAME |
109
            InputCondition::NOFOLLOW |
110
            InputCondition::VALIDSPEED,
111
        "attack",
112
        UseArgs_false,
113
        Protected_false},
114
    {"keyTargetAttack",
115
        addKey(SDLK_LCTRL),
116
        joystickButton(0),
117
        Input::GRP_DEFAULT,
118
        &Actions::targetAttack,
119
        InputAction::NO_VALUE, 50,
120
        InputCondition::KEY_DOWN |
121
            InputCondition::GAME |
122
            InputCondition::NOFOLLOW |
123
            InputCondition::VALIDSPEED |
124
            InputCondition::ALIVE,
125
        "targetattack",
126
        UseArgs_true,
127
        Protected_false},
128
    {"keyMoveToTarget",
129
        addKey(SDLK_v),
130
        emptyKey,
131
        Input::GRP_DEFAULT,
132
        &Actions::moveToTarget,
133
        InputAction::NO_VALUE, 50,
134
        InputCondition::KEY_DOWN |
135
            InputCondition::GAME |
136
            InputCondition::VALIDSPEED,
137
        "movetotarget",
138
        UseArgs_false,
139
        Protected_false},
140
    {"keyChangeMoveToTarget",
141
        addKey(SDLK_PERIOD),
142
        emptyKey,
143
        Input::GRP_DEFAULT,
144
        &Actions::changeMoveToTarget,
145
        InputAction::NO_VALUE, 50,
146
        InputCondition::KEY_DOWN |
147
            InputCondition::GAME |
148
            InputCondition::VALIDSPEED |
149
            InputCondition::EMODS,
150
        "",
151
        UseArgs_false,
152
        Protected_true},
153
    {"keyMoveToHome",
154
        addKey(SDLK_d),
155
        emptyKey,
156
        Input::GRP_DEFAULT,
157
        &Actions::moveToHome,
158
        InputAction::NO_VALUE, 50,
159
        InputCondition::KEY_DOWN |
160
            InputCondition::GAME |
161
            InputCondition::VALIDSPEED,
162
        "movetohome",
163
        UseArgs_false,
164
        Protected_false},
165
    {"keySetHome",
166
        addKey(SDLK_KP5),
167
        emptyKey,
168
        Input::GRP_DEFAULT,
169
        &Actions::setHome,
170
        InputAction::NO_VALUE, 50,
171
        InputCondition::KEY_DOWN |
172
            InputCondition::GAME |
173
            InputCondition::VALIDSPEED,
174
        "sethome",
175
        UseArgs_false,
176
        Protected_true},
177
    {"keyMoveToPoint",
178
        addKey(SDLK_RSHIFT),
179
        emptyKey,
180
        Input::GRP_DEFAULT,
181
        nullptr,
182
        InputAction::NO_VALUE, 50,
183
        InputCondition::KEY_DOWN |
184
            InputCondition::DEFAULT |
185
            InputCondition::INGAME,
186
        "",
187
        UseArgs_false,
188
        Protected_false},
189
    {"keyTalk",
190
        addKey(SDLK_t),
191
        emptyKey,
192
        Input::GRP_DEFAULT,
193
        &Actions::talk,
194
        InputAction::NO_VALUE, 50,
195
        InputCondition::KEY_DOWN | InputCondition::GAME,
196
        "talk",
197
        UseArgs_false,
198
        Protected_false},
199
    {"keyTarget",
200
        addKey(SDLK_LSHIFT),
201
        joystickButton(4),
202
        Input::GRP_DEFAULT,
203
        &Actions::stopAttack,
204
        InputAction::NO_VALUE, 50,
205
        InputCondition::KEY_DOWN | InputCondition::GAME,
206
        "stopattack",
207
        UseArgs_false,
208
        Protected_false},
209
    {"keyUnTarget",
210
        defaultAction(&Actions::untarget),
211
        InputCondition::KEY_DOWN | InputCondition::GAME,
212
        "untarget",
213
        UseArgs_false,
214
        Protected_false},
215
    {"keyTargetMonster",
216
        addKey(SDLK_a),
217
        joystickButton(3),
218
        Input::GRP_DEFAULT | Input::GRP_REPEAT,
219
        &Actions::targetMonster,
220
        InputAction::NO_VALUE, 50,
221
        InputCondition::KEY_DOWN |
222
            InputCondition::GAME |
223
            InputCondition::NOTARGET |
224
            InputCondition::VALIDSPEED,
225
        "targetmonster",
226
        UseArgs_false,
227
        Protected_false},
228
    {"keyTargetNPC",
229
        addKey(SDLK_n),
230
        emptyKey,
231
        Input::GRP_DEFAULT,
232
        &Actions::targetNPC,
233
        InputAction::NO_VALUE, 50,
234
        InputCondition::KEY_DOWN |
235
            InputCondition::GAME |
236
            InputCondition::NOTARGET,
237
        "targetnpc",
238
        UseArgs_false,
239
        Protected_false},
240
    {"keyTargetPlayer",
241
        addKey(SDLK_q),
242
        emptyKey,
243
        Input::GRP_DEFAULT,
244
        &Actions::targetPlayer,
245
        InputAction::NO_VALUE, 50,
246
        InputCondition::KEY_DOWN |
247
            InputCondition::GAME |
248
            InputCondition::NOTARGET,
249
        "targetplayer",
250
        UseArgs_false,
251
        Protected_false},
252
    {"keyPickup",
253
        addKey(SDLK_z),
254
        joystickButton(1),
255
        Input::GRP_DEFAULT,
256
        &Actions::pickup,
257
        InputAction::NO_VALUE, 50,
258
        InputCondition::KEY_DOWN |
259
            InputCondition::GAME |
260
            InputCondition::NOTARGET,
261
        "pickup",
262
        UseArgs_false,
263
        Protected_false},
264
    {"keyChangePickupType",
265
        addKey(SDLK_o),
266
        emptyKey,
267
        Input::GRP_DEFAULT,
268
        &Actions::changePickupType,
269
        InputAction::NO_VALUE, 50,
270
        InputCondition::KEY_DOWN |
271
            InputCondition::GAME |
272
            InputCondition::VALIDSPEED |
273
            InputCondition::EMODS,
274
        "",
275
        UseArgs_false,
276
        Protected_true},
277
    {"keyHideWindows",
278
        addKey(SDLK_h),
279
        emptyKey,
280
        Input::GRP_DEFAULT | Input::GRP_GUI,
281
        &Actions::hideWindows,
282
        InputAction::NO_VALUE, 50,
283
        InputCondition::KEY_DOWN |
284
            InputCondition::GAME |
285
            InputCondition::NOTARGET,
286
        "hidewindows",
287
        UseArgs_false,
288
        Protected_true},
289
    {"keyBeingSit",
290
        addKey(SDLK_s),
291
        joystickButton(2),
292
        Input::GRP_DEFAULT,
293
        &Actions::sit,
294
        InputAction::NO_VALUE, 50,
295
        InputCondition::KEY_DOWN |
296
            InputCondition::GAME |
297
            InputCondition::NOTARGET |
298
            InputCondition::NOBLOCK,
299
        "sit",
300
        UseArgs_false,
301
        Protected_false},
302
    {"keyScreenshot",
303
        addKey(SDLK_p),
304
        emptyKey,
305
        Input::GRP_DEFAULT,
306
        &Actions::screenshot,
307
        InputAction::NO_VALUE, 50,
308
        InputCondition::KEY_DOWN |
309
            InputCondition::NOTARGET |
310
            InputCondition::NOINPUT,
311
        "screenshot",
312
        UseArgs_false,
313
        Protected_true},
314
    {"keyTrade",
315
        addKey(SDLK_r),
316
        emptyKey,
317
        Input::GRP_DEFAULT,
318
        &Actions::changeTrade,
319
        InputAction::NO_VALUE, 50,
320
        InputCondition::KEY_DOWN |
321
            InputCondition::GAME |
322
            InputCondition::NOTARGET,
323
        "changetrade",
324
        UseArgs_false,
325
        Protected_true},
326
    {"keyPathfind",
327
        addKey(SDLK_f),
328
        emptyKey,
329
        Input::GRP_DEFAULT,
330
        &Actions::changeMapMode,
331
        InputAction::NO_VALUE, 50,
332
        InputCondition::KEY_DOWN |
333
            InputCondition::GAME |
334
            InputCondition::NOTARGET |
335
            InputCondition::EMODS,
336
        "",
337
        UseArgs_false,
338
        Protected_false},
339
    {"keyOK",
340
        addKey(SDLK_SPACE),
341
        emptyKey,
342
        Input::GRP_DEFAULT | Input::GRP_GUI,
343
        &Actions::ok,
344
        InputAction::NO_VALUE, 50,
345
        InputCondition::KEY_DOWN |
346
            InputCondition::NOMODAL |
347
            InputCondition::NOAWAY |
348
            InputCondition::NONPCINPUT,
349
        "",
350
        UseArgs_false,
351
        Protected_false},
352
    {"keyQuit",
353
        addKey(SDLK_ESCAPE),
354
#if defined(USE_SDL2) && defined(ANDROID)
355
        addKey(SDLK_AC_BACK),
356
#else  // defined(USE_SDL2) && defined(ANDROID)
357
        emptyKey,
358
#endif  // defined(USE_SDL2) && defined(ANDROID)
359
        Input::GRP_DEFAULT,
360
        &Actions::quit,
361
        InputAction::NO_VALUE, 50,
362
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
363
        "quit",
364
        UseArgs_false,
365
        Protected_true},
366
    {"keyShortcutsKey",
367
        addKey(SDLK_MENU),
368
        emptyKey,
369
        Input::GRP_DEFAULT,
370
        nullptr,
371
        InputAction::NO_VALUE, 50,
372
        InputCondition::KEY_DOWN |
373
            InputCondition::DEFAULT |
374
            InputCondition::INGAME,
375
        "",
376
        UseArgs_false,
377
        Protected_true},
378
    {"keyShortcut1",
379
        addKey(SDLK_1),
380
        emptyKey,
381
        Input::GRP_DEFAULT,
382
        &Actions::shortcut,
383
        InputAction::NO_VALUE, 50,
384
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
385
        "",
386
        UseArgs_false,
387
        Protected_true},
388
    {"keyShortcut2",
389
        addKey(SDLK_2),
390
        emptyKey,
391
        Input::GRP_DEFAULT,
392
        &Actions::shortcut,
393
        InputAction::NO_VALUE, 50,
394
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
395
        "",
396
        UseArgs_false,
397
        Protected_true},
398
    {"keyShortcut3",
399
        addKey(SDLK_3),
400
        emptyKey,
401
        Input::GRP_DEFAULT,
402
        &Actions::shortcut,
403
        InputAction::NO_VALUE, 50,
404
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
405
        "",
406
        UseArgs_false,
407
        Protected_true},
408
    {"keyShortcut4",
409
        addKey(SDLK_4),
410
        emptyKey,
411
        Input::GRP_DEFAULT,
412
        &Actions::shortcut,
413
        InputAction::NO_VALUE, 50,
414
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
415
        "",
416
        UseArgs_false,
417
        Protected_true},
418
    {"keyShortcut5",
419
        addKey(SDLK_5),
420
        emptyKey,
421
        Input::GRP_DEFAULT,
422
        &Actions::shortcut,
423
        InputAction::NO_VALUE, 50,
424
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
425
        "",
426
        UseArgs_false,
427
        Protected_true},
428
    {"keyShortcut6",
429
        addKey(SDLK_6),
430
        emptyKey,
431
        Input::GRP_DEFAULT,
432
        &Actions::shortcut,
433
        InputAction::NO_VALUE, 50,
434
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
435
        "",
436
        UseArgs_false,
437
        Protected_true},
438
    {"keyShortcut7",
439
        addKey(SDLK_7),
440
        emptyKey,
441
        Input::GRP_DEFAULT,
442
        &Actions::shortcut,
443
        InputAction::NO_VALUE, 50,
444
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
445
        "",
446
        UseArgs_false,
447
        Protected_true},
448
    {"keyShortcut8",
449
        addKey(SDLK_8),
450
        emptyKey,
451
        Input::GRP_DEFAULT,
452
        &Actions::shortcut,
453
        InputAction::NO_VALUE, 50,
454
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
455
        "",
456
        UseArgs_false,
457
        Protected_true},
458
    {"keyShortcut9",
459
        addKey(SDLK_9),
460
        emptyKey,
461
        Input::GRP_DEFAULT,
462
        &Actions::shortcut,
463
        InputAction::NO_VALUE, 50,
464
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
465
        "",
466
        UseArgs_false,
467
        Protected_true},
468
    {"keyShortcut10",
469
        addKey(SDLK_0),
470
        emptyKey,
471
        Input::GRP_DEFAULT,
472
        &Actions::shortcut,
473
        InputAction::NO_VALUE, 50,
474
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
475
        "",
476
        UseArgs_false,
477
        Protected_true},
478
    {"keyShortcut11",
479
        addKey(SDLK_MINUS),
480
        emptyKey,
481
        Input::GRP_DEFAULT,
482
        &Actions::shortcut,
483
        InputAction::NO_VALUE, 50,
484
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
485
        "",
486
        UseArgs_false,
487
        Protected_true},
488
    {"keyShortcut12",
489
        addKey(SDLK_EQUALS),
490
        emptyKey,
491
        Input::GRP_DEFAULT,
492
        &Actions::shortcut,
493
        InputAction::NO_VALUE, 50,
494
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
495
        "",
496
        UseArgs_false,
497
        Protected_true},
498
    {"keyShortcut13",
499
        addKey(SDLK_BACKSPACE),
500
        emptyKey,
501
        Input::GRP_DEFAULT,
502
        &Actions::shortcut,
503
        InputAction::NO_VALUE, 50,
504
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
505
        "",
506
        UseArgs_false,
507
        Protected_true},
508
    {"keyShortcut14",
509
        addKey(SDLK_INSERT),
510
        emptyKey,
511
        Input::GRP_DEFAULT,
512
        &Actions::shortcut,
513
        InputAction::NO_VALUE, 50,
514
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
515
        "",
516
        UseArgs_false,
517
        Protected_true},
518
    {"keyShortcut15",
519
        addKey(SDLK_HOME),
520
        emptyKey,
521
        Input::GRP_DEFAULT,
522
        &Actions::shortcut,
523
        InputAction::NO_VALUE, 50,
524
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
525
        "",
526
        UseArgs_false,
527
        Protected_true},
528
    {"keyShortcut16",
529
        defaultAction(&Actions::shortcut),
530
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
531
        "",
532
        UseArgs_false,
533
        Protected_true},
534
    {"keyShortcut17",
535
        defaultAction(&Actions::shortcut),
536
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
537
        "",
538
        UseArgs_false,
539
        Protected_true},
540
    {"keyShortcut18",
541
        defaultAction(&Actions::shortcut),
542
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
543
        "",
544
        UseArgs_false,
545
        Protected_true},
546
    {"keyShortcut19",
547
        defaultAction(&Actions::shortcut),
548
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
549
        "",
550
        UseArgs_false,
551
        Protected_true},
552
    {"keyShortcut20",
553
        defaultAction(&Actions::shortcut),
554
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
555
        "",
556
        UseArgs_false,
557
        Protected_true},
558
    {"keyWindowHelp",
559
        addKey(SDLK_F1),
560
        emptyKey,
561
        Input::GRP_DEFAULT | Input::GRP_GUI,
562
        &Actions::helpWindowShow,
563
        InputAction::NO_VALUE, 50,
564
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT0,
565
        "help|openhelp",
566
        UseArgs_false,
567
        Protected_false},
568
    {"keyWindowStatus",
569
        addKey(SDLK_F2),
570
        emptyKey,
571
        Input::GRP_DEFAULT | Input::GRP_GUI,
572
        &Actions::statusWindowShow,
573
        InputAction::NO_VALUE, 50,
574
        InputCondition::KEY_DOWN |
575
            InputCondition::GAME |
576
            InputCondition::NOTARGET,
577
        "status|openstatus",
578
        UseArgs_false,
579
        Protected_false},
580
    {"keyWindowInventory",
581
        addKey(SDLK_F3),
582
        emptyKey,
583
        Input::GRP_DEFAULT | Input::GRP_GUI,
584
        &Actions::inventoryWindowShow,
585
        InputAction::NO_VALUE, 50,
586
        InputCondition::KEY_DOWN |
587
            InputCondition::GAME |
588
            InputCondition::NOTARGET,
589
        "inventory|openinventory",
590
        UseArgs_false,
591
        Protected_false},
592
    {"keyWindowEquipment",
593
        addKey(SDLK_F4),
594
        emptyKey,
595
        Input::GRP_DEFAULT | Input::GRP_GUI,
596
        &Actions::equipmentWindowShow,
597
        InputAction::NO_VALUE, 50,
598
        InputCondition::KEY_DOWN |
599
            InputCondition::GAME |
600
            InputCondition::NOTARGET,
601
        "equipment|openequipment",
602
        UseArgs_false,
603
        Protected_false},
604
    {"keyWindowSkill",
605
        addKey(SDLK_F5),
606
        emptyKey,
607
        Input::GRP_DEFAULT | Input::GRP_GUI,
608
        &Actions::skillDialogShow,
609
        InputAction::NO_VALUE, 50,
610
        InputCondition::KEY_DOWN |
611
            InputCondition::GAME |
612
            InputCondition::NOTARGET,
613
        "skill|skills|openskills",
614
        UseArgs_false,
615
        Protected_false},
616
    {"keyWindowMinimap",
617
        addKey(SDLK_F6),
618
        emptyKey,
619
        Input::GRP_DEFAULT | Input::GRP_GUI,
620
        &Actions::minimapWindowShow,
621
        InputAction::NO_VALUE, 50,
622
        InputCondition::KEY_DOWN |
623
            InputCondition::GAME |
624
            InputCondition::NOTARGET,
625
        "minimap|openminimap",
626
        UseArgs_false,
627
        Protected_false},
628
    {"keyWindowChat",
629
        addKey(SDLK_F7),
630
        emptyKey,
631
        Input::GRP_DEFAULT | Input::GRP_GUI,
632
        &Actions::chatWindowShow,
633
        InputAction::NO_VALUE, 50,
634
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT0,
635
        "openchat",
636
        UseArgs_false,
637
        Protected_false},
638
    {"keyWindowShortcut",
639
        addKey(SDLK_F8),
640
        emptyKey,
641
        Input::GRP_DEFAULT | Input::GRP_GUI,
642
        &Actions::shortcutWindowShow,
643
        InputAction::NO_VALUE, 50,
644
        InputCondition::KEY_DOWN |
645
            InputCondition::GAME |
646
            InputCondition::NOTARGET,
647
        "openshortcut|openshortcuts",
648
        UseArgs_false,
649
        Protected_false},
650
    {"keyWindowSetup",
651
        addKey(SDLK_F9),
652
        emptyKey,
653
        Input::GRP_DEFAULT | Input::GRP_GUI,
654
        &Actions::setupWindowShow,
655
        InputAction::NO_VALUE, 50,
656
        InputCondition::KEY_DOWN |
657
            InputCondition::NOTARGET |
658
            InputCondition::NOINPUT |
659
            InputCondition::ENABLED,
660
        "setup|opensetup",
661
        UseArgs_false,
662
        Protected_false},
663
    {"keyWindowDebug",
664
        addKey(SDLK_F10),
665
        emptyKey,
666
        Input::GRP_DEFAULT | Input::GRP_GUI,
667
        &Actions::debugWindowShow,
668
        InputAction::NO_VALUE, 50,
669
        InputCondition::KEY_DOWN |
670
            InputCondition::SHORTCUT0 |
671
            InputCondition::NOTARGET,
672
        "debug|opendebug",
673
        UseArgs_false,
674
        Protected_false},
675
    {"keyWindowSocial",
676
        addKey(SDLK_F11),
677
        emptyKey,
678
        Input::GRP_DEFAULT | Input::GRP_GUI,
679
        &Actions::socialWindowShow,
680
        InputAction::NO_VALUE, 50,
681
        InputCondition::KEY_DOWN |
682
            InputCondition::GAME |
683
            InputCondition::NOTARGET,
684
        "social|opensocial",
685
        UseArgs_false,
686
        Protected_false},
687
    {"keyWindowEmoteBar",
688
        addKey(SDLK_F12),
689
        emptyKey,
690
        Input::GRP_DEFAULT | Input::GRP_GUI,
691
        &Actions::emoteShortcutWindowShow,
692
        InputAction::NO_VALUE, 50,
693
        InputCondition::KEY_DOWN |
694
            InputCondition::GAME |
695
            InputCondition::NOTARGET,
696
        "emotes|openemotes",
697
        UseArgs_false,
698
        Protected_false},
699
    {"keyWindowOutfit",
700
        addKey(SDLK_BACKQUOTE),
701
        emptyKey,
702
        Input::GRP_DEFAULT | Input::GRP_GUI,
703
        &Actions::outfitWindowShow,
704
        InputAction::NO_VALUE, 50,
705
        InputCondition::KEY_DOWN |
706
            InputCondition::GAME |
707
            InputCondition::NOTARGET,
708
        "openoutfit|openoutfits",
709
        UseArgs_false,
710
        Protected_false},
711
    {"keyWindowShop",
712
        emptyKey,
713
        emptyKey,
714
        Input::GRP_DEFAULT | Input::GRP_GUI,
715
        &Actions::shopWindowShow,
716
        InputAction::NO_VALUE, 50,
717
        InputCondition::KEY_DOWN |
718
            InputCondition::GAME |
719
            InputCondition::NOTARGET,
720
        "shop|openshop",
721
        UseArgs_false,
722
        Protected_false},
723
    {"keyWindowDrop",
724
        addKey(SDLK_w),
725
        emptyKey,
726
        Input::GRP_DEFAULT | Input::GRP_GUI,
727
        &Actions::dropShortcutWindowShow,
728
        InputAction::NO_VALUE, 50,
729
        InputCondition::KEY_DOWN |
730
            InputCondition::GAME |
731
            InputCondition::NOTARGET,
732
        "opendrop",
733
        UseArgs_false,
734
        Protected_false},
735
    {"keyWindowKills",
736
        addKey(SDLK_e),
737
        emptyKey,
738
        Input::GRP_DEFAULT | Input::GRP_GUI,
739
        &Actions::killStatsWindowShow,
740
        InputAction::NO_VALUE, 50,
741
        InputCondition::KEY_DOWN |
742
            InputCondition::GAME |
743
            InputCondition::NOTARGET,
744
        "kills|openkills",
745
        UseArgs_false,
746
        Protected_false},
747
    {"keyWindowSpells",
748
        addKey(SDLK_j),
749
        emptyKey,
750
        Input::GRP_DEFAULT | Input::GRP_GUI,
751
        &Actions::spellShortcutWindowShow,
752
        InputAction::NO_VALUE, 50,
753
        InputCondition::KEY_DOWN |
754
            InputCondition::GAME |
755
            InputCondition::NOTARGET,
756
        "spells|openspells",
757
        UseArgs_false,
758
        Protected_false},
759
    {"keyWindowBotChecker",
760
        emptyKey,
761
        emptyKey,
762
        Input::GRP_DEFAULT | Input::GRP_GUI,
763
        nullptr,
764
        InputAction::NO_VALUE, 50,
765
        InputCondition::KEY_DOWN |
766
            InputCondition::GAME |
767
            InputCondition::NOTARGET,
768
        "",
769
        UseArgs_false,
770
        Protected_false},
771
    {"keyWindowOnline",
772
        emptyKey,
773
        emptyKey,
774
        Input::GRP_DEFAULT | Input::GRP_GUI,
775
        &Actions::whoIsOnlineWindowShow,
776
        InputAction::NO_VALUE, 50,
777
        InputCondition::KEY_DOWN |
778
            InputCondition::GAME |
779
            InputCondition::NOTARGET,
780
        "online|openonline",
781
        UseArgs_false,
782
        Protected_false},
783
    {"keyWindowDidYouKnow",
784
        emptyKey,
785
        emptyKey,
786
        Input::GRP_DEFAULT | Input::GRP_GUI,
787
        &Actions::didYouKnowWindowShow,
788
        InputAction::NO_VALUE, 50,
789
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT0,
790
        "didyouknow|opendidyouknow",
791
        UseArgs_false,
792
        Protected_false},
793
    {"keyWindowQuests",
794
        addKey(SDLK_LEFTBRACKET),
795
        emptyKey,
796
        Input::GRP_DEFAULT | Input::GRP_GUI,
797
        &Actions::questsWindowShow,
798
        InputAction::NO_VALUE, 50,
799
        InputCondition::KEY_DOWN |
800
            InputCondition::GAME |
801
            InputCondition::NOTARGET,
802
        "quests|openquests",
803
        UseArgs_false,
804
        Protected_false},
805
    {"keySocialPrevTab",
806
        emptyKey,
807
        emptyKey,
808
        Input::GRP_DEFAULT | Input::GRP_GUI,
809
        &Actions::prevSocialTab,
810
        InputAction::NO_VALUE, 50,
811
        InputCondition::KEY_DOWN |
812
            InputCondition::NOINPUT |
813
            InputCondition::INGAME,
814
        "prevsocialtab",
815
        UseArgs_false,
816
        Protected_false},
817
    {"keySocialNextTab",
818
        emptyKey,
819
        emptyKey,
820
        Input::GRP_DEFAULT | Input::GRP_GUI,
821
        &Actions::nextSocialTab,
822
        InputAction::NO_VALUE, 50,
823
        InputCondition::KEY_DOWN |
824
            InputCondition::NOINPUT |
825
            InputCondition::INGAME,
826
        "nextsocialtab",
827
        UseArgs_false,
828
        Protected_false},
829
    {"keySmilie",
830
        addKey(SDLK_LALT),
831
        emptyKey,
832
        Input::GRP_DEFAULT,
833
        nullptr,
834
        InputAction::NO_VALUE, 50,
835
        InputCondition::KEY_DOWN |
836
            InputCondition::DEFAULT |
837
            InputCondition::INGAME,
838
        "",
839
        UseArgs_false,
840
        Protected_true},
841
    {"keyEmoteShortcut1",
842
        addKey(SDLK_1),
843
        emptyKey,
844
        Input::GRP_EMOTION,
845
        &Actions::emote,
846
        InputAction::EMOTE, 100,
847
        InputCondition::KEY_DOWN | InputCondition::GAME,
848
        "",
849
        UseArgs_false,
850
        Protected_true},
851
    {"keyEmoteShortcut2",
852
        addKey(SDLK_2),
853
        emptyKey,
854
        Input::GRP_EMOTION,
855
        &Actions::emote,
856
        InputAction::EMOTE, 100,
857
        InputCondition::KEY_DOWN | InputCondition::GAME,
858
        "",
859
        UseArgs_false,
860
        Protected_true},
861
    {"keyEmoteShortcut3",
862
        addKey(SDLK_3),
863
        emptyKey,
864
        Input::GRP_EMOTION,
865
        &Actions::emote,
866
        InputAction::EMOTE, 100,
867
        InputCondition::KEY_DOWN | InputCondition::GAME,
868
        "",
869
        UseArgs_false,
870
        Protected_true},
871
    {"keyEmoteShortcut4",
872
        addKey(SDLK_4),
873
        emptyKey,
874
        Input::GRP_EMOTION,
875
        &Actions::emote,
876
        InputAction::EMOTE, 100,
877
        InputCondition::KEY_DOWN | InputCondition::GAME,
878
        "",
879
        UseArgs_false,
880
        Protected_true},
881
    {"keyEmoteShortcut5",
882
        addKey(SDLK_5),
883
        emptyKey,
884
        Input::GRP_EMOTION,
885
        &Actions::emote,
886
        InputAction::EMOTE, 100,
887
        InputCondition::KEY_DOWN | InputCondition::GAME,
888
        "",
889
        UseArgs_false,
890
        Protected_true},
891
    {"keyEmoteShortcut6",
892
        addKey(SDLK_6),
893
        emptyKey,
894
        Input::GRP_EMOTION,
895
        &Actions::emote,
896
        InputAction::EMOTE, 100,
897
        InputCondition::KEY_DOWN | InputCondition::GAME,
898
        "",
899
        UseArgs_false,
900
        Protected_true},
901
    {"keyEmoteShortcut7",
902
        addKey(SDLK_7),
903
        emptyKey,
904
        Input::GRP_EMOTION,
905
        &Actions::emote,
906
        InputAction::EMOTE, 100,
907
        InputCondition::KEY_DOWN | InputCondition::GAME,
908
        "",
909
        UseArgs_false,
910
        Protected_true},
911
    {"keyEmoteShortcut8",
912
        addKey(SDLK_8),
913
        emptyKey,
914
        Input::GRP_EMOTION,
915
        &Actions::emote,
916
        InputAction::EMOTE, 100,
917
        InputCondition::KEY_DOWN | InputCondition::GAME,
918
        "",
919
        UseArgs_false,
920
        Protected_true},
921
    {"keyEmoteShortcut9",
922
        addKey(SDLK_9),
923
        emptyKey,
924
        Input::GRP_EMOTION,
925
        &Actions::emote,
926
        InputAction::EMOTE, 100,
927
        InputCondition::KEY_DOWN | InputCondition::GAME,
928
        "",
929
        UseArgs_false,
930
        Protected_true},
931
    {"keyEmoteShortcut10",
932
        addKey(SDLK_0),
933
        emptyKey,
934
        Input::GRP_EMOTION,
935
        &Actions::emote,
936
        InputAction::EMOTE, 100,
937
        InputCondition::KEY_DOWN | InputCondition::GAME,
938
        "",
939
        UseArgs_false,
940
        Protected_true},
941
    {"keyEmoteShortcut11",
942
        addKey(SDLK_MINUS),
943
        emptyKey,
944
        Input::GRP_EMOTION,
945
        &Actions::emote,
946
        InputAction::EMOTE, 100,
947
        InputCondition::KEY_DOWN | InputCondition::GAME,
948
        "",
949
        UseArgs_false,
950
        Protected_true},
951
    {"keyEmoteShortcut12",
952
        addKey(SDLK_EQUALS),
953
        emptyKey,
954
        Input::GRP_EMOTION,
955
        &Actions::emote,
956
        InputAction::EMOTE, 100,
957
        InputCondition::KEY_DOWN | InputCondition::GAME,
958
        "",
959
        UseArgs_false,
960
        Protected_true},
961
    {"keyEmoteShortcut13",
962
        addKey(SDLK_BACKSPACE),
963
        emptyKey,
964
        Input::GRP_EMOTION,
965
        &Actions::emote,
966
        InputAction::EMOTE, 100,
967
        InputCondition::KEY_DOWN | InputCondition::GAME,
968
        "",
969
        UseArgs_false,
970
        Protected_true},
971
    {"keyEmoteShortcut14",
972
        addKey(SDLK_INSERT),
973
        emptyKey,
974
        Input::GRP_EMOTION,
975
        &Actions::emote,
976
        InputAction::EMOTE, 100,
977
        InputCondition::KEY_DOWN | InputCondition::GAME,
978
        "",
979
        UseArgs_false,
980
        Protected_true},
981
    {"keyEmoteShortcut15",
982
        addKey(SDLK_HOME),
983
        emptyKey,
984
        Input::GRP_EMOTION,
985
        &Actions::emote,
986
        InputAction::EMOTE, 100,
987
        InputCondition::KEY_DOWN | InputCondition::GAME,
988
        "",
989
        UseArgs_false,
990
        Protected_true},
991
    {"keyEmoteShortcut16",
992
        addKey(SDLK_q),
993
        emptyKey,
994
        Input::GRP_EMOTION,
995
        &Actions::emote,
996
        InputAction::EMOTE, 100,
997
        InputCondition::KEY_DOWN | InputCondition::GAME,
998
        "",
999
        UseArgs_false,
1000
        Protected_true},
1001
    {"keyEmoteShortcut17",
1002
        addKey(SDLK_w),
1003
        emptyKey,
1004
        Input::GRP_EMOTION,
1005
        &Actions::emote,
1006
        InputAction::EMOTE, 100,
1007
        InputCondition::KEY_DOWN | InputCondition::GAME,
1008
        "",
1009
        UseArgs_false,
1010
        Protected_true},
1011
    {"keyEmoteShortcut18",
1012
        addKey(SDLK_e),
1013
        emptyKey,
1014
        Input::GRP_EMOTION,
1015
        &Actions::emote,
1016
        InputAction::EMOTE, 100,
1017
        InputCondition::KEY_DOWN | InputCondition::GAME,
1018
        "",
1019
        UseArgs_false,
1020
        Protected_true},
1021
    {"keyEmoteShortcut19",
1022
        addKey(SDLK_r),
1023
        emptyKey,
1024
        Input::GRP_EMOTION,
1025
        &Actions::emote,
1026
        InputAction::EMOTE, 100,
1027
        InputCondition::KEY_DOWN | InputCondition::GAME,
1028
        "",
1029
        UseArgs_false,
1030
        Protected_true},
1031
    {"keyEmoteShortcut20",
1032
        addKey(SDLK_t),
1033
        emptyKey,
1034
        Input::GRP_EMOTION,
1035
        &Actions::emote,
1036
        InputAction::EMOTE, 100,
1037
        InputCondition::KEY_DOWN | InputCondition::GAME,
1038
        "",
1039
        UseArgs_false,
1040
        Protected_true},
1041
    {"keyEmoteShortcut21",
1042
        addKey(SDLK_y),
1043
        emptyKey,
1044
        Input::GRP_EMOTION,
1045
        &Actions::emote,
1046
        InputAction::EMOTE, 100,
1047
        InputCondition::KEY_DOWN | InputCondition::GAME,
1048
        "",
1049
        UseArgs_false,
1050
        Protected_true},
1051
    {"keyEmoteShortcut22",
1052
        addKey(SDLK_u),
1053
        emptyKey,
1054
        Input::GRP_EMOTION,
1055
        &Actions::emote,
1056
        InputAction::EMOTE, 100,
1057
        InputCondition::KEY_DOWN | InputCondition::GAME,
1058
        "",
1059
        UseArgs_false,
1060
        Protected_true},
1061
    {"keyEmoteShortcut23",
1062
        addKey(SDLK_i),
1063
        emptyKey,
1064
        Input::GRP_EMOTION,
1065
        &Actions::emote,
1066
        InputAction::EMOTE, 100,
1067
        InputCondition::KEY_DOWN | InputCondition::GAME,
1068
        "",
1069
        UseArgs_false,
1070
        Protected_true},
1071
    {"keyEmoteShortcut24",
1072
        addKey(SDLK_o),
1073
        emptyKey,
1074
        Input::GRP_EMOTION,
1075
        &Actions::emote,
1076
        InputAction::EMOTE, 100,
1077
        InputCondition::KEY_DOWN | InputCondition::GAME,
1078
        "",
1079
        UseArgs_false,
1080
        Protected_true},
1081
    {"keyEmoteShortcut25",
1082
        addKey(SDLK_p),
1083
        emptyKey,
1084
        Input::GRP_EMOTION,
1085
        &Actions::emote,
1086
        InputAction::EMOTE, 100,
1087
        InputCondition::KEY_DOWN | InputCondition::GAME,
1088
        "",
1089
        UseArgs_false,
1090
        Protected_true},
1091
    {"keyEmoteShortcut26",
1092
        addKey(SDLK_LEFTBRACKET),
1093
        emptyKey,
1094
        Input::GRP_EMOTION,
1095
        &Actions::emote,
1096
        InputAction::EMOTE, 100,
1097
        InputCondition::KEY_DOWN | InputCondition::GAME,
1098
        "",
1099
        UseArgs_false,
1100
        Protected_true},
1101
    {"keyEmoteShortcut27",
1102
        addKey(SDLK_RIGHTBRACKET),
1103
        emptyKey,
1104
        Input::GRP_EMOTION,
1105
        &Actions::emote,
1106
        InputAction::EMOTE, 100,
1107
        InputCondition::KEY_DOWN | InputCondition::GAME,
1108
        "",
1109
        UseArgs_false,
1110
        Protected_true},
1111
    {"keyEmoteShortcut28",
1112
        addKey(SDLK_BACKSLASH),
1113
        emptyKey,
1114
        Input::GRP_EMOTION,
1115
        &Actions::emote,
1116
        InputAction::EMOTE, 100,
1117
        InputCondition::KEY_DOWN | InputCondition::GAME,
1118
        "",
1119
        UseArgs_false,
1120
        Protected_true},
1121
    {"keyEmoteShortcut29",
1122
        addKey(SDLK_a),
1123
        emptyKey,
1124
        Input::GRP_EMOTION,
1125
        &Actions::emote,
1126
        InputAction::EMOTE, 100,
1127
        InputCondition::KEY_DOWN | InputCondition::GAME,
1128
        "",
1129
        UseArgs_false,
1130
        Protected_true},
1131
    {"keyEmoteShortcut30",
1132
        addKey(SDLK_s),
1133
        emptyKey,
1134
        Input::GRP_EMOTION,
1135
        &Actions::emote,
1136
        InputAction::EMOTE, 100,
1137
        InputCondition::KEY_DOWN | InputCondition::GAME,
1138
        "",
1139
        UseArgs_false,
1140
        Protected_true},
1141
    {"keyEmoteShortcut31",
1142
        addKey(SDLK_d),
1143
        emptyKey,
1144
        Input::GRP_EMOTION,
1145
        &Actions::emote,
1146
        InputAction::EMOTE, 100,
1147
        InputCondition::KEY_DOWN | InputCondition::GAME,
1148
        "",
1149
        UseArgs_false,
1150
        Protected_true},
1151
    {"keyEmoteShortcut32",
1152
        addKey(SDLK_f),
1153
        emptyKey,
1154
        Input::GRP_EMOTION,
1155
        &Actions::emote,
1156
        InputAction::EMOTE, 100,
1157
        InputCondition::KEY_DOWN | InputCondition::GAME,
1158
        "",
1159
        UseArgs_false,
1160
        Protected_true},
1161
    {"keyEmoteShortcut33",
1162
        addKey(SDLK_g),
1163
        emptyKey,
1164
        Input::GRP_EMOTION,
1165
        &Actions::emote,
1166
        InputAction::EMOTE, 100,
1167
        InputCondition::KEY_DOWN | InputCondition::GAME,
1168
        "",
1169
        UseArgs_false,
1170
        Protected_true},
1171
    {"keyEmoteShortcut34",
1172
        addKey(SDLK_h),
1173
        emptyKey,
1174
        Input::GRP_EMOTION,
1175
        &Actions::emote,
1176
        InputAction::EMOTE, 100,
1177
        InputCondition::KEY_DOWN | InputCondition::GAME,
1178
        "",
1179
        UseArgs_false,
1180
        Protected_true},
1181
    {"keyEmoteShortcut35",
1182
        addKey(SDLK_j),
1183
        emptyKey,
1184
        Input::GRP_EMOTION,
1185
        &Actions::emote,
1186
        InputAction::EMOTE, 100,
1187
        InputCondition::KEY_DOWN | InputCondition::GAME,
1188
        "",
1189
        UseArgs_false,
1190
        Protected_true},
1191
    {"keyEmoteShortcut36",
1192
        addKey(SDLK_k),
1193
        emptyKey,
1194
        Input::GRP_EMOTION,
1195
        &Actions::emote,
1196
        InputAction::EMOTE, 100,
1197
        InputCondition::KEY_DOWN | InputCondition::GAME,
1198
        "",
1199
        UseArgs_false,
1200
        Protected_true},
1201
    {"keyEmoteShortcut37",
1202
        addKey(SDLK_l),
1203
        emptyKey,
1204
        Input::GRP_EMOTION,
1205
        &Actions::emote,
1206
        InputAction::EMOTE, 100,
1207
        InputCondition::KEY_DOWN | InputCondition::GAME,
1208
        "",
1209
        UseArgs_false,
1210
        Protected_true},
1211
    {"keyEmoteShortcut38",
1212
        addKey(SDLK_SEMICOLON),
1213
        emptyKey,
1214
        Input::GRP_EMOTION,
1215
        &Actions::emote,
1216
        InputAction::EMOTE, 100,
1217
        InputCondition::KEY_DOWN | InputCondition::GAME,
1218
        "",
1219
        UseArgs_false,
1220
        Protected_true},
1221
    {"keyEmoteShortcut39",
1222
        addKey(SDLK_QUOTE),
1223
        emptyKey,
1224
        Input::GRP_EMOTION,
1225
        &Actions::emote,
1226
        InputAction::EMOTE, 100,
1227
        InputCondition::KEY_DOWN | InputCondition::GAME,
1228
        "",
1229
        UseArgs_false,
1230
        Protected_true},
1231
    {"keyEmoteShortcut40",
1232
        addKey(SDLK_z),
1233
        emptyKey,
1234
        Input::GRP_EMOTION,
1235
        &Actions::emote,
1236
        InputAction::EMOTE, 100,
1237
        InputCondition::KEY_DOWN | InputCondition::GAME,
1238
        "",
1239
        UseArgs_false,
1240
        Protected_true},
1241
    {"keyEmoteShortcut41",
1242
        addKey(SDLK_x),
1243
        emptyKey,
1244
        Input::GRP_EMOTION,
1245
        &Actions::emote,
1246
        InputAction::EMOTE, 100,
1247
        InputCondition::KEY_DOWN | InputCondition::GAME,
1248
        "",
1249
        UseArgs_false,
1250
        Protected_true},
1251
    {"keyEmoteShortcut42",
1252
        addKey(SDLK_c),
1253
        emptyKey,
1254
        Input::GRP_EMOTION,
1255
        &Actions::emote,
1256
        InputAction::EMOTE, 100,
1257
        InputCondition::KEY_DOWN | InputCondition::GAME,
1258
        "",
1259
        UseArgs_false,
1260
        Protected_true},
1261
    {"keyEmoteShortcut43",
1262
        addKey(SDLK_v),
1263
        emptyKey,
1264
        Input::GRP_EMOTION,
1265
        &Actions::emote,
1266
        InputAction::EMOTE, 100,
1267
        InputCondition::KEY_DOWN | InputCondition::GAME,
1268
        "",
1269
        UseArgs_false,
1270
        Protected_true},
1271
    {"keyEmoteShortcut44",
1272
        addKey(SDLK_b),
1273
        emptyKey,
1274
        Input::GRP_EMOTION,
1275
        &Actions::emote,
1276
        InputAction::EMOTE, 100,
1277
        InputCondition::KEY_DOWN | InputCondition::GAME,
1278
        "",
1279
        UseArgs_false,
1280
        Protected_true},
1281
    {"keyEmoteShortcut45",
1282
        addKey(SDLK_n),
1283
        emptyKey,
1284
        Input::GRP_EMOTION,
1285
        &Actions::emote,
1286
        InputAction::EMOTE, 100,
1287
        InputCondition::KEY_DOWN | InputCondition::GAME,
1288
        "",
1289
        UseArgs_false,
1290
        Protected_true},
1291
    {"keyEmoteShortcut46",
1292
        addKey(SDLK_m),
1293
        emptyKey,
1294
        Input::GRP_EMOTION,
1295
        &Actions::emote,
1296
        InputAction::EMOTE, 100,
1297
        InputCondition::KEY_DOWN | InputCondition::GAME,
1298
        "",
1299
        UseArgs_false,
1300
        Protected_true},
1301
    {"keyEmoteShortcut47",
1302
        addKey(SDLK_COMMA),
1303
        emptyKey,
1304
        Input::GRP_EMOTION,
1305
        &Actions::emote,
1306
        InputAction::EMOTE, 100,
1307
        InputCondition::KEY_DOWN | InputCondition::GAME,
1308
        "",
1309
        UseArgs_false,
1310
        Protected_true},
1311
    {"keyEmoteShortcut48",
1312
        addKey(SDLK_PERIOD),
1313
        emptyKey,
1314
        Input::GRP_EMOTION,
1315
        &Actions::emote,
1316
        InputAction::EMOTE, 100,
1317
        InputCondition::KEY_DOWN | InputCondition::GAME,
1318
        "",
1319
        UseArgs_false,
1320
        Protected_true},
1321
    {"keyWearOutfit",
1322
        addKey(SDLK_RCTRL),
1323
        emptyKey,
1324
        Input::GRP_DEFAULT,
1325
        nullptr,
1326
        InputAction::NO_VALUE, 50,
1327
        InputCondition::KEY_DOWN |
1328
            InputCondition::DEFAULT |
1329
            InputCondition::INGAME,
1330
        "",
1331
        UseArgs_false,
1332
        Protected_true},
1333
    {"keyCopyOutfit",
1334
        addKey(SDLK_RALT),
1335
        emptyKey,
1336
        Input::GRP_DEFAULT,
1337
        nullptr,
1338
        InputAction::NO_VALUE, 50,
1339
        InputCondition::KEY_DOWN |
1340
            InputCondition::DEFAULT |
1341
            InputCondition::INGAME,
1342
        "",
1343
        UseArgs_false,
1344
        Protected_true},
1345
    {"keyCopyEquipedOutfit",
1346
        addKey(SDLK_RIGHTBRACKET),
1347
        emptyKey,
1348
        Input::GRP_DEFAULT,
1349
        &Actions::copyEquippedToOutfit,
1350
        InputAction::NO_VALUE, 50,
1351
        InputCondition::KEY_DOWN |
1352
            InputCondition::GAME |
1353
            InputCondition::VALIDSPEED,
1354
        "copyequippedtooutfit|itemstooutfit",
1355
        UseArgs_false,
1356
        Protected_true},
1357
    {"keyOutfitShortcut1",
1358
        addKey(SDLK_1),
1359
        emptyKey,
1360
        Input::GRP_OUTFIT,
1361
        &Actions::outfit,
1362
        InputAction::NO_VALUE, 100,
1363
        InputCondition::KEY_DOWN | InputCondition::GAME,
1364
        "",
1365
        UseArgs_false,
1366
        Protected_true},
1367
    {"keyOutfitShortcut2",
1368
        addKey(SDLK_2),
1369
        emptyKey,
1370
        Input::GRP_OUTFIT,
1371
        &Actions::outfit,
1372
        InputAction::NO_VALUE, 100,
1373
        InputCondition::KEY_DOWN | InputCondition::GAME,
1374
        "",
1375
        UseArgs_false,
1376
        Protected_true},
1377
    {"keyOutfitShortcut3",
1378
        addKey(SDLK_3),
1379
        emptyKey,
1380
        Input::GRP_OUTFIT,
1381
        &Actions::outfit,
1382
        InputAction::NO_VALUE, 100,
1383
        InputCondition::KEY_DOWN | InputCondition::GAME,
1384
        "",
1385
        UseArgs_false,
1386
        Protected_true},
1387
    {"keyOutfitShortcut4",
1388
        addKey(SDLK_4),
1389
        emptyKey,
1390
        Input::GRP_OUTFIT,
1391
        &Actions::outfit,
1392
        InputAction::NO_VALUE, 100,
1393
        InputCondition::KEY_DOWN | InputCondition::GAME,
1394
        "",
1395
        UseArgs_false,
1396
        Protected_true},
1397
    {"keyOutfitShortcut5",
1398
        addKey(SDLK_5),
1399
        emptyKey,
1400
        Input::GRP_OUTFIT,
1401
        &Actions::outfit,
1402
        InputAction::NO_VALUE, 100,
1403
        InputCondition::KEY_DOWN | InputCondition::GAME,
1404
        "",
1405
        UseArgs_false,
1406
        Protected_true},
1407
    {"keyOutfitShortcut6",
1408
        addKey(SDLK_6),
1409
        emptyKey,
1410
        Input::GRP_OUTFIT,
1411
        &Actions::outfit,
1412
        InputAction::NO_VALUE, 100,
1413
        InputCondition::KEY_DOWN | InputCondition::GAME,
1414
        "",
1415
        UseArgs_false,
1416
        Protected_true},
1417
    {"keyOutfitShortcut7",
1418
        addKey(SDLK_7),
1419
        emptyKey,
1420
        Input::GRP_OUTFIT,
1421
        &Actions::outfit,
1422
        InputAction::NO_VALUE, 100,
1423
        InputCondition::KEY_DOWN | InputCondition::GAME,
1424
        "",
1425
        UseArgs_false,
1426
        Protected_true},
1427
    {"keyOutfitShortcut8",
1428
        addKey(SDLK_8),
1429
        emptyKey,
1430
        Input::GRP_OUTFIT,
1431
        &Actions::outfit,
1432
        InputAction::NO_VALUE, 100,
1433
        InputCondition::KEY_DOWN | InputCondition::GAME,
1434
        "",
1435
        UseArgs_false,
1436
        Protected_true},
1437
    {"keyOutfitShortcut9",
1438
        addKey(SDLK_9),
1439
        emptyKey,
1440
        Input::GRP_OUTFIT,
1441
        &Actions::outfit,
1442
        InputAction::NO_VALUE, 100,
1443
        InputCondition::KEY_DOWN | InputCondition::GAME,
1444
        "",
1445
        UseArgs_false,
1446
        Protected_true},
1447
    {"keyOutfitShortcut10",
1448
        addKey(SDLK_0),
1449
        emptyKey,
1450
        Input::GRP_OUTFIT,
1451
        &Actions::outfit,
1452
        InputAction::NO_VALUE, 100,
1453
        InputCondition::KEY_DOWN | InputCondition::GAME,
1454
        "",
1455
        UseArgs_false,
1456
        Protected_true},
1457
    {"keyOutfitShortcut11",
1458
        addKey(SDLK_MINUS),
1459
        emptyKey,
1460
        Input::GRP_OUTFIT,
1461
        &Actions::outfit,
1462
        InputAction::NO_VALUE, 100,
1463
        InputCondition::KEY_DOWN | InputCondition::GAME,
1464
        "",
1465
        UseArgs_false,
1466
        Protected_true},
1467
    {"keyOutfitShortcut12",
1468
        addKey(SDLK_EQUALS),
1469
        emptyKey,
1470
        Input::GRP_OUTFIT,
1471
        &Actions::outfit,
1472
        InputAction::NO_VALUE, 100,
1473
        InputCondition::KEY_DOWN | InputCondition::GAME,
1474
        "",
1475
        UseArgs_false,
1476
        Protected_true},
1477
    {"keyOutfitShortcut13",
1478
        addKey(SDLK_BACKSPACE),
1479
        emptyKey,
1480
        Input::GRP_OUTFIT,
1481
        &Actions::outfit,
1482
        InputAction::NO_VALUE, 100,
1483
        InputCondition::KEY_DOWN | InputCondition::GAME,
1484
        "",
1485
        UseArgs_false,
1486
        Protected_true},
1487
    {"keyOutfitShortcut14",
1488
        addKey(SDLK_INSERT),
1489
        emptyKey,
1490
        Input::GRP_OUTFIT,
1491
        &Actions::outfit,
1492
        InputAction::NO_VALUE, 100,
1493
        InputCondition::KEY_DOWN | InputCondition::GAME,
1494
        "",
1495
        UseArgs_false,
1496
        Protected_true},
1497
    {"keyOutfitShortcut15",
1498
        addKey(SDLK_HOME),
1499
        emptyKey,
1500
        Input::GRP_OUTFIT,
1501
        &Actions::outfit,
1502
        InputAction::NO_VALUE, 100,
1503
        InputCondition::KEY_DOWN | InputCondition::GAME,
1504
        "",
1505
        UseArgs_false,
1506
        Protected_true},
1507
    {"keyOutfitShortcut16",
1508
        addKey(SDLK_q),
1509
        emptyKey,
1510
        Input::GRP_OUTFIT,
1511
        &Actions::outfit,
1512
        InputAction::NO_VALUE, 100,
1513
        InputCondition::KEY_DOWN | InputCondition::GAME,
1514
        "",
1515
        UseArgs_false,
1516
        Protected_true},
1517
    {"keyOutfitShortcut17",
1518
        addKey(SDLK_w),
1519
        emptyKey,
1520
        Input::GRP_OUTFIT,
1521
        &Actions::outfit,
1522
        InputAction::NO_VALUE, 100,
1523
        InputCondition::KEY_DOWN | InputCondition::GAME,
1524
        "",
1525
        UseArgs_false,
1526
        Protected_true},
1527
    {"keyOutfitShortcut18",
1528
        addKey(SDLK_e),
1529
        emptyKey,
1530
        Input::GRP_OUTFIT,
1531
        &Actions::outfit,
1532
        InputAction::NO_VALUE, 100,
1533
        InputCondition::KEY_DOWN | InputCondition::GAME,
1534
        "",
1535
        UseArgs_false,
1536
        Protected_true},
1537
    {"keyOutfitShortcut19",
1538
        addKey(SDLK_r),
1539
        emptyKey,
1540
        Input::GRP_OUTFIT,
1541
        &Actions::outfit,
1542
        InputAction::NO_VALUE, 100,
1543
        InputCondition::KEY_DOWN | InputCondition::GAME,
1544
        "",
1545
        UseArgs_false,
1546
        Protected_true},
1547
    {"keyOutfitShortcut20",
1548
        addKey(SDLK_t),
1549
        emptyKey,
1550
        Input::GRP_OUTFIT,
1551
        &Actions::outfit,
1552
        InputAction::NO_VALUE, 100,
1553
        InputCondition::KEY_DOWN | InputCondition::GAME,
1554
        "",
1555
        UseArgs_false,
1556
        Protected_true},
1557
    {"keyOutfitShortcut21",
1558
        addKey(SDLK_y),
1559
        emptyKey,
1560
        Input::GRP_OUTFIT,
1561
        &Actions::outfit,
1562
        InputAction::NO_VALUE, 100,
1563
        InputCondition::KEY_DOWN | InputCondition::GAME,
1564
        "",
1565
        UseArgs_false,
1566
        Protected_true},
1567
    {"keyOutfitShortcut22",
1568
        addKey(SDLK_u),
1569
        emptyKey,
1570
        Input::GRP_OUTFIT,
1571
        &Actions::outfit,
1572
        InputAction::NO_VALUE, 100,
1573
        InputCondition::KEY_DOWN | InputCondition::GAME,
1574
        "",
1575
        UseArgs_false,
1576
        Protected_true},
1577
    {"keyOutfitShortcut23",
1578
        addKey(SDLK_i),
1579
        emptyKey,
1580
        Input::GRP_OUTFIT,
1581
        &Actions::outfit,
1582
        InputAction::NO_VALUE, 100,
1583
        InputCondition::KEY_DOWN | InputCondition::GAME,
1584
        "",
1585
        UseArgs_false,
1586
        Protected_true},
1587
    {"keyOutfitShortcut24",
1588
        addKey(SDLK_o),
1589
        emptyKey,
1590
        Input::GRP_OUTFIT,
1591
        &Actions::outfit,
1592
        InputAction::NO_VALUE, 100,
1593
        InputCondition::KEY_DOWN | InputCondition::GAME,
1594
        "",
1595
        UseArgs_false,
1596
        Protected_true},
1597
    {"keyOutfitShortcut25",
1598
        addKey(SDLK_p),
1599
        emptyKey,
1600
        Input::GRP_OUTFIT,
1601
        &Actions::outfit,
1602
        InputAction::NO_VALUE, 100,
1603
        InputCondition::KEY_DOWN | InputCondition::GAME,
1604
        "",
1605
        UseArgs_false,
1606
        Protected_true},
1607
    {"keyOutfitShortcut26",
1608
        addKey(SDLK_LEFTBRACKET),
1609
        emptyKey,
1610
        Input::GRP_OUTFIT,
1611
        &Actions::outfit,
1612
        InputAction::NO_VALUE, 100,
1613
        InputCondition::KEY_DOWN | InputCondition::GAME,
1614
        "",
1615
        UseArgs_false,
1616
        Protected_true},
1617
    {"keyOutfitShortcut27",
1618
        addKey(SDLK_RIGHTBRACKET),
1619
        emptyKey,
1620
        Input::GRP_OUTFIT,
1621
        &Actions::outfit,
1622
        InputAction::NO_VALUE, 100,
1623
        InputCondition::KEY_DOWN | InputCondition::GAME,
1624
        "",
1625
        UseArgs_false,
1626
        Protected_true},
1627
    {"keyOutfitShortcut28",
1628
        addKey(SDLK_BACKSLASH),
1629
        emptyKey,
1630
        Input::GRP_OUTFIT,
1631
        &Actions::outfit,
1632
        InputAction::NO_VALUE, 100,
1633
        InputCondition::KEY_DOWN | InputCondition::GAME,
1634
        "",
1635
        UseArgs_false,
1636
        Protected_true},
1637
    {"keyOutfitShortcut29",
1638
        addKey(SDLK_a),
1639
        emptyKey,
1640
        Input::GRP_OUTFIT,
1641
        &Actions::outfit,
1642
        InputAction::NO_VALUE, 100,
1643
        InputCondition::KEY_DOWN | InputCondition::GAME,
1644
        "",
1645
        UseArgs_false,
1646
        Protected_true},
1647
    {"keyOutfitShortcut30",
1648
        addKey(SDLK_s),
1649
        emptyKey,
1650
        Input::GRP_OUTFIT,
1651
        &Actions::outfit,
1652
        InputAction::NO_VALUE, 100,
1653
        InputCondition::KEY_DOWN | InputCondition::GAME,
1654
        "",
1655
        UseArgs_false,
1656
        Protected_true},
1657
    {"keyOutfitShortcut31",
1658
        addKey(SDLK_d),
1659
        emptyKey,
1660
        Input::GRP_OUTFIT,
1661
        &Actions::outfit,
1662
        InputAction::NO_VALUE, 100,
1663
        InputCondition::KEY_DOWN | InputCondition::GAME,
1664
        "",
1665
        UseArgs_false,
1666
        Protected_true},
1667
    {"keyOutfitShortcut32",
1668
        addKey(SDLK_f),
1669
        emptyKey,
1670
        Input::GRP_OUTFIT,
1671
        &Actions::outfit,
1672
        InputAction::NO_VALUE, 100,
1673
        InputCondition::KEY_DOWN | InputCondition::GAME,
1674
        "",
1675
        UseArgs_false,
1676
        Protected_true},
1677
    {"keyOutfitShortcut33",
1678
        addKey(SDLK_g),
1679
        emptyKey,
1680
        Input::GRP_OUTFIT,
1681
        &Actions::outfit,
1682
        InputAction::NO_VALUE, 100,
1683
        InputCondition::KEY_DOWN | InputCondition::GAME,
1684
        "",
1685
        UseArgs_false,
1686
        Protected_true},
1687
    {"keyOutfitShortcut34",
1688
        addKey(SDLK_h),
1689
        emptyKey,
1690
        Input::GRP_OUTFIT,
1691
        &Actions::outfit,
1692
        InputAction::NO_VALUE, 100,
1693
        InputCondition::KEY_DOWN | InputCondition::GAME,
1694
        "",
1695
        UseArgs_false,
1696
        Protected_true},
1697
    {"keyOutfitShortcut35",
1698
        addKey(SDLK_j),
1699
        emptyKey,
1700
        Input::GRP_OUTFIT,
1701
        &Actions::outfit,
1702
        InputAction::NO_VALUE, 100,
1703
        InputCondition::KEY_DOWN | InputCondition::GAME,
1704
        "",
1705
        UseArgs_false,
1706
        Protected_true},
1707
    {"keyOutfitShortcut36",
1708
        addKey(SDLK_k),
1709
        emptyKey,
1710
        Input::GRP_OUTFIT,
1711
        &Actions::outfit,
1712
        InputAction::NO_VALUE, 100,
1713
        InputCondition::KEY_DOWN | InputCondition::GAME,
1714
        "",
1715
        UseArgs_false,
1716
        Protected_true},
1717
    {"keyOutfitShortcut37",
1718
        addKey(SDLK_l),
1719
        emptyKey,
1720
        Input::GRP_OUTFIT,
1721
        &Actions::outfit,
1722
        InputAction::NO_VALUE, 100,
1723
        InputCondition::KEY_DOWN | InputCondition::GAME,
1724
        "",
1725
        UseArgs_false,
1726
        Protected_true},
1727
    {"keyOutfitShortcut38",
1728
        addKey(SDLK_SEMICOLON),
1729
        emptyKey,
1730
        Input::GRP_OUTFIT,
1731
        &Actions::outfit,
1732
        InputAction::NO_VALUE, 100,
1733
        InputCondition::KEY_DOWN | InputCondition::GAME,
1734
        "",
1735
        UseArgs_false,
1736
        Protected_true},
1737
    {"keyOutfitShortcut39",
1738
        addKey(SDLK_QUOTE),
1739
        emptyKey,
1740
        Input::GRP_OUTFIT,
1741
        &Actions::outfit,
1742
        InputAction::NO_VALUE, 100,
1743
        InputCondition::KEY_DOWN | InputCondition::GAME,
1744
        "",
1745
        UseArgs_false,
1746
        Protected_true},
1747
    {"keyOutfitShortcut40",
1748
        addKey(SDLK_z),
1749
        emptyKey,
1750
        Input::GRP_OUTFIT,
1751
        &Actions::outfit,
1752
        InputAction::NO_VALUE, 100,
1753
        InputCondition::KEY_DOWN | InputCondition::GAME,
1754
        "",
1755
        UseArgs_false,
1756
        Protected_true},
1757
    {"keyOutfitShortcut41",
1758
        addKey(SDLK_x),
1759
        emptyKey,
1760
        Input::GRP_OUTFIT,
1761
        &Actions::outfit,
1762
        InputAction::NO_VALUE, 100,
1763
        InputCondition::KEY_DOWN | InputCondition::GAME,
1764
        "",
1765
        UseArgs_false,
1766
        Protected_true},
1767
    {"keyOutfitShortcut42",
1768
        addKey(SDLK_c),
1769
        emptyKey,
1770
        Input::GRP_OUTFIT,
1771
        &Actions::outfit,
1772
        InputAction::NO_VALUE, 100,
1773
        InputCondition::KEY_DOWN | InputCondition::GAME,
1774
        "",
1775
        UseArgs_false,
1776
        Protected_true},
1777
    {"keyOutfitShortcut43",
1778
        addKey(SDLK_v),
1779
        emptyKey,
1780
        Input::GRP_OUTFIT,
1781
        &Actions::outfit,
1782
        InputAction::NO_VALUE, 100,
1783
        InputCondition::KEY_DOWN | InputCondition::GAME,
1784
        "",
1785
        UseArgs_false,
1786
        Protected_true},
1787
    {"keyOutfitShortcut44",
1788
        addKey(SDLK_b),
1789
        emptyKey,
1790
        Input::GRP_OUTFIT,
1791
        &Actions::outfit,
1792
        InputAction::NO_VALUE, 100,
1793
        InputCondition::KEY_DOWN | InputCondition::GAME,
1794
        "",
1795
        UseArgs_false,
1796
        Protected_true},
1797
    {"keyOutfitShortcut45",
1798
        addKey(SDLK_n),
1799
        emptyKey,
1800
        Input::GRP_OUTFIT,
1801
        &Actions::outfit,
1802
        InputAction::NO_VALUE, 100,
1803
        InputCondition::KEY_DOWN | InputCondition::GAME,
1804
        "",
1805
        UseArgs_false,
1806
        Protected_true},
1807
    {"keyOutfitShortcut46",
1808
        addKey(SDLK_m),
1809
        emptyKey,
1810
        Input::GRP_OUTFIT,
1811
        &Actions::outfit,
1812
        InputAction::NO_VALUE, 100,
1813
        InputCondition::KEY_DOWN | InputCondition::GAME,
1814
        "",
1815
        UseArgs_false,
1816
        Protected_true},
1817
    {"keyOutfitShortcut47",
1818
        addKey(SDLK_COMMA),
1819
        emptyKey,
1820
        Input::GRP_OUTFIT,
1821
        &Actions::outfit,
1822
        InputAction::NO_VALUE, 100,
1823
        InputCondition::KEY_DOWN | InputCondition::GAME,
1824
        "",
1825
        UseArgs_false,
1826
        Protected_true},
1827
    {"keyOutfitShortcut48",
1828
        addKey(SDLK_PERIOD),
1829
        emptyKey,
1830
        Input::GRP_OUTFIT,
1831
        &Actions::outfit,
1832
        InputAction::NO_VALUE, 100,
1833
        InputCondition::KEY_DOWN | InputCondition::GAME,
1834
        "",
1835
        UseArgs_false,
1836
        Protected_true},
1837
    {"keyMoveToPointShortcut1",
1838
        addKey(SDLK_1),
1839
        emptyKey,
1840
        Input::GRP_MOVETOPOINT,
1841
        &Actions::moveToPoint,
1842
        InputAction::MOVE_TO_POINT, 100,
1843
        InputCondition::KEY_DOWN | InputCondition::GAME,
1844
        "",
1845
        UseArgs_false,
1846
        Protected_true},
1847
    {"keyMoveToPointShortcut2",
1848
        addKey(SDLK_2),
1849
        emptyKey,
1850
        Input::GRP_MOVETOPOINT,
1851
        &Actions::moveToPoint,
1852
        InputAction::MOVE_TO_POINT, 100,
1853
        InputCondition::KEY_DOWN | InputCondition::GAME,
1854
        "",
1855
        UseArgs_false,
1856
        Protected_true},
1857
    {"keyMoveToPointShortcut3",
1858
        addKey(SDLK_3),
1859
        emptyKey,
1860
        Input::GRP_MOVETOPOINT,
1861
        &Actions::moveToPoint,
1862
        InputAction::MOVE_TO_POINT, 100,
1863
        InputCondition::KEY_DOWN | InputCondition::GAME,
1864
        "",
1865
        UseArgs_false,
1866
        Protected_true},
1867
    {"keyMoveToPointShortcut4",
1868
        addKey(SDLK_4),
1869
        emptyKey,
1870
        Input::GRP_MOVETOPOINT,
1871
        &Actions::moveToPoint,
1872
        InputAction::MOVE_TO_POINT, 100,
1873
        InputCondition::KEY_DOWN | InputCondition::GAME,
1874
        "",
1875
        UseArgs_false,
1876
        Protected_true},
1877
    {"keyMoveToPointShortcut5",
1878
        addKey(SDLK_5),
1879
        emptyKey,
1880
        Input::GRP_MOVETOPOINT,
1881
        &Actions::moveToPoint,
1882
        InputAction::MOVE_TO_POINT, 100,
1883
        InputCondition::KEY_DOWN | InputCondition::GAME,
1884
        "",
1885
        UseArgs_false,
1886
        Protected_true},
1887
    {"keyMoveToPointShortcut6",
1888
        addKey(SDLK_6),
1889
        emptyKey,
1890
        Input::GRP_MOVETOPOINT,
1891
        &Actions::moveToPoint,
1892
        InputAction::MOVE_TO_POINT, 100,
1893
        InputCondition::KEY_DOWN | InputCondition::GAME,
1894
        "",
1895
        UseArgs_false,
1896
        Protected_true},
1897
    {"keyMoveToPointShortcut7",
1898
        addKey(SDLK_7),
1899
        emptyKey,
1900
        Input::GRP_MOVETOPOINT,
1901
        &Actions::moveToPoint,
1902
        InputAction::MOVE_TO_POINT, 100,
1903
        InputCondition::KEY_DOWN | InputCondition::GAME,
1904
        "",
1905
        UseArgs_false,
1906
        Protected_true},
1907
    {"keyMoveToPointShortcut8",
1908
        addKey(SDLK_8),
1909
        emptyKey,
1910
        Input::GRP_MOVETOPOINT,
1911
        &Actions::moveToPoint,
1912
        InputAction::MOVE_TO_POINT, 100,
1913
        InputCondition::KEY_DOWN | InputCondition::GAME,
1914
        "",
1915
        UseArgs_false,
1916
        Protected_true},
1917
    {"keyMoveToPointShortcut9",
1918
        addKey(SDLK_9),
1919
        emptyKey,
1920
        Input::GRP_MOVETOPOINT,
1921
        &Actions::moveToPoint,
1922
        InputAction::MOVE_TO_POINT, 100,
1923
        InputCondition::KEY_DOWN | InputCondition::GAME,
1924
        "",
1925
        UseArgs_false,
1926
        Protected_true},
1927
    {"keyMoveToPointShortcut10",
1928
        addKey(SDLK_0),
1929
        emptyKey,
1930
        Input::GRP_MOVETOPOINT,
1931
        &Actions::moveToPoint,
1932
        InputAction::MOVE_TO_POINT, 100,
1933
        InputCondition::KEY_DOWN | InputCondition::GAME,
1934
        "",
1935
        UseArgs_false,
1936
        Protected_true},
1937
    {"keyMoveToPointShortcut11",
1938
        addKey(SDLK_MINUS),
1939
        emptyKey,
1940
        Input::GRP_MOVETOPOINT,
1941
        &Actions::moveToPoint,
1942
        InputAction::MOVE_TO_POINT, 100,
1943
        InputCondition::KEY_DOWN | InputCondition::GAME,
1944
        "",
1945
        UseArgs_false,
1946
        Protected_true},
1947
    {"keyMoveToPointShortcut12",
1948
        addKey(SDLK_EQUALS),
1949
        emptyKey,
1950
        Input::GRP_MOVETOPOINT,
1951
        &Actions::moveToPoint,
1952
        InputAction::MOVE_TO_POINT, 100,
1953
        InputCondition::KEY_DOWN | InputCondition::GAME,
1954
        "",
1955
        UseArgs_false,
1956
        Protected_true},
1957
    {"keyMoveToPointShortcut13",
1958
        addKey(SDLK_BACKSPACE),
1959
        emptyKey,
1960
        Input::GRP_MOVETOPOINT,
1961
        &Actions::moveToPoint,
1962
        InputAction::MOVE_TO_POINT, 100,
1963
        InputCondition::KEY_DOWN | InputCondition::GAME,
1964
        "",
1965
        UseArgs_false,
1966
        Protected_true},
1967
    {"keyMoveToPointShortcut14",
1968
        addKey(SDLK_INSERT),
1969
        emptyKey,
1970
        Input::GRP_MOVETOPOINT,
1971
        &Actions::moveToPoint,
1972
        InputAction::MOVE_TO_POINT, 100,
1973
        InputCondition::KEY_DOWN | InputCondition::GAME,
1974
        "",
1975
        UseArgs_false,
1976
        Protected_true},
1977
    {"keyMoveToPointShortcut15",
1978
        addKey(SDLK_HOME),
1979
        emptyKey,
1980
        Input::GRP_MOVETOPOINT,
1981
        &Actions::moveToPoint,
1982
        InputAction::MOVE_TO_POINT, 100,
1983
        InputCondition::KEY_DOWN | InputCondition::GAME,
1984
        "",
1985
        UseArgs_false,
1986
        Protected_true},
1987
    {"keyMoveToPointShortcut16",
1988
        addKey(SDLK_q),
1989
        emptyKey,
1990
        Input::GRP_MOVETOPOINT,
1991
        &Actions::moveToPoint,
1992
        InputAction::MOVE_TO_POINT, 100,
1993
        InputCondition::KEY_DOWN | InputCondition::GAME,
1994
        "",
1995
        UseArgs_false,
1996
        Protected_true},
1997
    {"keyMoveToPointShortcut17",
1998
        addKey(SDLK_w),
1999
        emptyKey,
2000
        Input::GRP_MOVETOPOINT,
2001
        &Actions::moveToPoint,
2002
        InputAction::MOVE_TO_POINT, 100,
2003
        InputCondition::KEY_DOWN | InputCondition::GAME,
2004
        "",
2005
        UseArgs_false,
2006
        Protected_true},
2007
    {"keyMoveToPointShortcut18",
2008
        addKey(SDLK_e),
2009
        emptyKey,
2010
        Input::GRP_MOVETOPOINT,
2011
        &Actions::moveToPoint,
2012
        InputAction::MOVE_TO_POINT, 100,
2013
        InputCondition::KEY_DOWN | InputCondition::GAME,
2014
        "",
2015
        UseArgs_false,
2016
        Protected_true},
2017
    {"keyMoveToPointShortcut19",
2018
        addKey(SDLK_r),
2019
        emptyKey,
2020
        Input::GRP_MOVETOPOINT,
2021
        &Actions::moveToPoint,
2022
        InputAction::MOVE_TO_POINT, 100,
2023
        InputCondition::KEY_DOWN | InputCondition::GAME,
2024
        "",
2025
        UseArgs_false,
2026
        Protected_true},
2027
    {"keyMoveToPointShortcut20",
2028
        addKey(SDLK_t),
2029
        emptyKey,
2030
        Input::GRP_MOVETOPOINT,
2031
        &Actions::moveToPoint,
2032
        InputAction::MOVE_TO_POINT, 100,
2033
        InputCondition::KEY_DOWN | InputCondition::GAME,
2034
        "",
2035
        UseArgs_false,
2036
        Protected_true},
2037
    {"keyMoveToPointShortcut21",
2038
        addKey(SDLK_y),
2039
        emptyKey,
2040
        Input::GRP_MOVETOPOINT,
2041
        &Actions::moveToPoint,
2042
        InputAction::MOVE_TO_POINT, 100,
2043
        InputCondition::KEY_DOWN | InputCondition::GAME,
2044
        "",
2045
        UseArgs_false,
2046
        Protected_true},
2047
    {"keyMoveToPointShortcut22",
2048
        addKey(SDLK_u),
2049
        emptyKey,
2050
        Input::GRP_MOVETOPOINT,
2051
        &Actions::moveToPoint,
2052
        InputAction::MOVE_TO_POINT, 100,
2053
        InputCondition::KEY_DOWN | InputCondition::GAME,
2054
        "",
2055
        UseArgs_false,
2056
        Protected_true},
2057
    {"keyMoveToPointShortcut23",
2058
        addKey(SDLK_i),
2059
        emptyKey,
2060
        Input::GRP_MOVETOPOINT,
2061
        &Actions::moveToPoint,
2062
        InputAction::MOVE_TO_POINT, 100,
2063
        InputCondition::KEY_DOWN | InputCondition::GAME,
2064
        "",
2065
        UseArgs_false,
2066
        Protected_true},
2067
    {"keyMoveToPointShortcut24",
2068
        addKey(SDLK_o),
2069
        emptyKey,
2070
        Input::GRP_MOVETOPOINT,
2071
        &Actions::moveToPoint,
2072
        InputAction::MOVE_TO_POINT, 100,
2073
        InputCondition::KEY_DOWN | InputCondition::GAME,
2074
        "",
2075
        UseArgs_false,
2076
        Protected_true},
2077
    {"keyMoveToPointShortcut25",
2078
        addKey(SDLK_p),
2079
        emptyKey,
2080
        Input::GRP_MOVETOPOINT,
2081
        &Actions::moveToPoint,
2082
        InputAction::MOVE_TO_POINT, 100,
2083
        InputCondition::KEY_DOWN | InputCondition::GAME,
2084
        "",
2085
        UseArgs_false,
2086
        Protected_true},
2087
    {"keyMoveToPointShortcut26",
2088
        addKey(SDLK_LEFTBRACKET),
2089
        emptyKey,
2090
        Input::GRP_MOVETOPOINT,
2091
        &Actions::moveToPoint,
2092
        InputAction::MOVE_TO_POINT, 100,
2093
        InputCondition::KEY_DOWN | InputCondition::GAME,
2094
        "",
2095
        UseArgs_false,
2096
        Protected_true},
2097
    {"keyMoveToPointShortcut27",
2098
        addKey(SDLK_RIGHTBRACKET),
2099
        emptyKey,
2100
        Input::GRP_MOVETOPOINT,
2101
        &Actions::moveToPoint,
2102
        InputAction::MOVE_TO_POINT, 100,
2103
        InputCondition::KEY_DOWN | InputCondition::GAME,
2104
        "",
2105
        UseArgs_false,
2106
        Protected_true},
2107
    {"keyMoveToPointShortcut28",
2108
        addKey(SDLK_BACKSLASH),
2109
        emptyKey,
2110
        Input::GRP_MOVETOPOINT,
2111
        &Actions::moveToPoint,
2112
        InputAction::MOVE_TO_POINT, 100,
2113
        InputCondition::KEY_DOWN | InputCondition::GAME,
2114
        "",
2115
        UseArgs_false,
2116
        Protected_true},
2117
    {"keyMoveToPointShortcut29",
2118
        addKey(SDLK_a),
2119
        emptyKey,
2120
        Input::GRP_MOVETOPOINT,
2121
        &Actions::moveToPoint,
2122
        InputAction::MOVE_TO_POINT, 100,
2123
        InputCondition::KEY_DOWN | InputCondition::GAME,
2124
        "",
2125
        UseArgs_false,
2126
        Protected_true},
2127
    {"keyMoveToPointShortcut30",
2128
        addKey(SDLK_s),
2129
        emptyKey,
2130
        Input::GRP_MOVETOPOINT,
2131
        &Actions::moveToPoint,
2132
        InputAction::MOVE_TO_POINT, 100,
2133
        InputCondition::KEY_DOWN | InputCondition::GAME,
2134
        "",
2135
        UseArgs_false,
2136
        Protected_true},
2137
    {"keyMoveToPointShortcut31",
2138
        addKey(SDLK_d),
2139
        emptyKey,
2140
        Input::GRP_MOVETOPOINT,
2141
        &Actions::moveToPoint,
2142
        InputAction::MOVE_TO_POINT, 100,
2143
        InputCondition::KEY_DOWN | InputCondition::GAME,
2144
        "",
2145
        UseArgs_false,
2146
        Protected_true},
2147
    {"keyMoveToPointShortcut32",
2148
        addKey(SDLK_f),
2149
        emptyKey,
2150
        Input::GRP_MOVETOPOINT,
2151
        &Actions::moveToPoint,
2152
        InputAction::MOVE_TO_POINT, 100,
2153
        InputCondition::KEY_DOWN | InputCondition::GAME,
2154
        "",
2155
        UseArgs_false,
2156
        Protected_true},
2157
    {"keyMoveToPointShortcut33",
2158
        addKey(SDLK_g),
2159
        emptyKey,
2160
        Input::GRP_MOVETOPOINT,
2161
        &Actions::moveToPoint,
2162
        InputAction::MOVE_TO_POINT, 100,
2163
        InputCondition::KEY_DOWN | InputCondition::GAME,
2164
        "",
2165
        UseArgs_false,
2166
        Protected_true},
2167
    {"keyMoveToPointShortcut34",
2168
        addKey(SDLK_h),
2169
        emptyKey,
2170
        Input::GRP_MOVETOPOINT,
2171
        &Actions::moveToPoint,
2172
        InputAction::MOVE_TO_POINT, 100,
2173
        InputCondition::KEY_DOWN | InputCondition::GAME,
2174
        "",
2175
        UseArgs_false,
2176
        Protected_true},
2177
    {"keyMoveToPointShortcut35",
2178
        addKey(SDLK_j),
2179
        emptyKey,
2180
        Input::GRP_MOVETOPOINT,
2181
        &Actions::moveToPoint,
2182
        InputAction::MOVE_TO_POINT, 100,
2183
        InputCondition::KEY_DOWN | InputCondition::GAME,
2184
        "",
2185
        UseArgs_false,
2186
        Protected_true},
2187
    {"keyMoveToPointShortcut36",
2188
        addKey(SDLK_k),
2189
        emptyKey,
2190
        Input::GRP_MOVETOPOINT,
2191
        &Actions::moveToPoint,
2192
        InputAction::MOVE_TO_POINT, 100,
2193
        InputCondition::KEY_DOWN | InputCondition::GAME,
2194
        "",
2195
        UseArgs_false,
2196
        Protected_true},
2197
    {"keyMoveToPointShortcut37",
2198
        addKey(SDLK_l),
2199
        emptyKey,
2200
        Input::GRP_MOVETOPOINT,
2201
        &Actions::moveToPoint,
2202
        InputAction::MOVE_TO_POINT, 100,
2203
        InputCondition::KEY_DOWN | InputCondition::GAME,
2204
        "",
2205
        UseArgs_false,
2206
        Protected_true},
2207
    {"keyMoveToPointShortcut38",
2208
        addKey(SDLK_SEMICOLON),
2209
        emptyKey,
2210
        Input::GRP_MOVETOPOINT,
2211
        &Actions::moveToPoint,
2212
        InputAction::MOVE_TO_POINT, 100,
2213
        InputCondition::KEY_DOWN | InputCondition::GAME,
2214
        "",
2215
        UseArgs_false,
2216
        Protected_true},
2217
    {"keyMoveToPointShortcut39",
2218
        addKey(SDLK_QUOTE),
2219
        emptyKey,
2220
        Input::GRP_MOVETOPOINT,
2221
        &Actions::moveToPoint,
2222
        InputAction::MOVE_TO_POINT, 100,
2223
        InputCondition::KEY_DOWN | InputCondition::GAME,
2224
        "",
2225
        UseArgs_false,
2226
        Protected_true},
2227
    {"keyMoveToPointShortcut40",
2228
        addKey(SDLK_z),
2229
        emptyKey,
2230
        Input::GRP_MOVETOPOINT,
2231
        &Actions::moveToPoint,
2232
        InputAction::MOVE_TO_POINT, 100,
2233
        InputCondition::KEY_DOWN | InputCondition::GAME,
2234
        "",
2235
        UseArgs_false,
2236
        Protected_true},
2237
    {"keyMoveToPointShortcut41",
2238
        addKey(SDLK_x),
2239
        emptyKey,
2240
        Input::GRP_MOVETOPOINT,
2241
        &Actions::moveToPoint,
2242
        InputAction::MOVE_TO_POINT, 100,
2243
        InputCondition::KEY_DOWN | InputCondition::GAME,
2244
        "",
2245
        UseArgs_false,
2246
        Protected_true},
2247
    {"keyMoveToPointShortcut42",
2248
        addKey(SDLK_c),
2249
        emptyKey,
2250
        Input::GRP_MOVETOPOINT,
2251
        &Actions::moveToPoint,
2252
        InputAction::MOVE_TO_POINT, 100,
2253
        InputCondition::KEY_DOWN | InputCondition::GAME,
2254
        "",
2255
        UseArgs_false,
2256
        Protected_true},
2257
    {"keyMoveToPointShortcut43",
2258
        addKey(SDLK_v),
2259
        emptyKey,
2260
        Input::GRP_MOVETOPOINT,
2261
        &Actions::moveToPoint,
2262
        InputAction::MOVE_TO_POINT, 100,
2263
        InputCondition::KEY_DOWN | InputCondition::GAME,
2264
        "",
2265
        UseArgs_false,
2266
        Protected_true},
2267
    {"keyMoveToPointShortcut44",
2268
        addKey(SDLK_b),
2269
        emptyKey,
2270
        Input::GRP_MOVETOPOINT,
2271
        &Actions::moveToPoint,
2272
        InputAction::MOVE_TO_POINT, 100,
2273
        InputCondition::KEY_DOWN | InputCondition::GAME,
2274
        "",
2275
        UseArgs_false,
2276
        Protected_true},
2277
    {"keyMoveToPointShortcut45",
2278
        addKey(SDLK_n),
2279
        emptyKey,
2280
        Input::GRP_MOVETOPOINT,
2281
        &Actions::moveToPoint,
2282
        InputAction::MOVE_TO_POINT, 100,
2283
        InputCondition::KEY_DOWN | InputCondition::GAME,
2284
        "",
2285
        UseArgs_false,
2286
        Protected_true},
2287
    {"keyMoveToPointShortcut46",
2288
        addKey(SDLK_m),
2289
        emptyKey,
2290
        Input::GRP_MOVETOPOINT,
2291
        &Actions::moveToPoint,
2292
        InputAction::MOVE_TO_POINT, 100,
2293
        InputCondition::KEY_DOWN | InputCondition::GAME,
2294
        "",
2295
        UseArgs_false,
2296
        Protected_true},
2297
    {"keyMoveToPointShortcut47",
2298
        addKey(SDLK_COMMA),
2299
        emptyKey,
2300
        Input::GRP_MOVETOPOINT,
2301
        &Actions::moveToPoint,
2302
        InputAction::MOVE_TO_POINT, 100,
2303
        InputCondition::KEY_DOWN | InputCondition::GAME,
2304
        "",
2305
        UseArgs_false,
2306
        Protected_true},
2307
    {"keyMoveToPointShortcut48",
2308
        addKey(SDLK_PERIOD),
2309
        emptyKey,
2310
        Input::GRP_MOVETOPOINT,
2311
        &Actions::moveToPoint,
2312
        InputAction::MOVE_TO_POINT, 100,
2313
        InputCondition::KEY_DOWN | InputCondition::GAME,
2314
        "",
2315
        UseArgs_false,
2316
        Protected_true},
2317
    {"keyChat",
2318
        addKey(SDLK_RETURN),
2319
        emptyKey,
2320
        Input::GRP_DEFAULT | Input::GRP_CHAT,
2321
        &Actions::toggleChat,
2322
        InputAction::NO_VALUE, 50,
2323
        InputCondition::KEY_DOWN |
2324
            InputCondition::NOINPUT |
2325
            InputCondition::NOAWAY |
2326
            InputCondition::NOMODAL,
2327
        "chat",
2328
        UseArgs_false,
2329
        Protected_false},
2330
    {"keyChatScrollUp",
2331
        addKey(SDLK_PAGEUP),
2332
        emptyKey,
2333
        Input::GRP_DEFAULT | Input::GRP_GUI,
2334
        &Actions::scrollChatUp,
2335
        InputAction::NO_VALUE, 50,
2336
        InputCondition::KEY_DOWN |
2337
            InputCondition::DEFAULT |
2338
            InputCondition::INGAME,
2339
        "chatscrollup",
2340
        UseArgs_false,
2341
        Protected_false},
2342
    {"keyChatScrollDown",
2343
        addKey(SDLK_PAGEDOWN),
2344
        emptyKey,
2345
        Input::GRP_DEFAULT | Input::GRP_GUI,
2346
        &Actions::scrollChatDown,
2347
        InputAction::NO_VALUE, 50,
2348
        InputCondition::KEY_DOWN |
2349
            InputCondition::DEFAULT |
2350
            InputCondition::INGAME,
2351
        "chatscrolldown",
2352
        UseArgs_false,
2353
        Protected_false},
2354
    {"keyChatPrevTab",
2355
        addKey(SDLK_KP7),
2356
        emptyKey,
2357
        Input::GRP_DEFAULT | Input::GRP_GUI,
2358
        &Actions::prevChatTab,
2359
        InputAction::NO_VALUE, 50,
2360
        InputCondition::KEY_DOWN |
2361
            InputCondition::NOINPUT |
2362
            InputCondition::INGAME,
2363
        "prevtab",
2364
        UseArgs_false,
2365
        Protected_false},
2366
    {"keyChatNextTab",
2367
        addKey(SDLK_KP9),
2368
        emptyKey,
2369
        Input::GRP_DEFAULT | Input::GRP_GUI,
2370
        &Actions::nextChatTab,
2371
        InputAction::NO_VALUE, 50,
2372
        InputCondition::KEY_DOWN |
2373
            InputCondition::NOINPUT |
2374
            InputCondition::INGAME,
2375
        "nexttab",
2376
        UseArgs_false,
2377
        Protected_false},
2378
    {"keyChatCloseTab",
2379
        emptyKey,
2380
        emptyKey,
2381
        Input::GRP_DEFAULT | Input::GRP_GUI,
2382
        &Actions::closeChatTab,
2383
        InputAction::NO_VALUE, 50,
2384
        InputCondition::KEY_DOWN |
2385
            InputCondition::NOINPUT |
2386
            InputCondition::INGAME,
2387
        "close",
2388
        UseArgs_false,
2389
        Protected_false},
2390
    {"keyChatPrevHistory",
2391
        addKey(SDLK_KP7),
2392
        emptyKey,
2393
        Input::GRP_CHAT | Input::GRP_GUICHAN,
2394
        nullptr,
2395
        InputAction::NO_VALUE, 50,
2396
        InputCondition::KEY_DOWN |
2397
            InputCondition::DEFAULT |
2398
            InputCondition::INGAME,
2399
        "",
2400
        UseArgs_false,
2401
        Protected_false},
2402
    {"keyChatNextHistory",
2403
        addKey(SDLK_KP9),
2404
        emptyKey,
2405
        Input::GRP_CHAT | Input::GRP_GUICHAN,
2406
        nullptr,
2407
        InputAction::NO_VALUE, 50,
2408
        InputCondition::KEY_DOWN |
2409
            InputCondition::DEFAULT |
2410
            InputCondition::INGAME,
2411
        "",
2412
        UseArgs_false,
2413
        Protected_false},
2414
    {"keyIgnoreInput1",
2415
#ifdef USE_SDL2
2416
        addKey(SDLK_LGUI),
2417
#else  // USE_SDL2
2418
        addKey(SDLK_LSUPER),
2419
#endif  // USE_SDL2
2420
        emptyKey,
2421
        Input::GRP_DEFAULT,
2422
        &Actions::ignoreInput,
2423
        InputAction::NO_VALUE, 500,
2424
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2425
        "",
2426
        UseArgs_false,
2427
        Protected_true},
2428
    {"keyIgnoreInput2",
2429
#ifdef USE_SDL2
2430
        addKey(SDLK_RGUI),
2431
#else  // USE_SDL2
2432
        addKey(SDLK_RSUPER),
2433
#endif  // USE_SDL2
2434
        emptyKey,
2435
        Input::GRP_DEFAULT,
2436
        &Actions::ignoreInput,
2437
        InputAction::NO_VALUE, 500,
2438
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2439
        "",
2440
        UseArgs_false,
2441
        Protected_true},
2442
    {"keyDirectUp",
2443
        defaultAction(&Actions::directUp),
2444
        InputCondition::KEY_DOWN | InputCondition::GAME,
2445
        "directup|turnup",
2446
        UseArgs_false,
2447
        Protected_false},
2448
    {"keyDirectDown",
2449
        defaultAction(&Actions::directDown),
2450
        InputCondition::KEY_DOWN | InputCondition::GAME,
2451
        "directdown|turndown",
2452
        UseArgs_false,
2453
        Protected_false},
2454
    {"keyDirectLeft",
2455
        defaultAction(&Actions::directLeft),
2456
        InputCondition::KEY_DOWN | InputCondition::GAME,
2457
        "directleft|turnleft",
2458
        UseArgs_false,
2459
        Protected_false},
2460
    {"keyDirectRight",
2461
        defaultAction(&Actions::directRight),
2462
        InputCondition::KEY_DOWN | InputCondition::GAME,
2463
        "directright|turnright",
2464
        UseArgs_false,
2465
        Protected_false},
2466
    {"keyCrazyMoves",
2467
        addKey(SDLK_SLASH),
2468
        emptyKey,
2469
        Input::GRP_DEFAULT,
2470
        &Actions::crazyMoves,
2471
        InputAction::NO_VALUE, 50,
2472
        InputCondition::KEY_DOWN |
2473
            InputCondition::GAME |
2474
            InputCondition::VALIDSPEED,
2475
        "",
2476
        UseArgs_false,
2477
        Protected_true},
2478
    {"keyChangeCrazyMoveType",
2479
        addKey(SDLK_BACKSLASH),
2480
        emptyKey,
2481
        Input::GRP_DEFAULT,
2482
        &Actions::changeCrazyMove,
2483
        InputAction::NO_VALUE, 50,
2484
        InputCondition::KEY_DOWN |
2485
            InputCondition::GAME |
2486
            InputCondition::VALIDSPEED |
2487
            InputCondition::EMODS,
2488
        "",
2489
        UseArgs_false,
2490
        Protected_true},
2491
    {"keyQuickDrop",
2492
        addKey(SDLK_y),
2493
        emptyKey,
2494
        Input::GRP_DEFAULT,
2495
        &Actions::dropItem0,
2496
        InputAction::NO_VALUE, 50,
2497
        InputCondition::KEY_DOWN |
2498
            InputCondition::GAME |
2499
            InputCondition::VALIDSPEED,
2500
        "drop",
2501
        UseArgs_false,
2502
        Protected_true},
2503
    {"keyQuickDropN",
2504
        addKey(SDLK_u),
2505
        emptyKey,
2506
        Input::GRP_DEFAULT,
2507
        &Actions::dropItem,
2508
        InputAction::NO_VALUE, 50,
2509
        InputCondition::KEY_DOWN |
2510
            InputCondition::GAME |
2511
            InputCondition::VALIDSPEED,
2512
        "dropn",
2513
        UseArgs_false,
2514
        Protected_true},
2515
    {"keySwitchQuickDrop",
2516
        addKey(SDLK_i),
2517
        emptyKey,
2518
        Input::GRP_DEFAULT,
2519
        &Actions::switchQuickDrop,
2520
        InputAction::NO_VALUE, 50,
2521
        InputCondition::KEY_DOWN |
2522
            InputCondition::GAME |
2523
            InputCondition::VALIDSPEED,
2524
        "",
2525
        UseArgs_false,
2526
        Protected_true},
2527
    {"keyMagicInma1",
2528
        addKey(SDLK_c),
2529
        emptyKey,
2530
        Input::GRP_DEFAULT,
2531
        &Actions::heal,
2532
        InputAction::NO_VALUE, 50,
2533
        InputCondition::KEY_DOWN |
2534
            InputCondition::GAME |
2535
            InputCondition::VALIDSPEED,
2536
        "heal",
2537
        UseArgs_true,
2538
        Protected_false},
2539
    {"keyMagicItenplz",
2540
        addKey(SDLK_m),
2541
        emptyKey,
2542
        Input::GRP_DEFAULT,
2543
        &Actions::itenplz,
2544
        InputAction::NO_VALUE, 50,
2545
        InputCondition::KEY_DOWN |
2546
            InputCondition::GAME |
2547
            InputCondition::VALIDSPEED,
2548
        "itenplz",
2549
        UseArgs_false,
2550
        Protected_true},
2551
    {"keyMagicAttack",
2552
        addKey(SDLK_b),
2553
        emptyKey,
2554
        Input::GRP_DEFAULT,
2555
        &Actions::magicAttack,
2556
        InputAction::NO_VALUE, 50,
2557
        InputCondition::KEY_DOWN |
2558
            InputCondition::GAME |
2559
            InputCondition::NOFOLLOW |
2560
            InputCondition::VALIDSPEED,
2561
        "magicattack",
2562
        UseArgs_false,
2563
        Protected_false},
2564
    {"keySwitchMagicAttack",
2565
        addKey(SDLK_COMMA),
2566
        emptyKey,
2567
        Input::GRP_DEFAULT,
2568
        &Actions::changeMagicAttackType,
2569
        InputAction::NO_VALUE, 50,
2570
        InputCondition::KEY_DOWN |
2571
            InputCondition::GAME |
2572
            InputCondition::VALIDSPEED |
2573
            InputCondition::EMODS,
2574
        "",
2575
        UseArgs_false,
2576
        Protected_true},
2577
    {"keySwitchPvpAttack",
2578
        defaultAction(&Actions::changePvpMode),
2579
        InputCondition::KEY_DOWN |
2580
            InputCondition::GAME |
2581
            InputCondition::VALIDSPEED |
2582
            InputCondition::EMODS,
2583
        "",
2584
        UseArgs_false,
2585
        Protected_true},
2586
    {"keyInvertDirection",
2587
        defaultAction(&Actions::changeMoveType),
2588
        InputCondition::KEY_DOWN |
2589
            InputCondition::GAME |
2590
            InputCondition::VALIDSPEED |
2591
            InputCondition::EMODS,
2592
        "",
2593
        UseArgs_false,
2594
        Protected_false},
2595
    {"keyChangeAttackWeaponType",
2596
        addKey(SDLK_g),
2597
        emptyKey,
2598
        Input::GRP_DEFAULT,
2599
        &Actions::changeAttackWeaponType,
2600
        InputAction::NO_VALUE, 50,
2601
        InputCondition::KEY_DOWN |
2602
            InputCondition::GAME |
2603
            InputCondition::VALIDSPEED |
2604
            InputCondition::EMODS,
2605
        "",
2606
        UseArgs_false,
2607
        Protected_true},
2608
    {"keyChangeAttackType",
2609
        addKey(SDLK_END),
2610
        emptyKey,
2611
        Input::GRP_DEFAULT,
2612
        &Actions::changeAttackType,
2613
        InputAction::NO_VALUE, 50,
2614
        InputCondition::KEY_DOWN |
2615
            InputCondition::GAME |
2616
            InputCondition::VALIDSPEED |
2617
            InputCondition::EMODS,
2618
        "",
2619
        UseArgs_false,
2620
        Protected_true},
2621
    {"keyChangeFollowMode",
2622
        addKey(SDLK_KP1),
2623
        emptyKey,
2624
        Input::GRP_DEFAULT,
2625
        &Actions::changeFollowMode,
2626
        InputAction::NO_VALUE, 50,
2627
        InputCondition::KEY_DOWN |
2628
            InputCondition::GAME |
2629
            InputCondition::VALIDSPEED |
2630
            InputCondition::EMODS,
2631
        "",
2632
        UseArgs_false,
2633
        Protected_true},
2634
    {"keyChangeImitationMode",
2635
        addKey(SDLK_KP4),
2636
        emptyKey,
2637
        Input::GRP_DEFAULT,
2638
        &Actions::changeImitationMode,
2639
        InputAction::NO_VALUE, 50,
2640
        InputCondition::KEY_DOWN |
2641
            InputCondition::GAME |
2642
            InputCondition::VALIDSPEED |
2643
            InputCondition::EMODS,
2644
        "",
2645
        UseArgs_false,
2646
        Protected_true},
2647
    {"keyDisableGameModifiers",
2648
        addKey(SDLK_KP8),
2649
        emptyKey,
2650
        Input::GRP_DEFAULT,
2651
        &Actions::changeGameModifier,
2652
        InputAction::NO_VALUE, 50,
2653
        InputCondition::KEY_DOWN |
2654
            InputCondition::GAME |
2655
            InputCondition::VALIDSPEED,
2656
        "",
2657
        UseArgs_false,
2658
        Protected_true},
2659
    {"keyChangeAudio",
2660
        addKey(SDLK_KP3),
2661
        emptyKey,
2662
        Input::GRP_DEFAULT,
2663
        &Actions::changeAudio,
2664
        InputAction::NO_VALUE, 50,
2665
        InputCondition::KEY_DOWN |
2666
            InputCondition::GAME |
2667
            InputCondition::VALIDSPEED,
2668
        "audio",
2669
        UseArgs_false,
2670
        Protected_true},
2671
    {"keyAway",
2672
        addKey(SDLK_KP2),
2673
        emptyKey,
2674
        Input::GRP_DEFAULT,
2675
        &Actions::away,
2676
        InputAction::NO_VALUE, 50,
2677
        InputCondition::KEY_DOWN |
2678
            InputCondition::GAME |
2679
            InputCondition::VALIDSPEED,
2680
        "",
2681
        UseArgs_false,
2682
        Protected_false},
2683
    {"keyRightClick",
2684
        addKey(SDLK_TAB),
2685
        emptyKey,
2686
        Input::GRP_DEFAULT,
2687
        &Actions::mouseClick,
2688
        InputAction::NO_VALUE, 50,
2689
        InputCondition::KEY_DOWN |
2690
            InputCondition::NOINPUT |
2691
            InputCondition::NOAWAY |
2692
            InputCondition::NOMODAL |
2693
            InputCondition::INGAME,
2694
        "rightclick",
2695
        UseArgs_false,
2696
        Protected_false},
2697
    {"keyCameraMode",
2698
        addKey(SDLK_KP_PLUS),
2699
        emptyKey,
2700
        Input::GRP_DEFAULT,
2701
        &Actions::camera,
2702
        InputAction::NO_VALUE, 50,
2703
        InputCondition::KEY_DOWN |
2704
            InputCondition::GAME |
2705
            InputCondition::VALIDSPEED |
2706
            InputCondition::EMODS,
2707
        "",
2708
        UseArgs_false,
2709
        Protected_false},
2710
    {"keyMod",
2711
        emptyKey,
2712
        emptyKey,
2713
        0,
2714
        nullptr,
2715
        InputAction::NO_VALUE, 50,
2716
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2717
        "",
2718
        UseArgs_false,
2719
        Protected_false},
2720
    {"keyGUIUp",
2721
        addKey(SDLK_UP),
2722
        emptyKey,
2723
        Input::GRP_GUICHAN,
2724
        nullptr,
2725
        InputAction::NO_VALUE, 50,
2726
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2727
        "",
2728
        UseArgs_false,
2729
        Protected_false},
2730
    {"keyGUIDown",
2731
        addKey(SDLK_DOWN),
2732
        emptyKey,
2733
        Input::GRP_GUICHAN,
2734
        nullptr,
2735
        InputAction::NO_VALUE, 50,
2736
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2737
        "",
2738
        UseArgs_false,
2739
        Protected_false},
2740
    {"keyGUILeft",
2741
        addKey(SDLK_LEFT),
2742
        emptyKey,
2743
        Input::GRP_GUICHAN,
2744
        nullptr,
2745
        InputAction::NO_VALUE, 50,
2746
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2747
        "",
2748
        UseArgs_false,
2749
        Protected_false},
2750
    {"keyGUIRight",
2751
        addKey(SDLK_RIGHT),
2752
        emptyKey,
2753
        Input::GRP_GUICHAN,
2754
        nullptr,
2755
        InputAction::NO_VALUE, 50,
2756
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2757
        "",
2758
        UseArgs_false,
2759
        Protected_false},
2760
    {"keyGUISelect",
2761
        addKey(SDLK_SPACE),
2762
        emptyKey,
2763
        Input::GRP_GUICHAN,
2764
        nullptr,
2765
        InputAction::NO_VALUE, 50,
2766
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2767
        "",
2768
        UseArgs_false,
2769
        Protected_false},
2770
    {"keyGUISelect2",
2771
        addKey(SDLK_RETURN),
2772
        emptyKey,
2773
        Input::GRP_GUICHAN,
2774
        nullptr,
2775
        InputAction::NO_VALUE, 50,
2776
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2777
        "",
2778
        UseArgs_false,
2779
        Protected_false},
2780
    {"keyGUICancel",
2781
        addKey(SDLK_ESCAPE),
2782
#if defined(USE_SDL2) && defined(ANDROID)
2783
        addKey(SDLK_AC_BACK),
2784
#else  // defined(USE_SDL2) && defined(ANDROID)
2785
        emptyKey,
2786
#endif  // defined(USE_SDL2) && defined(ANDROID)
2787
        Input::GRP_GUICHAN,
2788
        nullptr,
2789
        InputAction::NO_VALUE, 50,
2790
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2791
        "",
2792
        UseArgs_false,
2793
        Protected_false},
2794
    {"keyGUIHome",
2795
        addKey(SDLK_HOME),
2796
        emptyKey,
2797
        Input::GRP_GUICHAN,
2798
        nullptr,
2799
        InputAction::NO_VALUE, 50,
2800
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2801
        "",
2802
        UseArgs_false,
2803
        Protected_false},
2804
    {"keyGUIEnd",
2805
        addKey(SDLK_END),
2806
        emptyKey,
2807
        Input::GRP_GUICHAN,
2808
        nullptr,
2809
        InputAction::NO_VALUE, 50,
2810
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2811
        "",
2812
        UseArgs_false,
2813
        Protected_false},
2814
    {"keyGUIDelete",
2815
        addKey(SDLK_DELETE),
2816
        emptyKey,
2817
        Input::GRP_GUICHAN,
2818
        nullptr,
2819
        InputAction::NO_VALUE, 50,
2820
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2821
        "",
2822
        UseArgs_false,
2823
        Protected_false},
2824
    {"keyGUIBackSpace",
2825
        addKey(SDLK_BACKSPACE),
2826
        emptyKey,
2827
        Input::GRP_GUICHAN,
2828
        nullptr,
2829
        InputAction::NO_VALUE, 50,
2830
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2831
        "",
2832
        UseArgs_false,
2833
        Protected_false},
2834
    {"keyGUITab",
2835
        addKey(SDLK_TAB),
2836
        emptyKey,
2837
        Input::GRP_GUICHAN,
2838
        nullptr,
2839
        InputAction::NO_VALUE, 50,
2840
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2841
        "",
2842
        UseArgs_false,
2843
        Protected_false},
2844
    {"keyGUIPageUp",
2845
        addKey(SDLK_PAGEUP),
2846
        emptyKey,
2847
        Input::GRP_GUICHAN,
2848
        nullptr,
2849
        InputAction::NO_VALUE, 50,
2850
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2851
        "",
2852
        UseArgs_false,
2853
        Protected_false},
2854
    {"keyGUIPageDown",
2855
        addKey(SDLK_PAGEDOWN),
2856
        emptyKey,
2857
        Input::GRP_GUICHAN,
2858
        nullptr,
2859
        InputAction::NO_VALUE, 50,
2860
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2861
        "",
2862
        UseArgs_false,
2863
        Protected_false},
2864
    {"keyGUIInsert",
2865
        addKey(SDLK_INSERT),
2866
        emptyKey,
2867
        Input::GRP_GUICHAN,
2868
        nullptr,
2869
        InputAction::NO_VALUE, 50,
2870
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2871
        "",
2872
        UseArgs_false,
2873
        Protected_false},
2874
    {"keyGUIMod",
2875
        addKey(SDLK_LSHIFT),
2876
        addKey(SDLK_RSHIFT),
2877
        Input::GRP_GUICHAN,
2878
        nullptr,
2879
        InputAction::NO_VALUE, 50,
2880
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2881
        "",
2882
        UseArgs_false,
2883
        Protected_false},
2884
    {"keySafeVideo",
2885
        addKey(SDLK_KP_MINUS),
2886
        emptyKey,
2887
        Input::GRP_DEFAULT,
2888
        &Actions::safeVideoMode,
2889
        InputAction::NO_VALUE, 50,
2890
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2891
        "",
2892
        UseArgs_false,
2893
        Protected_true},
2894
    {"keyStopSit",
2895
        defaultAction(&Actions::stopSit),
2896
        InputCondition::KEY_DOWN |
2897
            InputCondition::DEFAULT |
2898
            InputCondition::INGAME,
2899
        "sit2",
2900
        UseArgs_false,
2901
        Protected_false},
2902
    {"keyShowKeyboard",
2903
        defaultAction(&Actions::showKeyboard),
2904
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2905
        "showkeyboard",
2906
        UseArgs_false,
2907
        Protected_false},
2908
    {"keyShowWindows",
2909
        defaultAction(&Actions::showWindows),
2910
        InputCondition::KEY_DOWN |
2911
            InputCondition::DEFAULT |
2912
            InputCondition::INGAME,
2913
        "showwindows",
2914
        UseArgs_false,
2915
        Protected_false},
2916
    {"keyChatMod",
2917
        addKey(SDLK_LSHIFT),
2918
        emptyKey,
2919
        Input::GRP_CHAT,
2920
        nullptr,
2921
        InputAction::NO_VALUE, 50,
2922
        InputCondition::KEY_DOWN |
2923
            InputCondition::DEFAULT |
2924
            InputCondition::INGAME,
2925
        "",
2926
        UseArgs_false,
2927
        Protected_false},
2928
    {"keyMoveForward",
2929
        defaultAction(&Actions::moveForward),
2930
        InputCondition::KEY_DOWN | InputCondition::ARROWKEYS,
2931
        "",
2932
        UseArgs_false,
2933
        Protected_false},
2934
    {"keyGUICtrl",
2935
        addKey(SDLK_LCTRL),
2936
        addKey(SDLK_RCTRL),
2937
        Input::GRP_GUICHAN,
2938
        nullptr,
2939
        InputAction::NO_VALUE, 50,
2940
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2941
        "",
2942
        UseArgs_false,
2943
        Protected_false},
2944
    {"keyGUIb",
2945
        addKey(SDLK_b),
2946
        emptyKey,
2947
        Input::GRP_GUICHAN,
2948
        nullptr,
2949
        InputAction::NO_VALUE, 50,
2950
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2951
        "",
2952
        UseArgs_false,
2953
        Protected_false},
2954
    {"keyGUIc",
2955
        addKey(SDLK_c),
2956
        emptyKey,
2957
        Input::GRP_GUICHAN,
2958
        nullptr,
2959
        InputAction::NO_VALUE, 50,
2960
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2961
        "",
2962
        UseArgs_false,
2963
        Protected_false},
2964
    {"keyGUId",
2965
        addKey(SDLK_d),
2966
        emptyKey,
2967
        Input::GRP_GUICHAN,
2968
        nullptr,
2969
        InputAction::NO_VALUE, 50,
2970
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2971
        "",
2972
        UseArgs_false,
2973
        Protected_false},
2974
    {"keyGUIe",
2975
        addKey(SDLK_e),
2976
        emptyKey,
2977
        Input::GRP_GUICHAN,
2978
        nullptr,
2979
        InputAction::NO_VALUE, 50,
2980
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2981
        "",
2982
        UseArgs_false,
2983
        Protected_false},
2984
    {"keyGUIf",
2985
        addKey(SDLK_f),
2986
        emptyKey,
2987
        Input::GRP_GUICHAN,
2988
        nullptr,
2989
        InputAction::NO_VALUE, 50,
2990
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2991
        "",
2992
        UseArgs_false,
2993
        Protected_false},
2994
    {"keyGUIh",
2995
        addKey(SDLK_h),
2996
        emptyKey,
2997
        Input::GRP_GUICHAN,
2998
        nullptr,
2999
        InputAction::NO_VALUE, 50,
3000
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3001
        "",
3002
        UseArgs_false,
3003
        Protected_false},
3004
    {"keyGUIk",
3005
        addKey(SDLK_k),
3006
        emptyKey,
3007
        Input::GRP_GUICHAN,
3008
        nullptr,
3009
        InputAction::NO_VALUE, 50,
3010
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3011
        "",
3012
        UseArgs_false,
3013
        Protected_false},
3014
    {"keyGUIu",
3015
        addKey(SDLK_u),
3016
        emptyKey,
3017
        Input::GRP_GUICHAN,
3018
        nullptr,
3019
        InputAction::NO_VALUE, 50,
3020
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3021
        "",
3022
        UseArgs_false,
3023
        Protected_false},
3024
    {"keyGUIv",
3025
        addKey(SDLK_v),
3026
        emptyKey,
3027
        Input::GRP_GUICHAN,
3028
        nullptr,
3029
        InputAction::NO_VALUE, 50,
3030
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3031
        "",
3032
        UseArgs_false,
3033
        Protected_false},
3034
    {"keyGUIw",
3035
        addKey(SDLK_w),
3036
        emptyKey,
3037
        Input::GRP_GUICHAN,
3038
        nullptr,
3039
        InputAction::NO_VALUE, 50,
3040
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3041
        "",
3042
        UseArgs_false,
3043
        Protected_false},
3044
    {"keyShortcutsPrevTab",
3045
        emptyKey,
3046
        emptyKey,
3047
        Input::GRP_DEFAULT | Input::GRP_GUI,
3048
        &Actions::prevShortcutsTab,
3049
        InputAction::NO_VALUE, 50,
3050
        InputCondition::KEY_DOWN |
3051
            InputCondition::NOINPUT |
3052
            InputCondition::INGAME,
3053
        "shortcutprevtab",
3054
        UseArgs_false,
3055
        Protected_false},
3056
    {"keyShortcutsNextTab",
3057
        emptyKey,
3058
        emptyKey,
3059
        Input::GRP_DEFAULT | Input::GRP_GUI,
3060
        &Actions::nextShortcutsTab,
3061
        InputAction::NO_VALUE, 50,
3062
        InputCondition::KEY_DOWN |
3063
            InputCondition::NOINPUT |
3064
            InputCondition::INGAME,
3065
        "shortcutnexttab",
3066
        UseArgs_false,
3067
        Protected_false},
3068
    {"keyCommandsPrevTab",
3069
        emptyKey,
3070
        emptyKey,
3071
        Input::GRP_DEFAULT | Input::GRP_GUI,
3072
        &Actions::prevCommandsTab,
3073
        InputAction::NO_VALUE, 50,
3074
        InputCondition::KEY_DOWN |
3075
            InputCondition::NOINPUT |
3076
            InputCondition::INGAME,
3077
        "commandsprevtab",
3078
        UseArgs_false,
3079
        Protected_false},
3080
    {"keyCommandsNextTab",
3081
        emptyKey,
3082
        emptyKey,
3083
        Input::GRP_DEFAULT | Input::GRP_GUI,
3084
        &Actions::nextCommandsTab,
3085
        InputAction::NO_VALUE, 50,
3086
        InputCondition::KEY_DOWN |
3087
            InputCondition::NOINPUT |
3088
            InputCondition::INGAME,
3089
        "commandsnexttab",
3090
        UseArgs_false,
3091
        Protected_false},
3092
    {"keyOpenTrade",
3093
        defaultAction(&Actions::openTrade),
3094
        InputCondition::KEY_DOWN |
3095
            InputCondition::GAME |
3096
            InputCondition::NOTARGET,
3097
        "trade",
3098
        UseArgs_false,
3099
        Protected_false},
3100
    {"keyGUIF1",
3101
        addKey(SDLK_F1),
3102
        emptyKey,
3103
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3104
        nullptr,
3105
        InputAction::NO_VALUE, 50,
3106
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3107
        "",
3108
        UseArgs_false,
3109
        Protected_false},
3110
    {"keyGUIF2",
3111
        addKey(SDLK_F2),
3112
        emptyKey,
3113
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3114
        nullptr,
3115
        InputAction::NO_VALUE, 50,
3116
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3117
        "",
3118
        UseArgs_false,
3119
        Protected_false},
3120
    {"keyGUIF3",
3121
        addKey(SDLK_F3),
3122
        emptyKey,
3123
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3124
        nullptr,
3125
        InputAction::NO_VALUE, 50,
3126
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3127
        "",
3128
        UseArgs_false,
3129
        Protected_false},
3130
    {"keyGUIF4",
3131
        addKey(SDLK_F4),
3132
        emptyKey,
3133
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3134
        nullptr,
3135
        InputAction::NO_VALUE, 50,
3136
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3137
        "",
3138
        UseArgs_false,
3139
        Protected_false},
3140
    {"keyGUIF5",
3141
        addKey(SDLK_F5),
3142
        emptyKey,
3143
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3144
        nullptr,
3145
        InputAction::NO_VALUE, 50,
3146
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3147
        "",
3148
        UseArgs_false,
3149
        Protected_false},
3150
    {"keyGUIF6",
3151
        addKey(SDLK_F6),
3152
        emptyKey,
3153
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3154
        nullptr,
3155
        InputAction::NO_VALUE, 50,
3156
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3157
        "",
3158
        UseArgs_false,
3159
        Protected_false},
3160
    {"keyGUIF7",
3161
        addKey(SDLK_F7),
3162
        emptyKey,
3163
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3164
        nullptr,
3165
        InputAction::NO_VALUE, 50,
3166
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3167
        "",
3168
        UseArgs_false,
3169
        Protected_false},
3170
    {"keyGUIF8",
3171
        addKey(SDLK_F8),
3172
        emptyKey,
3173
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3174
        nullptr,
3175
        InputAction::NO_VALUE, 50,
3176
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3177
        "",
3178
        UseArgs_false,
3179
        Protected_false},
3180
    {"keyGUIF9",
3181
        addKey(SDLK_F9),
3182
        emptyKey,
3183
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3184
        nullptr,
3185
        InputAction::NO_VALUE, 50,
3186
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3187
        "",
3188
        UseArgs_false,
3189
        Protected_false},
3190
    {"keyGUIF10",
3191
        addKey(SDLK_F10),
3192
        emptyKey,
3193
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3194
        nullptr,
3195
        InputAction::NO_VALUE, 50,
3196
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3197
        "",
3198
        UseArgs_false,
3199
        Protected_false},
3200
    {"keyGUIF11",
3201
        addKey(SDLK_F11),
3202
        emptyKey,
3203
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3204
        nullptr,
3205
        InputAction::NO_VALUE, 50,
3206
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3207
        "",
3208
        UseArgs_false,
3209
        Protected_false},
3210
    {"keyGUIF12",
3211
        addKey(SDLK_F12),
3212
        emptyKey,
3213
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3214
        nullptr,
3215
        InputAction::NO_VALUE, 50,
3216
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3217
        "",
3218
        UseArgs_false,
3219
        Protected_false},
3220
    {"keyWindowAbout",
3221
        emptyKey,
3222
        emptyKey,
3223
        Input::GRP_DEFAULT | Input::GRP_GUI,
3224
        &Actions::aboutWindowShow,
3225
        InputAction::NO_VALUE, 50,
3226
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT0,
3227
        "about",
3228
        UseArgs_false,
3229
        Protected_false},
3230
    {"keyWindowUpdater",
3231
        emptyKey,
3232
        emptyKey,
3233
        Input::GRP_DEFAULT | Input::GRP_GUI,
3234
        &Actions::updaterWindowShow,
3235
        InputAction::NO_VALUE, 50,
3236
        InputCondition::KEY_DOWN | InputCondition::GAME,
3237
        "updater",
3238
        UseArgs_false,
3239
        Protected_false},
3240
    {"keyTargetClosestMonster",
3241
        emptyKey,
3242
        emptyKey,
3243
        Input::GRP_DEFAULT | Input::GRP_REPEAT,
3244
        &Actions::targetClosestMonster,
3245
        InputAction::NO_VALUE, 50,
3246
        InputCondition::KEY_DOWN |
3247
            InputCondition::GAME |
3248
            InputCondition::NOTARGET |
3249
            InputCondition::VALIDSPEED,
3250
        "targetclosestmonster",
3251
        UseArgs_false,
3252
        Protected_false},
3253
    {"keyChatCloseAllTabs",
3254
        emptyKey,
3255
        emptyKey,
3256
        Input::GRP_DEFAULT | Input::GRP_GUI,
3257
        &Actions::closeAllChatTabs,
3258
        InputAction::NO_VALUE, 50,
3259
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3260
        "closeall",
3261
        UseArgs_false,
3262
        Protected_true},
3263
    {"keyChatIgnoreAllWhispers",
3264
        emptyKey,
3265
        emptyKey,
3266
        Input::GRP_DEFAULT | Input::GRP_GUI,
3267
        &Actions::ignoreAllWhispers,
3268
        InputAction::NO_VALUE, 50,
3269
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3270
        "ignoreallwhispers",
3271
        UseArgs_false,
3272
        Protected_true},
3273
    {"keyChatAnnounce",
3274
        emptyKey,
3275
        emptyKey,
3276
        Input::GRP_DEFAULT | Input::GRP_GUI,
3277
        &Actions::chatAnnounce,
3278
        InputAction::NO_VALUE, 50,
3279
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3280
        "announce",
3281
        UseArgs_true,
3282
        Protected_true},
3283
    {"keyIpcToggle",
3284
        defaultAction(&Actions::ipcToggle),
3285
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3286
        "ipctoggle",
3287
        UseArgs_false,
3288
        Protected_true},
3289
    {"keyWhere",
3290
        defaultAction(&Actions::where),
3291
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3292
        "where",
3293
        UseArgs_false,
3294
        Protected_false},
3295
    {"keyWho",
3296
        defaultAction(&Actions::who),
3297
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3298
        "who",
3299
        UseArgs_false,
3300
        Protected_false},
3301
    {"keyWhisper",
3302
        defaultAction(&Actions::msg),
3303
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3304
        "w|whisper|msg",
3305
        UseArgs_true,
3306
        Protected_true},
3307
    {"keyQuery",
3308
        defaultAction(&Actions::query),
3309
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3310
        "q|query|j|join",
3311
        UseArgs_true,
3312
        Protected_false},
3313
    {"keyClearChatTab",
3314
        defaultAction(&Actions::clearChatTab),
3315
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3316
        "clear",
3317
        UseArgs_false,
3318
        Protected_false},
3319
    {"keyIgnore",
3320
        defaultAction(&Actions::chatIgnore),
3321
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3322
        "ignore",
3323
        UseArgs_true,
3324
        Protected_true},
3325
    {"keyUnignore",
3326
        defaultAction(&Actions::chatUnignore),
3327
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3328
        "unignore",
3329
        UseArgs_true,
3330
        Protected_true},
3331
    {"keyFriend",
3332
        defaultAction(&Actions::chatFriend),
3333
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3334
        "friend|befriend",
3335
        UseArgs_true,
3336
        Protected_true},
3337
    {"keyDisregard",
3338
        defaultAction(&Actions::chatDisregard),
3339
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3340
        "disregard",
3341
        UseArgs_true,
3342
        Protected_true},
3343
    {"keyNeutral",
3344
        defaultAction(&Actions::chatNeutral),
3345
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3346
        "neutral",
3347
        UseArgs_true,
3348
        Protected_true},
3349
    {"keyBlacklist",
3350
        defaultAction(&Actions::chatBlackList),
3351
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3352
        "blacklist",
3353
        UseArgs_true,
3354
        Protected_true},
3355
    {"keyEnemy",
3356
        defaultAction(&Actions::chatEnemy),
3357
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3358
        "enemy",
3359
        UseArgs_true,
3360
        Protected_true},
3361
    {"keyErase",
3362
        defaultAction(&Actions::chatErase),
3363
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3364
        "erase",
3365
        UseArgs_true,
3366
        Protected_true},
3367
    {"keyCleanGraphics",
3368
        defaultAction(&Actions::cleanGraphics),
3369
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3370
        "cleangraphics",
3371
        UseArgs_false,
3372
        Protected_false},
3373
    {"keyCleanFonts",
3374
        defaultAction(&Actions::cleanFonts),
3375
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3376
        "cleanfonts",
3377
        UseArgs_false,
3378
        Protected_false},
3379
    {"keyCreateParty",
3380
        defaultAction(&Actions::createParty),
3381
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3382
        "createparty",
3383
        UseArgs_true,
3384
        Protected_true},
3385
    {"keyCreateGuild",
3386
        defaultAction(&Actions::createGuild),
3387
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3388
        "createguild",
3389
        UseArgs_true,
3390
        Protected_true},
3391
    {"keyParty",
3392
        defaultAction(&Actions::party),
3393
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3394
        "party",
3395
        UseArgs_true,
3396
        Protected_true},
3397
    {"keyMe",
3398
        defaultAction(&Actions::me),
3399
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3400
        "me",
3401
        UseArgs_true,
3402
        Protected_true},
3403
    {"keyToggle",
3404
        defaultAction(&Actions::toggle),
3405
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3406
        "toggle",
3407
        UseArgs_false,
3408
        Protected_false},
3409
    {"keyPresent",
3410
        defaultAction(&Actions::present),
3411
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3412
        "present",
3413
        UseArgs_false,
3414
        Protected_false},
3415
    {"keyPrintAll",
3416
        defaultAction(&Actions::printAll),
3417
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3418
        "all",
3419
        UseArgs_false,
3420
        Protected_true},
3421
    {"keyMove",
3422
        defaultAction(&Actions::move),
3423
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3424
        "move",
3425
        UseArgs_true,
3426
        Protected_false},
3427
    {"keySetTarget",
3428
        defaultAction(&Actions::setTarget),
3429
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3430
        "target",
3431
        UseArgs_true,
3432
        Protected_false},
3433
    {"keyAttackHuman",
3434
        defaultAction(&Actions::attackHuman),
3435
        InputCondition::KEY_DOWN |
3436
            InputCondition::GAME |
3437
            InputCondition::NOFOLLOW |
3438
            InputCondition::VALIDSPEED,
3439
        "atkhuman",
3440
        UseArgs_false,
3441
        Protected_false},
3442
    {"keyOutfit",
3443
        defaultAction(&Actions::commandOutfit),
3444
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3445
        "outfit",
3446
        UseArgs_true,
3447
        Protected_true},
3448
    {"keyEmote",
3449
        defaultAction(&Actions::commandEmote),
3450
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3451
        "emote",
3452
        UseArgs_true,
3453
        Protected_false},
3454
    {"keyEmotePet",
3455
        defaultAction(&Actions::commandEmotePet),
3456
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3457
        "emotepet",
3458
        UseArgs_true,
3459
        Protected_false},
3460
    {"keyAwayMessage",
3461
        defaultAction(&Actions::awayMessage),
3462
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3463
        "away",
3464
        UseArgs_true,
3465
        Protected_true},
3466
    {"keyPseudoAway",
3467
        defaultAction(&Actions::pseudoAway),
3468
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3469
        "pseudoaway",
3470
        UseArgs_true,
3471
        Protected_true},
3472
    {"keyFollow",
3473
        defaultAction(&Actions::follow),
3474
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3475
        "follow",
3476
        UseArgs_true,
3477
        Protected_false},
3478
    {"keyNavigate",
3479
        defaultAction(&Actions::navigate),
3480
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3481
        "navigate",
3482
        UseArgs_true,
3483
        Protected_false},
3484
    {"keyImitation",
3485
        defaultAction(&Actions::imitation),
3486
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3487
        "imitation",
3488
        UseArgs_true,
3489
        Protected_false},
3490
    {"keySendMail",
3491
        defaultAction(&Actions::sendMail),
3492
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3493
        "sendmail|mailsend|mailto",
3494
        UseArgs_true,
3495
        Protected_true},
3496
    {"keyTradeCommand",
3497
        defaultAction(&Actions::trade),
3498
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3499
        "trade",
3500
        UseArgs_true,
3501
        Protected_false},
3502
    {"keyPriceLoad",
3503
        defaultAction(&Actions::priceLoad),
3504
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3505
        "priceload",
3506
        UseArgs_false,
3507
        Protected_true},
3508
    {"keyPriceSave",
3509
        defaultAction(&Actions::priceSave),
3510
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3511
        "pricesave",
3512
        UseArgs_false,
3513
        Protected_true},
3514
    {"keyCacheInfo",
3515
        defaultAction(&Actions::cacheInfo),
3516
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3517
        "cacheinfo",
3518
        UseArgs_false,
3519
        Protected_true},
3520
    {"keyDisconnect",
3521
        defaultAction(&Actions::disconnect),
3522
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3523
        "disconnect",
3524
        UseArgs_false,
3525
        Protected_true},
3526
    {"keyUndress",
3527
        defaultAction(&Actions::undress),
3528
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3529
        "undress",
3530
        UseArgs_true,
3531
        Protected_false},
3532
    {"keyDirs",
3533
        defaultAction(&Actions::dirs),
3534
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3535
        "dirs",
3536
        UseArgs_false,
3537
        Protected_false},
3538
    {"keyInfo",
3539
        defaultAction(&Actions::info),
3540
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3541
        "info",
3542
        UseArgs_false,
3543
        Protected_false},
3544
    {"keyWait",
3545
        defaultAction(&Actions::wait),
3546
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3547
        "wait",
3548
        UseArgs_true,
3549
        Protected_true},
3550
    {"keyUptime",
3551
        defaultAction(&Actions::uptime),
3552
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3553
        "uptime",
3554
        UseArgs_false,
3555
        Protected_false},
3556
    {"keyAddPriorityAttack",
3557
        defaultAction(&Actions::addPriorityAttack),
3558
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3559
        "addpriorityattack",
3560
        UseArgs_true,
3561
        Protected_true},
3562
    {"keyAddAttack",
3563
        defaultAction(&Actions::addAttack),
3564
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3565
        "addattack",
3566
        UseArgs_true,
3567
        Protected_true},
3568
    {"keyRemoveAttack",
3569
        defaultAction(&Actions::removeAttack),
3570
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3571
        "removeattack|removeignoreattack",
3572
        UseArgs_true,
3573
        Protected_true},
3574
    {"keyAddIgnoreAttack",
3575
        defaultAction(&Actions::addIgnoreAttack),
3576
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3577
        "addignoreattack",
3578
        UseArgs_true,
3579
        Protected_true},
3580
    {"keyDump",
3581
        defaultAction(&Actions::dump),
3582
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3583
        "dump",
3584
        UseArgs_false,
3585
        Protected_true},
3586
    {"keyServerIgnoreAll",
3587
        defaultAction(&Actions::serverIgnoreAll),
3588
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3589
        "serverignoreall",
3590
        UseArgs_false,
3591
        Protected_true},
3592
    {"keyServerUnIgnoreAll",
3593
        defaultAction(&Actions::serverUnIgnoreAll),
3594
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3595
        "serverunignoreall",
3596
        UseArgs_false,
3597
        Protected_true},
3598
    {"keySetDrop",
3599
        defaultAction(&Actions::setDrop),
3600
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3601
        "setdrop",
3602
        UseArgs_true,
3603
        Protected_false},
3604
    {"keyError",
3605
        defaultAction(&Actions::error),
3606
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3607
        "error",
3608
        UseArgs_false,
3609
        Protected_true},
3610
    {"keyDumpg",
3611
        defaultAction(&Actions::dumpGraphics),
3612
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3613
        "dumpg",
3614
        UseArgs_false,
3615
        Protected_true},
3616
    {"keyDumpe",
3617
        defaultAction(&Actions::dumpEnvironment),
3618
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3619
        "dumpe",
3620
        UseArgs_false,
3621
        Protected_true},
3622
    {"keyDumpt",
3623
        defaultAction(&Actions::dumpTests),
3624
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3625
        "dumpt",
3626
        UseArgs_false,
3627
        Protected_true},
3628
    {"keyDumpOGL",
3629
        defaultAction(&Actions::dumpOGL),
3630
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3631
        "dumpogl",
3632
        UseArgs_false,
3633
        Protected_true},
3634
    {"keyDumpGL",
3635
        defaultAction(&Actions::dumpGL),
3636
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3637
        "dumpgl",
3638
        UseArgs_false,
3639
        Protected_true},
3640
    {"keyDumpMods",
3641
        defaultAction(&Actions::dumpMods),
3642
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3643
        "dumpMods",
3644
        UseArgs_false,
3645
        Protected_false},
3646
    {"keyUrl",
3647
        defaultAction(&Actions::url),
3648
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3649
        "url",
3650
        UseArgs_true,
3651
        Protected_true},
3652
    {"keyOpenUrl",
3653
        defaultAction(&Actions::openUrl),
3654
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3655
        "open",
3656
        UseArgs_true,
3657
        Protected_true},
3658
    {"keyExecute",
3659
        defaultAction(&Actions::execute),
3660
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3661
        "execute",
3662
        UseArgs_true,
3663
        Protected_true},
3664
    {"keyTestSdlFont",
3665
        emptyKey,
3666
        emptyKey,
3667
        Input::GRP_DEFAULT,
3668
#if defined USE_OPENGL && defined DEBUG_SDLFONT
3669
        &Actions::testSdlFont,
3670
#else  // defined USE_OPENGL && defined DEBUG_SDLFONT
3671
        nullptr,
3672
#endif  // defined USE_OPENGL && defined DEBUG_SDLFONT
3673
        InputAction::NO_VALUE, 50,
3674
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3675
#if defined USE_OPENGL && defined DEBUG_SDLFONT
3676
        "testsdlfont",
3677
#else  // defined USE_OPENGL && defined DEBUG_SDLFONT
3678
        "",
3679
#endif  // defined USE_OPENGL && defined DEBUG_SDLFONT
3680
        UseArgs_false,
3681
        Protected_true},
3682
    {"keyEnableHightlight",
3683
        defaultAction(&Actions::enableHighlight),
3684
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3685
        "enablehighlight",
3686
        UseArgs_false,
3687
        Protected_true},
3688
    {"keyDisableHightlight",
3689
        defaultAction(&Actions::disableHighlight),
3690
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3691
        "disablehighlight",
3692
        UseArgs_false,
3693
        Protected_true},
3694
    {"keyDontRemoveName",
3695
        defaultAction(&Actions::dontRemoveName),
3696
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3697
        "dontremovename",
3698
        UseArgs_false,
3699
        Protected_true},
3700
    {"keyRemoveName",
3701
        defaultAction(&Actions::removeName),
3702
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3703
        "removename",
3704
        UseArgs_false,
3705
        Protected_true},
3706
    {"keyDisableAway",
3707
        defaultAction(&Actions::disableAway),
3708
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3709
        "disableaway",
3710
        UseArgs_false,
3711
        Protected_true},
3712
    {"keyEnableAway",
3713
        defaultAction(&Actions::enableAway),
3714
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3715
        "enableaway",
3716
        UseArgs_false,
3717
        Protected_true},
3718
    {"keyTestParticle",
3719
        defaultAction(&Actions::testParticle),
3720
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3721
        "testparticle",
3722
        UseArgs_true,
3723
        Protected_false},
3724
    {"keyCreateItems",
3725
        defaultAction(&Actions::createItems),
3726
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3727
        "createitems",
3728
        UseArgs_false,
3729
        Protected_false},
3730
    {"keyTalkRaw",
3731
        defaultAction(&Actions::talkRaw),
3732
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3733
        "talkraw",
3734
        UseArgs_true,
3735
        Protected_true},
3736
    {"keyTalkPet",
3737
        defaultAction(&Actions::talkPet),
3738
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3739
        "talkpet",
3740
        UseArgs_true,
3741
        Protected_true},
3742
    {"keyUploadConfig",
3743
        defaultAction(&Actions::uploadConfig),
3744
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3745
        "uploadconfig",
3746
        UseArgs_false,
3747
        Protected_true},
3748
    {"keyUploadServerConfig",
3749
        defaultAction(&Actions::uploadServerConfig),
3750
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3751
        "uploadserverconfig",
3752
        UseArgs_false,
3753
        Protected_true},
3754
    {"keyUploadLog",
3755
        defaultAction(&Actions::uploadLog),
3756
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3757
        "uploadlog",
3758
        UseArgs_false,
3759
        Protected_true},
3760
    {"keyGm",
3761
        defaultAction(&Actions::gm),
3762
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3763
        "gm",
3764
        UseArgs_true,
3765
        Protected_true},
3766
    {"keyHack",
3767
        defaultAction(&Actions::hack),
3768
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3769
        "hack",
3770
        UseArgs_true,
3771
        Protected_true},
3772
    {"keyDebugSpawn",
3773
        defaultAction(&Actions::debugSpawn),
3774
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3775
        "debugspawn",
3776
        UseArgs_true,
3777
        Protected_true},
3778
    {"keyPetSmilie",
3779
        defaultAction(nullptr),
3780
        InputCondition::KEY_DOWN |
3781
            InputCondition::DEFAULT |
3782
            InputCondition::INGAME,
3783
        "",
3784
        UseArgs_false,
3785
        Protected_false},
3786
    {"keyPetEmoteShortcut1",
3787
        addKey(SDLK_1),
3788
        emptyKey,
3789
        Input::GRP_PET_EMOTION,
3790
        &Actions::petEmote,
3791
        InputAction::PET_EMOTE, 100,
3792
        InputCondition::KEY_DOWN | InputCondition::GAME,
3793
        "",
3794
        UseArgs_false,
3795
        Protected_false},
3796
    {"keyPetEmoteShortcut2",
3797
        addKey(SDLK_2),
3798
        emptyKey,
3799
        Input::GRP_PET_EMOTION,
3800
        &Actions::petEmote,
3801
        InputAction::PET_EMOTE, 100,
3802
        InputCondition::KEY_DOWN | InputCondition::GAME,
3803
        "",
3804
        UseArgs_false,
3805
        Protected_false},
3806
    {"keyPetEmoteShortcut3",
3807
        addKey(SDLK_3),
3808
        emptyKey,
3809
        Input::GRP_PET_EMOTION,
3810
        &Actions::petEmote,
3811
        InputAction::PET_EMOTE, 100,
3812
        InputCondition::KEY_DOWN | InputCondition::GAME,
3813
        "",
3814
        UseArgs_false,
3815
        Protected_false},
3816
    {"keyPetEmoteShortcut4",
3817
        addKey(SDLK_4),
3818
        emptyKey,
3819
        Input::GRP_PET_EMOTION,
3820
        &Actions::petEmote,
3821
        InputAction::PET_EMOTE, 100,
3822
        InputCondition::KEY_DOWN | InputCondition::GAME,
3823
        "",
3824
        UseArgs_false,
3825
        Protected_false},
3826
    {"keyPetEmoteShortcut5",
3827
        addKey(SDLK_5),
3828
        emptyKey,
3829
        Input::GRP_PET_EMOTION,
3830
        &Actions::petEmote,
3831
        InputAction::PET_EMOTE, 100,
3832
        InputCondition::KEY_DOWN | InputCondition::GAME,
3833
        "",
3834
        UseArgs_false,
3835
        Protected_false},
3836
    {"keyPetEmoteShortcut6",
3837
        addKey(SDLK_6),
3838
        emptyKey,
3839
        Input::GRP_PET_EMOTION,
3840
        &Actions::petEmote,
3841
        InputAction::PET_EMOTE, 100,
3842
        InputCondition::KEY_DOWN | InputCondition::GAME,
3843
        "",
3844
        UseArgs_false,
3845
        Protected_false},
3846
    {"keyPetEmoteShortcut7",
3847
        addKey(SDLK_7),
3848
        emptyKey,
3849
        Input::GRP_PET_EMOTION,
3850
        &Actions::petEmote,
3851
        InputAction::PET_EMOTE, 100,
3852
        InputCondition::KEY_DOWN | InputCondition::GAME,
3853
        "",
3854
        UseArgs_false,
3855
        Protected_false},
3856
    {"keyPetEmoteShortcut8",
3857
        addKey(SDLK_8),
3858
        emptyKey,
3859
        Input::GRP_PET_EMOTION,
3860
        &Actions::petEmote,
3861
        InputAction::PET_EMOTE, 100,
3862
        InputCondition::KEY_DOWN | InputCondition::GAME,
3863
        "",
3864
        UseArgs_false,
3865
        Protected_false},
3866
    {"keyPetEmoteShortcut9",
3867
        addKey(SDLK_9),
3868
        emptyKey,
3869
        Input::GRP_PET_EMOTION,
3870
        &Actions::petEmote,
3871
        InputAction::PET_EMOTE, 100,
3872
        InputCondition::KEY_DOWN | InputCondition::GAME,
3873
        "",
3874
        UseArgs_false,
3875
        Protected_false},
3876
    {"keyPetEmoteShortcut10",
3877
        addKey(SDLK_0),
3878
        emptyKey,
3879
        Input::GRP_PET_EMOTION,
3880
        &Actions::petEmote,
3881
        InputAction::PET_EMOTE, 100,
3882
        InputCondition::KEY_DOWN | InputCondition::GAME,
3883
        "",
3884
        UseArgs_false,
3885
        Protected_false},
3886
    {"keyPetEmoteShortcut11",
3887
        addKey(SDLK_MINUS),
3888
        emptyKey,
3889
        Input::GRP_PET_EMOTION,
3890
        &Actions::petEmote,
3891
        InputAction::PET_EMOTE, 100,
3892
        InputCondition::KEY_DOWN | InputCondition::GAME,
3893
        "",
3894
        UseArgs_false,
3895
        Protected_false},
3896
    {"keyPetEmoteShortcut12",
3897
        addKey(SDLK_EQUALS),
3898
        emptyKey,
3899
        Input::GRP_PET_EMOTION,
3900
        &Actions::petEmote,
3901
        InputAction::PET_EMOTE, 100,
3902
        InputCondition::KEY_DOWN | InputCondition::GAME,
3903
        "",
3904
        UseArgs_false,
3905
        Protected_false},
3906
    {"keyPetEmoteShortcut13",
3907
        addKey(SDLK_BACKSPACE),
3908
        emptyKey,
3909
        Input::GRP_PET_EMOTION,
3910
        &Actions::petEmote,
3911
        InputAction::PET_EMOTE, 100,
3912
        InputCondition::KEY_DOWN | InputCondition::GAME,
3913
        "",
3914
        UseArgs_false,
3915
        Protected_false},
3916
    {"keyPetEmoteShortcut14",
3917
        addKey(SDLK_INSERT),
3918
        emptyKey,
3919
        Input::GRP_PET_EMOTION,
3920
        &Actions::petEmote,
3921
        InputAction::PET_EMOTE, 100,
3922
        InputCondition::KEY_DOWN | InputCondition::GAME,
3923
        "",
3924
        UseArgs_false,
3925
        Protected_false},
3926
    {"keyPetEmoteShortcut15",
3927
        addKey(SDLK_HOME),
3928
        emptyKey,
3929
        Input::GRP_PET_EMOTION,
3930
        &Actions::petEmote,
3931
        InputAction::PET_EMOTE, 100,
3932
        InputCondition::KEY_DOWN | InputCondition::GAME,
3933
        "",
3934
        UseArgs_false,
3935
        Protected_false},
3936
    {"keyPetEmoteShortcut16",
3937
        addKey(SDLK_q),
3938
        emptyKey,
3939
        Input::GRP_PET_EMOTION,
3940
        &Actions::petEmote,
3941
        InputAction::PET_EMOTE, 100,
3942
        InputCondition::KEY_DOWN | InputCondition::GAME,
3943
        "",
3944
        UseArgs_false,
3945
        Protected_false},
3946
    {"keyPetEmoteShortcut17",
3947
        addKey(SDLK_w),
3948
        emptyKey,
3949
        Input::GRP_PET_EMOTION,
3950
        &Actions::petEmote,
3951
        InputAction::PET_EMOTE, 100,
3952
        InputCondition::KEY_DOWN | InputCondition::GAME,
3953
        "",
3954
        UseArgs_false,
3955
        Protected_false},
3956
    {"keyPetEmoteShortcut18",
3957
        addKey(SDLK_e),
3958
        emptyKey,
3959
        Input::GRP_PET_EMOTION,
3960
        &Actions::petEmote,
3961
        InputAction::PET_EMOTE, 100,
3962
        InputCondition::KEY_DOWN | InputCondition::GAME,
3963
        "",
3964
        UseArgs_false,
3965
        Protected_false},
3966
    {"keyPetEmoteShortcut19",
3967
        addKey(SDLK_r),
3968
        emptyKey,
3969
        Input::GRP_PET_EMOTION,
3970
        &Actions::petEmote,
3971
        InputAction::PET_EMOTE, 100,
3972
        InputCondition::KEY_DOWN | InputCondition::GAME,
3973
        "",
3974
        UseArgs_false,
3975
        Protected_false},
3976
    {"keyPetEmoteShortcut20",
3977
        addKey(SDLK_t),
3978
        emptyKey,
3979
        Input::GRP_PET_EMOTION,
3980
        &Actions::petEmote,
3981
        InputAction::PET_EMOTE, 100,
3982
        InputCondition::KEY_DOWN | InputCondition::GAME,
3983
        "",
3984
        UseArgs_false,
3985
        Protected_false},
3986
    {"keyPetEmoteShortcut21",
3987
        addKey(SDLK_y),
3988
        emptyKey,
3989
        Input::GRP_PET_EMOTION,
3990
        &Actions::petEmote,
3991
        InputAction::PET_EMOTE, 100,
3992
        InputCondition::KEY_DOWN | InputCondition::GAME,
3993
        "",
3994
        UseArgs_false,
3995
        Protected_false},
3996
    {"keyPetEmoteShortcut22",
3997
        addKey(SDLK_u),
3998
        emptyKey,
3999
        Input::GRP_PET_EMOTION,
4000
        &Actions::petEmote,
4001
        InputAction::PET_EMOTE, 100,
4002
        InputCondition::KEY_DOWN | InputCondition::GAME,
4003
        "",
4004
        UseArgs_false,
4005
        Protected_false},
4006
    {"keyPetEmoteShortcut23",
4007
        addKey(SDLK_i),
4008
        emptyKey,
4009
        Input::GRP_PET_EMOTION,
4010
        &Actions::petEmote,
4011
        InputAction::PET_EMOTE, 100,
4012
        InputCondition::KEY_DOWN | InputCondition::GAME,
4013
        "",
4014
        UseArgs_false,
4015
        Protected_false},
4016
    {"keyPetEmoteShortcut24",
4017
        addKey(SDLK_o),
4018
        emptyKey,
4019
        Input::GRP_PET_EMOTION,
4020
        &Actions::petEmote,
4021
        InputAction::PET_EMOTE, 100,
4022
        InputCondition::KEY_DOWN | InputCondition::GAME,
4023
        "",
4024
        UseArgs_false,
4025
        Protected_false},
4026
    {"keyPetEmoteShortcut25",
4027
        addKey(SDLK_p),
4028
        emptyKey,
4029
        Input::GRP_PET_EMOTION,
4030
        &Actions::petEmote,
4031
        InputAction::PET_EMOTE, 100,
4032
        InputCondition::KEY_DOWN | InputCondition::GAME,
4033
        "",
4034
        UseArgs_false,
4035
        Protected_false},
4036
    {"keyPetEmoteShortcut26",
4037
        addKey(SDLK_LEFTBRACKET),
4038
        emptyKey,
4039
        Input::GRP_PET_EMOTION,
4040
        &Actions::petEmote,
4041
        InputAction::PET_EMOTE, 100,
4042
        InputCondition::KEY_DOWN | InputCondition::GAME,
4043
        "",
4044
        UseArgs_false,
4045
        Protected_false},
4046
    {"keyPetEmoteShortcut27",
4047
        addKey(SDLK_RIGHTBRACKET),
4048
        emptyKey,
4049
        Input::GRP_PET_EMOTION,
4050
        &Actions::petEmote,
4051
        InputAction::PET_EMOTE, 100,
4052
        InputCondition::KEY_DOWN | InputCondition::GAME,
4053
        "",
4054
        UseArgs_false,
4055
        Protected_false},
4056
    {"keyPetEmoteShortcut28",
4057
        addKey(SDLK_BACKSLASH),
4058
        emptyKey,
4059
        Input::GRP_PET_EMOTION,
4060
        &Actions::petEmote,
4061
        InputAction::PET_EMOTE, 100,
4062
        InputCondition::KEY_DOWN | InputCondition::GAME,
4063
        "",
4064
        UseArgs_false,
4065
        Protected_false},
4066
    {"keyPetEmoteShortcut29",
4067
        addKey(SDLK_a),
4068
        emptyKey,
4069
        Input::GRP_PET_EMOTION,
4070
        &Actions::petEmote,
4071
        InputAction::PET_EMOTE, 100,
4072
        InputCondition::KEY_DOWN | InputCondition::GAME,
4073
        "",
4074
        UseArgs_false,
4075
        Protected_false},
4076
    {"keyPetEmoteShortcut30",
4077
        addKey(SDLK_s),
4078
        emptyKey,
4079
        Input::GRP_PET_EMOTION,
4080
        &Actions::petEmote,
4081
        InputAction::PET_EMOTE, 100,
4082
        InputCondition::KEY_DOWN | InputCondition::GAME,
4083
        "",
4084
        UseArgs_false,
4085
        Protected_false},
4086
    {"keyPetEmoteShortcut31",
4087
        addKey(SDLK_d),
4088
        emptyKey,
4089
        Input::GRP_PET_EMOTION,
4090
        &Actions::petEmote,
4091
        InputAction::PET_EMOTE, 100,
4092
        InputCondition::KEY_DOWN | InputCondition::GAME,
4093
        "",
4094
        UseArgs_false,
4095
        Protected_false},
4096
    {"keyPetEmoteShortcut32",
4097
        addKey(SDLK_f),
4098
        emptyKey,
4099
        Input::GRP_PET_EMOTION,
4100
        &Actions::petEmote,
4101
        InputAction::PET_EMOTE, 100,
4102
        InputCondition::KEY_DOWN | InputCondition::GAME,
4103
        "",
4104
        UseArgs_false,
4105
        Protected_false},
4106
    {"keyPetEmoteShortcut33",
4107
        addKey(SDLK_g),
4108
        emptyKey,
4109
        Input::GRP_PET_EMOTION,
4110
        &Actions::petEmote,
4111
        InputAction::PET_EMOTE, 100,
4112
        InputCondition::KEY_DOWN | InputCondition::GAME,
4113
        "",
4114
        UseArgs_false,
4115
        Protected_false},
4116
    {"keyPetEmoteShortcut34",
4117
        addKey(SDLK_h),
4118
        emptyKey,
4119
        Input::GRP_PET_EMOTION,
4120
        &Actions::petEmote,
4121
        InputAction::PET_EMOTE, 100,
4122
        InputCondition::KEY_DOWN | InputCondition::GAME,
4123
        "",
4124
        UseArgs_false,
4125
        Protected_false},
4126
    {"keyPetEmoteShortcut35",
4127
        addKey(SDLK_j),
4128
        emptyKey,
4129
        Input::GRP_PET_EMOTION,
4130
        &Actions::petEmote,
4131
        InputAction::PET_EMOTE, 100,
4132
        InputCondition::KEY_DOWN | InputCondition::GAME,
4133
        "",
4134
        UseArgs_false,
4135
        Protected_false},
4136
    {"keyPetEmoteShortcut36",
4137
        addKey(SDLK_k),
4138
        emptyKey,
4139
        Input::GRP_PET_EMOTION,
4140
        &Actions::petEmote,
4141
        InputAction::PET_EMOTE, 100,
4142
        InputCondition::KEY_DOWN | InputCondition::GAME,
4143
        "",
4144
        UseArgs_false,
4145
        Protected_false},
4146
    {"keyPetEmoteShortcut37",
4147
        addKey(SDLK_l),
4148
        emptyKey,
4149
        Input::GRP_PET_EMOTION,
4150
        &Actions::petEmote,
4151
        InputAction::PET_EMOTE, 100,
4152
        InputCondition::KEY_DOWN | InputCondition::GAME,
4153
        "",
4154
        UseArgs_false,
4155
        Protected_false},
4156
    {"keyPetEmoteShortcut38",
4157
        addKey(SDLK_SEMICOLON),
4158
        emptyKey,
4159
        Input::GRP_PET_EMOTION,
4160
        &Actions::petEmote,
4161
        InputAction::PET_EMOTE, 100,
4162
        InputCondition::KEY_DOWN | InputCondition::GAME,
4163
        "",
4164
        UseArgs_false,
4165
        Protected_false},
4166
    {"keyPetEmoteShortcut39",
4167
        addKey(SDLK_QUOTE),
4168
        emptyKey,
4169
        Input::GRP_PET_EMOTION,
4170
        &Actions::petEmote,
4171
        InputAction::PET_EMOTE, 100,
4172
        InputCondition::KEY_DOWN | InputCondition::GAME,
4173
        "",
4174
        UseArgs_false,
4175
        Protected_false},
4176
    {"keyPetEmoteShortcut40",
4177
        addKey(SDLK_z),
4178
        emptyKey,
4179
        Input::GRP_PET_EMOTION,
4180
        &Actions::petEmote,
4181
        InputAction::PET_EMOTE, 100,
4182
        InputCondition::KEY_DOWN | InputCondition::GAME,
4183
        "",
4184
        UseArgs_false,
4185
        Protected_false},
4186
    {"keyPetEmoteShortcut41",
4187
        addKey(SDLK_x),
4188
        emptyKey,
4189
        Input::GRP_PET_EMOTION,
4190
        &Actions::petEmote,
4191
        InputAction::PET_EMOTE, 100,
4192
        InputCondition::KEY_DOWN | InputCondition::GAME,
4193
        "",
4194
        UseArgs_false,
4195
        Protected_false},
4196
    {"keyPetEmoteShortcut42",
4197
        addKey(SDLK_c),
4198
        emptyKey,
4199
        Input::GRP_PET_EMOTION,
4200
        &Actions::petEmote,
4201
        InputAction::PET_EMOTE, 100,
4202
        InputCondition::KEY_DOWN | InputCondition::GAME,
4203
        "",
4204
        UseArgs_false,
4205
        Protected_false},
4206
    {"keyPetEmoteShortcut43",
4207
        addKey(SDLK_v),
4208
        emptyKey,
4209
        Input::GRP_PET_EMOTION,
4210
        &Actions::petEmote,
4211
        InputAction::PET_EMOTE, 100,
4212
        InputCondition::KEY_DOWN | InputCondition::GAME,
4213
        "",
4214
        UseArgs_false,
4215
        Protected_false},
4216
    {"keyPetEmoteShortcut44",
4217
        addKey(SDLK_b),
4218
        emptyKey,
4219
        Input::GRP_PET_EMOTION,
4220
        &Actions::petEmote,
4221
        InputAction::PET_EMOTE, 100,
4222
        InputCondition::KEY_DOWN | InputCondition::GAME,
4223
        "",
4224
        UseArgs_false,
4225
        Protected_false},
4226
    {"keyPetEmoteShortcut45",
4227
        addKey(SDLK_n),
4228
        emptyKey,
4229
        Input::GRP_PET_EMOTION,
4230
        &Actions::petEmote,
4231
        InputAction::PET_EMOTE, 100,
4232
        InputCondition::KEY_DOWN | InputCondition::GAME,
4233
        "",
4234
        UseArgs_false,
4235
        Protected_false},
4236
    {"keyPetEmoteShortcut46",
4237
        addKey(SDLK_m),
4238
        emptyKey,
4239
        Input::GRP_PET_EMOTION,
4240
        &Actions::petEmote,
4241
        InputAction::PET_EMOTE, 100,
4242
        InputCondition::KEY_DOWN | InputCondition::GAME,
4243
        "",
4244
        UseArgs_false,
4245
        Protected_false},
4246
    {"keyPetEmoteShortcut47",
4247
        addKey(SDLK_COMMA),
4248
        emptyKey,
4249
        Input::GRP_PET_EMOTION,
4250
        &Actions::petEmote,
4251
        InputAction::PET_EMOTE, 100,
4252
        InputCondition::KEY_DOWN | InputCondition::GAME,
4253
        "",
4254
        UseArgs_false,
4255
        Protected_false},
4256
    {"keyPetEmoteShortcut48",
4257
        addKey(SDLK_PERIOD),
4258
        emptyKey,
4259
        Input::GRP_PET_EMOTION,
4260
        &Actions::petEmote,
4261
        InputAction::PET_EMOTE, 100,
4262
        InputCondition::KEY_DOWN | InputCondition::GAME,
4263
        "",
4264
        UseArgs_false,
4265
        Protected_false},
4266
    {"keyCatchPet",
4267
        defaultAction(&Actions::catchPet),
4268
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4269
        "catchpet|catch|taming",
4270
        UseArgs_true,
4271
        Protected_true},
4272
    {"keyChatServerIgnoreWhisper",
4273
        emptyKey,
4274
        emptyKey,
4275
        Input::GRP_DEFAULT | Input::GRP_GUI,
4276
        &Actions::serverIgnoreWhisper,
4277
        InputAction::NO_VALUE, 50,
4278
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4279
        "serverignore",
4280
        UseArgs_false,
4281
        Protected_true},
4282
    {"keyChatServerUnIgnoreWhisper",
4283
        emptyKey,
4284
        emptyKey,
4285
        Input::GRP_DEFAULT | Input::GRP_GUI,
4286
        &Actions::serverUnIgnoreWhisper,
4287
        InputAction::NO_VALUE, 50,
4288
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4289
        "serverunignore",
4290
        UseArgs_false,
4291
        Protected_true},
4292
    {"keyMercenaryFire",
4293
        defaultAction(&Actions::mercenaryFire),
4294
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4295
        "mercenaryfire|firemercenary",
4296
        UseArgs_false,
4297
        Protected_true},
4298
    {"keyTargetMercenary",
4299
        defaultAction(&Actions::targetMercenary),
4300
        InputCondition::KEY_DOWN |
4301
            InputCondition::INGAME |
4302
            InputCondition::NOTARGET,
4303
        "targetmercenary",
4304
        UseArgs_false,
4305
        Protected_false},
4306
    {"keyTargetPet",
4307
        defaultAction(&Actions::targetPet),
4308
        InputCondition::KEY_DOWN |
4309
            InputCondition::INGAME |
4310
            InputCondition::NOTARGET,
4311
        "targetpet",
4312
        UseArgs_false,
4313
        Protected_false},
4314
    {"keyPetSetName",
4315
        defaultAction(&Actions::setPetName),
4316
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4317
        "setpetname|petsetname",
4318
        UseArgs_false,
4319
        Protected_true},
4320
    {"keyHomunculusSetName",
4321
        defaultAction(&Actions::setHomunculusName),
4322
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4323
        "sethomunname|homunsetname|sethomunculusname|homunculussetname",
4324
        UseArgs_false,
4325
        Protected_true},
4326
    {"keyHomunculusFire",
4327
        defaultAction(&Actions::fireHomunculus),
4328
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4329
        "firehomunculus|homunculusfire|firehomun|homunfire",
4330
        UseArgs_false,
4331
        Protected_true},
4332
    {"keyWindowBank",
4333
        emptyKey,
4334
        emptyKey,
4335
        Input::GRP_DEFAULT | Input::GRP_GUI,
4336
        &Actions::bankWindowShow,
4337
        InputAction::NO_VALUE, 50,
4338
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT0,
4339
        "bank|openbank",
4340
        UseArgs_false,
4341
        Protected_false},
4342
    {"keyInventoryPrevTab",
4343
        emptyKey,
4344
        emptyKey,
4345
        Input::GRP_DEFAULT | Input::GRP_GUI,
4346
        &Actions::prevInvTab,
4347
        InputAction::NO_VALUE, 50,
4348
        InputCondition::KEY_DOWN |
4349
            InputCondition::NOINPUT |
4350
            InputCondition::INGAME,
4351
        "previnvtab",
4352
        UseArgs_false,
4353
        Protected_false},
4354
    {"keyInventoryNextTab",
4355
        emptyKey,
4356
        emptyKey,
4357
        Input::GRP_DEFAULT | Input::GRP_GUI,
4358
        &Actions::nextInvTab,
4359
        InputAction::NO_VALUE, 50,
4360
        InputCondition::KEY_DOWN |
4361
            InputCondition::NOINPUT |
4362
            InputCondition::INGAME,
4363
        "nextinvtab",
4364
        UseArgs_false,
4365
        Protected_false},
4366
    {"keyContextMenu",
4367
        defaultAction(&Actions::contextMenu),
4368
        InputCondition::KEY_DOWN |
4369
            InputCondition::NOINPUT |
4370
            InputCondition::NOAWAY |
4371
            InputCondition::NOMODAL |
4372
            InputCondition::INGAME,
4373
        "contextmenu",
4374
        UseArgs_false,
4375
        Protected_false},
4376
    {"keyBuy",
4377
        defaultAction(&Actions::buy),
4378
        InputCondition::KEY_DOWN | InputCondition::GAME,
4379
        "buy",
4380
        UseArgs_false,
4381
        Protected_false},
4382
    {"keySell",
4383
        defaultAction(&Actions::sell),
4384
        InputCondition::KEY_DOWN | InputCondition::GAME,
4385
        "sell",
4386
        UseArgs_false,
4387
        Protected_false},
4388
    {"keyWhisper2",
4389
        defaultAction(&Actions::msg2),
4390
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4391
        "w2|whisper2|msg2",
4392
        UseArgs_true,
4393