Server-side batch following v0.7.18, all gated to Paragon (or applied server-wide where the design discussion called for it): * Cross-class stance / form / presence / aspect exclusivity (server-wide). New `IsFracturedExclusiveStanceSpell()` (`Unit.cpp`/`Unit.h`) returns true for the union of warrior stances + druid forms (combat AND utility: Travel, Aquatic, Flight, Swift Flight) + Ghost Wolf + base Stealth + Shadowform + Metamorphosis + DK Presences + Hunter Aspects (combat AND utility: Cheetah, Pack). `Aura::CanStackWith` (`SpellAuras.cpp`) refuses to stack two spells from this set, which routes through `_RemoveNoStackAurasDueToAura` to drop the older aura -- the same mechanism Battle Elixirs / Curses use. Plugs the stock-AC gap where DK Presences and Hunter Aspects (regular auras, just rendered in the stance bar) coexisted with engine-shapeshifts. * Stances / Presences / Aspects cancellable like Druid forms. `SpellInfoCorrections.cpp` now zeroes `CategoryEntry` on warrior stances, DK presences, and every rank of every hunter aspect (moves them out of SpellCategory 47 "Combat States", which gates the client's right-click / `/cancelaura` path), AND clears `AttributesEx6` bit `0x1000` on warrior stances + DK presences (a second client-UI gate surfaced via DBC diff -- aspects don't have it set). Mirrored client- side by `_patch_spell_dbc_presences_cancelable.py`. Aspects / presences do NOT swap action bars (those are owned by `SPELL_AURA_MOD_SHAPESHIFT`, not by Category / AttrEx6) -- only warrior stances and druid forms keep the bar swap, matching the design requirement that presences/aspects not change the player's action bar. * Hunter ammo soft-fail (server-wide). Replaced both `SPELL_FAILED_NO_AMMO` returns in `Spell::CheckCast` with `break;` so ranged + thrown abilities cast through with zero ammo; `_ApplyAmmoBonuses` continues to gate the actual arrow/bullet DPS bonus on a non-empty stack, so equipping ammo still pays off. New programmatic `ApplySpellFix`-style block in `SpellInfoCorrections.cpp` iterates every Hunter-family spell whose `EquippedItemClass == ITEM_CLASS_WEAPON` and `EquippedItemSubClassMask` includes Bow/Gun/Crossbow and sets `EquippedItemClass = -1` (skipping a small DENYLIST of Quiver / Ammo Pouch passive haste auras + Aynasha's Bow + Legendary Bow Haste -- those are item-equip-driven and must keep gating on the ranged weapon being equipped). Server log: ">> Fractured: dropped EquippedItemClass on 196 hunter shot abilities". Mirrored client-side by the new `_patch_spell_dbc_hunter_ammo.py` so the 3.3.5a client preflight stops blocking the cast packet with "Ammo needs to be in the paper doll ammo slot before it can be fired." `Spell::TakeAmmo` no longer clears `PLAYER_AMMO_ID` to 0 when the bag empties (defense in depth so a half- deployed pair degrades to soft-fail rather than hard-reject). Adds `#include "ItemTemplate.h"` for `ITEM_SUBCLASS_WEAPON_*`. * Feral Cat scaling (server-wide, cat-only). `StatSystem.cpp` `UpdateAttackPowerAndDamage` FORM_CAT branch doubles the AGI coefficient (1.0 -> 2.0). `SpellAuraEffects.cpp` Master Shapeshifter FORM_CAT branch doubles the talent's bp before triggering 48420 (R1: 2% -> 4% crit, R2: 4% -> 8%). FORM_BEAR / FORM_DIREBEAR / FORM_MOONKIN / FORM_TREE branches all left untouched so bear stays "already fine" per the resident Feral expert. Client tooltip drift on Cat Form (768) + Master Shapeshifter (48411 / 48412) + Pestilence (50842) handled by `_patch_spell_dbc_feral_tooltips.py`. * Pestilence spreads / refreshes Devouring Plague for Paragon casters. `spell_dk.cpp` `spell_dk_pestilence::HandleScriptEffect` now also spreads (and Glyph-of-Disease refreshes) Priest Devouring Plague when `IsParagonWildcardCaller(caster)`. Uses `GetAuraOfRankedSpell(2944)` so the spread copy carries the caster's actual rank. Stock DKs cannot cast Devouring Plague at all, so this branch is a no-op for them. * Dancing Rune Weapon: Paragon copies melee, not casts. `spell_dk.cpp` `spell_dk_dancing_rune_weapon::CheckProc` for Paragon callers requires `eventInfo.GetDamageInfo()` and `spellInfo->DmgClass == SPELL_DAMAGE_CLASS_MELEE`, so the ghostly weapon now copies cross-class melee strikes (Hamstring, Sinister Strike, Heart Strike, Frost Strike, ...) and auto-attacks instead of re-casting the DK's nukes. Stock DK gating below is untouched. * Maelstrom Weapon: drop Arcane Blast from the allowlist. `SpellInfo.cpp` and `spell_shaman.cpp` allowlists now match Fireball and Frostbolt only -- Arcane Blast stacked with its own self-buff was too potent. * `BALANCE-TODO.md` added under `contrib/fractured-dev-extras/` to capture the resident Feral expert's recommendation, the levers we considered, and the cat-only Master-Shapeshifter / AGI-doubling resolution we shipped, plus the next-lever knobs if field reports still flag cat as weak. DBC patcher pipeline (lives outside the repo in `fractured-tooling/`) documented run order: runes -> reagents -> stances -> presences_cancelable -> hunter_ammo -> feral_tooltips -> _make_paragon_dbc_patch. No SQL migrations. Co-authored-by: Cursor <cursoragent@cursor.com>
AzerothCore
Build Status
Introduction
AzerothCore is an open-source game server application and framework designed for hosting massively multiplayer online role-playing games (MMORPGs). It is based on the popular MMORPG World of Warcraft (WoW) and seeks to recreate the gameplay experience of the original game from patch 3.3.5a.
The original code is based on MaNGOS, TrinityCore, and SunwellCore and has since then had extensive development to improve stability, in-game mechanics, and modularity to the game. AC has also grown into a community-driven project with a significant number of contributors and developers. It is written in C++ and provides a solid foundation for creating private servers that mimic the mechanics and behavior of the official WoW servers.
Philosophy
Our main goal is to create a playable game server, offering a fully working in-game experience.
Here are the main points we focus on:
-
Stability
- We make sure all changes pass the CIs before being merged into the master branch.
-
Blizzlike content
- We strive to make all in-game content to be blizzlike. Therefore we have a high standard for fixes being made.
-
Customization
- It is easy to customize your experience using modules.
-
Community driven
- AzerothCore has an active community of developers, contributors, and users who collaborate, share knowledge, and provide support through forums, Discord channels, and other communication platforms.
Modules
AzerothCore is designed to be highly modular, allowing developers to extend and customize the game to suit their preferences or create unique gameplay experiences. This flexibility enables the addition of custom features, content, and modifications.
We have a lot of modules already made by the community, many of which can be found in the Module Catalogue.
Installation
Detailed installation instructions are available here.
Contributing
AzerothCore can also serve as a learning resource for aspiring developers who want to understand how WoW servers work, how MMORPGs are structured, how game server emulators are created, or to improve their C++ and SQL knowledge.
If you want to contribute to the project, you will find a lot of resources that will guide you in our wiki.
We also recommend you read our Contributor Covenant Code of Conduct.
Feel free to join our Discord server.
Click on the "⭐ Star" button to help us gain more visibility on Github!
Authors & Contributors
The project was born in 2016 based on SunwellCore. Unfortunately, SunwellCore was published without any git history, so on git there are no credits for all the contributors before 2016.
You can check the authors file for more details.
Important Links
- Doxygen documentation
- Website
- AzerothCore catalogue (modules, tools, etc...)
- Our Discord server
- Our wiki
- Our forum
- Our Facebook page
- Our LinkedIn page
License
- The AzerothCore source code is released under the GNU GPL v2
It's important to note that AzerothCore is not an official Blizzard Entertainment product, and it is not affiliated with or endorsed by World of Warcraft or Blizzard Entertainment. AzerothCore does not in any case sponsor nor support illegal public servers. If you use this project to run an illegal public server and not for testing and learning it is your own personal choice.
Special thanks
JetBrains is providing free open-source licenses to the AzerothCore developers.