vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:

function tradeDispenserOnLoad()
        --math.randomseed(floor(GetTime()));                    -- initialize the randomizer
        tradeDispenser:RegisterEvent("VARIABLES_LOADED")
        tradeDispenser:RegisterEvent("TRADE_SHOW")                      -- used to activate the automated trade
        tD_Temp.timeSlice = 0
        tD_Temp.broadcastSlice = 0
        tD_Temp.Target = {
                ["Name"]=nil,
                ["EnglishClass"]=nil,
                ["Class"]=nil,
                ["Level"]=nil,
        };              
end


function tradeDispenser_Eventhandler()
        if (tD_Temp.isEnabled) then
                tradeDispenserVerbose(1,"Gonna activate some events");
                --tradeDispenser:RegisterEvent("TRADE_SHOW")                    -- used to activate the automated trade
                tradeDispenser:RegisterEvent("TRADE_CLOSED")
                tradeDispenser:RegisterEvent("TRADE_ACCEPT_UPDATE")   -- used, if the opposite player changes the items -> re-accept
                tradeDispenser:RegisterEvent("UI_ERROR_MESSAGE")
                tradeDispenser:RegisterEvent("UI_INFO_MESSAGE")
                tD_Temp.InitiateTrade=nil;
                tD_Temp.Countdown=-1;           
        else
                tradeDispenserVerbose(1,"Gonna deactivate some events");
                --tradeDispenser:UnregisterEvent("TRADE_SHOW")                  -- used to activate the automated trade
                tradeDispenser:UnregisterEvent("TRADE_CLOSED")
                tradeDispenser:UnregisterEvent("TRADE_ACCEPT_UPDATE")   -- used, if the opposite player changes the items -> re-accept
                tradeDispenser:UnregisterEvent("UI_ERROR_MESSAGE")
                tradeDispenser:UnregisterEvent("UI_INFO_MESSAGE")
                tradeDispenser:UnregisterEvent("PLAYER_TARGET_CHANGED")
        end
        tradeDispenserVerbose(2,"TRADE_SHOW, TRADE_CLOSED, TRADE_ACCEPT_UPDATE, UI_ERROR_MESSAGE, UI_INFO_MESSAGE");
end


function tradeDispenserSetFaction() 
        --tradeDispenserVerbose(0,"Players Faction is: "..UnitFactionGroup("player"));
        if (tradeDispenserProfileDDframe) then
                tradeDispenserProfileDDframeSub9:SetText(tD_Loc.profile[UnitFactionGroup("player")]);
        end
        if (tD_CharDatas.ActualProfile==9) then
                tradeDispenserProfileDDTitleLbL:SetText(tD_Loc.profile[UnitFactionGroup("player")]);
        end
        
end



