<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="46">
  <CheatEntries>
    <CheatEntry>
      <ID>0</ID>
      <Description>"Run Console Command"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then
  return
end

local command = inputQuery("The Long Dark - Dev Console", "Enter command:", "")

local rec = memrec
local uncheckTimer = createTimer()
uncheckTimer.Interval = 1
uncheckTimer.OnTimer = function(timer)
  timer.destroy()
  rec.Active = false
end

if command == nil or command == "" then
  -- Bail out if the user cancelled or submitted an empty string
  return
end

LaunchMonoDataCollector()
mono_initialize()

local consoleClass = mono_findClass("", "uConsole")
local runCommandMethod = mono_class_findMethod(consoleClass, "RunCommand")

mono_invoke_method(nil, runCommandMethod, nil, {{type=vtString, value=command}})

[DISABLE]
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>2</ID>
      <Description>"Bind Hotkeys"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{$lua}

[ENABLE]

if syntaxcheck then
  return
end

LaunchMonoDataCollector()
mono_initialize()

function runConsoleCommand(command)
  local consoleClass = mono_findClass("", "uConsole")
  local runCommandMethod = mono_class_findMethod(consoleClass, "RunCommand")

  mono_invoke_method(nil, runCommandMethod, nil, {{type=vtString, value=command}})
end

function quickSave()
  local gmClass = mono_findClass("", "GameManager")
  local saveMethod = mono_class_findMethod(gmClass, "SaveGameAndDisplayHUDMessage")

  mono_invoke_method(nil, saveMethod, nil, {})
end

function quickLoad()
  local sgsClass = mono_findClass("", "SaveGameSystem")
  local gmClass = mono_findClass("", "GameManager")
  local getSlotMethod = mono_class_findMethod(sgsClass, "GetNewestSaveSlotForActiveGame")
  local loadSlotMethod = mono_class_findMethod(gmClass, "LoadSaveGameSlot")
  local slot = mono_invoke_method(nil, getSlotMethod, nil, {})

  mono_invoke_method(nil, loadSlotMethod, nil, {slot})
end

local bindings = {
  [VK_F1] = function() runConsoleCommand("god") end,
  [VK_F2] = function() runConsoleCommand("lamp_infinite") end,
  [VK_F3] = function() runConsoleCommand("ghost") end,
  [VK_F4] = function() runConsoleCommand("fly") end,
  [VK_F5] = function() quickSave() end,
  [VK_F6] = function() quickLoad() end,
  [VK_F7] = function() runConsoleCommand("force_gear_weight 0") end,
  [VK_F8] = function() runConsoleCommand("reset_forced_gear_weight") end
}

hotkeys = hotkeys or {}

for key, callback in pairs(bindings) do
  table.insert(hotkeys, createHotkey(callback, key))
end

[DISABLE]

if hotkeys then
  for index, hotkey in ipairs(hotkeys) do
    hotkey.destroy()
  end

  hotkeys = nil
end

</AssemblerScript>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols/>
</CheatTable>
