// by commy2
#include "script_component.hpp"

#define FORBIDDEN_KEYS [42, 54, 29, 157, 56, 184, 0, 183, 197, 1]

_key = _this select 1;
_shft = _this select 2;
_ctrl = _this select 3;
_alt =_this select 4;

if (_key in FORBIDDEN_KEYS) exitWith {true};

_keyCode = [_key, _shft, _ctrl, _alt] call FUNC(convertKeyCode);

_keyIndex = floor _keyCode;
_time = time;

if (_time < (GVAR(keyTimes) select _keyIndex) + 0.5 && {_keyIndex == _keyCode}) then {_keyCode = _keyIndex + 0.8};
if (GVAR(keyStates) select _keyIndex > 1) exitWith {true};
if (GVAR(keyStates) select _keyIndex > 0 && {_keyIndex == _keyCode}) then {_keyCode = _keyIndex + 0.9};

GVAR(keyStates) set [_keyIndex, (GVAR(keyStates) select _keyIndex) + 1];
GVAR(keyTimes) set [_keyIndex, _time];

GVAR(keyNewTemp) = [_key, [_shft, _ctrl, _alt], _keyCode];
true