defenseLua table
List skills and manage Auto Defense from Lua.
The defense table lists skills, manages Auto Defense rules, and delivers events to a loaded module. Use the Auto Defense menu to review saved rules. Actions are 1 evade, 2 parry, and 3 block. Phases are 0 start, 1 casting, 2 charging, and 3 channeling.
Skill catalog
defense.skills(first, count, search, job, language)
Parameters: first is a one-based match position (default 1); count is 1–100 (default 50); optional search is up to 128 bytes and matches names or IDs; job is 0 for all or a supported class number 1–8. Omit language to use the menu preference. Language indexes are 0 English, 1 Simplified Chinese, 2 Korean, 3 Russian, 4 Brazilian Portuguese, 5 German, 6 Spanish, 7 French, 8 Japanese, and 9 Traditional Chinese.
Returns: An array of {id, name} records and the total match count, or nil, error for invalid arguments or an unavailable catalog.
local skills, total = defense.skills(1, 20, "", 0, 0)
if not skills then
log.warn(total)
else
for _, skill in ipairs(skills) do
log.info(skill.id .. " " .. skill.name)
end
endRules
defense.rules()
Parameters: None. Returns: Configured rule records with skill, action, phase, delay_ms, cooldown_ms, and enabled, or nil, error.
defense.set_rule(skill, action, phase, delayMs, cooldownMs, enabled)
Parameters: skill is a known skill ID, action is 1–3, and phase is 0–3. Optional delayMs defaults to 0 and accepts 0–2000; cooldownMs defaults to 1000 and accepts 100–60000; enabled defaults to true.
Returns: true when added or updated, false if the request did not complete, or nil, error for invalid input or another failure.
defense.remove_rule(skill, phase)
Parameters: Known skill ID and phase 0–3. Returns: true when removed, false if no rule was removed, or nil, error.
local skillId = 12345 -- Replace with an ID from defense.skills().
local ok, err = defense.set_rule(skillId, 3, 0, 0, 1000, true)
if ok == nil then
log.warn(err)
elseif not ok then
log.warn("Rule was not updated")
endSettings
defense.settings()
Parameters: None. Returns: {enabled, evade_key, parry_key, block_key, other_targets}, or nil, error.
defense.set_settings(enabled, evadeKey, parryKey, blockKey, otherTargets)
Parameters: enabled and otherTargets are booleans; each key is a number from 0 to 255. Returns: true, false, or nil, error.
defense.save(name)
Parameters: Rule-set name of 1–50 bytes. Returns: true, false, or nil, error.
local settings, err = defense.settings()
if settings then
log.info(settings.enabled and "Defense enabled" or "Defense disabled")
else
log.warn(err)
endEvents
defense.watch(skill, phase)
Parameters: Known skill ID and phase 0–3. Returns: true when subscribed, or nil, error.
defense.unwatch(skill, phase)
Parameters: Skill ID and phase to stop watching. Returns: true when removed, or nil, error.
defense.test(skill, phase)
Parameters: Skill ID and phase of a configured rule. Returns: true, false, or nil, error for the test request.
A loaded module with defense.watch receives on_defense(event). The event has skill, phase, action, fired, and test. Subscriptions end when the module unloads.
function on_start()
local ok, err = defense.watch(12345, 0)
if not ok then log.warn(err) end
end
function on_defense(event)
log.info(string.format("Skill %d, phase %d, action %d",
event.skill, event.phase, event.action))
end