59 lines
1.7 KiB
Lua
59 lines
1.7 KiB
Lua
-----------------------------------
|
|
-- func: reloadbattlefield
|
|
-- desc: Attempt to reload specified battlefield lua without a restart.
|
|
-----------------------------------
|
|
---@type TCommand
|
|
local commandObj = {}
|
|
|
|
commandObj.cmdprops =
|
|
{
|
|
permission = 5,
|
|
parameters = 's'
|
|
}
|
|
|
|
local function error(player, msg)
|
|
player:printToPlayer(msg)
|
|
player:printToPlayer('!reloadbattlefield <lua-file-name>')
|
|
end
|
|
|
|
local function fileExists(path)
|
|
local f = io.open(path, 'r')
|
|
return f ~= nil and io.close(f)
|
|
end
|
|
|
|
commandObj.onTrigger = function(player, battlefieldName)
|
|
if battlefieldName == nil then
|
|
error(player, 'Unable to reload battlefield.')
|
|
return
|
|
end
|
|
|
|
local content = xi.battlefield.contents[xi.battlefield.id[string.upper(battlefieldName)]]
|
|
if content == nil then
|
|
error(player, string.format('Unable to find battlefield \'%s\' to reload.', battlefieldName))
|
|
return
|
|
end
|
|
|
|
local filename = content.filename
|
|
if filename and fileExists(filename .. '.lua') then
|
|
if package.loaded[filename] then
|
|
local old = package.loaded[filename]
|
|
package.loaded[filename] = nil
|
|
if InteractionGlobal and old then
|
|
InteractionGlobal.lookup:removeContainer(old)
|
|
end
|
|
end
|
|
|
|
local container = utils.prequire(filename)
|
|
container.filename = filename
|
|
if InteractionGlobal and container then
|
|
InteractionGlobal.lookup:addContainer(container)
|
|
player:printToPlayer(string.format('Battlefield \'%s\' at \'%s\' has been reloaded.', battlefieldName, filename))
|
|
end
|
|
|
|
return
|
|
end
|
|
|
|
error(player, string.format('Unable to find battlefield \'%s\' to reload.', battlefieldName))
|
|
end
|
|
|
|
return commandObj
|