Compare commits

..

No commits in common. "master" and "2.3.6" have entirely different histories.

7 changed files with 174 additions and 90 deletions

View File

@ -1,6 +1,6 @@
Turn In
v2.3
by Sabindeus of Terenas
v2.1
by Sabindeus of Smolderthorn/Andre of Argent Dawn (Alliance)
DESCRIPTION
-------------
@ -30,4 +30,25 @@ COMMAND SUMMARY
Please send bug reports, questions or comments to sabin@sabindeus.com
CHANGE LOG
-------------
v2.1 - Quest selection logic rewrite thanks to Arcanemagus of Hyjal
v2.0 - Logic rewrite and added a real GUI for the new NPC DB. Updated for WoW 2.0.
v1.3 - Greedy mode now actually works properly... I think. More to come! :/
v1.2 - Added Saved Variables. Turn In status now persists. Turn In now selects active quests and gossip options as well as available quests. Greedy mode lets you select an option regardless of if the one you wanted is availble.
v1.1 - Fixed "bug" regarding Duke Nicholas Zverenhoff (and possibly other NPCs). Was more of a sloppy omission than a bug really.
v1.0a - Added toggle function
v1.0 - Initial Release
Special Thanks to Florrail and Makhno for beta testing like a pro!
Extra Special Thanks to Arcanemagus for his code input!
Please send bug reports, questions or comments to Sabin1936@mac.com

View File

@ -1,14 +1,22 @@
--[[
Turn-In Mod
version 2.3
version 2.1
Authored by Ian Friedman
Sabindeus of Terenas (Alliance)
Sabindeus of Smolderthorn (Alliance)
The repeatable quest turn in automating machine.
Thanks to Arcanemagus of Hyjal for extra bug fixes and coding input
]]
-- WOW Version detection
local function TI_IsRetail()
if WOW_PROJECT_ID == WOW_PROJECT_MAINLINE then
return true;
else
return false;
end
end
TI_VersionString = "2.0";
local TI_slashtable;
@ -37,6 +45,7 @@ local TI_GossipDefaults = {
banker = "Bank"
};
TI_FunctionList = {};
local TI_DefaultStatus = {
state = false,
@ -495,87 +504,84 @@ function TI_HandleGossipWindow(gorq)
local npcname = UnitName("npc");
if not issecretvalue(npcname) then
TI_AddNPCToTempList(npcname, ListEntry);
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(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");
-- 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_debug("Out of available/active quests, giving up ");
TI_ResetPointers();
return;
end
if(TI_availnumber > TotalOptions or TI_activenumber > TotalOptions) then
TI_debug("Out of available/active quests, giving up ");
TI_ResetPointers();
return;
end
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 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);
SAvQ(v2.questID);
return;
end
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 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);
SAvQ(v2.questID);
return;
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);
SAcQ(v2.questID);
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);
SAcQ(v2.questID);
return;
end
else
for i2,v2 in ipairs(GossipOptions) do
if (v2.name == current.name) then
TI_debug(i1.."-Gossip Match Found: "..current.name..", "..current.type);
if(v2.args) then
TI_FunctionList.g.gossip(v2.args);
else
TI_FunctionList.g.gossip(i2);
end
return;
end
else
for i2,v2 in ipairs(GossipOptions) do
if (v2.name == current.name) then
TI_debug(i1.."-Gossip Match Found: "..current.name..", "..current.type);
if(v2.args) then
TI_FunctionList.g.gossip(v2.args);
else
TI_FunctionList.g.gossip(i2);
end
return;
end
end
end
end
end
return;
else
TI_debug("npc in list, but not active");
end
return;
else
TI_debug("npc not in list");
TI_debug("npc in list, but not active");
end
else
TI_debug("npc not in list");
end
if(TI_status.usedefault == false) then
TI_debug("npc not in list, default set to off, returning.");
return;
@ -677,7 +683,19 @@ function TI_StripDescriptors(...)
return x;
end
function TI_TabulateGossipQuestUIInfo(gquis)
function TI_TabulateGossipOptions_Classic(...)
local x = {};
local arg = {...};
for i=1, #arg, 2 do
local temp = {};
temp.name = arg[i];
temp.type = arg[i+1];
table.insert(x, temp);
end
return x;
end
function TI_TabulateGossipQuestUIInfo_Retail(gquis)
local x = {};
for i,gqui in ipairs(gquis) do
@ -699,7 +717,7 @@ function TI_TabulateGossipQuestUIInfo(gquis)
return x;
end
function TI_TabulateGossipUIInfo(guis)
function TI_TabulateGossipUIInfo_Retail(guis)
local x = {};
table.sort(guis, GossipOptionSort);
for i,gui in ipairs(guis) do
@ -713,13 +731,16 @@ function TI_TabulateGossipUIInfo(guis)
temp.icon = gui.icon;
temp.gossipOptionID = gui.gossipOptionID
temp.orderIndex = gui.orderIndex
temp.args = gui.orderIndex
if (TI_IsRetail()) then
temp.args = gui.orderIndex
else
temp.args = i
end
table.insert(x, temp);
end
return x;
end
function TI_TabulateGossipAvailableQuests_Classic(gquis)
local x = {};
@ -764,8 +785,8 @@ function TI_TabulateGossipActiveQuests_Classic(gquis)
return x;
end
TI_FunctionList = {}
function TI_SetupFunctions()
-- set up functions by release type
if (TI_IsRetail()) then
TI_FunctionList = {
g = {
availquest = C_GossipInfo.SelectAvailableQuest,
@ -774,24 +795,38 @@ function TI_SetupFunctions()
getavailquests = C_GossipInfo.GetAvailableQuests,
getactivequests = C_GossipInfo.GetActiveQuests,
getoptions = C_GossipInfo.GetOptions,
tabulateOptions = TI_TabulateGossipUIInfo,
tabulateAvailable = TI_TabulateGossipQuestUIInfo_Retail,
tabulateActive = TI_TabulateGossipQuestUIInfo_Retail,
tabulateOptions = TI_TabulateGossipUIInfo_Retail,
},
q = {
activequest = SelectActiveQuest,
availquest = SelectAvailableQuest,
}
}
if QuestUtil.GetQuestIconOffer then
TI_FunctionList.g.tabulateAvailable = TI_TabulateGossipQuestUIInfo
TI_FunctionList.g.tabulateActive = TI_TabulateGossipQuestUIInfo
else
TI_FunctionList.g.tabulateAvailable = TI_TabulateGossipAvailableQuests_Classic
TI_FunctionList.g.tabulateActive = TI_TabulateGossipActiveQuests_Classic
end
};
else
TI_FunctionList = {
g = {
availquest = C_GossipInfo.SelectAvailableQuest,
activequest = C_GossipInfo.SelectActiveQuest,
gossip = SelectGossipOption,
getavailquests = C_GossipInfo.GetAvailableQuests,
getactivequests = C_GossipInfo.GetActiveQuests,
getoptions = C_GossipInfo.GetOptions,
tabulateAvailable = TI_TabulateGossipAvailableQuests_Classic,
tabulateActive = TI_TabulateGossipActiveQuests_Classic,
tabulateOptions = TI_TabulateGossipUIInfo_Retail,
},
q = {
activequest = SelectActiveQuest,
availquest = SelectAvailableQuest,
}
};
end
TI_SetupFunctions()
--[[this function stolen from WhisperCast by Sarris, whom I love dearly for his contribution to Paladins everywhere.
]]
function TI_copyTable( src )
local copy = {}
for k1,v1 in pairs(src) do

