Commit Graph

27 Commits

Author SHA1 Message Date
Docker Build 5deb9e3255 Paragon: ship class-12 starter spawn data so character creation works on fresh installs
Companion to 2026_05_09_00.sql (DBC overlay). The DBC overlay teaches
the world server that class 12 (Paragon) exists; this migration
teaches it WHERE class-12 characters spawn, what action bar they boot
with, and what per-level base stats Player::InitStatsForLevel uses.

Without these rows, contributors hit:
  - Player::Create -> "invalid race/class pair (R/12) - refusing"
    and the client shows "Error creating character".
  - WorldServer load -> "class-12 Level-L does not have stats data!"
    integrity warnings.

Tables touched (idempotent: DELETE WHERE class=12 then INSERT):
  - playercreateinfo         : 10 rows, every DK-eligible race spawning
                               in their racial newbie zone (Northshire,
                               Valley of Trials, Ammen Vale, ...).
                               NOT Acherus -- Paragon is from-level-1.
  - playercreateinfo_action  : 46 rows, default action bar layout
                               per race (attack 6603, eat 78, racial,
                               etc.).
  - player_class_stats       : 80 rows, per-level base HP/Mana/STR/AGI/
                               STA/INT/SPI. Curve mirrors Warrior to
                               level 60, Paladin-style HP inflation
                               past 60 to keep Paragon competitive
                               in Wrath content.

Tables intentionally untouched: playercreateinfo_item is empty for
class 12 (Paragon ships no per-class starting items, only racial
kit), and the mask-based playercreateinfo_skills/_cast_spell/
_spell_custom rows already cover class 12 via their classMask=0
"all classes" entries.

Verified locally: applies cleanly twice in a row (idempotent),
worldserver restart now logs `>> Loaded 72 Player Create Definitions`
(was 62 pre-Paragon = +10 races for class 12) and creates a Draenei
Paragon without rejection.

CLIENT-PATCHES.md troubleshooting block updated to merge the two
"Character Creation Failed" modes (DBC overlay missing + spawn data
missing) into a single fix recipe. Existing contributors with a
pre-built dbimport image need
`docker compose build ac-db-import ac-worldserver` before this
migration is visible to DBUpdater; fresh clones get it on first
`docker compose up`.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-09 13:06:39 -04:00
Docker Build ecd8eacb1f chore(conf): revert seed defaults to stock so fresh installs auto-connect
The previous seed pinned auth/realmlist to production values
(`hsrwow.net` + RealmServerPort 47497), which silently bricked every
fresh local install: after auth login the realm hand-off pointed
clients at our public host, where their local credentials don't
exist, and they were dropped within a frame.

Seed now matches stock AzerothCore for solo dev:
- realmlist.address  = 127.0.0.1   (was hsrwow.net)
- RealmServerPort    = 3724        (was 47497)

