Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
106 commits
Select commit Hold shift + click to select a range
b8a08dc
fix(CI/Windows): installer script - update OpenSSL version to 3.6.1 (…
sudlud Jan 31, 2026
2a12035
fix(DB/Creature): Set Correct Faction for Spotted Hippogryph (23772) …
Gultask Jan 31, 2026
f5ee8de
fix(DB/Loot): Adjust Jotunheim Cage Key Chances (#24564)
Gultask Jan 31, 2026
f279dd1
chore(DB): import pending files
github-actions[bot] Jan 31, 2026
324d014
fix(Scripts/EoE): fix Malygos reseting at p3 and other improvements (…
Nyeriah Jan 31, 2026
4864b80
fix(Scripts/Naxx): Thaddius Ball Lightning should check all players i…
xDevICCI Jan 31, 2026
a151c9a
fix(DB/game_event): Brewfest Building (Ironforge) (#24527)
sudlud Jan 31, 2026
8161ef9
chore(DB): import pending files
github-actions[bot] Jan 31, 2026
2935ec6
fix(DB/game_event): implement 'Brewfest Building (Orgrimmar)' (#24517)
sudlud Jan 31, 2026
621b2d2
chore(DB): import pending files
github-actions[bot] Jan 31, 2026
154a4a0
fix(CI/Codestyle): Ignore backtick checks in comments (#24573)
Gultask Jan 31, 2026
f27a1e2
fix(Scripts/Naxxramas): Sapphiron flight phase animation (#24535)
sogladev Feb 1, 2026
6dfe653
fix(Scripts/HyjalSummit): Prevent Hyjal Bosses from talking when talk…
Gultask Feb 1, 2026
364e165
fix(DB/SmartAI): Improve targeting for Spectral Stable Hand (#24574)
Gultask Feb 1, 2026
7621cef
chore(DB): import pending files
github-actions[bot] Feb 1, 2026
ad80480
fix(DB/Creature): Set Wyrmrest Protector emote to 0. (#24579)
Rorschach91 Feb 1, 2026
6bbcb22
chore(DB): import pending files
github-actions[bot] Feb 1, 2026
396a6be
fix(DB/SAI): fix talk timer for 'Brewfest Setup Crew' (#24583)
sudlud Feb 1, 2026
b6f1169
chore(DB): import pending files
github-actions[bot] Feb 1, 2026
261afd8
fix(DB/Loot): Rewrite TBC Raid BoE Loot and Recipes (#24586)
Gultask Feb 2, 2026
9bf77e8
chore(DB): import pending files
github-actions[bot] Feb 2, 2026
3f4c5d0
fix(DB/Gameobject): Sniffed Values for 'Broken Cart' spawns (#24587)
sudlud Feb 2, 2026
5444535
chore(DB): import pending files
github-actions[bot] Feb 2, 2026
3d9e58b
chore(Core/Handlers): Clear debug leftovers (#24603)
Nyeriah Feb 3, 2026
14ebaae
fix(Core/GameObject): Use quaternion rotation directly instead of ori…
blinkysc Feb 3, 2026
871163b
chore(DB): import pending files
github-actions[bot] Feb 3, 2026
0efc2b3
fix(Core/Unit): Ignore Armor Calculation for spells with SPELL_ATTR4_…
Gultask Feb 3, 2026
5e85552
fix(DB/SAI): Astromancer Lord should use Domination like Star Scryer …
Gultask Feb 4, 2026
606a40e
fix(DB/SAI): Implement Unstable Shroom Script (#24601)
Gultask Feb 4, 2026
37e5fc7
chore(DB): import pending files
github-actions[bot] Feb 4, 2026
1a05906
fix(DB/Creature): Correct model probabilities for various trigger cre…
heyitsbench Feb 4, 2026
924c1f3
fix(DB/Loot): Removes "Warsong Report" and "Battered Junkbox" from "B…
TheSCREWEDSoftware Feb 4, 2026
37019a2
chore(DB): import pending files
github-actions[bot] Feb 4, 2026
4f5a63f
fix(Core/Guild): Fix rare guild bank bug (#24614)
blinkysc Feb 4, 2026
193da38
fix(Commands): .go creature and .appear support transports (#23969)
blinkysc Feb 6, 2026
9f5f3d1
fix(DB/Creature): Update gossip menus and options for select trainers…
sogladev Feb 6, 2026
58d6fed
chore(DB): import pending files
github-actions[bot] Feb 6, 2026
d4124b1
docs: init CLAUDE.md (#24630)
FrancescoBorzi Feb 6, 2026
653136e
fix(Scripts/SunkenTemple): sniffed values for 'Idol of Hakkar' spawn …
sudlud Feb 6, 2026
9b63cde
fix(DB/Gameobject): Recalculate quaternion rotation values from orien…
blinkysc Feb 6, 2026
f21a447
chore(DB): import pending files
github-actions[bot] Feb 6, 2026
a924aa6
fix(Core/Movement): Exclude Players and Player-controlled units from …
Gultask Feb 6, 2026
64bcc4d
fix(DB/Creature): Adjust Field Values to Creature Flame Wave II (2222…
Gultask Feb 6, 2026
b521a39
fix(Scripts/StormPeaks): Rewrite Time-Lost Proto Drake (#24497)
Gultask Feb 6, 2026
c1cbc8b
fix(Scripts/MagistersTerrace): Prevent Splitting Delrissa and Helpers…
Gultask Feb 6, 2026
c74e156
fix(Core/SmartAI): Ranged Creatures should have relaxed stances while…
Gultask Feb 6, 2026
8249ca5
fix(Scripts/TempestKeep): Add Teleport Position to Astromancer Solari…
Gultask Feb 6, 2026
f87752d
fix(Core/SmartScript): Change AREA_CASTING to align with VICTIM_CASTI…
Gultask Feb 6, 2026
ebe1123
fix(Core/Pet): Allow Pets to attack players from any angle (#24580)
Gultask Feb 6, 2026
5949d54
chore(DB): import pending files
github-actions[bot] Feb 6, 2026
cda6e61
fix(Core/Threat): Melee creatures should only target units they can a…
Gultask Feb 6, 2026
c09ee1d
fix(Core/Movement): Prevent Follow predictions from clipping through …
Gultask Feb 6, 2026
4e81f59
feat(Core/Config): Add configuration options for point multipliers fo…
heyitsbench Feb 6, 2026
dfc5ebb
fix(Core/Handlers): Handle vehicle and possess spells in CMSG_REQUEST…
blinkysc Feb 6, 2026
fe71aca
fix(DB/SAI): Rewrite Terokk's Downfall with Sniffed data (#24627)
Gultask Feb 6, 2026
57090a5
fix(Scripts/SSC): Rewrite Coilfang Water Handling (#24559)
Gultask Feb 6, 2026
29be348
chore(DB): import pending files
github-actions[bot] Feb 6, 2026
896f762
fix(Scripts/Spells): some LW drums cannot affect targets lvl80 or hig…
sogladev Feb 6, 2026
008a619
chore(DB): import pending files
github-actions[bot] Feb 6, 2026
4bda3ca
refactor(Scripts/ObsidianSanctum): Modernize script files (#24632)
Nyeriah Feb 7, 2026
3b8ac39
fix(Core/Scripts): apply safety improvements (#24635)
FrancescoBorzi Feb 7, 2026
28f9194
chore: Update ClaudeAI SQL updates directory instructions (#24640)
Nyeriah Feb 7, 2026
50aa26b
fix(Core/SmartScript): Start Closest Waypoint can handle both wp tabl…
Rorschach91 Feb 7, 2026
afe92f5
chore(DB): import pending files
github-actions[bot] Feb 7, 2026
e5a3f5a
fix(DB/Creature): Set Correct Speed to Illidan DB Target (23070) (#24…
Gultask Feb 8, 2026
e0b5079
chore(DB): import pending files
github-actions[bot] Feb 8, 2026
2b563fc
feat(Scripts/Commands): Implement npc/gameobject load commands (#24644)
Nyeriah Feb 8, 2026
c883eb5
chore(DB): import pending files
github-actions[bot] Feb 8, 2026
7571ada
fix(Script/Quest): Kodo Roundup (#24241)
Kitzunu Feb 8, 2026
3ffbbe9
chore(DB): import pending files
github-actions[bot] Feb 8, 2026
d71c749
fix(DB/Creature): Adds and adjusts money loot for various NPCs (#24643)
Apathyxia Feb 9, 2026
d914d61
chore(DB): import pending files
github-actions[bot] Feb 9, 2026
54d1454
fix(Core/GameObject): Handle zero quaternion rotation for dynamically…
blinkysc Feb 10, 2026
5e75f7a
chore(DB): import pending files
github-actions[bot] Feb 10, 2026
5b278c7
fix(Scripts/Naxxramas): Mr. Bigglesworth and Critter Bites interactio…
sogladev Feb 10, 2026
1ec6834
fix(Scripts/World): Lower engineering specialization swap requirement…
sogladev Feb 10, 2026
1c5c28b
fix(DB/Spells): add stack rule for love is in the air perfumes/cologn…
Tereneckla Feb 10, 2026
4c1e559
refactor(Scripts/EoE): Modernize scripts (#24634)
Nyeriah Feb 10, 2026
8199d59
chore(DB): import pending files
github-actions[bot] Feb 10, 2026
125f6cb
fix(Scripts/Naxxramas): Thaddius casting Ball Lightning shouldn't pr……
Nyeriah Feb 10, 2026
fb2a3b2
fix(DB/Vendor): Updates vendor lists for reagents and poisons (#24594)
sogladev Feb 10, 2026
22cf313
chore(DB): import pending files
github-actions[bot] Feb 10, 2026
f0e5f32
fix(Core/Battlegrounds): remove unused ApplyPhaseMask from Arathi Bas…
blinkysc Feb 10, 2026
c73cf6b
feat(Core/Handlers): Make use of a few billing plan flags for authent…
heyitsbench Feb 10, 2026
a890f55
fix(Core/Creature): implement SUMMON_PROP_FLAG_USE_SUMMONER_FACTION (…
sogladev Feb 10, 2026
4822314
fix(DB/Creature): Adjust unit flags for Lightwell creature. (#24678)
heyitsbench Feb 11, 2026
f9de106
chore(DB): import pending files
github-actions[bot] Feb 11, 2026
b2d212c
fix(Core/Spells): Lady Blaumeux and Sir Zeliek's cast uninterruptable…
sogladev Feb 11, 2026
d597e45
fix(DB/Creature): Improve Stockades Entrance (#24676)
Gultask Feb 11, 2026
fb1d6d9
chore(DB): import pending files
github-actions[bot] Feb 11, 2026
2520bed
fix(DB/Creature): Reduce General Lightsbane (29851) default DamageMod…
Gultask Feb 12, 2026
fe1296c
chore(DB): import pending files
github-actions[bot] Feb 12, 2026
eeeaa08
fix(DB/SAI): Rewrite Last Rites in SmartAI (#24680)
Gultask Feb 12, 2026
4bce87e
chore(DB): import pending files
github-actions[bot] Feb 12, 2026
504f5a1
fix(CI): correct unit_tests binary path in linux-build action (#24697)
blinkysc Feb 13, 2026
7fc5774
fix(Scripts/Commands): Re-spawn pool quests after reload quest starte…
blinkysc Feb 13, 2026
6bb7640
fix(DB/Spell): Set Avenging Fury range effect to 2 yards. (#24683)
Rorschach91 Feb 13, 2026
a262273
fix(Scripts/Naxxramas): Fix Undying/Immortal credit (#24694)
Nyeriah Feb 13, 2026
6ebc6c9
chore(DB): import pending files
github-actions[bot] Feb 13, 2026
0e50b3d
fix(Core/Movement): Don't take height into consideration for follow t…
Gultask Feb 13, 2026
36a1f31
fix(Core/ObjectMgr): update npc_vendor.maxcount to u32 from u8 (#24685)
sogladev Feb 13, 2026
8cbc8b0
chore(DB): import pending files
github-actions[bot] Feb 13, 2026
2473f35
feat(Scripts/Commands): Show boss name in instance boss state (#24698)
Nyeriah Feb 13, 2026
854a53c
fix(DB/Quest): "Speak with Ruga" missing quest starters (#24677)
BJones132 Feb 13, 2026
64448d5
chore(DB): import pending files
github-actions[bot] Feb 13, 2026
c251b46
chore: Update SQL update guidelines in CLAUDE.md (#24700)
Nyeriah Feb 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/actions/linux-build/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -213,8 +213,8 @@ runs:
- name: Run unit tests
shell: bash
run: |
if [[ -f build/obj/src/test/unit_tests ]]; then
build/obj/src/test/unit_tests
if [[ -f build/src/test/unit_tests ]]; then
build/src/test/unit_tests
else
exit 0
fi
Expand Down
124 changes: 124 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Project Overview

AzerothCore is an open-source MMORPG server emulator for World of Warcraft patch 3.3.5a (Wrath of the Lich King). It's a C++ project built with CMake, using MySQL for data storage. Licensed under GNU GPL v2.

## Build Commands

### Configure and build (out-of-source build required)

```bash
# Create build directory and configure
mkdir -p build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/azeroth-server -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DSCRIPTS=static -DMODULES=static

# Build (use appropriate core count)
make -j$(nproc)
make install
```

### Key CMake options

- `SCRIPTS`: none, static, dynamic, minimal-static, minimal-dynamic (default: static)
- `MODULES`: none, static, dynamic (default: static)
- `APPS_BUILD`: none, all, auth-only, world-only (default: all)
- `TOOLS_BUILD`: none, all, db-only, maps-only (default: none)
- `BUILD_TESTING`: Enable unit tests (default: OFF)
- `USE_COREPCH` / `USE_SCRIPTPCH`: Precompiled headers (default: ON)

### Unit tests

```bash
# Configure with testing enabled
cmake .. -DBUILD_TESTING=ON
make -j$(nproc)

# Run tests
./src/test/unit_tests
# or
ctest
```

Tests use Google Test and live in `src/test/`. The test binary links against the `game` library.

## Architecture

### Two server executables
- **authserver** (`src/server/apps/authserver/`): Handles authentication and realm selection (port 3724)
- **worldserver** (`src/server/apps/worldserver/`): Main game server handling all gameplay (port 8085)

### Source layout (`src/`)

- **`src/common/`** - Shared libraries: networking (Asio), cryptography, configuration, logging, threading, collision detection, utilities
- **`src/server/game/`** - Core game logic (~52 subsystems), the heart of the worldserver
- **`src/server/scripts/`** - Content scripts (bosses, spells, commands, instances)
- **`src/server/database/`** - Database abstraction layer and schema updater
- **`src/server/shared/`** - Code shared between auth and world servers (packets, network, realm definitions)
- **`src/test/`** - Unit tests (Google Test)

### Key game subsystems (`src/server/game/`)

- **Entities/** - Core game objects: `Player`, `Creature`, `Unit`, `Item`, `GameObject`
- **Spells/** - Spell mechanics, aura system, spell effects
- **Maps/** - Map management, grid system, instancing
- **Handlers/** - Client packet handlers (one file per system: `MovementHandler.cpp`, `SpellHandler.cpp`, etc.). These are methods on `WorldSession`
- **AI/** - Creature AI framework
- **Scripting/** - Script system with typed base classes (`ScriptObject` subclasses: `CreatureScript`, `SpellScript`, `InstanceMapScript`, `GameObjectScript`, `CommandScript`, etc.)
- **Server/** - `WorldSession` (per-player connection), `World` (global state), opcode definitions

### Scripting system

Scripts follow a registration pattern:
1. Define a class inheriting from `SpellScript`, `CreatureScript`, etc.
2. Implement an `AddSC_*()` function that calls `RegisterSpellScript(ClassName)` (or similar)
3. The `AddSC_*()` is declared and called from the regional `*_script_loader.cpp`
4. Script loaders per region: `spells_script_loader.cpp`, `eastern_kingdoms_script_loader.cpp`, `northrend_script_loader.cpp`, etc.
5. Spell script files are organized by class: `spell_dk.cpp`, `spell_mage.cpp`, `spell_generic.cpp`, etc.

### Three databases
- **acore_auth** - Accounts, realm list, bans (`data/sql/base/db_auth/`)
- **acore_characters** - Character data, inventories, progress (`data/sql/base/db_characters/`)
- **acore_world** - Game content: creatures, items, quests, spells, loot (`data/sql/base/db_world/`)

- SQL updates go in `data/sql/updates/pending_*` with separate subdirectories per database until pull request is merged. Pending SQL files are assigned random names.
- SQL updates go in `data/sql/updates/` with separate subdirectories per database after their pull request is merged.
- SQL files outside the `data/sql/updates/pending_*` folders should never be updated.

### Module system

External modules are loaded from the `modules/` directory. Each module is a subdirectory with its own `CMakeLists.txt`. Disable specific modules with `-DDISABLED_AC_MODULES="mod1;mod2"`. Module skeleton: https://github.com/azerothcore/skeleton-module/

### Dependencies

Bundled in `deps/`: boost, MySQL client, OpenSSL, zlib, recastnavigation (pathfinding), g3dlite (geometry), fmt, argon2, jemalloc, and others.

## Commit Message Format

Uses Conventional Commits:
```
Type(Scope/Subscope): Short description (max 50 chars)
```

- **Types**: feat, fix, refactor, style, docs, test, chore
- **Scopes**: Core (C++ changes), DB (SQL changes)
- **Examples**: `fix(Core/Spells): Fix damage calculation for Fireball`, `fix(DB/SAI): Missing spell to NPC Hogger`

## Code Style

- 4-space indentation for C++ (no tabs)
- 2-space indentation for JSON, YAML, shell scripts
- UTF-8 encoding, LF line endings
- Max 80 character line length
- No braces around single-line statements
- Use {} to parse variables into output instead of %u etc.
- CI enforces code style checks and compiles with `-Werror`

## PR Requirements

- AI tool usage must be disclosed in PRs
- In-game testing expected
- Changes to generic code require regression testing of related systems
6 changes: 4 additions & 2 deletions apps/codestyle/codestyle-sql.py
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ def insert_delete_safety_check(file: io, file_path: str) -> None:

# Parse all the file
for line_number, line in enumerate(file, start = 1):
if line.startswith("--"):
if line.strip().startswith("--"):
continue
if "INSERT" in line and "DELETE" not in previous_line:
print(f"❌ No DELETE keyword found before the INSERT in {file_path} at line {line_number}\nIf this error is intended, please notify a maintainer")
Expand Down Expand Up @@ -323,11 +323,13 @@ def backtick_check(file: io, file_path: str) -> None:

for line_number, line in enumerate(file, start=1):
# Ignore comments
if line.startswith('--'):
if line.strip().startswith('--'):
continue

# Sanitize single- and doublequotes to prevent false positives
sanitized_line = quote_pattern.sub('', line)
# Strip inline comments (safe to do after removing quoted strings)
sanitized_line = re.sub(r'--.*$', '', sanitized_line)
matches = pattern.findall(sanitized_line)

for clause, content in matches:
Expand Down
2 changes: 1 addition & 1 deletion apps/installer/includes/os_configs/windows.sh
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,6 @@ fi

choco install -y --skip-checksums "${INSTALL_ARGS[@]}" cmake.install -y --installargs 'ADD_CMAKE_TO_PATH=System'
choco install -y --skip-checksums "${INSTALL_ARGS[@]}" visualstudio2022-workload-nativedesktop
choco install -y --skip-checksums "${INSTALL_ARGS[@]}" openssl --force --version=3.5.4
choco install -y --skip-checksums "${INSTALL_ARGS[@]}" openssl --force --version=3.6.1
choco install -y --skip-checksums "${INSTALL_ARGS[@]}" boost-msvc-14.3 --force --version=1.87.0
choco install -y --skip-checksums "${INSTALL_ARGS[@]}" mysql --force --version=8.4.6
3 changes: 3 additions & 0 deletions data/sql/updates/db_world/2026_01_31_00.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
-- DB update 2026_01_30_01 -> 2026_01_31_00
--
UPDATE `creature_loot_template` SET `Chance` = 40 WHERE `Item` = 42422 AND `Entry` IN (29880, 30037, 30243, 30250, 30632, 30725);
3 changes: 3 additions & 0 deletions data/sql/updates/db_world/2026_01_31_01.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
-- DB update 2026_01_31_00 -> 2026_01_31_01
--
UPDATE `creature_template` SET `faction` = 634 WHERE (`entry` IN (23772, 29479));
Loading
Loading