diff options
-rw-r--r-- | src/gui/setup_keyboard.cpp | 754 | ||||
-rw-r--r-- | src/gui/setup_keyboard.h | 3 | ||||
-rw-r--r-- | src/keyboardconfig.cpp | 14 | ||||
-rw-r--r-- | src/keyboardconfig.h | 21 | ||||
-rw-r--r-- | src/keyboarddata.h | 208 |
5 files changed, 740 insertions, 260 deletions
diff --git a/src/gui/setup_keyboard.cpp b/src/gui/setup_keyboard.cpp index e9ce1b704..40604737a 100644 --- a/src/gui/setup_keyboard.cpp +++ b/src/gui/setup_keyboard.cpp @@ -41,6 +41,676 @@ #include "debug.h" +struct SetupActionData +{ + std::string name; + int actionId; +}; + +static SetupActionData const setupActionData[] = { + { + N_("Basic Keys"), + KeyboardConfig::KEY_NO_VALUE + }, + { + N_("Move Up"), + KeyboardConfig::KEY_MOVE_UP + }, + { + N_("Move Down"), + KeyboardConfig::KEY_MOVE_DOWN + }, + { + N_("Move Left"), + KeyboardConfig::KEY_MOVE_LEFT + }, + { + N_("Move Right"), + KeyboardConfig::KEY_MOVE_RIGHT + }, + { + N_("Attack"), + KeyboardConfig::KEY_ATTACK + }, + { + N_("Target & Attack"), + KeyboardConfig::KEY_TARGET_ATTACK + }, + { + N_("Move to Target"), + KeyboardConfig::KEY_MOVE_TO_TARGET + }, + { + N_("Change Move to Target type"), + KeyboardConfig::KEY_CHANGE_MOVE_TO_TARGET + }, + { + N_("Move to Home location"), + KeyboardConfig::KEY_MOVE_TO_HOME + }, + { + N_("Set home location"), + KeyboardConfig::KEY_SET_HOME + }, + { + N_("Move to navigation point"), + KeyboardConfig::KEY_MOVE_TO_POINT + }, + { + N_("Talk"), + KeyboardConfig::KEY_TALK + }, + { + N_("Stop Attack"), + KeyboardConfig::KEY_TARGET + }, + { + N_("Untarget"), + KeyboardConfig::KEY_UNTARGET + }, + { + N_("Target Closest"), + KeyboardConfig::KEY_TARGET_CLOSEST + }, + { + N_("Target NPC"), + KeyboardConfig::KEY_TARGET_NPC + }, + { + N_("Target Player"), + KeyboardConfig::KEY_TARGET_PLAYER + }, + { + N_("Pickup"), + KeyboardConfig::KEY_PICKUP + }, + { + N_("Change Pickup Type"), + KeyboardConfig::KEY_CHANGE_PICKUP_TYPE + }, + { + N_("Hide Windows"), + KeyboardConfig::KEY_HIDE_WINDOWS + }, + { + N_("Sit"), + KeyboardConfig::KEY_SIT + }, + { + N_("Screenshot"), + KeyboardConfig::KEY_SCREENSHOT + }, + { + N_("Enable/Disable Trading"), + KeyboardConfig::KEY_TRADE + }, + { + N_("Change Map View Mode"), + KeyboardConfig::KEY_PATHFIND + }, + { + N_("Select OK"), + KeyboardConfig::KEY_OK + }, + { + N_("Quit"), + KeyboardConfig::KEY_QUIT + }, + { + N_("Shortcuts Keys"), + KeyboardConfig::KEY_NO_VALUE + }, + { + N_("Item Shortcuts Key"), + KeyboardConfig::KEY_SHORTCUTS_KEY + }, + { + strprintf(N_("Item Shortcut %d"), 1), + KeyboardConfig::KEY_SHORTCUT_1 + }, + { + strprintf(N_("Item Shortcut %d"), 2), + KeyboardConfig::KEY_SHORTCUT_2 + }, + { + strprintf(N_("Item Shortcut %d"), 3), + KeyboardConfig::KEY_SHORTCUT_3 + }, + { + strprintf(N_("Item Shortcut %d"), 4), + KeyboardConfig::KEY_SHORTCUT_4 + }, + { + strprintf(N_("Item Shortcut %d"), 5), + KeyboardConfig::KEY_SHORTCUT_5 + }, + { + strprintf(N_("Item Shortcut %d"), 6), + KeyboardConfig::KEY_SHORTCUT_6 + }, + { + strprintf(N_("Item Shortcut %d"), 7), + KeyboardConfig::KEY_SHORTCUT_7 + }, + { + strprintf(N_("Item Shortcut %d"), 8), + KeyboardConfig::KEY_SHORTCUT_8 + }, + { + strprintf(N_("Item Shortcut %d"), 9), + KeyboardConfig::KEY_SHORTCUT_9 + }, + { + strprintf(N_("Item Shortcut %d"), 10), + KeyboardConfig::KEY_SHORTCUT_10 + }, + { + strprintf(N_("Item Shortcut %d"), 11), + KeyboardConfig::KEY_SHORTCUT_11 + }, + { + strprintf(N_("Item Shortcut %d"), 12), + KeyboardConfig::KEY_SHORTCUT_12 + }, + { + strprintf(N_("Item Shortcut %d"), 13), + KeyboardConfig::KEY_SHORTCUT_13 + }, + { + strprintf(N_("Item Shortcut %d"), 14), + KeyboardConfig::KEY_SHORTCUT_14 + }, + { + strprintf(N_("Item Shortcut %d"), 15), + KeyboardConfig::KEY_SHORTCUT_15 + }, + { + strprintf(N_("Item Shortcut %d"), 16), + KeyboardConfig::KEY_SHORTCUT_16 + }, + { + strprintf(N_("Item Shortcut %d"), 17), + KeyboardConfig::KEY_SHORTCUT_17 + }, + { + strprintf(N_("Item Shortcut %d"), 18), + KeyboardConfig::KEY_SHORTCUT_18 + }, + { + strprintf(N_("Item Shortcut %d"), 19), + KeyboardConfig::KEY_SHORTCUT_19 + }, + { + strprintf(N_("Item Shortcut %d"), 20), + KeyboardConfig::KEY_SHORTCUT_20 + }, + { + N_("Windows Keys"), + KeyboardConfig::KEY_NO_VALUE + }, + { + N_("Help Window"), + KeyboardConfig::KEY_WINDOW_HELP + }, + { + N_("Status Window"), + KeyboardConfig::KEY_WINDOW_STATUS + }, + { + N_("Inventory Window"), + KeyboardConfig::KEY_WINDOW_INVENTORY + }, + { + N_("Equipment Window"), + KeyboardConfig::KEY_WINDOW_EQUIPMENT + }, + { + N_("Skill Window"), + KeyboardConfig::KEY_WINDOW_SKILL + }, + { + N_("Minimap Window"), + KeyboardConfig::KEY_WINDOW_MINIMAP + }, + { + N_("Chat Window"), + KeyboardConfig::KEY_WINDOW_CHAT + }, + { + N_("Item Shortcut Window"), + KeyboardConfig::KEY_WINDOW_SHORTCUT + }, + { + N_("Setup Window"), + KeyboardConfig::KEY_WINDOW_SETUP + }, + { + N_("Debug Window"), + KeyboardConfig::KEY_WINDOW_DEBUG + }, + { + N_("Social Window"), + KeyboardConfig::KEY_WINDOW_SOCIAL + }, + { + N_("Emote Shortcut Window"), + KeyboardConfig::KEY_WINDOW_EMOTE_SHORTCUT + }, + { + N_("Outfits Window"), + KeyboardConfig::KEY_WINDOW_OUTFIT + }, + { + N_("Shop Window"), + KeyboardConfig::KEY_WINDOW_SHOP + }, + { + N_("Quick drop Window"), + KeyboardConfig::KEY_WINDOW_DROP + }, + { + N_("Kill Stats Window"), + KeyboardConfig::KEY_WINDOW_KILLS + }, + { + N_("Commands Window"), + KeyboardConfig::KEY_WINDOW_SPELLS + }, + { + N_("Bot Checker Window"), + KeyboardConfig::KEY_WINDOW_BOT_CHECKER + }, + { + N_("Who Is Online Window"), + KeyboardConfig::KEY_WINDOW_ONLINE + }, + { + N_("Did you know Window"), + KeyboardConfig::KEY_WINDOW_DIDYOUKNOW + }, + { + N_("Previous Social Tab"), + KeyboardConfig::KEY_PREV_SOCIAL_TAB + }, + { + N_("Next Social Tab"), + KeyboardConfig::KEY_NEXT_SOCIAL_TAB + }, + { + N_("Emotes Keys"), + KeyboardConfig::KEY_NO_VALUE + }, + { + N_("Smilie"), + KeyboardConfig::KEY_EMOTE + }, + { + strprintf(N_("Emote Shortcut %d"), 1), + KeyboardConfig::KEY_EMOTE_1 + }, + { + strprintf(N_("Emote Shortcut %d"), 2), + KeyboardConfig::KEY_EMOTE_2 + }, + { + strprintf(N_("Emote Shortcut %d"), 3), + KeyboardConfig::KEY_EMOTE_3 + }, + { + strprintf(N_("Emote Shortcut %d"), 4), + KeyboardConfig::KEY_EMOTE_4 + }, + { + strprintf(N_("Emote Shortcut %d"), 5), + KeyboardConfig::KEY_EMOTE_5 + }, + { + strprintf(N_("Emote Shortcut %d"), 6), + KeyboardConfig::KEY_EMOTE_6 + }, + { + strprintf(N_("Emote Shortcut %d"), 7), + KeyboardConfig::KEY_EMOTE_7 + }, + { + strprintf(N_("Emote Shortcut %d"), 8), + KeyboardConfig::KEY_EMOTE_8 + }, + { + strprintf(N_("Emote Shortcut %d"), 9), + KeyboardConfig::KEY_EMOTE_9 + }, + { + strprintf(N_("Emote Shortcut %d"), 10), + KeyboardConfig::KEY_EMOTE_10 + }, + { + strprintf(N_("Emote Shortcut %d"), 11), + KeyboardConfig::KEY_EMOTE_11 + }, + { + strprintf(N_("Emote Shortcut %d"), 12), + KeyboardConfig::KEY_EMOTE_12 + }, + { + strprintf(N_("Emote Shortcut %d"), 13), + KeyboardConfig::KEY_EMOTE_13 + }, + { + strprintf(N_("Emote Shortcut %d"), 14), + KeyboardConfig::KEY_EMOTE_14 + }, + { + strprintf(N_("Emote Shortcut %d"), 15), + KeyboardConfig::KEY_EMOTE_15 + }, + { + strprintf(N_("Emote Shortcut %d"), 16), + KeyboardConfig::KEY_EMOTE_16 + }, + { + strprintf(N_("Emote Shortcut %d"), 17), + KeyboardConfig::KEY_EMOTE_17 + }, + { + strprintf(N_("Emote Shortcut %d"), 18), + KeyboardConfig::KEY_EMOTE_18 + }, + { + strprintf(N_("Emote Shortcut %d"), 19), + KeyboardConfig::KEY_EMOTE_19 + }, + { + strprintf(N_("Emote Shortcut %d"), 20), + KeyboardConfig::KEY_EMOTE_20 + }, + { + strprintf(N_("Emote Shortcut %d"), 21), + KeyboardConfig::KEY_EMOTE_21 + }, + { + strprintf(N_("Emote Shortcut %d"), 22), + KeyboardConfig::KEY_EMOTE_22 + }, + { + strprintf(N_("Emote Shortcut %d"), 23), + KeyboardConfig::KEY_EMOTE_23 + }, + { + strprintf(N_("Emote Shortcut %d"), 24), + KeyboardConfig::KEY_EMOTE_24 + }, + { + strprintf(N_("Emote Shortcut %d"), 25), + KeyboardConfig::KEY_EMOTE_25 + }, + { + strprintf(N_("Emote Shortcut %d"), 26), + KeyboardConfig::KEY_EMOTE_26 + }, + { + strprintf(N_("Emote Shortcut %d"), 27), + KeyboardConfig::KEY_EMOTE_27 + }, + { + strprintf(N_("Emote Shortcut %d"), 28), + KeyboardConfig::KEY_EMOTE_28 + }, + { + strprintf(N_("Emote Shortcut %d"), 29), + KeyboardConfig::KEY_EMOTE_29 + }, + { + strprintf(N_("Emote Shortcut %d"), 30), + KeyboardConfig::KEY_EMOTE_30 + }, + { + strprintf(N_("Emote Shortcut %d"), 31), + KeyboardConfig::KEY_EMOTE_31 + }, + { + strprintf(N_("Emote Shortcut %d"), 32), + KeyboardConfig::KEY_EMOTE_32 + }, + { + strprintf(N_("Emote Shortcut %d"), 33), + KeyboardConfig::KEY_EMOTE_33 + }, + { + strprintf(N_("Emote Shortcut %d"), 34), + KeyboardConfig::KEY_EMOTE_34 + }, + { + strprintf(N_("Emote Shortcut %d"), 35), + KeyboardConfig::KEY_EMOTE_35 + }, + { + strprintf(N_("Emote Shortcut %d"), 36), + KeyboardConfig::KEY_EMOTE_36 + }, + { + strprintf(N_("Emote Shortcut %d"), 37), + KeyboardConfig::KEY_EMOTE_37 + }, + { + strprintf(N_("Emote Shortcut %d"), 38), + KeyboardConfig::KEY_EMOTE_38 + }, + { + strprintf(N_("Emote Shortcut %d"), 39), + KeyboardConfig::KEY_EMOTE_39 + }, + { + strprintf(N_("Emote Shortcut %d"), 40), + KeyboardConfig::KEY_EMOTE_40 + }, + { + strprintf(N_("Emote Shortcut %d"), 41), + KeyboardConfig::KEY_EMOTE_41 + }, + { + strprintf(N_("Emote Shortcut %d"), 42), + KeyboardConfig::KEY_EMOTE_42 + }, + { + strprintf(N_("Emote Shortcut %d"), 43), + KeyboardConfig::KEY_EMOTE_43 + }, + { + strprintf(N_("Emote Shortcut %d"), 44), + KeyboardConfig::KEY_EMOTE_44 + }, + { + strprintf(N_("Emote Shortcut %d"), 45), + KeyboardConfig::KEY_EMOTE_45 + }, + { + strprintf(N_("Emote Shortcut %d"), 46), + KeyboardConfig::KEY_EMOTE_46 + }, + { + strprintf(N_("Emote Shortcut %d"), 47), + KeyboardConfig::KEY_EMOTE_47 + }, + { + strprintf(N_("Emote Shortcut %d"), 48), + KeyboardConfig::KEY_EMOTE_48 + }, + { + N_("Outfits Keys"), + KeyboardConfig::KEY_NO_VALUE + }, + { + N_("Wear Outfit"), + KeyboardConfig::KEY_WEAR_OUTFIT + }, + { + N_("Copy Outfit"), + KeyboardConfig::KEY_COPY_OUTFIT + }, + { + N_("Copy equipped to Outfit"), + KeyboardConfig::KEY_COPY_EQUIPED_OUTFIT + }, + { + N_("Chat Keys"), + KeyboardConfig::KEY_NO_VALUE + }, + { + N_("Toggle Chat"), + KeyboardConfig::KEY_TOGGLE_CHAT + }, + { + N_("Scroll Chat Up"), + KeyboardConfig::KEY_SCROLL_CHAT_UP + }, + { + N_("Scroll Chat Down"), + KeyboardConfig::KEY_SCROLL_CHAT_DOWN + }, + { + N_("Previous Chat Tab"), + KeyboardConfig::KEY_PREV_CHAT_TAB + }, + { + N_("Next Chat Tab"), + KeyboardConfig::KEY_NEXT_CHAT_TAB + }, + { + N_("Close current Chat Tab"), + KeyboardConfig::KEY_CLOSE_CHAT_TAB + }, + { + N_("Previous chat line"), + KeyboardConfig::KEY_CHAT_PREV_HISTORY + }, + { + N_("Next chat line"), + KeyboardConfig::KEY_CHAT_NEXT_HISTORY + }, + { + N_("Chat Auto Complete"), + KeyboardConfig::KEY_AUTOCOMPLETE_CHAT + }, + { + N_("Deactivate Chat Input"), + KeyboardConfig::KEY_DEACTIVATE_CHAT + }, + { + N_("Other Keys"), + KeyboardConfig::KEY_NO_VALUE + }, + { + N_("Ignore input 1"), + KeyboardConfig::KEY_IGNORE_INPUT_1 + }, + { + N_("Ignore input 2"), + KeyboardConfig::KEY_IGNORE_INPUT_2 + }, + { + N_("Direct Up"), + KeyboardConfig::KEY_DIRECT_UP + }, + { + N_("Direct Down"), + KeyboardConfig::KEY_DIRECT_DOWN + }, + { + N_("Direct Left"), + KeyboardConfig::KEY_DIRECT_LEFT + }, + { + N_("Direct Right"), + KeyboardConfig::KEY_DIRECT_RIGHT + }, + { + N_("Crazy moves"), + KeyboardConfig::KEY_CRAZY_MOVES + }, + { + N_("Change Crazy Move mode"), + KeyboardConfig::KEY_CHANGE_CRAZY_MOVES_TYPE + }, + { + N_("Quick Drop N Items from 0 slot"), + KeyboardConfig::KEY_QUICK_DROP + }, + { + N_("Quick Drop N Items"), + KeyboardConfig::KEY_QUICK_DROPN + }, + { + N_("Switch Quick Drop Counter"), + KeyboardConfig::KEY_SWITCH_QUICK_DROP + }, + { + N_("Quick heal target or self"), + KeyboardConfig::KEY_MAGIC_INMA1 + }, + { + N_("Use #itenplz spell"), + KeyboardConfig::KEY_MAGIC_ITENPLZ + }, + { + N_("Use magic attack"), + KeyboardConfig::KEY_MAGIC_ATTACK + }, + { + N_("Switch magic attack"), + KeyboardConfig::KEY_SWITCH_MAGIC_ATTACK + }, + { + N_("Switch pvp attack"), + KeyboardConfig::KEY_SWITCH_PVP_ATTACK + }, + { + N_("Change move type"), + KeyboardConfig::KEY_INVERT_DIRECTION + }, + { + N_("Change Attack Weapon Type"), + KeyboardConfig::KEY_CHANGE_ATTACK_WEAPON_TYPE + }, + { + N_("Change Attack Type"), + KeyboardConfig::KEY_CHANGE_ATTACK_TYPE + }, + { + N_("Change Follow mode"), + KeyboardConfig::KEY_CHANGE_FOLLOW_MODE + }, + { + N_("Change Imitation mode"), + KeyboardConfig::KEY_CHANGE_IMITATION_MODE + }, + { + N_("Disable / Enable Game modifier keys"), + KeyboardConfig::KEY_DISABLE_GAME_MODIFIERS + }, + { + N_("On / Off audio"), + KeyboardConfig::KEY_CHANGE_AUDIO + }, + { + N_("Enable / Disable away mode"), + KeyboardConfig::KEY_AWAY + }, + { + N_("Emulate right click from keyboard"), + KeyboardConfig::KEY_RIGHT_CLICK + }, + { + N_("Toggle camera mode"), + KeyboardConfig::KEY_CAMERA + }, + { + N_("Modifier key"), + KeyboardConfig::KEY_MOD + }, +}; + +const int keysSize = sizeof(setupActionData) / sizeof(SetupActionData); /** * The list model for key function list. * @@ -53,7 +723,7 @@ class KeyListModel : public gcn::ListModel * Returns the number of elements in container. */ int getNumberOfElements() - { return keyboard.KEY_TOTAL; } + { return keysSize; } /** * Returns element from container. @@ -68,7 +738,7 @@ class KeyListModel : public gcn::ListModel { mKeyFunctions[i] = caption; } private: - std::string mKeyFunctions[KeyboardConfig::KEY_TOTAL]; + std::string mKeyFunctions[keysSize]; }; Setup_Keyboard::Setup_Keyboard(): @@ -127,11 +797,18 @@ Setup_Keyboard::~Setup_Keyboard() void Setup_Keyboard::apply() { keyUnresolved(); + int key1, key2; - if (keyboard.hasConflicts()) + if (keyboard.hasConflicts(key1, key2)) { + int s1 = keyToSetupData(key1); + int s2 = keyToSetupData(key2); + new OkDialog(_("Key Conflict(s) Detected."), - keyboard.getBindError(), DIALOG_ERROR); + strprintf(_("Conflict \"%s\" and \"%s\" keys. " + "Resolve them, or gameplay may result in strange behaviour."), + setupActionData[s1].name.c_str(), + setupActionData[s2].name.c_str()), DIALOG_ERROR); } keyboard.setEnabled(true); keyboard.store(); @@ -154,15 +831,19 @@ void Setup_Keyboard::action(const gcn::ActionEvent &event) if (!mKeySetting) { int i(mKeyList->getSelected()); - if (keyboard.isSeparator(i)) - { - mAssignKeyButton->setEnabled(false); - mUnassignKeyButton->setEnabled(false); - } - else + if (i >= 0 && i < keysSize) { - mAssignKeyButton->setEnabled(true); - mUnassignKeyButton->setEnabled(true); + if (setupActionData[i].actionId + == KeyboardConfig::KEY_NO_VALUE) + { + mAssignKeyButton->setEnabled(false); + mUnassignKeyButton->setEnabled(false); + } + else + { + mAssignKeyButton->setEnabled(true); + mUnassignKeyButton->setEnabled(true); + } } } } @@ -172,15 +853,26 @@ void Setup_Keyboard::action(const gcn::ActionEvent &event) mAssignKeyButton->setEnabled(false); keyboard.setEnabled(false); int i(mKeyList->getSelected()); - keyboard.setNewKeyIndex(i); - mKeyListModel->setElementAt(i, keyboard.getKeyCaption(i) + ": ?"); + if (i >= 0 && i < keysSize) + { + const SetupActionData &key = setupActionData[i]; + int ik = key.actionId; + keyboard.setNewKeyIndex(ik); + mKeyListModel->setElementAt(i, std::string( + gettext(key.name.c_str())) + ": ?"); + } } else if (event.getId() == "unassign") { int i(mKeyList->getSelected()); - keyboard.setNewKeyIndex(i); - refreshAssignedKey(mKeyList->getSelected()); - keyboard.unassignKey(); + if (i >= 0 && i < keysSize) + { + const SetupActionData &key = setupActionData[i]; + int ik = key.actionId; + keyboard.setNewKeyIndex(ik); + refreshAssignedKey(mKeyList->getSelected()); + keyboard.unassignKey(); + } mAssignKeyButton->setEnabled(true); } else if (event.getId() == "makeDefault") @@ -192,31 +884,45 @@ void Setup_Keyboard::action(const gcn::ActionEvent &event) void Setup_Keyboard::refreshAssignedKey(int index) { - if (keyboard.isSeparator(index)) + const SetupActionData &key = setupActionData[index]; + if (key.actionId == KeyboardConfig::KEY_NO_VALUE) { const std::string str = " \342\200\225\342\200\225\342\200\225" "\342\200\225\342\200\225 "; - mKeyListModel->setElementAt(index, str - + keyboard.getKeyCaption(index) + str); + mKeyListModel->setElementAt(index, + str + gettext(key.name.c_str()) + str); } else { mKeyListModel->setElementAt(index, strprintf("%s: %s", - keyboard.getKeyCaption(index).c_str(), - keyboard.getKeyStringLong(index).c_str())); + gettext(key.name.c_str()), + keyboard.getKeyStringLong(key.actionId).c_str())); } } void Setup_Keyboard::newKeyCallback(int index) { mKeySetting = false; - refreshAssignedKey(index); + int i = keyToSetupData(index); + if (i >= 0) + refreshAssignedKey(i); mAssignKeyButton->setEnabled(true); } +int Setup_Keyboard::keyToSetupData(int index) +{ + for (int i = 0; i < keysSize; i++) + { + const SetupActionData &key = setupActionData[i]; + if (key.actionId == index) + return i; + } + return -1; +} + void Setup_Keyboard::refreshKeys() { - for (int i = 0; i < keyboard.KEY_TOTAL; i++) + for (int i = 0; i < keysSize; i++) refreshAssignedKey(i); } diff --git a/src/gui/setup_keyboard.h b/src/gui/setup_keyboard.h index 5970a7735..3b5fd5dfa 100644 --- a/src/gui/setup_keyboard.h +++ b/src/gui/setup_keyboard.h @@ -46,6 +46,7 @@ class Setup_Keyboard : public SetupTab ~Setup_Keyboard(); void apply(); + void cancel(); void action(const gcn::ActionEvent &event); @@ -70,6 +71,8 @@ class Setup_Keyboard : public SetupTab */ void keyUnresolved(); + int keyToSetupData(int index); + private: class KeyListModel *mKeyListModel; gcn::ListBox *mKeyList; diff --git a/src/keyboardconfig.cpp b/src/keyboardconfig.cpp index 9552a0844..67d31f7a8 100644 --- a/src/keyboardconfig.cpp +++ b/src/keyboardconfig.cpp @@ -58,7 +58,7 @@ void KeyboardConfig::init() { mKey[i].configField = keyData[i].configField; mKey[i].defaultValue = keyData[i].defaultValue; - mKey[i].caption = gettext(keyData[i].caption.c_str()); +// mKey[i].caption = gettext(keyData[i].caption.c_str()); mKey[i].value = KEY_NO_VALUE; mKey[i].grp = keyData[i].grp; mKey[i].action = keyData[i].action; @@ -66,6 +66,7 @@ void KeyboardConfig::init() mKey[i].priority = keyData[i].priority; mKey[i].condition = keyData[i].condition; } +/* for (int i = KEY_EMOTE_1; i <= KEY_EMOTE_48; i ++) { mKey[i].caption = strprintf( @@ -76,6 +77,7 @@ void KeyboardConfig::init() mKey[i].caption = strprintf( _("Item Shortcut %d"), i - KEY_SHORTCUT_1 + 1); } +*/ mNewKeyIndex = KEY_NO_VALUE; mEnabled = true; @@ -113,7 +115,7 @@ void KeyboardConfig::makeDefault() mKey[i].value = mKey[i].defaultValue; } -bool KeyboardConfig::hasConflicts() +bool KeyboardConfig::hasConflicts(int &key1, int &key2) { int i, j; /** @@ -135,16 +137,12 @@ bool KeyboardConfig::hasConflicts() *mKey[i].configField) ) { - mBindError = strprintf(_("Conflict \"%s\" and \"%s\" keys. " - "Resolve them, or gameplay may result" - " in strange behaviour."), - mKey[i].caption.c_str(), - mKey[j].caption.c_str()); + key1 = i; + key2 = j; return true; } } } - mBindError = ""; return false; } diff --git a/src/keyboardconfig.h b/src/keyboardconfig.h index 7efe5a16a..3299dcf51 100644 --- a/src/keyboardconfig.h +++ b/src/keyboardconfig.h @@ -48,7 +48,6 @@ struct KeyFunction { const char* configField; /** Field index that is in the config file. */ int defaultValue; /** The default key value used. */ - std::string caption; /** The caption value for the key function. */ int value; /** The actual value that is used. */ int grp; /** The key group */ ActionFuncPtr action; /** The key action function */ @@ -85,7 +84,7 @@ class KeyboardConfig /** * Determines if any key assignments are the same as each other. */ - bool hasConflicts(); + bool hasConflicts(int &key1, int &key2); /** * Calls a function back so the key re-assignment(s) can be seen. @@ -114,12 +113,6 @@ class KeyboardConfig { return mEnabled; } /** - * Get the key caption, providing more meaning to the user. - */ - const std::string &getKeyCaption(int index) const - { return mKey[index].caption; } - - /** * Get the key function index by providing the keys value. */ int getKeyIndex(const SDL_Event &event, int grp = 1) const; @@ -163,9 +156,6 @@ class KeyboardConfig std::string getKeyStringLong(int index) const; - const std::string &getBindError() const - { return mBindError; } - SDLKey getKeyFromEvent(const SDL_Event &event) const; int getKeyValueFromEvent(const SDL_Event &event) const; @@ -186,7 +176,6 @@ class KeyboardConfig enum KeyAction { KEY_NO_VALUE = -1, - KEY_SEPARATOR1, KEY_MOVE_UP, KEY_MOVE_DOWN, KEY_MOVE_LEFT, @@ -213,7 +202,6 @@ class KeyboardConfig KEY_PATHFIND, KEY_OK, KEY_QUIT, - KEY_SEPARATOR2, KEY_SHORTCUTS_KEY, KEY_SHORTCUT_1, KEY_SHORTCUT_2, @@ -235,7 +223,6 @@ class KeyboardConfig KEY_SHORTCUT_18, KEY_SHORTCUT_19, KEY_SHORTCUT_20, - KEY_SEPARATOR3, KEY_WINDOW_HELP, KEY_WINDOW_STATUS, KEY_WINDOW_INVENTORY, @@ -258,7 +245,6 @@ class KeyboardConfig KEY_WINDOW_DIDYOUKNOW, KEY_PREV_SOCIAL_TAB, KEY_NEXT_SOCIAL_TAB, - KEY_SEPARATOR4, KEY_EMOTE, KEY_EMOTE_1, KEY_EMOTE_2, @@ -308,11 +294,9 @@ class KeyboardConfig KEY_EMOTE_46, KEY_EMOTE_47, KEY_EMOTE_48, - KEY_SEPARATOR5, KEY_WEAR_OUTFIT, KEY_COPY_OUTFIT, KEY_COPY_EQUIPED_OUTFIT, - KEY_SEPARATOR6, KEY_TOGGLE_CHAT, KEY_SCROLL_CHAT_UP, KEY_SCROLL_CHAT_DOWN, @@ -323,7 +307,6 @@ class KeyboardConfig KEY_CHAT_NEXT_HISTORY, KEY_AUTOCOMPLETE_CHAT, KEY_DEACTIVATE_CHAT, - KEY_SEPARATOR7, KEY_IGNORE_INPUT_1, KEY_IGNORE_INPUT_2, KEY_DIRECT_UP, @@ -373,8 +356,6 @@ class KeyboardConfig Uint8 *mActiveKeys; /**< Stores a list of all the keys */ - std::string mBindError; - KeyToActionMap mKeyToAction; }; diff --git a/src/keyboarddata.h b/src/keyboarddata.h index 8fcb24ecf..b6ae17815 100644 --- a/src/keyboarddata.h +++ b/src/keyboarddata.h @@ -37,7 +37,6 @@ struct KeyData { const char *configField; int defaultValue; - std::string caption; int grp; ActionFuncPtr action; int modKeyIndex; @@ -45,1001 +44,794 @@ struct KeyData int condition; }; -struct SetupActionData -{ - int actionId; - int defaultValue; -}; - - // keyData must be in same order as enum keyAction. static KeyData const keyData[KeyboardConfig::KEY_TOTAL] = { - {"", 0, - N_("Basic Keys"), - 0, - nullptr, - KeyboardConfig::KEY_NO_VALUE, 0, - 0}, {"keyMoveUp", SDLK_UP, - N_("Move Up"), KeyboardConfig::GRP_DEFAULT, &ActionManager::moveUp, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME2}, {"keyMoveDown", SDLK_DOWN, - N_("Move Down"), KeyboardConfig::GRP_DEFAULT, &ActionManager::moveDown, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME2}, {"keyMoveLeft", SDLK_LEFT, - N_("Move Left"), KeyboardConfig::GRP_DEFAULT, &ActionManager::moveLeft, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME}, {"keyMoveRight", SDLK_RIGHT, - N_("Move Right"), KeyboardConfig::GRP_DEFAULT, &ActionManager::moveRight, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME}, {"keyAttack", SDLK_LCTRL, - N_("Attack"), KeyboardConfig::GRP_DEFAULT, nullptr, KeyboardConfig::KEY_NO_VALUE, 50, COND_DEFAULT}, {"keyTargetAttack", SDLK_x, - N_("Target & Attack"), KeyboardConfig::GRP_DEFAULT, nullptr, KeyboardConfig::KEY_NO_VALUE, 50, COND_DEFAULT}, {"keyMoveToTarget", SDLK_v, - N_("Move to Target"), KeyboardConfig::GRP_DEFAULT, &ActionManager::moveToTarget, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_VALIDSPEED}, {"keyChangeMoveToTarget", SDLK_PERIOD, - N_("Change Move to Target type"), KeyboardConfig::GRP_DEFAULT, &ActionManager::changeMoveToTarget, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_VALIDSPEED | COND_EMODS}, {"keyMoveToHome", SDLK_d, - N_("Move to Home location"), KeyboardConfig::GRP_DEFAULT, &ActionManager::moveToHome, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_VALIDSPEED}, {"keySetHome", SDLK_KP5, - N_("Set home location"), KeyboardConfig::GRP_DEFAULT, &ActionManager::setHome, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_VALIDSPEED}, {"keyMoveToPoint", SDLK_RSHIFT, - N_("Move to navigation point"), KeyboardConfig::GRP_DEFAULT, nullptr, KeyboardConfig::KEY_NO_VALUE, 50, COND_DEFAULT}, {"keyTalk", SDLK_t, - N_("Talk"), KeyboardConfig::GRP_DEFAULT, &ActionManager::talk, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME}, {"keyTarget", SDLK_LSHIFT, - N_("Stop Attack"), KeyboardConfig::GRP_DEFAULT, nullptr, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME}, {"keyUnTarget", KeyboardConfig::KEY_NO_VALUE, - N_("Untarget"), KeyboardConfig::GRP_DEFAULT, nullptr, KeyboardConfig::KEY_NO_VALUE, 50, COND_DEFAULT}, {"keyTargetClosest", SDLK_a, - N_("Target Closest"), KeyboardConfig::GRP_DEFAULT, nullptr, KeyboardConfig::KEY_NO_VALUE, 50, COND_DEFAULT}, {"keyTargetNPC", SDLK_n, - N_("Target NPC"), KeyboardConfig::GRP_DEFAULT, nullptr, KeyboardConfig::KEY_NO_VALUE, 50, COND_DEFAULT}, {"keyTargetPlayer", SDLK_q, - N_("Target Player"), KeyboardConfig::GRP_DEFAULT, nullptr, KeyboardConfig::KEY_NO_VALUE, 50, COND_DEFAULT}, {"keyPickup", SDLK_z, - N_("Pickup"), KeyboardConfig::GRP_DEFAULT, &ActionManager::pickup, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_NOTARGET}, {"keyChangePickupType", SDLK_o, - N_("Change Pickup Type"), KeyboardConfig::GRP_DEFAULT, &ActionManager::changePickupType, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_VALIDSPEED | COND_EMODS}, {"keyHideWindows", SDLK_h, - N_("Hide Windows"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::hideWindows, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_NOTARGET}, {"keyBeingSit", SDLK_s, - N_("Sit"), KeyboardConfig::GRP_DEFAULT, &ActionManager::sit, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_NOTARGET}, {"keyScreenshot", SDLK_p, - N_("Screenshot"), KeyboardConfig::GRP_DEFAULT, &ActionManager::screenshot, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_NOTARGET}, {"keyTrade", SDLK_r, - N_("Enable/Disable Trading"), KeyboardConfig::GRP_DEFAULT, &ActionManager::changeTrade, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_NOTARGET}, {"keyPathfind", SDLK_f, - N_("Change Map View Mode"), KeyboardConfig::GRP_DEFAULT, &ActionManager::changeMapMode, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_NOTARGET | COND_EMODS}, {"keyOK", SDLK_SPACE, - N_("Select OK"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::ok, KeyboardConfig::KEY_NO_VALUE, 50, COND_NOMODAL | COND_NOAWAY | COND_NONPCINPUT}, {"keyQuit", SDLK_ESCAPE, - N_("Quit"), KeyboardConfig::GRP_DEFAULT, &ActionManager::quit, KeyboardConfig::KEY_NO_VALUE, 50, COND_DEFAULT}, - {"", 0, - N_("Shortcuts Keys"), - 0, - nullptr, - KeyboardConfig::KEY_NO_VALUE, 50, - COND_DEFAULT}, {"keyShortcutsKey", SDLK_MENU, - N_("Item Shortcuts Key"), KeyboardConfig::GRP_DEFAULT, nullptr, KeyboardConfig::KEY_NO_VALUE, 50, COND_DEFAULT}, {"keyShortcut1", SDLK_1, - strprintf(N_("Item Shortcut %d"), 1), KeyboardConfig::GRP_DEFAULT, &ActionManager::shortcut, KeyboardConfig::KEY_NO_VALUE, 50, COND_SHORTCUT}, {"keyShortcut2", SDLK_2, - strprintf(N_("Item Shortcut %d"), 2), KeyboardConfig::GRP_DEFAULT, &ActionManager::shortcut, KeyboardConfig::KEY_NO_VALUE, 50, COND_SHORTCUT}, {"keyShortcut3", SDLK_3, - strprintf(N_("Item Shortcut %d"), 3), KeyboardConfig::GRP_DEFAULT, &ActionManager::shortcut, KeyboardConfig::KEY_NO_VALUE, 50, COND_SHORTCUT}, {"keyShortcut4", SDLK_4, - strprintf(N_("Item Shortcut %d"), 4), KeyboardConfig::GRP_DEFAULT, &ActionManager::shortcut, KeyboardConfig::KEY_NO_VALUE, 50, COND_SHORTCUT}, {"keyShortcut5", SDLK_5, - strprintf(N_("Item Shortcut %d"), 5), KeyboardConfig::GRP_DEFAULT, &ActionManager::shortcut, KeyboardConfig::KEY_NO_VALUE, 50, COND_SHORTCUT}, {"keyShortcut6", SDLK_6, - strprintf(N_("Item Shortcut %d"), 6), KeyboardConfig::GRP_DEFAULT, &ActionManager::shortcut, KeyboardConfig::KEY_NO_VALUE, 50, COND_SHORTCUT}, {"keyShortcut7", SDLK_7, - strprintf(N_("Item Shortcut %d"), 7), KeyboardConfig::GRP_DEFAULT, &ActionManager::shortcut, KeyboardConfig::KEY_NO_VALUE, 50, COND_SHORTCUT}, {"keyShortcut8", SDLK_8, - strprintf(N_("Item Shortcut %d"), 8), KeyboardConfig::GRP_DEFAULT, &ActionManager::shortcut, KeyboardConfig::KEY_NO_VALUE, 50, COND_SHORTCUT}, {"keyShortcut9", SDLK_9, - strprintf(N_("Item Shortcut %d"), 9), KeyboardConfig::GRP_DEFAULT, &ActionManager::shortcut, KeyboardConfig::KEY_NO_VALUE, 50, COND_SHORTCUT}, {"keyShortcut10", SDLK_0, - strprintf(N_("Item Shortcut %d"), 10), KeyboardConfig::GRP_DEFAULT, &ActionManager::shortcut, KeyboardConfig::KEY_NO_VALUE, 50, COND_SHORTCUT}, {"keyShortcut11", SDLK_MINUS, - strprintf(N_("Item Shortcut %d"), 11), KeyboardConfig::GRP_DEFAULT, &ActionManager::shortcut, KeyboardConfig::KEY_NO_VALUE, 50, COND_SHORTCUT}, {"keyShortcut12", SDLK_EQUALS, - strprintf(N_("Item Shortcut %d"), 12), KeyboardConfig::GRP_DEFAULT, &ActionManager::shortcut, KeyboardConfig::KEY_NO_VALUE, 50, COND_SHORTCUT}, {"keyShortcut13", SDLK_BACKSPACE, - strprintf(N_("Item Shortcut %d"), 13), KeyboardConfig::GRP_DEFAULT, &ActionManager::shortcut, KeyboardConfig::KEY_NO_VALUE, 50, COND_SHORTCUT}, {"keyShortcut14", SDLK_INSERT, - strprintf(N_("Item Shortcut %d"), 14), KeyboardConfig::GRP_DEFAULT, &ActionManager::shortcut, KeyboardConfig::KEY_NO_VALUE, 50, COND_SHORTCUT}, {"keyShortcut15", SDLK_HOME, - strprintf(N_("Item Shortcut %d"), 15), KeyboardConfig::GRP_DEFAULT, &ActionManager::shortcut, KeyboardConfig::KEY_NO_VALUE, 50, COND_SHORTCUT}, {"keyShortcut16", KeyboardConfig::KEY_NO_VALUE, - strprintf(N_("Item Shortcut %d"), 16), KeyboardConfig::GRP_DEFAULT, &ActionManager::shortcut, KeyboardConfig::KEY_NO_VALUE, 50, COND_SHORTCUT}, {"keyShortcut17", KeyboardConfig::KEY_NO_VALUE, - strprintf(N_("Item Shortcut %d"), 17), KeyboardConfig::GRP_DEFAULT, &ActionManager::shortcut, KeyboardConfig::KEY_NO_VALUE, 50, COND_SHORTCUT}, {"keyShortcut18", KeyboardConfig::KEY_NO_VALUE, - strprintf(N_("Item Shortcut %d"), 18), KeyboardConfig::GRP_DEFAULT, &ActionManager::shortcut, KeyboardConfig::KEY_NO_VALUE, 50, COND_SHORTCUT}, {"keyShortcut19", KeyboardConfig::KEY_NO_VALUE, - strprintf(N_("Item Shortcut %d"), 19), KeyboardConfig::GRP_DEFAULT, &ActionManager::shortcut, KeyboardConfig::KEY_NO_VALUE, 50, COND_SHORTCUT}, {"keyShortcut20", KeyboardConfig::KEY_NO_VALUE, - strprintf(N_("Item Shortcut %d"), 20), KeyboardConfig::GRP_DEFAULT, &ActionManager::shortcut, KeyboardConfig::KEY_NO_VALUE, 50, COND_SHORTCUT}, - {"", 0, - N_("Windows Keys"), - 0, - nullptr, - KeyboardConfig::KEY_NO_VALUE, 50, - COND_DEFAULT}, {"keyWindowHelp", SDLK_F1, - N_("Help Window"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::helpWindowShow, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_NOTARGET}, {"keyWindowStatus", SDLK_F2, - N_("Status Window"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::statusWindowShow, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_NOTARGET}, {"keyWindowInventory", SDLK_F3, - N_("Inventory Window"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::inventoryWindowShow, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_NOTARGET}, {"keyWindowEquipment", SDLK_F4, - N_("Equipment Window"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::equipmentWindowShow, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_NOTARGET}, {"keyWindowSkill", SDLK_F5, - N_("Skill Window"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::skillDialogShow, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_NOTARGET}, {"keyWindowMinimap", SDLK_F6, - N_("Minimap Window"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::minimapWindowShow, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_NOTARGET}, {"keyWindowChat", SDLK_F7, - N_("Chat Window"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::chatWindowShow, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_NOTARGET}, {"keyWindowShortcut", SDLK_F8, - N_("Item Shortcut Window"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::shortcutWindowShow, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_NOTARGET}, {"keyWindowSetup", SDLK_F9, - N_("Setup Window"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::setupWindowShow, KeyboardConfig::KEY_NO_VALUE, 50, COND_NOTARGET | COND_NOINPUT | COND_ENABLED}, {"keyWindowDebug", SDLK_F10, - N_("Debug Window"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::debugWindowShow, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_NOTARGET}, {"keyWindowSocial", SDLK_F11, - N_("Social Window"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::socialWindowShow, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_NOTARGET}, {"keyWindowEmoteBar", SDLK_F12, - N_("Emote Shortcut Window"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::emoteShortcutWindowShow, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_NOTARGET}, {"keyWindowOutfit", SDLK_BACKQUOTE, - N_("Outfits Window"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::outfitWindowShow, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_NOTARGET}, {"keyWindowShop", -1, - N_("Shop Window"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::shopWindowShow, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_NOTARGET}, {"keyWindowDrop", SDLK_w, - N_("Quick drop Window"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::dropShortcutWindowShow, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_NOTARGET}, {"keyWindowKills", SDLK_e, - N_("Kill Stats Window"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::killStatsWindowShow, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_NOTARGET}, {"keyWindowSpells", SDLK_j, - N_("Commands Window"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::spellShortcutWindowShow, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_NOTARGET}, {"keyWindowBotChecker", SDLK_LEFTBRACKET, - N_("Bot Checker Window"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::botcheckerWindowShow, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_NOTARGET}, {"keyWindowOnline", KeyboardConfig::KEY_NO_VALUE, - N_("Who Is Online Window"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::whoIsOnlineWindowShow, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_NOTARGET}, {"keyWindowDidYouKnow", KeyboardConfig::KEY_NO_VALUE, - N_("Did you know Window"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::didYouKnowWindowShow, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_NOTARGET}, {"keySocialPrevTab", KeyboardConfig::KEY_NO_VALUE, - N_("Previous Social Tab"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::prevSocialTab, KeyboardConfig::KEY_NO_VALUE, 50, COND_NOINPUT}, {"keySocialNextTab", KeyboardConfig::KEY_NO_VALUE, - N_("Next Social Tab"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::nextSocialTab, KeyboardConfig::KEY_NO_VALUE, 50, COND_NOINPUT}, - {"", 0, - N_("Emotes Keys"), - 0, - nullptr, - KeyboardConfig::KEY_NO_VALUE, 50, - COND_DEFAULT}, {"keySmilie", SDLK_LALT, - N_("Smilie"), KeyboardConfig::GRP_DEFAULT, nullptr, KeyboardConfig::KEY_NO_VALUE, 50, COND_DEFAULT}, {"keyEmoteShortcut1", SDLK_1, - strprintf(N_("Emote Shortcut %d"), 1), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut2", SDLK_2, - strprintf(N_("Emote Shortcut %d"), 2), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut3", SDLK_3, - strprintf(N_("Emote Shortcut %d"), 3), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut4", SDLK_4, - strprintf(N_("Emote Shortcut %d"), 4), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut5", SDLK_5, - strprintf(N_("Emote Shortcut %d"), 5), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut6", SDLK_6, - strprintf(N_("Emote Shortcut %d"), 6), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut7", SDLK_7, - strprintf(N_("Emote Shortcut %d"), 7), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut8", SDLK_8, - strprintf(N_("Emote Shortcut %d"), 8), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut9", SDLK_9, - strprintf(N_("Emote Shortcut %d"), 9), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut10", SDLK_0, - strprintf(N_("Emote Shortcut %d"), 10), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut11", SDLK_MINUS, - strprintf(N_("Emote Shortcut %d"), 11), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut12", SDLK_EQUALS, - strprintf(N_("Emote Shortcut %d"), 12), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut13", SDLK_BACKSPACE, - strprintf(N_("Emote Shortcut %d"), 13), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut14", SDLK_INSERT, - strprintf(N_("Emote Shortcut %d"), 14), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut15", SDLK_HOME, - strprintf(N_("Emote Shortcut %d"), 15), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut16", SDLK_q, - strprintf(N_("Emote Shortcut %d"), 16), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut17", SDLK_w, - strprintf(N_("Emote Shortcut %d"), 17), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut18", SDLK_e, - strprintf(N_("Emote Shortcut %d"), 18), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut19", SDLK_r, - strprintf(N_("Emote Shortcut %d"), 19), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut20", SDLK_t, - strprintf(N_("Emote Shortcut %d"), 20), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut21", SDLK_y, - strprintf(N_("Emote Shortcut %d"), 21), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut22", SDLK_u, - strprintf(N_("Emote Shortcut %d"), 22), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut23", SDLK_i, - strprintf(N_("Emote Shortcut %d"), 23), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut24", SDLK_o, - strprintf(N_("Emote Shortcut %d"), 24), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut25", SDLK_p, - strprintf(N_("Emote Shortcut %d"), 25), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut26", SDLK_LEFTBRACKET, - strprintf(N_("Emote Shortcut %d"), 26), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut27", SDLK_RIGHTBRACKET, - strprintf(N_("Emote Shortcut %d"), 27), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut28", SDLK_BACKSLASH, - strprintf(N_("Emote Shortcut %d"), 28), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut29", SDLK_a, - strprintf(N_("Emote Shortcut %d"), 29), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut30", SDLK_s, - strprintf(N_("Emote Shortcut %d"), 30), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut31", SDLK_d, - strprintf(N_("Emote Shortcut %d"), 31), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut32", SDLK_f, - strprintf(N_("Emote Shortcut %d"), 32), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut33", SDLK_g, - strprintf(N_("Emote Shortcut %d"), 33), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut34", SDLK_h, - strprintf(N_("Emote Shortcut %d"), 34), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut35", SDLK_j, - strprintf(N_("Emote Shortcut %d"), 35), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut36", SDLK_k, - strprintf(N_("Emote Shortcut %d"), 36), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut37", SDLK_l, - strprintf(N_("Emote Shortcut %d"), 37), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut38", SDLK_SEMICOLON, - strprintf(N_("Emote Shortcut %d"), 38), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut39", SDLK_QUOTE, - strprintf(N_("Emote Shortcut %d"), 39), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut40", SDLK_z, - strprintf(N_("Emote Shortcut %d"), 40), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut41", SDLK_x, - strprintf(N_("Emote Shortcut %d"), 41), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut42", SDLK_c, - strprintf(N_("Emote Shortcut %d"), 42), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut43", SDLK_v, - strprintf(N_("Emote Shortcut %d"), 43), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut44", SDLK_b, - strprintf(N_("Emote Shortcut %d"), 44), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut45", SDLK_n, - strprintf(N_("Emote Shortcut %d"), 45), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut46", SDLK_m, - strprintf(N_("Emote Shortcut %d"), 46), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut47", SDLK_COMMA, - strprintf(N_("Emote Shortcut %d"), 47), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, {"keyEmoteShortcut48", SDLK_PERIOD, - strprintf(N_("Emote Shortcut %d"), 48), KeyboardConfig::GRP_EMOTION, &ActionManager::emote, KeyboardConfig::KEY_NO_VALUE, 100, COND_GAME}, - {"", 0, - N_("Outfits Keys"), - 0, - nullptr, - KeyboardConfig::KEY_NO_VALUE, 50, - COND_DEFAULT}, {"keyWearOutfit", SDLK_RCTRL, - N_("Wear Outfit"), KeyboardConfig::GRP_DEFAULT, nullptr, KeyboardConfig::KEY_NO_VALUE, 50, COND_DEFAULT}, {"keyCopyOutfit", SDLK_RALT, - N_("Copy Outfit"), KeyboardConfig::GRP_DEFAULT, nullptr, KeyboardConfig::KEY_NO_VALUE, 50, COND_DEFAULT}, {"keyCopyEquipedOutfit", SDLK_RIGHTBRACKET, - N_("Copy equipped to Outfit"), KeyboardConfig::GRP_DEFAULT, &ActionManager::copyEquippedToOutfit, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_VALIDSPEED}, - {"", 0, - N_("Chat Keys"), - 0, - nullptr, - KeyboardConfig::KEY_NO_VALUE, 50, - COND_DEFAULT}, {"keyChat", SDLK_RETURN, - N_("Toggle Chat"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_CHAT, &ActionManager::toggleChat, KeyboardConfig::KEY_NO_VALUE, 50, COND_ENABLED | COND_NOINPUT | COND_NOAWAY | COND_NOMODAL}, {"keyChatScrollUp", SDLK_PAGEUP, - N_("Scroll Chat Up"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::scrollChatUp, KeyboardConfig::KEY_NO_VALUE, 50, COND_DEFAULT}, {"keyChatScrollDown", SDLK_PAGEDOWN, - N_("Scroll Chat Down"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::scrollChatDown, KeyboardConfig::KEY_NO_VALUE, 50, COND_DEFAULT}, {"keyChatPrevTab", SDLK_KP7, - N_("Previous Chat Tab"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::prevChatTab, KeyboardConfig::KEY_NO_VALUE, 50, COND_NOINPUT}, {"keyChatNextTab", SDLK_KP9, - N_("Next Chat Tab"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::nextChatTab, KeyboardConfig::KEY_NO_VALUE, 50, COND_NOINPUT}, {"keyChatCloseTab", KeyboardConfig::KEY_NO_VALUE, - N_("Close current Chat Tab"), KeyboardConfig::GRP_DEFAULT | KeyboardConfig::GRP_GUI, &ActionManager::closeChatTab, KeyboardConfig::KEY_NO_VALUE, 50, COND_NOINPUT}, {"keyChatPrevHistory", SDLK_KP7, - N_("Previous chat line"), KeyboardConfig::GRP_CHAT, nullptr, KeyboardConfig::KEY_NO_VALUE, 50, COND_DEFAULT}, {"keyChatNextHistory", SDLK_KP9, - N_("Next chat line"), KeyboardConfig::GRP_CHAT, nullptr, KeyboardConfig::KEY_NO_VALUE, 50, COND_DEFAULT}, {"keyAutoCompleteChat", SDLK_TAB, - N_("Chat Auto Complete"), KeyboardConfig::GRP_CHAT, nullptr, KeyboardConfig::KEY_NO_VALUE, 50, COND_DEFAULT}, {"keyDeActivateChat", SDLK_ESCAPE, - N_("Deactivate Chat Input"), KeyboardConfig::GRP_CHAT, nullptr, KeyboardConfig::KEY_NO_VALUE, 50, COND_DEFAULT}, - {"", 0, - N_("Other Keys"), - 0, - nullptr, - KeyboardConfig::KEY_NO_VALUE, 50, - COND_DEFAULT}, {"keyIgnoreInput1", SDLK_LSUPER, - N_("Ignore input 1"), KeyboardConfig::GRP_DEFAULT, &ActionManager::ignoreInput, KeyboardConfig::KEY_NO_VALUE, 500, COND_DEFAULT}, {"keyIgnoreInput2", SDLK_RSUPER, - N_("Ignore input 2"), KeyboardConfig::GRP_DEFAULT, &ActionManager::ignoreInput, KeyboardConfig::KEY_NO_VALUE, 500, COND_DEFAULT}, {"keyDirectUp", SDLK_l, - N_("Direct Up"), KeyboardConfig::GRP_DEFAULT, &ActionManager::directUp, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME}, {"keyDirectDown", SDLK_SEMICOLON, - N_("Direct Down"), KeyboardConfig::GRP_DEFAULT, &ActionManager::directDown, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME}, {"keyDirectLeft", SDLK_k, - N_("Direct Left"), KeyboardConfig::GRP_DEFAULT, &ActionManager::directLeft, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME}, {"keyDirectRight", SDLK_QUOTE, - N_("Direct Right"), KeyboardConfig::GRP_DEFAULT, &ActionManager::directRight, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME}, {"keyCrazyMoves", SDLK_SLASH, - N_("Crazy moves"), KeyboardConfig::GRP_DEFAULT, &ActionManager::crazyMoves, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_VALIDSPEED}, {"keyChangeCrazyMoveType", SDLK_BACKSLASH, - N_("Change Crazy Move mode"), KeyboardConfig::GRP_DEFAULT, &ActionManager::changeCrazyMove, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_VALIDSPEED | COND_EMODS}, {"keyQuickDrop", SDLK_y, - N_("Quick Drop N Items from 0 slot"), KeyboardConfig::GRP_DEFAULT, &ActionManager::dropItem0, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_VALIDSPEED}, {"keyQuickDropN", SDLK_u, - N_("Quick Drop N Items"), KeyboardConfig::GRP_DEFAULT, &ActionManager::dropItem, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_VALIDSPEED}, {"keySwitchQuickDrop", SDLK_i, - N_("Switch Quick Drop Counter"), KeyboardConfig::GRP_DEFAULT, &ActionManager::switchQuickDrop, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_VALIDSPEED}, {"keyMagicInma1", SDLK_c, - N_("Quick heal target or self"), KeyboardConfig::GRP_DEFAULT, &ActionManager::heal, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_VALIDSPEED}, {"keyMagicItenplz", SDLK_m, - N_("Use #itenplz spell"), KeyboardConfig::GRP_DEFAULT, &ActionManager::itenplz, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_VALIDSPEED}, {"keyMagicAttack", SDLK_b, - N_("Use magic attack"), KeyboardConfig::GRP_DEFAULT, &ActionManager::magicAttack, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_VALIDSPEED}, {"keySwitchMagicAttack", SDLK_COMMA, - N_("Switch magic attack"), KeyboardConfig::GRP_DEFAULT, &ActionManager::changeMagicAttack, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_VALIDSPEED | COND_EMODS}, {"keySwitchPvpAttack", KeyboardConfig::KEY_NO_VALUE, - N_("Switch pvp attack"), KeyboardConfig::GRP_DEFAULT, &ActionManager::changePvpMode, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_VALIDSPEED | COND_EMODS}, {"keyInvertDirection", SDLK_KP0, - N_("Change move type"), KeyboardConfig::GRP_DEFAULT, &ActionManager::changeMoveType, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_VALIDSPEED | COND_EMODS}, {"keyChangeAttackWeaponType", SDLK_g, - N_("Change Attack Weapon Type"), KeyboardConfig::GRP_DEFAULT, &ActionManager::changeAttackWeaponType, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_VALIDSPEED | COND_EMODS}, {"keyChangeAttackType", SDLK_END, - N_("Change Attack Type"), KeyboardConfig::GRP_DEFAULT, &ActionManager::changeAttackType, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_VALIDSPEED | COND_EMODS}, {"keyChangeFollowMode", SDLK_KP1, - N_("Change Follow mode"), KeyboardConfig::GRP_DEFAULT, &ActionManager::changeFollowMode, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_VALIDSPEED | COND_EMODS}, {"keyChangeImitationMode", SDLK_KP4, - N_("Change Imitation mode"), KeyboardConfig::GRP_DEFAULT, &ActionManager::changeImitationMode, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_VALIDSPEED | COND_EMODS}, {"keyDisableGameModifiers", SDLK_KP8, - N_("Disable / Enable Game modifier keys"), KeyboardConfig::GRP_DEFAULT, &ActionManager::changeGameModifier, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_VALIDSPEED}, {"keyChangeAudio", SDLK_KP3, - N_("On / Off audio"), KeyboardConfig::GRP_DEFAULT, &ActionManager::changeAudio, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_VALIDSPEED}, {"keyAway", SDLK_KP2, - N_("Enable / Disable away mode"), KeyboardConfig::GRP_DEFAULT, &ActionManager::away, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_VALIDSPEED}, {"keyRightClick", SDLK_TAB, - N_("Emulate right click from keyboard"), KeyboardConfig::GRP_DEFAULT, &ActionManager::mouseClick, KeyboardConfig::KEY_NO_VALUE, 50, COND_NOINPUT | COND_NOAWAY | COND_NOMODAL}, {"keyCameraMode", SDLK_KP_PLUS, - N_("Toggle camera mode"), KeyboardConfig::GRP_DEFAULT, &ActionManager::camera, KeyboardConfig::KEY_NO_VALUE, 50, COND_GAME | COND_VALIDSPEED | COND_EMODS}, {"keyMod", SDLK_LSHIFT, - N_("Modifier key"), KeyboardConfig::GRP_GUI, nullptr, KeyboardConfig::KEY_NO_VALUE, 50, |