vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
---------------------------------------------
-- Hook functions to track picked up items --
---------------------------------------------
SAS_original_PickupAction = PickupAction;
function SAS_PickupAction(slot)
        local PlrName = SASFrame.PlrName;
        local itemInfo = SAS_GetMissingItemInfo( slot );
        if ( not SAS_SwappingSet ) then
                SAS_SavedPickup = SAS_BuildActionInfo(SAS_GetActionInfo(slot));
                if ( SAS_SavedPickup ) then
                        SASDebug("Picked up action "..SAS_ParseActionInfo(SAS_SavedPickup, 1).." from slot "..slot );
                        SAS_ReturnAction = slot;
                        SASFakeDrag_Drop(1);
                end
        end
        if ( itemInfo and HasAction(slot) ) then
                SASDebug( "Removing missing item from action "..slot..". Attempted to pick up." );
                SAS_Saved[PlrName]["MissingItems"][slot] = nil;
                SAS_ForceUpdate( slot );
        end
        SAS_original_PickupAction(slot);
end
PickupAction = SAS_PickupAction;

SAS_original_PlaceAction = PlaceAction;
function SAS_PlaceAction(slot)
        if ( not SAS_SwappingSet ) then
                SAS_ReturnAction = nil;
                SASDebug("Place action "..slot);
                SAS_SavedPickup = SAS_BuildActionInfo(SAS_GetActionInfo(slot));
                if ( SAS_SavedPickup ) then
                        SASDebug("Placed action "..SAS_ParseActionInfo(SAS_SavedPickup, 1).." from slot "..slot );
                        SASFakeDrag_Drop(1);
                end
        end
        SAS_original_PlaceAction(slot);
end
PlaceAction = SAS_PlaceAction;

SAS_original_UseAction = UseAction;
function SAS_UseAction(slot, check, onSelf)
        if ( not SAS_SwappingSet ) then
                SAS_ReturnAction = nil;
                SAS_SavedPickup = SAS_BuildActionInfo(SAS_GetActionInfo(slot));
                if ( SAS_SavedPickup ) then
                        SASFakeDrag_Drop(1);
                        SASDebug("Use action "..SAS_ParseActionInfo(SAS_SavedPickup, 1).." from slot "..slot );
                end
        end
        SAS_original_UseAction(slot, check, onSelf);
end
UseAction = SAS_UseAction;

SAS_original_PickupContainerItem = PickupContainerItem;
function SAS_PickupContainerItem( bag, slot )
        if ( not SAS_SwappingSet ) then
                SAS_ReturnAction = nil;
                local itemLink = GetContainerItemLink( bag, slot );
                if ( itemLink ) then
                        local name = SAS_FindName(itemLink);
                        local link = SAS_FindLink(itemLink);
                        local texture = GetContainerItemInfo( bag, slot );
                        SAS_SavedPickup = SAS_BuildActionInfo( name, texture, nil, link );
                        SASFakeDrag_Drop(1);
                        SASDebug("Pick up container item "..name.." from "..bag..", "..slot );
                end
        end
        SAS_original_PickupContainerItem( bag, slot );
end
PickupContainerItem = SAS_PickupContainerItem;

SAS_original_PickupInventoryItem = PickupInventoryItem;
function SAS_PickupInventoryItem(index)
        if ( not SAS_SwappingSet ) then
                SAS_ReturnAction = nil;
                local itemLink = GetInventoryItemLink( "player", index );
                if ( itemLink ) then
                        local name = SAS_FindName(itemLink);
                        local link = SAS_FindLink(itemLink);
                        local texture = GetInventoryItemTexture( "player", index );
                        SAS_SavedPickup = SAS_BuildActionInfo( name, texture, nil, link );
                        SASFakeDrag_Drop(1);
                        SASDebug("Pick up inventory item "..name.." from "..index );
                end
        end
        SAS_original_PickupInventoryItem(index);
end
PickupInventoryItem = SAS_PickupInventoryItem;

SAS_original_PickupMacro = PickupMacro;
function SAS_PickupMacro(index)
        if ( not SAS_SwappingSet ) then
                SAS_ReturnAction = nil;
                local name, texture = GetMacroInfo(index);
                local macro = GetMacroIndexByName(name);
                if ( name ) then
                        SAS_SavedPickup = SAS_BuildActionInfo( name, texture, nil, nil, macro );
                        SASFakeDrag_Drop(1);
                        SASDebug("Pick up macro "..name.." from "..index );
                end
        end
        SAS_original_PickupMacro(index);
