I really don't wanna spoil your little conversation, but since results count more for me then theorys, I have to unfortunately tell @JustinOther, @rongphale and @Aenara were right. I've tested Justins script, and while it was acting much better then mine, it still itched with multiple keystrokes. Not as much as with the default script, but still noticeable. Using states however completely resolved it. The script looks now like that:
Spoiler Scriptname SI_HotkeyScript extends Quest GlobalVariable Property SI_HotkeyTorch AutoGlobalVariable Property SI_HotkeyTorch2 AutoGlobalVariable Property SI_HotkeyQuitGame AutoGlobalVariable Property SI_HotkeyToggleMenus AutoLight Property Torch01 Autobool TorchHotkeyPressedEvent OnInit() RegisterForUpdate(0.1)EndEventAuto State InitState Event OnUpdate() GoToState("DieThreadState") If Input.IsKeyPressed(SI_HotKeyTorch.GetValueInt()) == 1 && TorchHotkeyPressed == 0 && (Game.GetPlayer().GetItemCount(Torch01) > 0) TorchHotkeyPressed = 1 Game.GetPlayer().EquipItem(Torch01) Elseif Input.IsKeyPressed(SI_HotKeyTorch.GetValueInt()) == 1 && TorchHotkeypressed == 1 TorchHotkeyPressed = 0 Game.GetPlayer().UnequipItem(Torch01) EndIf GoToState("InitState") GoToState("DieThreadState") If Input.IsKeyPressed(SI_HotKeyTorch2.GetValueInt()) == 1 && TorchHotkeyPressed == 0 && (Game.GetPlayer().GetItemCount(Torch01) > 0) TorchHotkeyPressed = 1 Game.GetPlayer().EquipItem(Torch01) Elseif Input.IsKeyPressed(SI_HotKeyTorch2.GetValueInt()) == 1 && TorchHotkeypressed == 1 TorchHotkeyPressed = 0 Game.GetPlayer().UnequipItem(Torch01) EndIf GoToState("InitState") GoToState("DieThreadState") If Input.IsKeyPressed(SI_HotkeyQuitGame.GetValueInt()) Debug.QuitGame() Endif GoToState("InitState") GoToState("DieThreadState") If Input.IsKeyPressed(SI_HotkeyToggleMenus.GetValueInt()) Debug.ToggleMenus() Endif GoToState("InitState") EndEventEndStateState DieThreadState ; rongphale said die you stupid threads and dead you areEndState The weird thing was I forgot to rename the deathState to DieThreadState before and this was acting even better, I assumed, could be wrong, was just a feelt response to how the hotkey was acting:
Spoiler Scriptname SI_HotkeyScript extends Quest GlobalVariable Property SI_HotkeyTorch AutoGlobalVariable Property SI_HotkeyTorch2 AutoGlobalVariable Property SI_HotkeyQuitGame AutoGlobalVariable Property SI_HotkeyToggleMenus AutoLight Property Torch01 Autobool TorchHotkeyPressedEvent OnInit() RegisterForUpdate(0.1)EndEventAuto State InitState Event OnUpdate() GoToState("DieThreadState") If Input.IsKeyPressed(SI_HotKeyTorch.GetValueInt()) == 1 && TorchHotkeyPressed == 0 && (Game.GetPlayer().GetItemCount(Torch01) > 0) TorchHotkeyPressed = 1 Game.GetPlayer().EquipItem(Torch01) Elseif Input.IsKeyPressed(SI_HotKeyTorch.GetValueInt()) == 1 && TorchHotkeypressed == 1 TorchHotkeyPressed = 0 Game.GetPlayer().UnequipItem(Torch01) EndIf GoToState("InitState") GoToState("DieThreadState") If Input.IsKeyPressed(SI_HotKeyTorch2.GetValueInt()) == 1 && TorchHotkeyPressed == 0 && (Game.GetPlayer().GetItemCount(Torch01) > 0) TorchHotkeyPressed = 1 Game.GetPlayer().EquipItem(Torch01) Elseif Input.IsKeyPressed(SI_HotKeyTorch2.GetValueInt()) == 1 && TorchHotkeypressed == 1 TorchHotkeyPressed = 0 Game.GetPlayer().UnequipItem(Torch01) EndIf GoToState("InitState") GoToState("DieThreadState") If Input.IsKeyPressed(SI_HotkeyQuitGame.GetValueInt()) Debug.QuitGame() Endif GoToState("InitState") GoToState("DieThreadState") If Input.IsKeyPressed(SI_HotkeyToggleMenus.GetValueInt()) Debug.ToggleMenus() Endif GoToState("InitState") EndEventEndStateState deathState; <--------------------- difference right here!!! ; rongphale said die you stupid threads and dead you areEndState The only left over problem now was that the hotkey wasn't responding as good as the default hotkeys and kept on auto euipping/unequipping the torch when I hold the hotkey. But suddenly an enlightment lead my brain, and I was like "Why not put a function in there that prevents isKeyPressed from holding the key?" and I searched and found 'ReleaseKey' inside the input.psc. I put it inside the script, and while it didn't solved the auot equip/unequip, it felt like the key had a much more improved response. However, this seems to create the best result now:
Spoiler Scriptname SI_HotkeyScript extends Quest GlobalVariable Property SI_HotkeyTorch AutoGlobalVariable Property SI_HotkeyTorch2 AutoGlobalVariable Property SI_HotkeyQuitGame AutoGlobalVariable Property SI_HotkeyToggleMenus AutoLight Property Torch01 Autobool TorchHotkeyPressedEvent OnInit() RegisterForUpdate(0.01)EndEventAuto State InitState Event OnUpdate() GoToState("DieThreadState") If Input.IsKeyPressed(SI_HotKeyTorch.GetValueInt()) == 1 && TorchHotkeyPressed == 0 && (Game.GetPlayer().GetItemCount(Torch01) > 0) Input.ReleaseKey(SI_HotKeyTorch.GetValueInt()); <------------------------- function to remove auto equip/unequip TorchHotkeyPressed = 1 Game.GetPlayer().EquipItem(Torch01) Elseif Input.IsKeyPressed(SI_HotKeyTorch.GetValueInt()) == 1 && TorchHotkeypressed == 1 Input.ReleaseKey(SI_HotKeyTorch.GetValueInt()) TorchHotkeyPressed = 0 Game.GetPlayer().UnequipItem(Torch01) EndIf GoToState("InitState") GoToState("DieThreadState") If Input.IsKeyPressed(SI_HotKeyTorch2.GetValueInt()) == 1 && TorchHotkeyPressed == 0 && (Game.GetPlayer().GetItemCount(Torch01) > 0) Input.ReleaseKey(SI_HotKeyTorch2.GetValueInt()) TorchHotkeyPressed = 1 Game.GetPlayer().EquipItem(Torch01) Elseif Input.IsKeyPressed(SI_HotKeyTorch2.GetValueInt()) == 1 && TorchHotkeypressed == 1 Input.ReleaseKey(SI_HotKeyTorch2.GetValueInt()) TorchHotkeyPressed = 0 Game.GetPlayer().UnequipItem(Torch01) EndIf GoToState("InitState") GoToState("DieThreadState") If Input.IsKeyPressed(SI_HotkeyQuitGame.GetValueInt()) Input.ReleaseKey(SI_HotKeyQuitGame.GetValueInt()) Debug.QuitGame() Endif GoToState("InitState") GoToState("DieThreadState") If Input.IsKeyPressed(SI_HotkeyToggleMenus.GetValueInt()) Input.ReleaseKey(SI_HotKeyToggleMenus.GetValueInt()) Debug.ToggleMenus() Endif GoToState("InitState") EndEventEndStateState DieThreadState ; rongphale said die you stupid threads and dead you areEndState I'm still certain there's something wrong inside this script. I think the left over problems are because 'DieThreadState' is directly following the 'InitState', but since I've rely on results as mentioned before, this is how the script should do it's intented job right now. I'm open for improvements as always guys...

Oh yeah, and I probably have to extend the two additional hotkeys, as the toggle menu still seems to act weird. The quit game however works perfectly normal...

Edit: Oh yeah, and I forgot to mention, while yesterday I was a simple copypasta scripter, you guys catapulted me to apprentice level. Just listening to your conversations created so much enlightment, I couldn't even remotely get to understand this through numerous walls of text on the CI Wiki. I specially thank you for making me understand how "blind" threads work in such that they stop scripts from permanently auto updating. This will help a lot in future script developments...off to do some strongly needed code improvement on my Mod...