function tradeDispenserOnEvent(event)
        if (event == "VARIABLES_LOADED") then
                tradeDispenserVerbose(0,tD_Loc.logon.welcome);
                tradeDispenser_OnVariablesLoaded()                      -- found in tradeDispenser_initialize
        end
        if (event == "PLAYER_TARGET_CHANGED") then
                if (UnitIsPlayer("target") and UnitIsFriend("target", "player")) then
                        tradeDispenserBanlistName:SetText(UnitName("target"));
                end
        end
        
        if (event=="TRADE_SHOW" and (tD_Temp.isEnabled or tD_CharDatas.ClientInfos) and WorldMapFrame:IsVisible()) then
                ToggleWorldMap();
                tradeDispenserVerbose(1, " Closed the Map to avoid bugs. Sorry");
        end
                
        if (event == "TRADE_SHOW" and (not tD_Temp.isEnabled) and tD_CharDatas.ClientInfos) then
                local targetClass, targetEnglishClass = UnitClass("NPC");
                local guildName2, guildRankName2, guildRankIndex2 = GetGuildInfo("NPC");                
                local guildName3 = "";
                if (guildName2~=nil) then guildName3 = "<"..guildName2.."> ";   end             
                DEFAULT_CHAT_FRAME:AddMessage(tD_Loc.Opposite.." "..UnitName("NPC").." "..guildName3.." -  "..targetClass.." Level "..UnitLevel("NPC"),1,1,0);
        end
        
        
        if (not tD_Temp.isEnabled) then
                return
        end
        
        if ((event=="UI_ERROR_MESSAGE" or event=="UI_INFO_MESSAGE") and tD_Temp.Target.Name and arg1) then
                if (strfind(arg1,tD_Loc.UImessages.cancelled)~=nil or strfind(arg1,tD_Loc.UImessages.failed)~=nil) then
                        tradeDispenserVerbose(2,arg1);
                        tD_Temp.Target.Name=nil;
                end
                if (strfind(arg1,tD_Loc.UImessages.complete)~=nil) then
                        tradeDispenserVerbose(2,arg1);
                        tradeDispenserVerbose(1,"Gonna Registrate the Player "..tD_Temp.Target.Name);
                        tradeDispenserAddClient(tD_Temp.Target.Name);
                end
        end


        if (event == "TRADE_SHOW" and tD_Temp.isEnabled and tD_Temp.InitiateTrade==nil) then
                if (CursorHasItem()) then   PutItemInBackpack()  end    -- if the player's got an item on the cursor, tD's not running correctly
                if (UnitAffectingCombat("Player")==nil) then TargetUnit("NPC") end      -- target player, if you're not in combat
                tD_Temp.Target = {};
                tD_Temp.Target.Name     = UnitName("NPC");
                tD_Temp.Target.Level    = UnitLevel("NPC");
                tD_Temp.Target.Class, tD_Temp.Target.EnglishClass = UnitClass("NPC");
                
                if (not tradeDispenserTradeControlChecker()) then
                        tD_Temp.Target.Name=nil;
                        CloseTrade();
                else
                        local itemsToTrade = tradeDispenserCompileProfile();
                        if (itemsToTrade) then
                                if (itemsToTrade==0) then               -- no items to trade - tradeDispenser should be inactive
                                        tradeDispenserVerbose(0,tD_Loc.noItemsToTrade);
                                        tD_Temp.Target.Name=nil;
                                else
                                        tD_Temp.timeSlice = 0
                                        tD_Temp.tradeState = "populate"
                                        tD_Temp.tradeData = {}
                                        tD_Temp.tradeData.slotID = 1
                                        tD_Temp.tradeData.numAttempts = 0
                                        tD_Temp.tradeData.containerLocation = nil
                                end
                        end
                end
        end
        if (event == "TRADE_ACCEPT_UPDATE") then
                tradeDispenserVerbose(1,"TRADE_ACCEPT_UPDATE: Player="..arg1.." - Target="..arg2);
                if (arg1==0 and arg2==1 and tD_CharDatas.AutoAccept) then 
                        tradeDispenserAccept()
                end
                if (arg1==1 and arg2==0 and tD_CharDatas.TimelimitCheck) then
                        tradeDispenserStartTimelimiter()
                end
        end
        if (event == "TRADE_CLOSED") then
                tD_Temp.tradeState = nil
                tD_Temp.tradeData = nil
                tD_Temp.InitiateTrade=nil;
                tD_Temp.Countdown=-1;
                tradeDispenserVerbose(1,"Trade Closed")

                --if (UnitIsPlayer("target")) then TargetLastEnemy() end
        end
end


function tradeDispenserAddClient(name)
        if (not name) then return end
        
        local i=0
        local index=nil;
        while (tD_Temp.RegUser[i]~=nil) do
                tradeDispenserVerbose(3,"Registred Player at index "..i.." is: "..tD_Temp.RegUser[i].name);
                if (tD_Temp.RegUser[i].name == name) then
                        tradeDispenserVerbose(2,name.." found in the List at position "..i);
                        index=i;
                end
                i=i+1;
        end
        
        if (index==nil) then
                tradeDispenserVerbose(2,name.." was unregistred!  New Registration-Index is: "..i);
                tD_Temp.RegUser[i]= {
                        ["name"] = name,        ["trades"] = 1
                }
        else
                tD_Temp.RegUser[index].trades = tD_Temp.RegUser[index].trades+1;
        end
end



