GCC Code Coverage Report
Directory: src/ Exec Total Coverage
File: src/input/inputactionmap.h Lines: 2 2 100.0 %
Date: 2021-03-17 Branches: 672 1344 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-2019  The ManaPlus Developers
6
 *  Copyright (C) 2019-2021  Andrei Karas
7
 *
8
 *  This file is part of The ManaPlus Client.
9
 *
10
 *  This program is free software; you can redistribute it and/or modify
11
 *  it under the terms of the GNU General Public License as published by
12
 *  the Free Software Foundation; either version 2 of the License, or
13
 *  any later version.
14
 *
15
 *  This program is distributed in the hope that it will be useful,
16
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 *  GNU General Public License for more details.
19
 *
20
 *  You should have received a copy of the GNU General Public License
21
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
22
 */
23
24
#ifndef INPUT_INPUTACTIONMAP_H
25
#define INPUT_INPUTACTIONMAP_H
26
27
#include "sdlshared.h"
28
29
#include "actions/actions.h"
30
#include "actions/chat.h"
31
#include "actions/commands.h"
32
#include "actions/move.h"
33
#include "actions/pets.h"
34
#include "actions/statusbar.h"
35
#include "actions/tabs.h"
36
#include "actions/target.h"
37
#include "actions/windows.h"
38
39
#include "enums/input/inputcondition.h"
40
#include "enums/input/inputgroup.h"
41
42
#include "input/inputactiondata.h"
43
#include "input/inputmanager.h"
44
45
#include "localconsts.h"
46
47
#define defaultAction(name) \
48
        InputType::UNKNOWN, -1, \
49
        InputType::UNKNOWN, -1, \
50
        Input::GRP_DEFAULT, \
51
        name, \
52
        InputAction::NO_VALUE, 50
53
54
#define addKey(name) InputType::KEYBOARD, name
55
#define emptyKey InputType::UNKNOWN, -1
56
#define joystickButton(num) InputType::JOYSTICK, num
57
58
// keyData must be in same order as enum keyAction.
59
6
static const InputActionData inputActionData
60
    [CAST_SIZE(InputAction::TOTAL)] =
