Compare commits

..

1 Commits

Author SHA1 Message Date
root
4141e80c35 Tagging as 2.0.8 2008-07-21 15:52:10 +00:00
7 changed files with 1926 additions and 1951 deletions

0
.gitignore vendored
View File

View File

@ -1,33 +1,52 @@
Turn In Turn In
v2.3 v2.0
by Sabindeus of Terenas by Sabindeus of Smolderthorn/Andre of Argent Dawn (Alliance)
DESCRIPTION DESCRIPTION
------------- -------------
An add-on that automates the clicking of Quests and NPC Gossip dialogues. An add-on that automates the clicking of Quests and NPC Gossip dialogues.
HOW TO USE HOW TO USE
------------- -------------
To bring up the Options window, type /ti window. To bring up the Options window, type /ti window.
To bring up the Recently Visited NPCs window, type /ti templist. To bring up the Recently Visited NPCs window, type /ti templist.
Turn In keeps an NPC database, to allow you to customize your interactions on a per-NPC basis. Whenever you talk to an NPC, it appears in your Recently Visited NPCs window. From there you can decide if you want to add it to the Database so you can customize his options. Simply click the '+' button to add the NPC to the DB. Turn In keeps an NPC database, to allow you to customize your interactions on a per-NPC basis. Whenever you talk to an NPC, it appears in your Recently Visited NPCs window. From there you can decide if you want to add it to the Database so you can customize his options. Simply click the '+' button to add the NPC to the DB.
After Adding an NPC, you can check the checkbox next to its name in the NPC list and then rearrange or activate/deactive his options to your liking. If you uncheck the checkbox next to an NPC's name, it will use the default option set. If you want Turn In to specifically take no action for an NPC, simply deactivate all of his options, don't uncheck his checkbox in the NPC list! After Adding an NPC, you can check the checkbox next to its name in the NPC list and then rearrange or activate/deactive his options to your liking. If you uncheck the checkbox next to an NPC's name, it will use the default option set. If you want Turn In to specifically take no action for an NPC, simply deactivate all of his options, don't uncheck his checkbox in the NPC list!
When an NPC does not appear in the Database, Turn In uses the default option set to resolve interactions with it. You can customize the default option set by not having an NPC selected in the options window. The Use Default Settings checkbox determines whether talking to NPC not in the Database will use the default options or do nothing at all. The Automatically Add NPCs checkbox will cause all of your new NPC visits to automatically add the NPC to your NPC DB. When an NPC does not appear in the Database, Turn In uses the default option set to resolve interactions with it. You can customize the default option set by not having an NPC selected in the options window. The Use Default Settings checkbox determines whether talking to NPC not in the Database will use the default options or do nothing at all. The Automatically Add NPCs checkbox will cause all of your new NPC visits to automatically add the NPC to your NPC DB.
COMMAND SUMMARY COMMAND SUMMARY
------------- -------------
/turnin or /ti - basic slash command, shows help message /turnin or /ti - basic slash command, shows help message
/turnin on - Turns on the mod, from now on all quests will be automatically chosen and completed. Additionally, any available quests will be accepted, and gossip options will be automatically chosen. /turnin on - Turns on the mod, from now on all quests will be automatically chosen and completed. Additionally, any available quests will be accepted, and gossip options will be automatically chosen.
/turnin off - Deactivates the mod /turnin off - Deactivates the mod
/turnin toggle - Activates or deactivates the mod /turnin toggle - Activates or deactivates the mod
/turnin window - Shows the options window /turnin window - Shows the options window
/turnin recent - Shows the recently visited NPCs window /turnin recent - Shows the recently visited NPCs window
Please send bug reports, questions or comments to sabin@sabindeus.com CHANGE LOG
-------------
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 for beta testing like a pro!
Please send bug reports, questions or comments to Sabin1936@mac.com
Thank you for downloading my add-on!

1449
TurnIn.lua Executable file → Normal file

File diff suppressed because it is too large Load Diff

13
TurnIn.toc Executable file → Normal file
View File

@ -1,7 +1,6 @@
## Interface: 120100, 120000, 120001, 50503, 40402, 30405, 20505, 11508 ## Interface: 20400
## X-Compatible-With: 120100, 120000, 120001, 50503, 40402, 30405, 20505, 11508 ## Title: Turn In
## Title: Turn In ## Description: 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 ## Version: 2.0.8
## Version: 2.2 TurnIn.xml
TurnIn.xml

1785
TurnIn.xml Executable file → Normal file

