Go to most recent revision | Compare with Previous | Blame | View Log
--[[ Addon: Taos Group Ultimate Author: TProg Taonnor Created by @Taonnor ]]-- --[[ Local variables ]]-- local LOG_ACTIVE = false local _logger = nil local REFRESHRATE = 1000 -- ms; RegisterForUpdate is in miliseconds -- LGS implementation local LGS = LibStub:GetLibrary("LibGroupSocketLight") local MESSAGE_TYPE = 20 -- own type, must be between 1-31 --[[ Table TGU_MapPingHandler ]]-- TGU_MapPingHandler = {} TGU_MapPingHandler.__index = TGU_MapPingHandler --[[ Table Members ]]-- TGU_MapPingHandler.Name = "TGU-MapPingHandler" TGU_MapPingHandler.IsMocked = false --[[ Called on new data from LibGroupSocket ]]-- function TGU_MapPingHandler.OnLgsData(pingTag, data, isSelf) if (LOG_ACTIVE) then _logger:logTrace("TGU_MapPingHandler.OnLgsData") end local expectedLength = 2 if(#data < expectedLength) then _logger:logError("TGU_MapPingHandler received only %d of %d byte", #data, expectedLength) return end local index = 1 local abilityPing, index = LGS:ReadUint8(data, index) local relativeUltimate, index = LGS:ReadUint8(data, index) local ultimateGroup = TGU_UltimateGroupHandler.GetUltimateGroupByAbilityPing(abilityPing) if (ultimateGroup ~= nil and relativeUltimate ~= -1) then local player = {} local playerName = "" local isPlayerDead = false if (TGU_MapPingHandler.IsMocked == false) then playerName = GetUnitName(pingTag) isPlayerDead = IsUnitDead(pingTag) else playerName = pingTag isPlayerDead = math.random() > 0.8 end player.PingTag = pingTag player.GroupNumber = string.sub(pingTag, string.len("group") + 1) player.PlayerName = playerName player.IsPlayerDead = isPlayerDead player.UltimateGroup = ultimateGroup player.UltimateName = GetAbilityName(ultimateGroup.GroupAbilityId) player.UltimateIcon = GetAbilityIcon(ultimateGroup.GroupAbilityId) player.RelativeUltimate = relativeUltimate if (LOG_ACTIVE) then _logger:logDebug("player.PingTag", player.PingTag) _logger:logDebug("player.PlayerName", player.PlayerName) _logger:logDebug("player.IsPlayerDead", player.IsPlayerDead) _logger:logDebug("player.UltimateGroup.GroupName", player.UltimateGroup.GroupName) _logger:logDebug("player.RelativeUltimate", player.RelativeUltimate) end CALLBACK_MANAGER:FireCallbacks("TGU-MapPingChanged", player) else _logger:logError("TGU_MapPingHandler.OnMapPing, Ping invalid ultimateGroup: " .. tostring(ultimateGroup) .. "; relativeUltimate: " .. tostring(relativeUltimate)) end end --[[ Called on refresh of timer ]]-- function TGU_MapPingHandler.OnTimedUpdate(eventCode) if (LOG_ACTIVE) then _logger:logTrace("TGU_MapPingHandler.OnTimedUpdate") end if (IsUnitGrouped("player") == false and TGU_MapPingHandler.IsMocked == false) then return end -- only if player is in group and system is not mocked local current, max, effective_max = GetUnitPower("player", POWERTYPE_ULTIMATE) local abilityGroup = TGU_UltimateGroupHandler.GetUltimateGroupByAbilityId(TGU_SettingsHandler.SavedVariables.StaticUltimateID) if (abilityGroup ~= nil) then local abilityCost = math.max(1, GetAbilityCost(abilityGroup.GroupAbilityId)) local relativeUltimate = math.floor((current / abilityCost) * 100) if (relativeUltimate > 100) then relativeUltimate = 100 end local data = {} local index = 1 index = LGS:WriteUint8(data, index, abilityGroup.GroupAbilityPing) index = LGS:WriteUint8(data, index, relativeUltimate) if(LGS:Send(MESSAGE_TYPE, data)) then if (LOG_ACTIVE) then _logger:logDebug("Send complete") end else if (LOG_ACTIVE) then _logger:logDebug("LGS Send failed") end end else _logger:logError("TGU_MapPingHandler.OnTimedUpdate, abilityGroup is nil, change ultimate. StaticID: " .. tostring(TGU_SettingsHandler.SavedVariables.StaticUltimateID)) end end --[[ Initialize initializes TGU_MapPingHandler ]]-- function TGU_MapPingHandler.Initialize(logger, isMocked) if (LOG_ACTIVE) then logger:logTrace("TGU_MapPingHandler.Initialize") logger:logDebug("isMocked", isMocked) end _logger = logger TGU_MapPingHandler.IsMocked = isMocked LGS.debug = isMocked -- Register LibGroupSocket callbacks LGS:RegisterCallback(MESSAGE_TYPE, TGU_MapPingHandler.OnLgsData) -- Start timer EVENT_MANAGER:RegisterForUpdate(TGU_MapPingHandler.Name, REFRESHRATE, TGU_MapPingHandler.OnTimedUpdate) end