mirror of
https://github.com/OTCv8/otclientv8.git
synced 2025-04-29 18:59:20 +02:00
179 lines
5.4 KiB
Lua
179 lines
5.4 KiB
Lua
CaveBot.Extensions.Tasker = {}
|
|
|
|
local dataValidationFailed = function()
|
|
print("CaveBot[Tasker]: data validation failed! incorrect data, check cavebot/tasker for more info")
|
|
return false
|
|
end
|
|
|
|
-- miniconfig
|
|
local talkDelay = storage.extras.talkDelay
|
|
if not storage.caveBotTasker then
|
|
storage.caveBotTasker = {
|
|
inProgress = false,
|
|
monster = "",
|
|
taskName = "",
|
|
count = 0,
|
|
max = 0
|
|
}
|
|
end
|
|
|
|
local resetTaskData = function()
|
|
storage.caveBotTasker.inProgress = false
|
|
storage.caveBotTasker.monster = ""
|
|
storage.caveBotTasker.monster2 = ""
|
|
storage.caveBotTasker.taskName = ""
|
|
storage.caveBotTasker.count = 0
|
|
storage.caveBotTasker.max = 0
|
|
end
|
|
|
|
CaveBot.Extensions.Tasker.setup = function()
|
|
CaveBot.registerAction("Tasker", "#FF0090", function(value, retries)
|
|
local taskName = ""
|
|
local monster = ""
|
|
local monster2 = ""
|
|
local count = 0
|
|
local label1 = ""
|
|
local label2 = ""
|
|
local task
|
|
|
|
local data = string.split(value, ",")
|
|
if not data or #data < 1 then
|
|
dataValidationFailed()
|
|
end
|
|
local marker = tonumber(data[1])
|
|
|
|
if not marker then
|
|
dataValidationFailed()
|
|
resetTaskData()
|
|
elseif marker == 1 then
|
|
if getNpcs(3) == 0 then
|
|
print("CaveBot[Tasker]: no NPC found in range! skipping")
|
|
return false
|
|
end
|
|
if #data ~= 4 and #data ~= 5 then
|
|
dataValidationFailed()
|
|
resetTaskData()
|
|
else
|
|
taskName = data[2]:lower():trim()
|
|
count = tonumber(data[3]:trim())
|
|
monster = data[4]:lower():trim()
|
|
if #data == 5 then
|
|
monster2 = data[5]:lower():trim()
|
|
end
|
|
end
|
|
elseif marker == 2 then
|
|
if #data ~= 3 then
|
|
dataValidationFailed()
|
|
else
|
|
label1 = data[2]:lower():trim()
|
|
label2 = data[3]:lower():trim()
|
|
end
|
|
elseif marker == 3 then
|
|
if getNpcs(3) == 0 then
|
|
print("CaveBot[Tasker]: no NPC found in range! skipping")
|
|
return false
|
|
end
|
|
if #data ~= 1 then
|
|
dataValidationFailed()
|
|
end
|
|
end
|
|
|
|
-- let's cover markers now
|
|
if marker == 1 then -- starting task
|
|
CaveBot.Conversation("hi", "task", taskName, "yes")
|
|
delay(talkDelay*4)
|
|
|
|
storage.caveBotTasker.monster = monster
|
|
if monster2 then storage.caveBotTasker.monster2 = monster2 end
|
|
storage.caveBotTasker.taskName = taskName
|
|
storage.caveBotTasker.inProgress = true
|
|
storage.caveBotTasker.max = count
|
|
storage.caveBotTasker.count = 0
|
|
|
|
print("CaveBot[Tasker]: taken task for: " .. monster .. " x" .. count)
|
|
return true
|
|
elseif marker == 2 then -- only checking
|
|
if not storage.caveBotTasker.inProgress then
|
|
CaveBot.gotoLabel(label2)
|
|
print("CaveBot[Tasker]: there is no task in progress so going to take one.")
|
|
return true
|
|
end
|
|
|
|
local max = storage.caveBotTasker.max
|
|
local count = storage.caveBotTasker.count
|
|
|
|
if count >= max then
|
|
CaveBot.gotoLabel(label2)
|
|
print("CaveBot[Tasker]: task completed: " .. storage.caveBotTasker.taskName)
|
|
return true
|
|
else
|
|
CaveBot.gotoLabel(label1)
|
|
print("CaveBot[Tasker]: task in progress, left: " .. max - count .. " " .. storage.caveBotTasker.taskName)
|
|
return true
|
|
end
|
|
|
|
|
|
elseif marker == 3 then -- reporting task
|
|
CaveBot.Conversation("hi", "report", "task")
|
|
delay(talkDelay*3)
|
|
|
|
resetTaskData()
|
|
print("CaveBot[Tasker]: task reported, done")
|
|
return true
|
|
end
|
|
|
|
end)
|
|
|
|
CaveBot.Editor.registerAction("tasker", "tasker", {
|
|
value=[[ There is 3 scenarios for this extension, as example we will use medusa:
|
|
|
|
1. start task,
|
|
parameters:
|
|
- scenario for extension: 1
|
|
- task name in gryzzly adams: medusae
|
|
- monster count: 500
|
|
- monster name to track: medusa
|
|
- optional, monster name 2:
|
|
2. check status,
|
|
to be used on refill to decide whether to go back or spawn or go give task back
|
|
parameters:
|
|
- scenario for extension: 2
|
|
- label if task in progress: skipTask
|
|
- label if task done: taskDone
|
|
3. report task,
|
|
parameters:
|
|
- scenario for extension: 3
|
|
|
|
Strong suggestion, almost mandatory - USE POS CHECK to verify position! this module will only check if there is ANY npc in range!
|
|
|
|
when begin remove all the text and leave just a single string of parameters
|
|
some examples:
|
|
|
|
2, skipReport, goReport
|
|
3
|
|
1, drakens, 500, draken warmaster, draken spellweaver
|
|
1, medusae, 500, medusa]],
|
|
title="Tasker",
|
|
multiline = true
|
|
})
|
|
end
|
|
|
|
local regex = "Loot of ([a-z])* ([a-z A-Z]*):"
|
|
local regex2 = "Loot of ([a-z A-Z]*):"
|
|
onTextMessage(function(mode, text)
|
|
-- if CaveBot.isOff() then return end
|
|
if not text:lower():find("loot of") then return end
|
|
if #regexMatch(text, regex) == 1 and #regexMatch(text, regex)[1] == 3 then
|
|
monster = regexMatch(text, regex)[1][3]
|
|
elseif #regexMatch(text, regex2) == 1 and #regexMatch(text, regex2)[1] == 2 then
|
|
monster = regexMatch(text, regex2)[1][2]
|
|
end
|
|
|
|
local m1 = storage.caveBotTasker.monster
|
|
local m2 = storage.caveBotTasker.monster2
|
|
|
|
if monster == m1 or monster == m2 and storage.caveBotTasker.count then
|
|
storage.caveBotTasker.count = storage.caveBotTasker.count + 1
|
|
end
|
|
end)
|