function tradeDispenserClick(slotID)
        MoneyInputFrame_ClearFocus(tradeDispenserMoneyFrame)
                
        ClickTradeButton(slotID)
        local itemName, itemTexture, itemCount = GetTradePlayerItemInfo(slotID)
        local itemLink = GetTradePlayerItemLink(slotID)

        if ( itemName ) then
                ClickTradeButton(slotID)
                local i=tD_CharDatas.ActualProfile;             
                tD_CharDatas.profile[tD_CharDatas.ActualRack][i][slotID] = {}
                tD_CharDatas.profile[tD_CharDatas.ActualRack][i][slotID].itemLink = itemLink
                tD_CharDatas.profile[tD_CharDatas.ActualRack][i][slotID].itemName = itemName
                tD_CharDatas.profile[tD_CharDatas.ActualRack][i][slotID].itemTexture = itemTexture
                tD_CharDatas.profile[tD_CharDatas.ActualRack][i][slotID].itemCount = itemCount
        else
                tD_CharDatas.profile[tD_CharDatas.ActualRack][tD_CharDatas.ActualProfile][slotID]=nil
        end
        tradeDispenserVerbose(2, "Recieved Item on Slot "..slotID);
        tradeDispenserUpdate()
end


function tradeDispenserUpdate()
        local ActPro=tD_CharDatas.ActualProfile;

        MoneyInputFrame_ClearFocus(tradeDispenserMoneyFrame)
        if (tradeDispenserProfileDDframe) then tradeDispenserProfileDDframe:Hide(); end
        if (tradeDispenserRackDDframe) then tradeDispenserRackDDframe:Hide(); end
        
        
        if (tradeDispenserSettingsChannelDDframe) then tradeDispenserSettingsChannelDDframe:Hide(); end
        for slotID=1,6 do
                local buttonText = getglobal("tradeDispenserItem"..slotID.."Name")
                local itemButton = getglobal("tradeDispenserItem"..slotID.."ItemButton")
                
                if ( tD_CharDatas.profile and tD_CharDatas.profile[tD_CharDatas.ActualRack] and 
                         tD_CharDatas.profile[tD_CharDatas.ActualRack][ActPro] and
                     tD_CharDatas.profile[tD_CharDatas.ActualRack][ActPro][slotID] and 
                         tD_CharDatas.profile[tD_CharDatas.ActualRack][ActPro][slotID].itemName ) then
                        local temp = tD_CharDatas.profile[tD_CharDatas.ActualRack][ActPro][slotID];
                        tradeDispenserVerbose(3,"tradeDispenserUpdate: slotID '"..slotID.."' is used")
                        buttonText:SetText(temp.itemName)
                        SetItemButtonTexture(itemButton, temp.itemTexture)
                        SetItemButtonCount(itemButton, temp.itemCount)
                else
                        tradeDispenserVerbose(3,"tradeDispenserUpdate: slotID '"..slotID.."' is free")
                        buttonText:SetText("")
                        SetItemButtonTexture(itemButton, nil)
                        SetItemButtonCount(itemButton, nil)
                end
        end
        
        if (tD_Temp.isVisible) then     tradeDispenser:Show()  
        else
                if (tradeDispenserTradeControl) then
                        tradeDispenser:Hide()   
                        if (not tradeDispenserMessages:IsShown()) then
                                tradeDispenserSettings:Hide();
                                tradeDispenserTradeControl:Hide()
                                tradeDispenserSettingsBtn:UnlockHighlight();
                                tradeDispenserTradeControlBtn:UnlockHighlight();
                        end
                end
        end
        
        if (tD_Temp.isEnabled) then     
                tradeDispenserState:SetText(tD_Loc.buttons.enabled)
                tradeDispenserState:LockHighlight();
        else    
                tradeDispenserState:SetText(tD_Loc.buttons.disabled)
                tradeDispenserState:UnlockHighlight();
        end
                
        if (tD_CharDatas.broadcastSlice) then
                if (tD_CharDatas.broadcastSlice < 0) then
                        tD_CharDatas.broadcastSlice = 0
                elseif (tD_CharDatas.broadcastSlice > tradeDispenser_MaxBroadcastLength*60) then
                        tD_CharDatas.broadcastSlice = tradeDispenser_MaxBroadcastLength*60
                end
        else
                tD_CharDatas.broadcastSlice = math.floor(tradeDispenser_MaxBroadcastLength/2)
        end
        
        if (tD_CharDatas.AutoBroadcast) then
                tradeDispenserSettingsBroadcastTimer:Show();
                tradeDispenserSettingsBroadcastCheck:SetChecked(1);
        else
                tradeDispenserSettingsBroadcastTimer:Hide();
                tradeDispenserSettingsBroadcastCheck:SetChecked(0);
        end
        
        local tmp = tD_CharDatas.ActualProfile;
        if (tD_CharDatas.profile and tD_CharDatas.profile[tD_CharDatas.ActualRack] and tmp and tD_CharDatas.profile[tD_CharDatas.ActualRack][tmp].Charge) then
                MoneyInputFrame_SetCopper(tradeDispenserMoneyFrame, tD_CharDatas.profile[tD_CharDatas.ActualRack][tmp].Charge)
        end
        
        local s = 1
        if (tD_CharDatas.ActualRack) then
                s = tradeDispenserRackColor[tD_CharDatas.ActualRack]
        end
        local r,g,b = 0.8,0.8,0.8;
        if (tD_Temp.isEnabled) then
                r=s.r; g=s.g; b=s.b;
        end
                        
        tradeDispenserBkg1:SetVertexColor(r,g,b,1);
        tradeDispenserBkg2:SetVertexColor(r,g,b,1);
        tradeDispenserBkg3:SetVertexColor(r,g,b,1);
