4d2a80ddb8
mod-paragon Paragon_Essence.cpp: - Broaden SkillLinesLinkedToSpell: collect every SkillLineAbility row for an anchor spell regardless of AcquireMethod, so anchor spells whose primary SLA uses AcquireMethod 0 (e.g. Blood Strike) correctly identify their skill lines and let the dependent classifier do its job. - IsSpellSkillLineCascadeDependent / RevokeUnwantedCascadeSpellsForPlayer use the broadened helper. HandleCommit calls the post-purchase sweep immediately so the spellbook never carries lingering cascade dependents (Blood Presence / Forceful Deflection / Death Coil / Death Grip). - New character_paragon_panel_spell_revoked table tracks which active dependents we've revoked per (guid, parent) so OnPlayerLogin can re-revoke them after AC's _LoadSkills -> learnSkillRewardedSpells silently re-grants them. - OnPlayerLogin opens the client SILENCE window via SendSilenceOpenForCommit with an empty allow list and intentionally omits the matching SendSilenceClose: the chat frame buffers CHAT_MSG_SYSTEM during the loading screen and only flushes after PLAYER_ENTERING_WORLD, so a paired CLOSE would shut the filter before the buffered "you have unlearned X" toasts hit it. The addon's 8s fail-open closes the window after the flush. - New `.paragon hat` chat command for diagnosing Honor Among Thieves triggers (talent rank, learned spell, applied aura, proc table entry). mod-paragon Paragon_SC.cpp: - OnPlayerUpdate pushes server-authoritative combo points to the client via PARAA "R CP <n>" whenever the count changes. The client-side ComboFrame Paragon simulator listens for this and updates the target frame, fixing HAT-generated CP not displaying (HAT's trigger casts with a null target, which the combat-log inference path can't see). - OnPlayerUpdate also pushes "R RUNES <cd0..cd5>" (ms remaining per rune slot) on rune mask changes, so the client RuneFrame simulator stays in lock-step with Spell::TakeRunePower instead of drifting through combat-log latency. mod-paragon SQL: - New updates/2026_05_09_00.sql migration creates character_paragon_panel_spell_revoked for AC's auto-DBUpdater so a fresh checkout can stand up an existing characters DB without manual intervention. Matching CREATE TABLE IF NOT EXISTS in base/character_paragon_panel_learned.sql for fresh installs. mod-paragon conf: - New Paragon.Diag.PanelLearn flag traces every PanelLearnSpellChain commit (chain ids, before/after spell-map sizes, side-spell classification) for diagnosing "spell reappears on relog" bugs. Co-authored-by: Cursor <cursoragent@cursor.com>
50 lines
2.4 KiB
Plaintext
50 lines
2.4 KiB
Plaintext
# mod-paragon — Paragon (class 12) server options
|
|
#
|
|
# Copy to mod_paragon.conf in the same directory to override defaults.
|
|
|
|
[worldserver]
|
|
|
|
# Sticky combo points (server-side): CP pool is per-player; switching targets
|
|
# does not reset points. Implemented in core Unit::AddComboPoints / GetComboPoints.
|
|
Paragon.StickyComboPoints = 1
|
|
|
|
# When enabled, Paragon answers HasActivePowerType() for mana/rage/energy/focus
|
|
# in addition to runes/runic power. Required for the patch-enUS-5.MPQ player
|
|
# frame to populate Mana/Rage/Energy bars - otherwise the server treats those
|
|
# powers as inactive and never sends max values, leaving the bars empty.
|
|
Paragon.MultiResource.HasActivePowers = 1
|
|
|
|
# Ability / Talent Essence (AE/TE) — Ascension-inspired currency
|
|
Paragon.Currency.Enabled = 1
|
|
Paragon.Currency.AE.Start = 9
|
|
Paragon.Currency.TE.Start = 0
|
|
# From this character level onward, each level-up grants both essences once.
|
|
Paragon.Currency.GrantLevelMin = 10
|
|
Paragon.Currency.AE.PerLevel = 1
|
|
Paragon.Currency.TE.PerLevel = 1
|
|
# Flat TE cost per successful talent rank learn (hook runs once per LearnTalent).
|
|
# Applies to passive / aura-only talents (addToSpellBook == 0).
|
|
Paragon.Currency.TE.TalentLearnCost = 1
|
|
# AE cost per rank for addToSpellBook talents (Starfall, Bladestorm, …).
|
|
# Those talents also charge TE.TalentLearnCost per rank — each rank costs
|
|
# both essences at the configured amounts.
|
|
Paragon.Currency.AE.TalentLearnCost = 1
|
|
# Default AE cost when spell is not listed in world.paragon_spell_ae_cost.
|
|
# (Phase 3a: every learnable spell baked into the Character Advancement panel
|
|
# has an explicit row of value 1 in that table, so this default only kicks in
|
|
# for spells learned via .paragon learn that aren't in the panel's bake.)
|
|
Paragon.Currency.AE.DefaultSpellCost = 1
|
|
|
|
# Diagnostics ----------------------------------------------------------------
|
|
# When enabled, dumps every Paragon's rune cooldown state to the server log
|
|
# every 5 seconds (channel "module"). Use with `.paragon runes` for in-game
|
|
# verification. Leave at 0 in production — it's noisy.
|
|
Paragon.Diag.RuneTrace = 0
|
|
|
|
# When enabled, traces every PanelLearnSpellChain commit: chain ids, before/
|
|
# after spell-map sizes for each rank learn, and the classification of every
|
|
# auto-granted side spell (chain rank / passive dep / active dep revoked).
|
|
# Use to diagnose "spell X reappears in spellbook on relog" style bugs.
|
|
# Leave at 0 in production.
|
|
Paragon.Diag.PanelLearn = 0
|