Production owners apply both overrides post-dbimport via a one-shot
SQL UPDATE + an authserver.conf edit. Documented end-to-end in
contrib/fractured-dev-extras/BUILD-NATIVE.md (new "Production
deployment overrides" section) and the disconnect-after-login
symptom is called out in CLIENT-PATCHES.md.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-09 12:44:45 -04:00
Docker Build 1811c0ec35 Fix MariaDB dbimport: utf8mb4 collation and dbimport.conf
Use utf8mb4_unicode_ci in base SQL (MariaDB lacks utf8mb4_0900_ai_ci).
Add Updates.ExceptionShutdownDelay to dbimport.conf.dist to match
DBUpdater expectations.
2026-05-09 11:41:57 -05:00
Docker Build fae3ff5028 Paragon: ship server-side DBC overlay as SQL so fresh installs can roll class 12
Stock Docker installs fill data/dbc/ from the vanilla 3.3.5a extract
in `ac-wotlk-client-data`, which has no class 12 in ChrClasses.dbc and
no class-12 bit on SkillRaceClassInfo.dbc. CharacterHandler.cpp's
sChrClassesStore.LookupEntry(12) returns null and the create fails
with CHAR_CREATE_FAILED ("Class (12) not found in DBC ...") before the
contributor ever sees the panel. Fixing it required hand-copying the
patched DBCs onto the named volume — undocumented, fragile, and not
portable to native installs.

DBCStores.cpp::LoadDBC merges every <table>_dbc world-DB row on top of
the on-disk DBC store (storage.LoadFromDB after storage.Load). We use
that merge layer to ship Paragon's class-12 deltas as SQL:

- chrclasses_dbc: 1 row defining class 12 (Paragon, power=Mana,
  family=Warrior, expansion=2). Resolves CHAR_CREATE_FAILED.
- skillraceclassinfo_dbc: 235 rows REPLACEing stock entries with the
  patched ClassMask (class-12 bit OR'd in) so baseline skills (defense,
  weapon skills, etc.) are available to Paragon characters.

The new `modules/mod-paragon/data/sql/db-world/updates/2026_05_09_00.sql`
is applied automatically by AC's DBUpdater on every fresh `ac-db-import`
run (Docker) or first worldserver boot (native). End-to-end verified
locally: truncate -> docker compose up ac-db-import -> rows reappear
with hash 33B1A05 recorded in updates table.

The migration is auto-generated by
fractured-tooling/from-workspace-root/_gen_paragon_dbc_overlay_sql.py
(outside this repo per the repo-tidy policy). Re-run it whenever the
DBC bake changes.

CLIENT-PATCHES.md is rewritten so contributors no longer need the
manual DBC sync section as their primary install path. Manual overlay
is preserved as a labelled fallback for tools that read data/dbc/
directly.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-09 12:19:59 -04:00
Docker Build 20a24b7935 docs(client): document worldserver DBC sync for Paragon character create
Explains why Character Creation Failed occurs when the client has
patch-enUS-4 but Docker/native data/dbc is still vanilla: ChrClasses
row 12 only exists in the patched DBC set. Adds Docker volume copy
steps, native install path, and log verification.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-09 12:00:16 -04:00
Docker Build 526022e2bc Add VPS clone scripts for sparse checkout without Docker
Track vps-clone-without-docker.sh and vps-sparse-checkout-no-docker.sh
so a fresh GitHub clone can run the helper end-to-end. Mark both
executable in git for ./ usage after clone.
2026-05-09 10:41:40 -05:00
Docker Build 4a1f4d02f0 docs(client): add CLIENT-PATCHES.md describing the Fractured client bundle
Documents the four binary artifacts that pair with this server
(patch-enUS-4/5/6.MPQ + patched Wow.exe), where they live (the
Releases page; not in the tree per the repo-tidy policy), and how a
contributor installs them on top of a clean 3.3.5a client. Cross-
referenced from the contrib/fractured-dev-extras README.

Co-authored-by: Cursor <cursoragent@cursor.com>
v0.7.4-paragon-advancement
2026-05-09 11:34:12 -04:00
Docker Build 4d2a80ddb8 Paragon: server-authoritative CP/rune sync + cascade-spell revoke hardening
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>
2026-05-09 11:22:57 -04:00
Docker Build 81df32963f chore(repo): move fork docs and logs under contrib/fractured-dev-extras
Stock AzerothCore does not ship CLAUDE.md, BUILD-NATIVE.md, or local build
logs at repo root. Park them under contrib/fractured-dev-extras/ so the
repo root stays close to upstream and dev clutter is contained.

- mv CLAUDE.md, BUILD-NATIVE.md -> contrib/fractured-dev-extras/
- mv build-worldserver.log + _build_paragon_*.log there (untracked / ignored)
- add contrib/fractured-dev-extras/README.txt explaining the layout
- gitignore: contrib/fractured-dev-extras/*.log

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-09 10:39:28 -04:00
Dawnforger 2b98ddeadd chore(scripts): add world-db-from-base.sh for clean acore_world from base
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-09 00:59:49 -05:00
Dawnforger 4c999bee3f fix(db_world): add creature_summon_groups.Comment before 2023_08_13_00
Column was added in old/8.x SQL but not in the archive chain; idempotent
ALTER matches 2023_01_31_01 so INSERT using Comment succeeds on archive-only
installs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-09 00:49:08 -05:00
Dawnforger ba1cca9521 fix(db_world): clamp VerifiedBuild for MEDIUMINT (spell_target_position)
MariaDB rejects 34149345 for VerifiedBuild when the column is MEDIUMINT
(signed max 8388607), as in old 8.x schema migrations. Replace corrupt
value with 0 in archive and base dumps.

Add data/sql/tools/clamp_verifiedbuild_mediumint.py to re-scan archive,
updates, and base INSERT/UPDATE blocks that list VerifiedBuild.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-09 00:45:38 -05:00
Dawnforger b797877558 fix(db_world): ensure attributeMask exists before 2023_07_17_01 update
The column was introduced in old/9.x SQL but not in the archive chain;
fresh archive-only installs lacked the column. Add idempotent ALTER via
INFORMATION_SCHEMA before updating spell_enchant_proc_data.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-09 00:38:29 -05:00
Dawnforger 326644bbac fix(db_world): add dist/angle to creature_formations INSERTs (strict MariaDB)
Archive updates omitted NOT NULL dist/angle under strict SQL mode. Patch all
affected archive files, pending updates, and old 9.x copies. Use 0,0 for
stacked/default formations.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-09 00:36:16 -05:00
Dawnforger 36fdf9af82 fix(db_world): include dist and angle in creature_formations INSERT
MariaDB strict mode rejects INSERTs that omit NOT NULL columns without
defaults. Align second INSERT in 2023_05_09_01.sql with the first block.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-09 00:29:42 -05:00
Dawnforger 579574acb3 chore(conf): Fractured defaults — auth 47497, realmlist hsrwow.net:8085
- authserver.conf.dist: RealmServerPort 47497; document hsrwow.net client realmlist
- base realmlist: Fractured WoW / hsrwow.net; clarify world port vs auth port
- BUILD-NATIVE.md: Fractured network defaults section
2026-05-09 00:07:31 -05:00
Dawnforger 63ab74b4fb fix(db): MariaDB version parse for 10.x-MariaDB- without 5.5.5- prefix
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-08 21:50:14 -05:00
Docker Build df7e943a74 Paragon: move module SQL to AC's data/sql/db-* layout for auto-update
AzerothCore's DBUpdater scans modules/<mod>/data/sql/db-{world,characters,auth}/
(see src/server/database/Updater/UpdateFetcher.cpp). The previous
modules/mod-paragon/sql/{world,characters}/base/ layout was non-standard
and skipped by the updater, so a fresh deploy never had Paragon tables
created automatically.

Move all five SQL files into the standard layout. Files are idempotent
(CREATE TABLE IF NOT EXISTS plus a DELETE+INSERT for the cost table)
and now apply on every dbimport / worldserver start, recorded by hash
in <db>.updates so re-runs are skipped.

Update BUILD-NATIVE.md to drop the manual mysql import section, and
document the SQL layout in the mod-paragon README.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-08 22:03:42 -04:00
Docker Build 203356aca8 Paragon: AE/TE currency, Character Advancement commit/reset, panel SQL
- mod-paragon: Paragon_Essence addon channel (PARAA), commit queue, resets,
  spell chain learn with passive child tracking, silence-window hints for
  cascade learns, trainer exemptions for pet/portal trainers
- SQL: character_paragon_panel_* tables, paragon_spell_ae_cost world data
- Core: Player Paragon class talent learn hook; Trainer skip for Paragon
  where appropriate
- Ignore local build-worldserver.log

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-08 21:43:01 -04:00
Dawnforger e2bed00b5c fix(common): OpenSSLCrypto provider API only for OpenSSL 3+ 2026-05-08 20:36:25 -05:00
Dawnforger fdc5849a69 fix(common): ARC4 OpenSSL 1.1 vs 3 API (EVP_CIPHER_fetch) 2026-05-08 20:28:46 -05:00
Dawnforger 2f8c374569 fix(db): MariaDB 10.6+ server and connector compatibility
- Parse real MariaDB version after MySQL 5.5.5 compatibility prefix for
  DatabaseIncompatibleVersion checks.
- Relax client checks when building against MariaDB C connector
  (MARIADB_VERSION_ID); keep Oracle MySQL 8.0+ rules otherwise.
- Use mysql_stmt_bind_param on MariaDB; mysql_stmt_bind_named_param only for
  MySQL 8.3+ without MariaDB headers.
- SSL: MYSQL_OPT_SSL_ENFORCE on MariaDB connector, MYSQL_OPT_SSL_MODE elsewhere.
- Track custom_script_loader.cpp so static script link succeeds; CMake
  find_package(MySQL) requires COMPONENTS lib on CMake 3.16.
2026-05-08 20:11:43 -05:00
Dawnforger 22e79a4f32 fix(core): DK ToT off-hand strikes and Titan Grip for classless
- Item: 2H weapon subclass/inventory masks for strike spells (ToT / dual 2H).
- Player: allow SPELL_EFFECT_TITAN_GRIP through skill validation; clear TG on
  talent/spec reset only for warriors.
- PlayerStorage: sync m_canTitanGrip from spellbook before inventory load.
- Spell: treat Thassarian off-hand strike spells as OFF_ATTACK when DBC omits
  SPELL_ATTR3_REQUIRES_OFF_HAND_WEAPON.
2026-05-07 23:40:40 -05:00
Docker Build c09646fdf0 Add BUILD-NATIVE.md for non-Docker compile workflow
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-08 00:08:47 -04:00
Docker Build 8e4c8f57e4 Fractured: Paragon core hooks, mod-paragon, mod-ale, Docker build cap
- Track mod-paragon and mod-ale (un-ignore modules in .gitignore).
- Ship docker-compose.override.yml with CMAKE_EXTRA_OPTIONS for LuaJIT (mod-ale).
- Dockerfile: CBUILD_PARALLEL default to limit OOM under Docker/WSL2.
- Core: CLASS_PARAGON sticky combo points (DetachComboTarget), selection rebind,
  Spell::CheckPower rune path for multi-resource Paragon.
- spell_dk_death_rune: IsClass(CLASS_DEATH_KNIGHT, CLASS_CONTEXT_ABILITY) for
  Blood of the North / Reaping / DRM on Paragon.
- Remove temporary Paragon CheckPower logging.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-08 00:03:09 -04:00
Docker Build f9f2bc5e0c Add CLASS_PARAGON enum and bump MAX_CLASSES 2026-05-06 23:44:41 -04:00
Docker Build 72dd540b67 Local snapshot for Docker build (includes mod-ale)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-06 21:18:20 -04:00