-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathVerdant.lua
More file actions
126 lines (115 loc) · 4.46 KB
/
Verdant.lua
File metadata and controls
126 lines (115 loc) · 4.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
Verdant = Verdant or {}
local Verdant = Verdant
local SLASH_COMMANDS = SLASH_COMMANDS
local ZO_SavedVars = ZO_SavedVars
local d = d
local string_format = string.format
local string_lower = string.lower
local string_match = string.match
local GetGameTimeMilliseconds = GetGameTimeMilliseconds
local GetString = GetString
local GetWorldName = GetWorldName
local KNOWN_FILTERS = {
heal=true, shield=true, shield_raw=true, heal_abs=true,
damage=true, effect=true, effect_self=true,
cast=true, combat=true, group=true, all=true,
}
local function print_readout()
local r = Verdant.Metrics.contribution(GetGameTimeMilliseconds())
local denom_label, denom_val
if r.mode == "group" then
denom_label, denom_val = "Dgrp", r.D_group
else
denom_label, denom_val = "Oslf", r.O_self
end
d("[V] " .. string_format(GetString(VERDANT_READOUT_LINE),
r.mode, r.eHPS, r.MPS, r.EMS, denom_label, denom_val,
r.C_self, r.C_heal, r.C_shield))
end
local function on_slash(input)
local DEBUG = Verdant.Constants.DEBUG
input = input or ""
local cmd = string_match(string_lower(input), "^%s*(%S+)") or ""
-- ── debug commands (developer only) ──────────────────────────────────────
if DEBUG then
if cmd == "on" then
Verdant.Probe.set_enabled(true)
d("[V] " .. GetString(VERDANT_PROBE_ON))
return
elseif cmd == "off" then
Verdant.Probe.set_enabled(false)
d("[V] " .. GetString(VERDANT_PROBE_OFF))
return
elseif cmd == "filter" then
local val = string_match(string_lower(input), "^%s*%S+%s+(%S+)") or ""
if KNOWN_FILTERS[val] then
Verdant.Probe.set_filter(val)
d("[V] " .. string_format(GetString(VERDANT_FILTER_SET), val))
else
d("[V] " .. string_format(GetString(VERDANT_FILTER_UNKNOWN), val))
end
return
elseif cmd == "metric" then
local val = string_match(input, "^%s*%S+%s+(%S+)") or ""
if Verdant.Mode.set(val) then
d("[V] " .. string_format(GetString(VERDANT_METRIC_SET), val))
else
d("[V] " .. string_format(GetString(VERDANT_METRIC_UNKNOWN), val))
end
return
elseif cmd == "readout" then
print_readout() ; return
elseif cmd == "dump" then
Verdant.Probe.dump() ; return
elseif cmd == "stats" then
Verdant.Probe.print_stats() ; return
elseif cmd == "context" then
Verdant.Probe.print_context() ; return
elseif cmd == "ping" then
Verdant.Probe.print_ping() ; return
elseif cmd == "tag" then
local val = string_match(input, "^%s*%S+%s+(.+)$")
if val then val = val:gsub("%s+$", "") end
Verdant.Probe.set_tag(val)
d("[V] session tag: " .. (val or "(cleared)"))
return
elseif cmd == "save" then
Verdant.Probe.persist_to_savedvars(Verdant.SavedVars)
d("[V] " .. GetString(VERDANT_DUMP_SAVED))
return
elseif cmd == "diag" then
Verdant.Diagnostics.print_diag() ; return
elseif cmd == "skills" then
Verdant.SkillColors.print_unknown() ; return
elseif cmd == "clear" then
Verdant.Probe.clear()
Verdant.Metrics.reset()
Verdant.ShieldRegistry.reset()
Verdant.Coverage.reset()
Verdant.GroupSet.reset()
Verdant.Diagnostics.reset()
Verdant.Bar.reset_peaks()
d("[V] " .. GetString(VERDANT_BUFFER_CLEARED))
return
end
end
-- ── /verdant (any input) → toggle bar ────────────────────────────────────
Verdant.Bar.toggle()
end
local function on_addon_loaded()
local C = Verdant.Constants
-- GetWorldName() separates EU / NA / PTS SavedVars for the same @account.
Verdant.SavedVars = ZO_SavedVars:NewAccountWide(C.SV_TABLE, C.SV_VERSION, GetWorldName(), { probe = {}, bar = {}, tribar = {}, temporal = {} })
Verdant.Probe.init()
Verdant.Engine.init()
Verdant.Bar.init()
Verdant.TriBar.init()
Verdant.Settings.init()
Verdant.Graph.init()
-- Visibility must init AFTER UI controls exist — it reads/applies SetHidden
-- on VerdantBarWindow / VerdantGraphWindow / VerdantTriBarWindow.
Verdant.Visibility.init()
SLASH_COMMANDS[C.SLASH_COMMAND] = on_slash
d("[V] " .. string_format(GetString(VERDANT_LOADED), C.VERSION, C.SLASH_COMMAND))
end
Verdant.Events.register_addon_loaded(Verdant.Constants.ADDON_NAME, on_addon_loaded)