* deps: bump SD3 (a432ee19->9d80d515) + Eluna (acf5cef->c692e26) to current masters
SD3 brings the SD3_* expansion-guard shims (#97/#98); WOTLK rides the legacy
#else arm (current field names) so this builds and boots with zero source
edits. Eluna delta is MISTS-gated only. Prerequisite for the DBC alignment
campaign's Phase-4 WOTLK guard arms. Verified: clean build + boot to World
Initialization Complete, no DBC assert.
* DBC align pilot: CharStartOutfit - fix fmt width (296) + unpack RaceClassGender + ItemId->ItemID + doc-unused tail
fmt diiii...(308B, 3 phantom x) -> dbbbbiii...(77 chars/296B, matches .dbc header).
Struct: uint32 RaceClassGender -> uint8 RaceID/ClassID/SexID/OutfitID (bytes
0/1/2/3 of UNIT_FIELD_BYTES_0); int32 ItemId[24] -> ItemID[24]; DisplayItemID/
InventoryType tail documented. Consumers: Player.cpp packed compare ->
RaceID==getRace() && ClassID==getClass() && SexID==getGender() (byte-equivalent
to the old & 0x00FFFFFF); ItemId->ItemID in Player.cpp + ObjectMgrItems.cpp
(NOT the ItemPrototype proto->ItemId sites). Build clean, boot to World Init,
no DBC assert.
* DBC align: PowerDisplay - fix fmt width (15, byte tail) + id->ID power->ActualType + doc-unused
fmt nixxxx (24B) -> nixXXX (15B, matches .dbc header): GlobalStringBaseTag 'x',
Red/Green/Blue 1-byte 'X'. Struct id->ID, power->ActualType; string+RGB tail
documented. Consumer Vehicle.cpp:195 powerEntry->power -> ActualType. Build
clean, boot to World Init, no assert.
* DBC align batch A1: 17 low-ripple tables (32 struct renames + fork-local consumers)
CreatureDisplayInfoExtra, MailTemplate, QuestXPLevel, WorldMapOverlay, AreaGroup,
SpellCastTime, SpellRuneCost, RandomPropertiesPoints, TeamContributionPoints,
GtBarberShopCostBase, GtChanceToMeleeCritBase, GtChanceToSpellCritBase, TalentTab,
TotemCategory, DurabilityCosts, BankBagSlotPrices, GlyphSlot. apply_alignment +
fix_consumers (37 consumer renames/18 files, 0 shared skips). GlyphSlot.TypeFlags->
Type co-occurred with GlyphProperties.TypeFlags (A3) on 3 lines; restored the
GlyphProperties side. Build clean, boot to World Init, no assert.
* DBC align batch A2: 17 tables (91 struct renames + 99 fork-local consumer renames)
GtCombatRatings, GtChanceToMeleeCrit, GtChanceToSpellCrit, GtOCTClassCombatRatingScalar,
GtOCTRegenHP, GtRegenMPPerSpt, ItemLimitCategory, MapDifficulty, GemProperties,
StableSlotPrices, ItemExtendedCost, GameObjectDisplayInfo, VehicleSeat (46 renames),
SpellItemEnchantmentCondition, CreatureDisplayInfo, WorldMapArea, CurrencyTypes.
fix_consumers single pass, 0 shared skips. Build clean, boot to World Init, no assert.
* DBC align batch A3: 17 tables (113 struct renames + fork-local consumers, incl name->Name_lang)
Talent, GlyphProperties, PvPDifficulty, CreatureSpellData, SpellDifficulty, Emotes,
SpellShapeshiftForm, Item, CharTitles, ItemSet, SpellItemEnchantment, Faction, Map,
QuestSort, QuestFactionReward, ItemClass, BattlemasterList. fix_consumers (2 passes,
313 consumer renames; game headers ReputationMgr.h/Player.h compiled in SD3 target =
fork-local, renamed). 2 sites hand-fixed: mapEntry->name inside a multi-line DEBUG_LOG
macro (fix_consumers keys on macro line), mapEntry->MapID masked. Item.Class->ClassID
etc. correctly did NOT touch ItemPrototype proto->Class. 0 shared skips. Build clean,
boot to World Init, no assert.
* DBC align batch A4: 15 heaviest-ripple tables (110 struct renames + 266 consumer renames)
LfgDungeons, Achievement, SkillLineAbility, CinematicSequences, DurabilityQuality,
CreatureModelData, SummonProperties, ScalingStatValues, ScalingStatDistribution,
WMOAreaTable, EmotesText, DungeonEncounter, CreatureFamily, BarberShopStyle,
WorldSafeLocs. fix_consumers single pass (266 renames/43 files), 0 shared skips.
Build clean, boot to World Init, no assert.
* DBC align: ChatChannels + AchievementCriteria (manual, parser-artifact tables)
ChatChannels: reconcile missed the const-prefixed pattern[16] member -> aligned
by hand: ChannelID->ID, flags->Flags, pattern->Name_lang (16 locstring slots).
AchievementCriteria: union body left intact (per plan); only the safe scalar
heads: referredAchievement->Achievement_ID, requiredType->Type. Applied via a
temporary reconciliation.json injection + fix_consumers (49 consumer renames/7
files, type-keyed, 0 shared skips), worklist reverted after. Build clean, boot
to World Init, no assert.
* DBC align: LiquidType - load Name as string (fmt col1 x->s) + Id->ID + SpellId->SpellID
The opaque-now-typed win: LiquidType.Name (col 1) was skipped ('x' in fmt, commented
struct member). Now loaded as char* Name (fmt col1 x->s, file-width unchanged at 4;
in-memory +8 balanced by the uncommented pointer -> boot-assert holds, sizeof 20).
Id->ID, SpellId->SpellID (15 fork-local consumers). Type left as-is (col 3 name is
contested: dbd 'SoundBank' vs mangos semantic 'Type' in working water code). Build
clean, boot to World Init, no assert.
* DBC align: Spell - SpellEntry fields to build-exact 3.3.5.12340 names (234-field)
53 active renames (manaCost->ManaCost, SpellName->Name_lang, SpellFamilyName->
SpellClassSet, EffectApplyAuraName->EffectAura, SpellFamilyFlags->SpellClassMask,
Id->ID, SpellVisual->SpellVisualID, ...) from the self-validating rename-map
generator (core x dbd x schema x fmt, all 234). Name-reuse collision handled:
EffectMultipleValue->EffectAmplitude + old EffectAmplitude->EffectAuraPeriod (5
->EffectAmplitude sites pre-remapped). fmt UNCHANGED, sizeof unchanged (byte-neutral).
~1700 fork-local consumers via fix_spell_consumers (+ 2 multi-line-macro hand-fixes).
Shared submodules bumped: SD3 (Spell shim WOTLK arms + SD3_SpellVisual + 39 scripts
routed through shims) + Eluna (3 Id guards). Build clean, boot to World Init, no assert.
* feat(two-dbc): align 13 deferred-shared DBC tables to build-exact schemas
Phase 4 of the Two (WotLK 3.3.5.12340) DBC core-alignment campaign. Rename
fields in 13 tables whose consumers span the shared SD3/Eluna submodules to
their build-exact 3.3.5.12340 client names (128 field renames, byte-neutral
-- sizeof unchanged, DBCfmt.h untouched): AreaTable, AreaTrigger, ChrClasses,
ChrRaces, FactionTemplate, ItemRandomProperties, ItemRandomSuffix, SkillLine,
SpellRange, TaxiNodes, TaxiPath, TaxiPathNode, Vehicle.
Fork-local consumers renamed compiler-guided (369 sites); shared SD3/Eluna
consumers get per-expansion WOTLK guards (see submodule commits). Boot-assert
gate PASS: World Initialization Complete, no size mismatch.
Bumps SD3 + Eluna submodule pins.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(two-dbc): Phase 5 — re-enable 4 dormant DBC stub tables
Activate ItemDisplayInfo, AchievementCategory, CurrencyCategory, HolidayNames
(all previously unloaded on Two). Each fmt is binary-verified against the
3.3.5.12340 .dbc header AND the struct's stored fields:
- ItemDisplayInfo: uncomment + widen 23->25 cols ("n"+24x); the stale fmt never
modeled the trailing ItemVisual/ParticleColorID (decomp re-checked against the
25-field / 100-byte .dbc record).
- AchievementCategory (loads Achievement_Category.dbc): "ni"+18x, 20 cols.
- CurrencyCategory: "ni"+16s+x, 19 cols (struct uncommented; string cols 2-17
match Name_lang[16], col18 Name_lang_flags skipped).
- HolidayNames: "n"+17x, 18 cols (struct uncommented).
DBCFilesCount 95->99. Boot-assert PASS (sizeof==GetFormatRecordSize for all 4,
no record-size mismatch); "Initialized 99 data stores", no bad-dbc.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(two-dbc): Phase 6 — inert DBC reference map (142 unmodelled tables)
Auto-generated DBCStructure_reference.h: a build-exact inert reference struct
for each of the 142 WotLK 3.3.5.12340 client DBC tables the core does NOT load,
plus a catalogue of all 245 (103 ACTIVE / 142 DOC). Never #included; activating
a table = move its struct into DBCStructure.h + add its fmt + a DBCStorage
loader. The 2 commented-fmt phantoms (GtOCTRegenMP, ItemCondExtCosts) are
catalogued here as DOC (tagged) so they are not a silent hole. Compiles clean
(cl /Zs).
Generated by CoreAlign/tools/gen_reference.py.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix(two-dbc): align Phase-5 re-enabled table fields to build-exact names
The Phase-5 re-enable kept legacy struct field names; the final reconcile
validation flagged them. Align (byte-neutral, same types, 0 consumers):
- CurrencyCategoryEntry: Unk1 -> Flags, Name -> Name_lang
- AchievementCategoryEntry: parentCategory -> Parent
ItemDisplayInfo/HolidayNames model only ID (already build-exact). Build clean,
boot-assert PASS (99 stores). Reconcile now shows 0 residual renames except the
intentionally-deferred LiquidType.Type.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(two-dbc): align LiquidType.Type -> SoundBank (build-exact)
The last unaligned field. col3 is one uint the client/decomp/dbd/TrinityCore/
gtker (5 sources) name "SoundBank"; mangos used the legacy semantic name "Type"
(0 Water/1 Ocean/2 Magma/3 Slime). Same field, naming only. Align to the
build-exact name for campaign consistency (no legacy holdout) + WoWDBDefs/TC
cross-reference; the gameplay semantic is preserved in a struct comment. Byte-
neutral; 6 fork-local reads in GridMap.cpp updated (no shared SD3/Eluna).
Build clean, boot-assert PASS. Reconcile now shows 0 residual renames across the
entire DBC layer.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* chore(two-dbc): bump SD3 + Eluna submodule pins to review-fixed heads
- SD3 689660c -> 9c98308: cross-fork P1 fixes from Codex review of PR #99
(npcs_special CATA/MISTS `flags`; SD3_SpellVisual MISTS GetSpellVisual arm;
SD3_FactionTemplateFaction CLASSIC `Faction` arm).
- Eluna 6d8b229 -> 4e03842: rebased onto current Eluna master; WOTLK arms folded
into the existing CLASSIC/TBC ELUNA_EXPANSION == EXP_* guards (resolves the
PR #5 conflicts). Additive-beside; other cores unchanged.
mangos-two builds clean + boot-assert PASS with both bumped pins.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix(two-dbc): big-endian spell-mask swap uses renamed SpellClassMask
The MANGOS_BIGENDIAN fixup in LoadDBCStores swaps the two uint32 halves of the
64-bit spell class mask, but referenced the pre-alignment member name
spell->SpellFamilyFlags. Phase 3 renamed it to SpellClassMask (ClassFamilyMask,
build-exact), so the big-endian target was left unbuildable. The block is
preprocessed out on little-endian, so the compiler-guided consumer pass never
saw it. Name-only fix -- SpellClassMask's first member is still the uint64, so
&spell->SpellClassMask and the half-swap semantics are unchanged. Caught by
Codex review of PR #239.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* chore(two-dbc): re-point SD3 + Eluna submodule pins to merged masters
SD3 #99 and Eluna #5 were squash-merged, minting new master commits. Move the
submodule pins off the (now-merged) PR-branch commits onto the squashed masters
so a recursive clone resolves against master:
- SD3 9c98308 -> fb3430a (ScriptDev3 master, #99 squashed)
- Eluna 4e03842 -> 18ff8fb (Eluna master, #5 squashed)
Content byte-identical to the tested commits; Two rebuilds clean + boot-assert PASS.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
||
|---|---|---|
| .github/workflows | ||
| apps | ||
| cmake | ||
| contrib | ||
| dep@b05d623751 | ||
| doc | ||
| dockercontainer | ||
| docs | ||
| linux | ||
| src | ||
| win@7bb825a9a8 | ||
| .dockerignore | ||
| .gitattributes | ||
| .gitignore | ||
| .gitmodules | ||
| CLAUDE.md | ||
| CMakeLists.txt | ||
| Doxyfile.in | ||
| LICENSE | ||
| README.md | ||
Build Status:
Linux/MAC:
Windows:
Repository Status:
MangosTwo - Wrath of the Lich King WoW server
Mangos is an open source project written in C++. It's fast, runs on multiple platforms and stores game data in MySQL or MariaDB. It also has optional support for SOAP.
If you liked the third incarnation of World of Warcraft and still want to play it, this is the branch for you. We provide an authentication server where you can manage your users, and a world server which serves game content just like the original did back then.
It aims to be 100% compatible with the final version of WotLK World of Warcraft, namely patch 3.3.5a.
On top of that each update is automatically built by Travis CI (Linux/MAC) and AppVeyor (Windows) as you can see by the images in the heading above! We do love green builds, and working things.
Requirements
The server supports a wide range of operating systems, and various compiler platforms. In order to do that, we use various free cross-platform libraries and use CMake (v3.12+) to provide a cross-platform build system which adapts to your chosen operating system and compiler.
Operating systems
Currently we support running the server on the following operating systems:
- Windows, 32 bit and 64 bit. Windows Server 2008 (or newer) or Windows 8 (or newer) is recommended.
- Linux, 32 bit and 64 bit. Debian 7 and Ubuntu 12.04 LTS are recommended. Other distributions with similar package versions will work, too.
- BSD, 32 bit and 64 bit. FreeBSD, NetBSD, OpenBSD are recommended.
Of course, newer versions should work, too. In the case of Windows, matching server versions will work, too.
Compilers
Building the server is currently possible with these compilers:
-
Microsoft Visual Studio 32 bit and 64 bit. All editions of Visual Studio from 2015 upwards are officially supported (although support for 2015 and 2017 are end of life.)
-
Clang, 32 bit and 64 bit. The Clang compiler can be used on any supported operating system.
Dependencies
The server stands on the shoulders of several well-known Open Source libraries plus a few awesome, but less known libraries to prevent us from inventing the wheel again.
Please note that Linux and Mac OS X users should install packages using their systems package management instead of source packages.
- Git / Github for Windows: This version control software allows you to get the source files in the first place.
- MySQL / MariaDB: These databases are used to store content and user data.
- ACE: aka Adaptive Communication Environment, provides us with a solid cross-platform framework for abstracting operating system specific details.
- Recast: In order to create navigation data from the client's map files, Recast is used to do the dirty work. It provides functions for rendering, pathing, etc.
- G3D: This engine provides the basic framework for handling 3D data and is used to handle basic map data.
- Stormlib: Provides an abstraction layer for reading from the client's data files.
- Zlib/Zlib for Windows provides compression algorithms used in both MPQ archive handling and the client/server protocol.
- Bzip2/Bzip2 for Windows provides compression algorithms used in MPQ archives.
- OpenSSL/OpenSSL for Windows provides encryption algorithms used when authenticating clients.
ACE, Recast, G3D, Stormlib, Zlib and Bzip2 are included in the standard distribution as we rely on specific versions.
Optional dependencies
- Doxygen: If you want to export HTML or PDF formatted documentation for the Mangos API, you should install this.
We have a small, but extremely friendly and helpful community managed by MadMax and Antz.
Our discord/forum motto is:
'Be nice or Be somewhere else'
Any trolling or unpleasantness is swiftly dealt with !!
Official Website
We welcome anyone who is interested in enjoying older versions of wow or contributing and helping out !
Discord Server
We also have a Discord server where many of us hang out and discuss Mangos related stuff.
Main Wiki
The repository of as much information as we can pack in. Details regarding the Database, file type definitions, packet definitons etc.
Bug / Issue Tracker
Found an issue or something which doesn't seem right, please log it in the relevant section of the Bug Tracker.
Installation Guides
Installation instructions for various operation systems can be found here.
License
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
The full license is included in the file LICENSE.
We have all put in hundreds of hours of time for free to make the server what it
is today.
All we ask is that if you modify the code and make improvements, please have
the decency to feed those changes back to us.
In addition, as a special exception, permission is granted to link the code of Mangos with the OpenSSL project's OpenSSL library (or with modified versions of it that use the same license as the OpenSSL library), and distribute the linked executables. You must obey the GNU General Public License in all respects for all of the code used other than OpenSSL.
Acknowledgements
World of Warcraft, and all related art, images, and lore are copyright Blizzard Entertainment, Inc.
