Go to most recent revision | Details | Compare with Previous | View Log
Line No. | Rev | Author | Line |
---|---|---|---|
1 | 2 | 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 | local MAJOR = "1" |
|
11 | Taonnor-14572 | local MINOR = "0" |
|
12 | Taonnor-14572 | local PATCH = "0" |
|
13 | Taonnor-14572 | ||
14 | Taonnor-14572 | local REFRESHRATE = 1000 |
|
15 | Taonnor-14572 | local ACTION_BAR_ULTIMATE_SLOT_INDEX = ACTION_BAR_ULTIMATE_SLOT_INDEX + 1 -- 8, the constant is 7, but its wrong |
|
16 | Taonnor-14572 | ||
17 | Taonnor-14572 | --[[ |
|
18 | Taonnor-14572 | Class GroupUltimate |
|
19 | Taonnor-14572 | ]]-- |
|
20 | Taonnor-14572 | GroupUltimate = {} |
|
21 | Taonnor-14572 | ||
22 | Taonnor-14572 | --[[ |
|
23 | Taonnor-14572 | Class Members |
|
24 | Taonnor-14572 | ]]-- |
|
25 | Taonnor-14572 | GroupUltimate.Name = "TaosGroupUltimate" |
|
26 | Taonnor-14572 | GroupUltimate.IsInAvA = false |
|
27 | Taonnor-14572 | GroupUltimate.LastMapPingTimestamp = GetTimeStamp() |
|
28 | Taonnor-14572 | GroupUltimate.Default = { |
|
29 | Taonnor-14572 | ["PosX"] = 0, |
|
30 | Taonnor-14572 | ["PosY"] = 0, |
|
31 | Taonnor-14572 | ["Movable"] = true, |
|
32 | Taonnor-14572 | } |
|
33 | Taonnor-14572 | ||
34 | Taonnor-14572 | --[[ |
|
35 | Taonnor-14572 | UpdateDeath updates SessionDeaths with adding new death |
|
36 | Taonnor-14572 | ]]-- |
|
37 | Taonnor-14572 | function GroupUltimate.UpdateDeath(eventID) |
|
38 | Taonnor-14572 | if (GroupUltimate.IsInAvA) then |
|
39 | Taonnor-14572 | -- TODO: And alive?! |
|
40 | Taonnor-14572 | end |
|
41 | Taonnor-14572 | end |
|
42 | Taonnor-14572 | ||
43 | Taonnor-14572 | --[[ |
|
44 | Taonnor-14572 | UpdateZone updates the IsInAva member and set visibility of GroupUltimateWindow |
|
45 | Taonnor-14572 | ]]-- |
|
46 | Taonnor-14572 | function GroupUltimate.UpdateZone(eventCode) |
|
47 | Taonnor-14572 | GroupUltimate.IsInAvA = IsPlayerInAvAWorld() |
|
48 | Taonnor-14572 | GroupUltimateWindow:SetHidden(not GroupUltimate.IsInAvA) |
|
49 | Taonnor-14572 | end |
|
50 | Taonnor-14572 | ||
51 | Taonnor-14572 | --[[ |
|
52 | Taonnor-14572 | Called on map ping; Updates ultimate view if possible ping |
|
53 | Taonnor-14572 | ]]-- |
|
54 | Taonnor-14572 | function GroupUltimate.OnMapPing(eventCode, pingEventType, pingType, pingTag, offsetX, offsetY, isLocalPlayerOwner) |
|
55 | Taonnor-14572 | if GroupUltimate.IsPossiblePing(offsetX, offsetY) then |
|
56 | Taonnor-14572 | GroupUltimate.UpdateUltimateView(pingTag, offsetX, offsetY) |
|
57 | Taonnor-14572 | end |
|
58 | Taonnor-14572 | end |
|
59 | Taonnor-14572 | ||
60 | Taonnor-14572 | --[[ |
|
61 | Taonnor-14572 | Called on power changing; Call send data if ultimate |
|
62 | Taonnor-14572 | ]]-- |
|
63 | Taonnor-14572 | function GroupUltimate.OnPowerUpdate(eventCode, unitTag, powerIndex, powerType, powerValue, powerMax, powerEffectiveMax) |
|
64 | Taonnor-14572 | if (unitTag ~= 'player') then return end -- only care about the player |
|
65 | Taonnor-14572 | if (powerType ~= POWERTYPE_ULTIMATE) then return end -- only care about ultimate |
|
66 | Taonnor-14572 | ||
67 | Taonnor-14572 | GroupUltimate.SendData(powerValue) |
|
68 | Taonnor-14572 | end |
|
69 | Taonnor-14572 | ||
70 | Taonnor-14572 | --[[ |
|
71 | Taonnor-14572 | SendData updates session |
|
72 | Taonnor-14572 | ]]-- |
|
73 | Taonnor-14572 | function GroupUltimate.SendData(powerValue) |
|
74 | Taonnor-14572 | if (GroupUltimate.IsInAvA) then return end |
|
75 | Taonnor-14572 | if IsUnitGrouped("player") then return end |
|
76 | Taonnor-14572 | ||
77 | Taonnor-14572 | local currentTimestamp = GetTimeStamp() |
|
78 | Taonnor-14572 | ||
79 | Taonnor-14572 | if ((currentTimestamp - roupUltimate.LastMapPingTimestamp) > REFRESHRATE) then |
|
80 | Taonnor-14572 | local abilityID = GetSlotBoundId(ACTION_BAR_ULTIMATE_SLOT_INDEX) |
|
81 | Taonnor-14572 | local abilityCost = math_max(1, GetSlotAbilityCost(ACTION_BAR_ULTIMATE_SLOT_INDEX)) |
|
82 | Taonnor-14572 | local relativeUltimate = math.floor((powerValue / abilityCost) * 100) |
|
83 | Taonnor-14572 | ||
84 | Taonnor-14572 | if (relativeUltimate > 100) then |
|
85 | Taonnor-14572 | relativeUltimate = 100 |
|
86 | Taonnor-14572 | end |
|
87 | Taonnor-14572 | ||
88 | Taonnor-14572 | d("abilityID: " tostring(abilityID)) -- TODO: eventually needed mapping to correct x values for map pings! |
|
89 | Taonnor-14572 | d("relativeUltimate: " tostring(relativeUltimate)) |
|
90 | Taonnor-14572 | PingMap(MAP_PIN_TYPE_PING, MAP_TYPE_LOCATION_CENTERED, abilityID, relativeUltimate) |
|
91 | Taonnor-14572 | ||
92 | Taonnor-14572 | GroupUltimate.LastMapPingTimestamp = GetTimeStamp() |
|
93 | Taonnor-14572 | end |
|
94 | Taonnor-14572 | end |
|
95 | Taonnor-14572 | ||
96 | Taonnor-14572 | --[[ |
|
97 | Taonnor-14572 | UpdateUltimates updates ultimate view |
|
98 | Taonnor-14572 | ]]-- |
|
99 | Taonnor-14572 | function GroupUltimate.UpdateUltimateView(pingTag, ultimateId, ultimateValue) |
|
100 | Taonnor-14572 | local senderName = GetUnitName(pingTag) |
|
101 | Taonnor-14572 | local ultimateName = GetAbilityName(ultimateId) |
|
102 | Taonnor-14572 | local ultimatePercent = ultimateValue |
|
103 | Taonnor-14572 | -- GetAbilityIcon(number abilityId) -> Icon?! |
|
104 | Taonnor-14572 | ||
105 | Taonnor-14572 | ApSessionFurtherWindowValueSenderName:SetText(senderName) |
|
106 | Taonnor-14572 | ApSessionFurtherWindowValueUltimate:SetText(ultimateName) |
|
107 | Taonnor-14572 | ApSessionFurtherWindowValueUltimatePercent:SetText(ultimatePercent) |
|
108 | Taonnor-14572 | end |
|
109 | Taonnor-14572 | ||
110 | Taonnor-14572 | --[[ |
|
111 | Taonnor-14572 | Check if map ping is in possible range |
|
112 | Taonnor-14572 | ]]-- |
|
113 | Taonnor-14572 | function GroupUltimate.IsPossiblePing(offsetx, offsety) |
|
114 | Taonnor-14572 | return true -- TODO: check in specific range |
|
115 | Taonnor-14572 | end |
|
116 | Taonnor-14572 | ||
117 | Taonnor-14572 | --[[ |
|
118 | Taonnor-14572 | UpdateMovable sets the Movable and MouseEnabled flag in UI elements |
|
119 | Taonnor-14572 | ]]-- |
|
120 | Taonnor-14572 | function GroupUltimate.SetMovable() |
|
121 | Taonnor-14572 | GroupUltimateWindow:SetMovable(GroupUltimate.Settings.Movable) |
|
122 | Taonnor-14572 | GroupUltimateWindow:SetMouseEnabled(GroupUltimate.Settings.Movable) |
|
123 | Taonnor-14572 | end |
|
124 | Taonnor-14572 | ||
125 | Taonnor-14572 | --[[ |
|
126 | Taonnor-14572 | MakeSettingsWindow creates settings window |
|
127 | Taonnor-14572 | ]]-- |
|
128 | Taonnor-14572 | function GroupUltimate.MakeSettingsWindow() |
|
129 | Taonnor-14572 | local panelData = { |
|
130 | Taonnor-14572 | type = "panel", |
|
131 | Taonnor-14572 | name = "Taos Group Ultimate", |
|
132 | Taonnor-14572 | author = "TProg Taonnor", |
|
133 | Taonnor-14572 | version = MAJOR .. "." .. MINOR .. "." .. PATCH, |
|
134 | Taonnor-14572 | slashCommand = "/taosGroupUltimate", |
|
135 | Taonnor-14572 | registerForDefaults = true |
|
136 | Taonnor-14572 | } |
|
137 | Taonnor-14572 | ||
138 | Taonnor-14572 | local optionsData = { |
|
139 | Taonnor-14572 | [1] = { |
|
140 | Taonnor-14572 | type = "header", |
|
141 | Taonnor-14572 | name = GetString(TAS_OPTIONS_HEADER), |
|
142 | Taonnor-14572 | }, |
|
143 | Taonnor-14572 | [2] = { |
|
144 | Taonnor-14572 | type = "checkbox", |
|
145 | Taonnor-14572 | name = GetString(TAS_OPTIONS_DRAG_LABEL), |
|
146 | Taonnor-14572 | tooltip = GetString(TAS_OPTIONS_DRAG_TOOLTIP), |
|
147 | Taonnor-14572 | getFunc = function() return GroupUltimate.Settings.Movable end, |
|
148 | Taonnor-14572 | setFunc = function(value) |
|
149 | Taonnor-14572 | GroupUltimate.Settings.Movable = value |
|
150 | Taonnor-14572 | GroupUltimate.SetMovable() |
|
151 | Taonnor-14572 | end, |
|
152 | Taonnor-14572 | default = GroupUltimate.Default.Movable |
|
153 | Taonnor-14572 | }, |
|
154 | Taonnor-14572 | } |
|
155 | Taonnor-14572 | ||
156 | Taonnor-14572 | local LAM = LibStub("LibAddonMenu-2.0") |
|
157 | Taonnor-14572 | LAM:RegisterAddonPanel("TaosGroupUltimateSettings", panelData) |
|
158 | Taonnor-14572 | LAM:RegisterOptionControls("TaosGroupUltimateSettings", optionsData) |
|
159 | Taonnor-14572 | end |
|
160 | Taonnor-14572 | ||
161 | Taonnor-14572 | --[[ |
|
162 | Taonnor-14572 | RestorePosition sets GroupUltimateWindow on settings position |
|
163 | Taonnor-14572 | ]]-- |
|
164 | Taonnor-14572 | function GroupUltimate.RestorePosition() |
|
165 | Taonnor-14572 | GroupUltimateWindow:ClearAnchors() |
|
166 | Taonnor-14572 | GroupUltimateWindow:SetAnchor(TOPLEFT, |
|
167 | Taonnor-14572 | GuiRoot, |
|
168 | Taonnor-14572 | TOPLEFT, |
|
169 | Taonnor-14572 | ApSession.Settings.PosX, |
|
170 | Taonnor-14572 | ApSession.Settings.PosY) |
|
171 | Taonnor-14572 | end |
|
172 | Taonnor-14572 | ||
173 | Taonnor-14572 | --[[ |
|
174 | Taonnor-14572 | OnGroupUltimateWindowMoveStop saves current GroupUltimateWindow position to settings |
|
175 | Taonnor-14572 | ]]-- |
|
176 | Taonnor-14572 | function GroupUltimate.OnGroupUltimateWindowMoveStop() |
|
177 | Taonnor-14572 | local left = GroupUltimateWindow:GetLeft() |
|
178 | Taonnor-14572 | local top = GroupUltimateWindow:GetTop() |
|
179 | Taonnor-14572 | ||
180 | Taonnor-14572 | GroupUltimate.Settings.PosX = left |
|
181 | Taonnor-14572 | GroupUltimate.Settings.PosY = top |
|
182 | Taonnor-14572 | end |
|
183 | Taonnor-14572 | ||
184 | Taonnor-14572 | --[[ |
|
185 | Taonnor-14572 | GroupUltimate:initialize initializes addon |
|
186 | Taonnor-14572 | ]]-- |
|
187 | Taonnor-14572 | function GroupUltimate:initialize() |
|
188 | Taonnor-14572 | GroupUltimate.Settings = ZO_SavedVars:NewAccountWide(GroupUltimate.Name, 1 , nil, GroupUltimate.Default) |
|
189 | Taonnor-14572 | ||
190 | Taonnor-14572 | GroupUltimate.MakeSettingsWindow() |
|
191 | Taonnor-14572 | GroupUltimate.RestorePosition() |
|
192 | Taonnor-14572 | GroupUltimate.UpdateZone() |
|
193 | Taonnor-14572 | GroupUltimate.SetMovable() |
|
194 | Taonnor-14572 | ||
195 | Taonnor-14572 | -- Register events |
|
196 | Taonnor-14572 | EVENT_MANAGER:RegisterForEvent(GroupUltimate.name, EVENT_MAP_PING, GroupUltimate.OnMapPing) |
|
197 | Taonnor-14572 | EVENT_MANAGER:RegisterForEvent(GroupUltimate.name, EVENT_POWER_UPDATE, GroupUltimate.OnPowerUpdate) |
|
198 | Taonnor-14572 | EVENT_MANAGER:RegisterForEvent(GroupUltimate.Name, EVENT_PLAYER_DEAD , GroupUltimate.UpdateDeath) -- grey up icon? |
|
199 | Taonnor-14572 | EVENT_MANAGER:RegisterForEvent(GroupUltimate.Name, EVENT_PLAYER_ACTIVATED, GroupUltimate.UpdateZone) -- only cyro? |
|
200 | Taonnor-14572 | ||
201 | Taonnor-14572 | -- Start timer |
|
202 | Taonnor-14572 | --EVENT_MANAGER:RegisterForUpdate(GroupUltimate.Name, REFRESHRATE, GroupUltimate.SendData) -- eventually not needed, send data via ultimate points changed |
|
203 | Taonnor-14572 | end |
|
204 | Taonnor-14572 | ||
205 | Taonnor-14572 | --[[ |
|
206 | Taonnor-14572 | OnAddOnLoaded if TaosGroupUltimate is loaded, initialize |
|
207 | Taonnor-14572 | ]]-- |
|
208 | Taonnor-14572 | local function OnAddOnLoaded(eventCode, addOnName) |
|
209 | Taonnor-14572 | if addOnName == GroupUltimate.Name then |
|
210 | Taonnor-14572 | GroupUltimate:initialize() |
|
211 | Taonnor-14572 | end |
|
212 | Taonnor-14572 | end |
|
213 | Taonnor-14572 | ||
214 | Taonnor-14572 | EVENT_MANAGER:RegisterForEvent(GroupUltimate.Name, EVENT_ADD_ON_LOADED, OnAddOnLoaded); |