mirror of
https://github.com/ornfelt/azerothcore_lua_scripts
synced 2026-08-22 06:26:03 -04:00
278 lines
No EOL
8.6 KiB
Lua
278 lines
No EOL
8.6 KiB
Lua
local AIO = AIO or require("AIO")
|
|
|
|
if AIO.AddAddon() then
|
|
return
|
|
end
|
|
|
|
local RemorseviewHandlers = AIO.AddHandlers("RV", {})
|
|
|
|
local function GetItemInfoTexture(name)
|
|
local _, _, _, _, _, _, _, _, _, texture = GetItemInfo(name);
|
|
return texture
|
|
end
|
|
|
|
-- ========== Containers ==========
|
|
local function ContainerFrame_Update_Hook(frame)
|
|
local id = frame:GetID();
|
|
local name = frame:GetName();
|
|
local itemButton;
|
|
local texture, itemCount, locked, quality, readable;
|
|
for i=1, frame.size, 1 do
|
|
itemButton = getglobal(name.."Item"..i);
|
|
local itemLink = GetContainerItemLink(id, itemButton:GetID());
|
|
|
|
if (itemLink) then
|
|
texture = GetItemInfoTexture(itemLink);
|
|
else
|
|
texture = nil;
|
|
end
|
|
_, itemCount, locked, quality, readable = GetContainerItemInfo(id, itemButton:GetID());
|
|
|
|
SetItemButtonTexture(itemButton, texture);
|
|
SetItemButtonCount(itemButton, itemCount);
|
|
SetItemButtonDesaturated(itemButton, locked, 0.5, 0.5, 0.5);
|
|
|
|
if ( texture ) then
|
|
ContainerFrame_UpdateCooldown(id, itemButton);
|
|
itemButton.hasItem = 1;
|
|
itemButton.locked = locked;
|
|
itemButton.readable = readable;
|
|
else
|
|
getglobal(name.."Item"..i.."Cooldown"):Hide();
|
|
itemButton.hasItem = nil;
|
|
end
|
|
end
|
|
end
|
|
|
|
-- ========== Action Buttons ==========
|
|
local function ActionButton_Update_Hook()
|
|
-- Special case code for bonus bar buttons
|
|
-- Prevents the button from updating if the bonusbar is still in an animation transition
|
|
if ( this.isBonus and this.inTransition ) then
|
|
return;
|
|
end
|
|
|
|
local action = this.action;
|
|
local icon = getglobal(this:GetName().."Icon");
|
|
local texture = GetActionTexture(action);
|
|
local name = this:GetName();
|
|
local type, id, subType = GetActionInfo(action);
|
|
if (texture == "Interface\\Icons\\INV_Misc_QuestionMark") and (type == "item") then
|
|
texture = GetItemInfoTexture(id);
|
|
elseif (texture == "Interface\\Icons\\INV_Misc_QuestionMark") and (type == "spell") then
|
|
local spellName = GetSpellName(id, "General");
|
|
if (spellName == "Attack") then
|
|
texture = GetInventoryItemTexture("player",16);
|
|
elseif (spellName == "Auto Shot") then
|
|
texture = GetInventoryItemTexture("player",18);
|
|
end
|
|
end
|
|
|
|
-- Update icon
|
|
if ( texture ) then
|
|
icon:SetTexture(texture);
|
|
icon:Show();
|
|
else
|
|
icon:Hide();
|
|
end
|
|
|
|
end
|
|
|
|
local function ActionButton_OnEvent_Hook(event)
|
|
if (event == "PLAYER_AURAS_CHANGED") then
|
|
ActionButton_Update();
|
|
end
|
|
end
|
|
|
|
-- ========== Spellbook Attack Button ==========
|
|
local function SpellButton_UpdateButton_Hook()
|
|
local id = SpellBook_GetSpellID(this:GetID());
|
|
local name = this:GetName();
|
|
local iconTexture = getglobal(name.."IconTexture");
|
|
local spellString = getglobal(name.."SpellName");
|
|
local subSpellString = getglobal(name.."SubSpellName");
|
|
|
|
if (SpellBookFrame.bookType == BOOKTYPE_PET) then
|
|
return;
|
|
end
|
|
|
|
local spellName, subSpellName = GetSpellName(id, SpellBookFrame.bookType);
|
|
local texture = GetSpellTexture(id, SpellBookFrame.bookType);
|
|
if (texture == "Interface\\Icons\\INV_Misc_QuestionMark") then
|
|
if (spellName == "Attack") then
|
|
-- Texture for main hand weapon
|
|
texture = GetInventoryItemTexture("player",16);
|
|
elseif (spellName == "Auto Shot") then
|
|
-- Texture for ranged weapon
|
|
texture = GetInventoryItemTexture("player",18);
|
|
end
|
|
|
|
local highlightTexture = getglobal(name.."Highlight");
|
|
local normalTexture = getglobal(name.."NormalTexture");
|
|
-- If no spell, hide everything and return
|
|
if ( not texture or (strlen(texture) == 0) ) then
|
|
iconTexture:Hide();
|
|
spellString:Hide();
|
|
subSpellString:Hide();
|
|
cooldown:Hide();
|
|
autoCastableTexture:Hide();
|
|
autoCastModel:Hide();
|
|
highlightTexture:SetTexture("Interface\\Buttons\\ButtonHilight-Square");
|
|
this:SetChecked(0);
|
|
normalTexture:SetVertexColor(1.0, 1.0, 1.0);
|
|
return;
|
|
end
|
|
|
|
iconTexture:SetTexture(texture);
|
|
iconTexture:Show();
|
|
SpellButton_UpdateSelection();
|
|
end
|
|
end
|
|
local function SpellButton_OnShow_Hook()
|
|
this:RegisterEvent("PLAYER_AURAS_CHANGED");
|
|
end
|
|
local function SpellButton_OnHide_Hook()
|
|
this:UnregisterEvent("PLAYER_AURAS_CHANGED");
|
|
end
|
|
local function SpellButton_OnEvent_Hook(event)
|
|
if (event == "PLAYER_AURAS_CHANGED" ) then
|
|
SpellButton_UpdateButton();
|
|
end
|
|
end
|
|
|
|
-- ========== Bank buttons ==========
|
|
local function BankFrameItemButton_Update_Hook(button)
|
|
local texture = getglobal(button:GetName().."IconTexture");
|
|
local inventoryID = button:GetInventorySlot();
|
|
local textureName = GetInventoryItemTexture("player",inventoryID);
|
|
local slotName = button:GetName();
|
|
local id;
|
|
local slotTextureName;
|
|
button.hasItem = nil;
|
|
|
|
if( button.isBag ) then
|
|
id, slotTextureName = GetInventorySlotInfo(strsub(slotName,10));
|
|
local itemLink = GetInventoryItemLink("player",id)
|
|
if (itemLink) then
|
|
slotTextureName = GetItemInfoTexture(itemLink);
|
|
end
|
|
end
|
|
|
|
local itemLink = GetInventoryItemLink("player",inventoryID)
|
|
if (itemLink) then
|
|
textureName = GetItemInfoTexture(itemLink);
|
|
end
|
|
|
|
|
|
if ( textureName ) then
|
|
texture:SetTexture(textureName);
|
|
texture:Show();
|
|
SetItemButtonCount(button,GetInventoryItemCount("player",inventoryID));
|
|
button.hasItem = 1;
|
|
elseif ( slotTextureName and button.isBag ) then
|
|
texture:SetTexture(slotTextureName);
|
|
SetItemButtonCount(button,0);
|
|
texture:Show();
|
|
else
|
|
texture:Hide();
|
|
SetItemButtonCount(button,0);
|
|
end
|
|
|
|
BankFrameItemButton_UpdateLocked(button);
|
|
end
|
|
|
|
-- ========== Bag Slot Buttons ==========
|
|
local f = CreateFrame("Frame", nil, UIParent);
|
|
local nextUpdate = 1;
|
|
local function SetBagButtonTexture(id)
|
|
local frame = getglobal("CharacterBag"..(id - 1).."SlotIconTexture");
|
|
local name = GetBagName(id);
|
|
if (name) and (frame) then
|
|
local texture = GetItemInfoTexture(name);
|
|
if (frame:GetTexture() ~= texture) then
|
|
frame:SetTexture(texture);
|
|
end
|
|
end
|
|
end
|
|
local function BagSlotButton_UpdateChecked_Hook()
|
|
for i=1, NUM_CONTAINER_FRAMES, 1 do
|
|
SetBagButtonTexture(i);
|
|
end
|
|
end
|
|
function BagSlotButton_OnModifiedClick()
|
|
if ( IsModifiedClick("OPENALLBAGS") ) then
|
|
OpenAllBags();
|
|
end
|
|
BagSlotButton_UpdateChecked();
|
|
end
|
|
f:SetScript("OnUpdate", function (self, elapsed)
|
|
nextUpdate = nextUpdate - elapsed;
|
|
if (nextUpdate < 0) then
|
|
BagSlotButton_UpdateChecked_Hook();
|
|
nextUpdate = 1;
|
|
end
|
|
end);
|
|
|
|
-- =========== Autoequip custom items on right-clicks to bag slots ==========
|
|
local origItemLink;
|
|
local function ContainerFrameItemButton_OnEnter_Hook(self)
|
|
-- DEFAULT_CHAT_FRAME:AddMessage("(ContainerFrameItemButton_OnEnter) "..tostring(self), 1.0, 1.0, 0.2, 1);
|
|
origItemLink = GetContainerItemLink(this:GetParent():GetID(), this:GetID());
|
|
end
|
|
local function ContainerFrameItemButton_OnClick_Hook(button)
|
|
local bagID = this:GetParent():GetID();
|
|
local slot = this:GetID();
|
|
itemLink = GetContainerItemLink(bagID, slot);
|
|
-- DEFAULT_CHAT_FRAME:AddMessage("(ContainerFrameItemButton_OnClick) "..tostring(itemLink)..", "..tostring(origItemLink), 1.0, 1.0, 0.2, 1);
|
|
if (button == "RightButton") and (itemLink == origItemLink) then
|
|
local _, _, _, _, _, itemType = GetItemInfo(itemLink);
|
|
if (itemType == "Armor") or (itemType == "Weapon") then
|
|
PickupContainerItem(bagID,slot)
|
|
AutoEquipCursorItem();
|
|
-- origItemLink = GetContainerItemLink(this:GetParent():GetID(), this:GetID());
|
|
end
|
|
end
|
|
origItemLink = itemLink;
|
|
end
|
|
|
|
|
|
-- Secure Hooks
|
|
hooksecurefunc("ActionButton_OnEvent", ActionButton_OnEvent_Hook);
|
|
hooksecurefunc("ActionButton_Update", ActionButton_Update_Hook);
|
|
hooksecurefunc("BankFrameItemButton_Update", BankFrameItemButton_Update_Hook);
|
|
hooksecurefunc("BagSlotButton_UpdateChecked", BagSlotButton_UpdateChecked_Hook);
|
|
hooksecurefunc("ContainerFrame_Update", ContainerFrame_Update_Hook);
|
|
hooksecurefunc("ContainerFrameItemButton_OnEnter", ContainerFrameItemButton_OnEnter_Hook);
|
|
hooksecurefunc("ContainerFrameItemButton_OnClick", ContainerFrameItemButton_OnClick_Hook);
|
|
hooksecurefunc("SpellButton_OnEvent", SpellButton_OnEvent_Hook);
|
|
hooksecurefunc("SpellButton_OnHide", SpellButton_OnHide_Hook);
|
|
hooksecurefunc("SpellButton_OnShow", SpellButton_OnShow_Hook);
|
|
-- hooksecurefunc("SpellButton_UpdateButton", SpellButton_UpdateButton_Hook);
|
|
|
|
if( DEFAULT_CHAT_FRAME ) then
|
|
DEFAULT_CHAT_FRAME:AddMessage("|cffff8000Remorse View has loaded.|r");
|
|
end
|
|
|
|
WOW_GetContainerItemInfo = GetContainerItemInfo;
|
|
|
|
function GetContainerItemInfo(index, id)
|
|
|
|
local texture, itemCount, locked, quality, readable;
|
|
texture, itemCount, locked, quality, readable = WOW_GetContainerItemInfo(index, id);
|
|
|
|
if( texture and string.find(texture,"INV_Misc_QuestionMark") ) then
|
|
local itemlink = GetContainerItemLink(index, id);
|
|
local itemid = 0;
|
|
|
|
local itemName, itemLink, itemRarity, itemLevel, itemMinLevel, itemType, itemSubType, itemStackCount,
|
|
itemEquipLoc, itemTexture = GetItemInfo(itemlink)
|
|
|
|
if( itemlink ) then
|
|
_, _, itemid = string.find(itemlink, "Hitem:(%d+):");
|
|
texture = itemTexture;
|
|
end
|
|
end
|
|
|
|
return texture, itemCount, locked, quality, readable;
|
|
|
|
end |