mirror of
https://github.com/rivi-s/pfQuest.git
synced 2026-11-10 20:17:36 +00:00
405 lines
11 KiB
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
|