ESX.Modules['input'] = {} local self = ESX.Modules['input'] self.RegisteredControls = {} self.EnabledControls = {} self.LastPressed = {} self.LastDisabledPressed = {} self.LastReleased = {} self.LastDisabledReleased = {} self.Groups = { MOVE = 0, LOOK = 1, WHEEL = 2, CELLPHONE_NAVIGATE = 3, CELLPHONE_NAVIGATE_UD = 4, CELLPHONE_NAVIGATE_LR = 5, FRONTEND_DPAD_ALL = 6, FRONTEND_DPAD_UD = 7, FRONTEND_DPAD_LR = 8, FRONTEND_LSTICK_ALL = 9, FRONTEND_RSTICK_ALL = 10, FRONTEND_GENERIC_UD = 11, FRONTEND_GENERIC_LR = 12, FRONTEND_GENERIC_ALL = 13, FRONTEND_BUMPERS = 14, FRONTEND_TRIGGERS = 15, FRONTEND_STICKS = 16, SCRIPT_DPAD_ALL = 17, SCRIPT_DPAD_UD = 18, SCRIPT_DPAD_LR = 19, SCRIPT_LSTICK_ALL = 20, SCRIPT_RSTICK_ALL = 21, SCRIPT_BUMPERS = 22, SCRIPT_TRIGGERS = 23, WEAPON_WHEEL_CYCLE = 24, FLY = 25, SUB = 26, VEH_MOVE_ALL = 27, CURSOR = 28, CURSOR_SCROLL = 29, SNIPER_ZOOM_SECONDARY = 30, VEH_HYDRAULICS_CONTROL = 31, } self.Controls = { NEXT_CAMERA = 0, LOOK_LR = 1, LOOK_UD = 2, LOOK_UP_ONLY = 3, LOOK_DOWN_ONLY = 4, LOOK_LEFT_ONLY = 5, LOOK_RIGHT_ONLY = 6, CINEMATIC_SLOWMO = 7, SCRIPTED_FLY_UD = 8, SCRIPTED_FLY_LR = 9, SCRIPTED_FLY_ZUP = 10, SCRIPTED_FLY_ZDOWN = 11, WEAPON_WHEEL_UD = 12, WEAPON_WHEEL_LR = 13, WEAPON_WHEEL_NEXT = 14, WEAPON_WHEEL_PREV = 15, SELECT_NEXT_WEAPON = 16, SELECT_PREV_WEAPON = 17, SKIP_CUTSCENE = 18, CHARACTER_WHEEL = 19, MULTIPLAYER_INFO = 20, SPRINT = 21, JUMP = 22, ENTER = 23, ATTACK = 24, AIM = 25, LOOK_BEHIND = 26, PHONE = 27, SPECIAL_ABILITY = 28, SPECIAL_ABILITY_SECONDARY = 29, MOVE_LR = 30, MOVE_UD = 31, MOVE_UP_ONLY = 32, MOVE_DOWN_ONLY = 33, MOVE_LEFT_ONLY = 34, MOVE_RIGHT_ONLY = 35, DUCK = 36, SELECT_WEAPON = 37, PICKUP = 38, SNIPER_ZOOM = 39, SNIPER_ZOOM_IN_ONLY = 40, SNIPER_ZOOM_OUT_ONLY = 41, SNIPER_ZOOM_IN_SECONDARY = 42, SNIPER_ZOOM_OUT_SECONDARY = 43, COVER = 44, RELOAD = 45, TALK = 46, DETONATE = 47, HUD_SPECIAL = 48, ARREST = 49, ACCURATE_AIM = 50, CONTEXT = 51, CONTEXT_SECONDARY = 52, WEAPON_SPECIAL = 53, WEAPON_SPECIAL_TWO = 54, DIVE = 55, DROP_WEAPON = 56, DROP_AMMO = 57, THROW_GRENADE = 58, VEH_MOVE_LR = 59, VEH_MOVE_UD = 60, VEH_MOVE_UP_ONLY = 61, VEH_MOVE_DOWN_ONLY = 62, VEH_MOVE_LEFT_ONLY = 63, VEH_MOVE_RIGHT_ONLY = 64, VEH_SPECIAL = 65, VEH_GUN_LR = 66, VEH_GUN_UD = 67, VEH_AIM = 68, VEH_ATTACK = 69, VEH_ATTACK2 = 70, VEH_ACCELERATE = 71, VEH_BRAKE = 72, VEH_DUCK = 73, VEH_HEADLIGHT = 74, VEH_EXIT = 75, VEH_HANDBRAKE = 76, VEH_HOTWIRE_LEFT = 77, VEH_HOTWIRE_RIGHT = 78, VEH_LOOK_BEHIND = 79, VEH_CIN_CAM = 80, VEH_NEXT_RADIO = 81, VEH_PREV_RADIO = 82, VEH_NEXT_RADIO_TRACK = 83, VEH_PREV_RADIO_TRACK = 84, VEH_RADIO_WHEEL = 85, VEH_HORN = 86, VEH_FLY_THROTTLE_UP = 87, VEH_FLY_THROTTLE_DOWN = 88, VEH_FLY_YAW_LEFT = 89, VEH_FLY_YAW_RIGHT = 90, VEH_PASSENGER_AIM = 91, VEH_PASSENGER_ATTACK = 92, VEH_SPECIAL_ABILITY_FRANKLIN = 93, VEH_STUNT_UD = 94, VEH_CINEMATIC_UD = 95, VEH_CINEMATIC_UP_ONLY = 96, VEH_CINEMATIC_DOWN_ONLY = 97, VEH_CINEMATIC_LR = 98, VEH_SELECT_NEXT_WEAPON = 99, VEH_SELECT_PREV_WEAPON = 100, VEH_ROOF = 101, VEH_JUMP = 102, VEH_GRAPPLING_HOOK = 103, VEH_SHUFFLE = 104, VEH_DROP_PROJECTILE = 105, VEH_MOUSE_CONTROL_OVERRIDE = 106, VEH_FLY_ROLL_LR = 107, VEH_FLY_ROLL_LEFT_ONLY = 108, VEH_FLY_ROLL_RIGHT_ONLY = 109, VEH_FLY_PITCH_UD = 110, VEH_FLY_PITCH_UP_ONLY = 111, VEH_FLY_PITCH_DOWN_ONLY = 112, VEH_FLY_UNDERCARRIAGE = 113, VEH_FLY_ATTACK = 114, VEH_FLY_SELECT_NEXT_WEAPON = 115, VEH_FLY_SELECT_PREV_WEAPON = 116, VEH_FLY_SELECT_TARGET_LEFT = 117, VEH_FLY_SELECT_TARGET_RIGHT = 118, VEH_FLY_VERTICAL_FLIGHT_MODE = 119, VEH_FLY_DUCK = 120, VEH_FLY_ATTACK_CAMERA = 121, VEH_FLY_MOUSE_CONTROL_OVERRIDE = 122, VEH_SUB_TURN_LR = 123, VEH_SUB_TURN_LEFT_ONLY = 124, VEH_SUB_TURN_RIGHT_ONLY = 125, VEH_SUB_PITCH_UD = 126, VEH_SUB_PITCH_UP_ONLY = 127, VEH_SUB_PITCH_DOWN_ONLY = 128, VEH_SUB_THROTTLE_UP = 129, VEH_SUB_THROTTLE_DOWN = 130, VEH_SUB_ASCEND = 131, VEH_SUB_DESCEND = 132, VEH_SUB_TURN_HARD_LEFT = 133, VEH_SUB_TURN_HARD_RIGHT = 134, VEH_SUB_MOUSE_CONTROL_OVERRIDE = 135, VEH_PUSHBIKE_PEDAL = 136, VEH_PUSHBIKE_SPRINT = 137, VEH_PUSHBIKE_FRONT_BRAKE = 138, VEH_PUSHBIKE_REAR_BRAKE = 139, MELEE_ATTACK_LIGHT = 140, MELEE_ATTACK_HEAVY = 141, MELEE_ATTACK_ALTERNATE = 142, MELEE_BLOCK = 143, PARACHUTE_DEPLOY = 144, PARACHUTE_DETACH = 145, PARACHUTE_TURN_LR = 146, PARACHUTE_TURN_LEFT_ONLY = 147, PARACHUTE_TURN_RIGHT_ONLY = 148, PARACHUTE_PITCH_UD = 149, PARACHUTE_PITCH_UP_ONLY = 150, PARACHUTE_PITCH_DOWN_ONLY = 151, PARACHUTE_BRAKE_LEFT = 152, PARACHUTE_BRAKE_RIGHT = 153, PARACHUTE_SMOKE = 154, PARACHUTE_PRECISION_LANDING = 155, MAP = 156, SELECT_WEAPON_UNARMED = 157, SELECT_WEAPON_MELEE = 158, SELECT_WEAPON_HANDGUN = 159, SELECT_WEAPON_SHOTGUN = 160, SELECT_WEAPON_SMG = 161, SELECT_WEAPON_AUTO_RIFLE = 162, SELECT_WEAPON_SNIPER = 163, SELECT_WEAPON_HEAVY = 164, SELECT_WEAPON_SPECIAL = 165, SELECT_CHARACTER_MICHAEL = 166, SELECT_CHARACTER_FRANKLIN = 167, SELECT_CHARACTER_TREVOR = 168, SELECT_CHARACTER_MULTIPLAYER = 169, SAVE_REPLAY_CLIP = 170, SPECIAL_ABILITY_PC = 171, CELLPHONE_UP = 172, CELLPHONE_DOWN = 173, CELLPHONE_LEFT = 174, CELLPHONE_RIGHT = 175, CELLPHONE_SELECT = 176, CELLPHONE_CANCEL = 177, CELLPHONE_OPTION = 178, CELLPHONE_EXTRA_OPTION = 179, CELLPHONE_SCROLL_FORWARD = 180, CELLPHONE_SCROLL_BACKWARD = 181, CELLPHONE_CAMERA_FOCUS_LOCK = 182, CELLPHONE_CAMERA_GRID = 183, CELLPHONE_CAMERA_SELFIE = 184, CELLPHONE_CAMERA_DOF = 185, CELLPHONE_CAMERA_EXPRESSION = 186, FRONTEND_DOWN = 187, FRONTEND_UP = 188, FRONTEND_LEFT = 189, FRONTEND_RIGHT = 190, FRONTEND_RDOWN = 191, FRONTEND_RUP = 192, FRONTEND_RLEFT = 193, FRONTEND_RRIGHT = 194, FRONTEND_AXIS_X = 195, FRONTEND_AXIS_Y = 196, FRONTEND_RIGHT_AXIS_X = 197, FRONTEND_RIGHT_AXIS_Y = 198, FRONTEND_PAUSE = 199, FRONTEND_PAUSE_ALTERNATE = 200, FRONTEND_ACCEPT = 201, FRONTEND_CANCEL = 202, FRONTEND_X = 203, FRONTEND_Y = 204, FRONTEND_LB = 205, FRONTEND_RB = 206, FRONTEND_LT = 207, FRONTEND_RT = 208, FRONTEND_LS = 209, FRONTEND_RS = 210, FRONTEND_LEADERBOARD = 211, FRONTEND_SOCIAL_CLUB = 212, FRONTEND_SOCIAL_CLUB_SECONDARY = 213, FRONTEND_DELETE = 214, FRONTEND_ENDSCREEN_ACCEPT = 215, FRONTEND_ENDSCREEN_EXPAND = 216, FRONTEND_SELECT = 217, SCRIPT_LEFT_AXIS_X = 218, SCRIPT_LEFT_AXIS_Y = 219, SCRIPT_RIGHT_AXIS_X = 220, SCRIPT_RIGHT_AXIS_Y = 221, SCRIPT_RUP = 222, SCRIPT_RDOWN = 223, SCRIPT_RLEFT = 224, SCRIPT_RRIGHT = 225, SCRIPT_LB = 226, SCRIPT_RB = 227, SCRIPT_LT = 228, SCRIPT_RT = 229, SCRIPT_LS = 230, SCRIPT_RS = 231, SCRIPT_PAD_UP = 232, SCRIPT_PAD_DOWN = 233, SCRIPT_PAD_LEFT = 234, SCRIPT_PAD_RIGHT = 235, SCRIPT_SELECT = 236, CURSOR_ACCEPT = 237, CURSOR_CANCEL = 238, CURSOR_X = 239, CURSOR_Y = 240, CURSOR_SCROLL_UP = 241, CURSOR_SCROLL_DOWN = 242, ENTER_CHEAT_CODE = 243, INTERACTION_MENU = 244, MP_TEXT_CHAT_ALL = 245, MP_TEXT_CHAT_TEAM = 246, MP_TEXT_CHAT_FRIENDS = 247, MP_TEXT_CHAT_CREW = 248, PUSH_TO_TALK = 249, CREATOR_LS = 250, CREATOR_RS = 251, CREATOR_LT = 252, CREATOR_RT = 253, CREATOR_MENU_TOGGLE = 254, CREATOR_ACCEPT = 255, CREATOR_DELETE = 256, ATTACK2 = 257, RAPPEL_JUMP = 258, RAPPEL_LONG_JUMP = 259, RAPPEL_SMASH_WINDOW = 260, PREV_WEAPON = 261, NEXT_WEAPON = 262, MELEE_ATTACK1 = 263, MELEE_ATTACK2 = 264, WHISTLE = 265, MOVE_LEFT = 266, MOVE_RIGHT = 267, MOVE_UP = 268, MOVE_DOWN = 269, LOOK_LEFT = 270, LOOK_RIGHT = 271, LOOK_UP = 272, LOOK_DOWN = 273, SNIPER_ZOOM_IN = 274, SNIPER_ZOOM_OUT = 275, SNIPER_ZOOM_IN_ALTERNATE = 276, SNIPER_ZOOM_OUT_ALTERNATE = 277, VEH_MOVE_LEFT = 278, VEH_MOVE_RIGHT = 279, VEH_MOVE_UP = 280, VEH_MOVE_DOWN = 281, VEH_GUN_LEFT = 282, VEH_GUN_RIGHT = 283, VEH_GUN_UP = 284, VEH_GUN_DOWN = 285, VEH_LOOK_LEFT = 286, VEH_LOOK_RIGHT = 287, REPLAY_START_STOP_RECORDING = 288, REPLAY_START_STOP_RECORDING_SECONDARY = 289, SCALED_LOOK_LR = 290, SCALED_LOOK_UD = 291, SCALED_LOOK_UP_ONLY = 292, SCALED_LOOK_DOWN_ONLY = 293, SCALED_LOOK_LEFT_ONLY = 294, SCALED_LOOK_RIGHT_ONLY = 295, REPLAY_MARKER_DELETE = 296, REPLAY_CLIP_DELETE = 297, REPLAY_PAUSE = 298, REPLAY_REWIND = 299, REPLAY_FFWD = 300, REPLAY_NEWMARKER = 301, REPLAY_RECORD = 302, REPLAY_SCREENSHOT = 303, REPLAY_HIDEHUD = 304, REPLAY_STARTPOINT = 305, REPLAY_ENDPOINT = 306, REPLAY_ADVANCE = 307, REPLAY_BACK = 308, REPLAY_TOOLS = 309, REPLAY_RESTART = 310, REPLAY_SHOWHOTKEY = 311, REPLAY_CYCLEMARKERLEFT = 312, REPLAY_CYCLEMARKERRIGHT = 313, REPLAY_FOVINCREASE = 314, REPLAY_FOVDECREASE = 315, REPLAY_CAMERAUP = 316, REPLAY_CAMERADOWN = 317, REPLAY_SAVE = 318, REPLAY_TOGGLETIME = 319, REPLAY_TOGGLETIPS = 320, REPLAY_PREVIEW = 321, REPLAY_TOGGLE_TIMELINE = 322, REPLAY_TIMELINE_PICKUP_CLIP = 323, REPLAY_TIMELINE_DUPLICATE_CLIP = 324, REPLAY_TIMELINE_PLACE_CLIP = 325, REPLAY_CTRL = 326, REPLAY_TIMELINE_SAVE = 327, REPLAY_PREVIEW_AUDIO = 328, VEH_DRIVE_LOOK = 329, VEH_DRIVE_LOOK2 = 330, VEH_FLY_ATTACK2 = 331, RADIO_WHEEL_UD = 332, RADIO_WHEEL_LR = 333, VEH_SLOWMO_UD = 334, VEH_SLOWMO_UP_ONLY = 335, VEH_SLOWMO_DOWN_ONLY = 336, VEH_HYDRAULICS_CONTROL_TOGGLE = 337, VEH_HYDRAULICS_CONTROL_LEFT = 338, VEH_HYDRAULICS_CONTROL_RIGHT = 339, VEH_HYDRAULICS_CONTROL_UP = 340, VEH_HYDRAULICS_CONTROL_DOWN = 341, VEH_HYDRAULICS_CONTROL_UD = 342, VEH_HYDRAULICS_CONTROL_LR = 343, MAP_POI = 344, INPUT_REPLAY_SNAPMATIC_PHOTO = 345, } self.RegisterControl = function(group, id) if ESX.Table.IndexOf(self.RegisteredControls[group], id) == -1 then self.RegisteredControls[group][#self.RegisteredControls[group] + 1] = id end end self.UnregisterControl = function(group, id) if ESX.Table.IndexOf(self.RegisteredControls[group], id) ~= -1 then table.remove(self.RegisteredControls[group], ESX.Table.IndexOf(self.RegisteredControls[group], id)) end end self.EnableControl = function(group, id) self.EnabledControls[group][id] = self.EnabledControls[group][id] + 1 end self.DisableControl = function(group, id) self.EnabledControls[group][id] = self.EnabledControls[group][id] - 1 end self.IsControlRegistered = function(group, id) return ESX.Table.IndexOf(self.RegisteredControls[group], id) ~= -1 end self.IsControlPressed = function(group, id) return self.IsControlEnabled(group, id) and (IsControlPressed(group, id)) end self.IsDisabledControlPressed = function(group, id) return (not self.IsControlEnabled(group, id)) and (IsDisabledControlPressed(group, id)) end self.IsControlEnabled = function(group, id) return self.EnabledControls[group][id] >= 0 end for k1, group in pairs(self.Groups) do self.RegisteredControls[group] = {} self.EnabledControls[group] = {} self.LastPressed[group] = {} self.LastDisabledPressed[group] = {} self.LastReleased[group] = {} self.LastDisabledReleased[group] = {} for k2, id in pairs(self.Controls) do self.EnabledControls[group][id] = 0 self.LastPressed[group][id] = -1 self.LastDisabledPressed[group][id] = -1 self.LastReleased[group][id] = -1 self.LastDisabledReleased[group][id] = -1 end end self.On = function(event, group, id, cb) return AddEventHandler('esx:input:' .. event .. ':' .. group .. ':' .. id, cb) end self.InitESX = function() self.RegisterControl(self.Groups.MOVE, self.Controls[Config.InventoryKey]) self.On('released', self.Groups.MOVE, self.Controls[Config.InventoryKey], function(lastPressed) if (not ESX.IsDead) and (not ESX.UI.Menu.IsOpen('default', 'es_extended', 'inventory')) then ESX.ShowInventory() end end) end