File diff suppressed because it is too large Load Diff

544
TurnInUI.lua Executable file → Normal file
View File

@ -1,272 +1,272 @@
local TI_OptionsPriorityFramePool = {}; function TI_PopulateOptions(arg)
local TI_OptionsPriorityFramePoolMax = 0; TI_debug(arg);
local CurrOpts;
local function TI_GetOptionsPriorityFrame(idx) local last=1;
if idx > TI_OptionsPriorityFramePoolMax then if(TI_status and TI_status.options) then
for i=TI_OptionsPriorityFramePoolMax+1, idx, 1 do if(TI_LoadedNPCIndex > 0) then
local frame = CreateFrame("Button", "TI_OptionsPriority"..i, CurrOpts = TI_NPCDB[TI_NPCIndex[TI_LoadedNPCIndex]];
getglobal("TI_OptionsPriority"), "TI_PriorityList", i); else
if i == 1 then CurrOpts = TI_status.options;
frame:SetPoint("TOPLEFT", 0, 0); end
else
frame:SetPoint("TOPLEFT", "TI_OptionsPriority"..i-1, "BOTTOMLEFT", 0, 0); for i,v in ipairs(CurrOpts) do
end local entry = "TI_OptionsPriority" .. i;
frame:Hide(); local entrybutton = getglobal(entry);
table.insert(TI_OptionsPriorityFramePool, i, frame); local entrytext = getglobal("TI_OptionsPriority"..i.."_Text");
TI_OptionsPriorityFramePoolMax = TI_OptionsPriorityFramePoolMax + 1; local iconpath;
end if(v.name == nil) then TI_debug("oh noes") end;
end entrytext:SetText(v.name);
return TI_OptionsPriorityFramePool[idx]; if(v.type == "activequest") then
end iconpath = "Interface\\GossipFrame\\ActiveQuestIcon";
elseif(v.type == "availquest") then
local function TI_HideUnusedOptionFrames(last) iconpath = "Interface\\GossipFrame\\AvailableQuestIcon";
for i=last, TI_OptionsPriorityFramePoolMax, 1 do else
TI_OptionsPriorityFramePool[i]:Hide(); iconpath = "Interface\\GossipFrame\\" .. v.type .. "GossipIcon";
end end
end getglobal(entry .. "_Icon"):SetTexture(iconpath);
getglobal(entry .. "_Check"):SetChecked(v.state);
function TI_PopulateOptions(arg) entrytext:SetWidth(156); --make sure to change this if you change the anchors in the XML
TI_debug(arg); entrybutton:SetHeight( entrytext:GetHeight() + 6);
local CurrOpts; entrybutton:Show();
local last=1; last = last+1;
if(TI_status and TI_status.options) then end
if(TI_LoadedNPCIndex > 0) then for j=last, 16, 1 do
CurrOpts = TI_NPCDB[TI_NPCIndex[TI_LoadedNPCIndex]]; getglobal("TI_OptionsPriority" .. j):Hide();
else end
CurrOpts = TI_status.options; TI_OptionsPriorityScrollFrame:SetVerticalScroll(0);
end TI_OptionsPriorityScrollFrame:UpdateScrollChildRect();
TI_StatusIndicatorUpdate();
for i,v in ipairs(CurrOpts) do end
local entrybutton = TI_GetOptionsPriorityFrame(i); TI_NPCListScrollBarUpdate();
local icon, entrytext = entrybutton:GetRegions(); TI_SettingCheckboxUpdate();
local checkbox = entrybutton:GetChildren(); end
local iconpath;
if(v.name == nil) then TI_debug("oh noes") end; --[[
entrytext:SetText(v.name); function TI_PopulateOptions(arg)
if(v.type == "activequest") then TI_debug(arg);
if(v.icon) then if(TI_status and TI_status.options) then
iconpath = v.icon; for i,v in ipairs(TI_status.options) do
else local entry = "TI_OptionsPriority" .. i;
iconpath = "Interface/GossipFrame/ActiveQuestIcon"; local iconpath;
end if(v.name == nil) then TI_debug("oh noes") end;
elseif(v.type == "availquest") then if(getglobal(entry .. "_Text") == nil) then TI_debug("wtf "..entry .. "_Text") end;
if(v.icon) then getglobal(entry .. "_Text"):SetText(v.name);
iconpath = v.icon; if(v.type == "activequest") then
else iconpath = "Interface\\GossipFrame\\ActiveQuestIcon";
iconpath = "Interface/GossipFrame/AvailableQuestIcon"; elseif(v.type == "availquest") then
end iconpath = "Interface\\GossipFrame\\AvailableQuestIcon";
else else
if(v.icon) then iconpath = "Interface\\GossipFrame\\" .. v.type .. "GossipIcon";
iconpath = v.icon; end
else getglobal(entry .. "_Icon"):SetTexture(iconpath);
iconpath = "Interface/GossipFrame/" .. v.type .. "GossipIcon"; getglobal(entry .. "_Check"):SetChecked(v.state);
end getglobal(entry):Show();
end end
icon:SetTexture(iconpath); end
checkbox:SetChecked(v.state); TI_NPCListScrollBarUpdate();
entrytext:SetWidth(156); --make sure to change this if you change the anchors in the XML end
entrybutton:SetHeight( entrytext:GetHeight() + 6); ]]--
entrybutton:Show();
last = last+1; function TI_NPCListScrollBarUpdate()
end if(TI_NPCIndex) then
TI_HideUnusedOptionFrames(last); FauxScrollFrame_Update(TI_NPCListScrollFrame,table.getn(TI_NPCIndex),8,20);
-- arg2 is max entries, arg3 is number of lines, arg4 is pixel height of each line
TI_OptionsPriorityScrollFrame:SetVerticalScroll(0);
TI_OptionsPriorityScrollFrame:UpdateScrollChildRect(); local line; -- 1 through 8 of our window to scroll
TI_StatusIndicatorUpdate(); local lineplusoffset; -- an index into our data calculated from the scroll offset
end local offset = FauxScrollFrame_GetOffset(TI_NPCListScrollFrame);
TI_NPCListScrollBarUpdate(); local i=1;
TI_SettingCheckboxUpdate(); local j=1;
end --~ for k, v in pairs(TI_NPCDB) do
--~ if(offset <= i and i < offset+8) then
--~ if(i <= table.getn(TI_NPCDB)) then
function TI_NPCListScrollBarUpdate() --~ getglobal("TI_OptionsNPCContainer"..j.."_Text"):SetText(k);
if(TI_NPCIndex) then --~ getglobal("TI_OptionsNPCContainer"..j.."_Check"):SetChecked(v.state);
FauxScrollFrame_Update(TI_NPCListScrollFrame,table.getn(TI_NPCIndex),8,20); --~ getglobal("TI_OptionsNPCContainer"..j):Show();
-- arg2 is max entries, arg3 is number of lines, arg4 is pixel height of each line --~ else
--~ getglobal("TI_OptionsNPCContainer"..j):Hide();
local line; -- 1 through 8 of our window to scroll --~ end
local lineplusoffset; -- an index into our data calculated from the scroll offset --~ j = j + 1;
local offset = FauxScrollFrame_GetOffset(TI_NPCListScrollFrame); --~ end
local i=1; --~ i = i + 1;
local j=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
getglobal("TI_OptionsNPCContainer"..line):SetID(lineplusoffset); getglobal("TI_OptionsNPCContainer"..line):SetID(lineplusoffset);
getglobal("TI_OptionsNPCContainer"..line.."_Text"):SetText(TI_NPCIndex[lineplusoffset]); getglobal("TI_OptionsNPCContainer"..line.."_Text"):SetText(TI_NPCIndex[lineplusoffset]);
getglobal("TI_OptionsNPCContainer"..line.."_Check"):SetChecked(TI_NPCDB[TI_NPCIndex[lineplusoffset]].state); getglobal("TI_OptionsNPCContainer"..line.."_Check"):SetChecked(TI_NPCDB[TI_NPCIndex[lineplusoffset]].state);
if(lineplusoffset == TI_LoadedNPCIndex) then if(lineplusoffset == TI_LoadedNPCIndex) then
getglobal("TI_OptionsNPCContainer"..line):LockHighlight(); getglobal("TI_OptionsNPCContainer"..line):LockHighlight();
else else
getglobal("TI_OptionsNPCContainer"..line):UnlockHighlight(); getglobal("TI_OptionsNPCContainer"..line):UnlockHighlight();
end end
getglobal("TI_OptionsNPCContainer"..line):Show(); getglobal("TI_OptionsNPCContainer"..line):Show();
else else
getglobal("TI_OptionsNPCContainer"..line):Hide(); getglobal("TI_OptionsNPCContainer"..line):Hide();
end end
end end
end end
end end
function TI_SelectNPCIndex(self) function TI_SelectNPCIndex()
local index = self:GetID(); local index = this:GetID();
if(TI_LoadedNPCIndex == index) then if(TI_LoadedNPCIndex == index) then
TI_LoadedNPCIndex = 0; TI_LoadedNPCIndex = 0;
else else
TI_LoadedNPCIndex = index; TI_LoadedNPCIndex = index;
end end
TI_PopulateOptions("select npc"); TI_PopulateOptions("select npc");
end end
function TI_DeleteNPCIndex(self) function TI_DeleteNPCIndex()
local index = self:GetParent():GetID(); local index = this:GetParent():GetID();
TI_DeleteNPC(index); TI_DeleteNPC(index);
if(TI_LoadedNPCIndex == index) then if(TI_LoadedNPCIndex == index) then
TI_LoadedNPCIndex = 0; TI_LoadedNPCIndex = 0;
end end
TI_PopulateOptions("npclist update"); TI_PopulateOptions("npclist update");
end end
function TI_NPCToggle(self) function TI_NPCToggle()
local index = self:GetParent():GetID(); local index = this:GetParent():GetID();
TI_NPCDB[TI_NPCIndex[index]].state = self:GetChecked(); TI_NPCDB[TI_NPCIndex[index]].state = this:GetChecked();
if(TI_NPCDB[TI_NPCIndex[index]].state) then if(TI_NPCDB[TI_NPCIndex[index]].state) then
TI_LoadedNPCIndex = index; TI_LoadedNPCIndex = index;
else else
if(TI_LoadedNPCIndex == index) then if(TI_LoadedNPCIndex == index) then
TI_LoadedNPCIndex = 0; TI_LoadedNPCIndex = 0;
end end
end end
TI_PopulateOptions("select npc"); TI_PopulateOptions("select npc");
end end
function TI_OptionMove(self, offset) function TI_OptionMove(offset)
local CurrOpts; local CurrOpts;
if(TI_LoadedNPCIndex > 0) then if(TI_LoadedNPCIndex > 0) then
CurrOpts = TI_NPCDB[TI_NPCIndex[TI_LoadedNPCIndex]]; CurrOpts = TI_NPCDB[TI_NPCIndex[TI_LoadedNPCIndex]];
else else
CurrOpts = TI_status.options; CurrOpts = TI_status.options;
end end
local id = self:GetParent():GetID(); local id = this:GetParent():GetID();
local newid = id + offset; local newid = id + offset;
if(newid < 1 or newid > table.getn(CurrOpts)) then if(newid < 1 or newid > table.getn(CurrOpts)) then
return; return;
end end
local temp = CurrOpts[newid]; local temp = CurrOpts[newid];
CurrOpts[newid] = CurrOpts[id]; CurrOpts[newid] = CurrOpts[id];
CurrOpts[id] = temp; CurrOpts[id] = temp;
TI_PopulateOptions("move"); TI_PopulateOptions("move");
end end
function TI_OptionToggle(self) function TI_OptionToggle()
local CurrOpts; local CurrOpts;
if(TI_LoadedNPCIndex > 0) then if(TI_LoadedNPCIndex > 0) then
CurrOpts = TI_NPCDB[TI_NPCIndex[TI_LoadedNPCIndex]]; CurrOpts = TI_NPCDB[TI_NPCIndex[TI_LoadedNPCIndex]];
else else
CurrOpts = TI_status.options; CurrOpts = TI_status.options;
end end
local id = self:GetParent():GetID(); local id = this:GetParent():GetID();
if(self:GetChecked()) then if(this:GetChecked()) then
CurrOpts[id].state=true; CurrOpts[id].state=true;
else else
CurrOpts[id].state=false; CurrOpts[id].state=false;
end end
end end
function TI_StatusIndicatorUpdate() function TI_StatusIndicatorUpdate()
if(TI_status) then if(TI_status) then
if(TI_status.state) then if(TI_status.state) then
TI_StatusIndicator_Status:SetText("On"); TI_StatusIndicator_Status:SetText("On");
TI_StatusIndicator_Status:SetTextColor(0,1,0); TI_StatusIndicator_Status:SetTextColor(0,1,0);
else else
TI_StatusIndicator_Status:SetText("Off"); TI_StatusIndicator_Status:SetText("Off");
TI_StatusIndicator_Status:SetTextColor(1,0,0); TI_StatusIndicator_Status:SetTextColor(1,0,0);
end end
TI_StatusIndicator_Checkbox:SetChecked(TI_status.state); TI_StatusIndicator_Checkbox:SetChecked(TI_status.state);
end end
end end
function TI_StatusIndicator_CheckFn(self) function TI_StatusIndicator_CheckFn()
if(self:GetChecked()) then if(this:GetChecked()) then
TI_Switch("on"); TI_Switch("on");
else else
TI_Switch("off"); TI_Switch("off");
end end
end end
function TI_TempNPCListTooltipShow(self) function TI_TempNPCListTooltipShow()
TI_Tooltip:SetOwner(self, ANCHOR_PRESERVE); TI_Tooltip:SetOwner(this, ANCHOR_PRESERVE);
TI_Tooltip:ClearLines(); TI_Tooltip:ClearLines();
local id = self:GetID(); local id = this:GetID();
TI_Tooltip:AddLine(TI_TempNPCList[id].location); TI_Tooltip:AddLine(TI_TempNPCList[id].location);
for i,v in ipairs(TI_TempNPCList[id].list) do for i,v in ipairs(TI_TempNPCList[id].list) do
TI_Tooltip:AddLine("- " .. v.name); TI_Tooltip:AddLine("- " .. v.name);
end end
--TI_Tooltip:SetText(text); --TI_Tooltip:SetText(text);
TI_Tooltip:Show(); TI_Tooltip:Show();
end end
function TI_TooltipHide() function TI_TooltipHide()
TI_Tooltip:Hide(); TI_Tooltip:Hide();
end end
function TI_TooltipMessage(self, msg) function TI_TooltipMessage(msg)
TI_Tooltip:SetOwner(self, ANCHOR_PRESERVE); TI_Tooltip:SetOwner(this, ANCHOR_PRESERVE);
TI_Tooltip:ClearLines(); TI_Tooltip:ClearLines();
TI_Tooltip:SetText(msg); TI_Tooltip:SetText(msg);
TI_Tooltip:Show(); TI_Tooltip:Show();
end end
function TI_TempNPCListUpdate() function TI_TempNPCListUpdate()
local last = 1; local last = 1;
for i,v in ipairs(TI_TempNPCList) do for i,v in ipairs(TI_TempNPCList) do
local tempbuttontext = _G["TI_TempNPCListWindow"..i.."_Text"]; local tempbuttontext = getglobal("TI_TempNPCListWindow"..i.."_Text");
tempbuttontext:SetText(v.name); tempbuttontext:SetText(v.name);
tempbuttontext:GetParent():Show(); tempbuttontext:GetParent():Show();
last = last+1; last = last+1;
end end
for j=last, TI_TempNPCListMaxSize, 1 do for j=last, TI_TempNPCListMaxSize, 1 do
_G["TI_TempNPCListWindow" .. j]:Hide(); getglobal("TI_TempNPCListWindow" .. j):Hide();
end end
end end
function TI_NPCListCheckboxTooltip(self) function TI_NPCListCheckboxTooltip()
if(self:GetChecked()) then if(this:GetChecked()) then
TI_TooltipMessage(self, "NPC is using specific settings."); TI_TooltipMessage("NPC is using specific settings.");
else else
TI_TooltipMessage(self, "NPC is using default settings."); TI_TooltipMessage("NPC is using default settings.");
end end
end end
function TI_OptionListCheckboxTooltip(self) function TI_OptionListCheckboxTooltip()
if(self:GetChecked()) then if(this:GetChecked()) then
TI_TooltipMessage(self, "This option is enabled."); TI_TooltipMessage("This option is enabled.");
else else
TI_TooltipMessage(self, "This option is disabled."); TI_TooltipMessage("This option is disabled.");
end end
end end
function TI_SettingCheckboxFn(self, var) function TI_SettingCheckboxFn(var)
if(self:GetChecked()) then if(this:GetChecked()) then
TI_status[var] = true; TI_status[var] = true;
else else
TI_status[var] = false; TI_status[var] = false;
end end
end end
function TI_SettingCheckboxUpdate() function TI_SettingCheckboxUpdate()
if(TI_status) then if(TI_status) then
TI_SettingCheckboxes_UseDefault:SetChecked(TI_status.usedefault); TI_SettingCheckboxes_UseDefault:SetChecked(TI_status.usedefault);
TI_SettingCheckboxes_AddAutomatically:SetChecked(TI_status.autoadd); TI_SettingCheckboxes_AddAutomatically:SetChecked(TI_status.autoadd);
end end
end end

View File

@ -1 +0,0 @@
package-as: TurnIn