# WA1: Module Development Specification for AI Agents Document version: 2026-09-13.2. This document and its examples require client **20260913.120630 or later**. The plaintext module format version is **1**. Canonical full document: https://wa1.io/llm.txt . This specification covers the currently public module capabilities; it is not an index of all WOW APIs. Game API availability depends on the retail/classic version and protected state. Check availability at runtime. All explanatory prose is maintained in English. Code samples and generated data preserve their actual identifiers, localized spell names, library references, comments, and user-facing strings. Some literals are Chinese: do not translate persisted identifiers or references when using or editing the examples. ## 1. Agent workflow 1. Establish the user's class, game version, desired behavior, and trigger. When editing an existing module, read the entire `.wa1` first and preserve unrelated macros, properties, logic IDs, library entries, and hotkeys. 2. For a new module, start from the complete blank template included below. Produce UTF-8, strict JSON with the `.wa1` extension. Code is a plaintext JSON string with newlines escaped as `\n`. Do not generate internal base64, `WA1:`, or `WA1E1:` envelopes. 3. Put game API queries in property code; one-time setup, event registration, and dynamic macro definitions in `initCode`; property-based decisions and key dispatch in `luaScripts[].code`. These two Lua environments do not share variables. 4. Prefer `Macro(slotOrName)` for invocation. Define dynamic macros in the game with `SuperDPS.SetMacro`. Use static macros when their bodies need no dynamic construction. Macro names identify references; hotkeys trigger the actual action. 5. Keep property names, macro names, and active logic IDs unique. Check every `Prop`, `Macro`, and `libRef` reference. Use valid, unique macro hotkeys from the template. A logic start key is a separate client setting, not a macro hotkey. 6. Validate the schema, array indices, references, and Lua syntax. With repository access, run actual import/round-trip and generator tests. Without a game environment, deliver the file and installation steps, state that game behavior is unverified, and do not claim successful recognition or casting. 7. Import the module, bind the required logic start keys, save, and wait for addon generation. Run `/reload` out of combat. For an existing official assisted module containing custom macros, replace only its initialization code and preserve its macro table and logic. Runtime testing must inspect client frame status and actual game behavior. Suggested task prompt for an agent: > Read https://wa1.io/llm.txt and its linked templates. Implement [specific behavior] for [game version/class] and produce a complete, importable .wa1 file. Keep game-side code separate from desktop logic. Preserve unrelated content and script IDs in any module I provide. Use public APIs, validate the format, indices, references, hotkeys, and Lua syntax, and explain import and /reload steps and which behaviors have not been tested in the game. ## 2. Architecture and execution boundaries ```text Game APIs / native UI display -> Addon properties and dynamic macro readiness -> In-game strip (dedicated numeric glyphs, not general text OCR) -> Rust screen capture, decoding, and integrity checks -> One immutable property frame -> User-triggered desktop Lua logic -> Host hotkey dispatch -> Game secure button executing the macro body ``` The client manages accounts, modules, bindings, capture, and key dispatch. The addon reads game state, renders the strip, and creates/updates secure macro buttons. Dynamic macros are not entries in the game's account macro panel created with `CreateMacro`; skills do not need to be manually placed on an action bar. A module cannot call game APIs directly from the desktop. The timing limits serve different purposes: game data updates are throttled to 20 ms; the 150 ms frame freshness limit rejects stale actions; dynamic macro replacement first advertises that the macro is unavailable, then waits at least 250 ms and until out of combat before writing the secure button. Do not simulate synchronization with `Sleep(250)` or change the strip or timing to bypass these checks. Ordinary values, protected values, and native auras use different transport paths. Rust accepts only complete, validated frames with matching module version, engine generation, and freshness. Never combine data from different screenshots. Dynamic macro registry snapshots are transmitted in chunks of at most 6 bytes and published only after complete validation. `Macro`/`Cast` do not invoke macros during synchronization. Longer names and more records increase synchronization time. A clipped, obscured, or undecodable strip must not cause dispatch using old values. `Macro` returning true means only that a hotkey was submitted. It does not prove that the game accepted it, a skill was cast, or an attack hit. A missing property is different from numeric zero. An undefined `Prop` raises an error; game property execution errors are reported and treated as zero for the current session. Invalid capture data causes action checks to reject execution, rather than treating failure as an actionable zero. ## 3. The .wa1 file contract Recommended output is a complete snapshot: 150 `macros`, 45 `props`, 50 `luaScripts`, and an explicit `propLibrary`. Keep empty rows even when only a few are used. Each array uses unique, ascending, one-based `index` values. Do not confuse the 150 macro slots with the logic slot count. The compatibility importer accepts partial fields, comments, and trailing commas, but agents should always generate strict JSON. The recommended schema is stricter than compatibility import. | Top-level field | Type / rule | Meaning | |---|---|---| | format | `"wa1-module"` | Plaintext module identifier | | formatVersion | `1` | Agents must not invent a higher version | | name | string | Module display name | | author | string/null | Author description, not authenticated identity | | class | string | All, Warrior, Hunter, Rogue, Shaman, Warlock, Priest, Mage, Druid, Paladin, Monk, DemonHunter, DeathKnight, Evoker | | globalName | string | Prefer SuperDPS; must be a valid Lua identifier. A custom value aliases the addon shared table; it is not the addon directory name | | spellQueueWindow | positive integer | Spell queue window in milliseconds; template default 250. Not APM or the logic loop interval | | initCode | string/null | Game Lua 5.1 initialization code, executed once when the addon loads | | macros | array | Slots 1–105 for ordinary/dynamic macros; 106–150 reserved for target selection | | props | array | Up to 45 property slots | | luaScripts | array | Up to 50 desktop logic slots. The client runs user-bound logic, not every row in array order | | propLibrary | array | This module's property library, replaced as a whole | Cloud module IDs, versions, trigger keys, APM, window mode, account credentials, and addon installation paths are outside this export contract. Do not add unsupported top-level fields to configure them. The client assigns module identity after import; the user configures triggers in the client. ### Macro rows `{ "index": 1, "hotkey": "ALT-SHIFT-NUMPAD1", "name": "开打", "macro": "/startattack" }` - A static macro requires both a nonempty name and body to generate an action. The assisted example treats a slot as occupied when either `name` or `macro` is nonempty. - Clear a macro with `name: "", macro: ""`, keeping a valid hotkey for dynamic use. `hotkey: ""` explicitly means unbound, not the default binding. - Preserve hotkeys when changing bodies. Avoid duplicate key combinations across all rows, including target slots 106–150. Dynamic registration rejects invalid or conflicting keys. - Slots 106–150 default to `SelectTarget1`–`SelectTarget45`: player, party1–4, raid1–40. Preserve their names, bodies, and hotkeys when using `Select`. Otherwise they may be explicitly cleared, but retain the rows. - Macro bodies contain game slash commands, not Lua code. Literal `\\n` has historical compatibility handling; new files should consistently use JSON `\n` escapes for actual line breaks. ### Property rows `{ "index": 1, "name": "Health", "mode": "custom", "params": "player", "libRef": "生命值", "code": "return UnitHealth(arg1)" }` | Field | Rule | |---|---| | index | 1–45, the physical file slot. Enabled properties are compacted during generation; logic always reads by name | | name | Stable, unique reference name. A display language change must not silently rename references | | mode | custom enables code; disabled retains configuration without enabling it; off is an empty placeholder. Do not generate legacy PropXXXX types for new modules | | params | At most 3 comma-separated parts. An empty part becomes nil, a parseable finite number becomes number, otherwise string. There is no CSV quote escaping; do not add quotes around string parameters | | libRef | Library entry name; empty string means independent code. Include both the code snapshot and the matching library entry when referencing a library | | code | Game Lua function body. May return numbers, booleans, or supported transport values; ordinary tables and arbitrary text cannot be read through Prop | `arg1`, `arg2`, and `arg3` are the row's parameters. Booleans arrive on the desktop as 1/0; numeric precision is at most two decimal places. Zero is truthy in desktop Lua, so use `Prop("InCombat") > 0`, not `if Prop("InCombat") then`. ### Logic rows `{ "index": 1, "id": 10001, "name": "main", "code": "if Prop(\"Ready\") > 0 then Macro(1) end" }` `id` is a JSON integer stored as Rust i64; bindings locate logic through it. In new files, give named logic rows unique positive integers such as 10001 and 10002; empty rows may use 0. Preserve the original numeric IDs when editing. Existing IDs often exceed JavaScript's `2^53-1`: do not overwrite a file through ordinary `JSON.parse` followed by `JSON.stringify`. Use a parser with large integer support, or Node 24's JSON.parse reviver `context.source` with `JSON.rawJSON` to preserve integer literals. Do not convert IDs to strings; the client rejects string IDs. `code` is plaintext desktop Lua, not base64. Do not change existing logic binding IDs to tidy the row order. ### Property library `{ "name": "生命值", "params": "player", "code": "return UnitHealth(arg1)", "icon": "" }` The library reuses code. On save, a matching `libRef` refreshes the row's code snapshot, while `params` remain row-specific. Removing a library entry preserves existing snapshots. A missing/null icon uses the default; an empty string hides it. Custom icon values must follow client-supported formats; icons are not game logic. Built-in names are stable references: do not translate persisted values. The complete library and native aura templates extracted from the current Rust implementation are appended below. ### Omitted fields, null, and clearing Import starts with a default template, then applies field overrides. For most Option fields, omission and null both mean no override, not deletion; an empty string is an explicit override. `macros`, `props`, and `luaScripts` overlay rows by index: `[]` does not clear template rows. To clear them, supply the relevant rows with empty strings and off mode. `propLibrary` is replaced as a whole, so `[]` explicitly clears it. A shortened example with omitted fields is not a lossless patch for an existing user file. ## 4. Public desktop logic APIs (Lua 5.4) These functions are available in `luaScripts[].code`. The game environment has no equivalent global `Macro` or `Prop` functions. | API | Return / behavior | Usage | |---|---|---| | `Prop(name)` | number; error if undefined | Reads the same frame for this action; names are case-sensitive | | `Macro(slotOrName)` | boolean, whether submitted | Dynamic slots 1–105; static slots 1–150. Returns false for unready macros, invalid/stale frames, or missing macros; invalid argument types raise errors | | `Cast(name)` | nil | Legacy compatibility. Prefer Macro in new code. The first matching static name wins in legacy lookup; avoid depending on ambiguous names | | `Select(index)` | nil | 1=player, 2–5=party1–4, 6–45=raid1–40. Invokes a SelectTargetN static macro; success in selecting a target is not guaranteed | | `CoolDown(name, ms)` | boolean | First call returns true and records time; returns true again at least ms after the previous true. Script throttling, not a skill cooldown query; the interval is consumed even if the subsequent Macro fails | | `SetTimeOut(name, ms)` | nil | Sets/overwrites a monotonic-clock deadline | | `GetTimeOut(name)` | boolean | True if never set; otherwise true only when the current time strictly exceeds the deadline | | `Sleep(ms)` | nil | Blocks the execution thread. Avoid long sleeps in frequent logic; it cannot wait for a new property frame | | `PressKey(vk, holdMs?)` | nil | Windows virtual key code; default hold 200 ms, dispatched by the host. Does not resolve the macro registry or provide macro synchronization. Use Macro for game macros | Repeated `Prop` calls in one script always read the same frame; `Sleep` does not obtain a new screenshot. Game functions such as `C_Spell`, `UnitHealth`, and `C_Timer` do not exist on the desktop. Game-side `SuperDPS.Prop` is not desktop `Prop`. Do not rely on undocumented IO, networking, or system libraries. Prefer starting a throttle only after successful submission (milliseconds): ```lua if Prop("Ready") > 0 and GetTimeOut("main") then if Macro("开打") then SetTimeOut("main", 300) end end ``` Switching modules or rebuilding the engine resets logic globals and timer dictionaries. Logic scripts in the same module engine share timer keys, so prefix keys by purpose. ## 5. Public game-side interfaces (Lua 5.1) `initCode` and `props[].code` execute inside the addon; the public namespace is `SuperDPS`. They may call WOW APIs that exist and are permitted for addons. Lua 5.1 does not support `goto`, `//` integer division, bitwise operators, or `\u{...}` string escapes. Generate Lua 5.1 syntax. | Interface | Contract | |---|---| | `SuperDPS.SetMacro(slot,name,body)` | See the next section; update during initialization or out-of-combat events | | `SuperDPS.DynamicSlots[index]` | Preset snapshot `{key,name,occupied}`. occupied means a nonempty name or body; dynamic updates do not modify this snapshot. An empty key means invalid/conflicting binding. Read only; do not mutate it to force slot allocation | | `SuperDPS.Print(...)` | Prints a game message prefixed with the current addon name; do not call every frame | | `SuperDPS.SN(value,tag?,unit?)` | Returns 0 for nil or secret values; returns other values unchanged. Secret diagnostics are deduplicated by call site. Not a number parser; a returned zero does not establish the actual game state | | `SuperDPS.RawUnitHealth/RawUnitHealthMax/RawUnitPower/RawUnitPowerMax` | Four preserved original functions. Use for direct transport of protected values; do not perform arbitrary arithmetic on those values | | `SuperDPS.Prop` | Module's game-side shared value table. Initialize keys yourself and return their values from properties to transmit them to the desktop | | `SuperDPS.GetUnitAura(unit,aura,filter)` | Lookup by spell ID or name; nil on failure. Legacy multiple-return shape; stacks, duration, expiration, and other values may be sanitized and degraded | | `SuperDPS.GetUnitBuff(unit,aura)` | HELPFUL lookup. Actual remaining time/stacks may be unavailable in combat; prefer the native channel for accurate aura fields | | `SuperDPS.GetUnitDebuff(unit,aura)` | HARMFUL lookup, with the same constraints | | `SuperDPS.HekeliPrimary` | Compatibility field for Hekili recommendations, intentionally spelled Hekeli. Depends on optional Hekili; check existence and value type rather than assuming availability | | `SuperDPS.ConfigureAuras(sources)` | Declares native aura sources during initialization; at most 16 distinct source fields | | `SuperDPS.Aura(name,field?)` | Defaults to remaining. Returns a transport reference: return it directly; do not perform game Lua arithmetic or comparisons on it | | `SuperDPS.BuiltinAura(unit,spell,field,filter?)` | Built-in template reference. The generator recognizes standard templates and registers them automatically. For custom rewrites, use explicit ConfigureAuras/Aura; arbitrary calls are not automatically discovered | `GetSpellInfo/GetSpellCooldown/GetSpellCharges/UnitAura/UnitBuff/UnitDebuff` have a legacy multiple-return compatibility layer inside the current addon chunk; this is different from newer `C_Spell` structured returns. Choose an API explicitly and do not mix positional returns with fields. Internal encoding, layout, `markAction`, `setRow`, and `MacroMeta` are not public module authoring interfaces. `IsClassic()`, `IsMidnight`, and `CleuAvailable` are historical compatibility stubs, not reliable game version detection. Read-only diagnostic tables: `SuperDPS.SecretSeen`, `SuperDPS.ForbiddenSeen`, `SuperDPS.ForbiddenDetail`, and `SuperDPS.AuraDiagnostics`. Inspect with game `/dump` when needed, not by traversing them in property hot paths. Game API secret values cannot be freely compared, used in arithmetic, converted with `tostring`, or tested for truthiness. Displayability does not imply permission to compute. For decisions that accept a fallback zero, use `SN` first. To retain an actual displayable numeric value, return it directly through the strip and decide in Rust. Native aura references are a third case: do not reduce them to ordinary numbers with `SN`. ## 6. Dynamic macros coexisting with presets `SetMacro` parameters: slot is an integer from 1 to 105; name is 1–96 UTF-8 bytes, with no whitespace-only names, control characters, invalid UTF-8, reserved `reload` name, or `SelectTarget` followed by digits. Different slots must not share a name. Body must be nonempty and contain no NUL. The hotkey comes from the existing slot and is not changed by this API. An initial definition or update returns `false,"pending"`; identical content that is actually ready returns `true,"ready"`. Invalid parameters raise errors without corrupting the old registry. Updating a slot replaces its name/body and invalidates its old name. Changes exist only for the current game session and are not written back to `.wa1`; rebuild them on reload. The underlying runtime queues combat-time requests, but modules should defer updates themselves: mark state dirty and process it out of combat. Minimal initialization when slot 1 has a valid hotkey and overwriting it is intended: ```lua SuperDPS.SetMacro(1, "hello", "/say ready") ``` To preserve presets, use the official assisted example's allocation policy: scan slots 1–105 once, retain every slot with a nonempty name or body, and append after the last occupied slot. Skip invalid/conflicting bindings. With no presets, start at 1; with a preset at 1, start at 2; with presets at 1 and 5, start at 6 rather than filling 2–4. Recycle only slots owned by the assisted module. If the candidate list exceeds actual available capacity, report an error before rewriting anything; do not overflow or overwrite presets. The current official assisted example: - Reads candidates from `C_AssistedCombat.GetRotationSpells`, deduplicates using `C_Spell.GetBaseSpell`, and resolves localized spell names. - Coalesces login, entering-world, spell-change, player specialization-change, and leaving-combat events into a 100 ms task. During combat it only marks state dirty, then reads the latest list after combat. - Calls `SetMacro` only for changed macros. Reordering does not write; retained skills keep stable slots. Removed assisted macros are disabled with unique placeholder names and `/stopmacro`. Records are not physically removed from the synchronization table, whose size remains bounded. - Checks completion only while pending, every 300 ms for at most 20 attempts. Later events may trigger another check. It does not repeatedly rescan candidates. - Prints an initialization-complete message first and an update-complete message after actual changes. These confirm game macro writes only; client synchronization is still required. - Adds no extra mounted, chat, death, or distance pause conditions. Returning zero for an unknown recommendation, unavailable API, or invalid data is validity handling. The official DEMO preserves slot 1, named `开打`, with `/startattack`, and appends assisted macros after it. The `official` logic still invokes only the recommended skill. This preset demonstrates preservation and is not automatically invoked as an extra action. If the user actually requests it, explicitly call `Macro("开打")` at the appropriate point after their required conditions. Do not introduce unsolicited target selection or start-attack behavior. ## 7. Native auras and property library examples Current support is limited to player buffs (`HELPFUL`) and target hostile debuffs (`HARMFUL`), not arbitrary unit/filter combinations. There are at most 16 distinct source fields; duplicates are deduplicated, and the 45 property slot limit still applies. An aura may exist with zero stacks; use `present` for existence. `remaining`, `duration`, and `elapsed` are seconds. `startTime` and `endTime` use the game timeline, not Unix time. `remainingPercent` and `elapsedPercent` are native ratios from 0 to 1. `applications` is the stack count; `present` is 1/0. `dispelType` is numeric: 0 none, 1 Magic, 2 Curse, 3 Disease, 4 Poison, 5 Enrage. An absent aura decodes to zero according to slot state; configuration, installation, or recognition errors do not establish actual absence. Declare sources once in initialization (48265 is an example spell ID; choose one for the intended class): ```lua SuperDPS.ConfigureAuras({ {name="advance", unit="player", filter="HELPFUL", spellId=48265, fields={"remaining", "present"}}, }) ``` Use two separate property rows: ```lua return SuperDPS.Aura("advance", "remaining") ``` ```lua return SuperDPS.Aura("advance", "present") ``` Read `Prop("AuraRemaining")` and `Prop("AuraPresent")` in desktop logic. Do not write `SuperDPS.Aura(...) > 0` inside game property code. Call `ConfigureAuras` only once during initialization, not every frame or event. After changing the module, regenerate the addon and `/reload` out of combat. Standard `BuiltinAura` templates are included below; row parameters use forms such as `player,48265`. ## 8. Performance, errors, and recommended composition Properties execute frequently, every 20 ms; perform only necessary reads. Create frames, register events/macros, and construct shared tables during initialization. Coalesce bursts of events, bound timer retries, and recheck combat lockdown before writes. Do not continuously poll the entire candidate list or wait for state changes using tight `while` loops or long `Sleep` calls in logic. For a single logic invocation, check conditions in priority order and return after a successful `Macro` call. This avoids dispatching several mutually exclusive skills from one frame. Query game skill cooldowns through properties; use script `CoolDown`/`GetTimeOut` for throttling. Macro bodies should express the intended game conditions without silently adding pause, casting, or target rules the user did not request. If execution fails, check in order: minimum client version; updated initialization code; enabled properties; name/ID references; slot hotkey conflicts; game messages; out-of-combat reload; full strip visibility; valid client frames and completed synchronization; logic trigger bindings. A false return from `Macro` is not a signal to rebuild macros indefinitely. ## 9. Downloads and validation - https://wa1.io/module.schema.json : Recommended complete output schema; rejects unknown fields. It does not describe every legacy permissive import form. - https://wa1.io/examples/blank.wa1 : Starting point with all macros/properties/logic explicitly cleared and default hotkeys retained. - https://wa1.io/examples/static-macro.wa1 : One static macro and one logic script. - https://wa1.io/examples/dynamic-macro.wa1 : Creation with SetMacro and invocation with Macro. - https://wa1.io/examples/aura-library.wa1 : Native auras, an ordinary parameterized property, and library references. Observation only; dispatches no keys. - https://wa1.io/examples/target-selection.wa1 : Preserves default target macros and demonstrates Select/timer calls. Confirm the intended target behavior before use. - https://wa1.io/examples/official-assisted-demo.wa1 : Complete DEMO preserving `开打` and automatically appending assisted macros. - https://wa1.io/examples/official-assisted-dynamic.wa1 : Existing compact example URL, with an empty macro table, preserving its original usage. - https://wa1.io/examples/official-assisted-init.lua : Initialization code for updating an existing module without replacing the rest of it. These examples demonstrate combinations of implemented capabilities; a single DEMO does not automatically run every action. Users configure desktop start keys and APM; account credentials and market publication are not embedded. When editing legacy modules, preserve original format content, especially IDs greater than `2^53` and legacy mode codes. The strict new-file schema is not a reason to delete historical fields. In the repository, run `npm run check` from `web` to verify generated assets, schema, links, and contract fingerprints. Run `cargo test --locked -p wa1-core` from `wa1-rust` for real import, cloud round-trip, and generator checks. Set `LUA51_EXE` for official Lua 5.1 validation. Website deployment enforces documentation generation and these existing example tests first. Tests do not start the game or dispatch real keys, and do not establish casting success rates. ## 10. Sources and ongoing synchronization Explanatory prose is maintained manually in English; templates and built-in library data come from an actual Rust export snapshot. The generator produces complete examples and website copies. Reviewed prose, templates, examples, APIs, and related source files are recorded with SHA-256 fingerprints. Deployment stops if sources differ from the review record and asks maintainers to check the contract. Never refresh fingerprints merely to bypass review. Update the document version and minimum client version when the corresponding semantics or required capabilities change; ordinary website wording changes do not imply new client capabilities. Sources include `module_json.rs`, `model/template.rs`, `model/prop_library.rs`, `engine/mod.rs`, `addon/builder.rs`, `addon/main_lua.rs`, `dynamic_macro.lua`, `aura_strip.lua`, `Main.lua`, `docs/addon-lua.md`, `docs/game-runtime.md`, `docs/input-hotkey.md`, and `docs/dynamic-macros.md`. The generator appends the format schema, built-in library, complete templates/examples, and reviewed source fingerprints below. The full document is self-contained for module generation and requires no website login. Preserve original strings in source-derived code and data even when they are not English. ## Appendix A: Recommended output JSON Schema ```json { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://wa1.io/module.schema.json", "title": "WA1 complete module format v1 for agents", "description": "Strict output profile for new files; excludes legacy permissive import forms. Lua semantics, references, and hotkeys require additional validation.", "type": "object", "additionalProperties": false, "required": [ "format", "formatVersion", "name", "author", "class", "globalName", "spellQueueWindow", "initCode", "macros", "props", "luaScripts", "propLibrary" ], "properties": { "format": { "const": "wa1-module" }, "formatVersion": { "const": 1 }, "name": { "type": "string", "minLength": 1 }, "author": { "type": [ "string", "null" ] }, "class": { "enum": [ "All", "Warrior", "Hunter", "Rogue", "Shaman", "Warlock", "Priest", "Mage", "Druid", "Paladin", "Monk", "DemonHunter", "DeathKnight", "Evoker" ] }, "globalName": { "type": "string", "pattern": "^[A-Za-z_][A-Za-z0-9_]*$" }, "spellQueueWindow": { "type": "integer", "minimum": 1, "maximum": 2147483647 }, "initCode": { "type": [ "string", "null" ] }, "macros": { "type": "array", "minItems": 150, "maxItems": 150, "items": { "type": "object", "additionalProperties": false, "required": [ "index", "hotkey", "name", "macro" ], "properties": { "index": { "type": "integer", "minimum": 1, "maximum": 150 }, "hotkey": { "type": "string" }, "name": { "type": [ "string", "null" ] }, "macro": { "type": [ "string", "null" ] } } } }, "props": { "type": "array", "minItems": 45, "maxItems": 45, "items": { "type": "object", "additionalProperties": false, "required": [ "index", "name", "mode", "params", "libRef", "code" ], "properties": { "index": { "type": "integer", "minimum": 1, "maximum": 45 }, "name": { "type": [ "string", "null" ] }, "mode": { "enum": [ "custom", "disabled", "off" ] }, "params": { "type": [ "string", "null" ] }, "libRef": { "type": [ "string", "null" ] }, "code": { "type": [ "string", "null" ] } } } }, "luaScripts": { "type": "array", "minItems": 50, "maxItems": 50, "items": { "type": "object", "additionalProperties": false, "required": [ "index", "id", "name", "code" ], "properties": { "index": { "type": "integer", "minimum": 1, "maximum": 50 }, "id": { "type": "integer", "minimum": 0 }, "name": { "type": [ "string", "null" ] }, "code": { "type": [ "string", "null" ] } } } }, "propLibrary": { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": [ "name", "params", "code" ], "properties": { "name": { "type": "string", "minLength": 1 }, "params": { "type": [ "string", "null" ] }, "code": { "type": [ "string", "null" ] }, "icon": { "type": [ "string", "null" ] } } } } } } ``` ## Appendix B: Complete current property library (names, parameters, and code) ```json [ { "name": "生命值", "params": "player", "code": "-- 战斗中可能为受保护值:只能直接返回(面板照常回传),不可比较或运算\nreturn UnitHealth(arg1)" }, { "name": "生命百分比", "params": "player", "code": "-- 受保护值不可做除法,用 FromGUID 直传 0~1 小数(勿改成 UnitHealth/UnitHealthMax 版)\nlocal guid = UnitGUID(arg1)\nif not guid then return 0 end\nreturn UnitPercentHealthFromGUID(guid)" }, { "name": "能量", "params": "player,3", "code": "-- 第二参数 3=能量;返回值可能受保护:直接返回,不可比较或运算\nreturn UnitPower(arg1, arg2)" }, { "name": "连击点", "params": "player,4", "code": "-- 第二参数 4=连击点;返回值可能受保护:直接返回,不可比较或运算\nreturn UnitPower(arg1, arg2)" }, { "name": "战斗中", "params": null, "code": "-- 战斗中按 1、脱战按 0\nreturn InCombatLockdown()" }, { "name": "有宠物", "params": null, "code": "-- 有召唤宠物按 1、无按 0\nreturn UnitExists(\"pet\")" }, { "name": "目标可攻击", "params": "target", "code": "-- 目标存在且可攻击按 1(常用作输出判断的总开关)\nreturn UnitExists(arg1) and UnitCanAttack(\"player\", arg1)" }, { "name": "敌对目标数", "params": null, "code": "-- 可见敌对姓名板计数(AOE 张数判断);受姓名板显示开关与距离限制,\n-- 需在游戏内开启「敌对姓名板」(默认 V 键)\nlocal n = 0\nfor i = 1, 40 do\n local u = \"nameplate\" .. i\n if UnitExists(u) and UnitCanAttack(\"player\", u) then n = n + 1 end\nend\nreturn n" }, { "name": "技能冷却", "params": "5277", "code": "-- timeUntilEndOfStartRecovery=剩余秒数;战斗中可能受保护:or 取默认与直接返回\n-- 都允许,但不可比较或运算(duration/startTime 实测战斗中受保护,勿仿)\nlocal info = C_Spell.GetSpellCooldown(arg1)\nreturn info and info.timeUntilEndOfStartRecovery or 0" }, { "name": "技能可用", "params": "5277", "code": "-- isActive/isOnGCD 官方保证永不受保护,可安全做逻辑判断(true/false 按 1/0 回传)\nlocal info = C_Spell.GetSpellCooldown(arg1)\nif not info then return false end\nreturn info.isActive and not info.isOnGCD" }, { "name": "公共冷却", "params": null, "code": "-- 公共冷却剩余秒数(61304 = 公共冷却专用查询 ID);可能受保护:直接返回即可\nlocal info = C_Spell.GetSpellCooldown(61304)\nreturn info and info.timeUntilEndOfStartRecovery or 0" }, { "name": "技能充能", "params": "108853", "code": "-- 当前充能层数;战斗中可能为受保护值:直接返回,不可比较或运算\n-- (无充能机制的技能按 0)\nlocal c = C_Spell.GetSpellCharges(arg1)\nreturn c and c.currentCharges or 0" }, { "name": "技能射程内", "params": "116,target", "code": "-- 目标在技能射程内按 1;返回值可能受保护:直接返回,不可做逻辑判断\n-- (技能无射程数据时为空,按 0 回传)\nreturn C_Spell.IsSpellInRange(arg1, arg2)" }, { "name": "物品数量", "params": "5512", "code": "-- 背包内物品数量(药水/治疗石等);非战斗数值,可直接使用\nreturn C_Item.GetItemCount(arg1)" }, { "name": "增益剩余", "params": "player,774", "code": "return SuperDPS.BuiltinAura(arg1, arg2, \"remaining\", \"HELPFUL\")" }, { "name": "增益层数", "params": "player,774", "code": "return SuperDPS.BuiltinAura(arg1, arg2, \"applications\", \"HELPFUL\")" }, { "name": "减益剩余", "params": "target,589", "code": "return SuperDPS.BuiltinAura(arg1, arg2, \"remaining\", \"HARMFUL\")" }, { "name": "减益层数", "params": "target,589", "code": "return SuperDPS.BuiltinAura(arg1, arg2, \"applications\", \"HARMFUL\")" }, { "name": "自施减益剩余", "params": "target,589", "code": "-- 只认「自己施放」的减益(DoT 补覆盖判断):source 为 player 才计\nlocal name, _, _, _, _, expire, source = SuperDPS.GetUnitDebuff(arg1, arg2)\nif not name or source ~= \"player\" then return 0 end\nexpire = SuperDPS.SN(expire, \"lib.mydotremain\")\nif expire == 0 then return 0 end\nreturn expire - GetTime()" }, { "name": "目标施法", "params": "target", "code": "-- 正在施放/引导的法术 ID(打断判断),没在施法按 0\n-- 返回值可能受保护:直接返回,不可比较或运算\nlocal id = select(9, UnitCastingInfo(arg1))\nif not id then id = select(8, UnitChannelInfo(arg1)) end\nreturn id or 0" }, { "name": "施法剩余", "params": "target", "code": "-- 施法完成剩余秒数(打断时机);endTime 要参与算术,必须先经 SuperDPS.SN 消毒\nlocal endMS = select(5, UnitCastingInfo(arg1))\nif not endMS then endMS = select(5, UnitChannelInfo(arg1)) end\nendMS = SuperDPS.SN(endMS, \"lib.castremain\")\nif endMS == 0 then return 0 end\nreturn endMS / 1000 - GetTime()" }, { "name": "内置推荐", "params": null, "code": "-- 游戏内置「辅助作战」推荐的下一技能 ID,零插件依赖(实测 2026-08 Midnight 非受保护值,\n-- 可直传可比较;无推荐/老客户端按 0)\nreturn C_AssistedCombat and C_AssistedCombat.GetNextCastSpell() or 0" }, { "name": "Hekili推荐", "params": null, "code": "-- 未装 Hekili 时恒 0\nreturn SuperDPS.HekeliPrimary" }, { "name": "全局属性", "params": "myvar", "code": "-- 读共享表:游戏内宏或初始化代码写入 全局名.Prop[\"名字\"] = 值(全局名默认 MyDps,\n-- 编辑器可改),此属性按名字读回。值可能为受保护值:直接返回,不可比较或运算\nif not arg1 then return 0 end\nreturn SuperDPS.Prop[arg1]" }, { "name": "光环剩余时间", "params": "player,48265", "code": "-- 参数:player(增益)或 target(减益),技能 ID\nreturn SuperDPS.BuiltinAura(arg1, arg2, \"remaining\")" }, { "name": "光环层数", "params": "player,48265", "code": "-- 参数:player(增益)或 target(减益),技能 ID\nreturn SuperDPS.BuiltinAura(arg1, arg2, \"applications\")" }, { "name": "光环是否存在", "params": "player,48265", "code": "-- 参数:player(增益)或 target(减益),技能 ID\nreturn SuperDPS.BuiltinAura(arg1, arg2, \"present\")" }, { "name": "光环总时长", "params": "player,48265", "code": "-- 参数:player(增益)或 target(减益),技能 ID\nreturn SuperDPS.BuiltinAura(arg1, arg2, \"duration\")" }, { "name": "光环已过时间", "params": "player,48265", "code": "-- 参数:player(增益)或 target(减益),技能 ID\nreturn SuperDPS.BuiltinAura(arg1, arg2, \"elapsed\")" }, { "name": "光环开始时间", "params": "player,48265", "code": "-- 参数:player(增益)或 target(减益),技能 ID\nreturn SuperDPS.BuiltinAura(arg1, arg2, \"startTime\")" }, { "name": "光环结束时间", "params": "player,48265", "code": "-- 参数:player(增益)或 target(减益),技能 ID\nreturn SuperDPS.BuiltinAura(arg1, arg2, \"endTime\")" }, { "name": "光环剩余比例", "params": "player,48265", "code": "-- 参数:player(增益)或 target(减益),技能 ID\nreturn SuperDPS.BuiltinAura(arg1, arg2, \"remainingPercent\")" }, { "name": "光环已过比例", "params": "player,48265", "code": "-- 参数:player(增益)或 target(减益),技能 ID\nreturn SuperDPS.BuiltinAura(arg1, arg2, \"elapsedPercent\")" }, { "name": "光环驱散类型", "params": "player,48265", "code": "-- 参数:player(增益)或 target(减益),技能 ID\nreturn SuperDPS.BuiltinAura(arg1, arg2, \"dispelType\")" } ] ``` ## Complete file: blank.wa1 Save the following JSON directly; its arrays include every slot. ```json {"format":"wa1-module","formatVersion":1,"name":"空白完整模块","author":null,"class":"All","globalName":"SuperDPS","spellQueueWindow":250,"initCode":"","macros":[{"index":1,"hotkey":"ALT-SHIFT-NUMPAD1","name":"","macro":""},{"index":2,"hotkey":"ALT-SHIFT-NUMPAD2","name":"","macro":""},{"index":3,"hotkey":"ALT-SHIFT-NUMPAD3","name":"","macro":""},{"index":4,"hotkey":"ALT-SHIFT-NUMPAD4","name":"","macro":""},{"index":5,"hotkey":"ALT-SHIFT-NUMPAD5","name":"","macro":""},{"index":6,"hotkey":"ALT-SHIFT-NUMPAD6","name":"","macro":""},{"index":7,"hotkey":"ALT-SHIFT-NUMPAD7","name":"","macro":""},{"index":8,"hotkey":"ALT-SHIFT-NUMPAD8","name":"","macro":""},{"index":9,"hotkey":"ALT-SHIFT-NUMPAD9","name":"","macro":""},{"index":10,"hotkey":"ALT-SHIFT-NUMPAD0","name":"","macro":""},{"index":11,"hotkey":"CTRL-SHIFT-NUMPAD1","name":"","macro":""},{"index":12,"hotkey":"CTRL-SHIFT-NUMPAD2","name":"","macro":""},{"index":13,"hotkey":"CTRL-SHIFT-NUMPAD3","name":"","macro":""},{"index":14,"hotkey":"CTRL-SHIFT-NUMPAD4","name":"","macro":""},{"index":15,"hotkey":"CTRL-SHIFT-NUMPAD5","name":"","macro":""},{"index":16,"hotkey":"CTRL-SHIFT-NUMPAD6","name":"","macro":""},{"index":17,"hotkey":"CTRL-SHIFT-NUMPAD7","name":"","macro":""},{"index":18,"hotkey":"CTRL-SHIFT-NUMPAD8","name":"","macro":""},{"index":19,"hotkey":"CTRL-SHIFT-NUMPAD9","name":"","macro":""},{"index":20,"hotkey":"CTRL-SHIFT-NUMPAD0","name":"","macro":""},{"index":21,"hotkey":"SHIFT-NUMPAD1","name":"","macro":""},{"index":22,"hotkey":"SHIFT-NUMPAD2","name":"","macro":""},{"index":23,"hotkey":"SHIFT-NUMPAD3","name":"","macro":""},{"index":24,"hotkey":"SHIFT-NUMPAD4","name":"","macro":""},{"index":25,"hotkey":"SHIFT-NUMPAD5","name":"","macro":""},{"index":26,"hotkey":"SHIFT-NUMPAD6","name":"","macro":""},{"index":27,"hotkey":"SHIFT-NUMPAD7","name":"","macro":""},{"index":28,"hotkey":"SHIFT-NUMPAD8","name":"","macro":""},{"index":29,"hotkey":"SHIFT-NUMPAD9","name":"","macro":""},{"index":30,"hotkey":"SHIFT-NUMPAD0","name":"","macro":""},{"index":31,"hotkey":"CTRL-NUMPAD1","name":"","macro":""},{"index":32,"hotkey":"CTRL-NUMPAD2","name":"","macro":""},{"index":33,"hotkey":"CTRL-NUMPAD3","name":"","macro":""},{"index":34,"hotkey":"CTRL-NUMPAD4","name":"","macro":""},{"index":35,"hotkey":"CTRL-NUMPAD5","name":"","macro":""},{"index":36,"hotkey":"CTRL-NUMPAD6","name":"","macro":""},{"index":37,"hotkey":"CTRL-NUMPAD7","name":"","macro":""},{"index":38,"hotkey":"CTRL-NUMPAD8","name":"","macro":""},{"index":39,"hotkey":"CTRL-NUMPAD9","name":"","macro":""},{"index":40,"hotkey":"CTRL-NUMPAD0","name":"","macro":""},{"index":41,"hotkey":"ALT-NUMPAD1","name":"","macro":""},{"index":42,"hotkey":"ALT-NUMPAD2","name":"","macro":""},{"index":43,"hotkey":"ALT-NUMPAD3","name":"","macro":""},{"index":44,"hotkey":"ALT-NUMPAD4","name":"","macro":""},{"index":45,"hotkey":"ALT-NUMPAD5","name":"","macro":""},{"index":46,"hotkey":"ALT-NUMPAD6","name":"","macro":""},{"index":47,"hotkey":"ALT-NUMPAD7","name":"","macro":""},{"index":48,"hotkey":"ALT-NUMPAD8","name":"","macro":""},{"index":49,"hotkey":"ALT-NUMPAD9","name":"","macro":""},{"index":50,"hotkey":"ALT-NUMPAD0","name":"","macro":""},{"index":51,"hotkey":"ALT-SHIFT-,","name":"","macro":""},{"index":52,"hotkey":"ALT-SHIFT-.","name":"","macro":""},{"index":53,"hotkey":"ALT-SHIFT-/","name":"","macro":""},{"index":54,"hotkey":"ALT-SHIFT-;","name":"","macro":""},{"index":55,"hotkey":"ALT-SHIFT-'","name":"","macro":""},{"index":56,"hotkey":"ALT-SHIFT-[","name":"","macro":""},{"index":57,"hotkey":"ALT-SHIFT-]","name":"","macro":""},{"index":58,"hotkey":"ALT-SHIFT-=","name":"","macro":""},{"index":59,"hotkey":"CTRL-SHIFT-,","name":"","macro":""},{"index":60,"hotkey":"CTRL-SHIFT-.","name":"","macro":""},{"index":61,"hotkey":"CTRL-SHIFT-/","name":"","macro":""},{"index":62,"hotkey":"CTRL-SHIFT-;","name":"","macro":""},{"index":63,"hotkey":"CTRL-SHIFT-'","name":"","macro":""},{"index":64,"hotkey":"CTRL-SHIFT-[","name":"","macro":""},{"index":65,"hotkey":"CTRL-SHIFT-]","name":"","macro":""},{"index":66,"hotkey":"CTRL-SHIFT-=","name":"","macro":""},{"index":67,"hotkey":"SHIFT-,","name":"","macro":""},{"index":68,"hotkey":"SHIFT-.","name":"","macro":""},{"index":69,"hotkey":"SHIFT-/","name":"","macro":""},{"index":70,"hotkey":"SHIFT-;","name":"","macro":""},{"index":71,"hotkey":"SHIFT-'","name":"","macro":""},{"index":72,"hotkey":"SHIFT-[","name":"","macro":""},{"index":73,"hotkey":"SHIFT-]","name":"","macro":""},{"index":74,"hotkey":"SHIFT-=","name":"","macro":""},{"index":75,"hotkey":"CTRL-,","name":"","macro":""},{"index":76,"hotkey":"CTRL-.","name":"","macro":""},{"index":77,"hotkey":"CTRL-/","name":"","macro":""},{"index":78,"hotkey":"CTRL-;","name":"","macro":""},{"index":79,"hotkey":"CTRL-'","name":"","macro":""},{"index":80,"hotkey":"CTRL-[","name":"","macro":""},{"index":81,"hotkey":"CTRL-]","name":"","macro":""},{"index":82,"hotkey":"CTRL-=","name":"","macro":""},{"index":83,"hotkey":"ALT-,","name":"","macro":""},{"index":84,"hotkey":"ALT-.","name":"","macro":""},{"index":85,"hotkey":"ALT-/","name":"","macro":""},{"index":86,"hotkey":"ALT-;","name":"","macro":""},{"index":87,"hotkey":"ALT-'","name":"","macro":""},{"index":88,"hotkey":"ALT-[","name":"","macro":""},{"index":89,"hotkey":"ALT-]","name":"","macro":""},{"index":90,"hotkey":"ALT-=","name":"","macro":""},{"index":91,"hotkey":"ALT-SHIFT-F1","name":"","macro":""},{"index":92,"hotkey":"ALT-SHIFT-F2","name":"","macro":""},{"index":93,"hotkey":"ALT-SHIFT-F3","name":"","macro":""},{"index":94,"hotkey":"ALT-SHIFT-F4","name":"","macro":""},{"index":95,"hotkey":"ALT-SHIFT-F5","name":"","macro":""},{"index":96,"hotkey":"ALT-SHIFT-F6","name":"","macro":""},{"index":97,"hotkey":"ALT-SHIFT-F7","name":"","macro":""},{"index":98,"hotkey":"ALT-SHIFT-F8","name":"","macro":""},{"index":99,"hotkey":"ALT-SHIFT-F9","name":"","macro":""},{"index":100,"hotkey":"ALT-SHIFT-F10","name":"","macro":""},{"index":101,"hotkey":"ALT-SHIFT-F11","name":"","macro":""},{"index":102,"hotkey":"ALT-SHIFT-F12","name":"","macro":""},{"index":103,"hotkey":"CTRL-SHIFT-F1","name":"","macro":""},{"index":104,"hotkey":"CTRL-SHIFT-F2","name":"","macro":""},{"index":105,"hotkey":"CTRL-SHIFT-F3","name":"","macro":""},{"index":106,"hotkey":"SHIFT-F1","name":"","macro":""},{"index":107,"hotkey":"SHIFT-F2","name":"","macro":""},{"index":108,"hotkey":"SHIFT-F3","name":"","macro":""},{"index":109,"hotkey":"SHIFT-F4","name":"","macro":""},{"index":110,"hotkey":"SHIFT-F5","name":"","macro":""},{"index":111,"hotkey":"SHIFT-F6","name":"","macro":""},{"index":112,"hotkey":"SHIFT-F7","name":"","macro":""},{"index":113,"hotkey":"SHIFT-F8","name":"","macro":""},{"index":114,"hotkey":"SHIFT-F9","name":"","macro":""},{"index":115,"hotkey":"SHIFT-F10","name":"","macro":""},{"index":116,"hotkey":"SHIFT-F11","name":"","macro":""},{"index":117,"hotkey":"SHIFT-F12","name":"","macro":""},{"index":118,"hotkey":"CTRL-F1","name":"","macro":""},{"index":119,"hotkey":"CTRL-F2","name":"","macro":""},{"index":120,"hotkey":"CTRL-F3","name":"","macro":""},{"index":121,"hotkey":"CTRL-F4","name":"","macro":""},{"index":122,"hotkey":"CTRL-F5","name":"","macro":""},{"index":123,"hotkey":"CTRL-F6","name":"","macro":""},{"index":124,"hotkey":"CTRL-F7","name":"","macro":""},{"index":125,"hotkey":"CTRL-F8","name":"","macro":""},{"index":126,"hotkey":"CTRL-F9","name":"","macro":""},{"index":127,"hotkey":"CTRL-F10","name":"","macro":""},{"index":128,"hotkey":"CTRL-F11","name":"","macro":""},{"index":129,"hotkey":"CTRL-F12","name":"","macro":""},{"index":130,"hotkey":"ALT-F1","name":"","macro":""},{"index":131,"hotkey":"ALT-F2","name":"","macro":""},{"index":132,"hotkey":"ALT-F3","name":"","macro":""},{"index":133,"hotkey":"ALT-F4","name":"","macro":""},{"index":134,"hotkey":"ALT-F5","name":"","macro":""},{"index":135,"hotkey":"ALT-F6","name":"","macro":""},{"index":136,"hotkey":"ALT-F7","name":"","macro":""},{"index":137,"hotkey":"ALT-F8","name":"","macro":""},{"index":138,"hotkey":"ALT-F9","name":"","macro":""},{"index":139,"hotkey":"ALT-F10","name":"","macro":""},{"index":140,"hotkey":"ALT-F11","name":"","macro":""},{"index":141,"hotkey":"ALT-F12","name":"","macro":""},{"index":142,"hotkey":"CTRL-SHIFT-F4","name":"","macro":""},{"index":143,"hotkey":"CTRL-SHIFT-F5","name":"","macro":""},{"index":144,"hotkey":"CTRL-SHIFT-F6","name":"","macro":""},{"index":145,"hotkey":"CTRL-SHIFT-F7","name":"","macro":""},{"index":146,"hotkey":"CTRL-SHIFT-F8","name":"","macro":""},{"index":147,"hotkey":"CTRL-SHIFT-F9","name":"","macro":""},{"index":148,"hotkey":"CTRL-SHIFT-F10","name":"","macro":""},{"index":149,"hotkey":"CTRL-SHIFT-F11","name":"","macro":""},{"index":150,"hotkey":"CTRL-SHIFT-F12","name":"","macro":""}],"props":[{"index":1,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":2,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":3,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":4,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":5,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":6,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":7,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":8,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":9,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":10,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":11,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":12,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":13,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":14,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":15,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":16,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":17,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":18,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":19,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":20,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":21,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":22,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":23,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":24,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":25,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":26,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":27,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":28,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":29,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":30,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":31,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":32,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":33,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":34,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":35,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":36,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":37,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":38,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":39,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":40,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":41,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":42,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":43,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":44,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":45,"name":"","mode":"off","params":"","libRef":"","code":""}],"luaScripts":[{"index":1,"id":0,"name":"","code":""},{"index":2,"id":0,"name":"","code":""},{"index":3,"id":0,"name":"","code":""},{"index":4,"id":0,"name":"","code":""},{"index":5,"id":0,"name":"","code":""},{"index":6,"id":0,"name":"","code":""},{"index":7,"id":0,"name":"","code":""},{"index":8,"id":0,"name":"","code":""},{"index":9,"id":0,"name":"","code":""},{"index":10,"id":0,"name":"","code":""},{"index":11,"id":0,"name":"","code":""},{"index":12,"id":0,"name":"","code":""},{"index":13,"id":0,"name":"","code":""},{"index":14,"id":0,"name":"","code":""},{"index":15,"id":0,"name":"","code":""},{"index":16,"id":0,"name":"","code":""},{"index":17,"id":0,"name":"","code":""},{"index":18,"id":0,"name":"","code":""},{"index":19,"id":0,"name":"","code":""},{"index":20,"id":0,"name":"","code":""},{"index":21,"id":0,"name":"","code":""},{"index":22,"id":0,"name":"","code":""},{"index":23,"id":0,"name":"","code":""},{"index":24,"id":0,"name":"","code":""},{"index":25,"id":0,"name":"","code":""},{"index":26,"id":0,"name":"","code":""},{"index":27,"id":0,"name":"","code":""},{"index":28,"id":0,"name":"","code":""},{"index":29,"id":0,"name":"","code":""},{"index":30,"id":0,"name":"","code":""},{"index":31,"id":0,"name":"","code":""},{"index":32,"id":0,"name":"","code":""},{"index":33,"id":0,"name":"","code":""},{"index":34,"id":0,"name":"","code":""},{"index":35,"id":0,"name":"","code":""},{"index":36,"id":0,"name":"","code":""},{"index":37,"id":0,"name":"","code":""},{"index":38,"id":0,"name":"","code":""},{"index":39,"id":0,"name":"","code":""},{"index":40,"id":0,"name":"","code":""},{"index":41,"id":0,"name":"","code":""},{"index":42,"id":0,"name":"","code":""},{"index":43,"id":0,"name":"","code":""},{"index":44,"id":0,"name":"","code":""},{"index":45,"id":0,"name":"","code":""},{"index":46,"id":0,"name":"","code":""},{"index":47,"id":0,"name":"","code":""},{"index":48,"id":0,"name":"","code":""},{"index":49,"id":0,"name":"","code":""},{"index":50,"id":0,"name":"","code":""}],"propLibrary":[]} ``` ## Complete file: static-macro.wa1 Save the following JSON directly; its arrays include every slot. ```json {"format":"wa1-module","formatVersion":1,"name":"静态宏最小示例","author":null,"class":"All","globalName":"SuperDPS","spellQueueWindow":250,"initCode":"","macros":[{"index":1,"hotkey":"ALT-SHIFT-NUMPAD1","name":"Hello","macro":"/say WA1 ready"},{"index":2,"hotkey":"ALT-SHIFT-NUMPAD2","name":"","macro":""},{"index":3,"hotkey":"ALT-SHIFT-NUMPAD3","name":"","macro":""},{"index":4,"hotkey":"ALT-SHIFT-NUMPAD4","name":"","macro":""},{"index":5,"hotkey":"ALT-SHIFT-NUMPAD5","name":"","macro":""},{"index":6,"hotkey":"ALT-SHIFT-NUMPAD6","name":"","macro":""},{"index":7,"hotkey":"ALT-SHIFT-NUMPAD7","name":"","macro":""},{"index":8,"hotkey":"ALT-SHIFT-NUMPAD8","name":"","macro":""},{"index":9,"hotkey":"ALT-SHIFT-NUMPAD9","name":"","macro":""},{"index":10,"hotkey":"ALT-SHIFT-NUMPAD0","name":"","macro":""},{"index":11,"hotkey":"CTRL-SHIFT-NUMPAD1","name":"","macro":""},{"index":12,"hotkey":"CTRL-SHIFT-NUMPAD2","name":"","macro":""},{"index":13,"hotkey":"CTRL-SHIFT-NUMPAD3","name":"","macro":""},{"index":14,"hotkey":"CTRL-SHIFT-NUMPAD4","name":"","macro":""},{"index":15,"hotkey":"CTRL-SHIFT-NUMPAD5","name":"","macro":""},{"index":16,"hotkey":"CTRL-SHIFT-NUMPAD6","name":"","macro":""},{"index":17,"hotkey":"CTRL-SHIFT-NUMPAD7","name":"","macro":""},{"index":18,"hotkey":"CTRL-SHIFT-NUMPAD8","name":"","macro":""},{"index":19,"hotkey":"CTRL-SHIFT-NUMPAD9","name":"","macro":""},{"index":20,"hotkey":"CTRL-SHIFT-NUMPAD0","name":"","macro":""},{"index":21,"hotkey":"SHIFT-NUMPAD1","name":"","macro":""},{"index":22,"hotkey":"SHIFT-NUMPAD2","name":"","macro":""},{"index":23,"hotkey":"SHIFT-NUMPAD3","name":"","macro":""},{"index":24,"hotkey":"SHIFT-NUMPAD4","name":"","macro":""},{"index":25,"hotkey":"SHIFT-NUMPAD5","name":"","macro":""},{"index":26,"hotkey":"SHIFT-NUMPAD6","name":"","macro":""},{"index":27,"hotkey":"SHIFT-NUMPAD7","name":"","macro":""},{"index":28,"hotkey":"SHIFT-NUMPAD8","name":"","macro":""},{"index":29,"hotkey":"SHIFT-NUMPAD9","name":"","macro":""},{"index":30,"hotkey":"SHIFT-NUMPAD0","name":"","macro":""},{"index":31,"hotkey":"CTRL-NUMPAD1","name":"","macro":""},{"index":32,"hotkey":"CTRL-NUMPAD2","name":"","macro":""},{"index":33,"hotkey":"CTRL-NUMPAD3","name":"","macro":""},{"index":34,"hotkey":"CTRL-NUMPAD4","name":"","macro":""},{"index":35,"hotkey":"CTRL-NUMPAD5","name":"","macro":""},{"index":36,"hotkey":"CTRL-NUMPAD6","name":"","macro":""},{"index":37,"hotkey":"CTRL-NUMPAD7","name":"","macro":""},{"index":38,"hotkey":"CTRL-NUMPAD8","name":"","macro":""},{"index":39,"hotkey":"CTRL-NUMPAD9","name":"","macro":""},{"index":40,"hotkey":"CTRL-NUMPAD0","name":"","macro":""},{"index":41,"hotkey":"ALT-NUMPAD1","name":"","macro":""},{"index":42,"hotkey":"ALT-NUMPAD2","name":"","macro":""},{"index":43,"hotkey":"ALT-NUMPAD3","name":"","macro":""},{"index":44,"hotkey":"ALT-NUMPAD4","name":"","macro":""},{"index":45,"hotkey":"ALT-NUMPAD5","name":"","macro":""},{"index":46,"hotkey":"ALT-NUMPAD6","name":"","macro":""},{"index":47,"hotkey":"ALT-NUMPAD7","name":"","macro":""},{"index":48,"hotkey":"ALT-NUMPAD8","name":"","macro":""},{"index":49,"hotkey":"ALT-NUMPAD9","name":"","macro":""},{"index":50,"hotkey":"ALT-NUMPAD0","name":"","macro":""},{"index":51,"hotkey":"ALT-SHIFT-,","name":"","macro":""},{"index":52,"hotkey":"ALT-SHIFT-.","name":"","macro":""},{"index":53,"hotkey":"ALT-SHIFT-/","name":"","macro":""},{"index":54,"hotkey":"ALT-SHIFT-;","name":"","macro":""},{"index":55,"hotkey":"ALT-SHIFT-'","name":"","macro":""},{"index":56,"hotkey":"ALT-SHIFT-[","name":"","macro":""},{"index":57,"hotkey":"ALT-SHIFT-]","name":"","macro":""},{"index":58,"hotkey":"ALT-SHIFT-=","name":"","macro":""},{"index":59,"hotkey":"CTRL-SHIFT-,","name":"","macro":""},{"index":60,"hotkey":"CTRL-SHIFT-.","name":"","macro":""},{"index":61,"hotkey":"CTRL-SHIFT-/","name":"","macro":""},{"index":62,"hotkey":"CTRL-SHIFT-;","name":"","macro":""},{"index":63,"hotkey":"CTRL-SHIFT-'","name":"","macro":""},{"index":64,"hotkey":"CTRL-SHIFT-[","name":"","macro":""},{"index":65,"hotkey":"CTRL-SHIFT-]","name":"","macro":""},{"index":66,"hotkey":"CTRL-SHIFT-=","name":"","macro":""},{"index":67,"hotkey":"SHIFT-,","name":"","macro":""},{"index":68,"hotkey":"SHIFT-.","name":"","macro":""},{"index":69,"hotkey":"SHIFT-/","name":"","macro":""},{"index":70,"hotkey":"SHIFT-;","name":"","macro":""},{"index":71,"hotkey":"SHIFT-'","name":"","macro":""},{"index":72,"hotkey":"SHIFT-[","name":"","macro":""},{"index":73,"hotkey":"SHIFT-]","name":"","macro":""},{"index":74,"hotkey":"SHIFT-=","name":"","macro":""},{"index":75,"hotkey":"CTRL-,","name":"","macro":""},{"index":76,"hotkey":"CTRL-.","name":"","macro":""},{"index":77,"hotkey":"CTRL-/","name":"","macro":""},{"index":78,"hotkey":"CTRL-;","name":"","macro":""},{"index":79,"hotkey":"CTRL-'","name":"","macro":""},{"index":80,"hotkey":"CTRL-[","name":"","macro":""},{"index":81,"hotkey":"CTRL-]","name":"","macro":""},{"index":82,"hotkey":"CTRL-=","name":"","macro":""},{"index":83,"hotkey":"ALT-,","name":"","macro":""},{"index":84,"hotkey":"ALT-.","name":"","macro":""},{"index":85,"hotkey":"ALT-/","name":"","macro":""},{"index":86,"hotkey":"ALT-;","name":"","macro":""},{"index":87,"hotkey":"ALT-'","name":"","macro":""},{"index":88,"hotkey":"ALT-[","name":"","macro":""},{"index":89,"hotkey":"ALT-]","name":"","macro":""},{"index":90,"hotkey":"ALT-=","name":"","macro":""},{"index":91,"hotkey":"ALT-SHIFT-F1","name":"","macro":""},{"index":92,"hotkey":"ALT-SHIFT-F2","name":"","macro":""},{"index":93,"hotkey":"ALT-SHIFT-F3","name":"","macro":""},{"index":94,"hotkey":"ALT-SHIFT-F4","name":"","macro":""},{"index":95,"hotkey":"ALT-SHIFT-F5","name":"","macro":""},{"index":96,"hotkey":"ALT-SHIFT-F6","name":"","macro":""},{"index":97,"hotkey":"ALT-SHIFT-F7","name":"","macro":""},{"index":98,"hotkey":"ALT-SHIFT-F8","name":"","macro":""},{"index":99,"hotkey":"ALT-SHIFT-F9","name":"","macro":""},{"index":100,"hotkey":"ALT-SHIFT-F10","name":"","macro":""},{"index":101,"hotkey":"ALT-SHIFT-F11","name":"","macro":""},{"index":102,"hotkey":"ALT-SHIFT-F12","name":"","macro":""},{"index":103,"hotkey":"CTRL-SHIFT-F1","name":"","macro":""},{"index":104,"hotkey":"CTRL-SHIFT-F2","name":"","macro":""},{"index":105,"hotkey":"CTRL-SHIFT-F3","name":"","macro":""},{"index":106,"hotkey":"SHIFT-F1","name":"","macro":""},{"index":107,"hotkey":"SHIFT-F2","name":"","macro":""},{"index":108,"hotkey":"SHIFT-F3","name":"","macro":""},{"index":109,"hotkey":"SHIFT-F4","name":"","macro":""},{"index":110,"hotkey":"SHIFT-F5","name":"","macro":""},{"index":111,"hotkey":"SHIFT-F6","name":"","macro":""},{"index":112,"hotkey":"SHIFT-F7","name":"","macro":""},{"index":113,"hotkey":"SHIFT-F8","name":"","macro":""},{"index":114,"hotkey":"SHIFT-F9","name":"","macro":""},{"index":115,"hotkey":"SHIFT-F10","name":"","macro":""},{"index":116,"hotkey":"SHIFT-F11","name":"","macro":""},{"index":117,"hotkey":"SHIFT-F12","name":"","macro":""},{"index":118,"hotkey":"CTRL-F1","name":"","macro":""},{"index":119,"hotkey":"CTRL-F2","name":"","macro":""},{"index":120,"hotkey":"CTRL-F3","name":"","macro":""},{"index":121,"hotkey":"CTRL-F4","name":"","macro":""},{"index":122,"hotkey":"CTRL-F5","name":"","macro":""},{"index":123,"hotkey":"CTRL-F6","name":"","macro":""},{"index":124,"hotkey":"CTRL-F7","name":"","macro":""},{"index":125,"hotkey":"CTRL-F8","name":"","macro":""},{"index":126,"hotkey":"CTRL-F9","name":"","macro":""},{"index":127,"hotkey":"CTRL-F10","name":"","macro":""},{"index":128,"hotkey":"CTRL-F11","name":"","macro":""},{"index":129,"hotkey":"CTRL-F12","name":"","macro":""},{"index":130,"hotkey":"ALT-F1","name":"","macro":""},{"index":131,"hotkey":"ALT-F2","name":"","macro":""},{"index":132,"hotkey":"ALT-F3","name":"","macro":""},{"index":133,"hotkey":"ALT-F4","name":"","macro":""},{"index":134,"hotkey":"ALT-F5","name":"","macro":""},{"index":135,"hotkey":"ALT-F6","name":"","macro":""},{"index":136,"hotkey":"ALT-F7","name":"","macro":""},{"index":137,"hotkey":"ALT-F8","name":"","macro":""},{"index":138,"hotkey":"ALT-F9","name":"","macro":""},{"index":139,"hotkey":"ALT-F10","name":"","macro":""},{"index":140,"hotkey":"ALT-F11","name":"","macro":""},{"index":141,"hotkey":"ALT-F12","name":"","macro":""},{"index":142,"hotkey":"CTRL-SHIFT-F4","name":"","macro":""},{"index":143,"hotkey":"CTRL-SHIFT-F5","name":"","macro":""},{"index":144,"hotkey":"CTRL-SHIFT-F6","name":"","macro":""},{"index":145,"hotkey":"CTRL-SHIFT-F7","name":"","macro":""},{"index":146,"hotkey":"CTRL-SHIFT-F8","name":"","macro":""},{"index":147,"hotkey":"CTRL-SHIFT-F9","name":"","macro":""},{"index":148,"hotkey":"CTRL-SHIFT-F10","name":"","macro":""},{"index":149,"hotkey":"CTRL-SHIFT-F11","name":"","macro":""},{"index":150,"hotkey":"CTRL-SHIFT-F12","name":"","macro":""}],"props":[{"index":1,"name":"Ready","mode":"custom","params":"","libRef":"","code":"return true"},{"index":2,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":3,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":4,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":5,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":6,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":7,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":8,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":9,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":10,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":11,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":12,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":13,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":14,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":15,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":16,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":17,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":18,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":19,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":20,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":21,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":22,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":23,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":24,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":25,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":26,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":27,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":28,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":29,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":30,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":31,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":32,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":33,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":34,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":35,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":36,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":37,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":38,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":39,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":40,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":41,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":42,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":43,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":44,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":45,"name":"","mode":"off","params":"","libRef":"","code":""}],"luaScripts":[{"index":1,"id":10001,"name":"main","code":"if Prop(\"Ready\") > 0 and GetTimeOut(\"hello\") then\n if Macro(\"Hello\") then SetTimeOut(\"hello\", 3000) end\nend"},{"index":2,"id":0,"name":"","code":""},{"index":3,"id":0,"name":"","code":""},{"index":4,"id":0,"name":"","code":""},{"index":5,"id":0,"name":"","code":""},{"index":6,"id":0,"name":"","code":""},{"index":7,"id":0,"name":"","code":""},{"index":8,"id":0,"name":"","code":""},{"index":9,"id":0,"name":"","code":""},{"index":10,"id":0,"name":"","code":""},{"index":11,"id":0,"name":"","code":""},{"index":12,"id":0,"name":"","code":""},{"index":13,"id":0,"name":"","code":""},{"index":14,"id":0,"name":"","code":""},{"index":15,"id":0,"name":"","code":""},{"index":16,"id":0,"name":"","code":""},{"index":17,"id":0,"name":"","code":""},{"index":18,"id":0,"name":"","code":""},{"index":19,"id":0,"name":"","code":""},{"index":20,"id":0,"name":"","code":""},{"index":21,"id":0,"name":"","code":""},{"index":22,"id":0,"name":"","code":""},{"index":23,"id":0,"name":"","code":""},{"index":24,"id":0,"name":"","code":""},{"index":25,"id":0,"name":"","code":""},{"index":26,"id":0,"name":"","code":""},{"index":27,"id":0,"name":"","code":""},{"index":28,"id":0,"name":"","code":""},{"index":29,"id":0,"name":"","code":""},{"index":30,"id":0,"name":"","code":""},{"index":31,"id":0,"name":"","code":""},{"index":32,"id":0,"name":"","code":""},{"index":33,"id":0,"name":"","code":""},{"index":34,"id":0,"name":"","code":""},{"index":35,"id":0,"name":"","code":""},{"index":36,"id":0,"name":"","code":""},{"index":37,"id":0,"name":"","code":""},{"index":38,"id":0,"name":"","code":""},{"index":39,"id":0,"name":"","code":""},{"index":40,"id":0,"name":"","code":""},{"index":41,"id":0,"name":"","code":""},{"index":42,"id":0,"name":"","code":""},{"index":43,"id":0,"name":"","code":""},{"index":44,"id":0,"name":"","code":""},{"index":45,"id":0,"name":"","code":""},{"index":46,"id":0,"name":"","code":""},{"index":47,"id":0,"name":"","code":""},{"index":48,"id":0,"name":"","code":""},{"index":49,"id":0,"name":"","code":""},{"index":50,"id":0,"name":"","code":""}],"propLibrary":[]} ``` ## Complete file: dynamic-macro.wa1 Save the following JSON directly; its arrays include every slot. ```json {"format":"wa1-module","formatVersion":1,"name":"动态宏最小示例","author":null,"class":"All","globalName":"SuperDPS","spellQueueWindow":250,"initCode":"SuperDPS.SetMacro(1, \"hello\", \"/say WA1 dynamic ready\")","macros":[{"index":1,"hotkey":"ALT-SHIFT-NUMPAD1","name":"","macro":""},{"index":2,"hotkey":"ALT-SHIFT-NUMPAD2","name":"","macro":""},{"index":3,"hotkey":"ALT-SHIFT-NUMPAD3","name":"","macro":""},{"index":4,"hotkey":"ALT-SHIFT-NUMPAD4","name":"","macro":""},{"index":5,"hotkey":"ALT-SHIFT-NUMPAD5","name":"","macro":""},{"index":6,"hotkey":"ALT-SHIFT-NUMPAD6","name":"","macro":""},{"index":7,"hotkey":"ALT-SHIFT-NUMPAD7","name":"","macro":""},{"index":8,"hotkey":"ALT-SHIFT-NUMPAD8","name":"","macro":""},{"index":9,"hotkey":"ALT-SHIFT-NUMPAD9","name":"","macro":""},{"index":10,"hotkey":"ALT-SHIFT-NUMPAD0","name":"","macro":""},{"index":11,"hotkey":"CTRL-SHIFT-NUMPAD1","name":"","macro":""},{"index":12,"hotkey":"CTRL-SHIFT-NUMPAD2","name":"","macro":""},{"index":13,"hotkey":"CTRL-SHIFT-NUMPAD3","name":"","macro":""},{"index":14,"hotkey":"CTRL-SHIFT-NUMPAD4","name":"","macro":""},{"index":15,"hotkey":"CTRL-SHIFT-NUMPAD5","name":"","macro":""},{"index":16,"hotkey":"CTRL-SHIFT-NUMPAD6","name":"","macro":""},{"index":17,"hotkey":"CTRL-SHIFT-NUMPAD7","name":"","macro":""},{"index":18,"hotkey":"CTRL-SHIFT-NUMPAD8","name":"","macro":""},{"index":19,"hotkey":"CTRL-SHIFT-NUMPAD9","name":"","macro":""},{"index":20,"hotkey":"CTRL-SHIFT-NUMPAD0","name":"","macro":""},{"index":21,"hotkey":"SHIFT-NUMPAD1","name":"","macro":""},{"index":22,"hotkey":"SHIFT-NUMPAD2","name":"","macro":""},{"index":23,"hotkey":"SHIFT-NUMPAD3","name":"","macro":""},{"index":24,"hotkey":"SHIFT-NUMPAD4","name":"","macro":""},{"index":25,"hotkey":"SHIFT-NUMPAD5","name":"","macro":""},{"index":26,"hotkey":"SHIFT-NUMPAD6","name":"","macro":""},{"index":27,"hotkey":"SHIFT-NUMPAD7","name":"","macro":""},{"index":28,"hotkey":"SHIFT-NUMPAD8","name":"","macro":""},{"index":29,"hotkey":"SHIFT-NUMPAD9","name":"","macro":""},{"index":30,"hotkey":"SHIFT-NUMPAD0","name":"","macro":""},{"index":31,"hotkey":"CTRL-NUMPAD1","name":"","macro":""},{"index":32,"hotkey":"CTRL-NUMPAD2","name":"","macro":""},{"index":33,"hotkey":"CTRL-NUMPAD3","name":"","macro":""},{"index":34,"hotkey":"CTRL-NUMPAD4","name":"","macro":""},{"index":35,"hotkey":"CTRL-NUMPAD5","name":"","macro":""},{"index":36,"hotkey":"CTRL-NUMPAD6","name":"","macro":""},{"index":37,"hotkey":"CTRL-NUMPAD7","name":"","macro":""},{"index":38,"hotkey":"CTRL-NUMPAD8","name":"","macro":""},{"index":39,"hotkey":"CTRL-NUMPAD9","name":"","macro":""},{"index":40,"hotkey":"CTRL-NUMPAD0","name":"","macro":""},{"index":41,"hotkey":"ALT-NUMPAD1","name":"","macro":""},{"index":42,"hotkey":"ALT-NUMPAD2","name":"","macro":""},{"index":43,"hotkey":"ALT-NUMPAD3","name":"","macro":""},{"index":44,"hotkey":"ALT-NUMPAD4","name":"","macro":""},{"index":45,"hotkey":"ALT-NUMPAD5","name":"","macro":""},{"index":46,"hotkey":"ALT-NUMPAD6","name":"","macro":""},{"index":47,"hotkey":"ALT-NUMPAD7","name":"","macro":""},{"index":48,"hotkey":"ALT-NUMPAD8","name":"","macro":""},{"index":49,"hotkey":"ALT-NUMPAD9","name":"","macro":""},{"index":50,"hotkey":"ALT-NUMPAD0","name":"","macro":""},{"index":51,"hotkey":"ALT-SHIFT-,","name":"","macro":""},{"index":52,"hotkey":"ALT-SHIFT-.","name":"","macro":""},{"index":53,"hotkey":"ALT-SHIFT-/","name":"","macro":""},{"index":54,"hotkey":"ALT-SHIFT-;","name":"","macro":""},{"index":55,"hotkey":"ALT-SHIFT-'","name":"","macro":""},{"index":56,"hotkey":"ALT-SHIFT-[","name":"","macro":""},{"index":57,"hotkey":"ALT-SHIFT-]","name":"","macro":""},{"index":58,"hotkey":"ALT-SHIFT-=","name":"","macro":""},{"index":59,"hotkey":"CTRL-SHIFT-,","name":"","macro":""},{"index":60,"hotkey":"CTRL-SHIFT-.","name":"","macro":""},{"index":61,"hotkey":"CTRL-SHIFT-/","name":"","macro":""},{"index":62,"hotkey":"CTRL-SHIFT-;","name":"","macro":""},{"index":63,"hotkey":"CTRL-SHIFT-'","name":"","macro":""},{"index":64,"hotkey":"CTRL-SHIFT-[","name":"","macro":""},{"index":65,"hotkey":"CTRL-SHIFT-]","name":"","macro":""},{"index":66,"hotkey":"CTRL-SHIFT-=","name":"","macro":""},{"index":67,"hotkey":"SHIFT-,","name":"","macro":""},{"index":68,"hotkey":"SHIFT-.","name":"","macro":""},{"index":69,"hotkey":"SHIFT-/","name":"","macro":""},{"index":70,"hotkey":"SHIFT-;","name":"","macro":""},{"index":71,"hotkey":"SHIFT-'","name":"","macro":""},{"index":72,"hotkey":"SHIFT-[","name":"","macro":""},{"index":73,"hotkey":"SHIFT-]","name":"","macro":""},{"index":74,"hotkey":"SHIFT-=","name":"","macro":""},{"index":75,"hotkey":"CTRL-,","name":"","macro":""},{"index":76,"hotkey":"CTRL-.","name":"","macro":""},{"index":77,"hotkey":"CTRL-/","name":"","macro":""},{"index":78,"hotkey":"CTRL-;","name":"","macro":""},{"index":79,"hotkey":"CTRL-'","name":"","macro":""},{"index":80,"hotkey":"CTRL-[","name":"","macro":""},{"index":81,"hotkey":"CTRL-]","name":"","macro":""},{"index":82,"hotkey":"CTRL-=","name":"","macro":""},{"index":83,"hotkey":"ALT-,","name":"","macro":""},{"index":84,"hotkey":"ALT-.","name":"","macro":""},{"index":85,"hotkey":"ALT-/","name":"","macro":""},{"index":86,"hotkey":"ALT-;","name":"","macro":""},{"index":87,"hotkey":"ALT-'","name":"","macro":""},{"index":88,"hotkey":"ALT-[","name":"","macro":""},{"index":89,"hotkey":"ALT-]","name":"","macro":""},{"index":90,"hotkey":"ALT-=","name":"","macro":""},{"index":91,"hotkey":"ALT-SHIFT-F1","name":"","macro":""},{"index":92,"hotkey":"ALT-SHIFT-F2","name":"","macro":""},{"index":93,"hotkey":"ALT-SHIFT-F3","name":"","macro":""},{"index":94,"hotkey":"ALT-SHIFT-F4","name":"","macro":""},{"index":95,"hotkey":"ALT-SHIFT-F5","name":"","macro":""},{"index":96,"hotkey":"ALT-SHIFT-F6","name":"","macro":""},{"index":97,"hotkey":"ALT-SHIFT-F7","name":"","macro":""},{"index":98,"hotkey":"ALT-SHIFT-F8","name":"","macro":""},{"index":99,"hotkey":"ALT-SHIFT-F9","name":"","macro":""},{"index":100,"hotkey":"ALT-SHIFT-F10","name":"","macro":""},{"index":101,"hotkey":"ALT-SHIFT-F11","name":"","macro":""},{"index":102,"hotkey":"ALT-SHIFT-F12","name":"","macro":""},{"index":103,"hotkey":"CTRL-SHIFT-F1","name":"","macro":""},{"index":104,"hotkey":"CTRL-SHIFT-F2","name":"","macro":""},{"index":105,"hotkey":"CTRL-SHIFT-F3","name":"","macro":""},{"index":106,"hotkey":"SHIFT-F1","name":"","macro":""},{"index":107,"hotkey":"SHIFT-F2","name":"","macro":""},{"index":108,"hotkey":"SHIFT-F3","name":"","macro":""},{"index":109,"hotkey":"SHIFT-F4","name":"","macro":""},{"index":110,"hotkey":"SHIFT-F5","name":"","macro":""},{"index":111,"hotkey":"SHIFT-F6","name":"","macro":""},{"index":112,"hotkey":"SHIFT-F7","name":"","macro":""},{"index":113,"hotkey":"SHIFT-F8","name":"","macro":""},{"index":114,"hotkey":"SHIFT-F9","name":"","macro":""},{"index":115,"hotkey":"SHIFT-F10","name":"","macro":""},{"index":116,"hotkey":"SHIFT-F11","name":"","macro":""},{"index":117,"hotkey":"SHIFT-F12","name":"","macro":""},{"index":118,"hotkey":"CTRL-F1","name":"","macro":""},{"index":119,"hotkey":"CTRL-F2","name":"","macro":""},{"index":120,"hotkey":"CTRL-F3","name":"","macro":""},{"index":121,"hotkey":"CTRL-F4","name":"","macro":""},{"index":122,"hotkey":"CTRL-F5","name":"","macro":""},{"index":123,"hotkey":"CTRL-F6","name":"","macro":""},{"index":124,"hotkey":"CTRL-F7","name":"","macro":""},{"index":125,"hotkey":"CTRL-F8","name":"","macro":""},{"index":126,"hotkey":"CTRL-F9","name":"","macro":""},{"index":127,"hotkey":"CTRL-F10","name":"","macro":""},{"index":128,"hotkey":"CTRL-F11","name":"","macro":""},{"index":129,"hotkey":"CTRL-F12","name":"","macro":""},{"index":130,"hotkey":"ALT-F1","name":"","macro":""},{"index":131,"hotkey":"ALT-F2","name":"","macro":""},{"index":132,"hotkey":"ALT-F3","name":"","macro":""},{"index":133,"hotkey":"ALT-F4","name":"","macro":""},{"index":134,"hotkey":"ALT-F5","name":"","macro":""},{"index":135,"hotkey":"ALT-F6","name":"","macro":""},{"index":136,"hotkey":"ALT-F7","name":"","macro":""},{"index":137,"hotkey":"ALT-F8","name":"","macro":""},{"index":138,"hotkey":"ALT-F9","name":"","macro":""},{"index":139,"hotkey":"ALT-F10","name":"","macro":""},{"index":140,"hotkey":"ALT-F11","name":"","macro":""},{"index":141,"hotkey":"ALT-F12","name":"","macro":""},{"index":142,"hotkey":"CTRL-SHIFT-F4","name":"","macro":""},{"index":143,"hotkey":"CTRL-SHIFT-F5","name":"","macro":""},{"index":144,"hotkey":"CTRL-SHIFT-F6","name":"","macro":""},{"index":145,"hotkey":"CTRL-SHIFT-F7","name":"","macro":""},{"index":146,"hotkey":"CTRL-SHIFT-F8","name":"","macro":""},{"index":147,"hotkey":"CTRL-SHIFT-F9","name":"","macro":""},{"index":148,"hotkey":"CTRL-SHIFT-F10","name":"","macro":""},{"index":149,"hotkey":"CTRL-SHIFT-F11","name":"","macro":""},{"index":150,"hotkey":"CTRL-SHIFT-F12","name":"","macro":""}],"props":[{"index":1,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":2,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":3,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":4,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":5,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":6,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":7,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":8,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":9,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":10,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":11,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":12,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":13,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":14,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":15,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":16,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":17,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":18,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":19,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":20,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":21,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":22,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":23,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":24,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":25,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":26,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":27,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":28,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":29,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":30,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":31,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":32,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":33,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":34,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":35,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":36,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":37,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":38,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":39,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":40,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":41,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":42,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":43,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":44,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":45,"name":"","mode":"off","params":"","libRef":"","code":""}],"luaScripts":[{"index":1,"id":10001,"name":"main","code":"if GetTimeOut(\"hello\") and Macro(\"hello\") then\n SetTimeOut(\"hello\", 3000)\nend"},{"index":2,"id":0,"name":"","code":""},{"index":3,"id":0,"name":"","code":""},{"index":4,"id":0,"name":"","code":""},{"index":5,"id":0,"name":"","code":""},{"index":6,"id":0,"name":"","code":""},{"index":7,"id":0,"name":"","code":""},{"index":8,"id":0,"name":"","code":""},{"index":9,"id":0,"name":"","code":""},{"index":10,"id":0,"name":"","code":""},{"index":11,"id":0,"name":"","code":""},{"index":12,"id":0,"name":"","code":""},{"index":13,"id":0,"name":"","code":""},{"index":14,"id":0,"name":"","code":""},{"index":15,"id":0,"name":"","code":""},{"index":16,"id":0,"name":"","code":""},{"index":17,"id":0,"name":"","code":""},{"index":18,"id":0,"name":"","code":""},{"index":19,"id":0,"name":"","code":""},{"index":20,"id":0,"name":"","code":""},{"index":21,"id":0,"name":"","code":""},{"index":22,"id":0,"name":"","code":""},{"index":23,"id":0,"name":"","code":""},{"index":24,"id":0,"name":"","code":""},{"index":25,"id":0,"name":"","code":""},{"index":26,"id":0,"name":"","code":""},{"index":27,"id":0,"name":"","code":""},{"index":28,"id":0,"name":"","code":""},{"index":29,"id":0,"name":"","code":""},{"index":30,"id":0,"name":"","code":""},{"index":31,"id":0,"name":"","code":""},{"index":32,"id":0,"name":"","code":""},{"index":33,"id":0,"name":"","code":""},{"index":34,"id":0,"name":"","code":""},{"index":35,"id":0,"name":"","code":""},{"index":36,"id":0,"name":"","code":""},{"index":37,"id":0,"name":"","code":""},{"index":38,"id":0,"name":"","code":""},{"index":39,"id":0,"name":"","code":""},{"index":40,"id":0,"name":"","code":""},{"index":41,"id":0,"name":"","code":""},{"index":42,"id":0,"name":"","code":""},{"index":43,"id":0,"name":"","code":""},{"index":44,"id":0,"name":"","code":""},{"index":45,"id":0,"name":"","code":""},{"index":46,"id":0,"name":"","code":""},{"index":47,"id":0,"name":"","code":""},{"index":48,"id":0,"name":"","code":""},{"index":49,"id":0,"name":"","code":""},{"index":50,"id":0,"name":"","code":""}],"propLibrary":[]} ``` ## Complete file: aura-library.wa1 Save the following JSON directly; its arrays include every slot. ```json {"format":"wa1-module","formatVersion":1,"name":"原生光环与属性库示例","author":null,"class":"All","globalName":"SuperDPS","spellQueueWindow":250,"initCode":"SuperDPS.ConfigureAuras({\n {name=\"advance\", unit=\"player\", filter=\"HELPFUL\", spellId=48265,\n fields={\"remaining\", \"present\"}},\n})","macros":[{"index":1,"hotkey":"ALT-SHIFT-NUMPAD1","name":"","macro":""},{"index":2,"hotkey":"ALT-SHIFT-NUMPAD2","name":"","macro":""},{"index":3,"hotkey":"ALT-SHIFT-NUMPAD3","name":"","macro":""},{"index":4,"hotkey":"ALT-SHIFT-NUMPAD4","name":"","macro":""},{"index":5,"hotkey":"ALT-SHIFT-NUMPAD5","name":"","macro":""},{"index":6,"hotkey":"ALT-SHIFT-NUMPAD6","name":"","macro":""},{"index":7,"hotkey":"ALT-SHIFT-NUMPAD7","name":"","macro":""},{"index":8,"hotkey":"ALT-SHIFT-NUMPAD8","name":"","macro":""},{"index":9,"hotkey":"ALT-SHIFT-NUMPAD9","name":"","macro":""},{"index":10,"hotkey":"ALT-SHIFT-NUMPAD0","name":"","macro":""},{"index":11,"hotkey":"CTRL-SHIFT-NUMPAD1","name":"","macro":""},{"index":12,"hotkey":"CTRL-SHIFT-NUMPAD2","name":"","macro":""},{"index":13,"hotkey":"CTRL-SHIFT-NUMPAD3","name":"","macro":""},{"index":14,"hotkey":"CTRL-SHIFT-NUMPAD4","name":"","macro":""},{"index":15,"hotkey":"CTRL-SHIFT-NUMPAD5","name":"","macro":""},{"index":16,"hotkey":"CTRL-SHIFT-NUMPAD6","name":"","macro":""},{"index":17,"hotkey":"CTRL-SHIFT-NUMPAD7","name":"","macro":""},{"index":18,"hotkey":"CTRL-SHIFT-NUMPAD8","name":"","macro":""},{"index":19,"hotkey":"CTRL-SHIFT-NUMPAD9","name":"","macro":""},{"index":20,"hotkey":"CTRL-SHIFT-NUMPAD0","name":"","macro":""},{"index":21,"hotkey":"SHIFT-NUMPAD1","name":"","macro":""},{"index":22,"hotkey":"SHIFT-NUMPAD2","name":"","macro":""},{"index":23,"hotkey":"SHIFT-NUMPAD3","name":"","macro":""},{"index":24,"hotkey":"SHIFT-NUMPAD4","name":"","macro":""},{"index":25,"hotkey":"SHIFT-NUMPAD5","name":"","macro":""},{"index":26,"hotkey":"SHIFT-NUMPAD6","name":"","macro":""},{"index":27,"hotkey":"SHIFT-NUMPAD7","name":"","macro":""},{"index":28,"hotkey":"SHIFT-NUMPAD8","name":"","macro":""},{"index":29,"hotkey":"SHIFT-NUMPAD9","name":"","macro":""},{"index":30,"hotkey":"SHIFT-NUMPAD0","name":"","macro":""},{"index":31,"hotkey":"CTRL-NUMPAD1","name":"","macro":""},{"index":32,"hotkey":"CTRL-NUMPAD2","name":"","macro":""},{"index":33,"hotkey":"CTRL-NUMPAD3","name":"","macro":""},{"index":34,"hotkey":"CTRL-NUMPAD4","name":"","macro":""},{"index":35,"hotkey":"CTRL-NUMPAD5","name":"","macro":""},{"index":36,"hotkey":"CTRL-NUMPAD6","name":"","macro":""},{"index":37,"hotkey":"CTRL-NUMPAD7","name":"","macro":""},{"index":38,"hotkey":"CTRL-NUMPAD8","name":"","macro":""},{"index":39,"hotkey":"CTRL-NUMPAD9","name":"","macro":""},{"index":40,"hotkey":"CTRL-NUMPAD0","name":"","macro":""},{"index":41,"hotkey":"ALT-NUMPAD1","name":"","macro":""},{"index":42,"hotkey":"ALT-NUMPAD2","name":"","macro":""},{"index":43,"hotkey":"ALT-NUMPAD3","name":"","macro":""},{"index":44,"hotkey":"ALT-NUMPAD4","name":"","macro":""},{"index":45,"hotkey":"ALT-NUMPAD5","name":"","macro":""},{"index":46,"hotkey":"ALT-NUMPAD6","name":"","macro":""},{"index":47,"hotkey":"ALT-NUMPAD7","name":"","macro":""},{"index":48,"hotkey":"ALT-NUMPAD8","name":"","macro":""},{"index":49,"hotkey":"ALT-NUMPAD9","name":"","macro":""},{"index":50,"hotkey":"ALT-NUMPAD0","name":"","macro":""},{"index":51,"hotkey":"ALT-SHIFT-,","name":"","macro":""},{"index":52,"hotkey":"ALT-SHIFT-.","name":"","macro":""},{"index":53,"hotkey":"ALT-SHIFT-/","name":"","macro":""},{"index":54,"hotkey":"ALT-SHIFT-;","name":"","macro":""},{"index":55,"hotkey":"ALT-SHIFT-'","name":"","macro":""},{"index":56,"hotkey":"ALT-SHIFT-[","name":"","macro":""},{"index":57,"hotkey":"ALT-SHIFT-]","name":"","macro":""},{"index":58,"hotkey":"ALT-SHIFT-=","name":"","macro":""},{"index":59,"hotkey":"CTRL-SHIFT-,","name":"","macro":""},{"index":60,"hotkey":"CTRL-SHIFT-.","name":"","macro":""},{"index":61,"hotkey":"CTRL-SHIFT-/","name":"","macro":""},{"index":62,"hotkey":"CTRL-SHIFT-;","name":"","macro":""},{"index":63,"hotkey":"CTRL-SHIFT-'","name":"","macro":""},{"index":64,"hotkey":"CTRL-SHIFT-[","name":"","macro":""},{"index":65,"hotkey":"CTRL-SHIFT-]","name":"","macro":""},{"index":66,"hotkey":"CTRL-SHIFT-=","name":"","macro":""},{"index":67,"hotkey":"SHIFT-,","name":"","macro":""},{"index":68,"hotkey":"SHIFT-.","name":"","macro":""},{"index":69,"hotkey":"SHIFT-/","name":"","macro":""},{"index":70,"hotkey":"SHIFT-;","name":"","macro":""},{"index":71,"hotkey":"SHIFT-'","name":"","macro":""},{"index":72,"hotkey":"SHIFT-[","name":"","macro":""},{"index":73,"hotkey":"SHIFT-]","name":"","macro":""},{"index":74,"hotkey":"SHIFT-=","name":"","macro":""},{"index":75,"hotkey":"CTRL-,","name":"","macro":""},{"index":76,"hotkey":"CTRL-.","name":"","macro":""},{"index":77,"hotkey":"CTRL-/","name":"","macro":""},{"index":78,"hotkey":"CTRL-;","name":"","macro":""},{"index":79,"hotkey":"CTRL-'","name":"","macro":""},{"index":80,"hotkey":"CTRL-[","name":"","macro":""},{"index":81,"hotkey":"CTRL-]","name":"","macro":""},{"index":82,"hotkey":"CTRL-=","name":"","macro":""},{"index":83,"hotkey":"ALT-,","name":"","macro":""},{"index":84,"hotkey":"ALT-.","name":"","macro":""},{"index":85,"hotkey":"ALT-/","name":"","macro":""},{"index":86,"hotkey":"ALT-;","name":"","macro":""},{"index":87,"hotkey":"ALT-'","name":"","macro":""},{"index":88,"hotkey":"ALT-[","name":"","macro":""},{"index":89,"hotkey":"ALT-]","name":"","macro":""},{"index":90,"hotkey":"ALT-=","name":"","macro":""},{"index":91,"hotkey":"ALT-SHIFT-F1","name":"","macro":""},{"index":92,"hotkey":"ALT-SHIFT-F2","name":"","macro":""},{"index":93,"hotkey":"ALT-SHIFT-F3","name":"","macro":""},{"index":94,"hotkey":"ALT-SHIFT-F4","name":"","macro":""},{"index":95,"hotkey":"ALT-SHIFT-F5","name":"","macro":""},{"index":96,"hotkey":"ALT-SHIFT-F6","name":"","macro":""},{"index":97,"hotkey":"ALT-SHIFT-F7","name":"","macro":""},{"index":98,"hotkey":"ALT-SHIFT-F8","name":"","macro":""},{"index":99,"hotkey":"ALT-SHIFT-F9","name":"","macro":""},{"index":100,"hotkey":"ALT-SHIFT-F10","name":"","macro":""},{"index":101,"hotkey":"ALT-SHIFT-F11","name":"","macro":""},{"index":102,"hotkey":"ALT-SHIFT-F12","name":"","macro":""},{"index":103,"hotkey":"CTRL-SHIFT-F1","name":"","macro":""},{"index":104,"hotkey":"CTRL-SHIFT-F2","name":"","macro":""},{"index":105,"hotkey":"CTRL-SHIFT-F3","name":"","macro":""},{"index":106,"hotkey":"SHIFT-F1","name":"","macro":""},{"index":107,"hotkey":"SHIFT-F2","name":"","macro":""},{"index":108,"hotkey":"SHIFT-F3","name":"","macro":""},{"index":109,"hotkey":"SHIFT-F4","name":"","macro":""},{"index":110,"hotkey":"SHIFT-F5","name":"","macro":""},{"index":111,"hotkey":"SHIFT-F6","name":"","macro":""},{"index":112,"hotkey":"SHIFT-F7","name":"","macro":""},{"index":113,"hotkey":"SHIFT-F8","name":"","macro":""},{"index":114,"hotkey":"SHIFT-F9","name":"","macro":""},{"index":115,"hotkey":"SHIFT-F10","name":"","macro":""},{"index":116,"hotkey":"SHIFT-F11","name":"","macro":""},{"index":117,"hotkey":"SHIFT-F12","name":"","macro":""},{"index":118,"hotkey":"CTRL-F1","name":"","macro":""},{"index":119,"hotkey":"CTRL-F2","name":"","macro":""},{"index":120,"hotkey":"CTRL-F3","name":"","macro":""},{"index":121,"hotkey":"CTRL-F4","name":"","macro":""},{"index":122,"hotkey":"CTRL-F5","name":"","macro":""},{"index":123,"hotkey":"CTRL-F6","name":"","macro":""},{"index":124,"hotkey":"CTRL-F7","name":"","macro":""},{"index":125,"hotkey":"CTRL-F8","name":"","macro":""},{"index":126,"hotkey":"CTRL-F9","name":"","macro":""},{"index":127,"hotkey":"CTRL-F10","name":"","macro":""},{"index":128,"hotkey":"CTRL-F11","name":"","macro":""},{"index":129,"hotkey":"CTRL-F12","name":"","macro":""},{"index":130,"hotkey":"ALT-F1","name":"","macro":""},{"index":131,"hotkey":"ALT-F2","name":"","macro":""},{"index":132,"hotkey":"ALT-F3","name":"","macro":""},{"index":133,"hotkey":"ALT-F4","name":"","macro":""},{"index":134,"hotkey":"ALT-F5","name":"","macro":""},{"index":135,"hotkey":"ALT-F6","name":"","macro":""},{"index":136,"hotkey":"ALT-F7","name":"","macro":""},{"index":137,"hotkey":"ALT-F8","name":"","macro":""},{"index":138,"hotkey":"ALT-F9","name":"","macro":""},{"index":139,"hotkey":"ALT-F10","name":"","macro":""},{"index":140,"hotkey":"ALT-F11","name":"","macro":""},{"index":141,"hotkey":"ALT-F12","name":"","macro":""},{"index":142,"hotkey":"CTRL-SHIFT-F4","name":"","macro":""},{"index":143,"hotkey":"CTRL-SHIFT-F5","name":"","macro":""},{"index":144,"hotkey":"CTRL-SHIFT-F6","name":"","macro":""},{"index":145,"hotkey":"CTRL-SHIFT-F7","name":"","macro":""},{"index":146,"hotkey":"CTRL-SHIFT-F8","name":"","macro":""},{"index":147,"hotkey":"CTRL-SHIFT-F9","name":"","macro":""},{"index":148,"hotkey":"CTRL-SHIFT-F10","name":"","macro":""},{"index":149,"hotkey":"CTRL-SHIFT-F11","name":"","macro":""},{"index":150,"hotkey":"CTRL-SHIFT-F12","name":"","macro":""}],"props":[{"index":1,"name":"AuraRemaining","mode":"custom","params":"","libRef":"","code":"return SuperDPS.Aura(\"advance\", \"remaining\")"},{"index":2,"name":"AuraPresent","mode":"custom","params":"","libRef":"","code":"return SuperDPS.Aura(\"advance\", \"present\")"},{"index":3,"name":"Power","mode":"custom","params":"player,3","libRef":"能量直传","code":"return UnitPower(arg1, arg2)"},{"index":4,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":5,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":6,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":7,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":8,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":9,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":10,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":11,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":12,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":13,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":14,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":15,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":16,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":17,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":18,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":19,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":20,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":21,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":22,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":23,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":24,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":25,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":26,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":27,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":28,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":29,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":30,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":31,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":32,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":33,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":34,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":35,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":36,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":37,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":38,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":39,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":40,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":41,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":42,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":43,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":44,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":45,"name":"","mode":"off","params":"","libRef":"","code":""}],"luaScripts":[{"index":1,"id":10001,"name":"observe","code":"-- 只读取数值,不发送按键;按实际职业替换初始化中的技能 ID。\nlocal present = Prop(\"AuraPresent\") > 0\nlocal remaining = Prop(\"AuraRemaining\")\nlocal power = Prop(\"Power\")\nreturn present, remaining, power"},{"index":2,"id":0,"name":"","code":""},{"index":3,"id":0,"name":"","code":""},{"index":4,"id":0,"name":"","code":""},{"index":5,"id":0,"name":"","code":""},{"index":6,"id":0,"name":"","code":""},{"index":7,"id":0,"name":"","code":""},{"index":8,"id":0,"name":"","code":""},{"index":9,"id":0,"name":"","code":""},{"index":10,"id":0,"name":"","code":""},{"index":11,"id":0,"name":"","code":""},{"index":12,"id":0,"name":"","code":""},{"index":13,"id":0,"name":"","code":""},{"index":14,"id":0,"name":"","code":""},{"index":15,"id":0,"name":"","code":""},{"index":16,"id":0,"name":"","code":""},{"index":17,"id":0,"name":"","code":""},{"index":18,"id":0,"name":"","code":""},{"index":19,"id":0,"name":"","code":""},{"index":20,"id":0,"name":"","code":""},{"index":21,"id":0,"name":"","code":""},{"index":22,"id":0,"name":"","code":""},{"index":23,"id":0,"name":"","code":""},{"index":24,"id":0,"name":"","code":""},{"index":25,"id":0,"name":"","code":""},{"index":26,"id":0,"name":"","code":""},{"index":27,"id":0,"name":"","code":""},{"index":28,"id":0,"name":"","code":""},{"index":29,"id":0,"name":"","code":""},{"index":30,"id":0,"name":"","code":""},{"index":31,"id":0,"name":"","code":""},{"index":32,"id":0,"name":"","code":""},{"index":33,"id":0,"name":"","code":""},{"index":34,"id":0,"name":"","code":""},{"index":35,"id":0,"name":"","code":""},{"index":36,"id":0,"name":"","code":""},{"index":37,"id":0,"name":"","code":""},{"index":38,"id":0,"name":"","code":""},{"index":39,"id":0,"name":"","code":""},{"index":40,"id":0,"name":"","code":""},{"index":41,"id":0,"name":"","code":""},{"index":42,"id":0,"name":"","code":""},{"index":43,"id":0,"name":"","code":""},{"index":44,"id":0,"name":"","code":""},{"index":45,"id":0,"name":"","code":""},{"index":46,"id":0,"name":"","code":""},{"index":47,"id":0,"name":"","code":""},{"index":48,"id":0,"name":"","code":""},{"index":49,"id":0,"name":"","code":""},{"index":50,"id":0,"name":"","code":""}],"propLibrary":[{"name":"能量直传","params":"player,3","code":"return UnitPower(arg1, arg2)","icon":""}]} ``` ## Complete file: target-selection.wa1 Save the following JSON directly; its arrays include every slot. ```json {"format":"wa1-module","formatVersion":1,"name":"目标选择与计时示例","author":null,"class":"All","globalName":"SuperDPS","spellQueueWindow":250,"initCode":"","macros":[{"index":1,"hotkey":"ALT-SHIFT-NUMPAD1","name":"","macro":""},{"index":2,"hotkey":"ALT-SHIFT-NUMPAD2","name":"","macro":""},{"index":3,"hotkey":"ALT-SHIFT-NUMPAD3","name":"","macro":""},{"index":4,"hotkey":"ALT-SHIFT-NUMPAD4","name":"","macro":""},{"index":5,"hotkey":"ALT-SHIFT-NUMPAD5","name":"","macro":""},{"index":6,"hotkey":"ALT-SHIFT-NUMPAD6","name":"","macro":""},{"index":7,"hotkey":"ALT-SHIFT-NUMPAD7","name":"","macro":""},{"index":8,"hotkey":"ALT-SHIFT-NUMPAD8","name":"","macro":""},{"index":9,"hotkey":"ALT-SHIFT-NUMPAD9","name":"","macro":""},{"index":10,"hotkey":"ALT-SHIFT-NUMPAD0","name":"","macro":""},{"index":11,"hotkey":"CTRL-SHIFT-NUMPAD1","name":"","macro":""},{"index":12,"hotkey":"CTRL-SHIFT-NUMPAD2","name":"","macro":""},{"index":13,"hotkey":"CTRL-SHIFT-NUMPAD3","name":"","macro":""},{"index":14,"hotkey":"CTRL-SHIFT-NUMPAD4","name":"","macro":""},{"index":15,"hotkey":"CTRL-SHIFT-NUMPAD5","name":"","macro":""},{"index":16,"hotkey":"CTRL-SHIFT-NUMPAD6","name":"","macro":""},{"index":17,"hotkey":"CTRL-SHIFT-NUMPAD7","name":"","macro":""},{"index":18,"hotkey":"CTRL-SHIFT-NUMPAD8","name":"","macro":""},{"index":19,"hotkey":"CTRL-SHIFT-NUMPAD9","name":"","macro":""},{"index":20,"hotkey":"CTRL-SHIFT-NUMPAD0","name":"","macro":""},{"index":21,"hotkey":"SHIFT-NUMPAD1","name":"","macro":""},{"index":22,"hotkey":"SHIFT-NUMPAD2","name":"","macro":""},{"index":23,"hotkey":"SHIFT-NUMPAD3","name":"","macro":""},{"index":24,"hotkey":"SHIFT-NUMPAD4","name":"","macro":""},{"index":25,"hotkey":"SHIFT-NUMPAD5","name":"","macro":""},{"index":26,"hotkey":"SHIFT-NUMPAD6","name":"","macro":""},{"index":27,"hotkey":"SHIFT-NUMPAD7","name":"","macro":""},{"index":28,"hotkey":"SHIFT-NUMPAD8","name":"","macro":""},{"index":29,"hotkey":"SHIFT-NUMPAD9","name":"","macro":""},{"index":30,"hotkey":"SHIFT-NUMPAD0","name":"","macro":""},{"index":31,"hotkey":"CTRL-NUMPAD1","name":"","macro":""},{"index":32,"hotkey":"CTRL-NUMPAD2","name":"","macro":""},{"index":33,"hotkey":"CTRL-NUMPAD3","name":"","macro":""},{"index":34,"hotkey":"CTRL-NUMPAD4","name":"","macro":""},{"index":35,"hotkey":"CTRL-NUMPAD5","name":"","macro":""},{"index":36,"hotkey":"CTRL-NUMPAD6","name":"","macro":""},{"index":37,"hotkey":"CTRL-NUMPAD7","name":"","macro":""},{"index":38,"hotkey":"CTRL-NUMPAD8","name":"","macro":""},{"index":39,"hotkey":"CTRL-NUMPAD9","name":"","macro":""},{"index":40,"hotkey":"CTRL-NUMPAD0","name":"","macro":""},{"index":41,"hotkey":"ALT-NUMPAD1","name":"","macro":""},{"index":42,"hotkey":"ALT-NUMPAD2","name":"","macro":""},{"index":43,"hotkey":"ALT-NUMPAD3","name":"","macro":""},{"index":44,"hotkey":"ALT-NUMPAD4","name":"","macro":""},{"index":45,"hotkey":"ALT-NUMPAD5","name":"","macro":""},{"index":46,"hotkey":"ALT-NUMPAD6","name":"","macro":""},{"index":47,"hotkey":"ALT-NUMPAD7","name":"","macro":""},{"index":48,"hotkey":"ALT-NUMPAD8","name":"","macro":""},{"index":49,"hotkey":"ALT-NUMPAD9","name":"","macro":""},{"index":50,"hotkey":"ALT-NUMPAD0","name":"","macro":""},{"index":51,"hotkey":"ALT-SHIFT-,","name":"","macro":""},{"index":52,"hotkey":"ALT-SHIFT-.","name":"","macro":""},{"index":53,"hotkey":"ALT-SHIFT-/","name":"","macro":""},{"index":54,"hotkey":"ALT-SHIFT-;","name":"","macro":""},{"index":55,"hotkey":"ALT-SHIFT-'","name":"","macro":""},{"index":56,"hotkey":"ALT-SHIFT-[","name":"","macro":""},{"index":57,"hotkey":"ALT-SHIFT-]","name":"","macro":""},{"index":58,"hotkey":"ALT-SHIFT-=","name":"","macro":""},{"index":59,"hotkey":"CTRL-SHIFT-,","name":"","macro":""},{"index":60,"hotkey":"CTRL-SHIFT-.","name":"","macro":""},{"index":61,"hotkey":"CTRL-SHIFT-/","name":"","macro":""},{"index":62,"hotkey":"CTRL-SHIFT-;","name":"","macro":""},{"index":63,"hotkey":"CTRL-SHIFT-'","name":"","macro":""},{"index":64,"hotkey":"CTRL-SHIFT-[","name":"","macro":""},{"index":65,"hotkey":"CTRL-SHIFT-]","name":"","macro":""},{"index":66,"hotkey":"CTRL-SHIFT-=","name":"","macro":""},{"index":67,"hotkey":"SHIFT-,","name":"","macro":""},{"index":68,"hotkey":"SHIFT-.","name":"","macro":""},{"index":69,"hotkey":"SHIFT-/","name":"","macro":""},{"index":70,"hotkey":"SHIFT-;","name":"","macro":""},{"index":71,"hotkey":"SHIFT-'","name":"","macro":""},{"index":72,"hotkey":"SHIFT-[","name":"","macro":""},{"index":73,"hotkey":"SHIFT-]","name":"","macro":""},{"index":74,"hotkey":"SHIFT-=","name":"","macro":""},{"index":75,"hotkey":"CTRL-,","name":"","macro":""},{"index":76,"hotkey":"CTRL-.","name":"","macro":""},{"index":77,"hotkey":"CTRL-/","name":"","macro":""},{"index":78,"hotkey":"CTRL-;","name":"","macro":""},{"index":79,"hotkey":"CTRL-'","name":"","macro":""},{"index":80,"hotkey":"CTRL-[","name":"","macro":""},{"index":81,"hotkey":"CTRL-]","name":"","macro":""},{"index":82,"hotkey":"CTRL-=","name":"","macro":""},{"index":83,"hotkey":"ALT-,","name":"","macro":""},{"index":84,"hotkey":"ALT-.","name":"","macro":""},{"index":85,"hotkey":"ALT-/","name":"","macro":""},{"index":86,"hotkey":"ALT-;","name":"","macro":""},{"index":87,"hotkey":"ALT-'","name":"","macro":""},{"index":88,"hotkey":"ALT-[","name":"","macro":""},{"index":89,"hotkey":"ALT-]","name":"","macro":""},{"index":90,"hotkey":"ALT-=","name":"","macro":""},{"index":91,"hotkey":"ALT-SHIFT-F1","name":"","macro":""},{"index":92,"hotkey":"ALT-SHIFT-F2","name":"","macro":""},{"index":93,"hotkey":"ALT-SHIFT-F3","name":"","macro":""},{"index":94,"hotkey":"ALT-SHIFT-F4","name":"","macro":""},{"index":95,"hotkey":"ALT-SHIFT-F5","name":"","macro":""},{"index":96,"hotkey":"ALT-SHIFT-F6","name":"","macro":""},{"index":97,"hotkey":"ALT-SHIFT-F7","name":"","macro":""},{"index":98,"hotkey":"ALT-SHIFT-F8","name":"","macro":""},{"index":99,"hotkey":"ALT-SHIFT-F9","name":"","macro":""},{"index":100,"hotkey":"ALT-SHIFT-F10","name":"","macro":""},{"index":101,"hotkey":"ALT-SHIFT-F11","name":"","macro":""},{"index":102,"hotkey":"ALT-SHIFT-F12","name":"","macro":""},{"index":103,"hotkey":"CTRL-SHIFT-F1","name":"","macro":""},{"index":104,"hotkey":"CTRL-SHIFT-F2","name":"","macro":""},{"index":105,"hotkey":"CTRL-SHIFT-F3","name":"","macro":""},{"index":106,"hotkey":"SHIFT-F1","name":"SelectTarget1","macro":"/target player"},{"index":107,"hotkey":"SHIFT-F2","name":"SelectTarget2","macro":"/target party1"},{"index":108,"hotkey":"SHIFT-F3","name":"SelectTarget3","macro":"/target party2"},{"index":109,"hotkey":"SHIFT-F4","name":"SelectTarget4","macro":"/target party3"},{"index":110,"hotkey":"SHIFT-F5","name":"SelectTarget5","macro":"/target party4"},{"index":111,"hotkey":"SHIFT-F6","name":"SelectTarget6","macro":"/target raid1"},{"index":112,"hotkey":"SHIFT-F7","name":"SelectTarget7","macro":"/target raid2"},{"index":113,"hotkey":"SHIFT-F8","name":"SelectTarget8","macro":"/target raid3"},{"index":114,"hotkey":"SHIFT-F9","name":"SelectTarget9","macro":"/target raid4"},{"index":115,"hotkey":"SHIFT-F10","name":"SelectTarget10","macro":"/target raid5"},{"index":116,"hotkey":"SHIFT-F11","name":"SelectTarget11","macro":"/target raid6"},{"index":117,"hotkey":"SHIFT-F12","name":"SelectTarget12","macro":"/target raid7"},{"index":118,"hotkey":"CTRL-F1","name":"SelectTarget13","macro":"/target raid8"},{"index":119,"hotkey":"CTRL-F2","name":"SelectTarget14","macro":"/target raid9"},{"index":120,"hotkey":"CTRL-F3","name":"SelectTarget15","macro":"/target raid10"},{"index":121,"hotkey":"CTRL-F4","name":"SelectTarget16","macro":"/target raid11"},{"index":122,"hotkey":"CTRL-F5","name":"SelectTarget17","macro":"/target raid12"},{"index":123,"hotkey":"CTRL-F6","name":"SelectTarget18","macro":"/target raid13"},{"index":124,"hotkey":"CTRL-F7","name":"SelectTarget19","macro":"/target raid14"},{"index":125,"hotkey":"CTRL-F8","name":"SelectTarget20","macro":"/target raid15"},{"index":126,"hotkey":"CTRL-F9","name":"SelectTarget21","macro":"/target raid16"},{"index":127,"hotkey":"CTRL-F10","name":"SelectTarget22","macro":"/target raid17"},{"index":128,"hotkey":"CTRL-F11","name":"SelectTarget23","macro":"/target raid18"},{"index":129,"hotkey":"CTRL-F12","name":"SelectTarget24","macro":"/target raid19"},{"index":130,"hotkey":"ALT-F1","name":"SelectTarget25","macro":"/target raid20"},{"index":131,"hotkey":"ALT-F2","name":"SelectTarget26","macro":"/target raid21"},{"index":132,"hotkey":"ALT-F3","name":"SelectTarget27","macro":"/target raid22"},{"index":133,"hotkey":"ALT-F4","name":"SelectTarget28","macro":"/target raid23"},{"index":134,"hotkey":"ALT-F5","name":"SelectTarget29","macro":"/target raid24"},{"index":135,"hotkey":"ALT-F6","name":"SelectTarget30","macro":"/target raid25"},{"index":136,"hotkey":"ALT-F7","name":"SelectTarget31","macro":"/target raid26"},{"index":137,"hotkey":"ALT-F8","name":"SelectTarget32","macro":"/target raid27"},{"index":138,"hotkey":"ALT-F9","name":"SelectTarget33","macro":"/target raid28"},{"index":139,"hotkey":"ALT-F10","name":"SelectTarget34","macro":"/target raid29"},{"index":140,"hotkey":"ALT-F11","name":"SelectTarget35","macro":"/target raid30"},{"index":141,"hotkey":"ALT-F12","name":"SelectTarget36","macro":"/target raid31"},{"index":142,"hotkey":"CTRL-SHIFT-F4","name":"SelectTarget37","macro":"/target raid32"},{"index":143,"hotkey":"CTRL-SHIFT-F5","name":"SelectTarget38","macro":"/target raid33"},{"index":144,"hotkey":"CTRL-SHIFT-F6","name":"SelectTarget39","macro":"/target raid34"},{"index":145,"hotkey":"CTRL-SHIFT-F7","name":"SelectTarget40","macro":"/target raid35"},{"index":146,"hotkey":"CTRL-SHIFT-F8","name":"SelectTarget41","macro":"/target raid36"},{"index":147,"hotkey":"CTRL-SHIFT-F9","name":"SelectTarget42","macro":"/target raid37"},{"index":148,"hotkey":"CTRL-SHIFT-F10","name":"SelectTarget43","macro":"/target raid38"},{"index":149,"hotkey":"CTRL-SHIFT-F11","name":"SelectTarget44","macro":"/target raid39"},{"index":150,"hotkey":"CTRL-SHIFT-F12","name":"SelectTarget45","macro":"/target raid40"}],"props":[{"index":1,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":2,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":3,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":4,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":5,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":6,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":7,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":8,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":9,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":10,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":11,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":12,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":13,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":14,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":15,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":16,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":17,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":18,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":19,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":20,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":21,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":22,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":23,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":24,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":25,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":26,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":27,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":28,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":29,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":30,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":31,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":32,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":33,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":34,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":35,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":36,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":37,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":38,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":39,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":40,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":41,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":42,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":43,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":44,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":45,"name":"","mode":"off","params":"","libRef":"","code":""}],"luaScripts":[{"index":1,"id":10001,"name":"select_player","code":"-- 用户主动绑定此逻辑后,按该键选择自己;需要保留 SelectTarget 宏。\nif CoolDown(\"select.player\", 1000) then Select(1) end"},{"index":2,"id":0,"name":"","code":""},{"index":3,"id":0,"name":"","code":""},{"index":4,"id":0,"name":"","code":""},{"index":5,"id":0,"name":"","code":""},{"index":6,"id":0,"name":"","code":""},{"index":7,"id":0,"name":"","code":""},{"index":8,"id":0,"name":"","code":""},{"index":9,"id":0,"name":"","code":""},{"index":10,"id":0,"name":"","code":""},{"index":11,"id":0,"name":"","code":""},{"index":12,"id":0,"name":"","code":""},{"index":13,"id":0,"name":"","code":""},{"index":14,"id":0,"name":"","code":""},{"index":15,"id":0,"name":"","code":""},{"index":16,"id":0,"name":"","code":""},{"index":17,"id":0,"name":"","code":""},{"index":18,"id":0,"name":"","code":""},{"index":19,"id":0,"name":"","code":""},{"index":20,"id":0,"name":"","code":""},{"index":21,"id":0,"name":"","code":""},{"index":22,"id":0,"name":"","code":""},{"index":23,"id":0,"name":"","code":""},{"index":24,"id":0,"name":"","code":""},{"index":25,"id":0,"name":"","code":""},{"index":26,"id":0,"name":"","code":""},{"index":27,"id":0,"name":"","code":""},{"index":28,"id":0,"name":"","code":""},{"index":29,"id":0,"name":"","code":""},{"index":30,"id":0,"name":"","code":""},{"index":31,"id":0,"name":"","code":""},{"index":32,"id":0,"name":"","code":""},{"index":33,"id":0,"name":"","code":""},{"index":34,"id":0,"name":"","code":""},{"index":35,"id":0,"name":"","code":""},{"index":36,"id":0,"name":"","code":""},{"index":37,"id":0,"name":"","code":""},{"index":38,"id":0,"name":"","code":""},{"index":39,"id":0,"name":"","code":""},{"index":40,"id":0,"name":"","code":""},{"index":41,"id":0,"name":"","code":""},{"index":42,"id":0,"name":"","code":""},{"index":43,"id":0,"name":"","code":""},{"index":44,"id":0,"name":"","code":""},{"index":45,"id":0,"name":"","code":""},{"index":46,"id":0,"name":"","code":""},{"index":47,"id":0,"name":"","code":""},{"index":48,"id":0,"name":"","code":""},{"index":49,"id":0,"name":"","code":""},{"index":50,"id":0,"name":"","code":""}],"propLibrary":[]} ``` ## Complete file: official-assisted-demo.wa1 Save the following JSON directly; its arrays include every slot. ```json {"format":"wa1-module","formatVersion":1,"name":"官方一键辅助 DEMO","author":null,"class":"All","globalName":"SuperDPS","spellQueueWindow":250,"initCode":"-- 事件合并读取候选;只在脱战时更新变化的宏,保留仍在使用的槽位。\nlocal slots, active, entries = {}, {}, {}\nlocal dirty, queued, notified, announce = true, false, false, false\nlocal checks, count = 0, 0\nlocal schedule\n-- 只扫描一次预设;缺少占用信息时拒绝猜测,避免旧客户端覆盖只有正文的宏。\nlocal firstSlot, capacity, available, reservedNames = 1, 0, {}, {}\nlocal compatible = true\nfor slot, row in pairs(SuperDPS.DynamicSlots) do\n if row.name and row.name ~= \"\" then reservedNames[row.name] = true end\n if slot >= 1 and slot <= 105 then\n if type(row.occupied) ~= \"boolean\" then compatible = false end\n if row.occupied then firstSlot = math.max(firstSlot, slot + 1) end\n end\nend\nfor slot = firstSlot, 105 do\n local row = SuperDPS.DynamicSlots[slot]\n if row and row.occupied == false and row.key and row.key ~= \"\" then\n available[slot], capacity = true, capacity + 1\n end\nend\nlocal function macroName(name)\n while reservedNames[name] do name = name .. \"_\" end\n return name\nend\n\nlocal function baseSpell(id)\n id = SuperDPS.SN(id, \"assist.spell\")\n if type(id) ~= \"number\" or id <= 0 then return 0 end\n local base = SuperDPS.SN(C_Spell.GetBaseSpell(id), \"assist.base\")\n return type(base) == \"number\" and base > 0 and base or 0\nend\n\nlocal function request(slot, name, body)\n local entry = entries[slot]\n if entry and entry.name == name and entry.body == body then return end\n entries[slot] = {name = name, body = body, sentName = entry and entry.sentName}\n announce = true\nend\n\nlocal function refresh()\n if InCombatLockdown() then return end\n if not compatible then\n error(\"请更新客户端并重新生成插件:缺少预设宏占用信息\")\n end\n if dirty then\n if not (C_AssistedCombat and C_AssistedCombat.GetRotationSpells\n and C_Spell and C_Spell.GetBaseSpell and C_Spell.GetSpellName) then\n active = {}\n return\n end\n local wanted, order, used, nextSlots = {}, {}, {}, {}\n for _, id in ipairs(C_AssistedCombat.GetRotationSpells()) do\n local base = baseSpell(id)\n local name = base > 0 and SuperDPS.SN(C_Spell.GetSpellName(base), \"assist.name\")\n if type(name) == \"string\" and name ~= \"\" and not wanted[base] then\n wanted[base] = \"/cast \" .. name\n order[#order + 1] = base\n end\n end\n if #order > capacity then\n active = {}\n error(\"辅助宏槽位不足:需要\" .. #order .. \"个,预设宏之后可用\" .. capacity .. \"个\")\n end\n -- 先保留仍在使用的槽位,再回收移出的技能;旧宏改为无动作正文。\n for base, slot in pairs(slots) do\n if wanted[base] then\n nextSlots[base], used[slot] = slot, true\n else\n request(slot, macroName(\"assist_empty_\" .. slot), \"/stopmacro\")\n end\n end\n local free = firstSlot\n for _, base in ipairs(order) do\n local slot = nextSlots[base]\n if not slot then\n while not available[free] or used[free] do free = free + 1 end\n slot = free\n nextSlots[base], used[slot] = slot, true\n end\n request(slot, macroName(\"a\" .. base), wanted[base])\n end\n slots, count, active = nextSlots, #order, {}\n dirty, checks = false, 0\n end\n -- 先释放已提交的旧名称,避免连续切换列表时跨槽位名称冲突。\n for slot, entry in pairs(entries) do\n if entry.sentName and entry.sentName ~= entry.name then\n if InCombatLockdown() then return end\n local emptyName = macroName(\"assist_empty_\" .. slot)\n SuperDPS.SetMacro(slot, emptyName, \"/stopmacro\")\n entry.sentName = emptyName\n end\n end\n local ready = true\n for slot, entry in pairs(entries) do\n if not entry.ready then\n if InCombatLockdown() then return end\n entry.ready = SuperDPS.SetMacro(slot, entry.name, entry.body)\n entry.sentName = entry.name\n ready = entry.ready and ready\n end\n end\n -- 仅公布已写入的宏;客户端仍通过完整快照和新鲜度校验后执行。\n active = {}\n for base, slot in pairs(slots) do\n if entries[slot].ready then active[base] = slot end\n end\n if ready then\n if announce and (notified or count > 0) then\n local label = notified and \"辅助宏更新完毕\" or \"辅助宏初始化完毕\"\n SuperDPS.Print(label .. \"(\" .. count .. \" 个),请等待客户端同步\")\n notified = true\n end\n announce = false\n elseif checks < 20 then\n checks = checks + 1\n schedule(0.3)\n end\nend\n\nschedule = function(delay)\n if queued or InCombatLockdown() then return end\n queued = true\n C_Timer.After(delay or 0.1, function()\n queued = false\n local ok, err = pcall(refresh)\n if not ok then\n active, dirty = {}, true\n SuperDPS.Print(\"辅助宏更新失败:\" .. tostring(err))\n end\n end)\nend\n\nSuperDPS.AssistMacro = function()\n if not (C_AssistedCombat and C_AssistedCombat.GetNextCastSpell\n and C_Spell and C_Spell.GetBaseSpell) then return 0 end\n return active[baseSpell(C_AssistedCombat.GetNextCastSpell())] or 0\nend\n\nlocal frame = CreateFrame(\"Frame\")\nfor _, event in ipairs({\"PLAYER_LOGIN\", \"PLAYER_ENTERING_WORLD\", \"SPELLS_CHANGED\",\n \"PLAYER_SPECIALIZATION_CHANGED\", \"PLAYER_REGEN_ENABLED\"}) do\n frame:RegisterEvent(event)\nend\nframe:SetScript(\"OnEvent\", function(_, event, unit)\n if event ~= \"PLAYER_SPECIALIZATION_CHANGED\" or unit == \"player\" then\n dirty, checks = true, 0\n schedule()\n end\nend)\nschedule()\n","macros":[{"index":1,"hotkey":"ALT-SHIFT-NUMPAD1","name":"开打","macro":"/startattack"},{"index":2,"hotkey":"ALT-SHIFT-NUMPAD2","name":"","macro":""},{"index":3,"hotkey":"ALT-SHIFT-NUMPAD3","name":"","macro":""},{"index":4,"hotkey":"ALT-SHIFT-NUMPAD4","name":"","macro":""},{"index":5,"hotkey":"ALT-SHIFT-NUMPAD5","name":"","macro":""},{"index":6,"hotkey":"ALT-SHIFT-NUMPAD6","name":"","macro":""},{"index":7,"hotkey":"ALT-SHIFT-NUMPAD7","name":"","macro":""},{"index":8,"hotkey":"ALT-SHIFT-NUMPAD8","name":"","macro":""},{"index":9,"hotkey":"ALT-SHIFT-NUMPAD9","name":"","macro":""},{"index":10,"hotkey":"ALT-SHIFT-NUMPAD0","name":"","macro":""},{"index":11,"hotkey":"CTRL-SHIFT-NUMPAD1","name":"","macro":""},{"index":12,"hotkey":"CTRL-SHIFT-NUMPAD2","name":"","macro":""},{"index":13,"hotkey":"CTRL-SHIFT-NUMPAD3","name":"","macro":""},{"index":14,"hotkey":"CTRL-SHIFT-NUMPAD4","name":"","macro":""},{"index":15,"hotkey":"CTRL-SHIFT-NUMPAD5","name":"","macro":""},{"index":16,"hotkey":"CTRL-SHIFT-NUMPAD6","name":"","macro":""},{"index":17,"hotkey":"CTRL-SHIFT-NUMPAD7","name":"","macro":""},{"index":18,"hotkey":"CTRL-SHIFT-NUMPAD8","name":"","macro":""},{"index":19,"hotkey":"CTRL-SHIFT-NUMPAD9","name":"","macro":""},{"index":20,"hotkey":"CTRL-SHIFT-NUMPAD0","name":"","macro":""},{"index":21,"hotkey":"SHIFT-NUMPAD1","name":"","macro":""},{"index":22,"hotkey":"SHIFT-NUMPAD2","name":"","macro":""},{"index":23,"hotkey":"SHIFT-NUMPAD3","name":"","macro":""},{"index":24,"hotkey":"SHIFT-NUMPAD4","name":"","macro":""},{"index":25,"hotkey":"SHIFT-NUMPAD5","name":"","macro":""},{"index":26,"hotkey":"SHIFT-NUMPAD6","name":"","macro":""},{"index":27,"hotkey":"SHIFT-NUMPAD7","name":"","macro":""},{"index":28,"hotkey":"SHIFT-NUMPAD8","name":"","macro":""},{"index":29,"hotkey":"SHIFT-NUMPAD9","name":"","macro":""},{"index":30,"hotkey":"SHIFT-NUMPAD0","name":"","macro":""},{"index":31,"hotkey":"CTRL-NUMPAD1","name":"","macro":""},{"index":32,"hotkey":"CTRL-NUMPAD2","name":"","macro":""},{"index":33,"hotkey":"CTRL-NUMPAD3","name":"","macro":""},{"index":34,"hotkey":"CTRL-NUMPAD4","name":"","macro":""},{"index":35,"hotkey":"CTRL-NUMPAD5","name":"","macro":""},{"index":36,"hotkey":"CTRL-NUMPAD6","name":"","macro":""},{"index":37,"hotkey":"CTRL-NUMPAD7","name":"","macro":""},{"index":38,"hotkey":"CTRL-NUMPAD8","name":"","macro":""},{"index":39,"hotkey":"CTRL-NUMPAD9","name":"","macro":""},{"index":40,"hotkey":"CTRL-NUMPAD0","name":"","macro":""},{"index":41,"hotkey":"ALT-NUMPAD1","name":"","macro":""},{"index":42,"hotkey":"ALT-NUMPAD2","name":"","macro":""},{"index":43,"hotkey":"ALT-NUMPAD3","name":"","macro":""},{"index":44,"hotkey":"ALT-NUMPAD4","name":"","macro":""},{"index":45,"hotkey":"ALT-NUMPAD5","name":"","macro":""},{"index":46,"hotkey":"ALT-NUMPAD6","name":"","macro":""},{"index":47,"hotkey":"ALT-NUMPAD7","name":"","macro":""},{"index":48,"hotkey":"ALT-NUMPAD8","name":"","macro":""},{"index":49,"hotkey":"ALT-NUMPAD9","name":"","macro":""},{"index":50,"hotkey":"ALT-NUMPAD0","name":"","macro":""},{"index":51,"hotkey":"ALT-SHIFT-,","name":"","macro":""},{"index":52,"hotkey":"ALT-SHIFT-.","name":"","macro":""},{"index":53,"hotkey":"ALT-SHIFT-/","name":"","macro":""},{"index":54,"hotkey":"ALT-SHIFT-;","name":"","macro":""},{"index":55,"hotkey":"ALT-SHIFT-'","name":"","macro":""},{"index":56,"hotkey":"ALT-SHIFT-[","name":"","macro":""},{"index":57,"hotkey":"ALT-SHIFT-]","name":"","macro":""},{"index":58,"hotkey":"ALT-SHIFT-=","name":"","macro":""},{"index":59,"hotkey":"CTRL-SHIFT-,","name":"","macro":""},{"index":60,"hotkey":"CTRL-SHIFT-.","name":"","macro":""},{"index":61,"hotkey":"CTRL-SHIFT-/","name":"","macro":""},{"index":62,"hotkey":"CTRL-SHIFT-;","name":"","macro":""},{"index":63,"hotkey":"CTRL-SHIFT-'","name":"","macro":""},{"index":64,"hotkey":"CTRL-SHIFT-[","name":"","macro":""},{"index":65,"hotkey":"CTRL-SHIFT-]","name":"","macro":""},{"index":66,"hotkey":"CTRL-SHIFT-=","name":"","macro":""},{"index":67,"hotkey":"SHIFT-,","name":"","macro":""},{"index":68,"hotkey":"SHIFT-.","name":"","macro":""},{"index":69,"hotkey":"SHIFT-/","name":"","macro":""},{"index":70,"hotkey":"SHIFT-;","name":"","macro":""},{"index":71,"hotkey":"SHIFT-'","name":"","macro":""},{"index":72,"hotkey":"SHIFT-[","name":"","macro":""},{"index":73,"hotkey":"SHIFT-]","name":"","macro":""},{"index":74,"hotkey":"SHIFT-=","name":"","macro":""},{"index":75,"hotkey":"CTRL-,","name":"","macro":""},{"index":76,"hotkey":"CTRL-.","name":"","macro":""},{"index":77,"hotkey":"CTRL-/","name":"","macro":""},{"index":78,"hotkey":"CTRL-;","name":"","macro":""},{"index":79,"hotkey":"CTRL-'","name":"","macro":""},{"index":80,"hotkey":"CTRL-[","name":"","macro":""},{"index":81,"hotkey":"CTRL-]","name":"","macro":""},{"index":82,"hotkey":"CTRL-=","name":"","macro":""},{"index":83,"hotkey":"ALT-,","name":"","macro":""},{"index":84,"hotkey":"ALT-.","name":"","macro":""},{"index":85,"hotkey":"ALT-/","name":"","macro":""},{"index":86,"hotkey":"ALT-;","name":"","macro":""},{"index":87,"hotkey":"ALT-'","name":"","macro":""},{"index":88,"hotkey":"ALT-[","name":"","macro":""},{"index":89,"hotkey":"ALT-]","name":"","macro":""},{"index":90,"hotkey":"ALT-=","name":"","macro":""},{"index":91,"hotkey":"ALT-SHIFT-F1","name":"","macro":""},{"index":92,"hotkey":"ALT-SHIFT-F2","name":"","macro":""},{"index":93,"hotkey":"ALT-SHIFT-F3","name":"","macro":""},{"index":94,"hotkey":"ALT-SHIFT-F4","name":"","macro":""},{"index":95,"hotkey":"ALT-SHIFT-F5","name":"","macro":""},{"index":96,"hotkey":"ALT-SHIFT-F6","name":"","macro":""},{"index":97,"hotkey":"ALT-SHIFT-F7","name":"","macro":""},{"index":98,"hotkey":"ALT-SHIFT-F8","name":"","macro":""},{"index":99,"hotkey":"ALT-SHIFT-F9","name":"","macro":""},{"index":100,"hotkey":"ALT-SHIFT-F10","name":"","macro":""},{"index":101,"hotkey":"ALT-SHIFT-F11","name":"","macro":""},{"index":102,"hotkey":"ALT-SHIFT-F12","name":"","macro":""},{"index":103,"hotkey":"CTRL-SHIFT-F1","name":"","macro":""},{"index":104,"hotkey":"CTRL-SHIFT-F2","name":"","macro":""},{"index":105,"hotkey":"CTRL-SHIFT-F3","name":"","macro":""},{"index":106,"hotkey":"SHIFT-F1","name":"","macro":""},{"index":107,"hotkey":"SHIFT-F2","name":"","macro":""},{"index":108,"hotkey":"SHIFT-F3","name":"","macro":""},{"index":109,"hotkey":"SHIFT-F4","name":"","macro":""},{"index":110,"hotkey":"SHIFT-F5","name":"","macro":""},{"index":111,"hotkey":"SHIFT-F6","name":"","macro":""},{"index":112,"hotkey":"SHIFT-F7","name":"","macro":""},{"index":113,"hotkey":"SHIFT-F8","name":"","macro":""},{"index":114,"hotkey":"SHIFT-F9","name":"","macro":""},{"index":115,"hotkey":"SHIFT-F10","name":"","macro":""},{"index":116,"hotkey":"SHIFT-F11","name":"","macro":""},{"index":117,"hotkey":"SHIFT-F12","name":"","macro":""},{"index":118,"hotkey":"CTRL-F1","name":"","macro":""},{"index":119,"hotkey":"CTRL-F2","name":"","macro":""},{"index":120,"hotkey":"CTRL-F3","name":"","macro":""},{"index":121,"hotkey":"CTRL-F4","name":"","macro":""},{"index":122,"hotkey":"CTRL-F5","name":"","macro":""},{"index":123,"hotkey":"CTRL-F6","name":"","macro":""},{"index":124,"hotkey":"CTRL-F7","name":"","macro":""},{"index":125,"hotkey":"CTRL-F8","name":"","macro":""},{"index":126,"hotkey":"CTRL-F9","name":"","macro":""},{"index":127,"hotkey":"CTRL-F10","name":"","macro":""},{"index":128,"hotkey":"CTRL-F11","name":"","macro":""},{"index":129,"hotkey":"CTRL-F12","name":"","macro":""},{"index":130,"hotkey":"ALT-F1","name":"","macro":""},{"index":131,"hotkey":"ALT-F2","name":"","macro":""},{"index":132,"hotkey":"ALT-F3","name":"","macro":""},{"index":133,"hotkey":"ALT-F4","name":"","macro":""},{"index":134,"hotkey":"ALT-F5","name":"","macro":""},{"index":135,"hotkey":"ALT-F6","name":"","macro":""},{"index":136,"hotkey":"ALT-F7","name":"","macro":""},{"index":137,"hotkey":"ALT-F8","name":"","macro":""},{"index":138,"hotkey":"ALT-F9","name":"","macro":""},{"index":139,"hotkey":"ALT-F10","name":"","macro":""},{"index":140,"hotkey":"ALT-F11","name":"","macro":""},{"index":141,"hotkey":"ALT-F12","name":"","macro":""},{"index":142,"hotkey":"CTRL-SHIFT-F4","name":"","macro":""},{"index":143,"hotkey":"CTRL-SHIFT-F5","name":"","macro":""},{"index":144,"hotkey":"CTRL-SHIFT-F6","name":"","macro":""},{"index":145,"hotkey":"CTRL-SHIFT-F7","name":"","macro":""},{"index":146,"hotkey":"CTRL-SHIFT-F8","name":"","macro":""},{"index":147,"hotkey":"CTRL-SHIFT-F9","name":"","macro":""},{"index":148,"hotkey":"CTRL-SHIFT-F10","name":"","macro":""},{"index":149,"hotkey":"CTRL-SHIFT-F11","name":"","macro":""},{"index":150,"hotkey":"CTRL-SHIFT-F12","name":"","macro":""}],"props":[{"index":1,"name":"AssistMacro","mode":"custom","params":"","libRef":"","code":"return SuperDPS.AssistMacro()"},{"index":2,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":3,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":4,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":5,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":6,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":7,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":8,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":9,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":10,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":11,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":12,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":13,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":14,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":15,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":16,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":17,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":18,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":19,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":20,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":21,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":22,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":23,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":24,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":25,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":26,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":27,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":28,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":29,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":30,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":31,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":32,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":33,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":34,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":35,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":36,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":37,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":38,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":39,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":40,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":41,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":42,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":43,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":44,"name":"","mode":"off","params":"","libRef":"","code":""},{"index":45,"name":"","mode":"off","params":"","libRef":"","code":""}],"luaScripts":[{"index":1,"id":639219867096391302,"name":"official","code":"local slot = Prop(\"AssistMacro\")\nif slot > 0 then Macro(slot) end"},{"index":2,"id":0,"name":"","code":""},{"index":3,"id":0,"name":"","code":""},{"index":4,"id":0,"name":"","code":""},{"index":5,"id":0,"name":"","code":""},{"index":6,"id":0,"name":"","code":""},{"index":7,"id":0,"name":"","code":""},{"index":8,"id":0,"name":"","code":""},{"index":9,"id":0,"name":"","code":""},{"index":10,"id":0,"name":"","code":""},{"index":11,"id":0,"name":"","code":""},{"index":12,"id":0,"name":"","code":""},{"index":13,"id":0,"name":"","code":""},{"index":14,"id":0,"name":"","code":""},{"index":15,"id":0,"name":"","code":""},{"index":16,"id":0,"name":"","code":""},{"index":17,"id":0,"name":"","code":""},{"index":18,"id":0,"name":"","code":""},{"index":19,"id":0,"name":"","code":""},{"index":20,"id":0,"name":"","code":""},{"index":21,"id":0,"name":"","code":""},{"index":22,"id":0,"name":"","code":""},{"index":23,"id":0,"name":"","code":""},{"index":24,"id":0,"name":"","code":""},{"index":25,"id":0,"name":"","code":""},{"index":26,"id":0,"name":"","code":""},{"index":27,"id":0,"name":"","code":""},{"index":28,"id":0,"name":"","code":""},{"index":29,"id":0,"name":"","code":""},{"index":30,"id":0,"name":"","code":""},{"index":31,"id":0,"name":"","code":""},{"index":32,"id":0,"name":"","code":""},{"index":33,"id":0,"name":"","code":""},{"index":34,"id":0,"name":"","code":""},{"index":35,"id":0,"name":"","code":""},{"index":36,"id":0,"name":"","code":""},{"index":37,"id":0,"name":"","code":""},{"index":38,"id":0,"name":"","code":""},{"index":39,"id":0,"name":"","code":""},{"index":40,"id":0,"name":"","code":""},{"index":41,"id":0,"name":"","code":""},{"index":42,"id":0,"name":"","code":""},{"index":43,"id":0,"name":"","code":""},{"index":44,"id":0,"name":"","code":""},{"index":45,"id":0,"name":"","code":""},{"index":46,"id":0,"name":"","code":""},{"index":47,"id":0,"name":"","code":""},{"index":48,"id":0,"name":"","code":""},{"index":49,"id":0,"name":"","code":""},{"index":50,"id":0,"name":"","code":""}],"propLibrary":[]} ``` ## Appendix C: Reviewed sources ```json { "documentVersion": "2026-09-13.2", "language": "en", "minClientVersion": "20260913.120630", "sources": { "docs/ai-module-guide.md": "cb6178f1c04e49004e58c85247f21a1b1dccc99c2e06079dafdd33a1aa19b485", "docs/examples/agent-examples.json": "a05c10fc3be3bb5a2334cbde755c115a4d60b5e375e6ea627c24b84730e934de", "docs/examples/official-assisted-dynamic.wa1": "141e6c6441db8fb9954957d42ad7fc6984cdff28ed0c1ec513c1442fa219c42d", "docs/generated/module-reference.json": "f10ff7e06d05cceeaf4f753b449613bf638d373ee6123555d122ac8ed13d4647", "docs/addon-lua.md": "851bc3b5c127df1bc5c2e96fde05e6f08bb0f31cab8be4454cb5aa3e4be2a067", "docs/game-runtime.md": "0b3ff389641623bf1f32d2b2a8b650ae98d82dc82327501c03767b8ff9a2acc1", "docs/input-hotkey.md": "8d4a7bed85a3b1db504c79f889914f3c20e3b63c1824268350df07897423fd91", "docs/design/aura-capture/README.md": "c9b32f6d1330304536e5244f240603cb90c0af9055d4973ac4a77bb23a815fd1", "wa1-rust/crates/wa1-core/src/module_json.rs": "8cb7d46458b212aeaba99e41394bc3e80bfcda1c223a8f6511693199546aa52c", "wa1-rust/crates/wa1-core/src/model/mod.rs": "9e27f6758cb102dad84d860d54e7db19cb8bf58cb3a3961d28759bfc76466325", "wa1-rust/crates/wa1-core/src/model/template.rs": "759d58968aefb75d821f3777040856ed0c74a5fabcadc96a5e01bbcde8a493ff", "wa1-rust/crates/wa1-core/src/model/prop_library.rs": "946a57b28634505116e48e77715107a8f0a0720ec1b31bd940646a491532c2b1", "wa1-rust/crates/wa1-core/src/model/save_pipeline.rs": "0701f91b2e51bc25fa18c925c9ac573c0000bbe98b357ebf4471e2f6a1d1c5d9", "wa1-rust/crates/wa1-core/src/engine/mod.rs": "4b759c953379149d180d39681a5a81e179c440da202a5e11722e72c7f0965941", "wa1-rust/crates/wa1-core/src/engine/props.rs": "67f156a10e68f7ffc896075ed25ed32044f97420683917106b35598c1f3455eb", "wa1-rust/crates/wa1-core/src/dynamic_macro.rs": "f963d1888c01794e0a76c7eb2a7cabb5a1dd5c6ba472c106c4fe2996098b2847", "wa1-rust/crates/wa1-core/src/hotkey/parse.rs": "b821d799ecf2d59d472865ca1fb7a16db00c618af068dc6ce0adf6993fc93768", "wa1-rust/crates/wa1-core/src/addon/builder.rs": "b3c05edbdf72572ed2f936a8af980cf29891f251201cd940ff83b6e37a5e414d", "wa1-rust/crates/wa1-core/src/addon/main_lua.rs": "f330b9712b9c61bd2b22c818c3026403e7c54c80fcab582d87c4dfb9442a9418", "wa1-rust/crates/wa1-core/src/addon/resources/Main.lua": "1adc77c05aa9c136afb655efb358f966041d510e6796a59ab6be6c6ef5060f57", "wa1-rust/crates/wa1-core/src/addon/resources/dynamic_macro.lua": "edb46d399972efdde561ddb66e0af5b2cfcdcfc448d65e4f7944a8f4fcc8ba43", "wa1-rust/crates/wa1-core/src/addon/resources/aura_strip.lua": "befd1728ee7c526413bbbd5e98aa90d7ecef36c7f39c67cdfb7fbab86242a720", "web/scripts/agent-docs.mjs": "756861805a2cbeec60fcfa06d70950d2150743ae5c638a9ae80b8ad2001c279f" } } ```