Go to most recent revision | Details | Compare with Previous | View Log
Line No. | Rev | Author | Line |
---|---|---|---|
1 | 5 | Taonnor-14572 | --[[ |
2 | Taonnor-14572 | Addon: Taos Group Ultimate |
|
3 | Taonnor-14572 | Author: TProg Taonnor |
|
4 | Taonnor-14572 | Created by @Taonnor |
|
5 | Taonnor-14572 | ]]-- |
|
6 | Taonnor-14572 | ||
7 | Taonnor-14572 | --[[ |
|
8 | Taonnor-14572 | Global variables |
|
9 | Taonnor-14572 | ]]-- |
|
10 | Taonnor-14572 | ||
11 | Taonnor-14572 | local DEBUG_ACTIVE = true |
|
12 | Taonnor-14572 | local REFRESHRATE = 1000 -- ms; RegisterForUpdate is in miliseconds |
|
13 | Taonnor-14572 | local REFRESHTIME = 1 -- seconds; GetTimeStamp() difference is in seconds |
|
14 | Taonnor-14572 | local ACTION_BAR_ULTIMATE_SLOT_INDEX = ACTION_BAR_ULTIMATE_SLOT_INDEX + 1 -- 8, the constant is 7, but its wrong |
|
15 | Taonnor-14572 | local ABILITY_COEFFICIENT = 100000 |
|
16 | Taonnor-14572 | local ULTIMATE_COEFFICIENT = 1000 |
|
17 | Taonnor-14572 | ||
18 | Taonnor-14572 | --[[ |
|
19 | Taonnor-14572 | Class MapPingHandler |
|
20 | Taonnor-14572 | ]]-- |
|
21 | Taonnor-14572 | MapPingHandler = {} |
|
22 | Taonnor-14572 | ||
23 | Taonnor-14572 | --[[ |
|
24 | Taonnor-14572 | Class Members |
|
25 | Taonnor-14572 | ]]-- |
|
26 | Taonnor-14572 | MapPingHandler.Name = "TGU-MapPingHandler" |
|
27 | Taonnor-14572 | MapPingHandler.LastMapPingTimestamp = GetTimeStamp() -- Timestamp is in seconds |
|
28 | Taonnor-14572 | ||
29 | Taonnor-14572 | --[[ |
|
30 | Taonnor-14572 | Called on map ping |
|
31 | Taonnor-14572 | ]]-- |
|
32 | Taonnor-14572 | function MapPingHandler.OnMapPing(eventCode, pingEventType, pingType, pingTag, offsetX, offsetY, isLocalPlayerOwner) |
|
33 | Taonnor-14572 | logDebug("MapPingHandler.OnMapPing()") |
|
34 | Taonnor-14572 | logDebug("pingType", pingType) |
|
35 | Taonnor-14572 | logDebug("pingTag", pingTag) |
|
36 | Taonnor-14572 | logDebug("offsetX", offsetX) |
|
37 | Taonnor-14572 | logDebug("offsetY", offsetY) |
|
38 | Taonnor-14572 | ||
39 | Taonnor-14572 | if (pingType == MAP_PIN_TYPE_PING and |
|
40 | Taonnor-14572 | MapPingHandler.IsPossiblePing(offsetX, offsetY)) then |
|
41 | Taonnor-14572 | ||
42 | Taonnor-14572 | local senderGroupNumber = string.sub(pingTag, string.len(pingTag)) |
|
43 | Taonnor-14572 | local isUnitDead = IsUnitDead(pingTag) |
|
44 | Taonnor-14572 | local abilityID = math.floor((offsetX * ABILITY_COEFFICIENT) + 0.5) |
|
45 | Taonnor-14572 | local relativeUltimate = math.floor((offsetY * ULTIMATE_COEFFICIENT) + 0.5) |
|
46 | Taonnor-14572 | local ultimateName = GetAbilityName(abilityID):gsub("%^n", ""):gsub("%^f", ""):gsub("%^m", "") |
|
47 | Taonnor-14572 | -- GetAbilityIcon(number abilityId) -> Icon?! |
|
48 | Taonnor-14572 | ||
49 | Taonnor-14572 | logDebug("senderGroupNumber", senderGroupNumber) |
|
50 | Taonnor-14572 | logDebug("isUnitDead", isUnitDead) |
|
51 | Taonnor-14572 | logDebug("abilityID", abilityID) |
|
52 | Taonnor-14572 | logDebug("relativeUltimate", relativeUltimate) |
|
53 | Taonnor-14572 | logDebug("ultimateName", ultimateName) |
|
54 | Taonnor-14572 | ||
55 | Taonnor-14572 | CALLBACK_MANAGER:FireCallbacks("TGU-MapPingChanged", senderGroupNumber, ultimateName, relativeUltimate, isUnitDead) |
|
56 | Taonnor-14572 | end |
|
57 | Taonnor-14572 | end |
|
58 | Taonnor-14572 | ||
59 | Taonnor-14572 | --[[ |
|
60 | Taonnor-14572 | Called on refresh of timer |
|
61 | Taonnor-14572 | ]]-- |
|
62 | Taonnor-14572 | function MapPingHandler.OnTimedUpdate(eventCode) |
|
63 | Taonnor-14572 | if (IsUnitGrouped("player") == false) then return end -- only if player is in group |
|
64 | Taonnor-14572 | ||
65 | Taonnor-14572 | local current, max, effective_max = GetUnitPower("player", POWERTYPE_ULTIMATE) |
|
66 | Taonnor-14572 | local currentTimestamp = GetTimeStamp() -- Timestamp is in seconds |
|
67 | Taonnor-14572 | ||
68 | Taonnor-14572 | if ((currentTimestamp - MapPingHandler.LastMapPingTimestamp) > REFRESHTIME) then |
|
69 | Taonnor-14572 | local abilityID = MapPingHandler.GetConfiguratedUltimate() |
|
70 | Taonnor-14572 | local abilityCost = math.max(1, GetAbilityCost(abilityID)) |
|
71 | Taonnor-14572 | local relativeUltimate = math.floor((current / abilityCost) * 100) |
|
72 | Taonnor-14572 | ||
73 | Taonnor-14572 | if (relativeUltimate > 100) then |
|
74 | Taonnor-14572 | relativeUltimate = 100 |
|
75 | Taonnor-14572 | end |
|
76 | Taonnor-14572 | ||
77 | Taonnor-14572 | local abilityPing = abilityID / ABILITY_COEFFICIENT |
|
78 | Taonnor-14572 | local ultimatePing = relativeUltimate / ULTIMATE_COEFFICIENT |
|
79 | Taonnor-14572 | ||
80 | Taonnor-14572 | logDebug("abilityPing", abilityPing) |
|
81 | Taonnor-14572 | logDebug("ultimatePing", ultimatePing) |
|
82 | Taonnor-14572 | PingMap(MAP_PIN_TYPE_PING, MAP_TYPE_LOCATION_CENTERED, abilityPing, ultimatePing) |
|
83 | Taonnor-14572 | ||
84 | Taonnor-14572 | MapPingHandler.LastMapPingTimestamp = GetTimeStamp() |
|
85 | Taonnor-14572 | end |
|
86 | Taonnor-14572 | end |
|
87 | Taonnor-14572 | ||
88 | Taonnor-14572 | --[[ |
|
89 | Taonnor-14572 | Check if map ping is in possible range |
|
90 | Taonnor-14572 | ]]-- |
|
91 | Taonnor-14572 | function MapPingHandler.IsPossiblePing(offsetX, offsetY) |
|
92 | Taonnor-14572 | local isValidPing = (offsetX ~= 0 and offsetY ~= 0) |
|
93 | Taonnor-14572 | local isCorrectOffsetX = (offsetX >= 0.01 and offsetX <= 1.00) |
|
94 | Taonnor-14572 | local isCorrectOffsetY = (offsetY >= 0.00 and offsetY <= 0.11) |
|
95 | Taonnor-14572 | ||
96 | Taonnor-14572 | return isValidPing and (isCorrectOffsetX and isCorrectOffsetY) |
|
97 | Taonnor-14572 | end |
|
98 | Taonnor-14572 | ||
99 | Taonnor-14572 | function MapPingHandler.GetConfiguratedUltimate() |
|
100 | Taonnor-14572 | return GetSlotBoundId(ACTION_BAR_ULTIMATE_SLOT_INDEX) |
|
101 | Taonnor-14572 | end |
|
102 | Taonnor-14572 | ||
103 | Taonnor-14572 | --[[ |
|
104 | Taonnor-14572 | Initialize initializes MapPingHandler |
|
105 | Taonnor-14572 | ]]-- |
|
106 | Taonnor-14572 | function MapPingHandler.Initialize() |
|
107 | Taonnor-14572 | -- Register events |
|
108 | Taonnor-14572 | EVENT_MANAGER:RegisterForEvent(MapPingHandler.Name, EVENT_MAP_PING, MapPingHandler.OnMapPing) |
|
109 | Taonnor-14572 | ||
110 | Taonnor-14572 | -- Start timer |
|
111 | Taonnor-14572 | EVENT_MANAGER:RegisterForUpdate(MapPingHandler.Name, REFRESHRATE, MapPingHandler.OnTimedUpdate) |
|
112 | Taonnor-14572 | end |