SpeedyAutoLoot

SpeedyAutoLoot

SpeedyAutoLoot自动拾取插件

SpeedyAutoLoot.lua

local AutoLoot = CreateFrame('Frame')

SpeedyAutoLootDB = SpeedyAutoLootDB or {}

SpeedyAutoLootDB.global = SpeedyAutoLootDB.global or {}

local BACKPACK_CONTAINER = BACKPACK_CONTAINER

local LOOT_SLOT_CURRENCY = LOOT_SLOT_CURRENCY

local LOOT_SLOT_ITEM = LOOT_SLOT_ITEM

local LOOT_SLOT_MONEY = LOOT_SLOT_MONEY

local NUM_BAG_SLOTS = NUM_BAG_SLOTS

local GetContainerNumFreeSlots = GetContainerNumFreeSlots

local GetCVarBool = GetCVarBool

local GetItemCount = GetItemCount

local GetItemInfo = GetItemInfo

local GetLootSlotInfo = GetLootSlotInfo

local GetLootSlotLink = GetLootSlotLink

local GetLootSlotType = GetLootSlotType

local GetNumLootItems = GetNumLootItems

local GetCursorPosition = GetCursorPosition

local IsFishingLoot = IsFishingLoot

local IsModifiedClick = IsModifiedClick

local LootSlot = LootSlot

local PlaySound = PlaySound

local SetCVar = SetCVar

local find = string.find

local select = select

local tContains = tContains

local errorList = { ERR_INV_FULL, ERR_ITEM_MAX_COUNT }

local fishingChannel = 'Master'

function AutoLoot:PlayFishingSound()

if IsFishingLoot() then

return (fishingChannel and PlaySound(SOUNDKIT.FISHING_REEL_IN, fishingChannel)) or PlaySound(SOUNDKIT.FISHING_REEL_IN)

end

end

function AutoLoot:PlayInventoryFullSound()

if SpeedyAutoLootDB.global.enableSound and not self.isItemLocked then

PlaySound(SpeedyAutoLootDB.global.InventoryFullSound, 'Master')

end

end

function AutoLoot:LootUnderMouse(self, parent)

if(GetCVar('lootUnderMouse') == '1') then

local x, y = GetCursorPosition()

x = x / self:GetEffectiveScale()

y = y / self:GetEffectiveScale()

self:ClearAllPoints()

self:SetPoint('TOPLEFT', UIParent, 'BOTTOMLEFT', x - 40, y + 20)

self:GetCenter()

self:Raise()

else

self:ClearAllPoints()

self:SetPoint('TOPLEFT', parent, 'TOPLEFT')

end

end

function AutoLoot:CalculateFreeSlots()

local numTotalFree, numFreeSlots, bagFamily = 0

for i = BACKPACK_CONTAINER, NUM_BAG_SLOTS do

numFreeSlots, bagFamily = GetContainerNumFreeSlots(i)

if bagFamily == 0 then

numTotalFree = numTotalFree + numFreeSlots

end

end

return numTotalFree

end

function AutoLoot:ProcessLoot(itemLink, quantity, slotType)

if slotType == LOOT_SLOT_MONEY then

return true

elseif slotType == LOOT_SLOT_CURRENCY then

return true

elseif slotType == LOOT_SLOT_ITEM then

if self:CalculateFreeSlots() > 0 then

return true

end

local have = (GetItemCount(itemLink) or 0)

if have > 0 then

local itemStackCount = (select(8,GetItemInfo(itemLink)) or 0)

if itemStackCount > 1 then

while have > itemStackCount do

have = have - itemStackCount

end

local remain = itemStackCount - have

if remain >= quantity then

return true

end

end

end

end

end

function AutoLoot:ShowLootFrame(show)

if self.XLoot then

if show then

self:LootUnderMouse(XLootFrame, UIParent)

XLootFrame:SetParent(UIParent)

XLootFrame:SetFrameStrata('DIALOG')

self.isHidden = false

else

XLootFrame:SetParent(self)

self.isHidden = true

end

elseif self.ElvUI then

if show then

self:LootUnderMouse(ElvLootFrame, ElvLootFrameHolder)

ElvLootFrame:SetParent(ElvLootFrameHolder)

ElvLootFrame:SetFrameStrata('HIGH')

self.isHidden = false

else

ElvLootFrame:SetParent(self)

self.isHidden = true

end

elseif LootFrame:IsEventRegistered('LOOT_SLOT_CLEARED') then

LootFrame.page = 1;

if show then

self:LootUnderMouse(LootFrame, UIParent)

LootFrame_Show(LootFrame)

self.isHidden = false

else

self.isHidden = true

end

end

self:PlayFishingSound()

end

function AutoLoot:LootItems()

local numItems = GetNumLootItems() or 0

if numItems > 0 then

for i = numItems, 1, -1 do

local itemLink = GetLootSlotLink(i)

local slotType = GetLootSlotType(i)

local quantity, _, _, locked, isQuestItem = select(3, GetLootSlotInfo(i))

if locked then

self.isItemLocked = locked

elseif isQuestItem or self:ProcessLoot(itemLink, quantity, slotType) then

