155 Commits

Author SHA1 Message Date
bash
e054ef3249 Squashed playerbot custom changes 2026-01-06 16:32:49 +01:00
github-actions[bot]
65c79c90f1 chore(DB): import pending files
Referenced commit(s): 6383cf3ee8
2026-01-06 15:23:59 +00:00
Gultask
6383cf3ee8 fix(DB/SAI): Restrict Subjugated Iskalder to only exist within quest areas (#24334) 2026-01-06 12:22:53 -03:00
calm
e3e42fe58c fix(Core/ObjectMgr): Remove deprecated stat types warnings from items 13113 and 34967 (#24331) 2026-01-06 15:19:14 +01:00
github-actions[bot]
5feb14218e chore(DB): import pending files
Referenced commit(s): 2568b98c14
2026-01-05 23:16:51 +00:00
Gultask
8f9fdda29d fix(DB/Spell): Add fallback in case of broken quest order for Dun Niffelem (#24327) 2026-01-05 20:16:09 -03:00
Gultask
2568b98c14 fix(DB/Gameobject): Move flying ore node to the ground in Storm Peaks (#24328)
Co-authored-by: sudlud <sudlud@users.noreply.github.com>
2026-01-05 20:15:46 -03:00
Dan
56bb4498cb fix(Scripts/Naxxramas): Gothik - remove redundant call for help on minions so ghosts don't chain-aggro (#24300) 2026-01-05 17:58:11 +01:00
Gultask
e38f6822a2 fix(Scripts/Nexus): Don't summon a Chaos Rift immediately after Anomalus reaches <51% HP (#24308) 2026-01-05 10:47:55 -03:00
github-actions[bot]
523b54616d chore(DB): import pending files
Referenced commit(s): 3993c02e13
2026-01-05 01:40:36 +00:00
Ryan Turner
0deb322706 fix(DB/Conditions): "Everfrost" related quest and their items corrected (#24320)
Co-authored-by: FlyingArowana <TheSCREWEDSoftware@users.noreply.github.com>
2026-01-04 22:40:08 -03:00
Ryan Turner
3993c02e13 fix(DB/Quest): "A Score to Settle" now requires "Report to Anselm" to be completed (#24318)
Co-authored-by: FlyingArowana <TheSCREWEDSoftware@users.noreply.github.com>
2026-01-04 22:39:31 -03:00
Gultask
f311d8aad4 fix(DB/Loot): Adjust Citadel Watcher Loot Table (#24325) 2026-01-04 22:39:03 -03:00
github-actions[bot]
204c61b124 chore(DB): import pending files
Referenced commit(s): 2e7845f429
2026-01-04 18:15:21 +00:00
Andrew
2e7845f429 fix(Scripts/AzjolNerub): Call next watcher when a watcher pack dies (#23799) 2026-01-04 15:14:10 -03:00
github-actions[bot]
8b7556a989 chore(DB): import pending files
Referenced commit(s): f0c05421ef
2026-01-04 06:09:58 +00:00
Kitzunu
f0c05421ef chore(DB): Archive 2024 files (#24250) 2026-01-04 07:08:52 +01:00
Dan
0e6c49a63d fix(Scripts/Naxxramas): fix issues with safety dance and gate opening on dying (#24274) 2026-01-03 14:13:36 -03:00
github-actions[bot]
724d35e3f2 chore(DB): import pending files
Referenced commit(s): 45a0fd6db4
2026-01-03 15:33:37 +00:00
sogladev
45a0fd6db4 fix(DB/Conditions): Unholy Rage (HC) can only target Enslaved Proto-Drake (#24315) 2026-01-03 12:32:33 -03:00
sudlud
db789c68e6 fix(Network): Replace deprecated boost::asio::null_buffers() with asy… (#24314) 2026-01-03 16:00:33 +01:00
github-actions[bot]
4bf3009ae8 chore(DB): import pending files
Referenced commit(s): d93c636fc1
2026-01-03 09:44:03 +00:00
Gultask
4fec80121d fix(DB/Loot): Adjust Shoveltusk Ligament drop rates (#24307) 2026-01-03 10:43:39 +01:00
github-actions[bot]
d93c636fc1 chore(DB): import pending files
Referenced commit(s): 187b8a4a19
2026-01-03 09:42:58 +00:00
Gultask
187b8a4a19 fix(DB/SAI): Rewrite The Air Stands Still (#24309) 2026-01-03 10:41:52 +01:00
github-actions[bot]
e4104ddd27 chore(DB): import pending files
Referenced commit(s): 480bd2a1db
2026-01-03 09:36:21 +00:00
Gultask
480bd2a1db fix(DB/Creature): remove CC immunities off of clones of Grand Magus Telestra in Heroic Mode (#24310)
Co-authored-by: Dan <83884799+elthehablo@users.noreply.github.com>
Co-authored-by: afdz1 <151603394+afdz1@users.noreply.github.com>
2026-01-03 10:35:15 +01:00
github-actions[bot]
8ec8c5acf4 chore(DB): import pending files
Referenced commit(s): 198905ed58
2026-01-02 22:20:45 +00:00
Ryan Turner
34bc0630ce fix(DB/Gameobject): Battered Footlocker adjusted respawn timers (#24297)
Co-authored-by: FlyingArowana <TheSCREWEDSoftware@users.noreply.github.com>
Co-authored-by: Grimfeather <88028633+Grimfeather@users.noreply.github.com>
2026-01-02 19:20:15 -03:00
Ryan Turner
198905ed58 fix(DB/Creature): Add money Frost Wyrm of Hyjal Summit (#24299)
Co-authored-by: FlyingArowana <TheSCREWEDSoftware@users.noreply.github.com>
2026-01-02 19:19:38 -03:00
github-actions[bot]
8bd4496ab1 chore(DB): import pending files
Referenced commit(s): e6e852b41c
2026-01-02 22:18:06 +00:00
Dan
89792bcb59 fix(DB/Creature): remove CC immunities off of clones of Grand Magus Telestra (#24301) 2026-01-02 19:17:47 -03:00
sogladev
e6e852b41c fix(DB/Conditions): Unholy Rage can only target Enslaved Proto-Drake (#24306) 2026-01-02 19:17:02 -03:00
github-actions[bot]
0849c29d14 chore(DB): import pending files
Referenced commit(s): c1d753f4ef
2026-01-02 20:43:08 +00:00
blinkysc
c1d753f4ef feat(Core/Events): Add dynamic holiday date calculator (#24038)
Co-authored-by: blinkysc <blinkysc@users.noreply.github.com>
Co-authored-by: sudlud <sudlud@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-02 21:35:23 +01:00
github-actions[bot]
4d4747808c chore(DB): import pending files
Referenced commit(s): 5ca975ce6b
2026-01-01 13:48:24 +00:00
Gultask
5ca975ce6b fix(DB/Quest): Correct Queststarters for Assisting Arch Druid Staghelm (#24267) 2026-01-01 10:29:01 -03:00
github-actions[bot]
4620091bb5 chore(DB): import pending files
Referenced commit(s): 44be1cfc87
2026-01-01 12:00:52 +00:00
afdz1
44be1cfc87 fix(DB/Commands): Add missing commands on table (#24289) 2026-01-01 12:59:46 +01:00
github-actions[bot]
65aace2b40 chore(DB): import pending files
Referenced commit(s): 82d44ca930
2026-01-01 11:33:24 +00:00
sogladev
1fc66dc3dc fix(Core/Condition): CONDITION_RANDOM_DUNGEON difficulty param (#24283) 2026-01-01 08:33:08 -03:00
Gultask
82d44ca930 fix(DB/SAI): Move Amphitheater of Anguish quest credit to Gurgthock rather than bosses (#24265) 2026-01-01 08:32:18 -03:00
Kitzunu
c521e712d3 fix(Core/Player): Make sure OnEquip spells from items are added after revive (#24238) 2026-01-01 05:47:09 -03:00
Gultask
3cff84de99 fix(Scripts/SAI): Add cooldown fields for ActionDone (#24282) 2026-01-01 05:45:11 -03:00
github-actions[bot]
ea0bf067b2 chore(DB): import pending files
Referenced commit(s): 4a33c8f11e
2026-01-01 08:43:18 +00:00
Gultask
4a33c8f11e feat(Scripts/Commands): Add command ".npc do" for calling DoAction() (#24281) 2026-01-01 05:42:12 -03:00
Benjamin Jackson
a3a7435ac3 fix(Core): Use more accurate time constant definition for year. (#24292) 2026-01-01 08:12:41 +01:00
github-actions[bot]
9785d5cc16 chore(DB): import pending files
Referenced commit(s): 3d3ad29ba6
2025-12-31 22:34:45 +00:00
Benjamin Jackson
306f9bcf72 fix(DB/Creature): Correct move speed of Culling of Stratholme Risen Zombies. (#24280)
Co-authored-by: Gultask <100873791+Gultask@users.noreply.github.com>
2025-12-31 19:34:10 -03:00
Benjamin Jackson
3d3ad29ba6 fix(DB/SAI): Use proper target type for Ymirjar Harpooner's Harpoon summon spell. (#24284)
Co-authored-by: Gultask <100873791+Gultask@users.noreply.github.com>
2025-12-31 19:33:38 -03:00
Gultask
3d15a19fb4 fix(Core/Pets): Always check pet Line of Sight before attacking (#24257) 2025-12-30 17:45:39 -03:00
Gultask
be0edab576 chore(Scripts/SethekkHalls): Remove now uneeded LoS check for Talon King Ikiss (#24259) 2025-12-30 11:52:56 -03:00
github-actions[bot]
9bb9f4f2d9 chore(DB): import pending files
Referenced commit(s): 3d0b7f4e36
2025-12-30 13:21:26 +00:00
Gultask
3d0b7f4e36 fix(Scripts/Gundrak): Add missing lines to Gal'darah (#24269) 2025-12-30 10:20:20 -03:00
Tereneckla
66037ab47f Revert "fix(Core/Player): Recalculate all StatModEffects on levelup (… (#24262) 2025-12-30 06:25:36 +01:00
Kitzunu
2ede1544f7 fix(Core/Misc): missed log format (#24252) 2025-12-30 06:21:09 +01:00
Kitzunu
59f66e9144 feat(DB): Release ACDB 14.0.0 (#24249) 2025-12-29 22:04:42 +01:00
sogladev
73b90a0cf9 fix(Core/Creature): Fix creature template movement field not loading 2025-12-29 17:20:52 -03:00
Gultask
d66de393dc fix(Scripts/CoS): Set correct gob state when resetting Arthas (#24251) 2025-12-29 18:36:17 +01:00
Kitzunu
10d105243f fix(DB): broken (#24248) 2025-12-29 17:44:37 +01:00
github-actions[bot]
628fa07c12 chore(DB): import pending files
Referenced commit(s): ddd7e1ebf3
2025-12-29 16:16:37 +00:00
Benjamin Jackson
a200103e0f fix(DB/Creature): Remove Death Grip immunity from Power Spark in Eye of Eternity. (#24246) 2025-12-29 13:16:12 -03:00
Kitzunu
ddd7e1ebf3 fix(DB): dup pri keys for trainers (#24247) 2025-12-29 17:15:21 +01:00
Jasper
9d802dcd0a fix(Core/Entities): Fix attack timers not resetting each other (#24204) 2025-12-29 17:11:55 +01:00
sogladev
caae3a28e5 fix(Core/MovementHandler): exempt The Oculus from under the map killing (#24244) 2025-12-29 17:02:59 +01:00
github-actions[bot]
c5d1d7d6b3 chore(DB): import pending files
Referenced commit(s): fec7c8ff6b
2025-12-29 15:55:14 +00:00
Gultask
fec7c8ff6b fix(DB/Gameobject): Overhaul Northrend Herb Nodes (#24194)
Co-authored-by: sudlud <sudlud@users.noreply.github.com>
2025-12-29 12:53:50 -03:00
github-actions[bot]
abc0d30b5f chore(DB): import pending files
Referenced commit(s): 3216da2d54
2025-12-29 14:36:16 +00:00
sogladev
3216da2d54 fix(DB/Trainer): Add primary keys to trainer tables (#24245) 2025-12-29 15:35:15 +01:00
Ryan Turner
e67c2a61db fix(Core/CMAKE): Include mmaps-config. yaml with mmaps_generator for Windows (#24083)
Co-authored-by: FlyingArowana <TheSCREWEDSoftware@users.noreply.github.com>
2025-12-29 14:43:29 +01:00
github-actions[bot]
0e1f1cc8bf chore(DB): import pending files
Referenced commit(s): e46424b8d8
2025-12-29 13:42:55 +00:00
Kitzunu
e46424b8d8 fix(Script/Quest): Terokk's Downfall (#24243) 2025-12-29 14:41:53 +01:00
sogladev
ab74e7ded8 refactor(Core/Creature): port TC handling of Trainers (#23040)
Co-authored-by: Shauren <shauren.trinity@gmail.com>
Co-authored-by: Ghaster <defscam@gmail.com>
2025-12-29 14:41:01 +01:00
github-actions[bot]
40f0c2d29b chore(DB): import pending files
Referenced commit(s): ea1c8919f5
2025-12-29 12:58:49 +00:00
blinkysc
ea1c8919f5 fix(DB): Reference loot table 4001/4000 (#24029)
Co-authored-by: blinkysc <blinkysc@users.noreply.github.com>
2025-12-29 09:57:38 -03:00
Kitzunu
105d8daf79 fix(Scripts/Naxxramas): Build (#24242) 2025-12-29 05:57:36 +01:00
sogladev
cfdd9322b7 fix(Core/Player): no longer grant quest profession perk after unlearning (#24237) 2025-12-29 05:55:11 +01:00
github-actions[bot]
1e5a4b4f89 chore(DB): import pending files
Referenced commit(s): 380d8000e5
2025-12-29 04:46:42 +00:00
sogladev
380d8000e5 fix(Scripts/Azjol'Nerub): Hadronox (#23246)
Co-authored-by: Treeston <treeston.mmoc@gmail.com>
2025-12-29 05:45:43 +01:00
NoxMax
2d09f2e29a chore(Conf): Quests.HighLevelHideDiff / Quests.LowLevelHideDiff description 2025-12-29 05:38:28 +01:00
github-actions[bot]
0b0d1ab8a7 chore(DB): import pending files
Referenced commit(s): f276cb810a
2025-12-29 04:37:45 +00:00
Andrew
f276cb810a fix(DB/Conditions): Deathstorm target conditions (#23959) 2025-12-29 05:36:41 +01:00
Michael Richards
76933b2732 feat(Core/PvP): Outdoor PvP capture rate multiplier (#23902) 2025-12-29 05:34:45 +01:00
github-actions[bot]
f73a08e207 chore(DB): import pending files
Referenced commit(s): 19a1303fbe
2025-12-29 04:32:02 +00:00
blinkysc
19a1303fbe fix(DB/Quest): Jagged Shard quest chain (#23974)
Co-authored-by: blinkysc <blinkysc@users.noreply.github.com>
2025-12-29 05:30:59 +01:00
sogladev
aac7ee3aa1 fix(Scripts/Naxxramas): Schedule Thaddius screams (#24039) 2025-12-29 05:29:44 +01:00
Ryan Turner
386a753b1b feat(apps/config): Config Merger in python (#24081)
Co-authored-by: FlyingArowana <TheSCREWEDSoftware@users.noreply.github.com>
Co-authored-by: Brian Aldridge <baldridge@resourcedata.com>
2025-12-29 05:24:53 +01:00
github-actions[bot]
b38b34c5d4 chore(DB): import pending files
Referenced commit(s): a848bb9edc
2025-12-29 04:22:27 +00:00
sogladev
a848bb9edc fix(Core/Conditions): Limit Oculus' Cache drop to Random Heroic (#24184) 2025-12-29 05:21:13 +01:00
github-actions[bot]
67e64bb6b3 chore(DB): import pending files
Referenced commit(s): 4331cdf335
2025-12-29 04:13:11 +00:00
Benjamin Jackson
4331cdf335 fix(Scripts/ObsidianSanctum): Correct Flame Tsunami spawns according to sniffed data. (#24218) 2025-12-29 05:12:03 +01:00
github-actions[bot]
61880e2246 chore(DB): import pending files
Referenced commit(s): af9898d240
2025-12-29 04:10:24 +00:00
Gultask
af9898d240 fix(DB/Gameobject): Overhaul Northrend Mining Nodes (#24181)
Co-authored-by: sudlud <sudlud@users.noreply.github.com>
2025-12-29 05:09:06 +01:00
Uros Spasojevic
a362117749 fix(Core/DBUpdater): Fix sql files not being applied in alphabetic order (#24206) 2025-12-29 05:04:40 +01:00
github-actions[bot]
376da8f2d0 chore(DB): import pending files
Referenced commit(s): 5f0a9ec16c
2025-12-29 03:56:02 +00:00
Dan
5ac4cc1095 fix(Scripts/Gundrak): modernise Eck the Ferocious script (#24224) 2025-12-29 04:55:54 +01:00
Ryan Turner
5f0a9ec16c fix(DB/Creature): Guard stealth detection in capital cities (#24235)
Co-authored-by: FlyingArowana <TheSCREWEDSoftware@users.noreply.github.com>
2025-12-29 04:54:57 +01:00
Gultask
a963ed5cef fix(Scripts/Naxxramas): Add Boss Boundaries to Naxxramas (#24215)
Co-authored-by: Treeston <14020072+Treeston@users.noreply.github.com>
2025-12-29 04:48:06 +01:00
Dan
5dbc6e07ba fix(Scripts/Naxxramas): modernise Heigan (#24234) 2025-12-29 04:47:02 +01:00
github-actions[bot]
f1dadadfb9 chore(DB): import pending files
Referenced commit(s): b7356cabe7
2025-12-29 03:39:18 +00:00
Gultask
5aba5ab979 chore(DB/SAI): Move Halls of Stone Tribunal Event Trash to Smart Scripts (#24228) 2025-12-29 04:38:38 +01:00
github-actions[bot]
b7356cabe7 chore(DB): import pending files
Referenced commit(s): 6be2dad01a
2025-12-29 03:38:13 +00:00
Gultask
16bbeadd6e fix(Scripts/Naxxramas): Adjust spell timers for Naxxramas Worshipper and refine Faerlina aggro logic (#24210) 2025-12-29 04:37:26 +01:00
blinkysc
6be2dad01a fix(DB/Quest): A Sister's Pledge spawning multiple Sasha (#23975)
Co-authored-by: blinkysc <blinkysc@users.noreply.github.com>
2025-12-29 04:37:10 +01:00
github-actions[bot]
91a1cf85e9 chore(DB): import pending files
Referenced commit(s): 667b7b1648
2025-12-29 00:40:45 +00:00
Gultask
667b7b1648 feat(Scripts/Commands): Implement Pooling Tools for easier object pooling (#24196)
Co-authored-by: sudlud <sudlud@users.noreply.github.com>
2025-12-29 01:39:42 +01:00
github-actions[bot]
6c0d6350ae chore(DB): import pending files
Referenced commit(s): 4eed31c039
2025-12-28 16:05:01 +00:00
Gultask
4eed31c039 fix(DB/Creature): Prevent Prince Keleseth from receiving assistance calls (#24230) 2025-12-28 13:03:57 -03:00
github-actions[bot]
f4bbbf34dd chore(DB): import pending files
Referenced commit(s): 321934d717
2025-12-27 21:48:04 +00:00
Gultask
321934d717 fix(DB/Loot): Dream Shard and Small Dream Shard should not drop from mobs (#24229) 2025-12-27 18:47:00 -03:00
Benjamin Jackson
54fc87bbdf fix(Scripts/SethekkHalls): Only spawn Brood of Anzu in bounds. (#24022) 2025-12-27 22:27:37 +01:00
github-actions[bot]
a3f0769547 chore(DB): import pending files
Referenced commit(s): 0eeb5f3bd7
2025-12-27 15:58:33 +00:00
Gultask
0eeb5f3bd7 fix(Scripts/Elwynn): Eastvale Peasant and Wolf sound lines should not play at equal volume to all players in range (#24226) 2025-12-27 12:57:33 -03:00
github-actions[bot]
04e7a74655 chore(DB): import pending files
Referenced commit(s): 36ce52ee6a
2025-12-27 13:33:27 +00:00
Rocco Silipo
36ce52ee6a fix(DB/Creature): Set Melee State for Onyx Sanctum Guardians in 25 man mode. (#24223) 2025-12-27 10:32:26 -03:00
github-actions[bot]
540a5a6f20 chore(DB): import pending files
Referenced commit(s): ac71ab3900
2025-12-27 11:30:32 +00:00
zackchadwick
ac71ab3900 fix(DB/Loot): Reinforced Junkbox (#24095) 2025-12-27 12:29:27 +01:00
github-actions[bot]
fca121406e chore(DB): import pending files
Referenced commit(s): 752967193f
2025-12-27 10:21:20 +00:00
Benjamin Jackson
752967193f fix(DB/Creature): Adjust various values of creatures in some Northrend raids. (#24220) 2025-12-27 07:20:14 -03:00
github-actions[bot]
914f0f9b13 chore(DB): import pending files
Referenced commit(s): 6ff0e8e55b
2025-12-27 03:13:10 +00:00
Benjamin Jackson
6ff0e8e55b fix(DB/Creature): Correct model probabilities for Explosive Decoy's Brown Rabbit. (#24222) 2025-12-27 04:10:55 +01:00
Benjamin Jackson
d025568b65 fix(Core/Entities): Use lifetime PvP rank rather than current title for PvP credit message. (#23961)
Co-authored-by: Shauren <shauren.trinity@gmail.com>
2025-12-27 00:45:33 +01:00
sogladev
5fb395dcc5 fix(Core/LFG): no longer apply Luck of the Draw to premade groups (#24186) 2025-12-27 00:30:46 +01:00
Munzeria
ae8dd49fd4 feat(Core/PlayerScript): Add Unequip hook (#23248)
Co-authored-by: Munzeria <Munzeria@dontemailme.lol>
Co-authored-by: sudlud <sudlud@users.noreply.github.com>
2025-12-27 00:09:56 +01:00
github-actions[bot]
d54253310a chore(DB): import pending files
Referenced commit(s): 3fbcd490cb
2025-12-26 22:40:53 +00:00
Ryan Turner
3fbcd490cb fix(DB/Loot): Removed Compendium of the Fallen from the wrong object (#23954)
Co-authored-by: FlyingArowana <TheSCREWEDSoftware@users.noreply.github.com>
2025-12-26 19:35:40 -03:00
github-actions[bot]
f1233b9a8a chore(DB): import pending files
Referenced commit(s): 2f42382d23
2025-12-26 21:40:58 +00:00
Gultask
2f42382d23 chore(DB/Loot): Cleanup unused placeholder reference loot from loot overhaul (#24217) 2025-12-26 18:36:30 -03:00
Evgeny
3d4a853466 feat(docker) add env variable for ac-database volume (#23189) 2025-12-26 22:24:37 +01:00
github-actions[bot]
f5e4ed5ef5 chore(DB): import pending files
Referenced commit(s): 807c1135c4
2025-12-26 20:29:00 +00:00
blinkysc
6d8d61a8a0 fix(DB/Quest): Gruesome, But Necessary correct giblet and conditions (#23852)
Co-authored-by: blinkysc <blinkysc@users.noreply.github.com>
Co-authored-by: Ryan Turner <16946913+TheSCREWEDSoftware@users.noreply.github.com>
Co-authored-by: Benjamin Jackson <38561765+heyitsbench@users.noreply.github.com>
2025-12-26 21:28:21 +01:00
github-actions[bot]
807c1135c4 chore(DB): import pending files
Referenced commit(s): 4fe944e583
2025-12-26 20:27:56 +00:00
Gultask
4fe944e583 fix(DB/Gameobject): Move Unreachable Mining Nodes in Swamp of Sorrows (#24141)
Co-authored-by: Rocco Silipo <108557877+Rorschach91@users.noreply.github.com>
2025-12-26 21:26:54 +01:00
github-actions[bot]
191c75738f chore(DB): import pending files
Referenced commit(s): f4451e963a
2025-12-26 19:40:01 +00:00
Gultask
f4451e963a fix(DB/SAI): Implement missing Frostgore events for Mimicking Nature's Call (#24207) 2025-12-26 20:18:42 +01:00
github-actions[bot]
d48dad70a2 chore(DB): import pending files
Referenced commit(s): 16e89166e5
2025-12-26 18:20:56 +00:00
Gultask
16e89166e5 fix(DB/Creature): Sack of Relics (24439) update models and remove duplicate spawn (#24131) 2025-12-26 15:19:46 -03:00
github-actions[bot]
5e34694741 chore(DB): import pending files
Referenced commit(s): 357a2c92ac
2025-12-26 18:17:58 +00:00
Gultask
357a2c92ac fix(DB/SAI): Remove redundant CallQuestKillCredit action from NPC Howling Cyclone (#24208) 2025-12-26 15:16:51 -03:00
github-actions[bot]
5402899dd6 chore(DB): import pending files
Referenced commit(s): 82ae390850
2025-12-26 18:12:37 +00:00
Gultask
63b733b503 fix(DB/Creature): Remove extra Poisonous Skitterers from Faerlina boss room (#24211) 2025-12-26 15:11:53 -03:00
Gultask
82ae390850 fix(DB/Creature): Adjust Naxxramas Worshipper 10M/25M immunity mask (#24212) 2025-12-26 15:11:36 -03:00
github-actions[bot]
6767333000 chore(DB): import pending files
Referenced commit(s): fcf50c056b
2025-12-26 16:55:58 +00:00
Gultask
fcf50c056b fix(DB/SAI): Fix The Lost Mistwhisper Treasure group credit (#24213) 2025-12-26 17:54:57 +01:00
github-actions[bot]
5df2fddb91 chore(DB): import pending files
Referenced commit(s): 37fd58b5c9
2025-12-26 14:30:36 +00:00
daobashun
37fd58b5c9 fix(DB/SAI) Increased dialogue when interacting with Thaurissan Relic (#23535)
Co-authored-by: sudlud <sudlud@users.noreply.github.com>
2025-12-26 15:29:32 +01:00
github-actions[bot]
da28c49e27 chore(DB): import pending files
Referenced commit(s): 55b3bb8cfb
2025-12-26 09:49:09 +00:00
blinkysc
55b3bb8cfb fix(DB/Quest): Fix quest chain progression for Taunka storyline in BoreanTundra (#22857)
Co-authored-by: blinkysc <blinkysc@users.noreply.github.com>
2025-12-26 10:48:05 +01:00
Ryan Turner
20db584c00 fix(Core/Config) - Add UseSocketActivation to auth config (#24075)
Co-authored-by: FlyingArowana <TheSCREWEDSoftware@users.noreply.github.com>
2025-12-26 09:19:00 +01:00
Andrew
0bf023cb6e docs: Include AI-assisted pull request guidelines (#24195) 2025-12-24 21:03:57 -03:00
NoxMax
961823f60c fix(Core/Maps): Add AREA_SILVERMOON_CITY to AreaDefines.h (#24199) 2025-12-24 09:24:35 -03:00
github-actions[bot]
7eb5927806 chore(DB): import pending files
Referenced commit(s): 26a0ec0ffc
2025-12-24 10:44:08 +00:00
Dan
26a0ec0ffc fix(DB/CreatureTemplate): change faction of Servants of Freya (#24202) 2025-12-24 11:43:06 +01:00
github-actions[bot]
a4ea6d60a2 chore(DB): import pending files
Referenced commit(s): a572b92e2f
2025-12-24 01:08:47 +00:00
Gultask
a572b92e2f fix(DB/Phasing): Both Mending Fences and A Spark of Hope must be completed in order to phase to friendly Dun Niffelem (#24198) 2025-12-23 22:07:46 -03:00
1560 changed files with 179978 additions and 131513 deletions

View File

@@ -31,7 +31,7 @@ body:
description: |
Do you have any logs or screenshots that can be useful?
Crash logs in text are preffered over screenshots.
DO NOT POST THE FULL CRASH LOG IN THE ISSUE BODY. DO NOT UPLOAD TEXT FILES. USE [GITHUB GIST](https://gist.github.com/), PASTEBIN, OR ANY SIMILAR SERVICE INSTEAD.
If you have logs in text form please upload them to [Gist](https://gist.github.com/) or PasteBin and upload the link.
validations:
required: false
- type: input

3
.github/README.md vendored
View File

@@ -82,7 +82,8 @@ You can check the [authors](https://github.com/azerothcore/azerothcore-wotlk/blo
## License
- The AzerothCore source code is released under the [GNU GPL v2](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)
- The new AzerothCore source components are released under the [GNU AGPL v3](https://www.gnu.org/licenses/agpl-3.0.en.html)
- The old sources based on MaNGOS/TrinityCore are released under the [GNU GPL v2](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)
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.

View File

@@ -14,7 +14,7 @@ jobs:
triage:
runs-on: ubuntu-latest
name: C++
if: github.repository == 'azerothcore/azerothcore-wotlk' && !github.event.pull_request.draft
if: github.repository == 'mod-playerbots/azerothcore-wotlk' && !github.event.pull_request.draft
steps:
- uses: actions/checkout@v4
- name: Setup python

View File

@@ -37,7 +37,7 @@ jobs:
CXX: g++-14
runs-on: ${{ matrix.os }}
name: ${{ matrix.os }}-${{ matrix.compiler.CC }}-nopch
if: github.repository == 'azerothcore/azerothcore-wotlk' && !github.event.pull_request.draft
if: github.repository == 'mod-playerbots/azerothcore-wotlk' && !github.event.pull_request.draft
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/linux-build

View File

@@ -32,8 +32,10 @@ jobs:
CC: clang-18
CXX: clang++-18
runs-on: ${{ matrix.os }}
name: ${{ matrix.os }}-${{ matrix.compiler.CC }}-pch
if: github.repository == 'azerothcore/azerothcore-wotlk' && !github.event.pull_request.draft
name: ${{ matrix.os }}-${{ matrix.compiler }}-pch
env:
COMPILER: ${{ matrix.compiler }}
if: github.repository == 'mod-playerbots/azerothcore-wotlk' && !github.event.pull_request.draft
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/linux-build

View File

@@ -0,0 +1,100 @@
# This starter workflow is for a CMake project running on multiple platforms. There is a different starter workflow if you just want a single platform.
# See: https://github.com/actions/starter-workflows/blob/main/ci/cmake-single-platform.yml
name: ubuntu-build
on:
push:
branches: [ "Playerbot" ]
pull_request:
branches: [ "Playerbot" ]
jobs:
build:
strategy:
# Set fail-fast to false to ensure that feedback is delivered for all matrix combinations. Consider changing this to true when your workflow is stable.
fail-fast: false
matrix:
# the result of the matrix will be the combination of all attributes, so we get os*compiler builds
include:
- os: ubuntu-22.04
c_compiler: clang
cpp_compiler: clang++
build_type: Release
- os: ubuntu-22.04
c_compiler: gcc
cpp_compiler: g++
build_type: Release
- os: ubuntu-24.04
c_compiler: gcc
cpp_compiler: g++
build_type: Release
runs-on: ${{ matrix.os }}
name: ${{ matrix.os }}-${{ matrix.cpp_compiler }}
steps:
- name: Checkout AzerothCore
uses: actions/checkout@v3
- name: Set reusable strings
# Turn repeated input strings (such as the build output directory) into step outputs. These step outputs can be used throughout the workflow file.
id: strings
shell: bash
run: |
echo "build-output-dir=${{ github.workspace }}/build" >> "$GITHUB_OUTPUT"
# - name: Clone Playerbot Module
# run: git clone --depth=1 --branch=master https://github.com/mod-playerbots/mod-playerbots.git modules/mod-playerbots
- name: Checkout Playerbot Module
uses: actions/checkout@v3
with:
repository: 'mod-playerbots/mod-playerbots'
#ref: 'feature/core_update_10_2025' #used on core merge conflicts builds
path: 'modules/mod-playerbots'
- name: Install Requirements
run: sudo apt-get update && sudo apt-get install git cmake make gcc g++ clang libmysqlclient-dev libssl-dev libbz2-dev libreadline-dev libncurses-dev mysql-server libboost-all-dev
# - name: Cache
# uses: actions/cache@v3
# with:
# path: var/ccache
# key: ccache:${{ matrix.os }}:${{ matrix.compiler }}:${{ matrix.modules }}-modules:${{ github.ref }}:${{ github.sha }}
# restore-keys: |
# ccache:${{ matrix.os }}:${{ matrix.compiler }}:${{ matrix.modules }}-modules:${{ github.ref }}
# ccache:${{ matrix.os }}:${{ matrix.compiler }}:${{ matrix.modules }}-modules
# - name: Configure OS
# run: source ./acore.sh install-deps
# env:
# CONTINUOUS_INTEGRATION: true
# - name: Create conf/config.sh
# run: source ./apps/ci/ci-conf-core.sh
# - name: Process pending sql
# run: bash bin/acore-db-pendings
# - name: Build
# run: source ./apps/ci/ci-compile.sh
- name: Configure CMake
# Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make.
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
run: >
cmake -B ${{ steps.strings.outputs.build-output-dir }}
-DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }}
-DCMAKE_C_COMPILER=${{ matrix.c_compiler }}
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }}
-S ${{ github.workspace }}
- name: Build
# Build your program with the given configuration. Note that --config is needed because the default Windows generator is a multi-config generator (Visual Studio generator).
run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }}
# - name: Test
# working-directory: ${{ steps.strings.outputs.build-output-dir }}
# # Execute tests defined by the CMake configuration. Note that --build-config is needed because the default Windows generator is a multi-config generator (Visual Studio generator).
# # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
# run: ctest --build-config ${{ matrix.build_type }}

99
.github/workflows/core-build.yml vendored Normal file
View File

@@ -0,0 +1,99 @@
# This starter workflow is for a CMake project running on multiple platforms. There is a different starter workflow if you just want a single platform.
# See: https://github.com/actions/starter-workflows/blob/main/ci/cmake-single-platform.yml
name: ubuntu-build
on:
push:
branches: [ "Playerbot" ]
pull_request:
branches: [ "Playerbot" ]
jobs:
build:
strategy:
# Set fail-fast to false to ensure that feedback is delivered for all matrix combinations. Consider changing this to true when your workflow is stable.
fail-fast: false
matrix:
# the result of the matrix will be the combination of all attributes, so we get os*compiler builds
include:
- os: ubuntu-22.04
c_compiler: clang
cpp_compiler: clang++
build_type: Release
- os: ubuntu-22.04
c_compiler: gcc
cpp_compiler: g++
build_type: Release
- os: ubuntu-24.04
c_compiler: gcc
cpp_compiler: g++
build_type: Release
runs-on: ${{ matrix.os }}
name: ${{ matrix.os }}-${{ matrix.cpp_compiler }}
steps:
- name: Checkout AzerothCore
uses: actions/checkout@v3
- name: Set reusable strings
# Turn repeated input strings (such as the build output directory) into step outputs. These step outputs can be used throughout the workflow file.
id: strings
shell: bash
run: |
echo "build-output-dir=${{ github.workspace }}/build" >> "$GITHUB_OUTPUT"
# - name: Clone Playerbot Module
# run: git clone --depth=1 --branch=master https://github.com/mod-playerbots/mod-playerbots.git modules/mod-playerbots
# - name: Checkout Playerbot Module
# uses: actions/checkout@v3
# with:
# repository: 'mod-playerbots/mod-playerbots'
# path: 'modules/mod-playerbots'
- name: Install Requirements
run: sudo apt-get update && sudo apt-get install git cmake make gcc g++ clang libmysqlclient-dev libssl-dev libbz2-dev libreadline-dev libncurses-dev mysql-server libboost-all-dev
# - name: Cache
# uses: actions/cache@v3
# with:
# path: var/ccache
# key: ccache:${{ matrix.os }}:${{ matrix.compiler }}:${{ matrix.modules }}-modules:${{ github.ref }}:${{ github.sha }}
# restore-keys: |
# ccache:${{ matrix.os }}:${{ matrix.compiler }}:${{ matrix.modules }}-modules:${{ github.ref }}
# ccache:${{ matrix.os }}:${{ matrix.compiler }}:${{ matrix.modules }}-modules
# - name: Configure OS
# run: source ./acore.sh install-deps
# env:
# CONTINUOUS_INTEGRATION: true
# - name: Create conf/config.sh
# run: source ./apps/ci/ci-conf-core.sh
# - name: Process pending sql
# run: bash bin/acore-db-pendings
# - name: Build
# run: source ./apps/ci/ci-compile.sh
- name: Configure CMake
# Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make.
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
run: >
cmake -B ${{ steps.strings.outputs.build-output-dir }}
-DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }}
-DCMAKE_C_COMPILER=${{ matrix.c_compiler }}
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }}
-S ${{ github.workspace }}
- name: Build
# Build your program with the given configuration. Note that --config is needed because the default Windows generator is a multi-config generator (Visual Studio generator).
run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }}
# - name: Test
# working-directory: ${{ steps.strings.outputs.build-output-dir }}
# # Execute tests defined by the CMake configuration. Note that --build-config is needed because the default Windows generator is a multi-config generator (Visual Studio generator).
# # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
# run: ctest --build-config ${{ matrix.build_type }}

View File

@@ -39,7 +39,7 @@ jobs:
CXX: clang++-18
runs-on: ${{ matrix.os }}
name: ${{ matrix.os }}-${{ matrix.compiler.CC }}-nopch-modules
if: github.repository == 'azerothcore/azerothcore-wotlk' && !github.event.pull_request.draft
if: github.repository == 'mod-playerbots/azerothcore-wotlk' && !github.event.pull_request.draft
steps:
- uses: actions/checkout@v4
# This script installs a general list of modules to compile with

View File

@@ -16,13 +16,13 @@ env:
COMPOSE_DOCKER_CLI_BUILD: 1
DOCKER_BUILDKIT: 1
RUNNING_ON_PRIMARY_BRANCH: |
${{ (github.repository == 'azerothcore/azerothcore-wotlk' && github.ref_name == 'master') && 'true' || 'false' }}
${{ (github.repository == 'mod-playerbots/azerothcore-wotlk' && github.ref_name == 'master') && 'true' || 'false' }}
jobs:
build-containers:
runs-on: "ubuntu-latest"
if: |
github.repository == 'azerothcore/azerothcore-wotlk'
github.repository == 'mod-playerbots/azerothcore-wotlk'
&& !github.event.pull_request.draft
&& (github.ref_name == 'master' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build')
steps:

View File

@@ -1,12 +1,9 @@
name: macos-build
on:
push:
branches:
- 'master'
branches: [ "Playerbot" ]
pull_request:
types:
- labeled
- synchronize
branches: [ "Playerbot" ]
concurrency:
group: ${{ github.head_ref }} || concat(${{ github.ref_name }}, ${{ github.workflow }})
@@ -25,10 +22,6 @@ jobs:
- macos-14
runs-on: ${{ matrix.os }}
name: ${{ matrix.os }}
if: |
github.repository == 'azerothcore/azerothcore-wotlk'
&& !github.event.pull_request.draft
&& (github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build')
steps:
- uses: actions/checkout@v4
- name: Cache

View File

@@ -25,9 +25,11 @@ jobs:
runs-on: ${{ matrix.os }}
name: ${{ matrix.os }}-${{ matrix.compiler.CC }}
if: |
github.repository == 'azerothcore/azerothcore-wotlk'
&& !github.event.pull_request.draft
&& (github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build')
github.repository == 'mod-playerbots/azerothcore-wotlk' && !github.event.pull_request.draft
&& (
contains(github.event.pull_request.labels.*.name, 'run-build')
|| github.event.label.name == 'run-build'
)
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/linux-build

View File

@@ -1,12 +1,9 @@
name: windows-build
on:
push:
branches:
- 'master'
branches: [ "Playerbot" ]
pull_request:
types:
- labeled
- synchronize
branches: [ "Playerbot" ]
concurrency:
group: ${{ github.head_ref }} || concat(${{ github.ref_name }}, ${{ github.workflow }})
@@ -22,10 +19,6 @@ jobs:
name: ${{ matrix.os }}
env:
BOOST_ROOT: C:\local\boost_1_82_0
if: |
github.repository == 'azerothcore/azerothcore-wotlk'
&& !github.event.pull_request.draft
&& (github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'run-build') || github.event.label.name == 'run-build')
steps:
- uses: actions/checkout@v4
- name: ccache

4
.gitignore vendored
View File

@@ -58,6 +58,8 @@ CMakeLists.txt.user
#
/.settings/
/.externalToolBuilders/*
/.vs
/out
# exclude in all levels
nbproject/
.sync.ffs_db
@@ -102,3 +104,5 @@ local.properties
# !modules/yourmodule
#
# ==================
.cache
compile_commands.json

View File

@@ -1,5 +1,10 @@
# List of AUTHORS who contributed over time to the AzerothCore project
## Warning
The code of AzerothCore is shipped as it is without any form of warranty,
and - except for third party libraries licensed under the AGPL 3,
which you can read from the file "LICENSE".
## Point of current development
The project is currently hosted at https://www.azerothcore.org/ and developed under https://github.com/azerothcore

View File

@@ -1,5 +1,5 @@
{
"name": "azerothcore-wotlk",
"version": "14.0.0-dev",
"version": "15.0.0-dev",
"license": "GPL2"
}

View File

@@ -22,8 +22,7 @@ if [ ! -d "$mysql_include_path" ]; then
fi
time cmake ../../../ \
-DTOOLS=1 \
-DBUILD_TESTING=1 \
-DTOOLS_BUILD=all \
-DSCRIPTS=static \
-DCMAKE_BUILD_TYPE=Release \
-DMYSQL_ADD_INCLUDE_PATH=$mysql_include_path \
@@ -33,9 +32,6 @@ time cmake ../../../ \
-DOPENSSL_INCLUDE_DIR="$OPENSSL_ROOT_DIR/include" \
-DOPENSSL_SSL_LIBRARIES="$OPENSSL_ROOT_DIR/lib/libssl.dylib" \
-DOPENSSL_CRYPTO_LIBRARIES="$OPENSSL_ROOT_DIR/lib/libcrypto.dylib" \
-DWITH_WARNINGS=1 \
-DCMAKE_C_FLAGS="-Werror" \
-DCMAKE_CXX_FLAGS="-Werror" \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DUSE_SCRIPTPCH=0 \

View File

@@ -1,22 +1,66 @@
# ==== PHP merger (index.php + merge.php) ====
# AzerothCore Config Merger
This is a PHP script for merging a new .dist file with your existing .conf file (worldserver.conf.dist and authserver.conf.dist)
This directory contains configuration file merger tools to help update your AzerothCore server and module configurations with new options from distribution files.
It uses sessions so it is multi user safe, it adds any options that are removed to the bottom of the file commented out, just in case it removes something it shouldn't.
If you add your custom patch configs below "# Custom" they will be copied exactly as they are.
**Available Options:** PHP and Python versions (**Python recommended for new users**)
Your new config will be found under $basedir/session_id/newconfig.conf.merge
## Purpose
If you do not run a PHP server on your machiene you can read this guide on ["How to execute PHP code using command line?"](https://www.geeksforgeeks.org/how-to-execute-php-code-using-command-line/) on geeksforgeeks.org.
The config merger tools help you update your existing configuration files (`.conf`) to include new options that have been added to the distribution files (`.conf.dist`). Distribution files always contain the most recent configuration changes and new options, while your personal config files may be missing these updates. These tools will:
```
php -S localhost:port -t E:\Azerothcore-wotlk\apps\config-merger\
- Compare your existing config files with the latest distribution files
- Show you new configuration options that are missing from your files
- Allow you to selectively add new options to your configs
- Create automatic backups before making any changes
- Support authserver.conf, worldserver.conf, and all module configs
## Available Versions
### PHP Version
**Requirements:**
- PHP 5.6 or higher
- **Requires a web server** (Apache, Nginx, IIS, etc.) to function
- No additional libraries required (uses built-in PHP functions only)
**Features:**
- Web-based interface
- Configuration file parsing and merging
- Browser-accessible configuration management
**Usage:**
- Deploy to web server with PHP support (can be local - XAMPP, WAMP, or built-in PHP server)
- Access via web browser
- Follow web interface instructions
### Python Version (Recommended)
**Requirements:**
- Python 3.6 or higher
- No additional setup required beyond installing Python
- No additional libraries required (uses built-in modules only)
**Features:**
- Interactive menu-driven interface
- Support for server configs (authserver.conf, worldserver.conf)
- Support for module configs with bulk or selective updates
- Automatic backup creation with timestamps
- Cross-platform compatibility (Windows, Linux, macOS, and others)
- Can be run via command line or by double-clicking the .py file
**Usage:**
```bash
# Via command line
cd /path/to/configs
python config_merger.py
# Or double-click config_merger.py to open in terminal
```
Change port to an available port to use. i.e 8000
## Installation
Then go to your browser and type:
When building AzerothCore with the `TOOL_CONFIG_MERGER` CMake option enabled, **only the Python version** will be automatically copied to your configs directory during the build process. The PHP version must be manually deployed to a web server.
```
localhost:8000/index.php
```
## Support
Both versions provide the same core functionality for merging configuration files. Choose the version that best fits your environment and preferences. Python is recommended for most users due to its simplicity and no web server requirement.

View File

@@ -0,0 +1,22 @@
# ==== PHP merger (index.php + merge.php) ====
This is a PHP script for merging a new .dist file with your existing .conf file (worldserver.conf.dist and authserver.conf.dist)
It uses sessions so it is multi user safe, it adds any options that are removed to the bottom of the file commented out, just in case it removes something it shouldn't.
If you add your custom patch configs below "# Custom" they will be copied exactly as they are.
Your new config will be found under $basedir/session_id/newconfig.conf.merge
If you do not run a PHP server on your machine you can read this guide on ["How to execute PHP code using command line?"](https://www.geeksforgeeks.org/how-to-execute-php-code-using-command-line/) on geeksforgeeks.org.
```
php -S localhost:port -t E:\Azerothcore-wotlk\apps\config-merger\php\
```
Change port to an available port to use. i.e 8000
Then go to your browser and type:
```
localhost:8000/index.php
```

View File

@@ -0,0 +1,148 @@
# AzerothCore Config Updater/Merger - Python Version
A command-line tool to update your AzerothCore configuration files with new options from distribution files.
> [!NOTE]
> Based on and modified from [@BoiseComputer](https://github.com/BoiseComputer) (Brian Aldridge)'s [update_module_confs](https://github.com/Brian-Aldridge/update_module_confs) project to meet AzerothCore's needs
## Overview
This tool compares your existing configuration files (`.conf`) with the latest distribution files (`.conf.dist`) and helps you add new configuration options that may have been introduced in updates. It ensures your configs stay up-to-date while preserving your custom settings.
## Features
- **Interactive Menu System** - Easy-to-use numbered menu options
- **Server Config Support** - Update authserver.conf and worldserver.conf
- **Module Config Support** - Update all or selected module configurations
- **Automatic Backups** - If you choose a valid option and there are changes, a timestamped backup is created before any changes are made (e.g. `filename(d11_m12_y2025_14h_30m_45s).bak`)
- **Selective Updates** - Choose which new config options to add (y/n prompts)
- **Safe Operation** - Only creates backups and makes changes when new options are found
## How to Use
### Interactive Mode (Default)
1. **Run the script** in your configs directory:
```bash
python config_merger.py
```
Or simply **double-click** the `config_merger.py` file to run it directly.
2. **Specify configs path** (or press Enter for current directory):
```
Enter the path to your configs folder (default: .) which means current folder:
```
3. **Choose from the menu**:
```
AzerothCore Config Updater/Merger (v. 1)
--------------------------
1 - Update Auth Config
2 - Update World Config
3 - Update Auth and World Configs
4 - Update All Modules Configs
5 - Update Modules (Selection) Configs
0 - Quit
```
### Command Line Interface (CLI)
For automation and scripting, you can use CLI mode:
```bash
python config_merger.py [config_dir] [target] [options]
```
**Arguments:**
- `config_dir` (optional): Path to configs directory (default: current directory)
- `target` (optional): What to update:
- `auth` - Update authserver.conf only
- `world` - Update worldserver.conf only
- `both` - Update both server configs
- `modules` - Update all module configs
- `modules-select` - Interactive module selection
**Options:**
- `-y, --yes`: Skip prompts and auto-add all new config options (default: prompt for each option)
- `--version`: Show version information
**Examples:**
```bash
# Interactive mode (default)
python config_merger.py
# Update auth config with prompts
python config_merger.py . auth
# Update both configs automatically (no prompts)
python config_merger.py /path/to/configs both -y
# Update all modules with confirmation
python config_merger.py . modules
```
## Menu Options Explained
- **Option 1**: Updates only `authserver.conf` from `authserver.conf.dist`
- **Option 2**: Updates only `worldserver.conf` from `worldserver.conf.dist`
- **Option 3**: Updates both server config files
- **Option 4**: Automatically processes all module config files in the `modules/` folder
- **Option 5**: Shows you a list of available modules and lets you select specific ones to update
- **Option 0**: Exit the program
## Interactive Process
For each missing configuration option found, the tool will:
1. **Show you the option** with its comments and default value
2. **Ask for confirmation**: `Add [option_name] to config? (y/n):`
3. **Add or skip** based on your choice
4. **Create backup** (before any changes are made) only if you choose a valid option and there are changes (format: `filename(d11_m12_y2025_14h_30m_45s).bak`)
## Example Session
```
Processing worldserver.conf ...
Backup created: worldserver.conf(d11_m12_y2025_14h_30m_45s).bak
# New feature for XP rates
XP.Rate = 1
Add XP.Rate to config? (y/n): y
Added XP.Rate.
# Database connection pool size
Database.PoolSize = 5
Add Database.PoolSize to config? (y/n): n
Skipped Database.PoolSize.
```
## Requirements
- Python 3.6 or higher
- No additional libraries needed (uses built-in modules only)
## File Structure Expected
```
configs/
├── config_merger.py (this script)
├── authserver.conf.dist
├── authserver.conf
├── worldserver.conf.dist
├── worldserver.conf
└── modules/
├── mod_example.conf.dist
├── mod_example.conf
└── ...
```
## License
This file is part of the AzerothCore Project. 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, see <http://www.gnu.org/licenses/>.
**Note:** Original code portions were licensed under the MIT License by Brian Aldridge (https://github.com/BoiseComputer)
Original project: https://github.com/Brian-Aldridge/update_module_confs

View File

@@ -0,0 +1,276 @@
# Version 1
# Based and modified from: https://github.com/Brian-Aldridge/update_module_confs
#
# This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
#
# 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, see <http://www.gnu.org/licenses/>.
#
# Original code portions licensed under MIT License by Brian Aldridge (https://github.com/BoiseComputer)
# Original project: https://github.com/Brian-Aldridge/update_module_confs
VERSION = "1"
import os
import shutil
import argparse
import sys
from datetime import datetime
def find_modules(folder):
dist_files = []
try:
files = os.listdir(folder)
except (OSError, IOError) as e:
print(f"[ERROR] Could not list directory '{folder}': {e}")
return []
for file in files:
if file.endswith('.conf.dist'):
dist_files.append(file)
return sorted(dist_files)
def prompt_module_selection(dist_files):
print("Found the following modules:")
for idx, fname in enumerate(dist_files, 1):
print(f" {idx}. {fname}")
nums = input("Enter numbers of modules to update (comma-separated): ").strip()
raw_inputs = [x.strip() for x in nums.split(",") if x.strip()]
indices = []
invalid = []
for x in raw_inputs:
if not x.isdigit():
invalid.append(f"'{x}' (not a number)")
continue
idx = int(x)
if 0 < idx <= len(dist_files):
indices.append(idx-1)
else:
invalid.append(f"'{x}' (out of range, must be 1-{len(dist_files)})")
if invalid:
print("Invalid input:")
for msg in invalid:
print(f" {msg}")
if not indices:
print("No valid module numbers were entered.")
return []
selected = [dist_files[i] for i in indices]
return selected
def backup_file(filepath):
timestamp = datetime.now().strftime("d%d_m%m_y%Y_%Hh_%Mm_%Ss")
bakpath = f"{filepath}({timestamp}).bak"
try:
shutil.copy2(filepath, bakpath)
print(f" Backup created: {bakpath}")
except (OSError, IOError) as e:
print(f"[ERROR] Failed to create backup '{bakpath}': {e}")
return False
return True
def parse_conf(filepath):
# Returns a dict of key: (line, [preceding_comments])
try:
with open(filepath, encoding="utf-8") as f:
lines = f.readlines()
except (OSError, IOError) as e:
print(f"[ERROR] Failed to read config file '{filepath}': {e}")
return None
conf = {}
comments = []
for line in lines:
stripped = line.strip()
if not stripped or stripped.startswith("#"):
comments.append(line)
continue
if stripped.startswith("[") and stripped.endswith("]"):
# Ignore [headers of configs]
comments.clear()
continue
if stripped.count("=") == 1:
key, value = [s.strip() for s in stripped.split("=", 1)]
if '#' in value:
value = value.split('#', 1)[0].rstrip()
if key:
conf[key] = (f"{key} = {value}\n", comments.copy())
comments.clear()
continue
return conf
def find_missing_keys(dist_conf, user_conf):
missing = {}
for key, (line, comments) in dist_conf.items():
if key not in user_conf:
missing[key] = (line, comments)
return missing
def update_conf(dist_path, conf_path, skip_prompts=False):
if not os.path.exists(conf_path):
print(f" User config {conf_path} does not exist, skipping.")
return False
dist_conf = parse_conf(dist_path)
user_conf = parse_conf(conf_path)
missing = find_missing_keys(dist_conf, user_conf)
if not missing:
print(" No new config options to add.")
return False
updated = False
lines_to_add = []
for key, (line, comments) in missing.items():
if skip_prompts:
lines_to_add.append((comments, line, key))
else:
print("\n" + "".join(comments if comments else []) + line, end="")
add = input(f" Add {key} to config? (y/n): ").strip().lower()
if add in ("", "y", "yes"):
lines_to_add.append((comments, line, key))
else:
print(f" Skipped {key}.")
if lines_to_add:
backup_file(conf_path)
# Write using system's default line ending to avoid mixing CRLF and LF in the config file
newline = os.linesep.encode('utf-8')
with open(conf_path, "ab") as f:
for comments, line, key in lines_to_add:
if comments:
for c in comments:
f.write(c.rstrip('\r\n').encode('utf-8') + newline)
f.write(line.rstrip('\r\n').encode('utf-8') + newline)
print(f" Added {key}.")
updated = True
return updated
def update_server_config(config_name, config_dir, skip_prompts=False):
dist_path = os.path.join(config_dir, f"{config_name}.conf.dist")
conf_path = os.path.join(config_dir, f"{config_name}.conf")
if not os.path.exists(dist_path):
print(f" Distribution config {dist_path} does not exist, skipping.")
return False
print(f"\nProcessing {config_name}.conf ...")
return update_conf(dist_path, conf_path, skip_prompts)
def update_modules(config_dir, selected_only=False, skip_prompts=False):
modules_dir = os.path.join(config_dir, "modules")
if not os.path.exists(modules_dir):
print(f" Modules directory {modules_dir} does not exist, skipping.")
return
dist_files = find_modules(modules_dir)
if not dist_files:
print(" No .conf.dist files found in modules folder.")
return
if selected_only:
selected = prompt_module_selection(dist_files)
if not selected:
print(" No modules selected.")
return
else:
selected = dist_files
for dist_fname in selected:
module = dist_fname[:-5] # Removes ".dist"
conf_fname = module # e.g., mod_x.conf
dist_path = os.path.join(modules_dir, dist_fname)
conf_path = os.path.join(modules_dir, conf_fname)
print(f"\nProcessing {conf_fname} ...")
update_conf(dist_path, conf_path, skip_prompts)
def show_main_menu():
print(f"\nAzerothCore Config Updater/Merger (v. {VERSION})")
print("--------------------------")
print("1 - Update Auth Config")
print("2 - Update World Config")
print("3 - Update Auth and World Configs")
print("4 - Update All Modules Configs")
print("5 - Update Modules (Selection) Configs")
print("0 - Quit")
return input("Select an option: ").strip()
def parse_args():
parser = argparse.ArgumentParser(description='AzerothCore Config Updater/Merger')
parser.add_argument('config_dir', nargs='?', default='.',
help='Path to configs directory (default: current directory)')
parser.add_argument('target', nargs='?',
choices=['auth', 'world', 'both', 'modules', 'modules-select'],
help='What to update: auth, world, both, modules, modules-select')
parser.add_argument('-y', '--yes', action='store_true',
help='Automatically answer yes to all prompts')
parser.add_argument('--version', action='version', version=f'%(prog)s {VERSION}')
return parser.parse_args()
def main():
args = parse_args()
# If no target specified, run interactive mode
if args.target is None:
print(f"AzerothCore Config Updater/Merger (v. {VERSION})")
print("==========================")
config_dir = input("Enter the path to your configs folder (Default / Empty will use the folder where this script is located): ").strip()
if not config_dir:
config_dir = "."
if not os.path.isdir(config_dir):
print("Provided path is not a valid directory.")
return
while True:
choice = show_main_menu()
if choice == "1":
update_server_config("authserver", config_dir)
elif choice == "2":
update_server_config("worldserver", config_dir)
elif choice == "3":
update_server_config("authserver", config_dir)
update_server_config("worldserver", config_dir)
elif choice == "4":
update_modules(config_dir, selected_only=False)
elif choice == "5":
update_modules(config_dir, selected_only=True)
elif choice == "0":
print("Goodbye!")
break
else:
print("Invalid selection. Please try again.")
else:
# CLI mode
config_dir = args.config_dir
if not os.path.isdir(config_dir):
print(f"Error: Directory '{config_dir}' does not exist.")
sys.exit(1)
print(f"AzerothCore Config Updater/Merger (v. {VERSION}) - CLI Mode")
print(f"Config directory: {os.path.abspath(config_dir)}")
print(f"Target: {args.target}")
if args.yes:
print("Skip prompts: Yes")
if args.target == 'auth':
update_server_config("authserver", config_dir, args.yes)
elif args.target == 'world':
update_server_config("worldserver", config_dir, args.yes)
elif args.target == 'both':
update_server_config("authserver", config_dir, args.yes)
update_server_config("worldserver", config_dir, args.yes)
elif args.target == 'modules':
update_modules(config_dir, selected_only=False, skip_prompts=args.yes)
elif args.target == 'modules-select':
if args.yes:
print("Warning: --yes flag ignored for modules-select (requires interactive selection)")
update_modules(config_dir, selected_only=True, skip_prompts=False)
if __name__ == "__main__":
main()

View File

@@ -258,4 +258,4 @@ COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build \
/azerothcore/env/dist/bin/vmap4_assembler /azerothcore/env/dist/bin/vmap4_assembler
COPY --chown=$DOCKER_USER:$DOCKER_USER --from=build \
/azerothcore/env/dist/bin/vmap4_extractor /azerothcore/env/dist/bin/vmap4_extractor
/azerothcore/env/dist/bin/vmap4_extractor /azerothcore/env/dist/bin/vmap4_extractor

View File

@@ -1,5 +1,5 @@
#
# Copyright (C) 2016+ AzerothCore <www.azerothcore.org>
# Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license: https://github.com/azerothcore/azerothcore-wotlk/blob/master/LICENSE
# Copyright (C) 2021+ WarheadCore <https://github.com/WarheadCore>
#
# This file is free software; as a special exception the author gives
@@ -106,6 +106,7 @@ option(WITH_DYNAMIC_LINKING "Enable dynamic library linking."
option(WITH_STRICT_DATABASE_TYPE_CHECKS "Enable strict checking of database field value accessors" 0)
option(WITHOUT_METRICS "Disable metrics reporting (i.e. InfluxDB and Grafana)" 0)
option(WITH_DETAILED_METRICS "Enable detailed metrics reporting (i.e. time each session takes to update)" 0)
option(TOOL_CONFIG_MERGER "Install the Python config merger tool alongside config files" 0)
CheckApplicationsBuildList()
CheckToolsBuildList()

Some files were not shown because too many files have changed in this diff Show More