diff --git a/README.md b/README.md index 4ece918..0d0d0aa 100644 --- a/README.md +++ b/README.md @@ -2,14 +2,20 @@ An enhanced macro addon for World of Warcraft 1.12.1 (Vanilla) that provides dynamic tooltips, conditional execution, and extended syntax. Originally based on [CleverMacro](https://github.com/DanielAdolfsson/CleverMacro) and [Roid-Macros](https://github.com/MarcelineVQ/Roid-Macros) with significant expansions. -## Required DLL Mods +## Required DLL Mod -**ALL THREE ARE MANDATORY:** -- [SuperWoW](https://github.com/balakethelock/SuperWoW/releases/tag/Release) - Extended API functions -- [Nampower](https://gitea.com/avitasia/nampower/releases) - Spell queueing and range checking -- [UnitXP_SP3](https://codeberg.org/konaka/UnitXP_SP3/releases) - Distance/positioning checks +**MANDATORY:** +- [SuperWoW](https://github.com/balakethelock/SuperWoW/releases/tag/Release) - Extended API functions (`SetAutoloot`, `SpellInfo()`, `UnitBuff/UnitDebuff` with IDs) -The addon will not function without all three DLL mods installed. +The addon will **not load** without SuperWoW installed. + +## Optional DLL Mods + +These provide additional functionality but are not required: +- [Nampower](https://gitea.com/avitasia/nampower/releases) (v2.23+) - Spell queueing, DBC data access (`QueueSpellByName`, `GetSpellRec`, `GetItemStats`, `GetUnitData`, etc.) +- [UnitXP_SP3](https://codeberg.org/konaka/UnitXP_SP3/releases) - Distance/positioning checks, enemy enumeration for `[multiscan]` + +A startup warning will appear if optional mods are missing. --- @@ -42,7 +48,7 @@ The addon will not function without all three DLL mods installed. /cleveroid debug 0|1 -- Toggle learning debug messages ``` -### Immunity Tracking +### Immunity Tracking (Damage Schools) ```lua /cleveroid listimmune [school] -- List immunities /cleveroid addimmune "" [buff] -- Add immunity @@ -50,11 +56,34 @@ The addon will not function without all three DLL mods installed. /cleveroid clearimmune [school] -- Clear immunity data ``` +### CC Immunity Tracking +```lua +/cleveroid listccimmune [type] -- List CC immunities +/cleveroid addccimmune "" [buff] -- Add CC immunity +/cleveroid removeccimmune "" -- Remove CC immunity +/cleveroid clearccimmune [type] -- Clear CC immunity data +``` + ### Talent & Equipment Testing ```lua /cleveroid talenttabs -- Show talent tab IDs /cleveroid listtab -- List talents in a tab /cleveroid talents -- Show current talent ranks +/cleveroid testtalent -- Test talent modifier for spell +``` + +### Debug Commands +```lua +/cleveroid slamdebug -- Show Slam cast time and clip windows +/cleveroid debuffdebug [spell] -- Show debuff tracking info on target +``` + +### Cursive Custom Spells +```lua +/cleveroid cursive list -- Show custom spells and status +/cleveroid cursive add [name] -- Add custom spell (temp) +/cleveroid cursive remove -- Remove custom spell +/cleveroid cursive inject -- Force re-injection into Cursive ``` ### Combo Point Tracking @@ -461,8 +490,10 @@ Auto-learns NPC immunities from combat log. ### Features - ✅ Auto-learning: "X's Spell fails. Y is immune." - ✅ Damage schools: fire, frost, nature, shadow, arcane, holy, physical, bleed +- ✅ **CC types:** stun, fear, root, silence, sleep, charm, polymorph, banish, horror, disorient, snare - ✅ Buff-based immunities (temporary) - ✅ Split damage spell support (Rake, Pounce, Garrote) +- ✅ CC immunity detection via combat log + post-cast verification ### Examples ```lua @@ -473,6 +504,11 @@ Auto-learns NPC immunities from combat log. -- Check by spell name /cast [noimmune:"Flame Shock"] Flame Shock; Lightning Bolt +-- Check CC immunity +/cast [noimmune:stun] Cheap Shot -- Skip if stun immune +/cast [noimmune:fear] Fear -- Skip if fear immune +/cast [noimmune:polymorph] Polymorph -- Skip if polymorph immune + -- Split damage spells /cast [noimmune] Rake -- Checks bleed (DoT) /cast [noimmune:physical] Rake -- Checks physical (initial) @@ -486,6 +522,13 @@ Auto-learns NPC immunities from combat log. Default `[noimmune]` checks the debuff school (bleed). +### CC Immunity Detection +CC immunities are detected via: +1. Combat log messages ("X is immune to Y") +2. Post-cast verification (checks if CC debuff appeared on target) + +Storage: `CleveRoids_ImmunityData["cc_stun"]["NPC Name"] = true` + --- # Slash Commands @@ -565,7 +608,7 @@ Default `[noimmune]` checks the debuff school (bleed). | druidmana | [druidmana:>=X] | * | | Druid mana in form | | equipped | [equipped:Daggers2] | * | * | Item/type equipped | | form | [form:0/1/2] | * | * | Shapeshift form | -| group | [group:party/raid] | * | * | Player in group type | +| group | [group]/[group:party]/[group:raid] | * | * | Player in any group / party only / raid only | | known | [known:"Name">#2] | * | * | Spell/talent known | | mybuff | [mybuff:"Name"=X] | * | | Total buff count | @@ -612,6 +655,7 @@ Default `@unitid` is usually `@target` if not specified. | combat | [combat:target] | * | * | Unit in combat | | dead | [dead] | | * | Dead or ghost | | debuff | [debuff:"Name"N] | * | * | Cursive debuff tracking (Cursive addon) | | cc | [cc:stun/fear] | * | * | Unit has CC effect | | distance | [distance:<40] | * | * | Distance in yards | | exists | [exists] | | * | Unit exists | @@ -631,11 +675,11 @@ Default `@unitid` is usually `@target` if not specified. | multiscan | [multiscan:priority] | * | | Scan for best enemy target | | notarget | [notarget] | | | Player has no target | | outrange | [outrange:"Name"] | | | Out of spell range | -| party | [party]/[party:unitid] | | * | Unit in party | +| party | [party]/[party:unitid] | | * | Target in party / specific unit in party | | power | [power:>=50] | * | | Unit power % | | powerlost | [powerlost:>=X] | * | | Unit power lost | | powertype | [powertype:mana/rage] | * | * | Power type | -| raid | [raid]/[raid:unitid] | | * | Unit in raid | +| raid | [raid]/[raid:unitid] | | * | Target in raid / specific unit in raid | | rawhp | [rawhp:>=1000] | * | | Unit HP raw | | rawpower | [rawpower:>=500] | * | | Unit power raw | | targeting | [targeting:player] | * | * | Unit targeting X | @@ -698,7 +742,7 @@ str/strength, agi/agility, stam/stamina, int/intellect, spi/spirit, ap/attackpow ## CC Types (cc/mycc conditionals) -Crowd control detection using DBC spell mechanic data (785 spells). +Crowd control detection using DBC spell mechanic data (785 spells). BuffLib enhances with overflow aura tracking if available. | Type | Aliases | Examples | |------|---------|----------| @@ -722,17 +766,27 @@ Crowd control detection using DBC spell mechanic data (785 spells). | horror | | Death Coil | | daze | | Daze effects | +**Loss-of-Control Types** (checked by `[cc]` without type): +stun, fear, sleep, charm, polymorph, banish, horror, freeze, disorient, shackle + **Usage:** ```lua /cast [cc:stun] Blessing of Freedom -- Target is stunned (includes Gouge, Sap) /cast [mycc:fear] Will of the Forsaken -- Player is feared /cast [@focus,nocc:polymorph] Fireball -- Focus not polymorphed -/cast [cc:stun/fear/root] Dispel -- Any of these CCs +/cast [cc:stun/fear/root] Dispel -- Any of these CCs (OR logic) +/cast [nocc:stun/fear] Spell -- Not stunned AND not feared (AND logic) /cast [nocc] Spell -- No loss-of-control CC ``` -`[cc]` or `[nocc]` without a type checks for any **loss-of-control** effect: -stun, fear, sleep, charm, polymorph, banish, horror, freeze, disorient, shackle +**CC Immunity Conditionals:** +```lua +/cast [noimmune:stun] Cheap Shot -- Skip if target is stun immune +/cast [noimmune:fear] Fear -- Skip if target is fear immune +/cast [@focus,noimmune:polymorph] Polymorph +``` + +CC immunities are auto-learned from combat log and post-cast verification (checks if CC debuff appeared). ## Multiscan (Target Scanning) - *Credits to Avitasia and the Cursive addon* @@ -1059,14 +1113,18 @@ Uses Cursive's GUID-based debuff tracking for accurate time remaining on your Do - `[cursive:Spell]` - Target has specific debuff - `[cursive:Spell>N]` - Debuff has more than N seconds remaining - `[cursive:SpellN&N]` - Missing OR has ≤ N seconds remaining **Syntax:** ```lua [cursive:Rake] -- Target has Rake tracked by Cursive [cursive:Rake>3] -- Rake has more than 3 seconds remaining [cursive:Rake<5] -- Rake has less than 5 seconds remaining +[cursive:Rake>3&<9] -- Rake between 3 and 9 seconds remaining [nocursive:Rip] -- Target missing Rip +[nocursive:Rake>3] -- Missing Rake OR has 3s or less remaining [@focus,cursive:DoT] -- Focus target has DoT ``` @@ -1093,7 +1151,75 @@ Uses Cursive's GUID-based debuff tracking for accurate time remaining on your Do - **GUID-based**: Tracks by unit GUID, not unit token - survives target switching - **Pending cast aware**: Knows about spells in flight before they hit - **Accurate timing**: Accounts for Dark Harvest, latency compensation -- **Works at debuff cap**: Pre-registers expected debuffs +- **Works at debuff cap**: Pre-registers expected debuffs before they appear on target + +**API Functions:** +```lua +CleveRoids.HasCursive() -- Check if Cursive is available +CleveRoids.GetCursiveTimeRemaining(unit, spellName) -- Get seconds remaining +CleveRoids.ValidateCursiveDebuff(unit, spell, op, n) -- Full validation with operator +CleveRoids.HasAnyCursiveDebuff(unit) -- Any tracked debuff on unit +``` + +--- + +## CursiveCustomSpells Extension + +Automatically injects additional spell definitions into Cursive's tracking system for spells not natively supported. + +### Pre-configured Spells + +| Class | Spells | +|-------|--------| +| **Warrior** | Deep Wounds, Hamstring, Taunt, Mocking Blow | +| **Paladin** | All Judgements (Crusader, Light, Wisdom, Justice), Hand of Reckoning | +| **Rogue** | Deadly Poison, Crippling Poison, Wound Poison, Mind-numbing Poison | +| **Druid** | Growl | +| **Items** | Thunderfury (nature resist debuff + attack speed slow) | + +### Console Commands +```lua +/cleveroid cursive list -- Show custom spells and status +/cleveroid cursive add [name] -- Add custom spell (session only) +/cleveroid cursive remove -- Remove custom spell +/cleveroid cursive inject -- Force re-injection into Cursive +``` + +### Adding Custom Spells + +**Temporary (session only):** +```lua +/cleveroid cursive add 12345 18 "my debuff" +``` + +**Permanent (edit CursiveCustomSpells.lua):** +```lua +CleveRoids.CustomCursiveSpells = { + [12345] = { name = "custom debuff", rank = 1, duration = 18 }, +} +``` + +**Spell Definition Format:** +```lua +[spellID] = { + name = "lowercase spell name", -- Required + rank = 1, -- Required + duration = 18, -- Required (seconds) + variableDuration = true, -- Optional: modified by talents/haste + numTicks = 6, -- Optional: number of DoT ticks + darkHarvest = true, -- Optional: affected by Dark Harvest +} +``` + +### Paladin Judgement Detection + +The extension automatically detects which Seal is active when you cast Judgement (spell ID 20271) and registers the correct debuff name: +- Seal of Wisdom → Judgement of Wisdom +- Seal of Light → Judgement of Light +- Seal of the Crusader → Judgement of the Crusader +- Seal of Justice → Judgement of Justice + +Judgements are also automatically refreshed when the Paladin lands melee hits. ---