Name | Type | is_array | initial_value |
_GUIKeyIsPressed | boolean | No | |
_GUIKeyIsReleased | boolean | No | |
_GUIKeyMeta | integer | No | |
_GUIKeyPlayer | player | No | |
_GUIKeyTrigger | integer | No | |
GUIKEY_0 | integer | No | 48 |
GUIKEY_1 | integer | No | 49 |
GUIKEY_2 | integer | No | 50 |
GUIKEY_3 | integer | No | 51 |
GUIKEY_4 | integer | No | 52 |
GUIKEY_5 | integer | No | 53 |
GUIKEY_6 | integer | No | 54 |
GUIKEY_7 | integer | No | 55 |
GUIKEY_8 | integer | No | 56 |
GUIKEY_9 | integer | No | 57 |
GUIKEY_A | integer | No | 65 |
GUIKEY_ACCEPT | integer | No | 30 |
GUIKEY_ADD | integer | No | 107 |
GUIKEY_ALT | integer | No | 18 |
GUIKEY_APPS | integer | No | 93 |
GUIKEY_ATTN | integer | No | 246 |
GUIKEY_B | integer | No | 66 |
GUIKEY_BACKSPACE | integer | No | 8 |
GUIKEY_BROWSER_BACK | integer | No | 166 |
GUIKEY_BROWSER_FAVORITES | integer | No | 171 |
GUIKEY_BROWSER_FORWARD | integer | No | 167 |
GUIKEY_BROWSER_HOME | integer | No | 172 |
GUIKEY_BROWSER_REFRESH | integer | No | 168 |
GUIKEY_BROWSER_SEARCH | integer | No | 170 |
GUIKEY_BROWSER_STOP | integer | No | 169 |
GUIKEY_C | integer | No | 67 |
GUIKEY_CAPSLOCK | integer | No | 20 |
GUIKEY_CLEAR | integer | No | 12 |
GUIKEY_CONTROL | integer | No | 17 |
GUIKEY_CONVERT | integer | No | 28 |
GUIKEY_CRSEL | integer | No | 247 |
GUIKEY_D | integer | No | 68 |
GUIKEY_DECIMAL | integer | No | 110 |
GUIKEY_DELETE | integer | No | 46 |
GUIKEY_DIVIDE | integer | No | 111 |
GUIKEY_DOWN | integer | No | 40 |
GUIKEY_E | integer | No | 69 |
GUIKEY_END | integer | No | 35 |
GUIKEY_EREOF | integer | No | 249 |
GUIKEY_ESCAPE | integer | No | 27 |
GUIKEY_EXECUTE | integer | No | 43 |
GUIKEY_EXSEL | integer | No | 248 |
GUIKEY_F | integer | No | 70 |
GUIKEY_F1 | integer | No | 112 |
GUIKEY_F10 | integer | No | 121 |
GUIKEY_F11 | integer | No | 122 |
GUIKEY_F12 | integer | No | 123 |
GUIKEY_F13 | integer | No | 124 |
GUIKEY_F14 | integer | No | 125 |
GUIKEY_F15 | integer | No | 126 |
GUIKEY_F16 | integer | No | 127 |
GUIKEY_F17 | integer | No | 128 |
GUIKEY_F18 | integer | No | 129 |
GUIKEY_F19 | integer | No | 130 |
GUIKEY_F2 | integer | No | 113 |
GUIKEY_F20 | integer | No | 131 |
GUIKEY_F21 | integer | No | 132 |
GUIKEY_F22 | integer | No | 133 |
GUIKEY_F23 | integer | No | 134 |
GUIKEY_F24 | integer | No | 135 |
GUIKEY_F3 | integer | No | 114 |
GUIKEY_F4 | integer | No | 115 |
GUIKEY_F5 | integer | No | 116 |
GUIKEY_F6 | integer | No | 117 |
GUIKEY_F7 | integer | No | 118 |
GUIKEY_F8 | integer | No | 119 |
GUIKEY_F9 | integer | No | 120 |
GUIKEY_FINAL | integer | No | 24 |
GUIKEY_G | integer | No | 71 |
GUIKEY_H | integer | No | 72 |
GUIKEY_HANGUL | integer | No | 21 |
GUIKEY_HANJA | integer | No | 25 |
GUIKEY_HELP | integer | No | 47 |
GUIKEY_HOME | integer | No | 36 |
GUIKEY_I | integer | No | 73 |
GUIKEY_ICO_00 | integer | No | 228 |
GUIKEY_ICO_CLEAR | integer | No | 230 |
GUIKEY_ICO_HELP | integer | No | 227 |
GUIKEY_INSERT | integer | No | 45 |
GUIKEY_J | integer | No | 74 |
GUIKEY_JUNJA | integer | No | 23 |
GUIKEY_K | integer | No | 75 |
GUIKEY_KANA | integer | No | 21 |
GUIKEY_KANJI | integer | No | 25 |
GUIKEY_L | integer | No | 76 |
GUIKEY_LALT | integer | No | 164 |
GUIKEY_LAUNCH_APP1 | integer | No | 182 |
GUIKEY_LAUNCH_APP2 | integer | No | 183 |
GUIKEY_LAUNCH_MAIL | integer | No | 180 |
GUIKEY_LAUNCH_MEDIA_SELECT | integer | No | 181 |
GUIKEY_LCONTROL | integer | No | 162 |
GUIKEY_LEFT | integer | No | 37 |
GUIKEY_LMETA | integer | No | 91 |
GUIKEY_LSHIFT | integer | No | 160 |
GUIKEY_M | integer | No | 77 |
GUIKEY_MEDIA_NEXT_TRACK | integer | No | 176 |
GUIKEY_MEDIA_PLAY_PAUSE | integer | No | 179 |
GUIKEY_MEDIA_PREV_TRACK | integer | No | 177 |
GUIKEY_MEDIA_STOP | integer | No | 178 |
GUIKEY_MODECHANGE | integer | No | 31 |
GUIKEY_MULTIPLY | integer | No | 106 |
GUIKEY_N | integer | No | 78 |
GUIKEY_NAME | string | Yes | |
GUIKEY_NONAME | integer | No | 252 |
GUIKEY_NONCONVERT | integer | No | 29 |
GUIKEY_NUMLOCK | integer | No | 144 |
GUIKEY_NUMPAD0 | integer | No | 96 |
GUIKEY_NUMPAD1 | integer | No | 97 |
GUIKEY_NUMPAD2 | integer | No | 98 |
GUIKEY_NUMPAD3 | integer | No | 99 |
GUIKEY_NUMPAD4 | integer | No | 100 |
GUIKEY_NUMPAD5 | integer | No | 101 |
GUIKEY_NUMPAD6 | integer | No | 102 |
GUIKEY_NUMPAD7 | integer | No | 103 |
GUIKEY_NUMPAD8 | integer | No | 104 |
GUIKEY_NUMPAD9 | integer | No | 105 |
GUIKEY_O | integer | No | 79 |
GUIKEY_OEM_1 | integer | No | 186 |
GUIKEY_OEM_102 | integer | No | 226 |
GUIKEY_OEM_2 | integer | No | 191 |
GUIKEY_OEM_3 | integer | No | 192 |
GUIKEY_OEM_4 | integer | No | 219 |
GUIKEY_OEM_5 | integer | No | 220 |
GUIKEY_OEM_6 | integer | No | 221 |
GUIKEY_OEM_7 | integer | No | 222 |
GUIKEY_OEM_8 | integer | No | 223 |
GUIKEY_OEM_ATTN | integer | No | 240 |
GUIKEY_OEM_AUTO | integer | No | 243 |
GUIKEY_OEM_AX | integer | No | 225 |
GUIKEY_OEM_BACKTAB | integer | No | 245 |
GUIKEY_OEM_CLEAR | integer | No | 254 |
GUIKEY_OEM_COMMA | integer | No | 188 |
GUIKEY_OEM_COPY | integer | No | 242 |
GUIKEY_OEM_CUSEL | integer | No | 239 |
GUIKEY_OEM_ENLW | integer | No | 244 |
GUIKEY_OEM_FINISH | integer | No | 241 |
GUIKEY_OEM_FJ_JISHO | integer | No | 146 |
GUIKEY_OEM_FJ_LOYA | integer | No | 149 |
GUIKEY_OEM_FJ_MASSHOU | integer | No | 147 |
GUIKEY_OEM_FJ_ROYA | integer | No | 150 |
GUIKEY_OEM_FJ_TOUROKU | integer | No | 148 |
GUIKEY_OEM_JUMP | integer | No | 234 |
GUIKEY_OEM_MINUS | integer | No | 189 |
GUIKEY_OEM_NEC_EQUAL | integer | No | 146 |
GUIKEY_OEM_PA1 | integer | No | 235 |
GUIKEY_OEM_PA2 | integer | No | 236 |
GUIKEY_OEM_PA3 | integer | No | 237 |
GUIKEY_OEM_PERIOD | integer | No | 190 |
GUIKEY_OEM_PLUS | integer | No | 187 |
GUIKEY_OEM_RESET | integer | No | 233 |
GUIKEY_OEM_WSCTRL | integer | No | 238 |
GUIKEY_P | integer | No | 80 |
GUIKEY_PA1 | integer | No | 253 |
GUIKEY_PACKET | integer | No | 231 |
GUIKEY_PAGEDOWN | integer | No | 34 |
GUIKEY_PAGEUP | integer | No | 33 |
GUIKEY_PAUSE | integer | No | 19 |
GUIKEY_PLAY | integer | No | 250 |
GUIKEY_PRINT | integer | No | 42 |
GUIKEY_PRINTSCREEN | integer | No | 44 |
GUIKEY_PROCESSKEY | integer | No | 229 |
GUIKEY_Q | integer | No | 81 |
GUIKEY_R | integer | No | 82 |
GUIKEY_RALT | integer | No | 165 |
GUIKEY_RCONTROL | integer | No | 163 |
GUIKEY_RETURN | integer | No | 13 |
GUIKEY_RIGHT | integer | No | 39 |
GUIKEY_RMETA | integer | No | 92 |
GUIKEY_RSHIFT | integer | No | 161 |
GUIKEY_S | integer | No | 83 |
GUIKEY_SCROLLLOCK | integer | No | 145 |
GUIKEY_SELECT | integer | No | 41 |
GUIKEY_SEPARATOR | integer | No | 108 |
GUIKEY_SHIFT | integer | No | 16 |
GUIKEY_SLEEP | integer | No | 95 |
GUIKEY_SPACE | integer | No | 32 |
GUIKEY_SUBTRACT | integer | No | 109 |
GUIKEY_T | integer | No | 84 |
GUIKEY_TAB | integer | No | 9 |
GUIKEY_U | integer | No | 85 |
GUIKEY_UP | integer | No | 38 |
GUIKEY_V | integer | No | 86 |
GUIKEY_VOLUME_DOWN | integer | No | 174 |
GUIKEY_VOLUME_MUTE | integer | No | 173 |
GUIKEY_VOLUME_UP | integer | No | 175 |
GUIKEY_W | integer | No | 87 |
GUIKEY_X | integer | No | 88 |
GUIKEY_Y | integer | No | 89 |
GUIKEY_Z | integer | No | 90 |
GUIKEY_ZOOM | integer | No | 251 |
GUIKeyEvent | real | No | |
GUIKeyEvent_S_BlockRepeat | boolean | No | true |
GUIKeyEvent_S_EnablePlayer | boolean | Yes | |
GUIKeyEvent_System | trigger | No | |
GUIMETAKEY_ALL | integer | No | 15 |
GUIMETAKEY_ALT | integer | No | 4 |
GUIMETAKEY_ALT_META | integer | No | 12 |
GUIMETAKEY_CONTROL | integer | No | 2 |
GUIMETAKEY_CONTROL_ALT | integer | No | 6 |
GUIMETAKEY_CONTROL_ALT_META | integer | No | 14 |
GUIMETAKEY_CONTROL_AND_META | integer | No | 10 |
GUIMETAKEY_META | integer | No | 8 |
GUIMETAKEY_NONE | integer | No | |
GUIMETAKEY_SHIFT | integer | No | 1 |
GUIMETAKEY_SHIFT_ALT | integer | No | 5 |
GUIMETAKEY_SHIFT_ALT_META | integer | No | 13 |
GUIMETAKEY_SHIFT_CONTROL | integer | No | 3 |
GUIMETAKEY_SHIFT_CONTROL_ALT | integer | No | 7 |
GUIMETAKEY_SHIFT_CONTROL_META | integer | No | 11 |
GUIMETAKEY_SHIFT_META | integer | No | 9 |
WASD_A_IsPressed | boolean | Yes | |
WASD_D_IsPressed | boolean | Yes | |
WASD_S_IsPressed | boolean | Yes | |
WASD_TempPoint | location | Yes | |
WASD_Unit | unit | Yes | |
WASD_W_IsPressed | boolean | Yes |
//===========================================================================
//
// GUIKeyEvent | Version 1.4a
// Author: lolreported
//
// Demo Map requires patch version 1.36+
// System Code should work with patch version 1.31+
//
// Credits appreciated if used!
//
//
// Thanks to Tasyen for some information regarding oskey natives,
// https://www.hiveworkshop.com/threads/oskey-player-key-event.319903/
//
//
// CHANGELOG & LATEST VERSION
// Check the system thread at hiveworkshop,
// https://www.hiveworkshop.com/threads/339078/
//
//
//===========================================================================
Version 1.31 introduced the possibility to detect when ANY keyboard key is pressed or released,
but this functionality is limited to JASS/Lua users only as Blizzard never
implemented any GUI functionality for this new feature.
I've seen some requests and questions from GUI users wondering how they
can implement this feature, but it's usually difficult as they're not
used to work with code.
GUIKeyEvent changes that!
# Features
- Detect when any keyboard key is pressed or released, by any player.
- Detect if a meta key ("Shift", "Control", "Alt" and "META") was pressed or released with the key.
# How it Works
- The system registers every key press/release combination for every enabled player.
- The system then detects whenever a player presses or releases a key and stores the data into GUI variables you can use with your triggers.
- The system uses the popular GUI event "Game - Value of Real Variable" to trigger all your GUIKey events.
# How to Use
- Use the event "Game - GUIKeyEvent becomes Equal to 1.00" as your trigger event to detect a GUIKey event.
- You then have the option to use 5 variables that's been set for you by the GUIKeyEvent system:
--- "_GUIKeyPlayer" = This is the player that pressed or released the keyboard key that triggered the event.
--- "_GUIKeyTrigger" = This is the keyboard key that was pressed or released with this event.
----- Use an "Integer Comparison" in order to detect which key was pressed. Example: "_GUIKeyTrigger Equal to GUIKEY_W"
--- "_GUIKeyMeta" = This holds meta key data for the pressed or released key. Was Shift, Control, Alt or the META key pressed or released together with the key?
----- Use an "Integer Comparison" in order to detect which meta key was pressed. Example: "_GUIKeyMeta Equal to GUIMETAKEY_SHIFT". You may also check for multiple at once, like "_GUIKeyMeta Equal to GUIMETAKEY_SHIFT_CONTROL_ALT"
--- "_GUIKeyIsPressed" = Is the keyboard key pressed?
----- Use a "Boolean Comparison" in order to detect if the key is pressed or not. Example: "_GUIKeyIsPressed Equal to True"
--- "_GUIKeyIsReleased" = Is the keyboard key released?
----- Use a "Boolean Comparison" in order to detect if the key is pressed or not. Example: "_GUIKeyIsReleased Equal to True"
--- You can turn off the system at any time with the "Trigger - Turn off GUIKeyEvent_System" action and then turn it on with "Trigger - Turn on GUIKeyEvent_System".
# How to Install
- 1. Check the "(optional) GUIKeyEvent Demo(s)" folder in the Demo Map for some examples of how to use GUIKeyEvent before installing.
- 2. Different instruction depending on:
--- a. If you're installing from fresh:
----- a1. Open the Demo Map and copy the "GUIKeyEvent"-folder.
----- a2. Open your map and paste the folder into the Trigger Editor.
----- a3. Go through the "GUIKeyEvent Settings" trigger.
--- b. If you're already using any version prior to GUIKeyEvent 1.4a, then follow this:
----- b1. Make sure to note down your GUIKeyEvent settings from the "GUIKeyEvent Settings" trigger.
----- b2. If you keep any of your own custom triggers in the "GUIKeyEvent"-folder, make sure to move them somewhere else.
----- b3. Delete the "GUIKeyEvent"-folder.
----- b4. Open the Demo Map and copy the "GUIKeyEvent"-folder.
----- b5. Open your map and paste the folder into the Trigger Editor.
----- b6. Update any GUIKeyEvent settings in the "GUIKeyEvent Settings" trigger that you had noted down.
--- c. If you're using any 1.4a+ version, then follow this:
----- c1. Delete the "GUIKeyEvent System Code & Variables"-folder in your map.
----- c2. Open the Demop Map and copy the "GUIKeyEvent System Code & Variables"-folder.
----- c3. Open your map and paste the folder into the "GUIKeyEvent"-folder.
- 3. Done!
# How to Restore a GUIKEY
In case you deleted a "GUIKEY_" or "GUIMETAKEY_" variable and want to restore it,
the easiest way is to open the Demo Map and copy the variable directly from there
and paste it back into your map.
If you're unable to do so, you'll have to create and set it up manually:
GUIMETAKEY:
Meta Keys have different values and combining them uses their sum total.
SHIFT = 1
CONTROL = 2
ALT = 4
META = 8
1. Create a variable of type Integer.
2. Calculate the total sum and set your newly created variable's "Initial Value" to this value.
3. Done!
Example:
Creating a Meta Key variable that combines Shift and Control should have its Initial Value set to 3 as SHIFT (1) + CONTROL (2) = 3.
GUIKEY:
1. Create a variable of type Integer.
2. Find your key from the list below.
3. Copy the two characters after "=" to the right.
4. Convert this number from hexadecimal to decimal (you can use an online website converter if necessary).
5. Set your newly created variable's "Initial Value" to the decimal number in the Trigger Editor.
6. Done!
Key List:
BACKSPACE = 08
TAB = 09
CLEAR = 0C
RETURN = 0D
SHIFT = 10
CONTROL = 11
ALT = 12
PAUSE = 13
CAPSLOCK = 14
KANA = 15
HANGUL = 15
JUNJA = 17
FINAL = 18
HANJA = 19
KANJI = 19
ESCAPE = 1B
CONVERT = 1C
NONCONVERT = 1D
ACCEPT = 1E
MODECHANGE = 1F
SPACE = 20
PAGEUP = 21
PAGEDOWN = 22
END = 23
HOME = 24
LEFT = 25
UP = 26
RIGHT = 27
DOWN = 28
SELECT = 29
PRINT = 2A
EXECUTE = 2B
PRINTSCREEN = 2C
INSERT = 2D
DELETE = 2E
HELP = 2F
0 = 30
1 = 31
2 = 32
3 = 33
4 = 34
5 = 35
6 = 36
7 = 37
8 = 38
9 = 39
A = 41
B = 42
C = 43
D = 44
E = 45
F = 46
G = 47
H = 48
I = 49
J = 4A
K = 4B
L = 4C
M = 4D
N = 4E
O = 4F
P = 50
Q = 51
R = 52
S = 53
T = 54
U = 55
V = 56
W = 57
X = 58
Y = 59
Z = 5A
LMETA = 5B
RMETA = 5C
APPS = 5D
SLEEP = 5F
NUMPAD0 = 60
NUMPAD1 = 61
NUMPAD2 = 62
NUMPAD3 = 63
NUMPAD4 = 64
NUMPAD5 = 65
NUMPAD6 = 66
NUMPAD7 = 67
NUMPAD8 = 68
NUMPAD9 = 69
MULTIPLY = 6A
ADD = 6B
SEPARATOR = 6C
SUBTRACT = 6D
DECIMAL = 6E
DIVIDE = 6F
F1 = 70
F2 = 71
F3 = 72
F4 = 73
F5 = 74
F6 = 75
F7 = 76
F8 = 77
F9 = 78
F10 = 79
F11 = 7A
F12 = 7B
F13 = 7C
F14 = 7D
F15 = 7E
F16 = 7F
F17 = 80
F18 = 81
F19 = 82
F20 = 83
F21 = 84
F22 = 85
F23 = 86
F24 = 87
NUMLOCK = 90
SCROLLLOCK = 91
OEM_NEC_EQUAL = 92
OEM_FJ_JISHO = 92
OEM_FJ_MASSHOU = 93
OEM_FJ_TOUROKU = 94
OEM_FJ_LOYA = 95
OEM_FJ_ROYA = 96
LSHIFT = A0
RSHIFT = A1
LCONTROL = A2
RCONTROL = A3
LALT = A4
RALT = A5
BROWSER_BACK = A6
BROWSER_FORWARD = A7
BROWSER_REFRESH = A8
BROWSER_STOP = A9
BROWSER_SEARCH = AA
BROWSER_FAVORITES = AB
BROWSER_HOME = AC
VOLUME_MUTE = AD
VOLUME_DOWN = AE
VOLUME_UP = AF
MEDIA_NEXT_TRACK = B0
MEDIA_PREV_TRACK = B1
MEDIA_STOP = B2
MEDIA_PLAY_PAUSE = B3
LAUNCH_MAIL = B4
LAUNCH_MEDIA_SELECT= B5
LAUNCH_APP1 = B6
LAUNCH_APP2 = B7
OEM_1 = BA
OEM_PLUS = BB
OEM_COMMA = BC
OEM_MINUS = BD
OEM_PERIOD = BE
OEM_2 = BF
OEM_3 = C0
OEM_4 = DB
OEM_5 = DC
OEM_6 = DD
OEM_7 = DE
OEM_8 = DF
OEM_AX = E1
OEM_102 = E2
ICO_HELP = E3
ICO_00 = E4
PROCESSKEY = E5
ICO_CLEAR = E6
PACKET = E7
OEM_RESET = E9
OEM_JUMP = EA
OEM_PA1 = EB
OEM_PA2 = EC
OEM_PA3 = ED
OEM_WSCTRL = EE
OEM_CUSEL = EF
OEM_ATTN = F0
OEM_FINISH = F1
OEM_COPY = F2
OEM_AUTO = F3
OEM_ENLW = F4
OEM_BACKTAB = F5
ATTN = F6
CRSEL = F7
EXSEL = F8
EREOF = F9
PLAY = FA
ZOOM = FB
NONAME = FC
PA1 = FD
OEM_CLEAR = FE
//===========================================================================
//
// GUIKeyEvent 1.4a
// Author: lolreported
//
// Important Note:
// Please do not edit anything below,
// unless you know what you're doing.
//
//===========================================================================
library GUIKeyEvent
globals
// For init
private constant integer CONVERT_OS_KEY_TYPE_INDEX_START = $08
private constant integer CONVERT_OS_KEY_TYPE_INDEX_END = $FE
// Value combined of all possible meta keys.
// MetaKeys are "none"(0), "shift"(1), "control"(2), "alt"(4) and "META"(8) (windows key).
private constant integer META_KEY_MAX = 15
//===========================================================================
// Only used during system setup to keep track on the current key to register
private integer currentKey
//===========================================================================
// Used by "udg_GUIKeyEvent_S_BlockRepeat" setting
private integer array playerPrevKey
private boolean array playerKeyWasDown
endglobals
// This function runs whenever a registrered player presses/releases a registered event key
private function OnGUIKeyEvent takes nothing returns boolean
local integer playerId
// Set globals whenever a player presses or releases a key
// Set player that triggered the oskey event
set udg__GUIKeyPlayer = GetTriggerPlayer()
// Convert oskey to handle id in order to be able to compare with GUI key variables
set udg__GUIKeyTrigger = GetHandleId(BlzGetTriggerPlayerKey())
// Set boolean equal to if the key was pressed or released
set udg__GUIKeyIsPressed = BlzGetTriggerPlayerIsKeyDown()
// ===========================================================================================
// Ignore new events if the key is held down and udg_GUIKeyEvent_S_BlockRepeat is set to true.
if (udg_GUIKeyEvent_S_BlockRepeat) then
set playerId = GetPlayerId(udg__GUIKeyPlayer)
if (playerKeyWasDown[playerId] == udg__GUIKeyIsPressed and playerPrevKey[playerId] == udg__GUIKeyTrigger) then
return false
endif
set playerPrevKey[playerId] = udg__GUIKeyTrigger
set playerKeyWasDown[playerId] = udg__GUIKeyIsPressed
endif
// ===========================================================================================
// Set meta key for pressed key
set udg__GUIKeyMeta = BlzGetTriggerPlayerMetaKey()
set udg__GUIKeyIsReleased = not udg__GUIKeyIsPressed
// Trigger event(s)
set udg_GUIKeyEvent = 0.0
set udg_GUIKeyEvent = 1.0
//set udg_GUIKeyEvent = 0.0
return false
endfunction
private function RegisterKey takes nothing returns boolean
local integer playerId
local player p
local integer metaKey
local oskeytype key
//ConvertOsKeyType starts at index 8 and ends at index 254 ($08 to $FE)
set currentKey = currentKey + 1
if (currentKey > CONVERT_OS_KEY_TYPE_INDEX_END) then
// No more keys to register, finish.
call DestroyTrigger(GetTriggeringTrigger())
return false
endif
// Get the current oskey and register player key events
set key = ConvertOsKeyType(currentKey)
set playerId = 0
loop
// Only register oskey events for players that are active
// Registers both keyDown/keyUp and all metaKey combinations.
if (udg_GUIKeyEvent_S_EnablePlayer[playerId + 1]) then
set p = Player(playerId)
set metaKey = 0
loop
call BlzTriggerRegisterPlayerKeyEvent(udg_GUIKeyEvent_System, p, key, metaKey, false)
call BlzTriggerRegisterPlayerKeyEvent(udg_GUIKeyEvent_System, p, key, metaKey, true)
set metaKey = metaKey + 1
exitwhen(metaKey > META_KEY_MAX)
endloop
endif
set playerId = playerId + 1
exitwhen(playerId >= bj_MAX_PLAYERS)
endloop
set p = null
set key = null
// Run this trigger again, until all keys have been registered
call TriggerEvaluate(GetTriggeringTrigger())
return false
endfunction
private function InitGUIKeyNames takes nothing returns nothing
set udg_GUIKEY_NAME[$08] = "BACKSPACE"
set udg_GUIKEY_NAME[$09] = "TAB"
set udg_GUIKEY_NAME[$0C] = "CLEAR"
set udg_GUIKEY_NAME[$0D] = "RETURN"
set udg_GUIKEY_NAME[$10] = "SHIFT"
set udg_GUIKEY_NAME[$11] = "CONTROL"
set udg_GUIKEY_NAME[$12] = "ALT"
set udg_GUIKEY_NAME[$13] = "PAUSE"
set udg_GUIKEY_NAME[$14] = "CAPSLOCK"
set udg_GUIKEY_NAME[$15] = "KANA"
set udg_GUIKEY_NAME[$15] = "HANGUL"
set udg_GUIKEY_NAME[$17] = "JUNJA"
set udg_GUIKEY_NAME[$18] = "FINAL"
set udg_GUIKEY_NAME[$19] = "HANJA"
set udg_GUIKEY_NAME[$19] = "KANJI"
set udg_GUIKEY_NAME[$1B] = "ESCAPE"
set udg_GUIKEY_NAME[$1C] = "CONVERT"
set udg_GUIKEY_NAME[$1D] = "NONCONVERT"
set udg_GUIKEY_NAME[$1E] = "ACCEPT"
set udg_GUIKEY_NAME[$1F] = "MODECHANGE"
set udg_GUIKEY_NAME[$20] = "SPACE"
set udg_GUIKEY_NAME[$21] = "PAGEUP"
set udg_GUIKEY_NAME[$22] = "PAGEDOWN"
set udg_GUIKEY_NAME[$23] = "END"
set udg_GUIKEY_NAME[$24] = "HOME"
set udg_GUIKEY_NAME[$25] = "LEFT"
set udg_GUIKEY_NAME[$26] = "UP"
set udg_GUIKEY_NAME[$27] = "RIGHT"
set udg_GUIKEY_NAME[$28] = "DOWN"
set udg_GUIKEY_NAME[$29] = "SELECT"
set udg_GUIKEY_NAME[$2A] = "PRINT"
set udg_GUIKEY_NAME[$2B] = "EXECUTE"
set udg_GUIKEY_NAME[$2C] = "PRINTSCREEN"
set udg_GUIKEY_NAME[$2D] = "INSERT"
set udg_GUIKEY_NAME[$2E] = "DELETE"
set udg_GUIKEY_NAME[$2F] = "HELP"
set udg_GUIKEY_NAME[$30] = "0"
set udg_GUIKEY_NAME[$31] = "1"
set udg_GUIKEY_NAME[$32] = "2"
set udg_GUIKEY_NAME[$33] = "3"
set udg_GUIKEY_NAME[$34] = "4"
set udg_GUIKEY_NAME[$35] = "5"
set udg_GUIKEY_NAME[$36] = "6"
set udg_GUIKEY_NAME[$37] = "7"
set udg_GUIKEY_NAME[$38] = "8"
set udg_GUIKEY_NAME[$39] = "9"
set udg_GUIKEY_NAME[$41] = "A"
set udg_GUIKEY_NAME[$42] = "B"
set udg_GUIKEY_NAME[$43] = "C"
set udg_GUIKEY_NAME[$44] = "D"
set udg_GUIKEY_NAME[$45] = "E"
set udg_GUIKEY_NAME[$46] = "F"
set udg_GUIKEY_NAME[$47] = "G"
set udg_GUIKEY_NAME[$48] = "H"
set udg_GUIKEY_NAME[$49] = "I"
set udg_GUIKEY_NAME[$4A] = "J"
set udg_GUIKEY_NAME[$4B] = "K"
set udg_GUIKEY_NAME[$4C] = "L"
set udg_GUIKEY_NAME[$4D] = "M"
set udg_GUIKEY_NAME[$4E] = "N"
set udg_GUIKEY_NAME[$4F] = "O"
set udg_GUIKEY_NAME[$50] = "P"
set udg_GUIKEY_NAME[$51] = "Q"
set udg_GUIKEY_NAME[$52] = "R"
set udg_GUIKEY_NAME[$53] = "S"
set udg_GUIKEY_NAME[$54] = "T"
set udg_GUIKEY_NAME[$55] = "U"
set udg_GUIKEY_NAME[$56] = "V"
set udg_GUIKEY_NAME[$57] = "W"
set udg_GUIKEY_NAME[$58] = "X"
set udg_GUIKEY_NAME[$59] = "Y"
set udg_GUIKEY_NAME[$5A] = "Z"
set udg_GUIKEY_NAME[$5B] = "LMETA"
set udg_GUIKEY_NAME[$5C] = "RMETA"
set udg_GUIKEY_NAME[$5D] = "APPS"
set udg_GUIKEY_NAME[$5F] = "SLEEP"
set udg_GUIKEY_NAME[$60] = "NUMPAD0"
set udg_GUIKEY_NAME[$61] = "NUMPAD1"
set udg_GUIKEY_NAME[$62] = "NUMPAD2"
set udg_GUIKEY_NAME[$63] = "NUMPAD3"
set udg_GUIKEY_NAME[$64] = "NUMPAD4"
set udg_GUIKEY_NAME[$65] = "NUMPAD5"
set udg_GUIKEY_NAME[$66] = "NUMPAD6"
set udg_GUIKEY_NAME[$67] = "NUMPAD7"
set udg_GUIKEY_NAME[$68] = "NUMPAD8"
set udg_GUIKEY_NAME[$69] = "NUMPAD9"
set udg_GUIKEY_NAME[$6A] = "MULTIPLY"
set udg_GUIKEY_NAME[$6B] = "ADD"
set udg_GUIKEY_NAME[$6C] = "SEPARATOR "
set udg_GUIKEY_NAME[$6D] = "SUBTRACT"
set udg_GUIKEY_NAME[$6E] = "DECIMAL"
set udg_GUIKEY_NAME[$6F] = "DIVIDE"
set udg_GUIKEY_NAME[$70] = "F1"
set udg_GUIKEY_NAME[$71] = "F2"
set udg_GUIKEY_NAME[$72] = "F3"
set udg_GUIKEY_NAME[$73] = "F4"
set udg_GUIKEY_NAME[$74] = "F5"
set udg_GUIKEY_NAME[$75] = "F6"
set udg_GUIKEY_NAME[$76] = "F7"
set udg_GUIKEY_NAME[$77] = "F8"
set udg_GUIKEY_NAME[$78] = "F9"
set udg_GUIKEY_NAME[$79] = "F10"
set udg_GUIKEY_NAME[$7A] = "F11"
set udg_GUIKEY_NAME[$7B] = "F12"
set udg_GUIKEY_NAME[$7C] = "F13"
set udg_GUIKEY_NAME[$7D] = "F14"
set udg_GUIKEY_NAME[$7E] = "F15"
set udg_GUIKEY_NAME[$7F] = "F16"
set udg_GUIKEY_NAME[$80] = "F17"
set udg_GUIKEY_NAME[$81] = "F18"
set udg_GUIKEY_NAME[$82] = "F19"
set udg_GUIKEY_NAME[$83] = "F20"
set udg_GUIKEY_NAME[$84] = "F21"
set udg_GUIKEY_NAME[$85] = "F22"
set udg_GUIKEY_NAME[$86] = "F23"
set udg_GUIKEY_NAME[$87] = "F24"
set udg_GUIKEY_NAME[$90] = "NUMLOCK"
set udg_GUIKEY_NAME[$91] = "SCROLLLOCK"
set udg_GUIKEY_NAME[$92] = "OEM_NEC_EQUAL"
set udg_GUIKEY_NAME[$92] = "OEM_FJ_JISHO"
set udg_GUIKEY_NAME[$93] = "OEM_FJ_MASSHOU"
set udg_GUIKEY_NAME[$94] = "OEM_FJ_TOUROKU"
set udg_GUIKEY_NAME[$95] = "OEM_FJ_LOYA"
set udg_GUIKEY_NAME[$96] = "OEM_FJ_ROYA"
set udg_GUIKEY_NAME[$A0] = "LSHIFT"
set udg_GUIKEY_NAME[$A1] = "RSHIFT"
set udg_GUIKEY_NAME[$A2] = "LCONTROL"
set udg_GUIKEY_NAME[$A3] = "RCONTROL"
set udg_GUIKEY_NAME[$A4] = "LALT"
set udg_GUIKEY_NAME[$A5] = "RALT"
set udg_GUIKEY_NAME[$A6] = "BROWSER_BACK"
set udg_GUIKEY_NAME[$A7] = "BROWSER_FORWARD"
set udg_GUIKEY_NAME[$A8] = "BROWSER_REFRESH"
set udg_GUIKEY_NAME[$A9] = "BROWSER_STOP"
set udg_GUIKEY_NAME[$AA] = "BROWSER_SEARCH"
set udg_GUIKEY_NAME[$AB] = "BROWSER_FAVORITES"
set udg_GUIKEY_NAME[$AC] = "BROWSER_HOME"
set udg_GUIKEY_NAME[$AD] = "VOLUME_MUTE"
set udg_GUIKEY_NAME[$AE] = "VOLUME_DOWN"
set udg_GUIKEY_NAME[$AF] = "VOLUME_UP"
set udg_GUIKEY_NAME[$B0] = "MEDIA_NEXT_TRACK"
set udg_GUIKEY_NAME[$B1] = "MEDIA_PREV_TRACK"
set udg_GUIKEY_NAME[$B2] = "MEDIA_STOP"
set udg_GUIKEY_NAME[$B3] = "MEDIA_PLAY_PAUSE"
set udg_GUIKEY_NAME[$B4] = "LAUNCH_MAIL"
set udg_GUIKEY_NAME[$B5] = "LAUNCH_MEDIA_SELECT"
set udg_GUIKEY_NAME[$B6] = "LAUNCH_APP1"
set udg_GUIKEY_NAME[$B7] = "LAUNCH_APP2"
set udg_GUIKEY_NAME[$BA] = "OEM_1"
set udg_GUIKEY_NAME[$BB] = "OEM_PLUS"
set udg_GUIKEY_NAME[$BC] = "OEM_COMMA"
set udg_GUIKEY_NAME[$BD] = "OEM_MINUS"
set udg_GUIKEY_NAME[$BE] = "OEM_PERIOD"
set udg_GUIKEY_NAME[$BF] = "OEM_2"
set udg_GUIKEY_NAME[$C0] = "OEM_3"
set udg_GUIKEY_NAME[$DB] = "OEM_4"
set udg_GUIKEY_NAME[$DC] = "OEM_5"
set udg_GUIKEY_NAME[$DD] = "OEM_6"
set udg_GUIKEY_NAME[$DE] = "OEM_7"
set udg_GUIKEY_NAME[$DF] = "OEM_8"
set udg_GUIKEY_NAME[$E1] = "OEM_AX"
set udg_GUIKEY_NAME[$E2] = "OEM_102"
set udg_GUIKEY_NAME[$E3] = "ICO_HELP"
set udg_GUIKEY_NAME[$E4] = "ICO_00"
set udg_GUIKEY_NAME[$E5] = "PROCESSKEY"
set udg_GUIKEY_NAME[$E6] = "ICO_CLEAR"
set udg_GUIKEY_NAME[$E7] = "PACKET"
set udg_GUIKEY_NAME[$E9] = "OEM_RESET"
set udg_GUIKEY_NAME[$EA] = "OEM_JUMP"
set udg_GUIKEY_NAME[$EB] = "OEM_PA1"
set udg_GUIKEY_NAME[$EC] = "OEM_PA2"
set udg_GUIKEY_NAME[$ED] = "OEM_PA3"
set udg_GUIKEY_NAME[$EE] = "OEM_WSCTRL"
set udg_GUIKEY_NAME[$EF] = "OEM_CUSEL"
set udg_GUIKEY_NAME[$F0] = "OEM_ATTN"
set udg_GUIKEY_NAME[$F1] = "OEM_FINISH"
set udg_GUIKEY_NAME[$F2] = "OEM_COPY"
set udg_GUIKEY_NAME[$F3] = "OEM_AUTO"
set udg_GUIKEY_NAME[$F4] = "OEM_ENLW"
set udg_GUIKEY_NAME[$F5] = "OEM_BACKTAB"
set udg_GUIKEY_NAME[$F6] = "ATTN"
set udg_GUIKEY_NAME[$F7] = "CRSEL"
set udg_GUIKEY_NAME[$F8] = "EXSEL"
set udg_GUIKEY_NAME[$F9] = "EREOF"
set udg_GUIKEY_NAME[$FA] = "PLAY"
set udg_GUIKEY_NAME[$FB] = "ZOOM"
set udg_GUIKEY_NAME[$FC] = "NONAME"
set udg_GUIKEY_NAME[$FD] = "PA1"
set udg_GUIKEY_NAME[$FE] = "OEM_CLEAR"
endfunction
public function GUIKeyEventInit takes nothing returns nothing
local trigger t
// Create the trigger that handles oskey input from players
set udg_GUIKeyEvent_System = CreateTrigger()
call TriggerAddCondition(udg_GUIKeyEvent_System, Condition(function OnGUIKeyEvent))
// Initializes the GUIKey Name array
call InitGUIKeyNames()
// Register oskey events for players
// Run each key as a new thread to avoid op-limit (but shouldn't be an issue most likely anyway).
// Results in ~100k operations for 24 players
set currentKey = CONVERT_OS_KEY_TYPE_INDEX_START - 1
set t = CreateTrigger()
call TriggerAddCondition(t, Condition(function RegisterKey))
call TriggerEvaluate(t)
set t = null
endfunction
endlibrary