end
PickupMacro = SAS_PickupMacro;

SAS_original_PickupSpell = PickupSpell;
function SAS_PickupSpell(id, bookType)
        if ( not SAS_SwappingSet ) then
                SAS_ReturnAction = nil;
                local name, rank = GetSpellName( id, bookType );
                local texture = GetSpellTexture( id, bookType );
                if ( name ) then
                        SAS_SavedPickup = SAS_BuildActionInfo( name, texture, rank );
                        SASFakeDrag_Drop(1);
                        SASDebug("Pick up spell "..name.." from "..id);
                        local passive = IsSpellPassive( id, bookType );
                        if ( passive ) then
                                SASDebug("Spell is passive? Why can we pick this up?");
                        end
                        SAS_SavedPickup = SAS_BuildActionInfo( name, texture, rank, nil, nil, passive );
                end
        end
        SAS_original_PickupSpell(id, bookType);
end
PickupSpell = SAS_PickupSpell;


--------------------------------------------
-- Hook functions to drop fake drag frame --
--------------------------------------------

SAS_original_WorldFrameOnMouseDown = WorldFrame:GetScript("OnMouseDown");
WorldFrame:SetScript("OnMouseDown", function()
        SASFakeDrag_Drop(1);
        if ( SAS_original_WorldFrameOnMouseDown ) then
                SAS_original_WorldFrameOnMouseDown();
        end
end);

-------------------------------------------
-- Hook functions to show missing items --
-------------------------------------------

SAS_original_GetActionTexture = GetActionTexture;
function SAS_GetActionTexture( id )
        local PlrName = SASFrame.PlrName;
        local texture = SAS_original_GetActionTexture( id );
        local itemInfo = SAS_GetMissingItemInfo( id );
        if ( itemInfo ) then
                if ( texture ) then
                        SASDebug( "Removing missing item from action "..id..". Real action exists." );
                        SAS_Saved[PlrName]["MissingItems"][id] = nil;
                        SAS_ForceUpdate( id );
                else
                        return SAS_FullPath(SAS_ParseActionInfo(itemInfo, 2));
                end
        end
        return texture;
end
GetActionTexture = SAS_GetActionTexture;

SAS_original_IsConsumableAction = IsConsumableAction;
function SAS_IsConsumableAction( id )
        if ( SAS_GetMissingItemInfo( id ) ) then
                return 1;
        end
        return SAS_original_IsConsumableAction( id );
end
IsConsumableAction = SAS_IsConsumableAction;

SAS_original_HasAction = HasAction;
function SAS_HasAction( id )
        if ( SAS_GetMissingItemInfo( id ) ) then
                return 1;
        end
        return SAS_original_HasAction( id );
end
HasAction = SAS_HasAction;

SAS_original_SetAction = GameTooltip.SetAction;
function SAS_SetAction( this, id )
        local PlrName = SASFrame.PlrName;
        local itemInfo = SAS_GetMissingItemInfo( id );
        if ( itemInfo ) then
                local name, link = SAS_ParseActionInfo( itemInfo, 1, 4);
                if ( link and GetItemInfo("item:"..link) ) then
                        TooltipReturn = GameTooltip:SetHyperlink("item:"..link);
                        if ( not SAS_Saved[PlrName]["HideFakeItemTooltips"] ) then
                                SASTooltipAddLine( SAS_TEXT_TOOLTIP_GENERATEDACTION );
                                if ( IsShiftKeyDown() or SAS_IsValidAction ) then
                                        SASTooltipAddLine( SAS_TEXT_TOOLTIP_FAKEACTIONWARN );
                                end
                        end
                        GameTooltip:Show();
                        --return 1;
                        return;
                else
                        TooltipReturn = GameTooltip:SetText( name, 1, 1, 1 );
                        SASTooltipAddLine( SAS_TEXT_TOOLTIP_NOTVALID );
                        if ( not SAS_Saved[PlrName]["HideFakeItemTooltips"] ) then
                                SASTooltipAddLine( SAS_TEXT_TOOLTIP_GENERATEDACTION );
                                if ( IsShiftKeyDown() or SAS_IsValidAction ) then
                                        SASTooltipAddLine( SAS_TEXT_TOOLTIP_FAKEACTIONWARN );
                                end
                        end
                        GameTooltip:Show();
                        --return 1;
                        return;
                end
        end
        return SAS_original_SetAction( this, id );
end
GameTooltip.SetAction = SAS_SetAction;