numItems = numItems - 1

LootSlot(i)

end

end

if numItems > 0 then

self:ShowLootFrame(true)

self:PlayInventoryFullSound()

end

end

end

function AutoLoot:OnEvent(e, ...)

if e == 'PLAYER_LOGIN' then

if XLootFrame then

self.XLoot = true

elseif ElvUI and ElvUI[1].private.general.loot then

self.ElvUI = true

end

if SpeedyAutoLootDB.global.alwaysEnableAutoLoot then

SetCVar('autoLootDefault',1)

end

LootFrame:UnregisterEvent('LOOT_OPENED')

self:ShowLootFrame(false)

elseif (e == 'LOOT_READY' or e == 'LOOT_OPENED') and not self.isLooting then

self.isLooting = true

local autoLoot = ...

if autoLoot or GetCVarBool('autoLootDefault') ~= IsModifiedClick('AUTOLOOTTOGGLE') then

self:LootItems()

else

self:ShowLootFrame(true)

end

elseif e == 'LOOT_CLOSED' then

self.isLooting = false

self.isHidden = false

self.isItemLocked = nil

self:ShowLootFrame(false)

elseif e == 'UI_ERROR_MESSAGE' and tContains(errorList, select(2,...)) then

if self.isLooting and self.isHidden then

self:ShowLootFrame(true)

self:PlayInventoryFullSound()

end

end

end

SLASH_SPEEDYAUTOLOOT1, SLASH_SPEEDYAUTOLOOT2, SLASH_SPEEDYAUTOLOOT3 = '/sal', '/speedyloot', '/speedyautoloot'

function SlashCmdList.SPEEDYAUTOLOOT(msg)

local _, _, cmd, args = find(msg, '%s?(%w+)%s?(.*)')

if not cmd or cmd == '' or cmd == 'help' then

print('|cffEEE4AESpeedy AutoLoot:|r |cffEF6D6D/sal /speedyautoloot /speedyloot|r')

print(' |cffEF6D6D/sal auto -|r |cffFAD1D1Enable Auto Looting for new/all characters|r')

print(' |cffEF6D6D/sal sound -|r |cffFAD1D1Play a Sound when Inventory is full while looting|r')

print(' |cffEF6D6D/sal set (SoundID) -|r |cffFAD1D1Set a Sound (SoundID), Example: /sal set 139|r')

elseif cmd == 'auto' then

if SpeedyAutoLootDB.global.alwaysEnableAutoLoot then

SpeedyAutoLootDB.global.alwaysEnableAutoLoot = false

print('|cffEEE4AESpeedy AutoLoot:|r |cffB6B6B6Auto Loot for all Characters disabled.')

else

SpeedyAutoLootDB.global.alwaysEnableAutoLoot = true

print('|cffEEE4AESpeedy AutoLoot:|r |cff37DB33Auto Loot for all Characters enabled.')

end

elseif cmd == 'sound' then

if SpeedyAutoLootDB.global.enableSound then

SpeedyAutoLootDB.global.enableSound = false

print('|cffEEE4AESpeedy AutoLoot:|r |cffB6B6B6Don\'t play a sound when inventory is full.')

else

if not SpeedyAutoLootDB.global.InventoryFullSound then

SpeedyAutoLootDB.global.InventoryFullSound = 139

end

SpeedyAutoLootDB.global.enableSound = true

print('|cffEEE4AESpeedy AutoLoot:|r |cff37DB33Play a sound when inventory is full.')

end

elseif cmd == 'set' and args ~= '' then

local SoundID = tonumber(args:match('%d+'))

if SoundID then

SpeedyAutoLootDB.global.InventoryFullSound = tonumber(args:match('%d+'))

PlaySound(SoundID, 'Master')

print('|cffEEE4AESpeedy AutoLoot: Set Sound|r |cff37DB33'..SoundID..'|r')

end

end

end

function AutoLoot:OnLoad()

self:SetToplevel(true)

self:Hide()

self:SetScript('OnEvent', function(_, ...)

self:OnEvent(...)

end)

for _,e in next, ({ 'PLAYER_LOGIN',

'LOOT_READY',

'LOOT_OPENED',

'LOOT_CLOSED',

'UI_ERROR_MESSAGE' }) do

self:RegisterEvent(e)

end

end

AutoLoot:OnLoad()

SpeedyAutoLoot.toc

## Interface: 11302

## Title: |cffEEE4AESpeedy AutoLoot|r

## Notes: |cff58C6FALoot at ludicrous speed!|r

## Author: Yuyuli

## Version: 2.0.9

## SavedVariables: SpeedyAutoLootDB

SpeedyAutoLoot.lua

// 相关文章

成为一名道士需要具备的条件
365bet足彩论坛

成为一名道士需要具备的条件

⌛ 07-04 ⚠️ 6867
中国复姓大全有多少(盘点历史上著名二十四家复姓与杰出代表人物)
放弃L5,苹果汽车被曝史诗降级,价格也更便宜
365bet足彩论坛

放弃L5,苹果汽车被曝史诗降级,价格也更便宜

⌛ 07-19 ⚠️ 1031