|
|
|
@@ -1,13 +1,11 @@ |
|
|
|
--[[ |
|
|
|
Turn-In Mod |
|
|
|
version 2.0 |
|
|
|
version 2.1 |
|
|
|
Authored by Ian Friedman |
|
|
|
Sabindeus of Smolderthorn/Andre of Argent Dawn (Alliance) |
|
|
|
Sabindeus of Smolderthorn (Alliance) |
|
|
|
The repeatable quest turn in automating machine. |
|
|
|
|
|
|
|
todo: |
|
|
|
make selection work for multiple active quests |
|
|
|
|
|
|
|
Thanks to Arcanemagus of Hyjal for extra bug fixes and coding input |
|
|
|
]] |
|
|
|
|
|
|
|
TI_VersionString = "2.0"; |
|
|
|
@@ -205,7 +203,6 @@ function TI_SlashCmdHandler(cmd) |
|
|
|
else |
|
|
|
TI_message("Turn In Off"); |
|
|
|
end |
|
|
|
TI_message(string.format("Option Number set to %d", TI_status.qnum)); |
|
|
|
end, |
|
|
|
window = function () |
|
|
|
TI_OptionsFrame:Show(); |
|
|
|
@@ -227,7 +224,7 @@ function TI_SlashCmdHandler(cmd) |
|
|
|
if(commands[cmdlist[1]]) then |
|
|
|
commands[cmdlist[1]](cmdlist[2], cmdlist[3], cmdlist[4]); |
|
|
|
else |
|
|
|
TI_message("Turn In 2.0 Help", "--------------", "/ti on - turns Turn In on", "/ti off - turns Turn In off", "/ti toggle - toggles Turn In on or off", "/ti window - shows the options window", "/ti recent - shows the recently visited NPCs"); |
|
|
|
TI_message("Turn In 2.1 Help", "--------------", "/ti on - turns Turn In on", "/ti off - turns Turn In off", "/ti toggle - toggles Turn In on or off", "/ti window - shows the options window", "/ti recent - shows the recently visited NPCs"); |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
@@ -387,8 +384,8 @@ function TI_HandleGossipWindow(gorq) |
|
|
|
local ActiveQuests; |
|
|
|
local GossipOptions; |
|
|
|
if(gorq == "g") then |
|
|
|
AvailableQuests = TI_TabulateGossipQuests(GetGossipAvailableQuests()); |
|
|
|
ActiveQuests = TI_TabulateGossipQuests(GetGossipActiveQuests()); |
|
|
|
AvailableQuests = TI_TabulateGossipAvailableQuests(GetGossipAvailableQuests()); |
|
|
|
ActiveQuests = TI_TabulateGossipActiveQuests(GetGossipActiveQuests()); |
|
|
|
GossipOptions = TI_TabulateGossipOptions(GetGossipOptions()); |
|
|
|
SAcQ = SelectGossipActiveQuest; |
|
|
|
SAvQ = SelectGossipAvailableQuest; |
|
|
|
@@ -409,6 +406,7 @@ function TI_HandleGossipWindow(gorq) |
|
|
|
x.gorq = gorq; |
|
|
|
x.args = i; |
|
|
|
x.type = "availquest"; |
|
|
|
x.icon = v.icon; |
|
|
|
x.state = false; |
|
|
|
table.insert(ListEntry, x); |
|
|
|
end |
|
|
|
@@ -418,6 +416,7 @@ function TI_HandleGossipWindow(gorq) |
|
|
|
x.gorq = gorq; |
|
|
|
x.args = i; |
|
|
|
x.type = "activequest"; |
|
|
|
x.icon = v.icon; |
|
|
|
x.state = false; |
|
|
|
table.insert(ListEntry, x); |
|
|
|
end |
|
|
|
@@ -439,54 +438,71 @@ function TI_HandleGossipWindow(gorq) |
|
|
|
return; |
|
|
|
end |
|
|
|
|
|
|
|
local name = UnitName("npc"); |
|
|
|
TI_AddNPCToTempList(name, ListEntry); |
|
|
|
|
|
|
|
if(TI_status.autoadd and (not TI_NPCDB[name])) then |
|
|
|
TI_debug("autoadd on, adding this NPC", TI_status.autoadd, TI_NPCDB[name]); |
|
|
|
TI_AddNPCToList(ListEntry, name); |
|
|
|
local npcname = UnitName("npc"); |
|
|
|
TI_AddNPCToTempList(npcname, ListEntry); |
|
|
|
|
|
|
|
if(TI_status.autoadd and (not TI_NPCDB[npcname])) then |
|
|
|
TI_debug("autoadd on, adding this NPC", TI_status.autoadd, TI_NPCDB[npcname]); |
|
|
|
TI_AddNPCToList(ListEntry, npcname); |
|
|
|
end |
|
|
|
|
|
|
|
-- If a NPC is in the Database but a new dialog option has appeared (new daily/completed quest) then add it to the DB |
|
|
|
if (TI_NPCDB[npcname]) then |
|
|
|
for k1, v1 in ipairs(ListEntry) do |
|
|
|
local found = false; |
|
|
|
for k2, v2 in ipairs(TI_NPCDB[npcname]) do |
|
|
|
if (v2.type == v1.type and v2.name == v1.name) then |
|
|
|
found = true; |
|
|
|
end |
|
|
|
end |
|
|
|
if (not found) then |
|
|
|
table.insert(TI_NPCDB[npcname], v1) |
|
|
|
TI_PopulateOptions("npclist updated"); |
|
|
|
end |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
if(TI_availnumber > TotalOptions or TI_activenumber > TotalOptions) then |
|
|
|
TI_ResetPointers(); |
|
|
|
return; |
|
|
|
end |
|
|
|
|
|
|
|
--Legacy shit here |
|
|
|
--[[ |
|
|
|
if(TI_status.qnum ~= 0 and TI_status.qnum<TotalOptions) then |
|
|
|
if(TI_status.qnum <= #AvailableQuests) then |
|
|
|
SAvQ(TI_status.qnum); |
|
|
|
return; |
|
|
|
elseif(TI_status.qnum <= #AvailableQuests+#ActiveQuests) then |
|
|
|
SAcQ(TI_status.qnum-AvailableQuests.n); |
|
|
|
return; |
|
|
|
elseif(TI_status.qnum <= #AvailableQuests+#ActiveQuests+#GossipOptions) then |
|
|
|
SelectGossipOption(TI_status.qnum-#AvailableQuests-#ActiveQuests); |
|
|
|
return; |
|
|
|
end |
|
|
|
end |
|
|
|
]]-- |
|
|
|
|
|
|
|
local npcname = UnitName("npc"); |
|
|
|
TI_debug(npcname); |
|
|
|
if(TI_NPCDB[npcname]) then |
|
|
|
local thisnpc = TI_NPCDB[npcname]; |
|
|
|
if(thisnpc.state) then |
|
|
|
TI_debug("npc is active, using his options"); |
|
|
|
for i,current in ipairs(thisnpc) do |
|
|
|
TI_debug(i); |
|
|
|
if(current.state) then |
|
|
|
if (TI_specnum == 0 or i > TI_specnum) then |
|
|
|
TI_specnum = i; |
|
|
|
TI_debug("Setting specnum to "..TI_specnum.." nothing under that will be picked"); |
|
|
|
local flist = TI_FunctionList[current.gorq]; |
|
|
|
if(flist[current.type]) then |
|
|
|
flist[current.type](current.args); |
|
|
|
else |
|
|
|
flist["default"](current.args); |
|
|
|
for i1,current in ipairs(thisnpc) do |
|
|
|
if (current.state == true) then |
|
|
|
TI_debug("Current Quest: "..current.name); |
|
|
|
if (TI_specnum == 0 or i1 > TI_specnum) then |
|
|
|
TI_specnum = i1; |
|
|
|
if (current.type == "availquest") then |
|
|
|
for i2,v2 in ipairs(AvailableQuests) do |
|
|
|
if (v2.name == current.name) then |
|
|
|
TI_debug(i1.."-Available Match Found: "..current.name); |
|
|
|
TI_FunctionList[current.gorq]["availquest"](i2); |
|
|
|
return; |
|
|
|
end |
|
|
|
end |
|
|
|
elseif (current.type == "activequest") then |
|
|
|
for i2,v2 in ipairs(ActiveQuests) do |
|
|
|
if (v2.name == current.name) then |
|
|
|
TI_debug(i1.."-Active Match Found: "..current.name..", "..current.type); |
|
|
|
TI_FunctionList[current.gorq]["activequest"](i2); |
|
|
|
return; |
|
|
|
end |
|
|
|
end |
|
|
|
elseif (current.type == "gossip") then |
|
|
|
for i2,v2 in ipairs(GossipOptions) do |
|
|
|
if (v2.name == current.name) then |
|
|
|
SelectGossipOption(i2); |
|
|
|
return; |
|
|
|
end |
|
|
|
end |
|
|
|
end |
|
|
|
return; |
|
|
|
end |
|
|
|
end |
|
|
|
end |
|
|
|
@@ -529,16 +545,6 @@ function TI_HandleGossipWindow(gorq) |
|
|
|
end |
|
|
|
|
|
|
|
function TI_AddNPCToList(OptList, npcname, confirminquestion) |
|
|
|
--~ NPClist = { |
|
|
|
--~ "Joe" = { |
|
|
|
--~ 0 = { |
|
|
|
--~ name = "Option 1" |
|
|
|
--~ accessor = SelectGossipOption |
|
|
|
--~ args = 0 |
|
|
|
--~ } |
|
|
|
--~ } |
|
|
|
--~ } |
|
|
|
|
|
|
|
if (npcname == nil) then |
|
|
|
npcname = UnitName("npc"); |
|
|
|
end |
|
|
|
@@ -607,19 +613,47 @@ function TI_TabulateGossipOptions(...) |
|
|
|
return x; |
|
|
|
end |
|
|
|
|
|
|
|
function TI_TabulateGossipQuests(...) |
|
|
|
function TI_TabulateGossipAvailableQuests(...) |
|
|
|
local x = {}; |
|
|
|
local arg = {...}; |
|
|
|
for i=1, #arg, 3 do |
|
|
|
|
|
|
|
for i=1, select("#", ...), 5 do |
|
|
|
local temp = {}; |
|
|
|
temp.name = arg[i]; |
|
|
|
temp.type = arg[i+1]; |
|
|
|
temp.isLowLevel = arg[i+2] |
|
|
|
temp.name = select(i, ...); |
|
|
|
|
|
|
|
isTrivial = select(i+2, ...); |
|
|
|
isDaily = select(i+3, ...); |
|
|
|
isRepeatable = select(i+4, ...); |
|
|
|
if ( isDaily ) then |
|
|
|
temp.icon = "Interface\\GossipFrame\\DailyQuestIcon"; |
|
|
|
elseif ( isRepeatable ) then |
|
|
|
temp.icon = "Interface\\GossipFrame\\DailyActiveQuestIcon"; |
|
|
|
else |
|
|
|
temp.icon = "Interface\\GossipFrame\\AvailableQuestIcon"; |
|
|
|
end |
|
|
|
|
|
|
|
table.insert(x, temp); |
|
|
|
end |
|
|
|
return x; |
|
|
|
end |
|
|
|
|
|
|
|
function TI_TabulateGossipActiveQuests(...) |
|
|
|
local x = {}; |
|
|
|
|
|
|
|
for i=1, select("#", ...), 4 do |
|
|
|
local temp = {}; |
|
|
|
temp.name = select(i, ...); |
|
|
|
|
|
|
|
isComplete = select(i+3, ...); |
|
|
|
if(isComplete) then |
|
|
|
temp.icon = "Interface\\GossipFrame\\ActiveQuestIcon"; |
|
|
|
else |
|
|
|
temp.icon = "Interface\\GossipFrame\\IncompleteQuestIcon"; |
|
|
|
end |
|
|
|
|
|
|
|
table.insert(x, temp); |
|
|
|
end |
|
|
|
return x; |
|
|
|
end |
|
|
|
|
|
|
|
--[[this function stolen from WhisperCast by Sarris, whom I love dearly for his contribution to Paladins everywhere. |
|
|
|
]] |