You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
148 lines
3.9 KiB
148 lines
3.9 KiB
local SLE, T, E, L, V, P, G = unpack(ElvUI_SLE)
|
|
local Fishing = SLE.Fishing
|
|
local FishLib = LibStub('LibFishing-1.0')
|
|
|
|
local IsFishingLoot = IsFishingLoot
|
|
local GetNumLootItems = GetNumLootItems
|
|
|
|
local lastLure, castTime
|
|
local castingLure = false
|
|
|
|
local function HideAwayAll()
|
|
if not castTime then
|
|
castTime = Fishing:ScheduleRepeatingTimer('PostCastUpdate', 1)
|
|
end
|
|
end
|
|
|
|
local key_actions = {
|
|
--* Try alt as an option maybe?
|
|
-- ['none'] = function(mouse) return mouse ~= 'right' end,
|
|
['shift'] = function(mouse) return IsShiftKeyDown() end,
|
|
['control'] = function(mouse) return IsControlKeyDown() end,
|
|
['alt'] = function(mouse) return IsAltKeyDown() end
|
|
}
|
|
|
|
local function CastingKeys()
|
|
local castKey = E.db.sle.professions.fishing.castKey
|
|
local mouseButton = E.db.sle.professions.fishing.mouseButton
|
|
|
|
if castKey and key_actions[castKey] then
|
|
return key_actions[castKey](mouseButton)
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
|
|
local function HijackCheck()
|
|
if InCombatLockdown() then return end
|
|
|
|
if CastingKeys() or FishLib:IsFishingReady() then
|
|
return true
|
|
end
|
|
end
|
|
|
|
local function SetupLure()
|
|
if not E.db.sle.professions.fishing.useLure or castingLure then return end
|
|
|
|
if FishLib:IsFishingPole() then
|
|
local pole, enchant = FishLib:GetPoleBonus()
|
|
local state, bestLure = FishLib:FindBestLure(enchant, 0, true)
|
|
if state and bestLure then
|
|
FishLib:InvokeLuring(bestLure.id)
|
|
castingLure = true
|
|
lastLure = bestLure
|
|
|
|
return true
|
|
end
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
function Fishing:PostCastUpdate()
|
|
local stop = true
|
|
if InCombatLockdown() then return end
|
|
|
|
if castingLure then
|
|
local spellName = UnitChannelInfo('player')
|
|
local _, lure = FishLib:GetPoleBonus()
|
|
if not spellName or (lure and lure == lastLure.b) then
|
|
castingLure = false
|
|
FishLib:UpdateLureInventory()
|
|
else
|
|
stop = false
|
|
end
|
|
end
|
|
if stop and castTime then
|
|
Fishing:CancelTimer(castTime)
|
|
castTime = nil
|
|
end
|
|
end
|
|
|
|
function Fishing:ButtonOptions()
|
|
local ButtonOptions ={
|
|
right = 'RightButtonUp',
|
|
button4 = 'Button4Up',
|
|
button5 = 'Button5Up'
|
|
}
|
|
return ButtonOptions[E.db.sle.professions.fishing.mouseButton] or 'RightButtonUp'
|
|
end
|
|
|
|
function Fishing:GLOBAL_MOUSE_DOWN(...)
|
|
local button = select(2, ...)
|
|
|
|
if FishLib:CheckForDoubleClick(button) and HijackCheck() then
|
|
if IsMouselooking() then MouselookStop() end
|
|
|
|
if not SetupLure() then
|
|
FishLib:InvokeFishing()
|
|
end
|
|
|
|
FishLib:OverrideClick(HideAwayAll)
|
|
end
|
|
end
|
|
|
|
function Fishing:LOOT_OPENED()
|
|
if not IsFishingLoot() then return end
|
|
|
|
if E.db.sle.professions.fishing.autoLoot and (GetCVar('autoLootDefault') ~= '1' ) then
|
|
for index = 1, GetNumLootItems(), 1 do
|
|
LootSlot(index)
|
|
end
|
|
end
|
|
|
|
FishLib:ExtendDoubleClick()
|
|
LureState = 0
|
|
end
|
|
|
|
Fishing.EventsRegistered = {
|
|
GLOBAL_MOUSE_DOWN = false,
|
|
LOOT_OPENED = false,
|
|
}
|
|
|
|
function Fishing:ToggleOptions()
|
|
if E.db.sle.professions.fishing.easyCast and not Fishing.EventsRegistered['GLOBAL_MOUSE_DOWN'] then
|
|
Fishing:RegisterEvent('GLOBAL_MOUSE_DOWN')
|
|
Fishing.EventsRegistered['GLOBAL_MOUSE_DOWN'] = true
|
|
elseif not E.db.sle.professions.fishing.easyCast and Fishing.EventsRegistered['GLOBAL_MOUSE_DOWN'] then
|
|
Fishing:UnregisterEvent('GLOBAL_MOUSE_DOWN')
|
|
Fishing.EventsRegistered['GLOBAL_MOUSE_DOWN'] = false
|
|
end
|
|
|
|
if E.db.sle.professions.fishing.autoLoot and not Fishing.EventsRegistered['LOOT_OPENED'] then
|
|
Fishing:RegisterEvent('LOOT_OPENED')
|
|
Fishing.EventsRegistered['LOOT_OPENED'] = true
|
|
elseif not E.db.sle.professions.fishing.autoLoot and Fishing.EventsRegistered['LOOT_OPENED'] then
|
|
Fishing:UnregisterEvent('LOOT_OPENED')
|
|
Fishing.EventsRegistered['LOOT_OPENED'] = false
|
|
end
|
|
end
|
|
|
|
function Fishing:Initialize()
|
|
if not SLE.initialized then return end
|
|
|
|
Fishing:ToggleOptions()
|
|
FishLib:CreateSAButton()
|
|
FishLib:SetSAMouseEvent(Fishing:ButtonOptions())
|
|
end
|
|
SLE:RegisterModule('Fishing')
|
|
|