122 lines
3.4 KiB
Lua
122 lines
3.4 KiB
Lua
-----------------------------------
|
|
-- func: !checkinteraction (handlerName)
|
|
-- desc:
|
|
-----------------------------------
|
|
---@type TCommand
|
|
local commandObj = {}
|
|
|
|
commandObj.cmdprops =
|
|
{
|
|
permission = 5,
|
|
parameters = 's'
|
|
}
|
|
|
|
local typeToName = {}
|
|
for name, typeVal in pairs(Action.Type) do
|
|
typeToName[typeVal] = name
|
|
end
|
|
|
|
local function handlerToString(handler, player, containerVarCache, varCache)
|
|
local action = handler.handler
|
|
|
|
local message = type(action)
|
|
if message == 'table' then
|
|
message = string.format('Type: %s, ID: %s, Priority: %d', typeToName[action.type], action.id, action.priority)
|
|
end
|
|
|
|
if handler.container then
|
|
message = message .. ' [container: ' .. handler.container.id .. ']'
|
|
end
|
|
|
|
if handler.check then
|
|
local checkArgs = { }
|
|
if handler.container then
|
|
if handler.container.getCheckArgs then
|
|
checkArgs = handler.container:getCheckArgs(player)
|
|
end
|
|
|
|
checkArgs[#checkArgs + 1] = containerVarCache[handler.container]
|
|
checkArgs[#checkArgs + 1] = varCache
|
|
end
|
|
|
|
message = message .. ' [check: ' .. (handler.check(player, unpack(checkArgs)) and 'true' or 'false') .. ']'
|
|
end
|
|
|
|
return message
|
|
end
|
|
|
|
commandObj.onTrigger = function(player, handlerName)
|
|
local function cmdPrint(message, ...)
|
|
player:printToPlayer(string.format(message, unpack({ ... }) or nil), 17)
|
|
end
|
|
|
|
if handlerName == nil then
|
|
local target = player:getCursorTarget()
|
|
if target and target:isNPC() then
|
|
handlerName = target:getName()
|
|
else
|
|
cmdPrint('No valid handler targeted or handler name given.')
|
|
return
|
|
end
|
|
end
|
|
|
|
local data = InteractionGlobal.lookup.data
|
|
if data == nil then
|
|
cmdPrint('No data in interaction global.')
|
|
return
|
|
end
|
|
|
|
local zoneData = data[player:getZoneID()]
|
|
if zoneData == nil then
|
|
cmdPrint('No interactions in zone.')
|
|
return
|
|
end
|
|
|
|
local handlerData = zoneData[handlerName]
|
|
if handlerData == nil then
|
|
cmdPrint('No interactions for "%s".', handlerName)
|
|
return
|
|
end
|
|
|
|
local varCache = interactionUtil.makeTableCache(function(varname)
|
|
return player:getCharVar(varname)
|
|
end)
|
|
|
|
local containerVarCache = interactionUtil.makeContainerVarCache(player)
|
|
|
|
local function gatherHandlers(category)
|
|
local handlers = {}
|
|
if handlerData[category] then
|
|
for i = 1, #handlerData[category] do
|
|
table.insert(handlers, handlerToString(handlerData[category][i], player, containerVarCache, varCache))
|
|
end
|
|
end
|
|
|
|
return handlers
|
|
end
|
|
|
|
local onSteals = gatherHandlers('onSteal')
|
|
local onTriggers = gatherHandlers('onTrigger')
|
|
local onTrades = gatherHandlers('onTrade')
|
|
|
|
if #onTriggers == 0 and #onTrades == 0 then
|
|
cmdPrint('No interactions for "%s".', handlerName)
|
|
return
|
|
end
|
|
|
|
local function printHandlers(category, handlers)
|
|
if #handlers > 0 then
|
|
cmdPrint(category .. ':')
|
|
for i = 1, #handlers do
|
|
cmdPrint(' ' .. handlers[i])
|
|
end
|
|
end
|
|
end
|
|
|
|
cmdPrint('Handlers for "%s":', handlerName)
|
|
printHandlers('Steal', onSteals)
|
|
printHandlers('Trigger', onTriggers)
|
|
printHandlers('Trade', onTrades)
|
|
end
|
|
|
|
return commandObj
|