4671cbd714
- Russian localization (by Maus) - FishingSchools: track fishing pools, Gatherer integration - FishingOutfitter: Outfitter addon integration - Interface 11200 (patch 1.12 support) - Improved options system with dependencies - Better watcher frame positioning - Various bugfixes Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
185 lines
6.8 KiB
Lua
Executable File
185 lines
6.8 KiB
Lua
Executable File
-- Manage outfits, whether they're from OutfitDisplayFrame or something else
|
|
FishingBuddy.OutfitManager = {};
|
|
|
|
-- Inferred from Draznar's Fishing FAQ
|
|
local Accessories = {
|
|
[19979] = { ["n"] = "Hook of the Master Angler", ["score"] = 5, },
|
|
[19947] = { ["n"] = "Nat Pagle's Broken Reel", ["score"] = 4, },
|
|
[19972] = { ["n"] = "Lucky Fishing Hat", ["score"] = 5, },
|
|
[7996] = { ["n"] = "Lucky Fishing Hat", ["score"] = 5, },
|
|
[8749] = { ["n"] = "Crochet Hat", ["score"] = 3, },
|
|
[19039] = { ["n"] = "Zorbin's Water Resistant Hat", ["score"] = 3, },
|
|
[3889] = { ["n"] = "Russet Hat", ["score"] = 3, },
|
|
[14584] = { ["n"] = "Dokebi Hat", ["score"] = 2, },
|
|
[4048] = { ["n"] = "Emblazoned Hat", ["score"] = 1, },
|
|
[10250] = { ["n"] = "Masters Hat of the Whale", ["score"] = 1, },
|
|
[9508] = { ["n"] = "Mechbuilder's Overalls", ["score"] = 3, },
|
|
[6263] = { ["n"] = "Blue Overalls", ["score"] = 4, },
|
|
[3342] = { ["n"] = "Captain Sander's Shirt", ["score"] = 4, },
|
|
[5107] = { ["n"] = "Deckhand's Shirt", ["score"] = 2, },
|
|
[6795] = { ["n"] = "White Swashbuckler's Shirt", ["score"] = 1, },
|
|
[2576] = { ["n"] = "White Linen Shirt", ["score"] = 1, },
|
|
[6202] = { ["n"] = "Fingerless Gloves", ["score"] = 3, },
|
|
[792] = { ["n"] = "Knitted Sandals", ["score"] = 4, },
|
|
[1560] = { ["n"] = "Bluegill Sandals", ["score"] = 4, },
|
|
[13402] = { ["n"] = "Timmy's Galoshes", ["score"] = 2, },
|
|
[10658] = { ["n"] = "Quagmire Galoshes", ["score"] = 2, },
|
|
[1678] = { ["n"] = "Black Ogre Kickers", ["score"] = 1, },
|
|
[19969] = { ["n"] = "Nat Pagle's Extreme Anglin' Boots", ["score"] = 5, },
|
|
[15405] = { ["n"] = "Shucking Gloves", ["score"] = 5, },
|
|
[15406] = { ["n"] = "Crustacean Boots", ["score"] = 3, },
|
|
[3287] = { ["n"] = "Tribal Pants", ["score"] = 2, },
|
|
[5310] = { ["n"] = "Sea Dog Britches", ["score"] = 4, },
|
|
}
|
|
|
|
FishingBuddy.Commands[FishingBuddy.SWITCH] = {};
|
|
FishingBuddy.Commands[FishingBuddy.SWITCH].func = function()
|
|
FishingBuddy.OutfitManager.Switch();
|
|
return true;
|
|
end;
|
|
|
|
local OutfitManagers = {};
|
|
local OutfitManagerCount = 0;
|
|
FishingBuddy.OutfitManager.RegisterManager = function(name, init, choose, switch)
|
|
if ( not OutfitManagers[name] ) then
|
|
OutfitManagers[name] = {};
|
|
OutfitManagerCount = OutfitManagerCount + 1;
|
|
end
|
|
OutfitManagers[name].Initialize = init;
|
|
OutfitManagers[name].Choose = choose;
|
|
OutfitManagers[name].Switch = switch;
|
|
end
|
|
|
|
FishingBuddy.OutfitManager.ItemStylePoints = function(itemno, enchant)
|
|
local points = 0;
|
|
if ( itemno ) then
|
|
itemono = tonumber(itemno);
|
|
enchant = tonumber(enchant);
|
|
if (Accessories[itemno]) then
|
|
points = points + Accessories[itemno].score;
|
|
end
|
|
if ( enchant == 846 ) then
|
|
-- bonus for being enchanted with Fishing +2
|
|
points = points + 2;
|
|
end
|
|
end
|
|
return points;
|
|
end
|
|
|
|
local PoleCheck = nil;
|
|
|
|
-- update the watcher when we're done switching outfits
|
|
FishingBuddy.OutfitManager.WaitForUpdate =
|
|
function(arg1)
|
|
local hasPole = FishingBuddy.API.IsFishingPole();
|
|
if ( hasPole == PoleCheck ) then
|
|
FishingOutfitUpdateFrame:Hide();
|
|
FishingBuddy.API.FishingMode();
|
|
end
|
|
end
|
|
|
|
local function CheckSwitch(topole)
|
|
PoleCheck = topole;
|
|
FishingOutfitUpdateFrame:Show();
|
|
end
|
|
FishingBuddy.OutfitManager.CheckSwitch = CheckSwitch;
|
|
|
|
local function HasManager()
|
|
return (OutfitManagerCount > 0);
|
|
end
|
|
FishingBuddy.OutfitManager.HasManager = HasManager;
|
|
|
|
FishingBuddy.OutfitManager.Switch = function(outfitname)
|
|
if ( HasManager() ) then
|
|
local outfitter = FishingBuddy.GetSetting("OutfitManager");
|
|
if ( outfitter and OutfitManagers[outfitter] ) then
|
|
local wasPole = OutfitManagers[outfitter].Switch(outfitname);
|
|
CheckSwitch(not wasPole);
|
|
end
|
|
else
|
|
FishingBuddy.UIError(FishingBuddy.COMPATIBLE_SWITCHER);
|
|
end
|
|
-- if we're now sporting a fishing pole, let's go fishing
|
|
FishingBuddy.API.FishingMode();
|
|
end
|
|
|
|
local current_manager;
|
|
|
|
local function OutfitManagerMenuSetup()
|
|
for manager,_ in OutfitManagers do
|
|
local mgr = manager;
|
|
local info = {};
|
|
info.text = manager;
|
|
info.func = function() FishingBuddy.OutfitManager.ChooseManager(mgr); end;
|
|
info.checked = ( current_manager == manager )
|
|
UIDropDownMenu_AddButton(info);
|
|
end
|
|
end
|
|
|
|
local function SetOutfitManagerDisplay()
|
|
if ( OutfitManagerCount == 0 ) then
|
|
FishingBuddyOption_OutfitMenu:Hide();
|
|
FishingBuddyOption_OutfitText:SetText(FishingBuddy.OUTFITS_TAB..": |c"..FishingBuddy.Colors.RED..FishingBuddy.NONEAVAILABLE_MSG.."|r");
|
|
elseif ( OutfitManagerCount == 1 ) then
|
|
FishingBuddyOption_OutfitMenu:Hide();
|
|
FishingBuddyOption_OutfitText:SetText(FishingBuddy.OUTFITS_TAB..": |c"..FishingBuddy.Colors.GREEN..current_manager.."|r");
|
|
else
|
|
FishingBuddyOption_OutfitText:Hide();
|
|
UIDropDownMenu_Initialize(FishingBuddyOption_OutfitMenu,
|
|
OutfitManagerMenuSetup);
|
|
local show = 1;
|
|
for name,_ in OutfitManagers do
|
|
if ( name == current_manager ) then
|
|
break;
|
|
end
|
|
show = show + 1;
|
|
end
|
|
local label = getglobal("FishingBuddyOption_OutfitMenuLabel");
|
|
label:SetText(FishingBuddy.OUTFITS_TAB..": ");
|
|
local menu = FishingBuddyOption_OutfitMenu;
|
|
UIDropDownMenu_SetWidth(210, menu);
|
|
UIDropDownMenu_SetSelectedValue(menu, show);
|
|
UIDropDownMenu_SetText(current_manager, menu);
|
|
end
|
|
end
|
|
|
|
local function ChooseManager(manager)
|
|
if ( manager and OutfitManagers[manager] ) then
|
|
current_manager = manager;
|
|
if ( not OutfitManagers[manager].initialized ) then
|
|
OutfitManagers[manager].Initialize();
|
|
OutfitManagers[manager].initialized = 1;
|
|
end
|
|
for om,info in OutfitManagers do
|
|
info.Choose(om == manager);
|
|
end
|
|
SetOutfitManagerDisplay();
|
|
return true;
|
|
end
|
|
end
|
|
FishingBuddy.OutfitManager.ChooseManager = ChooseManager;
|
|
|
|
FishingBuddy.OutfitManager.Initialize = function()
|
|
-- no outfit managers, no outfit switching
|
|
if ( not HasManager() ) then
|
|
FishingBuddy.SetSetting("InfoBarClickToSwitch", 0);
|
|
FishingBuddy.SetSetting("TitanClickToSwitch", 0);
|
|
FishingBuddy.SetSetting("MinimapClickToSwitch", 0);
|
|
else
|
|
if ( OutfitManagerCount == 1 ) then
|
|
-- we pretty much have to use this one
|
|
current_manager = next(OutfitManagers);
|
|
else
|
|
current_manager = FishingBuddy.GetSetting("OutfitManager");
|
|
if ( not manager or not OutfitManagers[manager] ) then
|
|
-- no valid ones, use the first one
|
|
current_manager = next(OutfitManagers);
|
|
end
|
|
end
|
|
ChooseManager(current_manager);
|
|
-- in case we changed things (do we want/need to do this?)
|
|
-- FishingBuddy.SetSetting("OutfitManager", current_manager);
|
|
end
|
|
SetOutfitManagerDisplay();
|
|
end
|