96 lines
2.5 KiB
Lua
96 lines
2.5 KiB
Lua
-----------------------------------
|
|
-- func: afkcheck
|
|
-- desc: Sends a custom menu to the cursor target,
|
|
-- : with some very simple but randomized questions.
|
|
-- : If the target doesn't respond with a correct answer
|
|
-- : within 30 seconds, they will be set to 0hp.
|
|
-----------------------------------
|
|
---@type TCommand
|
|
local commandObj = {}
|
|
|
|
commandObj.cmdprops =
|
|
{
|
|
permission = 1,
|
|
parameters = ''
|
|
}
|
|
|
|
commandObj.onTrigger = function(player)
|
|
-- Validate target
|
|
local target = player:getCursorTarget()
|
|
|
|
if not target then
|
|
player:printToPlayer('No target selected target, using self')
|
|
target = player
|
|
end
|
|
|
|
if target:getObjType() ~= xi.objType.PC then
|
|
player:printToPlayer('Invalid target')
|
|
end
|
|
|
|
-- Generate options
|
|
local function getCorrectOption()
|
|
local a = math.random(1, 10)
|
|
local b = math.random(1, 10)
|
|
local c = a + b
|
|
|
|
return
|
|
{
|
|
string.format('%2i + %2i = %2i', a, b, c),
|
|
function(playerArg)
|
|
playerArg:printToPlayer('AFK Check passed', xi.msg.channel.NS_SAY)
|
|
playerArg:setLocalVar('CAPTCHA', 0)
|
|
end,
|
|
}
|
|
end
|
|
|
|
local function getIncorrectOption()
|
|
local a = math.random(1, 10)
|
|
local b = math.random(1, 10)
|
|
local randomChange = math.random(1, 3)
|
|
if math.random(0, 1) == 1 then
|
|
randomChange = randomChange * -1
|
|
end
|
|
|
|
local c = a + b + randomChange
|
|
|
|
return
|
|
{
|
|
string.format('%2i + %2i = %2i', a, b, c),
|
|
function(playerArg)
|
|
playerArg:printToPlayer('AFK Check failed', xi.msg.channel.NS_SAY)
|
|
playerArg:setHP(0)
|
|
end,
|
|
}
|
|
end
|
|
|
|
local options = {}
|
|
table.insert(options, getCorrectOption())
|
|
table.insert(options, getIncorrectOption())
|
|
table.insert(options, getIncorrectOption())
|
|
|
|
options = utils.shuffle(options)
|
|
|
|
-- Present menu
|
|
local menu =
|
|
{
|
|
title = 'AFK Check: Please pick true statement (30s)',
|
|
onStart = function(playerArg)
|
|
playerArg:setLocalVar('CAPTCHA', 1)
|
|
end,
|
|
|
|
options = options,
|
|
onCancelled = function(playerArg)
|
|
playerArg:printToPlayer('AFK Check failed!', xi.msg.channel.NS_SAY)
|
|
end,
|
|
}
|
|
target:customMenu(menu)
|
|
|
|
-- Add timer
|
|
target:timer(30000, function(playerArg)
|
|
if playerArg:getLocalVar('CAPTCHA') == 1 then
|
|
playerArg:setHP(0)
|
|
end
|
|
end)
|
|
end
|
|
|
|
return commandObj
|