Files
pfQuest/slashcmd.lua

405 lines
11 KiB
Lua

-- multi api compat
local compat = pfQuestCompat
-- Performance: cache frequently-used globals
local pairs = pairs
local concat, insert, getn = table.concat, table.insert, table.getn
local type = type
local format = string.format
SLASH_PFDB1, SLASH_PFDB2, SLASH_PFDB3, SLASH_PFDB4 = "/db", "/shagu", "/pfquest", "/pfdb"
SlashCmdList["PFDB"] = function(input, editbox)
local params = {}
local meta = { ["addon"] = "PFDB" }
if input == "" or input == nil then
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffccpf|cffffffffQuest (v" .. pfQuestConfig.version .. "):")
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffcc/db|cffffffff lock |cffcccccc - " .. pfQuest_Loc["Lock map tracker"])
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffcc/db|cffffffff tracker |cffcccccc - " .. pfQuest_Loc["Show map tracker"])
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffcc/db|cffffffff journal |cffcccccc - " .. pfQuest_Loc["Show quest journal"])
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffcc/db|cffffffff arrow |cffcccccc - " .. pfQuest_Loc["Show quest arrow"])
DEFAULT_CHAT_FRAME:AddMessage(
"|cff33ffcc/db|cffffffff show |cffcccccc - " .. pfQuest_Loc["Show database interface"]
)
DEFAULT_CHAT_FRAME:AddMessage(
"|cff33ffcc/db|cffffffff config |cffcccccc - " .. pfQuest_Loc["Show configuration interface"]
)
DEFAULT_CHAT_FRAME:AddMessage(
"|cff33ffcc/db|cffffffff locale |cffcccccc - " .. pfQuest_Loc["Display addon locales"]
)
DEFAULT_CHAT_FRAME:AddMessage(
"|cff33ffcc/db|cffffffff track <list>|cffcccccc - " .. pfQuest_Loc["Show available tracking lists"]
)
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffcc/db|cffffffff unit <unit> |cffcccccc - " .. pfQuest_Loc["Search unit"])
DEFAULT_CHAT_FRAME:AddMessage(
"|cff33ffcc/db|cffffffff object <gameobject> |cffcccccc - " .. pfQuest_Loc["Search object"]
)
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffcc/db|cffffffff item <item> |cffcccccc - " .. pfQuest_Loc["Search loot"])
DEFAULT_CHAT_FRAME:AddMessage(
"|cff33ffcc/db|cffffffff vendor <item> |cffcccccc - " .. pfQuest_Loc["Search item vendors"]
)
DEFAULT_CHAT_FRAME:AddMessage(
"|cff33ffcc/db|cffffffff quest <questname> |cffcccccc - " .. pfQuest_Loc["Show specific quest"]
)
DEFAULT_CHAT_FRAME:AddMessage(
"|cff33ffcc/db|cffffffff quests |cffcccccc - " .. pfQuest_Loc["Show all quests on map"]
)
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffcc/db|cffffffff clean |cffcccccc - " .. pfQuest_Loc["Clean Map"])
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffcc/db|cffffffff reset |cffcccccc - " .. pfQuest_Loc["Reset Map"])
DEFAULT_CHAT_FRAME:AddMessage(
"|cff33ffcc/db|cffffffff scan |cffcccccc - " .. pfQuest_Loc["Scan the server for custom items"]
)
DEFAULT_CHAT_FRAME:AddMessage(
"|cff33ffcc/db|cffffffff query |cffcccccc - " .. pfQuest_Loc["Query the server for completed quests"]
)
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffcc/db|cffffffff version |cffcccccc - Show loaded pfQuest versions")
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffcc/db|cffffffff api |cffcccccc - Show optional API support")
return
end
local commandlist = {}
local command
for command in compat.gfind(input, "[^ ]+") do
insert(commandlist, command)
end
local arg1 = commandlist[1]
-- handle whitespace mob- and item names correctly
-- Use table.concat to avoid string concatenation garbage
local arg2parts = {}
for i = 2, getn(commandlist) do
arg2parts[i - 1] = commandlist[i]
end
local arg2 = concat(arg2parts, " ")
-- argument: version
if arg1 == "version" then
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffccpf|cffffffffQuest base: |cff66ccffv" .. tostring(pfQuestConfig.version or "unknown") .. "|r")
if pfDB and pfDB["quests"] and pfDB["quests"]["data-turtle"] then
local turtleVersion = GetAddOnMetadata("pfQuest-turtle", "Version") or "unknown"
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffccpf|cffffffffQuest Turtle: |cff66ccffv" .. tostring(turtleVersion) .. "|r")
end
return
end
-- argument: api
if arg1 == "api" then
local optional = pfQuestCompat.optional or {}
DEFAULT_CHAT_FRAME:AddMessage(
"|cff33ffccpf|cffffffffQuest optional APIs: ClassicAPI=" .. tostring(optional.classicapi and true or false)
.. " (nameplates=" .. tostring(optional.nameplates and true or false) .. ")"
.. ", HearthDB=" .. tostring(optional.hearthdb and true or false)
)
return
end
-- argument: debug
if arg1 == "debug" then
pfQuest_config.debug = not pfQuest_config.debug
DEFAULT_CHAT_FRAME:AddMessage(
"|cff33ffccpf|cffffffffQuest Debug Mode: " .. (pfQuest_config.debug and "|cff33ff33ON" or "|cffff3333OFF")
)
pfQuest:Debug("Debug Mode Changed")
return
end
-- argument: item
if arg1 == "item" then
local maps = pfDatabase:SearchItem(arg2, meta, "LOWER")
pfMap:ShowMapID(pfDatabase:GetBestMap(maps))
return
end
-- argument: vendor
if arg1 == "vendor" then
local maps = pfDatabase:SearchVendor(arg2, meta, "LOWER")
pfMap:ShowMapID(pfDatabase:GetBestMap(maps))
return
end
-- argument: unit
if arg1 == "unit" then
local maps = pfDatabase:SearchMob(arg2, meta, "LOWER")
pfMap:ShowMapID(pfDatabase:GetBestMap(maps))
return
end
-- argument: object
if arg1 == "object" then
local maps = pfDatabase:SearchObject(arg2, meta, "LOWER")
pfMap:ShowMapID(pfDatabase:GetBestMap(maps))
return
end
-- argument: quest
if arg1 == "quest" then
local maps = pfDatabase:SearchQuest(arg2, meta, "LOWER")
pfMap:ShowMapID(pfDatabase:GetBestMap(maps))
return
end
-- argument: quests
if arg1 == "quests" then
local maps = pfDatabase:SearchQuests(meta)
pfMap.queue_update = GetTime()
return
end
-- argument: track
if arg1 == "track" or arg1 == "meta" then
local list = commandlist[2]
-- show available lists
if not list or list == "" then
local available = nil
for list in pairs(pfDB["meta"]) do
available = (available and available .. ", " or "") .. '"|cff33ffcc' .. list .. '|r"'
end
DEFAULT_CHAT_FRAME:AddMessage(
string.format(
pfQuest_Loc['Available tracking targets are: %s. Or type "|cff33ffcc/db track clean|r" to untrack all.'],
available
)
)
return
end
-- clean all tracking results
if commandlist[2] == "clean" then
for list in pairs(pfDB["meta"]) do
pfDatabase:TrackMeta(list, false)
end
return
end
-- load arguments into state
local state = {
min = commandlist[3],
max = commandlist[4],
faction = commandlist[3],
}
-- read a registered profession skill for automatic level filtering
local autoSkills = pfDatabase.metaAutoSkills or { mines = 186, herbs = 182 }
if autoSkills[list] and commandlist[3] == "auto" then
state.max = pfDatabase:GetPlayerSkill(autoSkills[list]) or 0
state.min = state.max - 100
end
-- clean specific list
if commandlist[3] == "clean" then
state = nil
end
-- perform tracking
local maps = pfDatabase:TrackMeta(list, state)
pfMap:ShowMapID(pfDatabase:GetBestMap(maps))
return
end
-- warn about deprecated arguments
local deprecated = {
["chests"] = true,
["taxi"] = true,
["flights"] = true,
["rares"] = true,
["mines"] = true,
["herbs"] = true,
}
if deprecated[arg1] then
DEFAULT_CHAT_FRAME:AddMessage(
string.format(
pfQuest_Loc['|cffffcc00WARNING:|r The command "|cff33ffcc/db %s|r" is deprecated and will be removed soon. Please use the "|cff33ffcc/db track %s|r" instead to achieve the same functionality.'],
arg1,
arg1
)
)
end
-- argument: chests (deprecated)
if arg1 == "chests" then
local state = true
if commandlist[2] == "clean" then
state = nil
end
local maps = pfDatabase:TrackMeta("chests", state)
pfMap:ShowMapID(pfDatabase:GetBestMap(maps))
return
end
-- argument: taxi (deprecated)
if arg1 == "flights" or arg1 == "taxi" then
local state = {
faction = commandlist[2],
}
if commandlist[2] == "clean" then
state = nil
end
local maps = pfDatabase:TrackMeta("flight", state)
pfMap:ShowMapID(pfDatabase:GetBestMap(maps))
return
end
-- argument: rares (deprecated)
if arg1 == "rares" then
local state = {
min = commandlist[2],
max = commandlist[3],
}
if commandlist[2] == "clean" then
state = nil
end
local maps = pfDatabase:TrackMeta("rares", state)
pfMap:ShowMapID(pfDatabase:GetBestMap(maps))
return
end
-- argument: mines (deprecated)
if arg1 == "mines" then
local state = {
min = commandlist[2],
max = commandlist[3],
}
if arg2 == "auto" then
state.max = pfDatabase:GetPlayerSkill(186) or 0
state.min = state.max - 100
end
if commandlist[2] == "clean" then
state = nil
end
state = commandlist[2] == "clean" and nil or state
local maps = pfDatabase:TrackMeta("mines", state)
pfMap:ShowMapID(pfDatabase:GetBestMap(maps))
return
end
-- argument: herbs (deprecated)
if arg1 == "herbs" then
local state = {
min = commandlist[2],
max = commandlist[3],
}
if arg2 == "auto" then
state.max = pfDatabase:GetPlayerSkill(182) or 0
state.min = state.max - 100
end
if commandlist[2] == "clean" then
state = nil
end
state = commandlist[2] == "clean" and nil or state
local maps = pfDatabase:TrackMeta("herbs", state)
pfMap:ShowMapID(pfDatabase:GetBestMap(maps))
return
end
-- argument: clean
if arg1 == "clean" then
pfMap:DeleteNode("PFDB")
pfMap:UpdateNodes()
return
end
-- argument: reset
if arg1 == "reset" then
pfQuest:ResetAll()
return
end
-- argument: show
if arg1 == "show" then
if pfBrowser then
pfBrowser:Show()
end
return
end
-- argument: tracker
if arg1 == "tracker" then
if pfQuest.tracker then
pfQuest.tracker:Show()
end
return
end
-- argument: lock
if arg1 == "lock" then
pfQuest_config.lock = not pfQuest_config.lock
DEFAULT_CHAT_FRAME:AddMessage(
"|cff33ffccpf|cffffffffQuest Tracker: " .. (pfQuest_config.lock and "Locked" or "Unlocked")
)
return
end
-- argument: journal
if arg1 == "journal" then
if pfJournal then
pfJournal:Show()
end
return
end
-- argument: arrow
if arg1 == "arrow" then
if pfQuest_config["arrow"] == "1" then
pfQuest_config["arrow"] = "0"
pfQuest.route.arrow:Hide()
else
pfQuest_config["arrow"] = "1"
end
return
end
-- argument: show
if arg1 == "config" then
if pfQuestConfig then
pfQuestConfig:Show()
end
return
end
-- argument: locale
if arg1 == "locale" then
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffcc" .. pfQuest_Loc["Locales"] .. "|r:" .. pfDatabase.dbstring)
return
end
-- argument: scan
if arg1 == "scan" then
pfDatabase:ScanServer()
return
end
-- argument: query
if arg1 == "query" then
pfDatabase:QueryServer()
return
end
-- argument: <text>
if type(arg1) == "string" then
if pfBrowser then
pfBrowser:Show()
pfBrowser.input:SetText((string.gsub(string.format("%s %s", arg1, arg2), "^%s*(.-)%s*$", "%1")))
end
return
end
end