61
    {
62
    {"keyMoveUp",
63
        addKey(SDLK_UP),
64
        emptyKey,
65
        Input::GRP_DEFAULT,
66
        &Actions::moveUp,
67
        InputAction::NO_VALUE, 50,
68
        InputCondition::KEY_DOWN | InputCondition::ARROWKEYS,
69
        "",
70
        UseArgs_false,
71
        Protected_false},
72
    {"keyMoveDown",
73
        addKey(SDLK_DOWN),
74
        emptyKey,
75
        Input::GRP_DEFAULT,
76
        &Actions::moveDown,
77
        InputAction::NO_VALUE, 50,
78
        InputCondition::KEY_DOWN | InputCondition::ARROWKEYS,
79
        "",
80
        UseArgs_false,
81
        Protected_false},
82
    {"keyMoveLeft",
83
        addKey(SDLK_LEFT),
84
        emptyKey,
85
        Input::GRP_DEFAULT,
86
        &Actions::moveLeft,
87
        InputAction::NO_VALUE, 50,
88
        InputCondition::KEY_DOWN | InputCondition::ARROWKEYS,
89
        "",
90
        UseArgs_false,
91
        Protected_false},
92
    {"keyMoveRight",
93
        addKey(SDLK_RIGHT),
94
        emptyKey,
95
        Input::GRP_DEFAULT,
96
        &Actions::moveRight,
97
        InputAction::NO_VALUE, 50,
98
        InputCondition::KEY_DOWN | InputCondition::ARROWKEYS,
99
        "",
100
        UseArgs_false,
101
        Protected_false},
102
    {"keyAttack",
103
        addKey(SDLK_x),
104
#ifdef __SWITCH__
105
        joystickButton(9),
106
#else
107
        emptyKey,
108
#endif
109
        Input::GRP_DEFAULT | Input::GRP_REPEAT,
110
        &Actions::attack,
111
        InputAction::NO_VALUE, 50,
112
        InputCondition::KEY_DOWN |
113
            InputCondition::GAME |
114
            InputCondition::NOFOLLOW |
115
            InputCondition::VALIDSPEED,
116
        "attack",
117
        UseArgs_false,
118
        Protected_false},
119
    {"keyTargetAttack",
120
        addKey(SDLK_LCTRL),
121
        joystickButton(0),
122
        Input::GRP_DEFAULT,
123
        &Actions::targetAttack,
124
        InputAction::NO_VALUE, 50,
125
        InputCondition::KEY_DOWN |
126
            InputCondition::GAME |
127
            InputCondition::NOFOLLOW |
128
            InputCondition::VALIDSPEED |
129
            InputCondition::ALIVE,
130
        "targetattack",
131
        UseArgs_true,
132
        Protected_false},
133
    {"keyMoveToTarget",
134
        addKey(SDLK_v),
135
#ifdef __SWITCH__
136
        joystickButton(3),
137
#else
138
        emptyKey,
139
#endif
140
        Input::GRP_DEFAULT,
141
        &Actions::moveToTarget,
142
        InputAction::NO_VALUE, 50,
143
        InputCondition::KEY_DOWN |
144
            InputCondition::GAME |
145
            InputCondition::VALIDSPEED,
146
        "movetotarget",
147
        UseArgs_false,
148
        Protected_false},
149
    {"keyChangeMoveToTarget",
150
        addKey(SDLK_PERIOD),
151
        emptyKey,
152
        Input::GRP_DEFAULT,
153
        &Actions::changeMoveToTarget,
154
        InputAction::NO_VALUE, 50,
155
        InputCondition::KEY_DOWN |
156
            InputCondition::GAME |
157
            InputCondition::VALIDSPEED |
158
            InputCondition::EMODS,
159
        "",
160
        UseArgs_false,
161
        Protected_true},
162
    {"keyMoveToHome",
163
        addKey(SDLK_d),
164
        emptyKey,
165
        Input::GRP_DEFAULT,
166
        &Actions::moveToHome,
167
        InputAction::NO_VALUE, 50,
168
        InputCondition::KEY_DOWN |
169
            InputCondition::GAME |
170
            InputCondition::VALIDSPEED,
171
        "movetohome",
172
        UseArgs_false,
173
        Protected_false},
174
    {"keySetHome",
175
        addKey(SDLK_KP5),
176
        emptyKey,
177
        Input::GRP_DEFAULT,
178
        &Actions::setHome,
179
        InputAction::NO_VALUE, 50,
180
        InputCondition::KEY_DOWN |
181
            InputCondition::GAME |
182
            InputCondition::VALIDSPEED,
183
        "sethome",
184
        UseArgs_false,
185
        Protected_true},
186
    {"keyMoveToPoint",
187
        addKey(SDLK_RSHIFT),
188
        emptyKey,
189
        Input::GRP_DEFAULT,
190
        nullptr,
191
        InputAction::NO_VALUE, 50,
192
        InputCondition::KEY_DOWN |
193
            InputCondition::DEFAULT |
194
            InputCondition::INGAME,
195
        "",
196
        UseArgs_false,
197
        Protected_false},
198
    {"keyTalk",
199
        addKey(SDLK_t),
200
#ifdef __SWITCH__
201
        joystickButton(8),
202
#else
203
        emptyKey,
204
#endif
205
        Input::GRP_DEFAULT,
206
        &Actions::talk,
207
        InputAction::NO_VALUE, 50,
208
        InputCondition::KEY_DOWN | InputCondition::GAME,
209
        "talk",
210
        UseArgs_false,
211
        Protected_false},
212
    {"keyTarget",
213
        addKey(SDLK_LSHIFT),
214
#ifdef __SWITCH__
215
        emptyKey,
216
#else
217
        joystickButton(4),
218
#endif
219
        Input::GRP_DEFAULT,
220
        &Actions::stopAttack,
221
        InputAction::NO_VALUE, 50,
222
        InputCondition::KEY_DOWN | InputCondition::GAME,
223
        "stopattack",
224
        UseArgs_false,
225
        Protected_false},
226
    {"keyUnTarget",
227
        defaultAction(&Actions::untarget),
228
        InputCondition::KEY_DOWN | InputCondition::GAME,
229
        "untarget",
230
        UseArgs_false,
231
        Protected_false},
232
    {"keyTargetMonster",
233
        addKey(SDLK_a),
234
#ifdef __SWITCH__
235
        joystickButton(7),
236
#else
237
        joystickButton(3),
238
#endif
239
        Input::GRP_DEFAULT | Input::GRP_REPEAT,
240
        &Actions::targetMonster,
241
        InputAction::NO_VALUE, 50,
242
        InputCondition::KEY_DOWN |
243
            InputCondition::GAME |
244
            InputCondition::NOTARGET |
245
            InputCondition::VALIDSPEED,
246
        "targetmonster",
247
        UseArgs_false,
248
        Protected_false},
249
    {"keyTargetNPC",
250
        addKey(SDLK_n),
251
#ifdef __SWITCH__
252
        joystickButton(6),
253
#else
254
        emptyKey,
255
#endif
256
        Input::GRP_DEFAULT,
257
        &Actions::targetNPC,
258
        InputAction::NO_VALUE, 50,
259
        InputCondition::KEY_DOWN |
260
            InputCondition::GAME |
261
            InputCondition::NOTARGET,
262
        "targetnpc",
263
        UseArgs_false,
264
        Protected_false},
265
    {"keyTargetPlayer",
266
        addKey(SDLK_q),
267
        emptyKey,
268
        Input::GRP_DEFAULT,
269
        &Actions::targetPlayer,
270
        InputAction::NO_VALUE, 50,
271
        InputCondition::KEY_DOWN |
272
            InputCondition::GAME |
273
            InputCondition::NOTARGET,
274
        "targetplayer",
275
        UseArgs_false,
276
        Protected_false},
277
    {"keyPickup",
278
        addKey(SDLK_z),
279
#ifdef __SWITCH__
280
        joystickButton(2),
281
#else
282
        joystickButton(1),
283
#endif
284
        Input::GRP_DEFAULT,
285
        &Actions::pickup,
286
        InputAction::NO_VALUE, 50,
287
        InputCondition::KEY_DOWN |
288
            InputCondition::GAME |
289
            InputCondition::NOTARGET,
290
        "pickup",
291
        UseArgs_false,
292
        Protected_false},
293
    {"keyChangePickupType",
294
        addKey(SDLK_o),
295
        emptyKey,
296
        Input::GRP_DEFAULT,
297
        &Actions::changePickupType,
298
        InputAction::NO_VALUE, 50,
299
        InputCondition::KEY_DOWN |
300
            InputCondition::GAME |
301
            InputCondition::VALIDSPEED |
302
            InputCondition::EMODS,
303
        "",
304
        UseArgs_false,
305
        Protected_true},
306
    {"keyHideWindows",
307
        addKey(SDLK_h),
308
        emptyKey,
309
        Input::GRP_DEFAULT | Input::GRP_GUI,
310
        &Actions::hideWindows,
311
        InputAction::NO_VALUE, 50,
312
        InputCondition::KEY_DOWN |
313
            InputCondition::GAME |
314
            InputCondition::NOTARGET,
315
        "hidewindows",
316
        UseArgs_false,
317
        Protected_true},
318
    {"keyBeingSit",
319
        addKey(SDLK_s),
320
#ifdef __SWITCH__
321
        emptyKey,
322
#else
323
        joystickButton(2),
324
#endif
325
        Input::GRP_DEFAULT,
326
        &Actions::sit,
327
        InputAction::NO_VALUE, 50,
328
        InputCondition::KEY_DOWN |
329
            InputCondition::GAME |
330
            InputCondition::NOTARGET |
331
            InputCondition::NOBLOCK,
332
        "sit",
333
        UseArgs_false,
334
        Protected_false},
335
    {"keyScreenshot",
336
        addKey(SDLK_p),
337
        emptyKey,
338
        Input::GRP_DEFAULT,
339
        &Actions::screenshot,
340
        InputAction::NO_VALUE, 50,
341
        InputCondition::KEY_DOWN |
342
            InputCondition::NOTARGET |
343
            InputCondition::NOINPUT,
344
        "screenshot",
345
        UseArgs_false,
346
        Protected_true},
347
    {"keyTrade",
348
        addKey(SDLK_r),
349
        emptyKey,
350
        Input::GRP_DEFAULT,
351
        &Actions::changeTrade,
352
        InputAction::NO_VALUE, 50,
353
        InputCondition::KEY_DOWN |
354
            InputCondition::GAME |
355
            InputCondition::NOTARGET,
356
        "changetrade",
357
        UseArgs_false,
358
        Protected_true},
359
    {"keyPathfind",
360
        addKey(SDLK_f),
361
        emptyKey,
362
        Input::GRP_DEFAULT,
363
        &Actions::changeMapMode,
364
        InputAction::NO_VALUE, 50,
365
        InputCondition::KEY_DOWN |
366
            InputCondition::GAME |
367
            InputCondition::NOTARGET |
368
            InputCondition::EMODS,
369
        "",
370
        UseArgs_false,
371
        Protected_false},
372
    {"keyOK",
373
        addKey(SDLK_SPACE),
374
        emptyKey,
375
        Input::GRP_DEFAULT | Input::GRP_GUI,
376
        &Actions::ok,
377
        InputAction::NO_VALUE, 50,
378
        InputCondition::KEY_DOWN |
379
            InputCondition::NOMODAL |
380
            InputCondition::NOAWAY |
381
            InputCondition::NONPCINPUT,
382
        "",
383
        UseArgs_false,
384
        Protected_false},
385
    {"keyQuit",
386
        addKey(SDLK_ESCAPE),
387
#if defined(USE_SDL2)
388
#if defined(ANDROID)
389
        addKey(SDLK_AC_BACK),
390
#elif defined(__SWITCH__)
391
        joystickButton(11),
392
#else  // defined(ANDROID)
393
        emptyKey,
394
#endif  // defined(ANDROID)
395
#else  // defined(USE_SDL2)
396
        emptyKey,
397
#endif  // defined(USE_SDL2)
398
        Input::GRP_DEFAULT,
399
        &Actions::quit,
400
        InputAction::NO_VALUE, 50,
401
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
402
        "quit",
403
        UseArgs_false,
404
        Protected_true},
405
    {"keyShortcutsKey",
406
        addKey(SDLK_MENU),
407
        emptyKey,
408
        Input::GRP_DEFAULT,
409
        nullptr,
410
        InputAction::NO_VALUE, 50,
411
        InputCondition::KEY_DOWN |
412
            InputCondition::DEFAULT |
413
            InputCondition::INGAME,
414
        "",
415
        UseArgs_false,
416
        Protected_true},
417
    {"keyShortcut1",
418
        addKey(SDLK_1),
419
        emptyKey,
420
        Input::GRP_DEFAULT,
421
        &Actions::shortcut,
422
        InputAction::NO_VALUE, 50,
423
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
424
        "",
425
        UseArgs_false,
426
        Protected_true},
427
    {"keyShortcut2",
428
        addKey(SDLK_2),
429
        emptyKey,
430
        Input::GRP_DEFAULT,
431
        &Actions::shortcut,
432
        InputAction::NO_VALUE, 50,
433
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
434
        "",
435
        UseArgs_false,
436
        Protected_true},
437
    {"keyShortcut3",
438
        addKey(SDLK_3),
439
        emptyKey,
440
        Input::GRP_DEFAULT,
441
        &Actions::shortcut,
442
        InputAction::NO_VALUE, 50,
443
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
444
        "",
445
        UseArgs_false,
446
        Protected_true},
447
    {"keyShortcut4",
448
        addKey(SDLK_4),
449
        emptyKey,
450
        Input::GRP_DEFAULT,
451
        &Actions::shortcut,
452
        InputAction::NO_VALUE, 50,
453
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
454
        "",
455
        UseArgs_false,
456
        Protected_true},
457
    {"keyShortcut5",
458
        addKey(SDLK_5),
459
        emptyKey,
460
        Input::GRP_DEFAULT,
461
        &Actions::shortcut,
462
        InputAction::NO_VALUE, 50,
463
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
464
        "",
465
        UseArgs_false,
466
        Protected_true},
467
    {"keyShortcut6",
468
        addKey(SDLK_6),
469
        emptyKey,
470
        Input::GRP_DEFAULT,
471
        &Actions::shortcut,
472
        InputAction::NO_VALUE, 50,
473
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
474
        "",
475
        UseArgs_false,
476
        Protected_true},
477
    {"keyShortcut7",
478
        addKey(SDLK_7),
479
        emptyKey,
480
        Input::GRP_DEFAULT,
481
        &Actions::shortcut,
482
        InputAction::NO_VALUE, 50,
483
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
484
        "",
485
        UseArgs_false,
486
        Protected_true},
487
    {"keyShortcut8",
488
        addKey(SDLK_8),
489
        emptyKey,
490
        Input::GRP_DEFAULT,
491
        &Actions::shortcut,
492
        InputAction::NO_VALUE, 50,
493
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
494
        "",
495
        UseArgs_false,
496
        Protected_true},
497
    {"keyShortcut9",
498
        addKey(SDLK_9),
499
        emptyKey,
500
        Input::GRP_DEFAULT,
501
        &Actions::shortcut,
502
        InputAction::NO_VALUE, 50,
503
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
504
        "",
505
        UseArgs_false,
506
        Protected_true},
507
    {"keyShortcut10",
508
        addKey(SDLK_0),
509
        emptyKey,
510
        Input::GRP_DEFAULT,
511
        &Actions::shortcut,
512
        InputAction::NO_VALUE, 50,
513
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
514
        "",
515
        UseArgs_false,
516
        Protected_true},
517
    {"keyShortcut11",
518
        addKey(SDLK_MINUS),
519
        emptyKey,
520
        Input::GRP_DEFAULT,
521
        &Actions::shortcut,
522
        InputAction::NO_VALUE, 50,
523
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
524
        "",
525
        UseArgs_false,
526
        Protected_true},
527
    {"keyShortcut12",
528
        addKey(SDLK_EQUALS),
529
        emptyKey,
530
        Input::GRP_DEFAULT,
531
        &Actions::shortcut,
532
        InputAction::NO_VALUE, 50,
533
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
534
        "",
535
        UseArgs_false,
536
        Protected_true},
537
    {"keyShortcut13",
538
        addKey(SDLK_BACKSPACE),
539
        emptyKey,
540
        Input::GRP_DEFAULT,
541
        &Actions::shortcut,
542
        InputAction::NO_VALUE, 50,
543
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
544
        "",
545
        UseArgs_false,
546
        Protected_true},
547
    {"keyShortcut14",
548
        addKey(SDLK_INSERT),
549
        emptyKey,
550
        Input::GRP_DEFAULT,
551
        &Actions::shortcut,
552
        InputAction::NO_VALUE, 50,
553
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
554
        "",
555
        UseArgs_false,
556
        Protected_true},
557
    {"keyShortcut15",
558
        addKey(SDLK_HOME),
559
        emptyKey,
560
        Input::GRP_DEFAULT,
561
        &Actions::shortcut,
562
        InputAction::NO_VALUE, 50,
563
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
564
        "",
565
        UseArgs_false,
566
        Protected_true},
567
    {"keyShortcut16",
568
        defaultAction(&Actions::shortcut),
569
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
570
        "",
571
        UseArgs_false,
572
        Protected_true},
573
    {"keyShortcut17",
574
        defaultAction(&Actions::shortcut),
575
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
576
        "",
577
        UseArgs_false,
578
        Protected_true},
579
    {"keyShortcut18",
580
        defaultAction(&Actions::shortcut),
581
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
582
        "",
583
        UseArgs_false,
584
        Protected_true},
585
    {"keyShortcut19",
586
        defaultAction(&Actions::shortcut),
587
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
588
        "",
589
        UseArgs_false,
590
        Protected_true},
591
    {"keyShortcut20",
592
        defaultAction(&Actions::shortcut),
593
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT,
594
        "",
595
        UseArgs_false,
596
        Protected_true},
597
    {"keyWindowHelp",
598
        addKey(SDLK_F1),
599
        emptyKey,
600
        Input::GRP_DEFAULT | Input::GRP_GUI,
601
        &Actions::helpWindowShow,
602
        InputAction::NO_VALUE, 50,
603
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT0,
604
        "help|openhelp",
605
        UseArgs_false,
606
        Protected_false},
607
    {"keyWindowStatus",
608
        addKey(SDLK_F2),
609
        emptyKey,
610
        Input::GRP_DEFAULT | Input::GRP_GUI,
611
        &Actions::statusWindowShow,
612
        InputAction::NO_VALUE, 50,
613
        InputCondition::KEY_DOWN |
614
            InputCondition::GAME |
615
            InputCondition::NOTARGET,
616
        "status|openstatus",
617
        UseArgs_false,
618
        Protected_false},
619
    {"keyWindowInventory",
620
        addKey(SDLK_F3),
621
        emptyKey,
622
        Input::GRP_DEFAULT | Input::GRP_GUI,
623
        &Actions::inventoryWindowShow,
624
        InputAction::NO_VALUE, 50,
625
        InputCondition::KEY_DOWN |
626
            InputCondition::GAME |
627
            InputCondition::NOTARGET,
628
        "inventory|openinventory",
629
        UseArgs_false,
630
        Protected_false},
631
    {"keyWindowEquipment",
632
        addKey(SDLK_F4),
633
        emptyKey,
634
        Input::GRP_DEFAULT | Input::GRP_GUI,
635
        &Actions::equipmentWindowShow,
636
        InputAction::NO_VALUE, 50,
637
        InputCondition::KEY_DOWN |
638
            InputCondition::GAME |
639
            InputCondition::NOTARGET,
640
        "equipment|openequipment",
641
        UseArgs_false,
642
        Protected_false},
643
    {"keyWindowSkill",
644
        addKey(SDLK_F5),
645
        emptyKey,
646
        Input::GRP_DEFAULT | Input::GRP_GUI,
647
        &Actions::skillDialogShow,
648
        InputAction::NO_VALUE, 50,
649
        InputCondition::KEY_DOWN |
650
            InputCondition::GAME |
651
            InputCondition::NOTARGET,
652
        "skill|skills|openskills",
653
        UseArgs_false,
654
        Protected_false},
655
    {"keyWindowMinimap",
656
        addKey(SDLK_F6),
657
        emptyKey,
658
        Input::GRP_DEFAULT | Input::GRP_GUI,
659
        &Actions::minimapWindowShow,
660
        InputAction::NO_VALUE, 50,
661
        InputCondition::KEY_DOWN |
662
            InputCondition::GAME |
663
            InputCondition::NOTARGET,
664
        "minimap|openminimap",
665
        UseArgs_false,
666
        Protected_false},
667
    {"keyWindowChat",
668
        addKey(SDLK_F7),
669
        emptyKey,
670
        Input::GRP_DEFAULT | Input::GRP_GUI,
671
        &Actions::chatWindowShow,
672
        InputAction::NO_VALUE, 50,
673
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT0,
674
        "openchat",
675
        UseArgs_false,
676
        Protected_false},
677
    {"keyWindowShortcut",
678
        addKey(SDLK_F8),
679
        emptyKey,
680
        Input::GRP_DEFAULT | Input::GRP_GUI,
681
        &Actions::shortcutWindowShow,
682
        InputAction::NO_VALUE, 50,
683
        InputCondition::KEY_DOWN |
684
            InputCondition::GAME |
685
            InputCondition::NOTARGET,
686
        "openshortcut|openshortcuts",
687
        UseArgs_false,
688
        Protected_false},
689
    {"keyWindowSetup",
690
        addKey(SDLK_F9),
691
        emptyKey,
692
        Input::GRP_DEFAULT | Input::GRP_GUI,
693
        &Actions::setupWindowShow,
694
        InputAction::NO_VALUE, 50,
695
        InputCondition::KEY_DOWN |
696
            InputCondition::NOTARGET |
697
            InputCondition::NOINPUT |
698
            InputCondition::ENABLED,
699
        "setup|opensetup",
700
        UseArgs_false,
701
        Protected_false},
702
    {"keyWindowDebug",
703
        addKey(SDLK_F10),
704
        emptyKey,
705
        Input::GRP_DEFAULT | Input::GRP_GUI,
706
        &Actions::debugWindowShow,
707
        InputAction::NO_VALUE, 50,
708
        InputCondition::KEY_DOWN |
709
            InputCondition::SHORTCUT0 |
710
            InputCondition::NOTARGET,
711
        "debug|opendebug",
712
        UseArgs_false,
713
        Protected_false},
714
    {"keyWindowSocial",
715
        addKey(SDLK_F11),
716
        emptyKey,
717
        Input::GRP_DEFAULT | Input::GRP_GUI,
718
        &Actions::socialWindowShow,
719
        InputAction::NO_VALUE, 50,
720
        InputCondition::KEY_DOWN |
721
            InputCondition::GAME |
722
            InputCondition::NOTARGET,
723
        "social|opensocial",
724
        UseArgs_false,
725
        Protected_false},
726
    {"keyWindowEmoteBar",
727
        addKey(SDLK_F12),
728
        emptyKey,
729
        Input::GRP_DEFAULT | Input::GRP_GUI,
730
        &Actions::emoteShortcutWindowShow,
731
        InputAction::NO_VALUE, 50,
732
        InputCondition::KEY_DOWN |
733
            InputCondition::GAME |
734
            InputCondition::NOTARGET,
735
        "emotes|openemotes",
736
        UseArgs_false,
737
        Protected_false},
738
    {"keyWindowOutfit",
739
        addKey(SDLK_BACKQUOTE),
740
        emptyKey,
741
        Input::GRP_DEFAULT | Input::GRP_GUI,
742
        &Actions::outfitWindowShow,
743
        InputAction::NO_VALUE, 50,
744
        InputCondition::KEY_DOWN |
745
            InputCondition::GAME |
746
            InputCondition::NOTARGET,
747
        "openoutfit|openoutfits",
748
        UseArgs_false,
749
        Protected_false},
750
    {"keyWindowShop",
751
        emptyKey,
752
        emptyKey,
753
        Input::GRP_DEFAULT | Input::GRP_GUI,
754
        &Actions::shopWindowShow,
755
        InputAction::NO_VALUE, 50,
756
        InputCondition::KEY_DOWN |
757
            InputCondition::GAME |
758
            InputCondition::NOTARGET,
759
        "shop|openshop",
760
        UseArgs_false,
761
        Protected_false},
762
    {"keyWindowDrop",
763
        addKey(SDLK_w),
764
        emptyKey,
765
        Input::GRP_DEFAULT | Input::GRP_GUI,
766
        &Actions::dropShortcutWindowShow,
767
        InputAction::NO_VALUE, 50,
768
        InputCondition::KEY_DOWN |
769
            InputCondition::GAME |
770
            InputCondition::NOTARGET,
771
        "opendrop",
772
        UseArgs_false,
773
        Protected_false},
774
    {"keyWindowKills",
775
        addKey(SDLK_e),
776
        emptyKey,
777
        Input::GRP_DEFAULT | Input::GRP_GUI,
778
        &Actions::killStatsWindowShow,
779
        InputAction::NO_VALUE, 50,
780
        InputCondition::KEY_DOWN |
781
            InputCondition::GAME |
782
            InputCondition::NOTARGET,
783
        "kills|openkills",
784
        UseArgs_false,
785
        Protected_false},
786
    {"keyWindowSpells",
787
        addKey(SDLK_j),
788
        emptyKey,
789
        Input::GRP_DEFAULT | Input::GRP_GUI,
790
        &Actions::spellShortcutWindowShow,
791
        InputAction::NO_VALUE, 50,
792
        InputCondition::KEY_DOWN |
793
            InputCondition::GAME |
794
            InputCondition::NOTARGET,
795
        "spells|openspells",
796
        UseArgs_false,
797
        Protected_false},
798
    {"keyWindowBotChecker",
799
        emptyKey,
800
        emptyKey,
801
        Input::GRP_DEFAULT | Input::GRP_GUI,
802
        nullptr,
803
        InputAction::NO_VALUE, 50,
804
        InputCondition::KEY_DOWN |
805
            InputCondition::GAME |
806
            InputCondition::NOTARGET,
807
        "",
808
        UseArgs_false,
809
        Protected_false},
810
    {"keyWindowOnline",
811
        emptyKey,
812
        emptyKey,
813
        Input::GRP_DEFAULT | Input::GRP_GUI,
814
        &Actions::whoIsOnlineWindowShow,
815
        InputAction::NO_VALUE, 50,
816
        InputCondition::KEY_DOWN |
817
            InputCondition::GAME |
818
            InputCondition::NOTARGET,
819
        "online|openonline",
820
        UseArgs_false,
821
        Protected_false},
822
    {"keyWindowDidYouKnow",
823
        emptyKey,
824
        emptyKey,
825
        Input::GRP_DEFAULT | Input::GRP_GUI,
826
        &Actions::didYouKnowWindowShow,
827
        InputAction::NO_VALUE, 50,
828
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT0,
829
        "didyouknow|opendidyouknow",
830
        UseArgs_false,
831
        Protected_false},
832
    {"keyWindowQuests",
833
        addKey(SDLK_LEFTBRACKET),
834
        emptyKey,
835
        Input::GRP_DEFAULT | Input::GRP_GUI,
836
        &Actions::questsWindowShow,
837
        InputAction::NO_VALUE, 50,
838
        InputCondition::KEY_DOWN |
839
            InputCondition::GAME |
840
            InputCondition::NOTARGET,
841
        "quests|openquests",
842
        UseArgs_false,
843
        Protected_false},
844
    {"keySocialPrevTab",
845
        emptyKey,
846
        emptyKey,
847
        Input::GRP_DEFAULT | Input::GRP_GUI,
848
        &Actions::prevSocialTab,
849
        InputAction::NO_VALUE, 50,
850
        InputCondition::KEY_DOWN |
851
            InputCondition::NOINPUT |
852
            InputCondition::INGAME,
853
        "prevsocialtab",
854
        UseArgs_false,
855
        Protected_false},
856
    {"keySocialNextTab",
857
        emptyKey,
858
        emptyKey,
859
        Input::GRP_DEFAULT | Input::GRP_GUI,
860
        &Actions::nextSocialTab,
861
        InputAction::NO_VALUE, 50,
862
        InputCondition::KEY_DOWN |
863
            InputCondition::NOINPUT |
864
            InputCondition::INGAME,
865
        "nextsocialtab",
866
        UseArgs_false,
867
        Protected_false},
868
    {"keySmilie",
869
        addKey(SDLK_LALT),
870
        emptyKey,
871
        Input::GRP_DEFAULT,
872
        nullptr,
873
        InputAction::NO_VALUE, 50,
874
        InputCondition::KEY_DOWN |
875
            InputCondition::DEFAULT |
876
            InputCondition::INGAME,
877
        "",
878
        UseArgs_false,
879
        Protected_true},
880
    {"keyEmoteShortcut1",
881
        addKey(SDLK_1),
882
        emptyKey,
883
        Input::GRP_EMOTION,
884
        &Actions::emote,
885
        InputAction::EMOTE, 100,
886
        InputCondition::KEY_DOWN | InputCondition::GAME,
887
        "",
888
        UseArgs_false,
889
        Protected_true},
890
    {"keyEmoteShortcut2",
891
        addKey(SDLK_2),
892
        emptyKey,
893
        Input::GRP_EMOTION,
894
        &Actions::emote,
895
        InputAction::EMOTE, 100,
896
        InputCondition::KEY_DOWN | InputCondition::GAME,
897
        "",
898
        UseArgs_false,
899
        Protected_true},
900
    {"keyEmoteShortcut3",
901
        addKey(SDLK_3),
902
        emptyKey,
903
        Input::GRP_EMOTION,
904
        &Actions::emote,
905
        InputAction::EMOTE, 100,
906
        InputCondition::KEY_DOWN | InputCondition::GAME,
907
        "",
908
        UseArgs_false,
909
        Protected_true},
910
    {"keyEmoteShortcut4",
911
        addKey(SDLK_4),
912
        emptyKey,
913
        Input::GRP_EMOTION,
914
        &Actions::emote,
915
        InputAction::EMOTE, 100,
916
        InputCondition::KEY_DOWN | InputCondition::GAME,
917
        "",
918
        UseArgs_false,
919
        Protected_true},
920
    {"keyEmoteShortcut5",
921
        addKey(SDLK_5),
922
        emptyKey,
923
        Input::GRP_EMOTION,
924
        &Actions::emote,
925
        InputAction::EMOTE, 100,
926
        InputCondition::KEY_DOWN | InputCondition::GAME,
927
        "",
928
        UseArgs_false,
929
        Protected_true},
930
    {"keyEmoteShortcut6",
931
        addKey(SDLK_6),
932
        emptyKey,
933
        Input::GRP_EMOTION,
934
        &Actions::emote,
935
        InputAction::EMOTE, 100,
936
        InputCondition::KEY_DOWN | InputCondition::GAME,
937
        "",
938
        UseArgs_false,
939
        Protected_true},
940
    {"keyEmoteShortcut7",
941
        addKey(SDLK_7),
942
        emptyKey,
943
        Input::GRP_EMOTION,
944
        &Actions::emote,
945
        InputAction::EMOTE, 100,
946
        InputCondition::KEY_DOWN | InputCondition::GAME,
947
        "",
948
        UseArgs_false,
949
        Protected_true},
950
    {"keyEmoteShortcut8",
951
        addKey(SDLK_8),
952
        emptyKey,
953
        Input::GRP_EMOTION,
954
        &Actions::emote,
955
        InputAction::EMOTE, 100,
956
        InputCondition::KEY_DOWN | InputCondition::GAME,
957
        "",
958
        UseArgs_false,
959
        Protected_true},
960
    {"keyEmoteShortcut9",
961
        addKey(SDLK_9),
962
        emptyKey,
963
        Input::GRP_EMOTION,
964
        &Actions::emote,
965
        InputAction::EMOTE, 100,
966
        InputCondition::KEY_DOWN | InputCondition::GAME,
967
        "",
968
        UseArgs_false,
969
        Protected_true},
970
    {"keyEmoteShortcut10",
971
        addKey(SDLK_0),
972
        emptyKey,
973
        Input::GRP_EMOTION,
974
        &Actions::emote,
975
        InputAction::EMOTE, 100,
976
        InputCondition::KEY_DOWN | InputCondition::GAME,
977
        "",
978
        UseArgs_false,
979
        Protected_true},
980
    {"keyEmoteShortcut11",
981
        addKey(SDLK_MINUS),
982
        emptyKey,
983
        Input::GRP_EMOTION,
984
        &Actions::emote,
985
        InputAction::EMOTE, 100,
986
        InputCondition::KEY_DOWN | InputCondition::GAME,
987
        "",
988
        UseArgs_false,
989
        Protected_true},
990
    {"keyEmoteShortcut12",
991
        addKey(SDLK_EQUALS),
992
        emptyKey,
993
        Input::GRP_EMOTION,
994
        &Actions::emote,
995
        InputAction::EMOTE, 100,
996
        InputCondition::KEY_DOWN | InputCondition::GAME,
997
        "",
998
        UseArgs_false,
999
        Protected_true},
1000
    {"keyEmoteShortcut13",
1001
        addKey(SDLK_BACKSPACE),
1002
        emptyKey,
1003
        Input::GRP_EMOTION,
1004
        &Actions::emote,
1005
        InputAction::EMOTE, 100,
1006
        InputCondition::KEY_DOWN | InputCondition::GAME,
1007
        "",
1008
        UseArgs_false,
1009
        Protected_true},
1010
    {"keyEmoteShortcut14",
1011
        addKey(SDLK_INSERT),
1012
        emptyKey,
1013
        Input::GRP_EMOTION,
1014
        &Actions::emote,
1015
        InputAction::EMOTE, 100,
1016
        InputCondition::KEY_DOWN | InputCondition::GAME,
1017
        "",
1018
        UseArgs_false,
1019
        Protected_true},
1020
    {"keyEmoteShortcut15",
1021
        addKey(SDLK_HOME),
1022
        emptyKey,
1023
        Input::GRP_EMOTION,
1024
        &Actions::emote,
1025
        InputAction::EMOTE, 100,
1026
        InputCondition::KEY_DOWN | InputCondition::GAME,
1027
        "",
1028
        UseArgs_false,
1029
        Protected_true},
1030
    {"keyEmoteShortcut16",
1031
        addKey(SDLK_q),
1032
        emptyKey,
1033
        Input::GRP_EMOTION,
1034
        &Actions::emote,
1035
        InputAction::EMOTE, 100,
1036
        InputCondition::KEY_DOWN | InputCondition::GAME,
1037
        "",
1038
        UseArgs_false,
1039
        Protected_true},
1040
    {"keyEmoteShortcut17",
1041
        addKey(SDLK_w),
1042
        emptyKey,
1043
        Input::GRP_EMOTION,
1044
        &Actions::emote,
1045
        InputAction::EMOTE, 100,
1046
        InputCondition::KEY_DOWN | InputCondition::GAME,
1047
        "",
1048
        UseArgs_false,
1049
        Protected_true},
1050
    {"keyEmoteShortcut18",
1051
        addKey(SDLK_e),
1052
        emptyKey,
1053
        Input::GRP_EMOTION,
1054
        &Actions::emote,
1055
        InputAction::EMOTE, 100,
1056
        InputCondition::KEY_DOWN | InputCondition::GAME,
1057
        "",
1058
        UseArgs_false,
1059
        Protected_true},
1060
    {"keyEmoteShortcut19",
1061
        addKey(SDLK_r),
1062
        emptyKey,
1063
        Input::GRP_EMOTION,
1064
        &Actions::emote,
1065
        InputAction::EMOTE, 100,
1066
        InputCondition::KEY_DOWN | InputCondition::GAME,
1067
        "",
1068
        UseArgs_false,
1069
        Protected_true},
1070
    {"keyEmoteShortcut20",
1071
        addKey(SDLK_t),
1072
        emptyKey,
1073
        Input::GRP_EMOTION,
1074
        &Actions::emote,
1075
        InputAction::EMOTE, 100,
1076
        InputCondition::KEY_DOWN | InputCondition::GAME,
1077
        "",
1078
        UseArgs_false,
1079
        Protected_true},
1080
    {"keyEmoteShortcut21",
1081
        addKey(SDLK_y),
1082
        emptyKey,
1083
        Input::GRP_EMOTION,
1084
        &Actions::emote,
1085
        InputAction::EMOTE, 100,
1086
        InputCondition::KEY_DOWN | InputCondition::GAME,
1087
        "",
1088
        UseArgs_false,
1089
        Protected_true},
1090
    {"keyEmoteShortcut22",
1091
        addKey(SDLK_u),
1092
        emptyKey,
1093
        Input::GRP_EMOTION,
1094
        &Actions::emote,
1095
        InputAction::EMOTE, 100,
1096
        InputCondition::KEY_DOWN | InputCondition::GAME,
1097
        "",
1098
        UseArgs_false,
1099
        Protected_true},
1100
    {"keyEmoteShortcut23",
1101
        addKey(SDLK_i),
1102
        emptyKey,
1103
        Input::GRP_EMOTION,
1104
        &Actions::emote,
1105
        InputAction::EMOTE, 100,
1106
        InputCondition::KEY_DOWN | InputCondition::GAME,
1107
        "",
1108
        UseArgs_false,
1109
        Protected_true},
1110
    {"keyEmoteShortcut24",
1111
        addKey(SDLK_o),
1112
        emptyKey,
1113
        Input::GRP_EMOTION,
1114
        &Actions::emote,
1115
        InputAction::EMOTE, 100,
1116
        InputCondition::KEY_DOWN | InputCondition::GAME,
1117
        "",
1118
        UseArgs_false,
1119
        Protected_true},
1120
    {"keyEmoteShortcut25",
1121
        addKey(SDLK_p),
1122
        emptyKey,
1123
        Input::GRP_EMOTION,
1124
        &Actions::emote,
1125
        InputAction::EMOTE, 100,
1126
        InputCondition::KEY_DOWN | InputCondition::GAME,
1127
        "",
1128
        UseArgs_false,
1129
        Protected_true},
1130
    {"keyEmoteShortcut26",
1131
        addKey(SDLK_LEFTBRACKET),
1132
        emptyKey,
1133
        Input::GRP_EMOTION,
1134
        &Actions::emote,
1135
        InputAction::EMOTE, 100,
1136
        InputCondition::KEY_DOWN | InputCondition::GAME,
1137
        "",
1138
        UseArgs_false,
1139
        Protected_true},
1140
    {"keyEmoteShortcut27",
1141
        addKey(SDLK_RIGHTBRACKET),
1142
        emptyKey,
1143
        Input::GRP_EMOTION,
1144
        &Actions::emote,
1145
        InputAction::EMOTE, 100,
1146
        InputCondition::KEY_DOWN | InputCondition::GAME,
1147
        "",
1148
        UseArgs_false,
1149
        Protected_true},
1150
    {"keyEmoteShortcut28",
1151
        addKey(SDLK_BACKSLASH),
1152
        emptyKey,
1153
        Input::GRP_EMOTION,
1154
        &Actions::emote,
1155
        InputAction::EMOTE, 100,
1156
        InputCondition::KEY_DOWN | InputCondition::GAME,
1157
        "",
1158
        UseArgs_false,
1159
        Protected_true},
1160
    {"keyEmoteShortcut29",
1161
        addKey(SDLK_a),
1162
        emptyKey,
1163
        Input::GRP_EMOTION,
1164
        &Actions::emote,
1165
        InputAction::EMOTE, 100,
1166
        InputCondition::KEY_DOWN | InputCondition::GAME,
1167
        "",
1168
        UseArgs_false,
1169
        Protected_true},
1170
    {"keyEmoteShortcut30",
1171
        addKey(SDLK_s),
1172
        emptyKey,
1173
        Input::GRP_EMOTION,
1174
        &Actions::emote,
1175
        InputAction::EMOTE, 100,
1176
        InputCondition::KEY_DOWN | InputCondition::GAME,
1177
        "",
1178
        UseArgs_false,
1179
        Protected_true},
1180
    {"keyEmoteShortcut31",
1181
        addKey(SDLK_d),
1182
        emptyKey,
1183
        Input::GRP_EMOTION,
1184
        &Actions::emote,
1185
        InputAction::EMOTE, 100,
1186
        InputCondition::KEY_DOWN | InputCondition::GAME,
1187
        "",
1188
        UseArgs_false,
1189
        Protected_true},
1190
    {"keyEmoteShortcut32",
1191
        addKey(SDLK_f),
1192
        emptyKey,
1193
        Input::GRP_EMOTION,
1194
        &Actions::emote,
1195
        InputAction::EMOTE, 100,
1196
        InputCondition::KEY_DOWN | InputCondition::GAME,
1197
        "",
1198
        UseArgs_false,
1199
        Protected_true},
1200
    {"keyEmoteShortcut33",
1201
        addKey(SDLK_g),
1202
        emptyKey,
1203
        Input::GRP_EMOTION,
1204
        &Actions::emote,
1205
        InputAction::EMOTE, 100,
1206
        InputCondition::KEY_DOWN | InputCondition::GAME,
1207
        "",
1208
        UseArgs_false,
1209
        Protected_true},
1210
    {"keyEmoteShortcut34",
1211
        addKey(SDLK_h),
1212
        emptyKey,
1213
        Input::GRP_EMOTION,
1214
        &Actions::emote,
1215
        InputAction::EMOTE, 100,
1216
        InputCondition::KEY_DOWN | InputCondition::GAME,
1217
        "",
1218
        UseArgs_false,
1219
        Protected_true},
1220
    {"keyEmoteShortcut35",
1221
        addKey(SDLK_j),
1222
        emptyKey,
1223
        Input::GRP_EMOTION,
1224
        &Actions::emote,
1225
        InputAction::EMOTE, 100,
1226
        InputCondition::KEY_DOWN | InputCondition::GAME,
1227
        "",
1228
        UseArgs_false,
1229
        Protected_true},
1230
    {"keyEmoteShortcut36",
1231
        addKey(SDLK_k),
1232
        emptyKey,
1233
        Input::GRP_EMOTION,
1234
        &Actions::emote,
1235
        InputAction::EMOTE, 100,
1236
        InputCondition::KEY_DOWN | InputCondition::GAME,
1237
        "",
1238
        UseArgs_false,
1239
        Protected_true},
1240
    {"keyEmoteShortcut37",
1241
        addKey(SDLK_l),
1242
        emptyKey,
1243
        Input::GRP_EMOTION,
1244
        &Actions::emote,
1245
        InputAction::EMOTE, 100,
1246
        InputCondition::KEY_DOWN | InputCondition::GAME,
1247
        "",
1248
        UseArgs_false,
1249
        Protected_true},
1250
    {"keyEmoteShortcut38",
1251
        addKey(SDLK_SEMICOLON),
1252
        emptyKey,
1253
        Input::GRP_EMOTION,
1254
        &Actions::emote,
1255
        InputAction::EMOTE, 100,
1256
        InputCondition::KEY_DOWN | InputCondition::GAME,
1257
        "",
1258
        UseArgs_false,
1259
        Protected_true},
1260
    {"keyEmoteShortcut39",
1261
        addKey(SDLK_QUOTE),
1262
        emptyKey,
1263
        Input::GRP_EMOTION,
1264
        &Actions::emote,
1265
        InputAction::EMOTE, 100,
1266
        InputCondition::KEY_DOWN | InputCondition::GAME,
1267
        "",
1268
        UseArgs_false,
1269
        Protected_true},
1270
    {"keyEmoteShortcut40",
1271
        addKey(SDLK_z),
1272
        emptyKey,
1273
        Input::GRP_EMOTION,
1274
        &Actions::emote,
1275
        InputAction::EMOTE, 100,
1276
        InputCondition::KEY_DOWN | InputCondition::GAME,
1277
        "",
1278
        UseArgs_false,
1279
        Protected_true},
1280
    {"keyEmoteShortcut41",
1281
        addKey(SDLK_x),
1282
        emptyKey,
1283
        Input::GRP_EMOTION,
1284
        &Actions::emote,
1285
        InputAction::EMOTE, 100,
1286
        InputCondition::KEY_DOWN | InputCondition::GAME,
1287
        "",
1288
        UseArgs_false,
1289
        Protected_true},
1290
    {"keyEmoteShortcut42",
1291
        addKey(SDLK_c),
1292
        emptyKey,
1293
        Input::GRP_EMOTION,
1294
        &Actions::emote,
1295
        InputAction::EMOTE, 100,
1296
        InputCondition::KEY_DOWN | InputCondition::GAME,
1297
        "",
1298
        UseArgs_false,
1299
        Protected_true},
1300
    {"keyEmoteShortcut43",
1301
        addKey(SDLK_v),
1302
        emptyKey,
1303
        Input::GRP_EMOTION,
1304
        &Actions::emote,
1305
        InputAction::EMOTE, 100,
1306
        InputCondition::KEY_DOWN | InputCondition::GAME,
1307
        "",
1308
        UseArgs_false,
1309
        Protected_true},
1310
    {"keyEmoteShortcut44",
1311
        addKey(SDLK_b),
1312
        emptyKey,
1313
        Input::GRP_EMOTION,
1314
        &Actions::emote,
1315
        InputAction::EMOTE, 100,
1316
        InputCondition::KEY_DOWN | InputCondition::GAME,
1317
        "",
1318
        UseArgs_false,
1319
        Protected_true},
1320
    {"keyEmoteShortcut45",
1321
        addKey(SDLK_n),
1322
        emptyKey,
1323
        Input::GRP_EMOTION,
1324
        &Actions::emote,
1325
        InputAction::EMOTE, 100,
1326
        InputCondition::KEY_DOWN | InputCondition::GAME,
1327
        "",
1328
        UseArgs_false,
1329
        Protected_true},
1330
    {"keyEmoteShortcut46",
1331
        addKey(SDLK_m),
1332
        emptyKey,
1333
        Input::GRP_EMOTION,
1334
        &Actions::emote,
1335
        InputAction::EMOTE, 100,
1336
        InputCondition::KEY_DOWN | InputCondition::GAME,
1337
        "",
1338
        UseArgs_false,
1339
        Protected_true},
1340
    {"keyEmoteShortcut47",
1341
        addKey(SDLK_COMMA),
1342
        emptyKey,
1343
        Input::GRP_EMOTION,
1344
        &Actions::emote,
1345
        InputAction::EMOTE, 100,
1346
        InputCondition::KEY_DOWN | InputCondition::GAME,
1347
        "",
1348
        UseArgs_false,
1349
        Protected_true},
1350
    {"keyEmoteShortcut48",
1351
        addKey(SDLK_PERIOD),
1352
        emptyKey,
1353
        Input::GRP_EMOTION,
1354
        &Actions::emote,
1355
        InputAction::EMOTE, 100,
1356
        InputCondition::KEY_DOWN | InputCondition::GAME,
1357
        "",
1358
        UseArgs_false,
1359
        Protected_true},
1360
    {"keyWearOutfit",
1361
        addKey(SDLK_RCTRL),
1362
        emptyKey,
1363
        Input::GRP_DEFAULT,
1364
        nullptr,
1365
        InputAction::NO_VALUE, 50,
1366
        InputCondition::KEY_DOWN |
1367
            InputCondition::DEFAULT |
1368
            InputCondition::INGAME,
1369
        "",
1370
        UseArgs_false,
1371
        Protected_true},
1372
    {"keyCopyOutfit",
1373
        addKey(SDLK_RALT),
1374
        emptyKey,
1375
        Input::GRP_DEFAULT,
1376
        nullptr,
1377
        InputAction::NO_VALUE, 50,
1378
        InputCondition::KEY_DOWN |
1379
            InputCondition::DEFAULT |
1380
            InputCondition::INGAME,
1381
        "",
1382
        UseArgs_false,
1383
        Protected_true},
1384
    {"keyCopyEquipedOutfit",
1385
        addKey(SDLK_RIGHTBRACKET),
1386
        emptyKey,
1387
        Input::GRP_DEFAULT,
1388
        &Actions::copyEquippedToOutfit,
1389
        InputAction::NO_VALUE, 50,
1390
        InputCondition::KEY_DOWN |
1391
            InputCondition::GAME |
1392
            InputCondition::VALIDSPEED,
1393
        "copyequippedtooutfit|itemstooutfit",
1394
        UseArgs_false,
1395
        Protected_true},
1396
    {"keyOutfitShortcut1",
1397
        addKey(SDLK_1),
1398
        emptyKey,
1399
        Input::GRP_OUTFIT,
1400
        &Actions::outfit,
1401
        InputAction::NO_VALUE, 100,
1402
        InputCondition::KEY_DOWN | InputCondition::GAME,
1403
        "",
1404
        UseArgs_false,
1405
        Protected_true},
1406
    {"keyOutfitShortcut2",
1407
        addKey(SDLK_2),
1408
        emptyKey,
1409
        Input::GRP_OUTFIT,
1410
        &Actions::outfit,
1411
        InputAction::NO_VALUE, 100,
1412
        InputCondition::KEY_DOWN | InputCondition::GAME,
1413
        "",
1414
        UseArgs_false,
1415
        Protected_true},
1416
    {"keyOutfitShortcut3",
1417
        addKey(SDLK_3),
1418
        emptyKey,
1419
        Input::GRP_OUTFIT,
1420
        &Actions::outfit,
1421
        InputAction::NO_VALUE, 100,
1422
        InputCondition::KEY_DOWN | InputCondition::GAME,
1423
        "",
1424
        UseArgs_false,
1425
        Protected_true},
1426
    {"keyOutfitShortcut4",
1427
        addKey(SDLK_4),
1428
        emptyKey,
1429
        Input::GRP_OUTFIT,
1430
        &Actions::outfit,
1431
        InputAction::NO_VALUE, 100,
1432
        InputCondition::KEY_DOWN | InputCondition::GAME,
1433
        "",
1434
        UseArgs_false,
1435
        Protected_true},
1436
    {"keyOutfitShortcut5",
1437
        addKey(SDLK_5),
1438
        emptyKey,
1439
        Input::GRP_OUTFIT,
1440
        &Actions::outfit,
1441
        InputAction::NO_VALUE, 100,
1442
        InputCondition::KEY_DOWN | InputCondition::GAME,
1443
        "",
1444
        UseArgs_false,
1445
        Protected_true},
1446
    {"keyOutfitShortcut6",
1447
        addKey(SDLK_6),
1448
        emptyKey,
1449
        Input::GRP_OUTFIT,
1450
        &Actions::outfit,
1451
        InputAction::NO_VALUE, 100,
1452
        InputCondition::KEY_DOWN | InputCondition::GAME,
1453
        "",
1454
        UseArgs_false,
1455
        Protected_true},
1456
    {"keyOutfitShortcut7",
1457
        addKey(SDLK_7),
1458
        emptyKey,
1459
        Input::GRP_OUTFIT,
1460
        &Actions::outfit,
1461
        InputAction::NO_VALUE, 100,
1462
        InputCondition::KEY_DOWN | InputCondition::GAME,
1463
        "",
1464
        UseArgs_false,
1465
        Protected_true},
1466
    {"keyOutfitShortcut8",
1467
        addKey(SDLK_8),
1468
        emptyKey,
1469
        Input::GRP_OUTFIT,
1470
        &Actions::outfit,
1471
        InputAction::NO_VALUE, 100,
1472
        InputCondition::KEY_DOWN | InputCondition::GAME,
1473
        "",
1474
        UseArgs_false,
1475
        Protected_true},
1476
    {"keyOutfitShortcut9",
1477
        addKey(SDLK_9),
1478
        emptyKey,
1479
        Input::GRP_OUTFIT,
1480
        &Actions::outfit,
1481
        InputAction::NO_VALUE, 100,
1482
        InputCondition::KEY_DOWN | InputCondition::GAME,
1483
        "",
1484
        UseArgs_false,
1485
        Protected_true},
1486
    {"keyOutfitShortcut10",
1487
        addKey(SDLK_0),
1488
        emptyKey,
1489
        Input::GRP_OUTFIT,
1490
        &Actions::outfit,
1491
        InputAction::NO_VALUE, 100,
1492
        InputCondition::KEY_DOWN | InputCondition::GAME,
1493
        "",
1494
        UseArgs_false,
1495
        Protected_true},
1496
    {"keyOutfitShortcut11",
1497
        addKey(SDLK_MINUS),
1498
        emptyKey,
1499
        Input::GRP_OUTFIT,
1500
        &Actions::outfit,
1501
        InputAction::NO_VALUE, 100,
1502
        InputCondition::KEY_DOWN | InputCondition::GAME,
1503
        "",
1504
        UseArgs_false,
1505
        Protected_true},
1506
    {"keyOutfitShortcut12",
1507
        addKey(SDLK_EQUALS),
1508
        emptyKey,
1509
        Input::GRP_OUTFIT,
1510
        &Actions::outfit,
1511
        InputAction::NO_VALUE, 100,
1512
        InputCondition::KEY_DOWN | InputCondition::GAME,
1513
        "",
1514
        UseArgs_false,
1515
        Protected_true},
1516
    {"keyOutfitShortcut13",
1517
        addKey(SDLK_BACKSPACE),
1518
        emptyKey,
1519
        Input::GRP_OUTFIT,
1520
        &Actions::outfit,
1521
        InputAction::NO_VALUE, 100,
1522
        InputCondition::KEY_DOWN | InputCondition::GAME,
1523
        "",
1524
        UseArgs_false,
1525
        Protected_true},
1526
    {"keyOutfitShortcut14",
1527
        addKey(SDLK_INSERT),
1528
        emptyKey,
1529
        Input::GRP_OUTFIT,
1530
        &Actions::outfit,
1531
        InputAction::NO_VALUE, 100,
1532
        InputCondition::KEY_DOWN | InputCondition::GAME,
1533
        "",
1534
        UseArgs_false,
1535
        Protected_true},
1536
    {"keyOutfitShortcut15",
1537
        addKey(SDLK_HOME),
1538
        emptyKey,
1539
        Input::GRP_OUTFIT,
1540
        &Actions::outfit,
1541
        InputAction::NO_VALUE, 100,
1542
        InputCondition::KEY_DOWN | InputCondition::GAME,
1543
        "",
1544
        UseArgs_false,
1545
        Protected_true},
1546
    {"keyOutfitShortcut16",
1547
        addKey(SDLK_q),
1548
        emptyKey,
1549
        Input::GRP_OUTFIT,
1550
        &Actions::outfit,
1551
        InputAction::NO_VALUE, 100,
1552
        InputCondition::KEY_DOWN | InputCondition::GAME,
1553
        "",
1554
        UseArgs_false,
1555
        Protected_true},
1556
    {"keyOutfitShortcut17",
1557
        addKey(SDLK_w),
1558
        emptyKey,
1559
        Input::GRP_OUTFIT,
1560
        &Actions::outfit,
1561
        InputAction::NO_VALUE, 100,
1562
        InputCondition::KEY_DOWN | InputCondition::GAME,
1563
        "",
1564
        UseArgs_false,
1565
        Protected_true},
1566
    {"keyOutfitShortcut18",
1567
        addKey(SDLK_e),
1568
        emptyKey,
1569
        Input::GRP_OUTFIT,
1570
        &Actions::outfit,
1571
        InputAction::NO_VALUE, 100,
1572
        InputCondition::KEY_DOWN | InputCondition::GAME,
1573
        "",
1574
        UseArgs_false,
1575
        Protected_true},
1576
    {"keyOutfitShortcut19",
1577
        addKey(SDLK_r),
1578
        emptyKey,
1579
        Input::GRP_OUTFIT,
1580
        &Actions::outfit,
1581
        InputAction::NO_VALUE, 100,
1582
        InputCondition::KEY_DOWN | InputCondition::GAME,
1583
        "",
1584
        UseArgs_false,
1585
        Protected_true},
1586
    {"keyOutfitShortcut20",
1587
        addKey(SDLK_t),
1588
        emptyKey,
1589
        Input::GRP_OUTFIT,
1590
        &Actions::outfit,
1591
        InputAction::NO_VALUE, 100,
1592
        InputCondition::KEY_DOWN | InputCondition::GAME,
1593
        "",
1594
        UseArgs_false,
1595
        Protected_true},
1596
    {"keyOutfitShortcut21",
1597
        addKey(SDLK_y),
1598
        emptyKey,
1599
        Input::GRP_OUTFIT,
1600
        &Actions::outfit,
1601
        InputAction::NO_VALUE, 100,
1602
        InputCondition::KEY_DOWN | InputCondition::GAME,
1603
        "",
1604
        UseArgs_false,
1605
        Protected_true},
1606
    {"keyOutfitShortcut22",
1607
        addKey(SDLK_u),
1608
        emptyKey,
1609
        Input::GRP_OUTFIT,
1610
        &Actions::outfit,
1611
        InputAction::NO_VALUE, 100,
1612
        InputCondition::KEY_DOWN | InputCondition::GAME,
1613
        "",
1614
        UseArgs_false,
1615
        Protected_true},
1616
    {"keyOutfitShortcut23",
1617
        addKey(SDLK_i),
1618
        emptyKey,
1619
        Input::GRP_OUTFIT,
1620
        &Actions::outfit,
1621
        InputAction::NO_VALUE, 100,
1622
        InputCondition::KEY_DOWN | InputCondition::GAME,
1623
        "",
1624
        UseArgs_false,
1625
        Protected_true},
1626
    {"keyOutfitShortcut24",
1627
        addKey(SDLK_o),
1628
        emptyKey,
1629
        Input::GRP_OUTFIT,
1630
        &Actions::outfit,
1631
        InputAction::NO_VALUE, 100,
1632
        InputCondition::KEY_DOWN | InputCondition::GAME,
1633
        "",
1634
        UseArgs_false,
1635
        Protected_true},
1636
    {"keyOutfitShortcut25",
1637
        addKey(SDLK_p),
1638
        emptyKey,
1639
        Input::GRP_OUTFIT,
1640
        &Actions::outfit,
1641
        InputAction::NO_VALUE, 100,
1642
        InputCondition::KEY_DOWN | InputCondition::GAME,
1643
        "",
1644
        UseArgs_false,
1645
        Protected_true},
1646
    {"keyOutfitShortcut26",
1647
        addKey(SDLK_LEFTBRACKET),
1648
        emptyKey,
1649
        Input::GRP_OUTFIT,
1650
        &Actions::outfit,
1651
        InputAction::NO_VALUE, 100,
1652
        InputCondition::KEY_DOWN | InputCondition::GAME,
1653
        "",
1654
        UseArgs_false,
1655
        Protected_true},
1656
    {"keyOutfitShortcut27",
1657
        addKey(SDLK_RIGHTBRACKET),
1658
        emptyKey,
1659
        Input::GRP_OUTFIT,
1660
        &Actions::outfit,
1661
        InputAction::NO_VALUE, 100,
1662
        InputCondition::KEY_DOWN | InputCondition::GAME,
1663
        "",
1664
        UseArgs_false,
1665
        Protected_true},
1666
    {"keyOutfitShortcut28",
1667
        addKey(SDLK_BACKSLASH),
1668
        emptyKey,
1669
        Input::GRP_OUTFIT,
1670
        &Actions::outfit,
1671
        InputAction::NO_VALUE, 100,
1672
        InputCondition::KEY_DOWN | InputCondition::GAME,
1673
        "",
1674
        UseArgs_false,
1675
        Protected_true},
1676
    {"keyOutfitShortcut29",
1677
        addKey(SDLK_a),
1678
        emptyKey,
1679
        Input::GRP_OUTFIT,
1680
        &Actions::outfit,
1681
        InputAction::NO_VALUE, 100,
1682
        InputCondition::KEY_DOWN | InputCondition::GAME,
1683
        "",
1684
        UseArgs_false,
1685
        Protected_true},
1686
    {"keyOutfitShortcut30",
1687
        addKey(SDLK_s),
1688
        emptyKey,
1689
        Input::GRP_OUTFIT,
1690
        &Actions::outfit,
1691
        InputAction::NO_VALUE, 100,
1692
        InputCondition::KEY_DOWN | InputCondition::GAME,
1693
        "",
1694
        UseArgs_false,
1695
        Protected_true},
1696
    {"keyOutfitShortcut31",
1697
        addKey(SDLK_d),
1698
        emptyKey,
1699
        Input::GRP_OUTFIT,
1700
        &Actions::outfit,
1701
        InputAction::NO_VALUE, 100,
1702
        InputCondition::KEY_DOWN | InputCondition::GAME,
1703
        "",
1704
        UseArgs_false,
1705
        Protected_true},
1706
    {"keyOutfitShortcut32",
1707
        addKey(SDLK_f),
1708
        emptyKey,
1709
        Input::GRP_OUTFIT,
1710
        &Actions::outfit,
1711
        InputAction::NO_VALUE, 100,
1712
        InputCondition::KEY_DOWN | InputCondition::GAME,
1713
        "",
1714
        UseArgs_false,
1715
        Protected_true},
1716
    {"keyOutfitShortcut33",
1717
        addKey(SDLK_g),
1718
        emptyKey,
1719
        Input::GRP_OUTFIT,
1720
        &Actions::outfit,
1721
        InputAction::NO_VALUE, 100,
1722
        InputCondition::KEY_DOWN | InputCondition::GAME,
1723
        "",
1724
        UseArgs_false,
1725
        Protected_true},
1726
    {"keyOutfitShortcut34",
1727
        addKey(SDLK_h),
1728
        emptyKey,
1729
        Input::GRP_OUTFIT,
1730
        &Actions::outfit,
1731
        InputAction::NO_VALUE, 100,
1732
        InputCondition::KEY_DOWN | InputCondition::GAME,
1733
        "",
1734
        UseArgs_false,
1735
        Protected_true},
1736
    {"keyOutfitShortcut35",
1737
        addKey(SDLK_j),
1738
        emptyKey,
1739
        Input::GRP_OUTFIT,
1740
        &Actions::outfit,
1741
        InputAction::NO_VALUE, 100,
1742
        InputCondition::KEY_DOWN | InputCondition::GAME,
1743
        "",
1744
        UseArgs_false,
1745
        Protected_true},
1746
    {"keyOutfitShortcut36",
1747
        addKey(SDLK_k),
1748
        emptyKey,
1749
        Input::GRP_OUTFIT,
1750
        &Actions::outfit,
1751
        InputAction::NO_VALUE, 100,
1752
        InputCondition::KEY_DOWN | InputCondition::GAME,
1753
        "",
1754
        UseArgs_false,
1755
        Protected_true},
1756
    {"keyOutfitShortcut37",
1757
        addKey(SDLK_l),
1758
        emptyKey,
1759
        Input::GRP_OUTFIT,
1760
        &Actions::outfit,
1761
        InputAction::NO_VALUE, 100,
1762
        InputCondition::KEY_DOWN | InputCondition::GAME,
1763
        "",
1764
        UseArgs_false,
1765
        Protected_true},
1766
    {"keyOutfitShortcut38",
1767
        addKey(SDLK_SEMICOLON),
1768
        emptyKey,
1769
        Input::GRP_OUTFIT,
1770
        &Actions::outfit,
1771
        InputAction::NO_VALUE, 100,
1772
        InputCondition::KEY_DOWN | InputCondition::GAME,
1773
        "",
1774
        UseArgs_false,
1775
        Protected_true},
1776
    {"keyOutfitShortcut39",
1777
        addKey(SDLK_QUOTE),
1778
        emptyKey,
1779
        Input::GRP_OUTFIT,
1780
        &Actions::outfit,
1781
        InputAction::NO_VALUE, 100,
1782
        InputCondition::KEY_DOWN | InputCondition::GAME,
1783
        "",
1784
        UseArgs_false,
1785
        Protected_true},
1786
    {"keyOutfitShortcut40",
1787
        addKey(SDLK_z),
1788
        emptyKey,
1789
        Input::GRP_OUTFIT,
1790
        &Actions::outfit,
1791
        InputAction::NO_VALUE, 100,
1792
        InputCondition::KEY_DOWN | InputCondition::GAME,
1793
        "",
1794
        UseArgs_false,
1795
        Protected_true},
1796
    {"keyOutfitShortcut41",
1797
        addKey(SDLK_x),
1798
        emptyKey,
1799
        Input::GRP_OUTFIT,
1800
        &Actions::outfit,
1801
        InputAction::NO_VALUE, 100,
1802
        InputCondition::KEY_DOWN | InputCondition::GAME,
1803
        "",
1804
        UseArgs_false,
1805
        Protected_true},
1806
    {"keyOutfitShortcut42",
1807
        addKey(SDLK_c),
1808
        emptyKey,
1809
        Input::GRP_OUTFIT,
1810
        &Actions::outfit,
1811
        InputAction::NO_VALUE, 100,
1812
        InputCondition::KEY_DOWN | InputCondition::GAME,
1813
        "",
1814
        UseArgs_false,
1815
        Protected_true},
1816
    {"keyOutfitShortcut43",
1817
        addKey(SDLK_v),
1818
        emptyKey,
1819
        Input::GRP_OUTFIT,
1820
        &Actions::outfit,
1821
        InputAction::NO_VALUE, 100,
1822
        InputCondition::KEY_DOWN | InputCondition::GAME,
1823
        "",
1824
        UseArgs_false,
1825
        Protected_true},
1826
    {"keyOutfitShortcut44",
1827
        addKey(SDLK_b),
1828
        emptyKey,
1829
        Input::GRP_OUTFIT,
1830
        &Actions::outfit,
1831
        InputAction::NO_VALUE, 100,
1832
        InputCondition::KEY_DOWN | InputCondition::GAME,
1833
        "",
1834
        UseArgs_false,
1835
        Protected_true},
1836
    {"keyOutfitShortcut45",
1837
        addKey(SDLK_n),
1838
        emptyKey,
1839
        Input::GRP_OUTFIT,
1840
        &Actions::outfit,
1841
        InputAction::NO_VALUE, 100,
1842
        InputCondition::KEY_DOWN | InputCondition::GAME,
1843
        "",
1844
        UseArgs_false,
1845
        Protected_true},
1846
    {"keyOutfitShortcut46",
1847
        addKey(SDLK_m),
1848
        emptyKey,
1849
        Input::GRP_OUTFIT,
1850
        &Actions::outfit,
1851
        InputAction::NO_VALUE, 100,
1852
        InputCondition::KEY_DOWN | InputCondition::GAME,
1853
        "",
1854
        UseArgs_false,
1855
        Protected_true},
1856
    {"keyOutfitShortcut47",
1857
        addKey(SDLK_COMMA),
1858
        emptyKey,
1859
        Input::GRP_OUTFIT,
1860
        &Actions::outfit,
1861
        InputAction::NO_VALUE, 100,
1862
        InputCondition::KEY_DOWN | InputCondition::GAME,
1863
        "",
1864
        UseArgs_false,
1865
        Protected_true},
1866
    {"keyOutfitShortcut48",
1867
        addKey(SDLK_PERIOD),
1868
        emptyKey,
1869
        Input::GRP_OUTFIT,
1870
        &Actions::outfit,
1871
        InputAction::NO_VALUE, 100,
1872
        InputCondition::KEY_DOWN | InputCondition::GAME,
1873
        "",
1874
        UseArgs_false,
1875
        Protected_true},
1876
    {"keyMoveToPointShortcut1",
1877
        addKey(SDLK_1),
1878
        emptyKey,
1879
        Input::GRP_MOVETOPOINT,
1880
        &Actions::moveToPoint,
1881
        InputAction::MOVE_TO_POINT, 100,
1882
        InputCondition::KEY_DOWN | InputCondition::GAME,
1883
        "",
1884
        UseArgs_false,
1885
        Protected_true},
1886
    {"keyMoveToPointShortcut2",
1887
        addKey(SDLK_2),
1888
        emptyKey,
1889
        Input::GRP_MOVETOPOINT,
1890
        &Actions::moveToPoint,
1891
        InputAction::MOVE_TO_POINT, 100,
1892
        InputCondition::KEY_DOWN | InputCondition::GAME,
1893
        "",
1894
        UseArgs_false,
1895
        Protected_true},
1896
    {"keyMoveToPointShortcut3",
1897
        addKey(SDLK_3),
1898
        emptyKey,
1899
        Input::GRP_MOVETOPOINT,
1900
        &Actions::moveToPoint,
1901
        InputAction::MOVE_TO_POINT, 100,
1902
        InputCondition::KEY_DOWN | InputCondition::GAME,
1903
        "",
1904
        UseArgs_false,
1905
        Protected_true},
1906
    {"keyMoveToPointShortcut4",
1907
        addKey(SDLK_4),
1908
        emptyKey,
1909
        Input::GRP_MOVETOPOINT,
1910
        &Actions::moveToPoint,
1911
        InputAction::MOVE_TO_POINT, 100,
1912
        InputCondition::KEY_DOWN | InputCondition::GAME,
1913
        "",
1914
        UseArgs_false,
1915
        Protected_true},
1916
    {"keyMoveToPointShortcut5",
1917
        addKey(SDLK_5),
1918
        emptyKey,
1919
        Input::GRP_MOVETOPOINT,
1920
        &Actions::moveToPoint,
1921
        InputAction::MOVE_TO_POINT, 100,
1922
        InputCondition::KEY_DOWN | InputCondition::GAME,
1923
        "",
1924
        UseArgs_false,
1925
        Protected_true},
1926
    {"keyMoveToPointShortcut6",
1927
        addKey(SDLK_6),
1928
        emptyKey,
1929
        Input::GRP_MOVETOPOINT,
1930
        &Actions::moveToPoint,
1931
        InputAction::MOVE_TO_POINT, 100,
1932
        InputCondition::KEY_DOWN | InputCondition::GAME,
1933
        "",
1934
        UseArgs_false,
1935
        Protected_true},
1936
    {"keyMoveToPointShortcut7",
1937
        addKey(SDLK_7),
1938
        emptyKey,
1939
        Input::GRP_MOVETOPOINT,
1940
        &Actions::moveToPoint,
1941
        InputAction::MOVE_TO_POINT, 100,
1942
        InputCondition::KEY_DOWN | InputCondition::GAME,
1943
        "",
1944
        UseArgs_false,
1945
        Protected_true},
1946
    {"keyMoveToPointShortcut8",
1947
        addKey(SDLK_8),
1948
        emptyKey,
1949
        Input::GRP_MOVETOPOINT,
1950
        &Actions::moveToPoint,
1951
        InputAction::MOVE_TO_POINT, 100,
1952
        InputCondition::KEY_DOWN | InputCondition::GAME,
1953
        "",
1954
        UseArgs_false,
1955
        Protected_true},
1956
    {"keyMoveToPointShortcut9",
1957
        addKey(SDLK_9),
1958
        emptyKey,
1959
        Input::GRP_MOVETOPOINT,
1960
        &Actions::moveToPoint,
1961
        InputAction::MOVE_TO_POINT, 100,
1962
        InputCondition::KEY_DOWN | InputCondition::GAME,
1963
        "",
1964
        UseArgs_false,
1965
        Protected_true},
1966
    {"keyMoveToPointShortcut10",
1967
        addKey(SDLK_0),
1968
        emptyKey,
1969
        Input::GRP_MOVETOPOINT,
1970
        &Actions::moveToPoint,
1971
        InputAction::MOVE_TO_POINT, 100,
1972
        InputCondition::KEY_DOWN | InputCondition::GAME,
1973
        "",
1974
        UseArgs_false,
1975
        Protected_true},
1976
    {"keyMoveToPointShortcut11",
1977
        addKey(SDLK_MINUS),
1978
        emptyKey,
1979
        Input::GRP_MOVETOPOINT,
1980
        &Actions::moveToPoint,
1981
        InputAction::MOVE_TO_POINT, 100,
1982
        InputCondition::KEY_DOWN | InputCondition::GAME,
1983
        "",
1984
        UseArgs_false,
1985
        Protected_true},
1986
    {"keyMoveToPointShortcut12",
1987
        addKey(SDLK_EQUALS),
1988
        emptyKey,
1989
        Input::GRP_MOVETOPOINT,
1990
        &Actions::moveToPoint,
1991
        InputAction::MOVE_TO_POINT, 100,
1992
        InputCondition::KEY_DOWN | InputCondition::GAME,
1993
        "",
1994
        UseArgs_false,
1995
        Protected_true},
1996
    {"keyMoveToPointShortcut13",
1997
        addKey(SDLK_BACKSPACE),
1998
        emptyKey,
1999
        Input::GRP_MOVETOPOINT,
2000
        &Actions::moveToPoint,
2001
        InputAction::MOVE_TO_POINT, 100,
2002
        InputCondition::KEY_DOWN | InputCondition::GAME,
2003
        "",
2004
        UseArgs_false,
2005
        Protected_true},
2006
    {"keyMoveToPointShortcut14",
2007
        addKey(SDLK_INSERT),
2008
        emptyKey,
2009
        Input::GRP_MOVETOPOINT,
2010
        &Actions::moveToPoint,
2011
        InputAction::MOVE_TO_POINT, 100,
2012
        InputCondition::KEY_DOWN | InputCondition::GAME,
2013
        "",
2014
        UseArgs_false,
2015
        Protected_true},
2016
    {"keyMoveToPointShortcut15",
2017
        addKey(SDLK_HOME),
2018
        emptyKey,
2019
        Input::GRP_MOVETOPOINT,
2020
        &Actions::moveToPoint,
2021
        InputAction::MOVE_TO_POINT, 100,
2022
        InputCondition::KEY_DOWN | InputCondition::GAME,
2023
        "",
2024
        UseArgs_false,
2025
        Protected_true},
2026
    {"keyMoveToPointShortcut16",
2027
        addKey(SDLK_q),
2028
        emptyKey,
2029
        Input::GRP_MOVETOPOINT,
2030
        &Actions::moveToPoint,
2031
        InputAction::MOVE_TO_POINT, 100,
2032
        InputCondition::KEY_DOWN | InputCondition::GAME,
2033
        "",
2034
        UseArgs_false,
2035
        Protected_true},
2036
    {"keyMoveToPointShortcut17",
2037
        addKey(SDLK_w),
2038
        emptyKey,
2039
        Input::GRP_MOVETOPOINT,
2040
        &Actions::moveToPoint,
2041
        InputAction::MOVE_TO_POINT, 100,
2042
        InputCondition::KEY_DOWN | InputCondition::GAME,
2043
        "",
2044
        UseArgs_false,
2045
        Protected_true},
2046
    {"keyMoveToPointShortcut18",
2047
        addKey(SDLK_e),
2048
        emptyKey,
2049
        Input::GRP_MOVETOPOINT,
2050
        &Actions::moveToPoint,
2051
        InputAction::MOVE_TO_POINT, 100,
2052
        InputCondition::KEY_DOWN | InputCondition::GAME,
2053
        "",
2054
        UseArgs_false,
2055
        Protected_true},
2056
    {"keyMoveToPointShortcut19",
2057
        addKey(SDLK_r),
2058
        emptyKey,
2059
        Input::GRP_MOVETOPOINT,
2060
        &Actions::moveToPoint,
2061
        InputAction::MOVE_TO_POINT, 100,
2062
        InputCondition::KEY_DOWN | InputCondition::GAME,
2063
        "",
2064
        UseArgs_false,
2065
        Protected_true},
2066
    {"keyMoveToPointShortcut20",
2067
        addKey(SDLK_t),
2068
        emptyKey,
2069
        Input::GRP_MOVETOPOINT,
2070
        &Actions::moveToPoint,
2071
        InputAction::MOVE_TO_POINT, 100,
2072
        InputCondition::KEY_DOWN | InputCondition::GAME,
2073
        "",
2074
        UseArgs_false,
2075
        Protected_true},
2076
    {"keyMoveToPointShortcut21",
2077
        addKey(SDLK_y),
2078
        emptyKey,
2079
        Input::GRP_MOVETOPOINT,
2080
        &Actions::moveToPoint,
2081
        InputAction::MOVE_TO_POINT, 100,
2082
        InputCondition::KEY_DOWN | InputCondition::GAME,
2083
        "",
2084
        UseArgs_false,
2085
        Protected_true},
2086
    {"keyMoveToPointShortcut22",
2087
        addKey(SDLK_u),
2088
        emptyKey,
2089
        Input::GRP_MOVETOPOINT,
2090
        &Actions::moveToPoint,
2091
        InputAction::MOVE_TO_POINT, 100,
2092
        InputCondition::KEY_DOWN | InputCondition::GAME,
2093
        "",
2094
        UseArgs_false,
2095
        Protected_true},
2096
    {"keyMoveToPointShortcut23",
2097
        addKey(SDLK_i),
2098
        emptyKey,
2099
        Input::GRP_MOVETOPOINT,
2100
        &Actions::moveToPoint,
2101
        InputAction::MOVE_TO_POINT, 100,
2102
        InputCondition::KEY_DOWN | InputCondition::GAME,
2103
        "",
2104
        UseArgs_false,
2105
        Protected_true},
2106
    {"keyMoveToPointShortcut24",
2107
        addKey(SDLK_o),
2108
        emptyKey,
2109
        Input::GRP_MOVETOPOINT,
2110
        &Actions::moveToPoint,
2111
        InputAction::MOVE_TO_POINT, 100,
2112
        InputCondition::KEY_DOWN | InputCondition::GAME,
2113
        "",
2114
        UseArgs_false,
2115
        Protected_true},
2116
    {"keyMoveToPointShortcut25",
2117
        addKey(SDLK_p),
2118
        emptyKey,
2119
        Input::GRP_MOVETOPOINT,
2120
        &Actions::moveToPoint,
2121
        InputAction::MOVE_TO_POINT, 100,
2122
        InputCondition::KEY_DOWN | InputCondition::GAME,
2123
        "",
2124
        UseArgs_false,
2125
        Protected_true},
2126
    {"keyMoveToPointShortcut26",
2127
        addKey(SDLK_LEFTBRACKET),
2128
        emptyKey,
2129
        Input::GRP_MOVETOPOINT,
2130
        &Actions::moveToPoint,
2131
        InputAction::MOVE_TO_POINT, 100,
2132
        InputCondition::KEY_DOWN | InputCondition::GAME,
2133
        "",
2134
        UseArgs_false,
2135
        Protected_true},
2136
    {"keyMoveToPointShortcut27",
2137
        addKey(SDLK_RIGHTBRACKET),
2138
        emptyKey,
2139
        Input::GRP_MOVETOPOINT,
2140
        &Actions::moveToPoint,
2141
        InputAction::MOVE_TO_POINT, 100,
2142
        InputCondition::KEY_DOWN | InputCondition::GAME,
2143
        "",
2144
        UseArgs_false,
2145
        Protected_true},
2146
    {"keyMoveToPointShortcut28",
2147
        addKey(SDLK_BACKSLASH),
2148
        emptyKey,
2149
        Input::GRP_MOVETOPOINT,
2150
        &Actions::moveToPoint,
2151
        InputAction::MOVE_TO_POINT, 100,
2152
        InputCondition::KEY_DOWN | InputCondition::GAME,
2153
        "",
2154
        UseArgs_false,
2155
        Protected_true},
2156
    {"keyMoveToPointShortcut29",
2157
        addKey(SDLK_a),
2158
        emptyKey,
2159
        Input::GRP_MOVETOPOINT,
2160
        &Actions::moveToPoint,
2161
        InputAction::MOVE_TO_POINT, 100,
2162
        InputCondition::KEY_DOWN | InputCondition::GAME,
2163
        "",
2164
        UseArgs_false,
2165
        Protected_true},
2166
    {"keyMoveToPointShortcut30",
2167
        addKey(SDLK_s),
2168
        emptyKey,
2169
        Input::GRP_MOVETOPOINT,
2170
        &Actions::moveToPoint,
2171
        InputAction::MOVE_TO_POINT, 100,
2172
        InputCondition::KEY_DOWN | InputCondition::GAME,
2173
        "",
2174
        UseArgs_false,
2175
        Protected_true},
2176
    {"keyMoveToPointShortcut31",
2177
        addKey(SDLK_d),
2178
        emptyKey,
2179
        Input::GRP_MOVETOPOINT,
2180
        &Actions::moveToPoint,
2181
        InputAction::MOVE_TO_POINT, 100,
2182
        InputCondition::KEY_DOWN | InputCondition::GAME,
2183
        "",
2184
        UseArgs_false,
2185
        Protected_true},
2186
    {"keyMoveToPointShortcut32",
2187
        addKey(SDLK_f),
2188
        emptyKey,
2189
        Input::GRP_MOVETOPOINT,
2190
        &Actions::moveToPoint,
2191
        InputAction::MOVE_TO_POINT, 100,
2192
        InputCondition::KEY_DOWN | InputCondition::GAME,
2193
        "",
2194
        UseArgs_false,
2195
        Protected_true},
2196
    {"keyMoveToPointShortcut33",
2197
        addKey(SDLK_g),
2198
        emptyKey,
2199
        Input::GRP_MOVETOPOINT,
2200
        &Actions::moveToPoint,
2201
        InputAction::MOVE_TO_POINT, 100,
2202
        InputCondition::KEY_DOWN | InputCondition::GAME,
2203
        "",
2204
        UseArgs_false,
2205
        Protected_true},
2206
    {"keyMoveToPointShortcut34",
2207
        addKey(SDLK_h),
2208
        emptyKey,
2209
        Input::GRP_MOVETOPOINT,
2210
        &Actions::moveToPoint,
2211
        InputAction::MOVE_TO_POINT, 100,
2212
        InputCondition::KEY_DOWN | InputCondition::GAME,
2213
        "",
2214
        UseArgs_false,
2215
        Protected_true},
2216
    {"keyMoveToPointShortcut35",
2217
        addKey(SDLK_j),
2218
        emptyKey,
2219
        Input::GRP_MOVETOPOINT,
2220
        &Actions::moveToPoint,
2221
        InputAction::MOVE_TO_POINT, 100,
2222
        InputCondition::KEY_DOWN | InputCondition::GAME,
2223
        "",
2224
        UseArgs_false,
2225
        Protected_true},
2226
    {"keyMoveToPointShortcut36",
2227
        addKey(SDLK_k),
2228
        emptyKey,
2229
        Input::GRP_MOVETOPOINT,
2230
        &Actions::moveToPoint,
2231
        InputAction::MOVE_TO_POINT, 100,
2232
        InputCondition::KEY_DOWN | InputCondition::GAME,
2233
        "",
2234
        UseArgs_false,
2235
        Protected_true},
2236
    {"keyMoveToPointShortcut37",
2237
        addKey(SDLK_l),
2238
        emptyKey,
2239
        Input::GRP_MOVETOPOINT,
2240
        &Actions::moveToPoint,
2241
        InputAction::MOVE_TO_POINT, 100,
2242
        InputCondition::KEY_DOWN | InputCondition::GAME,
2243
        "",
2244
        UseArgs_false,
2245
        Protected_true},
2246
    {"keyMoveToPointShortcut38",
2247
        addKey(SDLK_SEMICOLON),
2248
        emptyKey,
2249
        Input::GRP_MOVETOPOINT,
2250
        &Actions::moveToPoint,
2251
        InputAction::MOVE_TO_POINT, 100,
2252
        InputCondition::KEY_DOWN | InputCondition::GAME,
2253
        "",
2254
        UseArgs_false,
2255
        Protected_true},
2256
    {"keyMoveToPointShortcut39",
2257
        addKey(SDLK_QUOTE),
2258
        emptyKey,
2259
        Input::GRP_MOVETOPOINT,
2260
        &Actions::moveToPoint,
2261
        InputAction::MOVE_TO_POINT, 100,
2262
        InputCondition::KEY_DOWN | InputCondition::GAME,
2263
        "",
2264
        UseArgs_false,
2265
        Protected_true},
2266
    {"keyMoveToPointShortcut40",
2267
        addKey(SDLK_z),
2268
        emptyKey,
2269
        Input::GRP_MOVETOPOINT,
2270
        &Actions::moveToPoint,
2271
        InputAction::MOVE_TO_POINT, 100,
2272
        InputCondition::KEY_DOWN | InputCondition::GAME,
2273
        "",
2274
        UseArgs_false,
2275
        Protected_true},
2276
    {"keyMoveToPointShortcut41",
2277
        addKey(SDLK_x),
2278
        emptyKey,
2279
        Input::GRP_MOVETOPOINT,
2280
        &Actions::moveToPoint,
2281
        InputAction::MOVE_TO_POINT, 100,
2282
        InputCondition::KEY_DOWN | InputCondition::GAME,
2283
        "",
2284
        UseArgs_false,
2285
        Protected_true},
2286
    {"keyMoveToPointShortcut42",
2287
        addKey(SDLK_c),
2288
        emptyKey,
2289
        Input::GRP_MOVETOPOINT,
2290
        &Actions::moveToPoint,
2291
        InputAction::MOVE_TO_POINT, 100,
2292
        InputCondition::KEY_DOWN | InputCondition::GAME,
2293
        "",
2294
        UseArgs_false,
2295
        Protected_true},
2296
    {"keyMoveToPointShortcut43",
2297
        addKey(SDLK_v),
2298
        emptyKey,
2299
        Input::GRP_MOVETOPOINT,
2300
        &Actions::moveToPoint,
2301
        InputAction::MOVE_TO_POINT, 100,
2302
        InputCondition::KEY_DOWN | InputCondition::GAME,
2303
        "",
2304
        UseArgs_false,
2305
        Protected_true},
2306
    {"keyMoveToPointShortcut44",
2307
        addKey(SDLK_b),
2308
        emptyKey,
2309
        Input::GRP_MOVETOPOINT,
2310
        &Actions::moveToPoint,
2311
        InputAction::MOVE_TO_POINT, 100,
2312
        InputCondition::KEY_DOWN | InputCondition::GAME,
2313
        "",
2314
        UseArgs_false,
2315
        Protected_true},
2316
    {"keyMoveToPointShortcut45",
2317
        addKey(SDLK_n),
2318
        emptyKey,
2319
        Input::GRP_MOVETOPOINT,
2320
        &Actions::moveToPoint,
2321
        InputAction::MOVE_TO_POINT, 100,
2322
        InputCondition::KEY_DOWN | InputCondition::GAME,
2323
        "",
2324
        UseArgs_false,
2325
        Protected_true},
2326
    {"keyMoveToPointShortcut46",
2327
        addKey(SDLK_m),
2328
        emptyKey,
2329
        Input::GRP_MOVETOPOINT,
2330
        &Actions::moveToPoint,
2331
        InputAction::MOVE_TO_POINT, 100,
2332
        InputCondition::KEY_DOWN | InputCondition::GAME,
2333
        "",
2334
        UseArgs_false,
2335
        Protected_true},
2336
    {"keyMoveToPointShortcut47",
2337
        addKey(SDLK_COMMA),
2338
        emptyKey,
2339
        Input::GRP_MOVETOPOINT,
2340
        &Actions::moveToPoint,
2341
        InputAction::MOVE_TO_POINT, 100,
2342
        InputCondition::KEY_DOWN | InputCondition::GAME,
2343
        "",
2344
        UseArgs_false,
2345
        Protected_true},
2346
    {"keyMoveToPointShortcut48",
2347
        addKey(SDLK_PERIOD),
2348
        emptyKey,
2349
        Input::GRP_MOVETOPOINT,
2350
        &Actions::moveToPoint,
2351
        InputAction::MOVE_TO_POINT, 100,
2352
        InputCondition::KEY_DOWN | InputCondition::GAME,
2353
        "",
2354
        UseArgs_false,
2355
        Protected_true},
2356
    {"keyChat",
2357
        addKey(SDLK_RETURN),
2358
#ifdef __SWITCH__
2359
        joystickButton(10),
2360
#else
2361
        emptyKey,
2362
#endif
2363
        Input::GRP_DEFAULT | Input::GRP_CHAT,
2364
        &Actions::toggleChat,
2365
        InputAction::NO_VALUE, 50,
2366
        InputCondition::KEY_DOWN |
2367
            InputCondition::NOINPUT |
2368
            InputCondition::NOAWAY |
2369
            InputCondition::NOMODAL,
2370
        "chat",
2371
        UseArgs_false,
2372
        Protected_false},
2373
    {"keyChatScrollUp",
2374
        addKey(SDLK_PAGEUP),
2375
        emptyKey,
2376
        Input::GRP_DEFAULT | Input::GRP_GUI,
2377
        &Actions::scrollChatUp,
2378
        InputAction::NO_VALUE, 50,
2379
        InputCondition::KEY_DOWN |
2380
            InputCondition::DEFAULT |
2381
            InputCondition::INGAME,
2382
        "chatscrollup",
2383
        UseArgs_false,
2384
        Protected_false},
2385
    {"keyChatScrollDown",
2386
        addKey(SDLK_PAGEDOWN),
2387
        emptyKey,
2388
        Input::GRP_DEFAULT | Input::GRP_GUI,
2389
        &Actions::scrollChatDown,
2390
        InputAction::NO_VALUE, 50,
2391
        InputCondition::KEY_DOWN |
2392
            InputCondition::DEFAULT |
2393
            InputCondition::INGAME,
2394
        "chatscrolldown",
2395
        UseArgs_false,
2396
        Protected_false},
2397
    {"keyChatPrevTab",
2398
        addKey(SDLK_KP7),
2399
        emptyKey,
2400
        Input::GRP_DEFAULT | Input::GRP_GUI,
2401
        &Actions::prevChatTab,
2402
        InputAction::NO_VALUE, 50,
2403
        InputCondition::KEY_DOWN |
2404
            InputCondition::NOINPUT |
2405
            InputCondition::INGAME,
2406
        "prevtab",
2407
        UseArgs_false,
2408
        Protected_false},
2409
    {"keyChatNextTab",
2410
        addKey(SDLK_KP9),
2411
        emptyKey,
2412
        Input::GRP_DEFAULT | Input::GRP_GUI,
2413
        &Actions::nextChatTab,
2414
        InputAction::NO_VALUE, 50,
2415
        InputCondition::KEY_DOWN |
2416
            InputCondition::NOINPUT |
2417
            InputCondition::INGAME,
2418
        "nexttab",
2419
        UseArgs_false,
2420
        Protected_false},
2421
    {"keyChatCloseTab",
2422
        emptyKey,
2423
        emptyKey,
2424
        Input::GRP_DEFAULT | Input::GRP_GUI,
2425
        &Actions::closeChatTab,
2426
        InputAction::NO_VALUE, 50,
2427
        InputCondition::KEY_DOWN |
2428
            InputCondition::NOINPUT |
2429
            InputCondition::INGAME,
2430
        "close",
2431
        UseArgs_false,
2432
        Protected_false},
2433
    {"keyChatPrevHistory",
2434
        addKey(SDLK_KP7),
2435
        emptyKey,
2436
        Input::GRP_CHAT | Input::GRP_GUICHAN,
2437
        nullptr,
2438
        InputAction::NO_VALUE, 50,
2439
        InputCondition::KEY_DOWN |
2440
            InputCondition::DEFAULT |
2441
            InputCondition::INGAME,
2442
        "",
2443
        UseArgs_false,
2444
        Protected_false},
2445
    {"keyChatNextHistory",
2446
        addKey(SDLK_KP9),
2447
        emptyKey,
2448
        Input::GRP_CHAT | Input::GRP_GUICHAN,
2449
        nullptr,
2450
        InputAction::NO_VALUE, 50,
2451
        InputCondition::KEY_DOWN |
2452
            InputCondition::DEFAULT |
2453
            InputCondition::INGAME,
2454
        "",
2455
        UseArgs_false,
2456
        Protected_false},
2457
    {"keyIgnoreInput1",
2458
#ifdef USE_SDL2
2459
        addKey(SDLK_LGUI),
2460
#else  // USE_SDL2
2461
        addKey(SDLK_LSUPER),
2462
#endif  // USE_SDL2
2463
        emptyKey,
2464
        Input::GRP_DEFAULT,
2465
        &Actions::ignoreInput,
2466
        InputAction::NO_VALUE, 500,
2467
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2468
        "",
2469
        UseArgs_false,
2470
        Protected_true},
2471
    {"keyIgnoreInput2",
2472
#ifdef USE_SDL2
2473
        addKey(SDLK_RGUI),
2474
#else  // USE_SDL2
2475
        addKey(SDLK_RSUPER),
2476
#endif  // USE_SDL2
2477
        emptyKey,
2478
        Input::GRP_DEFAULT,
2479
        &Actions::ignoreInput,
2480
        InputAction::NO_VALUE, 500,
2481
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2482
        "",
2483
        UseArgs_false,
2484
        Protected_true},
2485
    {"keyDirectUp",
2486
        defaultAction(&Actions::directUp),
2487
        InputCondition::KEY_DOWN | InputCondition::GAME,
2488
        "directup|turnup",
2489
        UseArgs_false,
2490
        Protected_false},
2491
    {"keyDirectDown",
2492
        defaultAction(&Actions::directDown),
2493
        InputCondition::KEY_DOWN | InputCondition::GAME,
2494
        "directdown|turndown",
2495
        UseArgs_false,
2496
        Protected_false},
2497
    {"keyDirectLeft",
2498
        defaultAction(&Actions::directLeft),
2499
        InputCondition::KEY_DOWN | InputCondition::GAME,
2500
        "directleft|turnleft",
2501
        UseArgs_false,
2502
        Protected_false},
2503
    {"keyDirectRight",
2504
        defaultAction(&Actions::directRight),
2505
        InputCondition::KEY_DOWN | InputCondition::GAME,
2506
        "directright|turnright",
2507
        UseArgs_false,
2508
        Protected_false},
2509
    {"keyCrazyMoves",
2510
        addKey(SDLK_SLASH),
2511
        emptyKey,
2512
        Input::GRP_DEFAULT,
2513
        &Actions::crazyMoves,
2514
        InputAction::NO_VALUE, 50,
2515
        InputCondition::KEY_DOWN |
2516
            InputCondition::GAME |
2517
            InputCondition::VALIDSPEED,
2518
        "",
2519
        UseArgs_false,
2520
        Protected_true},
2521
    {"keyChangeCrazyMoveType",
2522
        addKey(SDLK_BACKSLASH),
2523
        emptyKey,
2524
        Input::GRP_DEFAULT,
2525
        &Actions::changeCrazyMove,
2526
        InputAction::NO_VALUE, 50,
2527
        InputCondition::KEY_DOWN |
2528
            InputCondition::GAME |
2529
            InputCondition::VALIDSPEED |
2530
            InputCondition::EMODS,
2531
        "",
2532
        UseArgs_false,
2533
        Protected_true},
2534
    {"keyQuickDrop",
2535
        addKey(SDLK_y),
2536
        emptyKey,
2537
        Input::GRP_DEFAULT,
2538
        &Actions::dropItem0,
2539
        InputAction::NO_VALUE, 50,
2540
        InputCondition::KEY_DOWN |
2541
            InputCondition::GAME |
2542
            InputCondition::VALIDSPEED,
2543
        "drop",
2544
        UseArgs_false,
2545
        Protected_true},
2546
    {"keyQuickDropN",
2547
        addKey(SDLK_u),
2548
        emptyKey,
2549
        Input::GRP_DEFAULT,
2550
        &Actions::dropItem,
2551
        InputAction::NO_VALUE, 50,
2552
        InputCondition::KEY_DOWN |
2553
            InputCondition::GAME |
2554
            InputCondition::VALIDSPEED,
2555
        "dropn",
2556
        UseArgs_false,
2557
        Protected_true},
2558
    {"keySwitchQuickDrop",
2559
        addKey(SDLK_i),
2560
        emptyKey,
2561
        Input::GRP_DEFAULT,
2562
        &Actions::switchQuickDrop,
2563
        InputAction::NO_VALUE, 50,
2564
        InputCondition::KEY_DOWN |
2565
            InputCondition::GAME |
2566
            InputCondition::VALIDSPEED,
2567
        "",
2568
        UseArgs_false,
2569
        Protected_true},
2570
    {"keyMagicInma1",
2571
        addKey(SDLK_c),
2572
        emptyKey,
2573
        Input::GRP_DEFAULT,
2574
        &Actions::heal,
2575
        InputAction::NO_VALUE, 50,
2576
        InputCondition::KEY_DOWN |
2577
            InputCondition::GAME |
2578
            InputCondition::VALIDSPEED,
2579
        "heal",
2580
        UseArgs_true,
2581
        Protected_false},
2582
    {"keyMagicItenplz",
2583
        addKey(SDLK_m),
2584
        emptyKey,
2585
        Input::GRP_DEFAULT,
2586
        &Actions::itenplz,
2587
        InputAction::NO_VALUE, 50,
2588
        InputCondition::KEY_DOWN |
2589
            InputCondition::GAME |
2590
            InputCondition::VALIDSPEED,
2591
        "itenplz",
2592
        UseArgs_false,
2593
        Protected_true},
2594
    {"keyMagicAttack",
2595
        addKey(SDLK_b),
2596
        emptyKey,
2597
        Input::GRP_DEFAULT,
2598
        &Actions::magicAttack,
2599
        InputAction::NO_VALUE, 50,
2600
        InputCondition::KEY_DOWN |
2601
            InputCondition::GAME |
2602
            InputCondition::NOFOLLOW |
2603
            InputCondition::VALIDSPEED,
2604
        "magicattack",
2605
        UseArgs_false,
2606
        Protected_false},
2607
    {"keySwitchMagicAttack",
2608
        addKey(SDLK_COMMA),
2609
        emptyKey,
2610
        Input::GRP_DEFAULT,
2611
        &Actions::changeMagicAttackType,
2612
        InputAction::NO_VALUE, 50,
2613
        InputCondition::KEY_DOWN |
2614
            InputCondition::GAME |
2615
            InputCondition::VALIDSPEED |
2616
            InputCondition::EMODS,
2617
        "",
2618
        UseArgs_false,
2619
        Protected_true},
2620
    {"keySwitchPvpAttack",
2621
        defaultAction(&Actions::changePvpMode),
2622
        InputCondition::KEY_DOWN |
2623
            InputCondition::GAME |
2624
            InputCondition::VALIDSPEED |
2625
            InputCondition::EMODS,
2626
        "",
2627
        UseArgs_false,
2628
        Protected_true},
2629
    {"keyInvertDirection",
2630
        defaultAction(&Actions::changeMoveType),
2631
        InputCondition::KEY_DOWN |
2632
            InputCondition::GAME |
2633
            InputCondition::VALIDSPEED |
2634
            InputCondition::EMODS,
2635
        "",
2636
        UseArgs_false,
2637
        Protected_false},
2638
    {"keyChangeAttackWeaponType",
2639
        addKey(SDLK_g),
2640
        emptyKey,
2641
        Input::GRP_DEFAULT,
2642
        &Actions::changeAttackWeaponType,
2643
        InputAction::NO_VALUE, 50,
2644
        InputCondition::KEY_DOWN |
2645
            InputCondition::GAME |
2646
            InputCondition::VALIDSPEED |
2647
            InputCondition::EMODS,
2648
        "",
2649
        UseArgs_false,
2650
        Protected_true},
2651
    {"keyChangeAttackType",
2652
        addKey(SDLK_END),
2653
        emptyKey,
2654
        Input::GRP_DEFAULT,
2655
        &Actions::changeAttackType,
2656
        InputAction::NO_VALUE, 50,
2657
        InputCondition::KEY_DOWN |
2658
            InputCondition::GAME |
2659
            InputCondition::VALIDSPEED |
2660
            InputCondition::EMODS,
2661
        "",
2662
        UseArgs_false,
2663
        Protected_true},
2664
    {"keyChangeFollowMode",
2665
        addKey(SDLK_KP1),
2666
        emptyKey,
2667
        Input::GRP_DEFAULT,
2668
        &Actions::changeFollowMode,
2669
        InputAction::NO_VALUE, 50,
2670
        InputCondition::KEY_DOWN |
2671
            InputCondition::GAME |
2672
            InputCondition::VALIDSPEED |
2673
            InputCondition::EMODS,
2674
        "",
2675
        UseArgs_false,
2676
        Protected_true},
2677
    {"keyChangeImitationMode",
2678
        addKey(SDLK_KP4),
2679
        emptyKey,
2680
        Input::GRP_DEFAULT,
2681
        &Actions::changeImitationMode,
2682
        InputAction::NO_VALUE, 50,
2683
        InputCondition::KEY_DOWN |
2684
            InputCondition::GAME |
2685
            InputCondition::VALIDSPEED |
2686
            InputCondition::EMODS,
2687
        "",
2688
        UseArgs_false,
2689
        Protected_true},
2690
    {"keyDisableGameModifiers",
2691
        addKey(SDLK_KP8),
2692
        emptyKey,
2693
        Input::GRP_DEFAULT,
2694
        &Actions::changeGameModifier,
2695
        InputAction::NO_VALUE, 50,
2696
        InputCondition::KEY_DOWN |
2697
            InputCondition::GAME |
2698
            InputCondition::VALIDSPEED,
2699
        "",
2700
        UseArgs_false,
2701
        Protected_true},
2702
    {"keyChangeAudio",
2703
        addKey(SDLK_KP3),
2704
        emptyKey,
2705
        Input::GRP_DEFAULT,
2706
        &Actions::changeAudio,
2707
        InputAction::NO_VALUE, 50,
2708
        InputCondition::KEY_DOWN |
2709
            InputCondition::GAME |
2710
            InputCondition::VALIDSPEED,
2711
        "audio",
2712
        UseArgs_false,
2713
        Protected_true},
2714
    {"keyAway",
2715
        addKey(SDLK_KP2),
2716
        emptyKey,
2717
        Input::GRP_DEFAULT,
2718
        &Actions::away,
2719
        InputAction::NO_VALUE, 50,
2720
        InputCondition::KEY_DOWN |
2721
            InputCondition::GAME |
2722
            InputCondition::VALIDSPEED,
2723
        "",
2724
        UseArgs_false,
2725
        Protected_false},
2726
    {"keyRightClick",
2727
        addKey(SDLK_TAB),
2728
        emptyKey,
2729
        Input::GRP_DEFAULT,
2730
        &Actions::mouseClick,
2731
        InputAction::NO_VALUE, 50,
2732
        InputCondition::KEY_DOWN |
2733
            InputCondition::NOINPUT |
2734
            InputCondition::NOAWAY |
2735
            InputCondition::NOMODAL |
2736
            InputCondition::INGAME,
2737
        "rightclick",
2738
        UseArgs_false,
2739
        Protected_false},
2740
    {"keyCameraMode",
2741
        addKey(SDLK_KP_PLUS),
2742
        emptyKey,
2743
        Input::GRP_DEFAULT,
2744
        &Actions::camera,
2745
        InputAction::NO_VALUE, 50,
2746
        InputCondition::KEY_DOWN |
2747
            InputCondition::GAME |
2748
            InputCondition::VALIDSPEED |
2749
            InputCondition::EMODS,
2750
        "",
2751
        UseArgs_false,
2752
        Protected_false},
2753
    {"keyMod",
2754
        emptyKey,
2755
        emptyKey,
2756
        0,
2757
        nullptr,
2758
        InputAction::NO_VALUE, 50,
2759
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2760
        "",
2761
        UseArgs_false,
2762
        Protected_false},
2763
    {"keyGUIUp",
2764
        addKey(SDLK_UP),
2765
        emptyKey,
2766
        Input::GRP_GUICHAN,
2767
        nullptr,
2768
        InputAction::NO_VALUE, 50,
2769
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2770
        "",
2771
        UseArgs_false,
2772
        Protected_false},
2773
    {"keyGUIDown",
2774
        addKey(SDLK_DOWN),
2775
        emptyKey,
2776
        Input::GRP_GUICHAN,
2777
        nullptr,
2778
        InputAction::NO_VALUE, 50,
2779
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2780
        "",
2781
        UseArgs_false,
2782
        Protected_false},
2783
    {"keyGUILeft",
2784
        addKey(SDLK_LEFT),
2785
        emptyKey,
2786
        Input::GRP_GUICHAN,
2787
        nullptr,
2788
        InputAction::NO_VALUE, 50,
2789
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2790
        "",
2791
        UseArgs_false,
2792
        Protected_false},
2793
    {"keyGUIRight",
2794
        addKey(SDLK_RIGHT),
2795
        emptyKey,
2796
        Input::GRP_GUICHAN,
2797
        nullptr,
2798
        InputAction::NO_VALUE, 50,
2799
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2800
        "",
2801
        UseArgs_false,
2802
        Protected_false},
2803
    {"keyGUISelect",
2804
        addKey(SDLK_SPACE),
2805
        emptyKey,
2806
        Input::GRP_GUICHAN,
2807
        nullptr,
2808
        InputAction::NO_VALUE, 50,
2809
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2810
        "",
2811
        UseArgs_false,
2812
        Protected_false},
2813
    {"keyGUISelect2",
2814
        addKey(SDLK_RETURN),
2815
        emptyKey,
2816
        Input::GRP_GUICHAN,
2817
        nullptr,
2818
        InputAction::NO_VALUE, 50,
2819
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2820
        "",
2821
        UseArgs_false,
2822
        Protected_false},
2823
    {"keyGUICancel",
2824
        addKey(SDLK_ESCAPE),
2825
#if defined(USE_SDL2)
2826
#if defined(ANDROID)
2827
        addKey(SDLK_AC_BACK),
2828
#elif defined(__SWITCH__)
2829
        joystickButton(11),
2830
#else  // defined(ANDROID)
2831
        emptyKey,
2832
#endif  // defined(ANDROID)
2833
#else  // defined(USE_SDL2)
2834
        emptyKey,
2835
#endif  // defined(USE_SDL2)
2836
        Input::GRP_GUICHAN,
2837
        nullptr,
2838
        InputAction::NO_VALUE, 50,
2839
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2840
        "",
2841
        UseArgs_false,
2842
        Protected_false},
2843
    {"keyGUIHome",
2844
        addKey(SDLK_HOME),
2845
        emptyKey,
2846
        Input::GRP_GUICHAN,
2847
        nullptr,
2848
        InputAction::NO_VALUE, 50,
2849
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2850
        "",
2851
        UseArgs_false,
2852
        Protected_false},
2853
    {"keyGUIEnd",
2854
        addKey(SDLK_END),
2855
        emptyKey,
2856
        Input::GRP_GUICHAN,
2857
        nullptr,
2858
        InputAction::NO_VALUE, 50,
2859
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2860
        "",
2861
        UseArgs_false,
2862
        Protected_false},
2863
    {"keyGUIDelete",
2864
        addKey(SDLK_DELETE),
2865
        emptyKey,
2866
        Input::GRP_GUICHAN,
2867
        nullptr,
2868
        InputAction::NO_VALUE, 50,
2869
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2870
        "",
2871
        UseArgs_false,
2872
        Protected_false},
2873
    {"keyGUIBackSpace",
2874
        addKey(SDLK_BACKSPACE),
2875
        emptyKey,
2876
        Input::GRP_GUICHAN,
2877
        nullptr,
2878
        InputAction::NO_VALUE, 50,
2879
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2880
        "",
2881
        UseArgs_false,
2882
        Protected_false},
2883
    {"keyGUITab",
2884
        addKey(SDLK_TAB),
2885
        emptyKey,
2886
        Input::GRP_GUICHAN,
2887
        nullptr,
2888
        InputAction::NO_VALUE, 50,
2889
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2890
        "",
2891
        UseArgs_false,
2892
        Protected_false},
2893
    {"keyGUIPageUp",
2894
        addKey(SDLK_PAGEUP),
2895
        emptyKey,
2896
        Input::GRP_GUICHAN,
2897
        nullptr,
2898
        InputAction::NO_VALUE, 50,
2899
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2900
        "",
2901
        UseArgs_false,
2902
        Protected_false},
2903
    {"keyGUIPageDown",
2904
        addKey(SDLK_PAGEDOWN),
2905
        emptyKey,
2906
        Input::GRP_GUICHAN,
2907
        nullptr,
2908
        InputAction::NO_VALUE, 50,
2909
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2910
        "",
2911
        UseArgs_false,
2912
        Protected_false},
2913
    {"keyGUIInsert",
2914
        addKey(SDLK_INSERT),
2915
        emptyKey,
2916
        Input::GRP_GUICHAN,
2917
        nullptr,
2918
        InputAction::NO_VALUE, 50,
2919
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2920
        "",
2921
        UseArgs_false,
2922
        Protected_false},
2923
    {"keyGUIMod",
2924
        addKey(SDLK_LSHIFT),
2925
        addKey(SDLK_RSHIFT),
2926
        Input::GRP_GUICHAN,
2927
        nullptr,
2928
        InputAction::NO_VALUE, 50,
2929
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2930
        "",
2931
        UseArgs_false,
2932
        Protected_false},
2933
    {"keySafeVideo",
2934
        addKey(SDLK_KP_MINUS),
2935
        emptyKey,
2936
        Input::GRP_DEFAULT,
2937
        &Actions::safeVideoMode,
2938
        InputAction::NO_VALUE, 50,
2939
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2940
        "",
2941
        UseArgs_false,
2942
        Protected_true},
2943
    {"keyStopSit",
2944
#ifdef __SWITCH__
2945
        emptyKey,
2946
        joystickButton(1),
2947
        Input::GRP_DEFAULT,
2948
        &Actions::stopSit,
2949
        InputAction::NO_VALUE, 50,
2950
#else
2951
        defaultAction(&Actions::stopSit),
2952
#endif
2953
        InputCondition::KEY_DOWN |
2954
            InputCondition::DEFAULT |
2955
            InputCondition::INGAME,
2956
        "sit2",
2957
        UseArgs_false,
2958
        Protected_false},
2959
    {"keyShowKeyboard",
2960
        defaultAction(&Actions::showKeyboard),
2961
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2962
        "showkeyboard",
2963
        UseArgs_false,
2964
        Protected_false},
2965
    {"keyShowWindows",
2966
        defaultAction(&Actions::showWindows),
2967
        InputCondition::KEY_DOWN |
2968
            InputCondition::DEFAULT |
2969
            InputCondition::INGAME,
2970
        "showwindows",
2971
        UseArgs_false,
2972
        Protected_false},
2973
    {"keyChatMod",
2974
        addKey(SDLK_LSHIFT),
2975
        emptyKey,
2976
        Input::GRP_CHAT,
2977
        nullptr,
2978
        InputAction::NO_VALUE, 50,
2979
        InputCondition::KEY_DOWN |
2980
            InputCondition::DEFAULT |
2981
            InputCondition::INGAME,
2982
        "",
2983
        UseArgs_false,
2984
        Protected_false},
2985
    {"keyMoveForward",
2986
        defaultAction(&Actions::moveForward),
2987
        InputCondition::KEY_DOWN | InputCondition::ARROWKEYS,
2988
        "",
2989
        UseArgs_false,
2990
        Protected_false},
2991
    {"keyGUICtrl",
2992
        addKey(SDLK_LCTRL),
2993
        addKey(SDLK_RCTRL),
2994
        Input::GRP_GUICHAN,
2995
        nullptr,
2996
        InputAction::NO_VALUE, 50,
2997
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
2998
        "",
2999
        UseArgs_false,
3000
        Protected_false},
3001
    {"keyGUIb",
3002
        addKey(SDLK_b),
3003
        emptyKey,
3004
        Input::GRP_GUICHAN,
3005
        nullptr,
3006
        InputAction::NO_VALUE, 50,
3007
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3008
        "",
3009
        UseArgs_false,
3010
        Protected_false},
3011
    {"keyGUIc",
3012
        addKey(SDLK_c),
3013
        emptyKey,
3014
        Input::GRP_GUICHAN,
3015
        nullptr,
3016
        InputAction::NO_VALUE, 50,
3017
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3018
        "",
3019
        UseArgs_false,
3020
        Protected_false},
3021
    {"keyGUId",
3022
        addKey(SDLK_d),
3023
        emptyKey,
3024
        Input::GRP_GUICHAN,
3025
        nullptr,
3026
        InputAction::NO_VALUE, 50,
3027
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3028
        "",
3029
        UseArgs_false,
3030
        Protected_false},
3031
    {"keyGUIe",
3032
        addKey(SDLK_e),
3033
        emptyKey,
3034
        Input::GRP_GUICHAN,
3035
        nullptr,
3036
        InputAction::NO_VALUE, 50,
3037
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3038
        "",
3039
        UseArgs_false,
3040
        Protected_false},
3041
    {"keyGUIf",
3042
        addKey(SDLK_f),
3043
        emptyKey,
3044
        Input::GRP_GUICHAN,
3045
        nullptr,
3046
        InputAction::NO_VALUE, 50,
3047
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3048
        "",
3049
        UseArgs_false,
3050
        Protected_false},
3051
    {"keyGUIh",
3052
        addKey(SDLK_h),
3053
        emptyKey,
3054
        Input::GRP_GUICHAN,
3055
        nullptr,
3056
        InputAction::NO_VALUE, 50,
3057
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3058
        "",
3059
        UseArgs_false,
3060
        Protected_false},
3061
    {"keyGUIk",
3062
        addKey(SDLK_k),
3063
        emptyKey,
3064
        Input::GRP_GUICHAN,
3065
        nullptr,
3066
        InputAction::NO_VALUE, 50,
3067
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3068
        "",
3069
        UseArgs_false,
3070
        Protected_false},
3071
    {"keyGUIu",
3072
        addKey(SDLK_u),
3073
        emptyKey,
3074
        Input::GRP_GUICHAN,
3075
        nullptr,
3076
        InputAction::NO_VALUE, 50,
3077
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3078
        "",
3079
        UseArgs_false,
3080
        Protected_false},
3081
    {"keyGUIv",
3082
        addKey(SDLK_v),
3083
        emptyKey,
3084
        Input::GRP_GUICHAN,
3085
        nullptr,
3086
        InputAction::NO_VALUE, 50,
3087
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3088
        "",
3089
        UseArgs_false,
3090
        Protected_false},
3091
    {"keyGUIw",
3092
        addKey(SDLK_w),
3093
        emptyKey,
3094
        Input::GRP_GUICHAN,
3095
        nullptr,
3096
        InputAction::NO_VALUE, 50,
3097
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3098
        "",
3099
        UseArgs_false,
3100
        Protected_false},
3101
    {"keyShortcutsPrevTab",
3102
        emptyKey,
3103
        emptyKey,
3104
        Input::GRP_DEFAULT | Input::GRP_GUI,
3105
        &Actions::prevShortcutsTab,
3106
        InputAction::NO_VALUE, 50,
3107
        InputCondition::KEY_DOWN |
3108
            InputCondition::NOINPUT |
3109
            InputCondition::INGAME,
3110
        "shortcutprevtab",
3111
        UseArgs_false,
3112
        Protected_false},
3113
    {"keyShortcutsNextTab",
3114
        emptyKey,
3115
        emptyKey,
3116
        Input::GRP_DEFAULT | Input::GRP_GUI,
3117
        &Actions::nextShortcutsTab,
3118
        InputAction::NO_VALUE, 50,
3119
        InputCondition::KEY_DOWN |
3120
            InputCondition::NOINPUT |
3121
            InputCondition::INGAME,
3122
        "shortcutnexttab",
3123
        UseArgs_false,
3124
        Protected_false},
3125
    {"keyCommandsPrevTab",
3126
        emptyKey,
3127
        emptyKey,
3128
        Input::GRP_DEFAULT | Input::GRP_GUI,
3129
        &Actions::prevCommandsTab,
3130
        InputAction::NO_VALUE, 50,
3131
        InputCondition::KEY_DOWN |
3132
            InputCondition::NOINPUT |
3133
            InputCondition::INGAME,
3134
        "commandsprevtab",
3135
        UseArgs_false,
3136
        Protected_false},
3137
    {"keyCommandsNextTab",
3138
        emptyKey,
3139
        emptyKey,
3140
        Input::GRP_DEFAULT | Input::GRP_GUI,
3141
        &Actions::nextCommandsTab,
3142
        InputAction::NO_VALUE, 50,
3143
        InputCondition::KEY_DOWN |
3144
            InputCondition::NOINPUT |
3145
            InputCondition::INGAME,
3146
        "commandsnexttab",
3147
        UseArgs_false,
3148
        Protected_false},
3149
    {"keyOpenTrade",
3150
        defaultAction(&Actions::openTrade),
3151
        InputCondition::KEY_DOWN |
3152
            InputCondition::GAME |
3153
            InputCondition::NOTARGET,
3154
        "trade",
3155
        UseArgs_false,
3156
        Protected_false},
3157
    {"keyGUIF1",
3158
        addKey(SDLK_F1),
3159
        emptyKey,
3160
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3161
        nullptr,
3162
        InputAction::NO_VALUE, 50,
3163
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3164
        "",
3165
        UseArgs_false,
3166
        Protected_false},
3167
    {"keyGUIF2",
3168
        addKey(SDLK_F2),
3169
        emptyKey,
3170
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3171
        nullptr,
3172
        InputAction::NO_VALUE, 50,
3173
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3174
        "",
3175
        UseArgs_false,
3176
        Protected_false},
3177
    {"keyGUIF3",
3178
        addKey(SDLK_F3),
3179
        emptyKey,
3180
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3181
        nullptr,
3182
        InputAction::NO_VALUE, 50,
3183
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3184
        "",
3185
        UseArgs_false,
3186
        Protected_false},
3187
    {"keyGUIF4",
3188
        addKey(SDLK_F4),
3189
        emptyKey,
3190
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3191
        nullptr,
3192
        InputAction::NO_VALUE, 50,
3193
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3194
        "",
3195
        UseArgs_false,
3196
        Protected_false},
3197
    {"keyGUIF5",
3198
        addKey(SDLK_F5),
3199
        emptyKey,
3200
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3201
        nullptr,
3202
        InputAction::NO_VALUE, 50,
3203
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3204
        "",
3205
        UseArgs_false,
3206
        Protected_false},
3207
    {"keyGUIF6",
3208
        addKey(SDLK_F6),
3209
        emptyKey,
3210
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3211
        nullptr,
3212
        InputAction::NO_VALUE, 50,
3213
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3214
        "",
3215
        UseArgs_false,
3216
        Protected_false},
3217
    {"keyGUIF7",
3218
        addKey(SDLK_F7),
3219
        emptyKey,
3220
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3221
        nullptr,
3222
        InputAction::NO_VALUE, 50,
3223
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3224
        "",
3225
        UseArgs_false,
3226
        Protected_false},
3227
    {"keyGUIF8",
3228
        addKey(SDLK_F8),
3229
        emptyKey,
3230
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3231
        nullptr,
3232
        InputAction::NO_VALUE, 50,
3233
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3234
        "",
3235
        UseArgs_false,
3236
        Protected_false},
3237
    {"keyGUIF9",
3238
        addKey(SDLK_F9),
3239
        emptyKey,
3240
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3241
        nullptr,
3242
        InputAction::NO_VALUE, 50,
3243
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3244
        "",
3245
        UseArgs_false,
3246
        Protected_false},
3247
    {"keyGUIF10",
3248
        addKey(SDLK_F10),
3249
        emptyKey,
3250
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3251
        nullptr,
3252
        InputAction::NO_VALUE, 50,
3253
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3254
        "",
3255
        UseArgs_false,
3256
        Protected_false},
3257
    {"keyGUIF11",
3258
        addKey(SDLK_F11),
3259
        emptyKey,
3260
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3261
        nullptr,
3262
        InputAction::NO_VALUE, 50,
3263
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3264
        "",
3265
        UseArgs_false,
3266
        Protected_false},
3267
    {"keyGUIF12",
3268
        addKey(SDLK_F12),
3269
        emptyKey,
3270
        Input::GRP_GUICHAN | Input::GRP_CHAT,
3271
        nullptr,
3272
        InputAction::NO_VALUE, 50,
3273
        InputCondition::KEY_DOWN | InputCondition::DEFAULT,
3274
        "",
3275
        UseArgs_false,
3276
        Protected_false},
3277
    {"keyWindowAbout",
3278
        emptyKey,
3279
        emptyKey,
3280
        Input::GRP_DEFAULT | Input::GRP_GUI,
3281
        &Actions::aboutWindowShow,
3282
        InputAction::NO_VALUE, 50,
3283
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT0,
3284
        "about",
3285
        UseArgs_false,
3286
        Protected_false},
3287
    {"keyWindowUpdater",
3288
        emptyKey,
3289
        emptyKey,
3290
        Input::GRP_DEFAULT | Input::GRP_GUI,
3291
        &Actions::updaterWindowShow,
3292
        InputAction::NO_VALUE, 50,
3293
        InputCondition::KEY_DOWN | InputCondition::GAME,
3294
        "updater",
3295
        UseArgs_false,
3296
        Protected_false},
3297
    {"keyTargetClosestMonster",
3298
        emptyKey,
3299
        emptyKey,
3300
        Input::GRP_DEFAULT | Input::GRP_REPEAT,
3301
        &Actions::targetClosestMonster,
3302
        InputAction::NO_VALUE, 50,
3303
        InputCondition::KEY_DOWN |
3304
            InputCondition::GAME |
3305
            InputCondition::NOTARGET |
3306
            InputCondition::VALIDSPEED,
3307
        "targetclosestmonster",
3308
        UseArgs_false,
3309
        Protected_false},
3310
    {"keyChatCloseAllTabs",
3311
        emptyKey,
3312
        emptyKey,
3313
        Input::GRP_DEFAULT | Input::GRP_GUI,
3314
        &Actions::closeAllChatTabs,
3315
        InputAction::NO_VALUE, 50,
3316
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3317
        "closeall",
3318
        UseArgs_false,
3319
        Protected_true},
3320
    {"keyChatIgnoreAllWhispers",
3321
        emptyKey,
3322
        emptyKey,
3323
        Input::GRP_DEFAULT | Input::GRP_GUI,
3324
        &Actions::ignoreAllWhispers,
3325
        InputAction::NO_VALUE, 50,
3326
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3327
        "ignoreallwhispers",
3328
        UseArgs_false,
3329
        Protected_true},
3330
    {"keyChatAnnounce",
3331
        emptyKey,
3332
        emptyKey,
3333
        Input::GRP_DEFAULT | Input::GRP_GUI,
3334
        &Actions::chatAnnounce,
3335
        InputAction::NO_VALUE, 50,
3336
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3337
        "announce",
3338
        UseArgs_true,
3339
        Protected_true},
3340
    {"keyIpcToggle",
3341
        defaultAction(&Actions::ipcToggle),
3342
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3343
        "ipctoggle",
3344
        UseArgs_false,
3345
        Protected_true},
3346
    {"keyWhere",
3347
        defaultAction(&Actions::where),
3348
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3349
        "where",
3350
        UseArgs_false,
3351
        Protected_false},
3352
    {"keyWho",
3353
        defaultAction(&Actions::who),
3354
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3355
        "who",
3356
        UseArgs_false,
3357
        Protected_false},
3358
    {"keyWhisper",
3359
        defaultAction(&Actions::msg),
3360
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3361
        "w|whisper|msg",
3362
        UseArgs_true,
3363
        Protected_true},
3364
    {"keyQuery",
3365
        defaultAction(&Actions::query),
3366
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3367
        "q|query|j|join",
3368
        UseArgs_true,
3369
        Protected_false},
3370
    {"keyClearChatTab",
3371
        defaultAction(&Actions::clearChatTab),
3372
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3373
        "clear",
3374
        UseArgs_false,
3375
        Protected_false},
3376
    {"keyIgnore",
3377
        defaultAction(&Actions::chatIgnore),
3378
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3379
        "ignore",
3380
        UseArgs_true,
3381
        Protected_true},
3382
    {"keyUnignore",
3383
        defaultAction(&Actions::chatUnignore),
3384
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3385
        "unignore",
3386
        UseArgs_true,
3387
        Protected_true},
3388
    {"keyFriend",
3389
        defaultAction(&Actions::chatFriend),
3390
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3391
        "friend|befriend",
3392
        UseArgs_true,
3393
        Protected_true},
3394
    {"keyDisregard",
3395
        defaultAction(&Actions::chatDisregard),
3396
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3397
        "disregard",
3398
        UseArgs_true,
3399
        Protected_true},
3400
    {"keyNeutral",
3401
        defaultAction(&Actions::chatNeutral),
3402
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3403
        "neutral",
3404
        UseArgs_true,
3405
        Protected_true},
3406
    {"keyBlacklist",
3407
        defaultAction(&Actions::chatBlackList),
3408
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3409
        "blacklist",
3410
        UseArgs_true,
3411
        Protected_true},
3412
    {"keyEnemy",
3413
        defaultAction(&Actions::chatEnemy),
3414
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3415
        "enemy",
3416
        UseArgs_true,
3417
        Protected_true},
3418
    {"keyErase",
3419
        defaultAction(&Actions::chatErase),
3420
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3421
        "erase",
3422
        UseArgs_true,
3423
        Protected_true},
3424
    {"keyCleanGraphics",
3425
        defaultAction(&Actions::cleanGraphics),
3426
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3427
        "cleangraphics",
3428
        UseArgs_false,
3429
        Protected_false},
3430
    {"keyCleanFonts",
3431
        defaultAction(&Actions::cleanFonts),
3432
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3433
        "cleanfonts",
3434
        UseArgs_false,
3435
        Protected_false},
3436
    {"keyCreateParty",
3437
        defaultAction(&Actions::createParty),
3438
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3439
        "createparty",
3440
        UseArgs_true,
3441
        Protected_true},
3442
    {"keyCreateGuild",
3443
        defaultAction(&Actions::createGuild),
3444
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3445
        "createguild",
3446
        UseArgs_true,
3447
        Protected_true},
3448
    {"keyParty",
3449
        defaultAction(&Actions::party),
3450
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3451
        "party",
3452
        UseArgs_true,
3453
        Protected_true},
3454
    {"keyMe",
3455
        defaultAction(&Actions::me),
3456
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3457
        "me",
3458
        UseArgs_true,
3459
        Protected_true},
3460
    {"keyToggle",
3461
        defaultAction(&Actions::toggle),
3462
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3463
        "toggle",
3464
        UseArgs_false,
3465
        Protected_false},
3466
    {"keyPresent",
3467
        defaultAction(&Actions::present),
3468
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3469
        "present",
3470
        UseArgs_false,
3471
        Protected_false},
3472
    {"keyPrintAll",
3473
        defaultAction(&Actions::printAll),
3474
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3475
        "all",
3476
        UseArgs_false,
3477
        Protected_true},
3478
    {"keyMove",
3479
        defaultAction(&Actions::move),
3480
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3481
        "move",
3482
        UseArgs_true,
3483
        Protected_false},
3484
    {"keySetTarget",
3485
        defaultAction(&Actions::setTarget),
3486
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3487
        "target",
3488
        UseArgs_true,
3489
        Protected_false},
3490
    {"keyAttackHuman",
3491
        defaultAction(&Actions::attackHuman),
3492
        InputCondition::KEY_DOWN |
3493
            InputCondition::GAME |
3494
            InputCondition::NOFOLLOW |
3495
            InputCondition::VALIDSPEED,
3496
        "atkhuman",
3497
        UseArgs_false,
3498
        Protected_false},
3499
    {"keyOutfit",
3500
        defaultAction(&Actions::commandOutfit),
3501
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3502
        "outfit",
3503
        UseArgs_true,
3504
        Protected_true},
3505
    {"keyEmote",
3506
        defaultAction(&Actions::commandEmote),
3507
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3508
        "emote",
3509
        UseArgs_true,
3510
        Protected_false},
3511
    {"keyEmotePet",
3512
        defaultAction(&Actions::commandEmotePet),
3513
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3514
        "emotepet",
3515
        UseArgs_true,
3516
        Protected_false},
3517
    {"keyAwayMessage",
3518
        defaultAction(&Actions::awayMessage),
3519
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3520
        "away",
3521
        UseArgs_true,
3522
        Protected_true},
3523
    {"keyPseudoAway",
3524
        defaultAction(&Actions::pseudoAway),
3525
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3526
        "pseudoaway",
3527
        UseArgs_true,
3528
        Protected_true},
3529
    {"keyFollow",
3530
        defaultAction(&Actions::follow),
3531
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3532
        "follow",
3533
        UseArgs_true,
3534
        Protected_false},
3535
    {"keyNavigate",
3536
        defaultAction(&Actions::navigate),
3537
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3538
        "navigate",
3539
        UseArgs_true,
3540
        Protected_false},
3541
    {"keyImitation",
3542
        defaultAction(&Actions::imitation),
3543
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3544
        "imitation",
3545
        UseArgs_true,
3546
        Protected_false},
3547
    {"keySendMail",
3548
        defaultAction(&Actions::sendMail),
3549
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3550
        "sendmail|mailsend|mailto",
3551
        UseArgs_true,
3552
        Protected_true},
3553
    {"keyTradeCommand",
3554
        defaultAction(&Actions::trade),
3555
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3556
        "trade",
3557
        UseArgs_true,
3558
        Protected_false},
3559
    {"keyPriceLoad",
3560
        defaultAction(&Actions::priceLoad),
3561
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3562
        "priceload",
3563
        UseArgs_false,
3564
        Protected_true},
3565
    {"keyPriceSave",
3566
        defaultAction(&Actions::priceSave),
3567
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3568
        "pricesave",
3569
        UseArgs_false,
3570
        Protected_true},
3571
    {"keyCacheInfo",
3572
        defaultAction(&Actions::cacheInfo),
3573
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3574
        "cacheinfo",
3575
        UseArgs_false,
3576
        Protected_true},
3577
    {"keyDisconnect",
3578
        defaultAction(&Actions::disconnect),
3579
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3580
        "disconnect",
3581
        UseArgs_false,
3582
        Protected_true},
3583
    {"keyUndress",
3584
        defaultAction(&Actions::undress),
3585
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3586
        "undress",
3587
        UseArgs_true,
3588
        Protected_false},
3589
    {"keyDirs",
3590
        defaultAction(&Actions::dirs),
3591
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3592
        "dirs",
3593
        UseArgs_false,
3594
        Protected_false},
3595
    {"keyInfo",
3596
        defaultAction(&Actions::info),
3597
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3598
        "info",
3599
        UseArgs_false,
3600
        Protected_false},
3601
    {"keyWait",
3602
        defaultAction(&Actions::wait),
3603
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3604
        "wait",
3605
        UseArgs_true,
3606
        Protected_true},
3607
    {"keyUptime",
3608
        defaultAction(&Actions::uptime),
3609
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3610
        "uptime",
3611
        UseArgs_false,
3612
        Protected_false},
3613
    {"keyAddPriorityAttack",
3614
        defaultAction(&Actions::addPriorityAttack),
3615
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3616
        "addpriorityattack",
3617
        UseArgs_true,
3618
        Protected_true},
3619
    {"keyAddAttack",
3620
        defaultAction(&Actions::addAttack),
3621
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3622
        "addattack",
3623
        UseArgs_true,
3624
        Protected_true},
3625
    {"keyRemoveAttack",
3626
        defaultAction(&Actions::removeAttack),
3627
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3628
        "removeattack|removeignoreattack",
3629
        UseArgs_true,
3630
        Protected_true},
3631
    {"keyAddIgnoreAttack",
3632
        defaultAction(&Actions::addIgnoreAttack),
3633
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3634
        "addignoreattack",
3635
        UseArgs_true,
3636
        Protected_true},
3637
    {"keyDump",
3638
        defaultAction(&Actions::dump),
3639
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3640
        "dump",
3641
        UseArgs_false,
3642
        Protected_true},
3643
    {"keyServerIgnoreAll",
3644
        defaultAction(&Actions::serverIgnoreAll),
3645
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3646
        "serverignoreall",
3647
        UseArgs_false,
3648
        Protected_true},
3649
    {"keyServerUnIgnoreAll",
3650
        defaultAction(&Actions::serverUnIgnoreAll),
3651
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3652
        "serverunignoreall",
3653
        UseArgs_false,
3654
        Protected_true},
3655
    {"keySetDrop",
3656
        defaultAction(&Actions::setDrop),
3657
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3658
        "setdrop",
3659
        UseArgs_true,
3660
        Protected_false},
3661
    {"keyError",
3662
        defaultAction(&Actions::error),
3663
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3664
        "error",
3665
        UseArgs_false,
3666
        Protected_true},
3667
    {"keyDumpg",
3668
        defaultAction(&Actions::dumpGraphics),
3669
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3670
        "dumpg",
3671
        UseArgs_false,
3672
        Protected_true},
3673
    {"keyDumpe",
3674
        defaultAction(&Actions::dumpEnvironment),
3675
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3676
        "dumpe",
3677
        UseArgs_false,
3678
        Protected_true},
3679
    {"keyDumpt",
3680
        defaultAction(&Actions::dumpTests),
3681
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3682
        "dumpt",
3683
        UseArgs_false,
3684
        Protected_true},
3685
    {"keyDumpOGL",
3686
        defaultAction(&Actions::dumpOGL),
3687
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3688
        "dumpogl",
3689
        UseArgs_false,
3690
        Protected_true},
3691
    {"keyDumpGL",
3692
        defaultAction(&Actions::dumpGL),
3693
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3694
        "dumpgl",
3695
        UseArgs_false,
3696
        Protected_true},
3697
    {"keyDumpMods",
3698
        defaultAction(&Actions::dumpMods),
3699
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3700
        "dumpMods",
3701
        UseArgs_false,
3702
        Protected_false},
3703
    {"keyUrl",
3704
        defaultAction(&Actions::url),
3705
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3706
        "url",
3707
        UseArgs_true,
3708
        Protected_true},
3709
    {"keyOpenUrl",
3710
        defaultAction(&Actions::openUrl),
3711
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3712
        "open",
3713
        UseArgs_true,
3714
        Protected_true},
3715
    {"keyExecute",
3716
        defaultAction(&Actions::execute),
3717
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3718
        "execute",
3719
        UseArgs_true,
3720
        Protected_true},
3721
    {"keyTestSdlFont",
3722
        emptyKey,
3723
        emptyKey,
3724
        Input::GRP_DEFAULT,
3725
#if defined USE_OPENGL && defined DEBUG_SDLFONT
3726
        &Actions::testSdlFont,
3727
#else  // defined USE_OPENGL && defined DEBUG_SDLFONT
3728
        nullptr,
3729
#endif  // defined USE_OPENGL && defined DEBUG_SDLFONT
3730
        InputAction::NO_VALUE, 50,
3731
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3732
#if defined USE_OPENGL && defined DEBUG_SDLFONT
3733
        "testsdlfont",
3734
#else  // defined USE_OPENGL && defined DEBUG_SDLFONT
3735
        "",
3736
#endif  // defined USE_OPENGL && defined DEBUG_SDLFONT
3737
        UseArgs_false,
3738
        Protected_true},
3739
    {"keyEnableHightlight",
3740
        defaultAction(&Actions::enableHighlight),
3741
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3742
        "enablehighlight",
3743
        UseArgs_false,
3744
        Protected_true},
3745
    {"keyDisableHightlight",
3746
        defaultAction(&Actions::disableHighlight),
3747
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3748
        "disablehighlight",
3749
        UseArgs_false,
3750
        Protected_true},
3751
    {"keyDontRemoveName",
3752
        defaultAction(&Actions::dontRemoveName),
3753
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3754
        "dontremovename",
3755
        UseArgs_false,
3756
        Protected_true},
3757
    {"keyRemoveName",
3758
        defaultAction(&Actions::removeName),
3759
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3760
        "removename",
3761
        UseArgs_false,
3762
        Protected_true},
3763
    {"keyDisableAway",
3764
        defaultAction(&Actions::disableAway),
3765
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3766
        "disableaway",
3767
        UseArgs_false,
3768
        Protected_true},
3769
    {"keyEnableAway",
3770
        defaultAction(&Actions::enableAway),
3771
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3772
        "enableaway",
3773
        UseArgs_false,
3774
        Protected_true},
3775
    {"keyTestParticle",
3776
        defaultAction(&Actions::testParticle),
3777
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3778
        "testparticle",
3779
        UseArgs_true,
3780
        Protected_false},
3781
    {"keyCreateItems",
3782
        defaultAction(&Actions::createItems),
3783
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3784
        "createitems",
3785
        UseArgs_false,
3786
        Protected_false},
3787
    {"keyTalkRaw",
3788
        defaultAction(&Actions::talkRaw),
3789
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3790
        "talkraw",
3791
        UseArgs_true,
3792
        Protected_true},
3793
    {"keyTalkPet",
3794
        defaultAction(&Actions::talkPet),
3795
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3796
        "talkpet",
3797
        UseArgs_true,
3798
        Protected_true},
3799
    {"keyUploadConfig",
3800
        defaultAction(&Actions::uploadConfig),
3801
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3802
        "uploadconfig",
3803
        UseArgs_false,
3804
        Protected_true},
3805
    {"keyUploadServerConfig",
3806
        defaultAction(&Actions::uploadServerConfig),
3807
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3808
        "uploadserverconfig",
3809
        UseArgs_false,
3810
        Protected_true},
3811
    {"keyUploadLog",
3812
        defaultAction(&Actions::uploadLog),
3813
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3814
        "uploadlog",
3815
        UseArgs_false,
3816
        Protected_true},
3817
    {"keyGm",
3818
        defaultAction(&Actions::gm),
3819
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3820
        "gm",
3821
        UseArgs_true,
3822
        Protected_true},
3823
    {"keyHack",
3824
        defaultAction(&Actions::hack),
3825
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3826
        "hack",
3827
        UseArgs_true,
3828
        Protected_true},
3829
    {"keyDebugSpawn",
3830
        defaultAction(&Actions::debugSpawn),
3831
        InputCondition::KEY_DOWN | InputCondition::INGAME,
3832
        "debugspawn",
3833
        UseArgs_true,
3834
        Protected_true},
3835
    {"keyPetSmilie",
3836
        defaultAction(nullptr),
3837
        InputCondition::KEY_DOWN |
3838
            InputCondition::DEFAULT |
3839
            InputCondition::INGAME,
3840
        "",
3841
        UseArgs_false,
3842
        Protected_false},
3843
    {"keyPetEmoteShortcut1",
3844
        addKey(SDLK_1),
3845
        emptyKey,
3846
        Input::GRP_PET_EMOTION,
3847
        &Actions::petEmote,
3848
        InputAction::PET_EMOTE, 100,
3849
        InputCondition::KEY_DOWN | InputCondition::GAME,
3850
        "",
3851
        UseArgs_false,
3852
        Protected_false},
3853
    {"keyPetEmoteShortcut2",
3854
        addKey(SDLK_2),
3855
        emptyKey,
3856
        Input::GRP_PET_EMOTION,
3857
        &Actions::petEmote,
3858
        InputAction::PET_EMOTE, 100,
3859
        InputCondition::KEY_DOWN | InputCondition::GAME,
3860
        "",
3861
        UseArgs_false,
3862
        Protected_false},
3863
    {"keyPetEmoteShortcut3",
3864
        addKey(SDLK_3),
3865
        emptyKey,
3866
        Input::GRP_PET_EMOTION,
3867
        &Actions::petEmote,
3868
        InputAction::PET_EMOTE, 100,
3869
        InputCondition::KEY_DOWN | InputCondition::GAME,
3870
        "",
3871
        UseArgs_false,
3872
        Protected_false},
3873
    {"keyPetEmoteShortcut4",
3874
        addKey(SDLK_4),
3875
        emptyKey,
3876
        Input::GRP_PET_EMOTION,
3877
        &Actions::petEmote,
3878
        InputAction::PET_EMOTE, 100,
3879
        InputCondition::KEY_DOWN | InputCondition::GAME,
3880
        "",
3881
        UseArgs_false,
3882
        Protected_false},
3883
    {"keyPetEmoteShortcut5",
3884
        addKey(SDLK_5),
3885
        emptyKey,
3886
        Input::GRP_PET_EMOTION,
3887
        &Actions::petEmote,
3888
        InputAction::PET_EMOTE, 100,
3889
        InputCondition::KEY_DOWN | InputCondition::GAME,
3890
        "",
3891
        UseArgs_false,
3892
        Protected_false},
3893
    {"keyPetEmoteShortcut6",
3894
        addKey(SDLK_6),
3895
        emptyKey,
3896
        Input::GRP_PET_EMOTION,
3897
        &Actions::petEmote,
3898
        InputAction::PET_EMOTE, 100,
3899
        InputCondition::KEY_DOWN | InputCondition::GAME,
3900
        "",
3901
        UseArgs_false,
3902
        Protected_false},
3903
    {"keyPetEmoteShortcut7",
3904
        addKey(SDLK_7),
3905
        emptyKey,
3906
        Input::GRP_PET_EMOTION,
3907
        &Actions::petEmote,
3908
        InputAction::PET_EMOTE, 100,
3909
        InputCondition::KEY_DOWN | InputCondition::GAME,
3910
        "",
3911
        UseArgs_false,
3912
        Protected_false},
3913
    {"keyPetEmoteShortcut8",
3914
        addKey(SDLK_8),
3915
        emptyKey,
3916
        Input::GRP_PET_EMOTION,
3917
        &Actions::petEmote,
3918
        InputAction::PET_EMOTE, 100,
3919
        InputCondition::KEY_DOWN | InputCondition::GAME,
3920
        "",
3921
        UseArgs_false,
3922
        Protected_false},
3923
    {"keyPetEmoteShortcut9",
3924
        addKey(SDLK_9),
3925
        emptyKey,
3926
        Input::GRP_PET_EMOTION,
3927
        &Actions::petEmote,
3928
        InputAction::PET_EMOTE, 100,
3929
        InputCondition::KEY_DOWN | InputCondition::GAME,
3930
        "",
3931
        UseArgs_false,
3932
        Protected_false},
3933
    {"keyPetEmoteShortcut10",
3934
        addKey(SDLK_0),
3935
        emptyKey,
3936
        Input::GRP_PET_EMOTION,
3937
        &Actions::petEmote,
3938
        InputAction::PET_EMOTE, 100,
3939
        InputCondition::KEY_DOWN | InputCondition::GAME,
3940
        "",
3941
        UseArgs_false,
3942
        Protected_false},
3943
    {"keyPetEmoteShortcut11",
3944
        addKey(SDLK_MINUS),
3945
        emptyKey,
3946
        Input::GRP_PET_EMOTION,
3947
        &Actions::petEmote,
3948
        InputAction::PET_EMOTE, 100,
3949
        InputCondition::KEY_DOWN | InputCondition::GAME,
3950
        "",
3951
        UseArgs_false,
3952
        Protected_false},
3953
    {"keyPetEmoteShortcut12",
3954
        addKey(SDLK_EQUALS),
3955
        emptyKey,
3956
        Input::GRP_PET_EMOTION,
3957
        &Actions::petEmote,
3958
        InputAction::PET_EMOTE, 100,
3959
        InputCondition::KEY_DOWN | InputCondition::GAME,
3960
        "",
3961
        UseArgs_false,
3962
        Protected_false},
3963
    {"keyPetEmoteShortcut13",
3964
        addKey(SDLK_BACKSPACE),
3965
        emptyKey,
3966
        Input::GRP_PET_EMOTION,
3967
        &Actions::petEmote,
3968
        InputAction::PET_EMOTE, 100,
3969
        InputCondition::KEY_DOWN | InputCondition::GAME,
3970
        "",
3971
        UseArgs_false,
3972
        Protected_false},
3973
    {"keyPetEmoteShortcut14",
3974
        addKey(SDLK_INSERT),
3975
        emptyKey,
3976
        Input::GRP_PET_EMOTION,
3977
        &Actions::petEmote,
3978
        InputAction::PET_EMOTE, 100,
3979
        InputCondition::KEY_DOWN | InputCondition::GAME,
3980
        "",
3981
        UseArgs_false,
3982
        Protected_false},
3983
    {"keyPetEmoteShortcut15",
3984
        addKey(SDLK_HOME),
3985
        emptyKey,
3986
        Input::GRP_PET_EMOTION,
3987
        &Actions::petEmote,
3988
        InputAction::PET_EMOTE, 100,
3989
        InputCondition::KEY_DOWN | InputCondition::GAME,
3990
        "",
3991
        UseArgs_false,
3992
        Protected_false},
3993
    {"keyPetEmoteShortcut16",
3994
        addKey(SDLK_q),
3995
        emptyKey,
3996
        Input::GRP_PET_EMOTION,
3997
        &Actions::petEmote,
3998
        InputAction::PET_EMOTE, 100,
3999
        InputCondition::KEY_DOWN | InputCondition::GAME,
4000
        "",
4001
        UseArgs_false,
4002
        Protected_false},
4003
    {"keyPetEmoteShortcut17",
4004
        addKey(SDLK_w),
4005
        emptyKey,
4006
        Input::GRP_PET_EMOTION,
4007
        &Actions::petEmote,
4008
        InputAction::PET_EMOTE, 100,
4009
        InputCondition::KEY_DOWN | InputCondition::GAME,
4010
        "",
4011
        UseArgs_false,
4012
        Protected_false},
4013
    {"keyPetEmoteShortcut18",
4014
        addKey(SDLK_e),
4015
        emptyKey,
4016
        Input::GRP_PET_EMOTION,
4017
        &Actions::petEmote,
4018
        InputAction::PET_EMOTE, 100,
4019
        InputCondition::KEY_DOWN | InputCondition::GAME,
4020
        "",
4021
        UseArgs_false,
4022
        Protected_false},
4023
    {"keyPetEmoteShortcut19",
4024
        addKey(SDLK_r),
4025
        emptyKey,
4026
        Input::GRP_PET_EMOTION,
4027
        &Actions::petEmote,
4028
        InputAction::PET_EMOTE, 100,
4029
        InputCondition::KEY_DOWN | InputCondition::GAME,
4030
        "",
4031
        UseArgs_false,
4032
        Protected_false},
4033
    {"keyPetEmoteShortcut20",
4034
        addKey(SDLK_t),
4035
        emptyKey,
4036
        Input::GRP_PET_EMOTION,
4037
        &Actions::petEmote,
4038
        InputAction::PET_EMOTE, 100,
4039
        InputCondition::KEY_DOWN | InputCondition::GAME,
4040
        "",
4041
        UseArgs_false,
4042
        Protected_false},
4043
    {"keyPetEmoteShortcut21",
4044
        addKey(SDLK_y),
4045
        emptyKey,
4046
        Input::GRP_PET_EMOTION,
4047
        &Actions::petEmote,
4048
        InputAction::PET_EMOTE, 100,
4049
        InputCondition::KEY_DOWN | InputCondition::GAME,
4050
        "",
4051
        UseArgs_false,
4052
        Protected_false},
4053
    {"keyPetEmoteShortcut22",
4054
        addKey(SDLK_u),
4055
        emptyKey,
4056
        Input::GRP_PET_EMOTION,
4057
        &Actions::petEmote,
4058
        InputAction::PET_EMOTE, 100,
4059
        InputCondition::KEY_DOWN | InputCondition::GAME,
4060
        "",
4061
        UseArgs_false,
4062
        Protected_false},
4063
    {"keyPetEmoteShortcut23",
4064
        addKey(SDLK_i),
4065
        emptyKey,
4066
        Input::GRP_PET_EMOTION,
4067
        &Actions::petEmote,
4068
        InputAction::PET_EMOTE, 100,
4069
        InputCondition::KEY_DOWN | InputCondition::GAME,
4070
        "",
4071
        UseArgs_false,
4072
        Protected_false},
4073
    {"keyPetEmoteShortcut24",
4074
        addKey(SDLK_o),
4075
        emptyKey,
4076
        Input::GRP_PET_EMOTION,
4077
        &Actions::petEmote,
4078
        InputAction::PET_EMOTE, 100,
4079
        InputCondition::KEY_DOWN | InputCondition::GAME,
4080
        "",
4081
        UseArgs_false,
4082
        Protected_false},
4083
    {"keyPetEmoteShortcut25",
4084
        addKey(SDLK_p),
4085
        emptyKey,
4086
        Input::GRP_PET_EMOTION,
4087
        &Actions::petEmote,
4088
        InputAction::PET_EMOTE, 100,
4089
        InputCondition::KEY_DOWN | InputCondition::GAME,
4090
        "",
4091
        UseArgs_false,
4092
        Protected_false},
4093
    {"keyPetEmoteShortcut26",
4094
        addKey(SDLK_LEFTBRACKET),
4095
        emptyKey,
4096
        Input::GRP_PET_EMOTION,
4097
        &Actions::petEmote,
4098
        InputAction::PET_EMOTE, 100,
4099
        InputCondition::KEY_DOWN | InputCondition::GAME,
4100
        "",
4101
        UseArgs_false,
4102
        Protected_false},
4103
    {"keyPetEmoteShortcut27",
4104
        addKey(SDLK_RIGHTBRACKET),
4105
        emptyKey,
4106
        Input::GRP_PET_EMOTION,
4107
        &Actions::petEmote,
4108
        InputAction::PET_EMOTE, 100,
4109
        InputCondition::KEY_DOWN | InputCondition::GAME,
4110
        "",
4111
        UseArgs_false,
4112
        Protected_false},
4113
    {"keyPetEmoteShortcut28",
4114
        addKey(SDLK_BACKSLASH),
4115
        emptyKey,
4116
        Input::GRP_PET_EMOTION,
4117
        &Actions::petEmote,
4118
        InputAction::PET_EMOTE, 100,
4119
        InputCondition::KEY_DOWN | InputCondition::GAME,
4120
        "",
4121
        UseArgs_false,
4122
        Protected_false},
4123
    {"keyPetEmoteShortcut29",
4124
        addKey(SDLK_a),
4125
        emptyKey,
4126
        Input::GRP_PET_EMOTION,
4127
        &Actions::petEmote,
4128
        InputAction::PET_EMOTE, 100,
4129
        InputCondition::KEY_DOWN | InputCondition::GAME,
4130
        "",
4131
        UseArgs_false,
4132
        Protected_false},
4133
    {"keyPetEmoteShortcut30",
4134
        addKey(SDLK_s),
4135
        emptyKey,
4136
        Input::GRP_PET_EMOTION,
4137
        &Actions::petEmote,
4138
        InputAction::PET_EMOTE, 100,
4139
        InputCondition::KEY_DOWN | InputCondition::GAME,
4140
        "",
4141
        UseArgs_false,
4142
        Protected_false},
4143
    {"keyPetEmoteShortcut31",
4144
        addKey(SDLK_d),
4145
        emptyKey,
4146
        Input::GRP_PET_EMOTION,
4147
        &Actions::petEmote,
4148
        InputAction::PET_EMOTE, 100,
4149
        InputCondition::KEY_DOWN | InputCondition::GAME,
4150
        "",
4151
        UseArgs_false,
4152
        Protected_false},
4153
    {"keyPetEmoteShortcut32",
4154
        addKey(SDLK_f),
4155
        emptyKey,
4156
        Input::GRP_PET_EMOTION,
4157
        &Actions::petEmote,
4158
        InputAction::PET_EMOTE, 100,
4159
        InputCondition::KEY_DOWN | InputCondition::GAME,
4160
        "",
4161
        UseArgs_false,
4162
        Protected_false},
4163
    {"keyPetEmoteShortcut33",
4164
        addKey(SDLK_g),
4165
        emptyKey,
4166
        Input::GRP_PET_EMOTION,
4167
        &Actions::petEmote,
4168
        InputAction::PET_EMOTE, 100,
4169
        InputCondition::KEY_DOWN | InputCondition::GAME,
4170
        "",
4171
        UseArgs_false,
4172
        Protected_false},
4173
    {"keyPetEmoteShortcut34",
4174
        addKey(SDLK_h),
4175
        emptyKey,
4176
        Input::GRP_PET_EMOTION,
4177
        &Actions::petEmote,
4178
        InputAction::PET_EMOTE, 100,
4179
        InputCondition::KEY_DOWN | InputCondition::GAME,
4180
        "",
4181
        UseArgs_false,
4182
        Protected_false},
4183
    {"keyPetEmoteShortcut35",
4184
        addKey(SDLK_j),
4185
        emptyKey,
4186
        Input::GRP_PET_EMOTION,
4187
        &Actions::petEmote,
4188
        InputAction::PET_EMOTE, 100,
4189
        InputCondition::KEY_DOWN | InputCondition::GAME,
4190
        "",
4191
        UseArgs_false,
4192
        Protected_false},
4193
    {"keyPetEmoteShortcut36",
4194
        addKey(SDLK_k),
4195
        emptyKey,
4196
        Input::GRP_PET_EMOTION,
4197
        &Actions::petEmote,
4198
        InputAction::PET_EMOTE, 100,
4199
        InputCondition::KEY_DOWN | InputCondition::GAME,
4200
        "",
4201
        UseArgs_false,
4202
        Protected_false},
4203
    {"keyPetEmoteShortcut37",
4204
        addKey(SDLK_l),
4205
        emptyKey,
4206
        Input::GRP_PET_EMOTION,
4207
        &Actions::petEmote,
4208
        InputAction::PET_EMOTE, 100,
4209
        InputCondition::KEY_DOWN | InputCondition::GAME,
4210
        "",
4211
        UseArgs_false,
4212
        Protected_false},
4213
    {"keyPetEmoteShortcut38",
4214
        addKey(SDLK_SEMICOLON),
4215
        emptyKey,
4216
        Input::GRP_PET_EMOTION,
4217
        &Actions::petEmote,
4218
        InputAction::PET_EMOTE, 100,
4219
        InputCondition::KEY_DOWN | InputCondition::GAME,
4220
        "",
4221
        UseArgs_false,
4222
        Protected_false},
4223
    {"keyPetEmoteShortcut39",
4224
        addKey(SDLK_QUOTE),
4225
        emptyKey,
4226
        Input::GRP_PET_EMOTION,
4227
        &Actions::petEmote,
4228
        InputAction::PET_EMOTE, 100,
4229
        InputCondition::KEY_DOWN | InputCondition::GAME,
4230
        "",
4231
        UseArgs_false,
4232
        Protected_false},
4233
    {"keyPetEmoteShortcut40",
4234
        addKey(SDLK_z),
4235
        emptyKey,
4236
        Input::GRP_PET_EMOTION,
4237
        &Actions::petEmote,
4238
        InputAction::PET_EMOTE, 100,
4239
        InputCondition::KEY_DOWN | InputCondition::GAME,
4240
        "",
4241
        UseArgs_false,
4242
        Protected_false},
4243
    {"keyPetEmoteShortcut41",
4244
        addKey(SDLK_x),
4245
        emptyKey,
4246
        Input::GRP_PET_EMOTION,
4247
        &Actions::petEmote,
4248
        InputAction::PET_EMOTE, 100,
4249
        InputCondition::KEY_DOWN | InputCondition::GAME,
4250
        "",
4251
        UseArgs_false,
4252
        Protected_false},
4253
    {"keyPetEmoteShortcut42",
4254
        addKey(SDLK_c),
4255
        emptyKey,
4256
        Input::GRP_PET_EMOTION,
4257
        &Actions::petEmote,
4258
        InputAction::PET_EMOTE, 100,
4259
        InputCondition::KEY_DOWN | InputCondition::GAME,
4260
        "",
4261
        UseArgs_false,
4262
        Protected_false},
4263
    {"keyPetEmoteShortcut43",
4264
        addKey(SDLK_v),
4265
        emptyKey,
4266
        Input::GRP_PET_EMOTION,
4267
        &Actions::petEmote,
4268
        InputAction::PET_EMOTE, 100,
4269
        InputCondition::KEY_DOWN | InputCondition::GAME,
4270
        "",
4271
        UseArgs_false,
4272
        Protected_false},
4273
    {"keyPetEmoteShortcut44",
4274
        addKey(SDLK_b),
4275
        emptyKey,
4276
        Input::GRP_PET_EMOTION,
4277
        &Actions::petEmote,
4278
        InputAction::PET_EMOTE, 100,
4279
        InputCondition::KEY_DOWN | InputCondition::GAME,
4280
        "",
4281
        UseArgs_false,
4282
        Protected_false},
4283
    {"keyPetEmoteShortcut45",
4284
        addKey(SDLK_n),
4285
        emptyKey,
4286
        Input::GRP_PET_EMOTION,
4287
        &Actions::petEmote,
4288
        InputAction::PET_EMOTE, 100,
4289
        InputCondition::KEY_DOWN | InputCondition::GAME,
4290
        "",
4291
        UseArgs_false,
4292
        Protected_false},
4293
    {"keyPetEmoteShortcut46",
4294
        addKey(SDLK_m),
4295
        emptyKey,
4296
        Input::GRP_PET_EMOTION,
4297
        &Actions::petEmote,
4298
        InputAction::PET_EMOTE, 100,
4299
        InputCondition::KEY_DOWN | InputCondition::GAME,
4300
        "",
4301
        UseArgs_false,
4302
        Protected_false},
4303
    {"keyPetEmoteShortcut47",
4304
        addKey(SDLK_COMMA),
4305
        emptyKey,
4306
        Input::GRP_PET_EMOTION,
4307
        &Actions::petEmote,
4308
        InputAction::PET_EMOTE, 100,
4309
        InputCondition::KEY_DOWN | InputCondition::GAME,
4310
        "",
4311
        UseArgs_false,
4312
        Protected_false},
4313
    {"keyPetEmoteShortcut48",
4314
        addKey(SDLK_PERIOD),
4315
        emptyKey,
4316
        Input::GRP_PET_EMOTION,
4317
        &Actions::petEmote,
4318
        InputAction::PET_EMOTE, 100,
4319
        InputCondition::KEY_DOWN | InputCondition::GAME,
4320
        "",
4321
        UseArgs_false,
4322
        Protected_false},
4323
    {"keyCatchPet",
4324
        defaultAction(&Actions::catchPet),
4325
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4326
        "catchpet|catch|taming",
4327
        UseArgs_true,
4328
        Protected_true},
4329
    {"keyChatServerIgnoreWhisper",
4330
        emptyKey,
4331
        emptyKey,
4332
        Input::GRP_DEFAULT | Input::GRP_GUI,
4333
        &Actions::serverIgnoreWhisper,
4334
        InputAction::NO_VALUE, 50,
4335
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4336
        "serverignore",
4337
        UseArgs_false,
4338
        Protected_true},
4339
    {"keyChatServerUnIgnoreWhisper",
4340
        emptyKey,
4341
        emptyKey,
4342
        Input::GRP_DEFAULT | Input::GRP_GUI,
4343
        &Actions::serverUnIgnoreWhisper,
4344
        InputAction::NO_VALUE, 50,
4345
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4346
        "serverunignore",
4347
        UseArgs_false,
4348
        Protected_true},
4349
    {"keyMercenaryFire",
4350
        defaultAction(&Actions::mercenaryFire),
4351
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4352
        "mercenaryfire|firemercenary",
4353
        UseArgs_false,
4354
        Protected_true},
4355
    {"keyTargetMercenary",
4356
        defaultAction(&Actions::targetMercenary),
4357
        InputCondition::KEY_DOWN |
4358
            InputCondition::INGAME |
4359
            InputCondition::NOTARGET,
4360
        "targetmercenary",
4361
        UseArgs_false,
4362
        Protected_false},
4363
    {"keyTargetPet",
4364
        defaultAction(&Actions::targetPet),
4365
        InputCondition::KEY_DOWN |
4366
            InputCondition::INGAME |
4367
            InputCondition::NOTARGET,
4368
        "targetpet",
4369
        UseArgs_false,
4370
        Protected_false},
4371
    {"keyPetSetName",
4372
        defaultAction(&Actions::setPetName),
4373
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4374
        "setpetname|petsetname",
4375
        UseArgs_false,
4376
        Protected_true},
4377
    {"keyHomunculusSetName",
4378
        defaultAction(&Actions::setHomunculusName),
4379
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4380
        "sethomunname|homunsetname|sethomunculusname|homunculussetname",
4381
        UseArgs_false,
4382
        Protected_true},
4383
    {"keyHomunculusFire",
4384
        defaultAction(&Actions::fireHomunculus),
4385
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4386
        "firehomunculus|homunculusfire|firehomun|homunfire",
4387
        UseArgs_false,
4388
        Protected_true},
4389
    {"keyWindowBank",
4390
        emptyKey,
4391
        emptyKey,
4392
        Input::GRP_DEFAULT | Input::GRP_GUI,
4393
        &Actions::bankWindowShow,
4394
        InputAction::NO_VALUE, 50,
4395
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT0,
4396
        "bank|openbank",
4397
        UseArgs_false,
4398
        Protected_false},
4399
    {"keyInventoryPrevTab",
4400
        emptyKey,
4401
        emptyKey,
4402
        Input::GRP_DEFAULT | Input::GRP_GUI,
4403
        &Actions::prevInvTab,
4404
        InputAction::NO_VALUE, 50,
4405
        InputCondition::KEY_DOWN |
4406
            InputCondition::NOINPUT |
4407
            InputCondition::INGAME,
4408
        "previnvtab",
4409
        UseArgs_false,
4410
        Protected_false},
4411
    {"keyInventoryNextTab",
4412
        emptyKey,
4413
        emptyKey,
4414
        Input::GRP_DEFAULT | Input::GRP_GUI,
4415
        &Actions::nextInvTab,
4416
        InputAction::NO_VALUE, 50,
4417
        InputCondition::KEY_DOWN |
4418
            InputCondition::NOINPUT |
4419
            InputCondition::INGAME,
4420
        "nextinvtab",
4421
        UseArgs_false,
4422
        Protected_false},
4423
    {"keyContextMenu",
4424
        defaultAction(&Actions::contextMenu),
4425
        InputCondition::KEY_DOWN |
4426
            InputCondition::NOINPUT |
4427
            InputCondition::NOAWAY |
4428
            InputCondition::NOMODAL |
4429
            InputCondition::INGAME,
4430
        "contextmenu",
4431
        UseArgs_false,
4432
        Protected_false},
4433
    {"keyBuy",
4434
        defaultAction(&Actions::buy),
4435
        InputCondition::KEY_DOWN | InputCondition::GAME,
4436
        "buy",
4437
        UseArgs_false,
4438
        Protected_false},
4439
    {"keySell",
4440
        defaultAction(&Actions::sell),
4441
        InputCondition::KEY_DOWN | InputCondition::GAME,
4442
        "sell",
4443
        UseArgs_false,
4444
        Protected_false},
4445
    {"keyWhisper2",
4446
        defaultAction(&Actions::msg2),
4447
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4448
        "w2|whisper2|msg2",
4449
        UseArgs_true,
4450
        Protected_true},
4451
    {"keyGuild",
4452
        defaultAction(&Actions::guild),
4453
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4454
        "guild",
4455
        UseArgs_true,
4456
        Protected_true},
4457
    {"keyNuke",
4458
        defaultAction(&Actions::chatNuke),
4459
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4460
        "nuke",
4461
        UseArgs_true,
4462
        Protected_true},
4463
    {"keyUse",
4464
        defaultAction(&Actions::useItem),
4465
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4466
        "use|useitem",
4467
        UseArgs_true,
4468
        Protected_true},
4469
    {"keyChatAdd",
4470
        defaultAction(&Actions::chatAdd),
4471
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4472
        "addchat|chatadd",
4473
        UseArgs_true,
4474
        Protected_true},
4475
    {"keyWhisperText",
4476
        defaultAction(&Actions::msgText),
4477
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4478
        "wt|whispertext|msgtext",
4479
        UseArgs_true,
4480
        Protected_true},
4481
    {"keyNavigateTo",
4482
        defaultAction(&Actions::navigateTo),
4483
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4484
        "navigateto",
4485
        UseArgs_true,
4486
        Protected_false},
4487
    {"keyCameraMove",
4488
        defaultAction(&Actions::moveCamera),
4489
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4490
        "movecamera|cameramove",
4491
        UseArgs_true,
4492
        Protected_false},
4493
    {"keyDropItem",
4494
        defaultAction(&Actions::dropItemId),
4495
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4496
        "dropitem",
4497
        UseArgs_true,
4498
        Protected_true},
4499
    {"keyDropItemAll",
4500
        defaultAction(&Actions::dropItemIdAll),
4501
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4502
        "dropitemall",
4503
        UseArgs_true,
4504
        Protected_true},
4505
    {"keyDropInv",
4506
        defaultAction(&Actions::dropItemInv),
4507
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4508
        "dropinv",
4509
        UseArgs_true,
4510
        Protected_true},
4511
    {"keyDropInvAll",
4512
        defaultAction(&Actions::dropItemInvAll),
4513
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4514
        "dropinvall",
4515
        UseArgs_true,
4516
        Protected_true},
4517
    {"keyUseInv",
4518
        defaultAction(&Actions::useItemInv),
4519
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4520
        "useinv",
4521
        UseArgs_true,
4522
        Protected_true},
4523
    {"keyInvToStorage",
4524
        defaultAction(&Actions::invToStorage),
4525
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4526
        "invtostorage|invstorage",
4527
        UseArgs_true,
4528
        Protected_true},
4529
    {"keyTradeAdd",
4530
        defaultAction(&Actions::tradeAdd),
4531
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4532
        "tradeadd|addtrade",
4533
        UseArgs_true,
4534
        Protected_true},
4535
    {"keyStorageToInv",
4536
        defaultAction(&Actions::storageToInv),
4537
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4538
        "storagetoinv|storageinv",
4539
        UseArgs_true,
4540
        Protected_true},
4541
    {"keyProtectItem",
4542
        defaultAction(&Actions::protectItem),
4543
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4544
        "protectitem|itemprotect",
4545
        UseArgs_true,
4546
        Protected_true},
4547
    {"keyUnProtectItem",
4548
        defaultAction(&Actions::unprotectItem),
4549
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4550
        "unprotectitem|itemunprotect",
4551
        UseArgs_true,
4552
        Protected_true},
4553
    {"keyKickParty",
4554
        defaultAction(&Actions::kickParty),
4555
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4556
        "kickparty|partykick",
4557
        UseArgs_true,
4558
        Protected_true},
4559
    {"keyAddText",
4560
        defaultAction(&Actions::addText),
4561
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4562
        "addtext|textadd",
4563
        UseArgs_true,
4564
        Protected_true},
4565
    {"keyKick",
4566
        defaultAction(&Actions::kick),
4567
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4568
        "kick",
4569
        UseArgs_true,
4570
        Protected_true},
4571
    {"keyLeaveParty",
4572
        defaultAction(&Actions::leaveParty),
4573
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4574
        "leaveparty|partyleave",
4575
        UseArgs_true,
4576
        Protected_true},
4577
    {"keyWarp",
4578
        defaultAction(&Actions::warp),
4579
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4580
        "warp",
4581
        UseArgs_true,
4582
        Protected_true},
4583
    {"keyClearChat",
4584
        defaultAction(&Actions::clearChat),
4585
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4586
        "clearchat|chatclear",
4587
        UseArgs_false,
4588
        Protected_false},
4589
    {"keyPetMoveUp",
4590
        defaultAction(&Actions::petMoveUp),
4591
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4592
        "petmoveup|moveuppet",
4593
        UseArgs_false,
4594
        Protected_false},
4595
    {"keyPetMoveDown",
4596
        defaultAction(&Actions::petMoveDown),
4597
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4598
        "petmovedown|movedownpet",
4599
        UseArgs_false,
4600
        Protected_false},
4601
    {"keyPetMoveLeft",
4602
        defaultAction(&Actions::petMoveLeft),
4603
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4604
        "petmoveleft|moveleftpet",
4605
        UseArgs_false,
4606
        Protected_false},
4607
    {"keyPetMoveRight",
4608
        defaultAction(&Actions::petMoveRight),
4609
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4610
        "petmoveright|moverightpet",
4611
        UseArgs_false,
4612
        Protected_false},
4613
    {"keyPetDirectUp",
4614
        defaultAction(&Actions::petDirectUp),
4615
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4616
        "petdirectup|directuppet",
4617
        UseArgs_false,
4618
        Protected_false},
4619
    {"keyPetDirectDown",
4620
        defaultAction(&Actions::petDirectDown),
4621
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4622
        "petdirectdown|directdownpet",
4623
        UseArgs_false,
4624
        Protected_false},
4625
    {"keyPetDirectLeft",
4626
        defaultAction(&Actions::petDirectLeft),
4627
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4628
        "petdirectleft|directleftpet",
4629
        UseArgs_false,
4630
        Protected_false},
4631
    {"keyPetDirectRight",
4632
        defaultAction(&Actions::petDirectRight),
4633
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4634
        "petdirectright|directrightpet",
4635
        UseArgs_false,
4636
        Protected_false},
4637
    {"keyPetAiStart",
4638
        defaultAction(nullptr),
4639
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4640
        "",
4641
        UseArgs_false,
4642
        Protected_false},
4643
    {"keyPetAiStop",
4644
        defaultAction(nullptr),
4645
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4646
        "",
4647
        UseArgs_false,
4648
        Protected_false},
4649
    {"keyGeneralTab",
4650
        defaultAction(&Actions::chatGeneralTab),
4651
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4652
        "generaltab|generalchattab|general",
4653
        UseArgs_false,
4654
        Protected_false},
4655
    {"keyDebugTab",
4656
        defaultAction(&Actions::chatDebugTab),
4657
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4658
        "debugtab|debugchattab",
4659
        UseArgs_false,
4660
        Protected_false},
4661
    {"keyBattleTab",
4662
        defaultAction(&Actions::chatBattleTab),
4663
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4664
        "battletab|battlechattab",
4665
        UseArgs_false,
4666
        Protected_false},
4667
    {"keyTradeTab",
4668
        defaultAction(&Actions::chatTradeTab),
4669
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4670
        "tradetab|tradechattab",
4671
        UseArgs_false,
4672
        Protected_false},
4673
    {"keyLangTab",
4674
        defaultAction(&Actions::chatLangTab),
4675
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4676
        "langtab|langchattab",
4677
        UseArgs_false,
4678
        Protected_false},
4679
    {"keyGmTab",
4680
        defaultAction(&Actions::chatGmTab),
4681
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4682
        "gmtab|gmchattab",
4683
        UseArgs_false,
4684
        Protected_false},
4685
    {"keyPartyTab",
4686
        defaultAction(&Actions::chatPartyTab),
4687
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4688
        "partytab|partychattab",
4689
        UseArgs_false,
4690
        Protected_false},
4691
    {"keyGuildTab",
4692
        defaultAction(&Actions::chatGuildTab),
4693
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4694
        "guildtab|guildchattab",
4695
        UseArgs_false,
4696
        Protected_false},
4697
    {"keyDropClear",
4698
        defaultAction(&Actions::clearDrop),
4699
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4700
        "cleardrops|cleardrop|cleardropwindow|dropclear|dropsclear",
4701
        UseArgs_false,
4702
        Protected_true},
4703
    {"keyWindowCart",
4704
        defaultAction(&Actions::cartWindowShow),
4705
        InputCondition::KEY_DOWN | InputCondition::SHORTCUT0,
4706
        "cart|opencart",
4707
        UseArgs_false,
4708
        Protected_false},
4709
    {"keyMagicHealMostDamaged",
4710
        defaultAction(&Actions::healmd),
4711
        InputCondition::KEY_DOWN |
4712
            InputCondition::GAME |
4713
            InputCondition::VALIDSPEED,
4714
        "healmd|saveass",
4715
        UseArgs_false,
4716
        Protected_false},
4717
    {"keyPetMove",
4718
        defaultAction(&Actions::petMove),
4719
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4720
        "movepet|petmove",
4721
        UseArgs_true,
4722
        Protected_false},
4723
    {"keyHomunTalk",
4724
        defaultAction(&Actions::homunTalk),
4725
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4726
        "homuntalk|merctalk",
4727
        UseArgs_true,
4728
        Protected_true},
4729
    {"keyHomunEmote",
4730
        defaultAction(&Actions::commandHomunEmote),
4731
        InputCondition::KEY_DOWN | InputCondition::INGAME,
4732
        "homunemote|mercemote",
4733
        UseArgs_true,
4734
        Protected_false},
4735
    {"keyHomunSmilie",
4736
        defaultAction(nullptr),
4737
        InputCondition::KEY_DOWN |
4738
            InputCondition::DEFAULT |
4739
            InputCondition::INGAME,
4740
        "",
4741
        UseArgs_false,
4742
        Protected_false},
4743
    {"keyHomunEmoteShortcut1",
4744
        addKey(SDLK_1),
4745
        emptyKey,
4746
        Input::GRP_HOMUN_EMOTION,
4747
        &Actions::homunEmote,
4748
        InputAction::HOMUN_EMOTE, 100,
4749
        InputCondition::KEY_DOWN | InputCondition::GAME,
4750
        "",
4751
        UseArgs_false,
4752
        Protected_false},
4753
    {"keyHomunEmoteShortcut2",
4754
        addKey(SDLK_2),
4755
        emptyKey,
4756
        Input::GRP_HOMUN_EMOTION,
4757
        &Actions::homunEmote,
4758
        InputAction::HOMUN_EMOTE, 100,
4759
        InputCondition::KEY_DOWN | InputCondition::GAME,
4760
        "",
4761
        UseArgs_false,
4762
        Protected_false},
4763
    {"keyHomunEmoteShortcut3",
4764
        addKey(SDLK_3),
4765
        emptyKey,
4766
        Input::GRP_HOMUN_EMOTION,
4767
        &Actions::homunEmote,
4768
        InputAction::HOMUN_EMOTE, 100,
4769
        InputCondition::KEY_DOWN | InputCondition::GAME,
4770
        "",
4771
        UseArgs_false,
4772
        Protected_false},
4773
    {"keyHomunEmoteShortcut4",
4774
        addKey(SDLK_4),
4775
        emptyKey,
4776
        Input::GRP_HOMUN_EMOTION,
4777
        &Actions::homunEmote,
4778
        InputAction::HOMUN_EMOTE, 100,
4779
        InputCondition::KEY_DOWN | InputCondition::GAME,
4780
        "",
4781
        UseArgs_false,
4782
        Protected_false},
4783
    {"keyHomunEmoteShortcut5",
4784
        addKey(SDLK_5),
4785
        emptyKey,
4786
        Input::GRP_HOMUN_EMOTION,
4787
        &Actions::homunEmote,
4788
        InputAction::HOMUN_EMOTE, 100,
4789
        InputCondition::KEY_DOWN | InputCondition::GAME,
4790
        "",
4791
        UseArgs_false,
4792
        Protected_false},
4793
    {"keyHomunEmoteShortcut6",
4794
        addKey(SDLK_6),
4795
        emptyKey,
4796
        Input::GRP_HOMUN_EMOTION,
4797
        &Actions::homunEmote,
4798
        InputAction::HOMUN_EMOTE, 100,
4799
        InputCondition::KEY_DOWN | InputCondition::GAME,
4800
        "",
4801
        UseArgs_false,
4802
        Protected_false},
4803
    {"keyHomunEmoteShortcut7",
4804
        addKey(SDLK_7),
4805
        emptyKey,
4806
        Input::GRP_HOMUN_EMOTION,
4807
        &Actions::homunEmote,
4808
        InputAction::HOMUN_EMOTE, 100,
4809
        InputCondition::KEY_DOWN | InputCondition::GAME,
4810
        "",
4811
        UseArgs_false,
4812
        Protected_false},
4813
    {"keyHomunEmoteShortcut8",
4814
        addKey(SDLK_8),
4815
        emptyKey,
4816
        Input::GRP_HOMUN_EMOTION,
4817
        &Actions::homunEmote,
4818
        InputAction::HOMUN_EMOTE, 100,
4819
        InputCondition::KEY_DOWN | InputCondition::GAME,
4820
        "",
4821
        UseArgs_false,
4822
        Protected_false},
4823
    {"keyHomunEmoteShortcut9",
4824
        addKey(SDLK_9),
4825
        emptyKey,
4826
        Input::GRP_HOMUN_EMOTION,
4827
        &Actions::homunEmote,
4828
        InputAction::HOMUN_EMOTE, 100,
4829
        InputCondition::KEY_DOWN | InputCondition::GAME,
4830
        "",
4831
        UseArgs_false,
4832
        Protected_false},
4833
    {"keyHomunEmoteShortcut10",
4834
        addKey(SDLK_0),
4835
        emptyKey,
4836
        Input::GRP_HOMUN_EMOTION,
4837
        &Actions::homunEmote,
4838
        InputAction::HOMUN_EMOTE, 100,
4839
        InputCondition::KEY_DOWN | InputCondition::GAME,
4840
        "",
4841
        UseArgs_false,
4842
        Protected_false},
4843
    {"keyHomunEmoteShortcut11",
4844
        addKey(SDLK_MINUS),
4845
        emptyKey,
4846
        Input::GRP_HOMUN_EMOTION,
4847
        &Actions::homunEmote,
4848
        InputAction::HOMUN_EMOTE, 100,
4849
        InputCondition::KEY_DOWN | InputCondition::GAME,
4850
        "",
4851
        UseArgs_false,
4852
        Protected_false},
4853
    {"keyHomunEmoteShortcut12",
4854
        addKey(SDLK_EQUALS),
4855
        emptyKey,
4856
        Input::GRP_HOMUN_EMOTION,
4857
        &Actions::homunEmote,
4858
        InputAction::HOMUN_EMOTE, 100,
4859
        InputCondition::KEY_DOWN | InputCondition::GAME,
4860
        "",
4861
        UseArgs_false,
4862
        Protected_false},
4863
    {"keyHomunEmoteShortcut13",
4864
        addKey(SDLK_BACKSPACE),
4865
        emptyKey,
4866
        Input::GRP_HOMUN_EMOTION,
4867
        &Actions::homunEmote,
4868
        InputAction::HOMUN_EMOTE, 100,
4869
        InputCondition::KEY_DOWN | InputCondition::GAME,
4870
        "",
4871
        UseArgs_false,
4872
        Protected_false},
4873
    {"keyHomunEmoteShortcut14",
4874
        addKey(SDLK_INSERT),
4875
        emptyKey,
4876
        Input::GRP_HOMUN_EMOTION,
4877
        &Actions::homunEmote,
4878
        InputAction::HOMUN_EMOTE, 100,
4879
        InputCondition::KEY_DOWN | InputCondition::GAME,
4880
        "",
4881
        UseArgs_false,
4882
        Protected_false},
4883
    {"keyHomunEmoteShortcut15",
4884
        addKey(SDLK_HOME),
4885
        emptyKey,
4886
        Input::GRP_HOMUN_EMOTION,
4887
        &Actions::homunEmote,
4888
        InputAction::HOMUN_EMOTE, 100,
4889
        InputCondition::KEY_DOWN | InputCondition::GAME,
4890
        "",
4891
        UseArgs_false,
4892
        Protected_false},
4893
    {"keyHomunEmoteShortcut16",
4894
        addKey(SDLK_q),
4895
        emptyKey,
4896
        Input::GRP_HOMUN_EMOTION,
4897
        &Actions::homunEmote,
4898
        InputAction::HOMUN_EMOTE, 100,
4899
        InputCondition::KEY_DOWN | InputCondition::GAME,
4900
        "",
4901
        UseArgs_false,
4902
        Protected_false},
4903
    {"keyHomunEmoteShortcut17",
4904
        addKey(SDLK_w),
4905
        emptyKey,
4906
        Input::GRP_HOMUN_EMOTION,
4907
        &Actions::homunEmote,
4908
        InputAction::HOMUN_EMOTE, 100,
4909
        InputCondition::KEY_DOWN | InputCondition::GAME,
4910
        "",
4911
        UseArgs_false,
4912
        Protected_false},
4913
    {"keyHomunEmoteShortcut18",
4914
        addKey(SDLK_e),
4915
        emptyKey,
4916
        Input::GRP_HOMUN_EMOTION,
4917
        &Actions::homunEmote,
4918
        InputAction::HOMUN_EMOTE, 100,
4919
        InputCondition::KEY_DOWN | InputCondition::GAME,
4920
        "",
4921
        UseArgs_false,
4922
        Protected_false},
4923
    {"keyHomunEmoteShortcut19",
4924
        addKey(SDLK_r),
4925
        emptyKey,
4926
        Input::GRP_HOMUN_EMOTION,
4927
        &Actions::homunEmote,
4928
        InputAction::HOMUN_EMOTE, 100,
4929
        InputCondition::KEY_DOWN | InputCondition::GAME,
4930
        "",
4931
        UseArgs_false,
4932
        Protected_false},
4933
    {"keyHomunEmoteShortcut20",
4934
        addKey(SDLK_t),
4935
        emptyKey,
4936
        Input::GRP_HOMUN_EMOTION,
4937
        &Actions::homunEmote,
4938
        InputAction::HOMUN_EMOTE, 100,
4939
        InputCondition::KEY_DOWN | InputCondition::GAME,
4940
        "",
4941
        UseArgs_false,
4942
        Protected_false},
4943
    {"keyHomunEmoteShortcut21",
4944
        addKey(SDLK_y),
4945
        emptyKey,
4946
        Input::GRP_HOMUN_EMOTION,
4947
        &Actions::homunEmote,
4948
        InputAction::HOMUN_EMOTE, 100,
4949
        InputCondition::KEY_DOWN | InputCondition::GAME,
4950
        "",
4951
        UseArgs_false,
4952
        Protected_false},
4953
    {"keyHomunEmoteShortcut22",
4954
        addKey(SDLK_u),
4955
        emptyKey,
4956
        Input::GRP_HOMUN_EMOTION,
4957
        &Actions::homunEmote,
4958
        InputAction::HOMUN_EMOTE, 100,
4959
        InputCondition::KEY_DOWN | InputCondition::GAME,
4960
        "",
4961
        UseArgs_false,
4962
        Protected_false},
4963
    {"keyHomunEmoteShortcut23",
4964
        addKey(SDLK_i),
4965
        emptyKey,
4966
        Input::GRP_HOMUN_EMOTION,
4967
        &Actions::homunEmote,
4968
        InputAction::HOMUN_EMOTE, 100,
4969
        InputCondition::KEY_DOWN | InputCondition::GAME,
4970
        "",
4971
        UseArgs_false,
4972
        Protected_false},
4973
    {"keyHomunEmoteShortcut24",
4974
        addKey(SDLK_o),
4975
        emptyKey,
4976
        Input::GRP_HOMUN_EMOTION,
4977
        &Actions::homunEmote,
4978
        InputAction::HOMUN_EMOTE, 100,
4979
        InputCondition::KEY_DOWN | InputCondition::GAME,
4980
        "",
4981
        UseArgs_false,
4982
        Protected_false},
4983
    {"keyHomunEmoteShortcut25",
4984
        addKey(SDLK_p),
4985
        emptyKey,
4986
        Input::GRP_HOMUN_EMOTION,
4987
        &Actions::homunEmote,
4988
        InputAction::HOMUN_EMOTE, 100,
4989
        InputCondition::KEY_DOWN | InputCondition::GAME,
4990
        "",
4991
        UseArgs_false,
4992
        Protected_false},
4993
    {"keyHomunEmoteShortcut26",
4994
        addKey(SDLK_LEFTBRACKET),
4995
        emptyKey,
4996
        Input::GRP_HOMUN_EMOTION,
4997
        &Actions::homunEmote,
4998
        InputAction::HOMUN_EMOTE, 100,
4999
        InputCondition::KEY_DOWN | InputCondition::GAME,
5000
        "",
5001
        UseArgs_false,
5002
        Protected_false},
5003
    {"keyHomunEmoteShortcut27",
5004
        addKey(SDLK_RIGHTBRACKET),
5005
        emptyKey,
5006
        Input::GRP_HOMUN_EMOTION,
5007
        &Actions::homunEmote,
5008
        InputAction::HOMUN_EMOTE, 100,
5009
        InputCondition::KEY_DOWN | InputCondition::GAME,
5010
        "",
5011
        UseArgs_false,
5012
        Protected_false},
5013
    {"keyHomunEmoteShortcut28",
5014
        addKey(SDLK_BACKSLASH),
5015
        emptyKey,
5016
        Input::GRP_HOMUN_EMOTION,
5017
        &Actions::homunEmote,
5018
        InputAction::HOMUN_EMOTE, 100,
5019
        InputCondition::KEY_DOWN | InputCondition::GAME,
5020
        "",
5021
        UseArgs_false,
5022
        Protected_false},
5023
    {"keyHomunEmoteShortcut29",
5024
        addKey(SDLK_a),
5025
        emptyKey,
5026
        Input::GRP_HOMUN_EMOTION,
5027
        &Actions::homunEmote,
5028
        InputAction::HOMUN_EMOTE, 100,
5029
        InputCondition::KEY_DOWN | InputCondition::GAME,
5030
        "",
5031
        UseArgs_false,
5032
        Protected_false},
5033
    {"keyHomunEmoteShortcut30",
5034
        addKey(SDLK_s),
5035
        emptyKey,
5036
        Input::GRP_HOMUN_EMOTION,
5037
        &Actions::homunEmote,
5038
        InputAction::HOMUN_EMOTE, 100,
5039
        InputCondition::KEY_DOWN | InputCondition::GAME,
5040
        "",
5041
        UseArgs_false,
5042
        Protected_false},
5043
    {"keyHomunEmoteShortcut31",
5044
        addKey(SDLK_d),
5045
        emptyKey,
5046
        Input::GRP_HOMUN_EMOTION,
5047
        &Actions::homunEmote,
5048
        InputAction::HOMUN_EMOTE, 100,
5049
        InputCondition::KEY_DOWN | InputCondition::GAME,
5050
        "",
5051
        UseArgs_false,
5052
        Protected_false},
5053
    {"keyHomunEmoteShortcut32",
5054
        addKey(SDLK_f),
5055
        emptyKey,
5056
        Input::GRP_HOMUN_EMOTION,
5057
        &Actions::homunEmote,
5058
        InputAction::HOMUN_EMOTE, 100,
5059
        InputCondition::KEY_DOWN | InputCondition::GAME,
5060
        "",
5061
        UseArgs_false,
5062
        Protected_false},
5063
    {"keyHomunEmoteShortcut33",
5064
        addKey(SDLK_g),
5065
        emptyKey,
5066
        Input::GRP_HOMUN_EMOTION,
5067
        &Actions::homunEmote,
5068
        InputAction::HOMUN_EMOTE, 100,
5069
        InputCondition::KEY_DOWN | InputCondition::GAME,
5070
        "",
5071
        UseArgs_false,
5072
        Protected_false},
5073
    {"keyHomunEmoteShortcut34",
5074
        addKey(SDLK_h),
5075
        emptyKey,
5076
        Input::GRP_HOMUN_EMOTION,
5077
        &Actions::homunEmote,
5078
        InputAction::HOMUN_EMOTE, 100,
5079
        InputCondition::KEY_DOWN | InputCondition::GAME,
5080
        "",
5081
        UseArgs_false,
5082
        Protected_false},
5083
    {"keyHomunEmoteShortcut35",
5084
        addKey(SDLK_j),
5085
        emptyKey,
5086
        Input::GRP_HOMUN_EMOTION,
5087
        &Actions::homunEmote,
5088
        InputAction::HOMUN_EMOTE, 100,
5089
        InputCondition::KEY_DOWN | InputCondition::GAME,
5090
        "",
5091
        UseArgs_false,
5092
        Protected_false},
5093
    {"keyHomunEmoteShortcut36",
5094
        addKey(SDLK_k),
5095
        emptyKey,
5096
        Input::GRP_HOMUN_EMOTION,
5097
        &Actions::homunEmote,
5098
        InputAction::HOMUN_EMOTE, 100,
5099
        InputCondition::KEY_DOWN | InputCondition::GAME,
5100
        "",
5101
        UseArgs_false,
5102
        Protected_false},
5103
    {"keyHomunEmoteShortcut37",
5104
        addKey(SDLK_l),
5105
        emptyKey,
5106
        Input::GRP_HOMUN_EMOTION,
5107
        &Actions::homunEmote,
5108
        InputAction::HOMUN_EMOTE, 100,
5109
        InputCondition::KEY_DOWN | InputCondition::GAME,
5110
        "",
5111
        UseArgs_false,
5112
        Protected_false},
5113
    {"keyHomunEmoteShortcut38",
5114
        addKey(SDLK_SEMICOLON),
5115
        emptyKey,
5116
        Input::GRP_HOMUN_EMOTION,
5117
        &Actions::homunEmote,
5118
        InputAction::HOMUN_EMOTE, 100,
5119
        InputCondition::KEY_DOWN | InputCondition::GAME,
5120
        "",
5121
        UseArgs_false,
5122
        Protected_false},
5123
    {"keyHomunEmoteShortcut39",
5124
        addKey(SDLK_QUOTE),
5125
        emptyKey,
5126
        Input::GRP_HOMUN_EMOTION,
5127
        &Actions::homunEmote,
5128
        InputAction::HOMUN_EMOTE, 100,
5129
        InputCondition::KEY_DOWN | InputCondition::GAME,
5130
        "",
5131
        UseArgs_false,
5132
        Protected_false},
5133
    {"keyHomunEmoteShortcut40",
5134
        addKey(SDLK_z),
5135
        emptyKey,
5136
        Input::GRP_HOMUN_EMOTION,
5137
        &Actions::homunEmote,
5138
        InputAction::HOMUN_EMOTE, 100,
5139
        InputCondition::KEY_DOWN | InputCondition::GAME,
5140
        "",
5141
        UseArgs_false,
5142
        Protected_false},
5143
    {"keyHomunEmoteShortcut41",
5144
        addKey(SDLK_x),
5145
        emptyKey,
5146
        Input::GRP_HOMUN_EMOTION,
5147
        &Actions::homunEmote,
5148
        InputAction::HOMUN_EMOTE, 100,
5149
        InputCondition::KEY_DOWN | InputCondition::GAME,
5150
        "",
5151
        UseArgs_false,
5152
        Protected_false},
5153
    {"keyHomunEmoteShortcut42",
5154
        addKey(SDLK_c),
5155
        emptyKey,
5156
        Input::GRP_HOMUN_EMOTION,
5157
        &Actions::homunEmote,
5158
        InputAction::HOMUN_EMOTE, 100,
5159
        InputCondition::KEY_DOWN | InputCondition::GAME,
5160
        "",
5161
        UseArgs_false,
5162
        Protected_false},
5163
    {"keyHomunEmoteShortcut43",
5164
        addKey(SDLK_v),
5165
        emptyKey,
5166
        Input::GRP_HOMUN_EMOTION,
5167
        &Actions::homunEmote,
5168
        InputAction::HOMUN_EMOTE, 100,
5169
        InputCondition::KEY_DOWN | InputCondition::GAME,
5170
        "",
5171
        UseArgs_false,
5172
        Protected_false},
5173
    {"keyHomunEmoteShortcut44",
5174
        addKey(SDLK_b),
5175
        emptyKey,
5176
        Input::GRP_HOMUN_EMOTION,
5177
        &Actions::homunEmote,
5178
        InputAction::HOMUN_EMOTE, 100,
5179
        InputCondition::KEY_DOWN | InputCondition::GAME,
5180
        "",
5181
        UseArgs_false,
5182
        Protected_false},
5183
    {"keyHomunEmoteShortcut45",
5184
        addKey(SDLK_n),
5185
        emptyKey,
5186
        Input::GRP_HOMUN_EMOTION,
5187
        &Actions::homunEmote,
5188
        InputAction::HOMUN_EMOTE, 100,
5189
        InputCondition::KEY_DOWN | InputCondition::GAME,
5190
        "",
5191
        UseArgs_false,
5192
        Protected_false},
5193
    {"keyHomunEmoteShortcut46",
5194
        addKey(SDLK_m),
5195
        emptyKey,
5196
        Input::GRP_HOMUN_EMOTION,
5197
        &Actions::homunEmote,
5198
        InputAction::HOMUN_EMOTE, 100,
5199
        InputCondition::KEY_DOWN | InputCondition::GAME,
5200
        "",
5201
        UseArgs_false,
5202
        Protected_false},
5203
    {"keyHomunEmoteShortcut47",
5204
        addKey(SDLK_COMMA),
5205
        emptyKey,
5206
        Input::GRP_HOMUN_EMOTION,
5207
        &Actions::homunEmote,
5208
        InputAction::HOMUN_EMOTE, 100,
5209
        InputCondition::KEY_DOWN | InputCondition::GAME,
5210
        "",
5211
        UseArgs_false,
5212
        Protected_false},
5213
    {"keyHomunEmoteShortcut48",
5214
        addKey(SDLK_PERIOD),
5215
        emptyKey,
5216
        Input::GRP_HOMUN_EMOTION,
5217
        &Actions::homunEmote,
5218
        InputAction::HOMUN_EMOTE, 100,
5219
        InputCondition::KEY_DOWN | InputCondition::GAME,
5220
        "",
5221
        UseArgs_false,
5222
        Protected_false},
5223
    {"keyKickGuild",
5224
        defaultAction(&Actions::kickGuild),
5225
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5226
        "kickguild|guildkick",
5227
        UseArgs_true,
5228
        Protected_true},
5229
    {"keyHat",
5230
        defaultAction(&Actions::hat),
5231
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5232
        "hat|hats|showhat",
5233
        UseArgs_false,
5234
        Protected_false},
5235
    {"keyCreatePublicRoom",
5236
        defaultAction(&Actions::createPublicChatRoom),
5237
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5238
        "createroom|createpublicroom",
5239
        UseArgs_true,
5240
        Protected_true},
5241
    {"keyJoinRoom",
5242
        defaultAction(&Actions::joinChatRoom),
5243
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5244
        "joinroom",
5245
        UseArgs_true,
5246
        Protected_true},
5247
    {"keyLeaveRoom",
5248
        defaultAction(&Actions::leaveChatRoom),
5249
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5250
        "leaveroom",
5251
        UseArgs_false,
5252
        Protected_true},
5253
    {"keyWindowStatusBar",
5254
        emptyKey,
5255
        emptyKey,
5256
        Input::GRP_DEFAULT | Input::GRP_GUI,
5257
        &Actions::quickWindowShow,
5258
        InputAction::NO_VALUE, 50,
5259
        InputCondition::KEY_DOWN |
5260
            InputCondition::GAME |
5261
            InputCondition::NOTARGET,
5262
        "yellowbar|quickoptions",
5263
        UseArgs_false,
5264
        Protected_false},
5265
    {"keyWindowMail",
5266
        emptyKey,
5267
        emptyKey,
5268
        Input::GRP_DEFAULT | Input::GRP_GUI,
5269
        &Actions::mailWindowShow,
5270
        InputAction::NO_VALUE, 50,
5271
        InputCondition::KEY_DOWN |
5272
            InputCondition::GAME |
5273
            InputCondition::NOTARGET,
5274
        "mailwindow|mail",
5275
        UseArgs_false,
5276
        Protected_false},
5277
    {"keyConfSet",
5278
        defaultAction(&Actions::confSet),
5279
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5280
        "confset|setconf",
5281
        UseArgs_true,
5282
        Protected_true},
5283
    {"keyServerConfSet",
5284
        defaultAction(&Actions::serverConfSet),
5285
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5286
        "servconfset|setservconf",
5287
        UseArgs_true,
5288
        Protected_true},
5289
    {"keyConfGet",
5290
        defaultAction(&Actions::confGet),
5291
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5292
        "confget|getconf",
5293
        UseArgs_true,
5294
        Protected_true},
5295
    {"keyServerConfGet",
5296
        defaultAction(&Actions::serverConfGet),
5297
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5298
        "servconfget|getservconf",
5299
        UseArgs_true,
5300
        Protected_true},
5301
    {"keyChangeTargetingType",
5302
        defaultAction(&Actions::changeTargetingType),
5303
        InputCondition::KEY_DOWN |
5304
            InputCondition::GAME |
5305
            InputCondition::VALIDSPEED | InputCondition::EMODS,
5306
        "",
5307
        UseArgs_false,
5308
        Protected_true},
5309
    {"keyTestInfo",
5310
        defaultAction(&Actions::testInfo),
5311
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5312
        "testinfo",
5313
        UseArgs_false,
5314
        Protected_true},
5315
    {"keySlide",
5316
        defaultAction(&Actions::slide),
5317
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5318
        "slide",
5319
        UseArgs_true,
5320
        Protected_true},
5321
    {"keySelectSkillLevel",
5322
        defaultAction(&Actions::selectSkillLevel),
5323
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5324
        "selectskilllevel",
5325
        UseArgs_true,
5326
        Protected_true},
5327
    {"keySkill",
5328
        defaultAction(&Actions::skill),
5329
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5330
        "skill|useskill",
5331
        UseArgs_true,
5332
        Protected_true},
5333
    {"keyCraftShortcut1",
5334
        emptyKey,
5335
        emptyKey,
5336
        Input::GRP_DEFAULT,
5337
        &Actions::craftKey,
5338
        InputAction::NO_VALUE, 100,
5339
        InputCondition::KEY_DOWN |
5340
            InputCondition::NOMODAL |
5341
            InputCondition::NOAWAY |
5342
            InputCondition::NONPCINPUT,
5343
        "",
5344
        UseArgs_false,
5345
        Protected_true},
5346
    {"keyCraftShortcut2",
5347
        emptyKey,
5348
        emptyKey,
5349
        Input::GRP_DEFAULT,
5350
        &Actions::craftKey,
5351
        InputAction::NO_VALUE, 100,
5352
        InputCondition::KEY_DOWN |
5353
            InputCondition::NOMODAL |
5354
            InputCondition::NOAWAY |
5355
            InputCondition::NONPCINPUT,
5356
        "",
5357
        UseArgs_false,
5358
        Protected_true},
5359
    {"keyCraftShortcut3",
5360
        emptyKey,
5361
        emptyKey,
5362
        Input::GRP_DEFAULT,
5363
        &Actions::craftKey,
5364
        InputAction::NO_VALUE, 100,
5365
        InputCondition::KEY_DOWN |
5366
            InputCondition::NOMODAL |
5367
            InputCondition::NOAWAY |
5368
            InputCondition::NONPCINPUT,
5369
        "",
5370
        UseArgs_false,
5371
        Protected_true},
5372
    {"keyCraftShortcut4",
5373
        emptyKey,
5374
        emptyKey,
5375
        Input::GRP_DEFAULT,
5376
        &Actions::craftKey,
5377
        InputAction::NO_VALUE, 100,
5378
        InputCondition::KEY_DOWN |
5379
            InputCondition::NOMODAL |
5380
            InputCondition::NOAWAY |
5381
            InputCondition::NONPCINPUT,
5382
        "",
5383
        UseArgs_false,
5384
        Protected_true},
5385
    {"keyCraftShortcut5",
5386
        emptyKey,
5387
        emptyKey,
5388
        Input::GRP_DEFAULT,
5389
        &Actions::craftKey,
5390
        InputAction::NO_VALUE, 100,
5391
        InputCondition::KEY_DOWN |
5392
            InputCondition::NOMODAL |
5393
            InputCondition::NOAWAY |
5394
            InputCondition::NONPCINPUT,
5395
        "",
5396
        UseArgs_false,
5397
        Protected_true},
5398
    {"keyCraftShortcut6",
5399
        emptyKey,
5400
        emptyKey,
5401
        Input::GRP_DEFAULT,
5402
        &Actions::craftKey,
5403
        InputAction::NO_VALUE, 100,
5404
        InputCondition::KEY_DOWN |
5405
            InputCondition::NOMODAL |
5406
            InputCondition::NOAWAY |
5407
            InputCondition::NONPCINPUT,
5408
        "",
5409
        UseArgs_false,
5410
        Protected_true},
5411
    {"keyCraftShortcut7",
5412
        emptyKey,
5413
        emptyKey,
5414
        Input::GRP_DEFAULT,
5415
        &Actions::craftKey,
5416
        InputAction::NO_VALUE, 100,
5417
        InputCondition::KEY_DOWN |
5418
            InputCondition::NOMODAL |
5419
            InputCondition::NOAWAY |
5420
            InputCondition::NONPCINPUT,
5421
        "",
5422
        UseArgs_false,
5423
        Protected_true},
5424
    {"keyCraftShortcut8",
5425
        emptyKey,
5426
        emptyKey,
5427
        Input::GRP_DEFAULT,
5428
        &Actions::craftKey,
5429
        InputAction::NO_VALUE, 100,
5430
        InputCondition::KEY_DOWN |
5431
            InputCondition::NOMODAL |
5432
            InputCondition::NOAWAY |
5433
            InputCondition::NONPCINPUT,
5434
        "",
5435
        UseArgs_false,
5436
        Protected_true},
5437
    {"keyCraftShortcut9",
5438
        emptyKey,
5439
        emptyKey,
5440
        Input::GRP_DEFAULT,
5441
        &Actions::craftKey,
5442
        InputAction::NO_VALUE, 100,
5443
        InputCondition::KEY_DOWN |
5444
            InputCondition::NOMODAL |
5445
            InputCondition::NOAWAY |
5446
            InputCondition::NONPCINPUT,
5447
        "",
5448
        UseArgs_false,
5449
        Protected_true},
5450
    {"keyCraft",
5451
        defaultAction(&Actions::craft),
5452
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5453
        "craft",
5454
        UseArgs_true,
5455
        Protected_true},
5456
    {"keyChatClipboard",
5457
        defaultAction(&Actions::chatClipboard),
5458
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5459
        "chatclipboard",
5460
        UseArgs_true,
5461
        Protected_true},
5462
    {"keyNpcClipboard",
5463
        defaultAction(&Actions::npcClipboard),
5464
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5465
        "npcclipboard",
5466
        UseArgs_true,
5467
        Protected_true},
5468
    {"keyAddPickup",
5469
        defaultAction(&Actions::addPickup),
5470
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5471
        "addpickup|pickupadd",
5472
        UseArgs_true,
5473
        Protected_true},
5474
    {"keyRemovePickup",
5475
        defaultAction(&Actions::removePickup),
5476
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5477
        "removepickup|pickupremove",
5478
        UseArgs_true,
5479
        Protected_true},
5480
    {"keyIgnorePickup",
5481
        defaultAction(&Actions::ignorePickup),
5482
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5483
        "ignorepickup|pickupignore",
5484
        UseArgs_true,
5485
        Protected_true},
5486
    {"keyResetModifiers",
5487
        defaultAction(&Actions::resetGameModifiers),
5488
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5489
        "resetyellowbar|resetmodifiers|resetgamemodifiers",
5490
        UseArgs_false,
5491
        Protected_true},
5492
    {"keyBarToChat",
5493
        defaultAction(&Actions::barToChat),
5494
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5495
        "bartochat",
5496
        UseArgs_true,
5497
        Protected_true},
5498
    {"keySeenCmd",
5499
        defaultAction(&Actions::seen),
5500
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5501
        "seen|lastseen",
5502
        UseArgs_true,
5503
        Protected_true},
5504
    {"keyTargetSkillUnit",
5505
        defaultAction(&Actions::targetSkillUnit),
5506
        InputCondition::KEY_DOWN |
5507
            InputCondition::INGAME |
5508
            InputCondition::NOTARGET,
5509
        "targetskillunit|targetskill",
5510
        UseArgs_false,
5511
        Protected_false},
5512
    {"keyMonsterInfo",
5513
        defaultAction(&Actions::monsterInfo),
5514
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5515
        "monsterinfo|mobinfo|mi",
5516
        UseArgs_true,
5517
        Protected_true},
5518
    {"keyItemInfo",
5519
        defaultAction(&Actions::itemInfo),
5520
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5521
        "iteminfo|ii",
5522
        UseArgs_true,
5523
        Protected_true},
5524
    {"keyWhoDrops",
5525
        defaultAction(&Actions::whoDrops),
5526
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5527
        "whodrops|whodrop",
5528
        UseArgs_true,
5529
        Protected_true},
5530
    {"keyMobSearch",
5531
        defaultAction(&Actions::mobSearch),
5532
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5533
        "mobsearch|monstersearch",
5534
        UseArgs_true,
5535
        Protected_true},
5536
    {"keyMobSpawnSearch",
5537
        defaultAction(&Actions::mobSpawnSearch),
5538
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5539
        "mobspawnsearch|monsterspawnsearch|whereis",
5540
        UseArgs_true,
5541
        Protected_true},
5542
    {"keyPlayerGmCommands",
5543
        defaultAction(&Actions::playerGmCommands),
5544
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5545
        "gmcommands|playergmcommands|playercommands",
5546
        UseArgs_true,
5547
        Protected_true},
5548
    {"keyPlayerCharGmCommands",
5549
        defaultAction(&Actions::playerCharGmCommands),
5550
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5551
        "gmcharcommands|playerchargmcommands|playercharcommands",
5552
        UseArgs_true,
5553
        Protected_true},
5554
    {"keyCommandShowLevel",
5555
        defaultAction(&Actions::commandShowLevel),
5556
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5557
        "showlevel|exp",
5558
        UseArgs_true,
5559
        Protected_true},
5560
    {"keyCommandShowStats",
5561
        defaultAction(&Actions::commandShowStats),
5562
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5563
        "showstats|stats",
5564
        UseArgs_true,
5565
        Protected_true},
5566
    {"keyCommandShowStorageList",
5567
        defaultAction(&Actions::commandShowStorage),
5568
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5569
        "showstorage|storagelist",
5570
        UseArgs_true,
5571
        Protected_true},
5572
    {"keyCommandShowCartList",
5573
        defaultAction(&Actions::commandShowCart),
5574
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5575
        "showcart|cartlist",
5576
        UseArgs_true,
5577
        Protected_true},
5578
    {"keyCommandShowInventoryList",
5579
        defaultAction(&Actions::commandShowInventory),
5580
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5581
        "showinventory|inventorylist|itemlist",
5582
        UseArgs_true,
5583
        Protected_true},
5584
    {"keyLocatePlayer",
5585
        defaultAction(&Actions::locatePlayer),
5586
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5587
        "locate|locateplayer|whereplayer",
5588
        UseArgs_true,
5589
        Protected_true},
5590
    {"keyCommandShowAccountInfo",
5591
        defaultAction(&Actions::commandShowAccountInfo),
5592
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5593
        "showaccountinfo|showaccinfo|accinfo",
5594
        UseArgs_true,
5595
        Protected_true},
5596
    {"keyCommandSpawn",
5597
        defaultAction(&Actions::commandSpawn),
5598
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5599
        "spawn|monster",
5600
        UseArgs_true,
5601
        Protected_true},
5602
    {"keyCommandSpawnSlave",
5603
        defaultAction(&Actions::commandSpawnSlave),
5604
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5605
        "spawnslave|monsterslave|summon",
5606
        UseArgs_true,
5607
        Protected_true},
5608
    {"keyCommandSpawnClone",
5609
        defaultAction(&Actions::commandSpawnClone),
5610
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5611
        "spawnclone|playerclone|clone",
5612
        UseArgs_true,
5613
        Protected_true},
5614
    {"keyCommandSpawnSlaveClone",
5615
        defaultAction(&Actions::commandSpawnSlaveClone),
5616
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5617
        "spawnslaveclone|playerslaveclone|slaveclone",
5618
        UseArgs_true,
5619
        Protected_true},
5620
    {"keyCommandSpawnEvilClone",
5621
        defaultAction(&Actions::commandSpawnEvilClone),
5622
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5623
        "spawnevilclone|playerevilclone|evilclone",
5624
        UseArgs_true,
5625
        Protected_true},
5626
    {"keyCommandSavePosition",
5627
        defaultAction(&Actions::commandSavePosition),
5628
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5629
        "savepos|saveposition",
5630
        UseArgs_true,
5631
        Protected_true},
5632
    {"keyCommandLoadPosition",
5633
        defaultAction(&Actions::commandLoadPosition),
5634
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5635
        "loadpos|loadposition",
5636
        UseArgs_true,
5637
        Protected_true},
5638
    {"keyCommandRandomWarp",
5639
        defaultAction(&Actions::commandRandomWarp),
5640
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5641
        "randomwarp|jump",
5642
        UseArgs_true,
5643
        Protected_true},
5644
    {"keyCommandGotoNpc",
5645
        defaultAction(&Actions::commandGotoNpc),
5646
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5647
        "gotonpc|warptonpc",
5648
        UseArgs_true,
5649
        Protected_true},
5650
    {"keyCommandKiller",
5651
        defaultAction(&Actions::commandKiller),
5652
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5653
        "setkiller|killer",
5654
        UseArgs_true,
5655
        Protected_true},
5656
    {"keyCommandKillable",
5657
        defaultAction(&Actions::commandKillable),
5658
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5659
        "setkillable|killable",
5660
        UseArgs_true,
5661
        Protected_true},
5662
    {"keyCommandHeal",
5663
        defaultAction(&Actions::commandHeal),
5664
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5665
        "gmheal",
5666
        UseArgs_true,
5667
        Protected_true},
5668
    {"keyCommandAlive",
5669
        defaultAction(&Actions::commandAlive),
5670
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5671
        "alive|revive",
5672
        UseArgs_true,
5673
        Protected_true},
5674
    {"keyCommandDisguise",
5675
        defaultAction(&Actions::commandDisguise),
5676
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5677
        "disguise",
5678
        UseArgs_true,
5679
        Protected_true},
5680
    {"keyCommandImmortal",
5681
        defaultAction(&Actions::commandImmortal),
5682
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5683
        "immortal",
5684
        UseArgs_true,
5685
        Protected_true},
5686
    {"keyCommandHide",
5687
        defaultAction(&Actions::commandHide),
5688
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5689
        "hide",
5690
        UseArgs_true,
5691
        Protected_true},
5692
    {"keyCommandNuke",
5693
        defaultAction(&Actions::commandNuke),
5694
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5695
        "gmnuke",
5696
        UseArgs_true,
5697
        Protected_true},
5698
    {"keyCommandKill",
5699
        defaultAction(&Actions::commandKill),
5700
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5701
        "kill",
5702
        UseArgs_true,
5703
        Protected_true},
5704
    {"keyCommandJail",
5705
        defaultAction(&Actions::commandJail),
5706
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5707
        "jail",
5708
        UseArgs_true,
5709
        Protected_true},
5710
    {"keyCommandUnjail",
5711
        defaultAction(&Actions::commandUnjail),
5712
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5713
        "unjail",
5714
        UseArgs_true,
5715
        Protected_true},
5716
    {"keyCommandNpcMove",
5717
        defaultAction(&Actions::commandNpcMove),
5718
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5719
        "npcmove|movenpc|warpnpc|npcwarp",
5720
        UseArgs_true,
5721
        Protected_true},
5722
    {"keyCommandNpcHide",
5723
        defaultAction(&Actions::commandNpcHide),
5724
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5725
        "npchide|hidenpc",
5726
        UseArgs_true,
5727
        Protected_true},
5728
    {"keyCommandNpcShow",
5729
        defaultAction(&Actions::commandNpcShow),
5730
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5731
        "npcshow|shownpc",
5732
        UseArgs_true,
5733
        Protected_true},
5734
    {"keyCommandChangePartyLeader",
5735
        defaultAction(&Actions::commandChangePartyLeader),
5736
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5737
        "gmpartyleader|changepartyleader",
5738
        UseArgs_true,
5739
        Protected_true},
5740
    {"keyCommandPartyRecall",
5741
        defaultAction(&Actions::commandPartyRecall),
5742
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5743
        "partyrecall|recallparty",
5744
        UseArgs_true,
5745
        Protected_true},
5746
    {"keyCommandBreakGuild",
5747
        defaultAction(&Actions::commandBreakGuild),
5748
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5749
        "breakguild|gmbreakguild",
5750
        UseArgs_true,
5751
        Protected_true},
5752
    {"keyCommandGuildRecall",
5753
        defaultAction(&Actions::commandGuildRecall),
5754
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5755
        "guildrecall|recallguild",
5756
        UseArgs_true,
5757
        Protected_true},
5758
    {"keyMailTo",
5759
        defaultAction(&Actions::mailTo),
5760
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5761
        "mailto",
5762
        UseArgs_true,
5763
        Protected_true},
5764
    {"keyAdoptChild",
5765
        defaultAction(&Actions::adoptChild),
5766
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5767
        "adoptchild|childadopt|askforchild",
5768
        UseArgs_true,
5769
        Protected_true},
5770
    {"keyDumpMemmoryUsage",
5771
        defaultAction(&Actions::dumpMemoryUsage),
5772
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5773
        "dumpmemoryusage|memoryusage",
5774
        UseArgs_false,
5775
        Protected_true},
5776
    {"keySetEmoteType",
5777
        defaultAction(&Actions::setEmoteType),
5778
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5779
        "setemotetype",
5780
        UseArgs_true,
5781
        Protected_true},
5782
    {"keyCameraRestore",
5783
        defaultAction(&Actions::restoreCamera),
5784
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5785
        "restorecamera|returncamera|camerarestore",
5786
        UseArgs_false,
5787
        Protected_false},
5788
    {"keyShowSkillLevels",
5789
        defaultAction(&Actions::showSkillLevels),
5790
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5791
        "showskilllevels",
5792
        UseArgs_true,
5793
        Protected_true},
5794
    {"keyShowskilltype",
5795
        defaultAction(&Actions::showSkillType),
5796
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5797
        "showskilltypes",
5798
        UseArgs_true,
5799
        Protected_true},
5800
    {"keySelectSkillType",
5801
        defaultAction(&Actions::selectSkillType),
5802
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5803
        "selectskilltype",
5804
        UseArgs_true,
5805
        Protected_true},
5806
    {"keyShowSkillOffsetX",
5807
        defaultAction(&Actions::showSkillOffsetX),
5808
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5809
        "showskilloffsetx",
5810
        UseArgs_true,
5811
        Protected_true},
5812
    {"keyShowSkillOffsetY",
5813
        defaultAction(&Actions::showSkillOffsetY),
5814
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5815
        "showskilloffsety",
5816
        UseArgs_true,
5817
        Protected_true},
5818
    {"keySetSkillOffsetX",
5819
        defaultAction(&Actions::setSkillOffsetX),
5820
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5821
        "setskilloffsetx",
5822
        UseArgs_true,
5823
        Protected_true},
5824
    {"keySetSkillOffsetY",
5825
        defaultAction(&Actions::setSkillOffsetY),
5826
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5827
        "setskilloffsety",
5828
        UseArgs_true,
5829
        Protected_true},
5830
    {"keyLeaveGuild",
5831
        defaultAction(&Actions::leaveGuild),
5832
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5833
        "leaveguild|guildleave",
5834
        UseArgs_false,
5835
        Protected_true},
5836
    {"keyGuildNotice",
5837
        defaultAction(&Actions::guildNotice),
5838
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5839
        "notice|guildnotice",
5840
        UseArgs_true,
5841
        Protected_true},
5842
    {"keyPartyItemShare",
5843
        defaultAction(&Actions::partyItemShare),
5844
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5845
        "itemshare|shareitem",
5846
        UseArgs_true,
5847
        Protected_true},
5848
    {"keyPartyExpShare",
5849
        defaultAction(&Actions::partyExpShare),
5850
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5851
        "expshare|shareexp",
5852
        UseArgs_true,
5853
        Protected_true},
5854
    {"keyPartyAutoItemShare",
5855
        defaultAction(&Actions::partyAutoItemShare),
5856
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5857
        "autoitemshare|shareautoitem|itemautoshare",
5858
        UseArgs_true,
5859
        Protected_true},
5860
    {"keyCreateItem",
5861
        defaultAction(&Actions::createItem),
5862
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5863
        "createitem",
5864
        UseArgs_true,
5865
        Protected_true},
5866
    {"keyCopyOutfitToChat",
5867
        defaultAction(&Actions::outfitToChat),
5868
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5869
        "outfittochat|copyoutfittochat",
5870
        UseArgs_false,
5871
        Protected_true},
5872
    {"keyCommandTranslate",
5873
        defaultAction(&Actions::translate),
5874
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5875
        "translate|trans|tran",
5876
        UseArgs_false,
5877
        Protected_true},
5878
    {"keyCommandSendGuiKey",
5879
        defaultAction(&Actions::sendGuiKey),
5880
        InputCondition::KEY_DOWN | InputCondition::ENABLED,
5881
        "guikey|sendguikey",
5882
        UseArgs_true,
5883
        Protected_true},
5884
    {"keyMoveAttackUp",
5885
        defaultAction(&Actions::moveAttackUp),
5886
        InputCondition::KEY_DOWN | InputCondition::ENABLED,
5887
        "attackmoveup|moveattackup",
5888
        UseArgs_true,
5889
        Protected_true},
5890
    {"keyMoveAttackDown",
5891
        defaultAction(&Actions::moveAttackDown),
5892
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5893
        "attackmovedown|moveattackdown",
5894
        UseArgs_true,
5895
        Protected_true},
5896
    {"keyMovePriorityAttackUp",
5897
        defaultAction(&Actions::movePriorityAttackUp),
5898
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5899
        "attackmovepriorityup|movepriorityattackup",
5900
        UseArgs_true,
5901
        Protected_true},
5902
    {"keyMovePriorityAttackDown",
5903
        defaultAction(&Actions::movePriorityAttackDown),
5904
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5905
        "attackmoveprioritydown|movepriorityattackdown",
5906
        UseArgs_true,
5907
        Protected_true},
5908
    {"keyShowItems",
5909
        defaultAction(&Actions::showItems),
5910
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5911
        "showitems|items|itemsshow",
5912
        UseArgs_true,
5913
        Protected_true},
5914
    {"keyCommandSendMouseKey",
5915
        defaultAction(&Actions::sendMouseKey),
5916
        InputCondition::KEY_DOWN | InputCondition::ENABLED,
5917
        "mousekey|sendmousekey",
5918
        UseArgs_true,
5919
        Protected_true},
5920
    {"keyCommandSendChars",
5921
        defaultAction(&Actions::sendChars),
5922
        InputCondition::KEY_DOWN | InputCondition::ENABLED,
5923
        "sendchar|sendchars|charsend",
5924
        UseArgs_true,
5925
        Protected_true},
5926
    {"keyClearOutfit",
5927
        defaultAction(&Actions::outfitClear),
5928
        InputCondition::KEY_DOWN |
5929
            InputCondition::DEFAULT |
5930
            InputCondition::INGAME,
5931
        "clearoutfit|outfitclear",
5932
        UseArgs_false,
5933
        Protected_true},
5934
    {"keyClipboardCopy",
5935
        defaultAction(&Actions::clipboardCopy),
5936
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5937
        "clipboardcopy|copyclipboard",
5938
        UseArgs_true,
5939
        Protected_true},
5940
    {"keyGotoPc",
5941
        defaultAction(&Actions::commandGotoPc),
5942
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5943
        "goto|gotopc",
5944
        UseArgs_true,
5945
        Protected_true},
5946
    {"keyCommandRecallPc",
5947
        defaultAction(&Actions::commandRecallPc),
5948
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5949
        "recall|recallpc",
5950
        UseArgs_true,
5951
        Protected_true},
5952
    {"keyCommandIpCheck",
5953
        defaultAction(&Actions::commandIpCheck),
5954
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5955
        "ipcheck|checkip",
5956
        UseArgs_true,
5957
        Protected_true},
5958
    {"keyWindowServerInfo",
5959
        defaultAction(&Actions::serverInfoWindowShow),
5960
        InputCondition::KEY_DOWN |
5961
            InputCondition::GAME |
5962
            InputCondition::NOTARGET,
5963
        "serverinfo|infoserver",
5964
        UseArgs_false,
5965
        Protected_false},
5966
    {"keyMercenaryToMaster",
5967
        defaultAction(&Actions::mercenaryToMaster),
5968
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5969
        "mercenarytomaster|mercmaster",
5970
        UseArgs_false,
5971
        Protected_false},
5972
    {"keyHomunculusToMaster",
5973
        defaultAction(&Actions::homunculusToMaster),
5974
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5975
        "homunculustomaster|homunmaster",
5976
        UseArgs_false,
5977
        Protected_false},
5978
    {"keyHomunculusFeed",
5979
        defaultAction(&Actions::homunculusFeed),
5980
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5981
        "homunculusfeed|homunfeed|feedhomun|feedhomunculus",
5982
        UseArgs_false,
5983
        Protected_false},
5984
    {"keyPetFeed",
5985
        defaultAction(&Actions::petFeed),
5986
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5987
        "petfeed|feedpet",
5988
        UseArgs_false,
5989
        Protected_false},
5990
    {"keyPetDropLoot",
5991
        defaultAction(&Actions::petDropLoot),
5992
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5993
        "petdroploot|petloot",
5994
        UseArgs_false,
5995
        Protected_true},
5996
    {"keyPetReturnToEgg",
5997
        defaultAction(&Actions::petReturnToEgg),
5998
        InputCondition::KEY_DOWN | InputCondition::INGAME,
5999
        "pettoegg|petegg|petreturn|returnpet|petreturnegg",
6000
        UseArgs_false,
6001
        Protected_false},
6002
    {"keyPetUnequip",
6003
        defaultAction(&Actions::petUnequip),
6004
        InputCondition::KEY_DOWN | InputCondition::INGAME,
6005
        "petunequip|unequippet",
6006
        UseArgs_false,
6007
        Protected_false},
6008
    {"keyAddSkillShortcut",
6009
        defaultAction(&Actions::addSkillShortcut),
6010
        InputCondition::KEY_DOWN | InputCondition::INGAME,
6011
        "addskillshortcut|skillshortcut",
6012
        UseArgs_true,
6013
        Protected_false},
6014
    {"keyWindowClan",
6015
        emptyKey,
6016
        emptyKey,
6017
        Input::GRP_DEFAULT | Input::GRP_GUI,
6018
        &Actions::clanWindowShow,
6019
        InputAction::NO_VALUE, 50,
6020
        InputCondition::KEY_DOWN |
6021
            InputCondition::GAME |
6022
            InputCondition::NOTARGET,
6023
        "clanwindow|clan",
6024
        UseArgs_false,
6025
        Protected_false},
6026
    {"keyTrimMemory",
6027
        defaultAction(&Actions::trimMemory),
6028
        InputCondition::KEY_DOWN | InputCondition::INGAME,
6029
        "trim|trimmemory|memorytrim",
6030
        UseArgs_false,
6031
        Protected_true},
6032















































































































































































































































































































































2682
};
6033
6034
#undef defaultAction
6035
#undef addKey
6036
#undef joystickButton
6037
6038
#endif  // INPUT_INPUTACTIONMAP_H