From f59b66a7b6d41bdb11fad743626175e4f7f2fe08 Mon Sep 17 00:00:00 2001 From: Jrc13245 Date: Tue, 18 Nov 2025 17:37:38 -0500 Subject: [PATCH] update rake to use the idol duration change andd addd bash talent duration change --- README.md | 107 +++++++++++++++++++++++++++++++++++++++++++++------- Utility.lua | 36 +++++++++++++----- 2 files changed, 121 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 748a7ca..9f7dd33 100644 --- a/README.md +++ b/README.md @@ -36,8 +36,12 @@ Check slash command and all conditional lists for new usages! * `/cleveroid addimmune "" [buff]` - Add manual immunity * `/cleveroid removeimmune "" ` - Remove immunity * `/cleveroid clearimmune [school]` - Clear immunity data -* `/cleveroid combotrack` - Show combo point tracking info (Rip, Rupture, Kidney Shot) -* `/cleveroid comboclear` - Clear combo tracking data +* `/cleveroid talents` - Show all current talent ranks +* `/cleveroid testtalent ` - Test talent modifier calculation for a spell +* `/cleveroid testequip ` - Test equipment modifier calculation for a spell +* `/combotrack show` - Show combo point tracking info (Rip, Rupture, Kidney Shot) +* `/combotrack clear` - Clear combo tracking data +* `/combotrack debug` - Toggle combo tracking debug output --- @@ -125,7 +129,7 @@ SuperCleveRoidMacros includes a built-in **debuff timer tracking system** that a ### Features * ✅ **Auto-Learning** - Automatically learns debuff durations as you cast them * ✅ **Accurate Tracking** - Only tracks debuffs that successfully land (no false timers on misses) -* ✅ **329+ Debuffs Pre-configured** - Extensive database of vanilla 1.12.1 spell IDs +* ✅ **335+ Debuffs Pre-configured** - Extensive database of vanilla 1.12.1 spell IDs * ✅ **Per-Caster Storage** - Handles talent variations by tracking per player GUID * ✅ **GUID-Based** - Correctly handles multiple mobs with the same name * ✅ **No pfUI Required** - Fully independent debuff tracking system @@ -163,7 +167,7 @@ SuperCleveRoidMacros includes a built-in **debuff timer tracking system** that a ``` ### Supported Debuffs -The system includes pre-configured durations for 329+ debuffs across all classes: +The system includes pre-configured durations for 335+ debuffs across all classes: - **Warrior:** Sunder Armor, Rend, Hamstring, Thunder Clap, Demoralizing Shout, etc. - **Rogue:** Rupture, Garrote, Expose Armor, Poisons, etc. - **Hunter:** Serpent Sting, Hunter's Mark, Wing Clip, Wyvern Sting, etc. @@ -171,16 +175,21 @@ The system includes pre-configured durations for 329+ debuffs across all classes - **Warlock:** Corruption, Curses, Immolate, Siphon Life, etc. - **Mage:** Polymorph (all variants), Slow effects, etc. - **Priest:** Shadow Word: Pain, Devouring Plague, Mind Flay, etc. -- **Paladin:** Judgements, Hammer of Justice, etc. +- **Paladin:** Judgement of the Crusader (all 6 ranks), Hammer of Justice, etc. - **Shaman:** Flame Shock, Frost Shock, etc. ### Combo Point Scaling The addon automatically tracks combo point finishers that scale duration with combo points: - **Rogue Rupture** (all ranks): 8s base + 2s per combo point (8s @ 1 CP, 16s @ 5 CP) - **Rogue Kidney Shot**: Rank 1: 1s + 1s per CP, Rank 2: 2s + 1s per CP -- **Druid Rip** (all ranks): 12s base + 4s per combo point (12s @ 1 CP, 28s @ 5 CP) +- **Druid Rip** (all ranks): 10s base + 2s per combo point (10s @ 1 CP, 18s @ 5 CP) + +The system automatically detects combo points at cast time and calculates the correct duration **regardless of how you cast the spell**: +- ✅ Clicking spell in spellbook +- ✅ Clicking ability on action bars +- ✅ Using macros (`/cast Rip`) +- ✅ Direct Lua calls (`CastSpellByName("Rip")`) -The system automatically detects combo points at cast time and calculates the correct duration: ```lua -- Will show accurate duration based on combo points used /cast [nodebuff:Rip] Rip @@ -191,14 +200,86 @@ The system automatically detects combo points at cast time and calculates the co /cast [debuff:Rupture<2] Rupture ``` -Use `/cleveroid combotrack` to see recent combo finisher casts and their calculated durations. +Use `/combotrack show` to see recent combo finisher casts and their calculated durations. + +### Talent Modifiers +The addon automatically applies talent-based duration modifications to debuffs. Talent modifiers layer on top of combo point calculations for finisher abilities. +**IF YOUR TALENT DEBUFF DURATION MODIFIER IS MISSING, PLEASE MAKE A BUG REPORT!!!** + +**Calculation Order:** `final_duration = (base + combo_points) + talent_modifier` + +**Supported Talent Modifiers:** +- **Rogue:** + - **Taste for Blood** (3 ranks): +2s per rank to Rupture duration + - **Improved Gouge** (3 ranks): +0.5s per rank to Gouge duration +- **Priest:** + - **Improved Shadow Word: Pain** (2 ranks): +3s per rank to SW:P duration +- **Druid:** + - **Brutal Impact** (2 ranks): +0.5s per rank to Bash and Pounce stun duration + +**Example:** Rupture with 5 CP and Taste for Blood 3/3: +1. Base duration: 8s +2. Combo point modifier: 8s + (5-1)×2 = 16s +3. Talent modifier: 16s + (3×2) = **22s final** + +Use `/cleveroid talents` to view your current talent ranks, and `/cleveroid testtalent ` to test calculations. + +### Equipment Modifiers +The addon supports item-based duration modifications. +**IF YOUR EQUIPMENT DEBUFF DURATION MODIFIER IS MISSING, PLEASE MAKE A BUG REPORT!!!** + +**Calculation Order:** `final_duration = ((base + combo_points) + talent_modifier) × equipment_modifier` + +**Supported Equipment Modifiers:** +- **Idol of Savagery** (Item ID: 61699, Druid Idol): Reduces the time between periodic ticks and the duration of Rake and Rip by 10% (×0.9 multiplier) + +**Example:** Rip with 5 CP and Idol of Savagery equipped: +1. Base duration: 10s +2. Combo point modifier: 10s + (5-1)×2 = 18s +3. Talent modifier: 18s + 0 = 18s (if no talent) +4. Equipment modifier: 18s × 0.9 = **16.2s final** + +Use `/cleveroid testequip ` to test equipment modifier calculations. + +### Immunity Tracking System +The addon automatically learns and tracks NPC immunities from combat log messages: + +**Features:** +- ✅ **Auto-learning** from combat log: "X's Spell fails. Y is immune." +- ✅ **Damage school tracking**: fire, frost, nature, shadow, arcane, holy, physical +- ✅ **Buff-based immunity detection**: Tracks temporary immunities (e.g., boss immune during shield phase) +- ✅ **Automatic spell school detection** via tooltip scanning + +**Usage in Macros:** +```lua +-- Check immunity before casting +/cast [noimmune:fire] Fireball; Frostbolt +/cast [noimmune:"Flame Shock"] Flame Shock; Lightning Bolt + +-- Check if target is immune (any school) +/cast [immune] Shoot; Arcane Shot +``` + +**Manual Control:** +```lua +/cleveroid listimmune [school] -- List all or specific immunities +/cleveroid addimmune "NPC Name" fire -- Add manual immunity +/cleveroid removeimmune "NPC Name" fire -- Remove immunity +/cleveroid clearimmune [school] -- Clear immunity data +``` ### Technical Details -- Uses **UNIT_CASTEVENT** for precise cast detection (only tracks successful hits) -- Uses **RAW_COMBATLOG** to detect when debuffs fade -- Stores durations in **SavedVariables** (persists between sessions) -- Falls back to static database for unknown spells -- No dependency on pfUI or other addons +- **Combo point tracking:** + - Hooks `CastSpell`, `UseAction`, and `CastSpellByName` at addon load time + - Pre-captures combo points before spell execution + - Works universally across all casting methods (spellbook, action bars, macros, Lua calls) + - Integrates with pfUI's debuff timer display +- **Debuff duration tracking:** + - Uses **UNIT_CASTEVENT** for precise cast detection (only tracks successful hits) + - Uses **RAW_COMBATLOG** to detect when debuffs fade + - Stores durations in **SavedVariables** (persists between sessions) + - Falls back to static database for unknown spells +- **No dependency on pfUI or other addons** (but integrates with pfUI if present) --- # Usage diff --git a/Utility.lua b/Utility.lua index 5c21fc1..39142d2 100644 --- a/Utility.lua +++ b/Utility.lua @@ -1420,6 +1420,17 @@ CleveRoids.talentModifiers[10892] = { talent = "Improved Shadow Word: Pain", mod CleveRoids.talentModifiers[10893] = { talent = "Improved Shadow Word: Pain", modifier = function(base, rank) return base + (rank * 3) end } -- SW:P Rank 7 CleveRoids.talentModifiers[10894] = { talent = "Improved Shadow Word: Pain", modifier = function(base, rank) return base + (rank * 3) end } -- SW:P Rank 8 +-- DRUID talent modifiers +-- Brutal Impact: Increases Bash and Pounce stun duration by 0.5 seconds per rank (2 ranks max) +-- Talent Spell IDs: 16940 (Rank 1), 16941 (Rank 2) +CleveRoids.talentModifiers[5211] = { talent = "Brutal Impact", modifier = function(base, rank) return base + (rank * 0.5) end } -- Bash Rank 1 +CleveRoids.talentModifiers[6798] = { talent = "Brutal Impact", modifier = function(base, rank) return base + (rank * 0.5) end } -- Bash Rank 2 +CleveRoids.talentModifiers[8983] = { talent = "Brutal Impact", modifier = function(base, rank) return base + (rank * 0.5) end } -- Bash Rank 3 + +CleveRoids.talentModifiers[9005] = { talent = "Brutal Impact", modifier = function(base, rank) return base + (rank * 0.5) end } -- Pounce Rank 1 +CleveRoids.talentModifiers[9823] = { talent = "Brutal Impact", modifier = function(base, rank) return base + (rank * 0.5) end } -- Pounce Rank 2 +CleveRoids.talentModifiers[9827] = { talent = "Brutal Impact", modifier = function(base, rank) return base + (rank * 0.5) end } -- Pounce Rank 3 + -- Function to get talent rank for a talent by name -- Returns 0 if talent not found or not learned function CleveRoids.GetTalentRank(talentName) @@ -1493,22 +1504,29 @@ end CleveRoids.equipmentModifiers = CleveRoids.equipmentModifiers or {} -- DRUID equipment modifiers --- Black Morass Idol: Reduces Rip duration by 10% (multiplicative) +-- Idol of Savagery (Black Morass Idol): Reduces Rip and Rake duration by 10% (multiplicative) -- Item ID: 61699, Slot: 18 (Ranged/Relic) -local ripIdolModifier = function(duration, itemID) +local ripRakeIdolModifier = function(duration, itemID) if itemID == 61699 then - -- Black Morass: 10% reduction (multiply by 0.9) + -- Idol of Savagery: 10% reduction (multiply by 0.9) return duration * 0.9 end return duration end -CleveRoids.equipmentModifiers[1079] = { slot = 18, modifier = ripIdolModifier } -- Rip Rank 1 -CleveRoids.equipmentModifiers[9492] = { slot = 18, modifier = ripIdolModifier } -- Rip Rank 2 -CleveRoids.equipmentModifiers[9493] = { slot = 18, modifier = ripIdolModifier } -- Rip Rank 3 -CleveRoids.equipmentModifiers[9752] = { slot = 18, modifier = ripIdolModifier } -- Rip Rank 4 -CleveRoids.equipmentModifiers[9894] = { slot = 18, modifier = ripIdolModifier } -- Rip Rank 5 -CleveRoids.equipmentModifiers[9896] = { slot = 18, modifier = ripIdolModifier } -- Rip Rank 6 +-- Rip (all ranks) +CleveRoids.equipmentModifiers[1079] = { slot = 18, modifier = ripRakeIdolModifier } -- Rip Rank 1 +CleveRoids.equipmentModifiers[9492] = { slot = 18, modifier = ripRakeIdolModifier } -- Rip Rank 2 +CleveRoids.equipmentModifiers[9493] = { slot = 18, modifier = ripRakeIdolModifier } -- Rip Rank 3 +CleveRoids.equipmentModifiers[9752] = { slot = 18, modifier = ripRakeIdolModifier } -- Rip Rank 4 +CleveRoids.equipmentModifiers[9894] = { slot = 18, modifier = ripRakeIdolModifier } -- Rip Rank 5 +CleveRoids.equipmentModifiers[9896] = { slot = 18, modifier = ripRakeIdolModifier } -- Rip Rank 6 + +-- Rake (all ranks) +CleveRoids.equipmentModifiers[1822] = { slot = 18, modifier = ripRakeIdolModifier } -- Rake Rank 1 +CleveRoids.equipmentModifiers[1823] = { slot = 18, modifier = ripRakeIdolModifier } -- Rake Rank 2 +CleveRoids.equipmentModifiers[1824] = { slot = 18, modifier = ripRakeIdolModifier } -- Rake Rank 3 +CleveRoids.equipmentModifiers[9904] = { slot = 18, modifier = ripRakeIdolModifier } -- Rake Rank 4 -- Function to get equipped item ID in a specific slot function CleveRoids.GetEquippedItemID(slotID)