vanilla-wow-addons – Rev 1
?pathlinks?
function tradeDispenserSlaveOnUpdate()
local down, up, lag = GetNetStats();
local LagTimer = floor(lag/1000);
if (LagTimer < 0.2) then LagTimer=0.2 end;
if (not tD_Temp.isEnabled) then return end
if (tD_Temp.broadcastSlice > 0) then
if (arg1~=nil) then
tD_Temp.broadcastSlice = tD_Temp.broadcastSlice - arg1
end
if (tD_Temp.broadcastSlice < 0) then
if (UnitAffectingCombat("player")==1) then
-- player is in combat! tD should not spam its auto-broadcast while fighting some mobs! (especially bossmobs) - wait 15sec, and try again!
tD_Temp.broadcastSlice = 15;
else
if (tD_CharDatas.AutoBroadcast) then tradeDispenserBroadcastItems() end
tD_Temp.broadcastSlice = tD_CharDatas.broadcastSlice
end
end
end
if (arg1~=nil) then
tD_Temp.timeSlice = tD_Temp.timeSlice - arg1
if (tD_CharDatas.TimelimitCheck and tD_Temp.Countdown) then
if (tD_Temp.Countdown>0) then
tD_Temp.Countdown=tD_Temp.Countdown - arg1;
if (math.floor(tD_Temp.Countdown)==11) then
tradeDispenserMessage("WHISPER", tD_GlobalDatas.whisper[11]);
tD_Temp.Countdown=tD_Temp.Countdown-1;
end
if (math.floor(tD_Temp.Countdown)==0) then
tD_Temp.Target.Name=nil;
tD_Temp.tradeState="timeup";
tradeDispenserVerbose(1,"Timeup, close the trade");
CloseTrade();
tD_Temp.Countdown=tD_Temp.Countdown-1;
end
--tradeDispenserVerbose(0,"countdown: "..tD_Temp.Countdown);
end
end
end;
if (tD_Temp.timeSlice > 0) then return end
if (tD_Temp.tradeState == "populate") then
tD_Temp.timeSlice = LagTimer
tradeDispenserVerbose(1,"tradeDispenserSlaveOnUpdate: populate")
if (tD_Temp.Slot[tD_Temp.tradeData.slotID]) then
if (tD_Temp.tradeData.containerLocation == nil) then
tradeDispenserVerbose(3,"Compile Item "..tD_Temp.tradeData.slotID)
local cID, sID = tradeDispenserCompile(tD_Temp.tradeData.slotID)
if (cID == "deadlink") then
tradeDispenserVerbose(1,"deadlink")
tD_Temp.tradeData.containerLocation=nil;
tD_Temp.timeSlice = LagTimer*4
tD_Temp.tradeState = "accept"
tD_Temp.tradeData = false
return
elseif (cID==nil) then
tradeDispenserMessage("WHISPER",tD_GlobalDatas.whisper[4])
tradeDispenserMessage("SAY",tD_GlobalDatas.whisper[2])
tD_Temp.timeSlice = LagTimer*4
tD_Temp.tradeState = "accept"
tD_Temp.tradeData = true
return
else
tradeDispenserVerbose(2,"tradeDispenserOnUpdate: found container location")
tD_Temp.tradeData.containerLocation = {}
tD_Temp.tradeData.containerLocation.cID = cID
tD_Temp.tradeData.containerLocation.sID = sID
end
end
if (tD_Temp.tradeData.containerLocation) then
local cID = tD_Temp.tradeData.containerLocation.cID
local sID = tD_Temp.tradeData.containerLocation.sID
local _, itemCount = GetContainerItemInfo(cID, sID)
PickupContainerItem(cID, sID)
if ( CursorHasItem() ) then
tradeDispenserVerbose(3,"tradeDispenserSlaveOnUpdate: CursorHasItem()")
ClickTradeButton(tD_Temp.tradeData.slotID)
if (itemCount ~= tD_Temp.Slot[tD_Temp.tradeData.slotID].itemCount) then
tradeDispenserMessage("WHISPER",tD_GlobalDatas.whisper[3], "WHISPER")
tradeDispenserMessage("SAY",tD_GlobalDatas.whisper[2])
tD_Temp.timeSlice = LagTimer*4
tD_Temp.tradeState = "accept"
tD_Temp.tradeData = true
return
end
tD_Temp.tradeData.slotID = tD_Temp.tradeData.slotID + 1
tD_Temp.tradeData.containerLocation = nil
tD_Temp.tradeData.numAttempts = 0
else
tD_Temp.tradeData.numAttempts = tD_Temp.tradeData.numAttempts + 1
if (tD_Temp.tradeData.numAttempts == 32) then
tradeDispenserVerbose(2,"tradeDispenserOnUpdate: too many attempts")
tradeDispenserMessage("WHISPER",tD_GlobalDatas.whisper[1]);
CloseTrade()
return
end
end
end
else
--tradeDispenserVerbose(1,"tradeDispenserSlaveOnUpdate: ID ="..tD_Temp.tradeData.slotID)
tD_Temp.tradeData.slotID = tD_Temp.tradeData.slotID + 1
if (tD_Temp.tradeData.slotID >= 7) then
tD_Temp.tradeState = "accept"
tD_Temp.timeSlice = LagTimer*4
tradeDispenserVerbose(1,"tradeDispenserSlaveOnUpdate: DONE")
tD_Temp.tradeData = false
end
end
elseif (tD_Temp.tradeState == "accept") then
tD_Temp.timeSlice = 1000
if (tD_CharDatas.AutoAccept) then tradeDispenserAccept() end
end
end
function tradeDispenserBroadcastItems()
if (tD_Temp.isEnabled) then
local tradeDispenserChannel, temp = tradeDispenserGetChannel();
if (tradeItems) then tradeDispenserVerbose(1,"tradeItems: "..tradeItems) end
local x = math.random(1, tD_CharDatas.Random);
local message="";
if (strlen(tD_CharDatas.RndText[x])<=2) then
message=tD_Loc.defaultBroadcast;
else message=tD_CharDatas.RndText[x] end
tradeDispenserMessage(tradeDispenserChannel, message)
end
end
function tradeDispenserGetChannel()
local Channel="SAY";
local ChannelLoc=tD_Loc.channel.say;
if (tD_CharDatas.ChannelID) then
if (tD_CharDatas.ChannelID==1) then Channel="SAY"; ChannelLoc=tD_Loc.channel.say end
if (tD_CharDatas.ChannelID==2) then Channel="YELL"; ChannelLoc=tD_Loc.channel.yell end
if (tD_CharDatas.ChannelID==3) then --Channel="RAID"; ChannelLoc=tD_Loc.channel.raid
if (UnitInRaid("player")==1) then Channel="RAID"; ChannelLoc=tD_Loc.channel.raid
elseif (GetNumPartyMembers()>=1) then Channel="PARTY"; ChannelLoc=tD_Loc.channel.party
else Channel="SAY"; ChannelLoc=tD_Loc.channel.say end
end
if (tD_CharDatas.ChannelID==4) then --Channel="PARTY"; ChannelLoc=tD_Loc.channel.party
if ((GetNumPartyMembers()>=1)) then Channel="PARTY"; ChannelLoc=tD_Loc.channel.party
else Channel="SAY"; ChannelLoc=tD_Loc.channel.say end
end
if (tD_CharDatas.ChannelID==5) then Channel="GUILD"; ChannelLoc=tD_Loc.channel.guild end
end
return Channel, ChannelLoc;
end
function tradeDispenserStartTimelimiter()
tradeDispenserVerbose(2,"Countdown started: you've got "..tD_CharDatas.Timelimit.." sec to trade")
tD_Temp.Countdown=tD_CharDatas.Timelimit+2
end