View File

@ -1,5 +1,5 @@
## Interface: 120100, 120000, 120001, 50503, 40402, 30405, 20505, 11508
## X-Compatible-With: 120100, 120000, 120001, 50503, 40402, 30405, 20505, 11508
## Interface: 110205,110207,120000
## X-Compatible-With: 110205,110207,120000
## Title: Turn In
## Notes: Automates the selection of quest and gossip options.
## SavedVariables: TI_status, TI_NPCDB, TI_NPCIndex

7
TurnIn_Cata.toc Executable file
View File

@ -0,0 +1,7 @@
## Interface: 40400
## X-Compatible-With: 40400
## Title: Turn In
## Notes: Automates the selection of quest and gossip options.
## SavedVariables: TI_status, TI_NPCDB, TI_NPCIndex
## Version: 2.2
TurnIn.xml

7
TurnIn_Classic.toc Executable file
View File

@ -0,0 +1,7 @@
## Interface: 11503
## X-Compatible-With: 11503
## Title: Turn In
## Notes: Automates the selection of quest and gossip options.
## SavedVariables: TI_status, TI_NPCDB, TI_NPCIndex
## Version: 2.2
TurnIn.xml

7
TurnIn_TBC.toc Executable file
View File

@ -0,0 +1,7 @@
## Interface: 30401
## X-Compatible-With: 30401
## Title: Turn In
## Notes: Automates the selection of quest and gossip options.
## SavedVariables: TI_status, TI_NPCDB, TI_NPCIndex
## Version: 2.2
TurnIn.xml

7
TurnIn_Wrath.toc Executable file
View File

@ -0,0 +1,7 @@
## Interface: 30403
## X-Compatible-With: 30403
## Title: Turn In
## Notes: Automates the selection of quest and gossip options.
## SavedVariables: TI_status, TI_NPCDB, TI_NPCIndex
## Version: 2.2
TurnIn.xml