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