end


function tradeDispenser_ResetFrames()
        tradeDispenser:ClearAllPoints()
        tradeDispenser:SetPoint("CENTER", "UIParent", "CENTER", 0, 0)
        tradeDispenserMessages:ClearAllPoints()
        tradeDispenserMessages:SetPoint("CENTER", "UIParent", "CENTER", 0, 0)
        tradeDispenserOSD:ClearAllPoints()
        tradeDispenserOSD:SetPoint("LEFT", "UIParent", "LEFT", 15, 0)
        tradeDispenserVerbose(0,tD_Loc.resetframes)
end



SLASH_TRADE_DISPENSER1 = "/tradeDispenser"
SLASH_TRADE_DISPENSER2 = "/td"
SlashCmdList["TRADE_DISPENSER"] = function(msg) 
        tradeDispenser_SlashCommand(msg)
end


function tradeDispenser_SlashCommand(msg)
        if (not msg) then tradeDispenser_Print(tD_Loc.help) 
        else
                local command=string.lower(msg);
                if (command=="config") then
                        tD_Temp.isVisible = not tD_Temp.isVisible;
                        tradeDispenserMessages:Hide();
                        tradeDispenserUpdate();
                        tradeDispenserOSD_OnUpdate();
                elseif (command=="toggle") then
                        tD_Temp.isEnabled = not tD_Temp.isEnabled;
                        if (tD_Temp.isEnabled) then
                                DEFAULT_CHAT_FRAME:AddMessage(tD_Loc.activated)
                        else
                                DEFAULT_CHAT_FRAME:AddMessage(tD_Loc.deactivated)
                        end
                        tradeDispenser_Eventhandler();
                        tradeDispenserUpdate();
                        tradeDispenserOSD_OnUpdate();
                elseif (command=="broadcast") then
                        if (tD_Temp.isEnabled) then
                                tradeDispenserBroadcastItems()
                        else
                                DEFAULT_CHAT_FRAME:AddMessage(tD_Loc.OSD.notenabled)
                        end
                elseif (command=="osd") then
                        tD_CharDatas.OSD.isEnabled = not tD_CharDatas.OSD.isEnabled;
                        tradeDispenserUpdate();
                        tradeDispenserSettings_OnUpdate();
                        tradeDispenserOSD_OnUpdate();
                elseif (command=="about") then tradeDispenser_Print(tD_Loc.about)
                elseif (command=="resetpos") then tradeDispenser_ResetFrames()
                elseif (string.sub(command, 1,7)=="verbose") then
                        local temp=tonumber(string.sub(command, 8,10));
                        if (not temp) then
                                tradeDispenserVerbose(0, tD_Loc.verbose.isset..tD_GlobalDatas.Verbose);
                        else 
                                tD_GlobalDatas.Verbose=temp;
                                tradeDispenserVerbose(0,tD_Loc.verbose.setto..tD_GlobalDatas.Verbose);
                        end
                else    tradeDispenser_Print(tD_Loc.help);
                end             -- no correct command was found
        end
end