mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2024-12-29 03:19:44 +00:00
77 lines
2.2 KiB
Lua
77 lines
2.2 KiB
Lua
local util = require('openmw.util')
|
|
local core = require('openmw.core')
|
|
local self = require('openmw.self')
|
|
|
|
local player = nil
|
|
|
|
local function printToConsole(...)
|
|
local strs = {}
|
|
for i = 1, select('#', ...) do
|
|
strs[i] = tostring(select(i, ...))
|
|
end
|
|
player:sendEvent('OMWConsolePrint', table.concat(strs, '\t'))
|
|
end
|
|
|
|
local function printRes(...)
|
|
if select('#', ...) >= 0 then
|
|
printToConsole(...)
|
|
end
|
|
end
|
|
|
|
local env = {
|
|
I = require('openmw.interfaces'),
|
|
util = require('openmw.util'),
|
|
storage = require('openmw.storage'),
|
|
core = require('openmw.core'),
|
|
types = require('openmw.types'),
|
|
vfs = require('openmw.vfs'),
|
|
markup = require('openmw.markup'),
|
|
async = require('openmw.async'),
|
|
nearby = require('openmw.nearby'),
|
|
self = require('openmw.self'),
|
|
aux_util = require('openmw_aux.util'),
|
|
anim = require('openmw.animation'),
|
|
calendar = require('openmw_aux.calendar'),
|
|
time = require('openmw_aux.time'),
|
|
view = require('openmw_aux.util').deepToString,
|
|
print = printToConsole,
|
|
exit = function() player:sendEvent('OMWConsoleExit') end,
|
|
help = function() player:sendEvent('OMWConsoleHelp') end,
|
|
}
|
|
env._G = env
|
|
setmetatable(env, {__index = _G, __metatable = false})
|
|
_G = nil
|
|
|
|
local function executeLuaCode(code)
|
|
local fn
|
|
local ok, err = pcall(function() fn = util.loadCode('return ' .. code, env) end)
|
|
if ok then
|
|
ok, err = pcall(function() printRes(fn()) end)
|
|
else
|
|
ok, err = pcall(function() util.loadCode(code, env)() end)
|
|
end
|
|
if not ok then
|
|
player:sendEvent('OMWConsoleError', err)
|
|
end
|
|
end
|
|
|
|
return {
|
|
eventHandlers = {
|
|
OMWConsoleEval = function(data)
|
|
player = data.player
|
|
env.selected = data.selected
|
|
executeLuaCode(data.code)
|
|
if env.selected ~= data.selected then
|
|
local ok, err = pcall(function() player:sendEvent('OMWConsoleSetSelected', env.selected) end)
|
|
if not ok then player:sendEvent('OMWConsoleError', err) end
|
|
end
|
|
end,
|
|
},
|
|
engineHandlers = {
|
|
onLoad = function()
|
|
core.sendGlobalEvent('OMWConsoleStopLocal', self.object)
|
|
end,
|
|
}
|
|
}
|
|
|