Compare commits

..

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

7 changed files with 389 additions and 168 deletions

1
.gitignore vendored Executable file → Normal file
View File

@ -0,0 +1 @@
.sync/

View File

@ -1,6 +1,6 @@
Turn In Turn In
v2.3 v2.1
by Sabindeus of Terenas by Sabindeus of Smolderthorn/Andre of Argent Dawn (Alliance)
DESCRIPTION DESCRIPTION
------------- -------------
@ -29,5 +29,26 @@ COMMAND SUMMARY
/turnin recent - Shows the recently visited NPCs window /turnin recent - Shows the recently visited NPCs window
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
Please send bug reports, questions or comments to sabin@sabindeus.com
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 Turn-In Mod
version 2.3 version 2.1
Authored by Ian Friedman Authored by Ian Friedman
Sabindeus of Terenas (Alliance) Sabindeus of Smolderthorn (Alliance)
The repeatable quest turn in automating machine. The repeatable quest turn in automating machine.
Thanks to Arcanemagus of Hyjal for extra bug fixes and coding input 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"; TI_VersionString = "2.0";
local TI_slashtable; local TI_slashtable;
@ -37,6 +45,7 @@ local TI_GossipDefaults = {
banker = "Bank" banker = "Bank"
}; };
TI_FunctionList = {};
local TI_DefaultStatus = { local TI_DefaultStatus = {
state = false, state = false,
@ -111,15 +120,7 @@ end
function TI_debug(...) function TI_debug(...)
if(TI_status.debugstate) then if(TI_status.debugstate) then
C_AddOns.LoadAddOn("Blizzard_DebugTools") TI_message(...)
local x = {...};
for k,v in pairs(x) do
if type(v) == "table" and DevTools_Dump then
DevTools_Dump(v)
else
DEFAULT_CHAT_FRAME:AddMessage(tostring(v));
end
end
end end
end end
@ -193,7 +194,6 @@ function TI_LoadEvents()
end end
function TI_ResetPointers() function TI_ResetPointers()
TI_debug("resetting pointers")
TI_activenumber = 1; TI_activenumber = 1;
TI_availnumber = 1; TI_availnumber = 1;
TI_specnum = 0; TI_specnum = 0;
@ -310,7 +310,7 @@ function TI_OnEvent(self, event, ...)
TI_LoadEvents(); TI_LoadEvents();
end end
end end
if(TI_status.state and not IsShiftKeyDown()) then if(TI_status.state and not IsShiftKeyDown()) then
if(event == "QUEST_GREETING") then if(event == "QUEST_GREETING") then
TI_debug("Quest Greeting"); TI_debug("Quest Greeting");
TI_lastquestframe = "greeting"; TI_lastquestframe = "greeting";
@ -412,7 +412,6 @@ function TI_CompleteQuest()
TI_ResetPointers(); TI_ResetPointers();
else else
TI_debug("quest is not completable, declining"); TI_debug("quest is not completable, declining");
TI_availnumber = TI_availnumber + 1;
QuestDetailDeclineButton_OnClick(); QuestDetailDeclineButton_OnClick();
end end
end end
@ -421,10 +420,11 @@ function TI_GetQuests(type)
local numQuests = (getglobal("GetNum"..type.."Quests"))(); local numQuests = (getglobal("GetNum"..type.."Quests"))();
local qfn = getglobal("Get"..type.."Title"); local qfn = getglobal("Get"..type.."Title");
local ret = {}; local ret = {};
local qname;
local i=1; local i=1;
for i=1,numQuests do for i=1,numQuests do
local qname, isComplete = qfn(i); qname = qfn(i);
ret[i] = {name=qname, questID=i, isComplete=isComplete}; ret[i] = {name=qname};
end end
return ret; return ret;
end end
@ -435,7 +435,6 @@ function TI_HandleGossipWindow(gorq)
local AvailableQuests; local AvailableQuests;
local ActiveQuests; local ActiveQuests;
local GossipOptions; local GossipOptions;
TI_debug(gorq);
if(gorq == "g") then if(gorq == "g") then
AvailableQuests = TI_FunctionList.g.tabulateAvailable(TI_FunctionList.g.getavailquests()); AvailableQuests = TI_FunctionList.g.tabulateAvailable(TI_FunctionList.g.getavailquests());
ActiveQuests = TI_FunctionList.g.tabulateActive(TI_FunctionList.g.getactivequests()); ActiveQuests = TI_FunctionList.g.tabulateActive(TI_FunctionList.g.getactivequests());
@ -475,18 +474,14 @@ function TI_HandleGossipWindow(gorq)
local x={}; local x={};
x.name = v.name; x.name = v.name;
x.gorq = gorq; x.gorq = gorq;
if x.orderIndex then x.args = i;
x.args = v.orderIndex;
else
x.args = i;
end
x.type = v.type; x.type = v.type;
x.icon = v.icon; x.icon = v.icon;
x.state = false; x.state = false;
table.insert(ListEntry, x); table.insert(ListEntry, x);
end end
ListEntry.state = false; ListEntry.state = false;
local TotalOptions = #AvailableQuests+#ActiveQuests+#GossipOptions; local TotalOptions = #AvailableQuests+#ActiveQuests+#GossipOptions;
if(TotalOptions < 1) then if(TotalOptions < 1) then
@ -495,87 +490,79 @@ function TI_HandleGossipWindow(gorq)
local npcname = UnitName("npc"); 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
if(TI_status.autoadd and (not TI_NPCDB[npcname])) then TI_debug("autoadd on, adding this NPC", TI_status.autoadd, TI_NPCDB[npcname]);
TI_debug("autoadd on, adding this NPC", TI_status.autoadd, TI_NPCDB[npcname]); TI_AddNPCToList(ListEntry, npcname);
TI_AddNPCToList(ListEntry, npcname); end
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 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
if (TI_NPCDB[npcname]) then for k1, v1 in ipairs(ListEntry) do
for k1, v1 in ipairs(ListEntry) do local found = false;
local found = false; for k2, v2 in ipairs(TI_NPCDB[npcname]) do
for k2, v2 in ipairs(TI_NPCDB[npcname]) do if (v2.type == v1.type and v2.name == v1.name) then
if (v2.type == v1.type and v2.name == v1.name) then found = true;
found = true;
end
end
if (not found) then
table.insert(TI_NPCDB[npcname], v1)
TI_PopulateOptions("npclist updated");
end end
end end
if (not found) then
table.insert(TI_NPCDB[npcname], v1)
TI_PopulateOptions("npclist updated");
end
end end
end
if(TI_availnumber > TotalOptions or TI_activenumber > TotalOptions) then
TI_debug("Out of available/active quests, giving up "); if(TI_availnumber > TotalOptions or TI_activenumber > TotalOptions) then
TI_ResetPointers(); TI_ResetPointers();
return; return;
end end
TI_debug(npcname); TI_debug(npcname);
if(TI_NPCDB[npcname]) then if(TI_NPCDB[npcname]) then
local thisnpc = TI_NPCDB[npcname]; local thisnpc = TI_NPCDB[npcname];
if(thisnpc.state) then if(thisnpc.state) then
TI_debug("npc is active, using his options"); TI_debug("npc is active, using his options");
for i1,current in ipairs(thisnpc) do for i1,current in ipairs(thisnpc) do
if (current.state == true) then if (current.state == true) then
TI_debug("Current Quest: "..current.name); TI_debug("Current Quest: "..current.name);
if (TI_specnum == 0 or i1 > TI_specnum) then if (TI_specnum == 0 or i1 > TI_specnum) then
TI_specnum = i1; TI_specnum = i1;
if (current.type == "availquest") then if (current.type == "availquest") then
for i2,v2 in ipairs(AvailableQuests) do for i2,v2 in ipairs(AvailableQuests) do
if (v2.name == current.name) then if (v2.name == current.name) then
TI_debug(i1.."-Available Match Found: "..current.name); TI_debug(i1.."-Available Match Found: "..current.name);
SAvQ(v2.questID); SAvQ(v2.questID);
return; return;
end
end end
elseif (current.type == "activequest") then end
for i2,v2 in ipairs(ActiveQuests) do elseif (current.type == "activequest") then
if (v2.name == current.name) then for i2,v2 in ipairs(ActiveQuests) do
TI_debug(i1.."-Active Match Found: "..current.name..", "..current.type); if (v2.name == current.name) then
SAcQ(v2.questID); TI_debug(i1.."-Active Match Found: "..current.name..", "..current.type);
return; SAcQ(v2.questID);
end return;
end end
else end
for i2,v2 in ipairs(GossipOptions) do else
if (v2.name == current.name) then for i2,v2 in ipairs(GossipOptions) do
TI_debug(i1.."-Gossip Match Found: "..current.name..", "..current.type); if (v2.name == current.name) then
if(v2.args) then TI_debug(i1.."-Gossip Match Found: "..current.name..", "..current.type);
TI_FunctionList.g.gossip(v2.args); TI_FunctionList.g.gossip(i2);
else return;
TI_FunctionList.g.gossip(i2);
end
return;
end
end end
end end
end end
end end
end end
return;
else
TI_debug("npc in list, but not active");
end end
return;
else else
TI_debug("npc not in list"); TI_debug("npc in list, but not active");
end end
else
TI_debug("npc not in list");
end end
if(TI_status.usedefault == false) then if(TI_status.usedefault == false) then
TI_debug("npc not in list, default set to off, returning."); TI_debug("npc not in list, default set to off, returning.");
return; return;
@ -586,6 +573,7 @@ function TI_HandleGossipWindow(gorq)
if(current.type == "availquest" and #AvailableQuests > 0 and TI_availnumber <= #AvailableQuests) then if(current.type == "availquest" and #AvailableQuests > 0 and TI_availnumber <= #AvailableQuests) then
SAvQ(AvailableQuests[TI_availnumber].questID); SAvQ(AvailableQuests[TI_availnumber].questID);
TI_debug("Selecting Available Quest ".. TI_availnumber); TI_debug("Selecting Available Quest ".. TI_availnumber);
TI_ResetPointers();
return; return;
elseif(current.type == "activequest" and #ActiveQuests > 0 and TI_activenumber <= #ActiveQuests) then elseif(current.type == "activequest" and #ActiveQuests > 0 and TI_activenumber <= #ActiveQuests) then
while TI_activenumber <= #ActiveQuests do while TI_activenumber <= #ActiveQuests do
@ -603,8 +591,7 @@ function TI_HandleGossipWindow(gorq)
for j,val in ipairs(GossipOptions) do for j,val in ipairs(GossipOptions) do
if(val.type == current.type) then if(val.type == current.type) then
TI_ResetPointers(); TI_ResetPointers();
TI_debug("Selecting Gossip Option "..j) TI_FunctionList.g.gossip(j);
TI_FunctionList.g.gossip(val.args);
return; return;
end end
end end
@ -677,7 +664,19 @@ function TI_StripDescriptors(...)
return x; return x;
end 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 = {}; local x = {};
for i,gqui in ipairs(gquis) do for i,gqui in ipairs(gquis) do
@ -699,9 +698,9 @@ function TI_TabulateGossipQuestUIInfo(gquis)
return x; return x;
end end
function TI_TabulateGossipUIInfo(guis) function TI_TabulateGossipUIInfo_Retail(guis)
local x = {}; local x = {};
table.sort(guis, GossipOptionSort);
for i,gui in ipairs(guis) do for i,gui in ipairs(guis) do
local temp = {}; local temp = {};
temp.name = gui.name; temp.name = gui.name;
@ -713,85 +712,105 @@ function TI_TabulateGossipUIInfo(guis)
temp.icon = gui.icon; temp.icon = gui.icon;
temp.gossipOptionID = gui.gossipOptionID temp.gossipOptionID = gui.gossipOptionID
temp.orderIndex = gui.orderIndex temp.orderIndex = gui.orderIndex
temp.args = gui.orderIndex
table.insert(x, temp); table.insert(x, temp);
end end
return x; return x;
end end
function TI_TabulateGossipAvailableQuests_Classic(...)
function TI_TabulateGossipAvailableQuests_Classic(gquis)
local x = {}; local x = {};
for i,gqui in ipairs(gquis) do for i=1, select("#", ...), 7 do
local temp = {}; local temp = {};
temp.name = gqui.title; temp.name = select(i, ...);
if ( gqui.repeatable ) then local isTrivial = select(i+2, ...);
local isDaily = select(i+3, ...);
local isRepeatable = select(i+4, ...);
local isLegendary = select(i+5, ...);
local isIgnored = select(i+6, ...);
if ( isDaily ) then
temp.icon = "Interface\\GossipFrame\\DailyQuestIcon"; temp.icon = "Interface\\GossipFrame\\DailyQuestIcon";
elseif ( gqui.isLegendary ) then elseif ( isRepeatable ) then
temp.icon = "Interface\\GossipFrame\\DailyActiveQuestIcon";
elseif ( isLegendary ) then
temp.icon = "Interface\\GossipFrame\\AvailableLegendaryQuestIcon"; temp.icon = "Interface\\GossipFrame\\AvailableLegendaryQuestIcon";
else else
temp.icon = "Interface\\GossipFrame\\AvailableQuestIcon"; temp.icon = "Interface\\GossipFrame\\AvailableQuestIcon";
end end
temp.questID = gqui.questID;
temp.isComplete = gqui.isComplete;
table.insert(x, temp); table.insert(x, temp);
end end
return x; return x;
end end
function TI_TabulateGossipActiveQuests_Classic(gquis) function TI_TabulateGossipActiveQuests_Classic(...)
local x = {}; local x = {};
for i,gqui in ipairs(gquis) do for i=1, select("#", ...), 6 do
local temp = {}; local temp = {};
temp.name = gqui.title; temp.name = select(i, ...);
if ( gqui.repeatable ) then local isComplete = select(i+3, ...);
temp.icon = "Interface\\GossipFrame\\DailyQuestIcon"; temp.isComplete = isComplete;
elseif ( gqui.isLegendary ) then local isLegendary = select(i+4, ...);
temp.icon = "Interface\\GossipFrame\\AvailableLegendaryQuestIcon"; if(isComplete) then
if(isLegendary) then
temp.icon = "Interface\\GossipFrame\\ActiveLegendaryQuestIcon";
else
temp.icon = "Interface\\GossipFrame\\ActiveQuestIcon";
end
else else
temp.icon = "Interface\\GossipFrame\\AvailableQuestIcon"; temp.icon = "Interface\\GossipFrame\\IncompleteQuestIcon";
end end
temp.questID = gqui.questID;
temp.isComplete = gqui.isComplete;
table.insert(x, temp); table.insert(x, temp);
end end
return x; return x;
end end
TI_FunctionList = {} -- set up functions by release type
function TI_SetupFunctions() if (TI_IsRetail()) then
TI_FunctionList = { TI_FunctionList = {
g = { g = {
availquest = C_GossipInfo.SelectAvailableQuest, availquest = C_GossipInfo.SelectAvailableQuest,
activequest = C_GossipInfo.SelectActiveQuest, activequest = C_GossipInfo.SelectActiveQuest,
gossip = C_GossipInfo.SelectOptionByIndex, gossip = SelectGossipOption,
getavailquests = C_GossipInfo.GetAvailableQuests, getavailquests = C_GossipInfo.GetAvailableQuests,
getactivequests = C_GossipInfo.GetActiveQuests, getactivequests = C_GossipInfo.GetActiveQuests,
getoptions = C_GossipInfo.GetOptions, getoptions = C_GossipInfo.GetOptions,
tabulateOptions = TI_TabulateGossipUIInfo, tabulateAvailable = TI_TabulateGossipQuestUIInfo_Retail,
tabulateActive = TI_TabulateGossipQuestUIInfo_Retail,
tabulateOptions = TI_TabulateGossipUIInfo_Retail,
}, },
q = { q = {
activequest = SelectActiveQuest, activequest = SelectActiveQuest,
availquest = SelectAvailableQuest, availquest = SelectAvailableQuest,
} }
} };
if QuestUtil.GetQuestIconOffer then else
TI_FunctionList.g.tabulateAvailable = TI_TabulateGossipQuestUIInfo TI_FunctionList = {
TI_FunctionList.g.tabulateActive = TI_TabulateGossipQuestUIInfo g = {
else availquest = SelectGossipAvailableQuest,
TI_FunctionList.g.tabulateAvailable = TI_TabulateGossipAvailableQuests_Classic activequest = SelectGossipActiveQuest,
TI_FunctionList.g.tabulateActive = TI_TabulateGossipActiveQuests_Classic gossip = SelectGossipOption,
end getavailquests = GetGossipAvailableQuests,
getactivequests = GetGossipActiveQuests,
getoptions = GetGossipOptions,
tabulateAvailable = TI_TabulateGossipAvailableQuests_Classic,
tabulateActive = TI_TabulateGossipActiveQuests_Classic,
tabulateOptions = TI_TabulateGossipOptions_Classic,
},
q = {
activequest = SelectActiveQuest,
availquest = SelectAvailableQuest,
}
};
end end
TI_SetupFunctions()
--[[this function stolen from WhisperCast by Sarris, whom I love dearly for his contribution to Paladins everywhere.
]]
function TI_copyTable( src ) function TI_copyTable( src )
local copy = {} local copy = {}
for k1,v1 in pairs(src) do for k1,v1 in pairs(src) do

View File

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

View File

@ -684,6 +684,167 @@
<Size> <Size>
<AbsDimension x="200" y="30"/> <AbsDimension x="200" y="30"/>
</Size> </Size>
<!--<Layers>
<Layer level="OVERLAY">
<FontString name="$parentText" justifyV="top" justifyH="left" inherits="GameFontNormal" text="Gossip Options">
<Anchors>
<Anchor point="TOPLEFT" />
</Anchors>
</FontString>
</Layer>
<Layer level="BACKGROUND">
<Texture name="$parent_Background" setAllPoints="true">
<Color r="0" g="1" b="0" a="0.0"/>
</Texture>
</Layer>
</Layers>-->
<Frames>
<Button name="$parent1" id="1" hidden="true" inherits="TI_PriorityList">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="0" y="0" />
</Offset>
</Anchor>
</Anchors>
</Button>
<Button name="$parent2" id="2" hidden="true" inherits="TI_PriorityList">
<Anchors>
<Anchor point="TOPLEFT" relativePoint="BOTTOMLEFT" relativeTo="$parent1">
<Offset>
<AbsDimension x="0" y="0" />
</Offset>
</Anchor>
</Anchors>
</Button>
<Button name="$parent3" id="3" hidden="true" inherits="TI_PriorityList">
<Anchors>
<Anchor point="TOPLEFT" relativePoint="BOTTOMLEFT" relativeTo="$parent2">
<Offset>
<AbsDimension x="0" y="0" />
</Offset>
</Anchor>
</Anchors>
</Button>
<Button name="$parent4" id="4" hidden="true" inherits="TI_PriorityList">
<Anchors>
<Anchor point="TOPLEFT" relativePoint="BOTTOMLEFT" relativeTo="$parent3">
<Offset>
<AbsDimension x="0" y="0" />
</Offset>
</Anchor>
</Anchors>
</Button>
<Button name="$parent5" id="5" hidden="true" inherits="TI_PriorityList">
<Anchors>
<Anchor point="TOPLEFT" relativePoint="BOTTOMLEFT" relativeTo="$parent4">
<Offset>
<AbsDimension x="0" y="0" />
</Offset>
</Anchor>
</Anchors>
</Button>
<Button name="$parent6" id="6" hidden="true" inherits="TI_PriorityList">
<Anchors>
<Anchor point="TOPLEFT" relativePoint="BOTTOMLEFT" relativeTo="$parent5">
<Offset>
<AbsDimension x="0" y="0" />
</Offset>
</Anchor>
</Anchors>
</Button>
<Button name="$parent7" id="7" hidden="true" inherits="TI_PriorityList">
<Anchors>
<Anchor point="TOPLEFT" relativePoint="BOTTOMLEFT" relativeTo="$parent6">
<Offset>
<AbsDimension x="0" y="0" />
</Offset>
</Anchor>
</Anchors>
</Button>
<Button name="$parent8" id="8" hidden="true" inherits="TI_PriorityList">
<Anchors>
<Anchor point="TOPLEFT" relativePoint="BOTTOMLEFT" relativeTo="$parent7">
<Offset>
<AbsDimension x="0" y="0" />
</Offset>
</Anchor>
</Anchors>
</Button>
<Button name="$parent9" id="9" hidden="true" inherits="TI_PriorityList">
<Anchors>
<Anchor point="TOPLEFT" relativePoint="BOTTOMLEFT" relativeTo="$parent8">
<Offset>
<AbsDimension x="0" y="0" />
</Offset>
</Anchor>
</Anchors>
</Button>
<Button name="$parent10" id="10" hidden="true" inherits="TI_PriorityList">
<Anchors>
<Anchor point="TOPLEFT" relativePoint="BOTTOMLEFT" relativeTo="$parent9">
<Offset>
<AbsDimension x="0" y="0" />
</Offset>
</Anchor>
</Anchors>
</Button>
<Button name="$parent11" id="11" hidden="true" inherits="TI_PriorityList">
<Anchors>
<Anchor point="TOPLEFT" relativePoint="BOTTOMLEFT" relativeTo="$parent10">
<Offset>
<AbsDimension x="0" y="0" />
</Offset>
</Anchor>
</Anchors>
</Button>
<Button name="$parent12" id="12" hidden="true" inherits="TI_PriorityList">
<Anchors>
<Anchor point="TOPLEFT" relativePoint="BOTTOMLEFT" relativeTo="$parent11">
<Offset>
<AbsDimension x="0" y="0" />
</Offset>
</Anchor>
</Anchors>
</Button>
<Button name="$parent13" id="13" hidden="true" inherits="TI_PriorityList">
<Anchors>
<Anchor point="TOPLEFT" relativePoint="BOTTOMLEFT" relativeTo="$parent12">
<Offset>
<AbsDimension x="0" y="0" />
</Offset>
</Anchor>
</Anchors>
</Button>
<Button name="$parent14" id="14" hidden="true" inherits="TI_PriorityList">
<Anchors>
<Anchor point="TOPLEFT" relativePoint="BOTTOMLEFT" relativeTo="$parent13">
<Offset>
<AbsDimension x="0" y="0" />
</Offset>
</Anchor>
</Anchors>
</Button>
<Button name="$parent15" id="15" hidden="true" inherits="TI_PriorityList">
<Anchors>
<Anchor point="TOPLEFT" relativePoint="BOTTOMLEFT" relativeTo="$parent14">
<Offset>
<AbsDimension x="0" y="0" />
</Offset>
</Anchor>
</Anchors>
</Button>
<Button name="$parent16" id="16" hidden="true" inherits="TI_PriorityList">
<Anchors>
<Anchor point="TOPLEFT" relativePoint="BOTTOMLEFT" relativeTo="$parent15">
<Offset>
<AbsDimension x="0" y="0" />
</Offset>
</Anchor>
</Anchors>
</Button>
</Frames>
</Frame> </Frame>
</ScrollChild> </ScrollChild>
</ScrollFrame> </ScrollFrame>

View File

@ -1,30 +1,3 @@
local TI_OptionsPriorityFramePool = {};
local TI_OptionsPriorityFramePoolMax = 0;
local function TI_GetOptionsPriorityFrame(idx)
if idx > TI_OptionsPriorityFramePoolMax then
for i=TI_OptionsPriorityFramePoolMax+1, idx, 1 do
local frame = CreateFrame("Button", "TI_OptionsPriority"..i,
getglobal("TI_OptionsPriority"), "TI_PriorityList", i);
if i == 1 then
frame:SetPoint("TOPLEFT", 0, 0);
else
frame:SetPoint("TOPLEFT", "TI_OptionsPriority"..i-1, "BOTTOMLEFT", 0, 0);
end
frame:Hide();
table.insert(TI_OptionsPriorityFramePool, i, frame);
TI_OptionsPriorityFramePoolMax = TI_OptionsPriorityFramePoolMax + 1;
end
end
return TI_OptionsPriorityFramePool[idx];
end
local function TI_HideUnusedOptionFrames(last)
for i=last, TI_OptionsPriorityFramePoolMax, 1 do
TI_OptionsPriorityFramePool[i]:Hide();
end
end
function TI_PopulateOptions(arg) function TI_PopulateOptions(arg)
TI_debug(arg); TI_debug(arg);
local CurrOpts; local CurrOpts;
@ -37,9 +10,9 @@ function TI_PopulateOptions(arg)
end end
for i,v in ipairs(CurrOpts) do for i,v in ipairs(CurrOpts) do
local entrybutton = TI_GetOptionsPriorityFrame(i); local entry = "TI_OptionsPriority" .. i;
local icon, entrytext = entrybutton:GetRegions(); local entrybutton = getglobal(entry);
local checkbox = entrybutton:GetChildren(); local entrytext = getglobal("TI_OptionsPriority"..i.."_Text");
local iconpath; local iconpath;
if(v.name == nil) then TI_debug("oh noes") end; if(v.name == nil) then TI_debug("oh noes") end;
entrytext:SetText(v.name); entrytext:SetText(v.name);
@ -62,15 +35,16 @@ function TI_PopulateOptions(arg)
iconpath = "Interface/GossipFrame/" .. v.type .. "GossipIcon"; iconpath = "Interface/GossipFrame/" .. v.type .. "GossipIcon";
end end
end end
icon:SetTexture(iconpath); getglobal(entry .. "_Icon"):SetTexture(iconpath);
checkbox:SetChecked(v.state); getglobal(entry .. "_Check"):SetChecked(v.state);
entrytext:SetWidth(156); --make sure to change this if you change the anchors in the XML entrytext:SetWidth(156); --make sure to change this if you change the anchors in the XML
entrybutton:SetHeight( entrytext:GetHeight() + 6); entrybutton:SetHeight( entrytext:GetHeight() + 6);
entrybutton:Show(); entrybutton:Show();
last = last+1; last = last+1;
end end
TI_HideUnusedOptionFrames(last); for j=last, 16, 1 do
getglobal("TI_OptionsPriority" .. j):Hide();
end
TI_OptionsPriorityScrollFrame:SetVerticalScroll(0); TI_OptionsPriorityScrollFrame:SetVerticalScroll(0);
TI_OptionsPriorityScrollFrame:UpdateScrollChildRect(); TI_OptionsPriorityScrollFrame:UpdateScrollChildRect();
TI_StatusIndicatorUpdate(); TI_StatusIndicatorUpdate();
@ -79,6 +53,31 @@ function TI_PopulateOptions(arg)
TI_SettingCheckboxUpdate(); TI_SettingCheckboxUpdate();
end end
--[[
function TI_PopulateOptions(arg)
TI_debug(arg);
if(TI_status and TI_status.options) then
for i,v in ipairs(TI_status.options) do
local entry = "TI_OptionsPriority" .. i;
local iconpath;
if(v.name == nil) then TI_debug("oh noes") end;
if(getglobal(entry .. "_Text") == nil) then TI_debug("wtf "..entry .. "_Text") end;
getglobal(entry .. "_Text"):SetText(v.name);
if(v.type == "activequest") then
iconpath = "Interface\\GossipFrame\\ActiveQuestIcon";
elseif(v.type == "availquest") then
iconpath = "Interface\\GossipFrame\\AvailableQuestIcon";
else
iconpath = "Interface\\GossipFrame\\" .. v.type .. "GossipIcon";
end
getglobal(entry .. "_Icon"):SetTexture(iconpath);
getglobal(entry .. "_Check"):SetChecked(v.state);
getglobal(entry):Show();
end
end
TI_NPCListScrollBarUpdate();
end
]]--
function TI_NPCListScrollBarUpdate() function TI_NPCListScrollBarUpdate()
if(TI_NPCIndex) then if(TI_NPCIndex) then
@ -90,7 +89,20 @@ function TI_NPCListScrollBarUpdate()
local offset = FauxScrollFrame_GetOffset(TI_NPCListScrollFrame); local offset = FauxScrollFrame_GetOffset(TI_NPCListScrollFrame);
local i=1; local i=1;
local j=1; local j=1;
--~ for k, v in pairs(TI_NPCDB) do
--~ if(offset <= i and i < offset+8) then
--~ if(i <= table.getn(TI_NPCDB)) then
--~ getglobal("TI_OptionsNPCContainer"..j.."_Text"):SetText(k);
--~ getglobal("TI_OptionsNPCContainer"..j.."_Check"):SetChecked(v.state);
--~ getglobal("TI_OptionsNPCContainer"..j):Show();
--~ else
--~ getglobal("TI_OptionsNPCContainer"..j):Hide();
--~ end
--~ j = j + 1;
--~ end
--~ i = i + 1;
--~ end
for line=1,8 do for line=1,8 do
lineplusoffset = line + FauxScrollFrame_GetOffset(TI_NPCListScrollFrame); lineplusoffset = line + FauxScrollFrame_GetOffset(TI_NPCListScrollFrame);
if(lineplusoffset <= table.getn(TI_NPCIndex)) then if(lineplusoffset <= table.getn(TI_NPCIndex)) then

7
TurnIn_Wrath.toc Executable file
View File

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