diff --git a/.env.template b/.env.template index 6953b63..66c0a17 100644 --- a/.env.template +++ b/.env.template @@ -441,3 +441,260 @@ PMA_MAX_EXECUTION_TIME=600 KEIRA3_EXTERNAL_PORT=4201 KEIRA_DATABASE_HOST=ac-mysql KEIRA_DATABASE_PORT=3306 + +# Auto-generated defaults for new modules +MODULE_1V1_PVP_SYSTEM=0 +MODULE_ACI=0 +MODULE_ACORE_API=0 +MODULE_ACORE_BG_END_ANNOUNCER=0 +MODULE_ACORE_BOX=0 +MODULE_ACORE_CLIENT=0 +MODULE_ACORE_CMS=0 +MODULE_ACORE_ELUNATEST=0 +MODULE_ACORE_LINUX_RESTARTER=0 +MODULE_ACORE_LUA_UNLIMITED_AMMO=0 +MODULE_ACORE_LXD_IMAGE=0 +MODULE_ACORE_MALL=0 +MODULE_ACORE_MINI_REG_PAGE=0 +MODULE_ACORE_NODE_SERVER=0 +MODULE_ACORE_PWA=0 +MODULE_ACORE_SOD=0 +MODULE_ACORE_SUMMONALL=0 +MODULE_ACORE_TILEMAP=0 +MODULE_ACORE_ZONEDEBUFF=0 +MODULE_ACREBUILD=0 +MODULE_ADDON_FACTION_FREE_UNIT_POPUP=0 +MODULE_AOE_LOOT_MERGE=0 +MODULE_APAW=0 +MODULE_ARENA_SPECTATOR=0 +MODULE_ARENA_STATS=0 +MODULE_ATTRIBOOST=0 +MODULE_AUTO_CHECK_RESTART=0 +MODULE_AZEROTHCOREADMIN=0 +MODULE_AZEROTHCOREDISCORDBOT=0 +MODULE_AZEROTHCORE_ADDITIONS=0 +MODULE_AZEROTHCORE_ALL_STACKABLES_200=0 +MODULE_AZEROTHCORE_ANSIBLE=0 +MODULE_AZEROTHCORE_ARMORY=0 +MODULE_AZEROTHCORE_LUA_ARENA_MASTER_COMMAND=0 +MODULE_AZEROTHCORE_LUA_DEMON_MORPHER=0 +MODULE_AZEROTHCORE_PASSRESET=0 +MODULE_AZEROTHCORE_REGISTRATION_PAGE=0 +MODULE_AZEROTHCORE_SERVER_MANAGER=0 +MODULE_AZEROTHCORE_TRIVIA_SYSTEM=0 +MODULE_AZEROTHCORE_WEBSITE=0 +MODULE_AZEROTHCORE_WOWHEAD_MOD_LUA=0 +MODULE_AZTRAL_AIRLINES=0 +MODULE_BGQUEUECHECKER=0 +MODULE_BG_QUEUE_ABUSER_VIEWER=0 +MODULE_BLIZZLIKE_TELES=0 +MODULE_BREAKINGNEWSOVERRIDE=0 +MODULE_CLASSIC_MODE=0 +MODULE_CODEBASE=0 +MODULE_CONFIG_RATES=0 +MODULE_DEVJOESTAR=0 +MODULE_ELUNA_WOW_SCRIPTS=0 +MODULE_EXTENDEDXP=0 +MODULE_EXTENDED_HOLIDAYS_LUA=0 +MODULE_FFAFIX=0 +MODULE_FLAG_CHECKER=0 +MODULE_GUILDBANKTABFEEFIXER=0 +MODULE_HARDMODE=0 +MODULE_HEARTHSTONE_COOLDOWNS=0 +MODULE_ITEMBROADCASTGUILDCHAT=0 +MODULE_KARGATUM_SYSTEM=0 +MODULE_KEIRA3=0 +MODULE_LOTTERY_CHANCE_INSTANT=0 +MODULE_LUA_AIO_MODRATE_EXP=0 +MODULE_LUA_COMMAND_PLUS=0 +MODULE_LUA_ITEMUPGRADER_TEMPLATE=0 +MODULE_LUA_NOTONLY_RANDOMMORPHER=0 +MODULE_LUA_PARAGON_ANNIVERSARY=0 +MODULE_LUA_PVP_TITLES_RANKING_SYSTEM=0 +MODULE_LUA_SCRIPTS=0 +MODULE_LUA_SUPER_BUFFERNPC=0 +MODULE_LUA_VIP=0 +MODULE_MOD_ACCOUNTBOUND=0 +MODULE_MOD_ACCOUNT_VANITY_PETS=0 +MODULE_MOD_ACTIVATEZONES=0 +MODULE_MOD_AH_BOT_PLUS=0 +MODULE_MOD_ALPHA_REWARDS=0 +MODULE_MOD_AOE_LOOT=0 +MODULE_MOD_APPRECIATION=0 +MODULE_MOD_ARENA_TIGERSPEAK=0 +MODULE_MOD_ARENA_TOLVIRON=0 +MODULE_MOD_AUTOFISH=0 +MODULE_MOD_AUTO_RESURRECT=0 +MODULE_MOD_BG_BATTLE_FOR_GILNEAS=0 +MODULE_MOD_BG_ITEM_REWARD=0 +MODULE_MOD_BG_REWARD=0 +MODULE_MOD_BG_TWINPEAKS=0 +MODULE_MOD_BIENVENIDA=0 +MODULE_MOD_BLACK_MARKET=0 +MODULE_MOD_BRAWLERS_GUILD=0 +MODULE_MOD_BUFF_COMMAND=0 +MODULE_MOD_CFPVE=0 +MODULE_MOD_CHANGEABLESPAWNRATES=0 +MODULE_MOD_CHARACTER_SERVICES=0 +MODULE_MOD_CHARACTER_TOOLS=0 +MODULE_MOD_CHAT_TRANSMITTER=0 +MODULE_MOD_CHROMIE_XP=0 +MODULE_MOD_CONGRATS_ON_LEVEL=0 +MODULE_MOD_COSTUMES=0 +MODULE_MOD_CRAFTSPEED=0 +MODULE_MOD_CTA_SWITCH=0 +MODULE_MOD_DEAD_MEANS_DEAD=0 +MODULE_MOD_DEATHROLL_AIO=0 +MODULE_MOD_DEMONIC_PACT_CLASSIC=0 +MODULE_MOD_DESERTION_WARNINGS=0 +MODULE_MOD_DISCORD_ANNOUNCE=0 +MODULE_MOD_DISCORD_WEBHOOK=0 +MODULE_MOD_DMF_SWITCH=0 +MODULE_MOD_DUNGEONMASTER=0 +MODULE_MOD_DUNGEON_SCALE=0 +MODULE_MOD_DYNAMIC_LOOT_RATES=0 +MODULE_MOD_DYNAMIC_RESURRECTIONS=0 +MODULE_MOD_ENCOUNTER_LOGS=0 +MODULE_MOD_FACTION_FREE=0 +MODULE_MOD_FIRSTLOGIN_AIO=0 +MODULE_MOD_FLIGHTMASTER_WHISTLE=0 +MODULE_MOD_FORTIS_AUTOBALANCE=0 +MODULE_MOD_GAME_STATE_API=0 +MODULE_MOD_GEDDON_BINDING_SHARD=0 +MODULE_MOD_GHOST_SPEED=0 +MODULE_MOD_GLOBALCHAT=0 +MODULE_MOD_GM_COMMANDS=0 +MODULE_MOD_GOMOVE=0 +MODULE_MOD_GROWNUP=0 +MODULE_MOD_GUILDFUNDS=0 +MODULE_MOD_GUILD_VILLAGE=0 +MODULE_MOD_GUILD_ZONE_SYSTEM=0 +MODULE_MOD_HARDCORE=0 +MODULE_MOD_HARDCORE_MAKGORA=0 +MODULE_MOD_HARD_MODES=0 +MODULE_MOD_HIGH_RISK_SYSTEM=0 +MODULE_MOD_HUNTER_PET_STORAGE=0 +MODULE_MOD_IMPROVED_BANK=0 +MODULE_MOD_INCREMENT_CACHE_VERSION=0 +MODULE_MOD_INDIVIDUAL_XP=0 +MODULE_MOD_INFLUXDB=0 +MODULE_MOD_INSTANCE_TOOLS=0 +MODULE_MOD_IP2NATION=0 +MODULE_MOD_IP_TRACKER=0 +MODULE_MOD_ITEMLEVEL=0 +MODULE_MOD_ITEM_UPGRADE=0 +MODULE_MOD_JUNK_TO_GOLD=0 +MODULE_MOD_LEARNSPELLS=0 +MODULE_MOD_LEECH=0 +MODULE_MOD_LEVEL_15_BOOST=0 +MODULE_MOD_LEVEL_ONE_MOUNTS=0 +MODULE_MOD_LEVEL_REWARDS=0 +MODULE_MOD_LOGIN_REWARDS=0 +MODULE_MOD_LOW_LEVEL_ARENA=0 +MODULE_MOD_LOW_LEVEL_RBG=0 +MODULE_MOD_MISSING_OBJECTIVES=0 +MODULE_MOD_MONEY_FOR_KILLS=0 +MODULE_MOD_MOUNTS_ON_ACCOUNT=0 +MODULE_MOD_MOUNT_REQUIREMENTS=0 +MODULE_MOD_MULTI_VENDOR=0 +MODULE_MOD_MYTHIC_PLUS=0 +MODULE_MOD_NOCLIP=0 +MODULE_MOD_NORDF=0 +MODULE_MOD_NOTIFY_MUTED=0 +MODULE_MOD_NO_FARMING=0 +MODULE_MOD_NO_HEARTHSTONE_COOLDOWN=0 +MODULE_MOD_NPC_ALL_MOUNTS=0 +MODULE_MOD_NPC_CODEBOX=0 +MODULE_MOD_NPC_GAMBLER=0 +MODULE_MOD_NPC_MORPH=0 +MODULE_MOD_NPC_PROMOTION=0 +MODULE_MOD_NPC_SERVICES=0 +MODULE_MOD_NPC_SPECTATOR=0 +MODULE_MOD_NPC_SUBCLASS=0 +MODULE_MOD_OBJSCALE=0 +MODULE_MOD_OLLAMA_BOT_BUDDY=0 +MODULE_MOD_ONY_NAXX_LOGOUT_TELEPORT=0 +MODULE_MOD_PEACEKEEPER=0 +MODULE_MOD_PETEQUIP=0 +MODULE_MOD_PREMIUM=0 +MODULE_MOD_PREMIUM_LIB=0 +MODULE_MOD_PROFESSION_EXPERIENCE=0 +MODULE_MOD_PROFSPECS=0 +MODULE_MOD_PTR_TEMPLATE=0 +MODULE_MOD_PVPSCRIPT=0 +MODULE_MOD_PVPSTATS_ANNOUNCER=0 +MODULE_MOD_PVP_ZONES=0 +MODULE_MOD_QUEST_LOOT_PARTY=0 +MODULE_MOD_QUEST_STATUS=0 +MODULE_MOD_QUEUE_LIST_CACHE=0 +MODULE_MOD_QUICKBALANCE=0 +MODULE_MOD_QUICK_RESPAWN=0 +MODULE_MOD_RACIAL_TRAIT_SWAP=0 +MODULE_MOD_RARE_DROPS=0 +MODULE_MOD_RDF_EXPANSION=0 +MODULE_MOD_REAL_ONLINE=0 +MODULE_MOD_RECRUIT_FRIEND=0 +MODULE_MOD_REFORGING=0 +MODULE_MOD_RESET_RAID_COOLDOWNS=0 +MODULE_MOD_REWARD_PLAYED_TIME_IMPROVED=0 +MODULE_MOD_REWARD_SHOP=0 +MODULE_MOD_SELL_ITEMS=0 +MODULE_MOD_SETXPBAR=0 +MODULE_MOD_SHARE_MOUNTS=0 +MODULE_MOD_SPAWNPOINTS=0 +MODULE_MOD_SPEC_REWARD=0 +MODULE_MOD_SPELLREGULATOR=0 +MODULE_MOD_SPONSORSHIP=0 +MODULE_MOD_STARTER_GUILD=0 +MODULE_MOD_STARTER_WANDS=0 +MODULE_MOD_STARTING_PET=0 +MODULE_MOD_STREAMS=0 +MODULE_MOD_SWIFT_TRAVEL_FORM=0 +MODULE_MOD_TALENTBUTTON=0 +MODULE_MOD_TRADE_ITEMS_FILTER=0 +MODULE_MOD_TREASURE=0 +MODULE_MOD_TRIAL_OF_FINALITY=0 +MODULE_MOD_VANILLA_NAXXRAMAS=0 +MODULE_MOD_WARLOCK_PET_RENAME=0 +MODULE_MOD_WEAPON_VISUAL=0 +MODULE_MOD_WEEKENDBONUS=0 +MODULE_MOD_WEEKEND_XP=0 +MODULE_MOD_WHOLOGGED=0 +MODULE_MORZA_ISLAND_ARAXIA_SERVER=0 +MODULE_MPQ_TOOLS_OSX=0 +MODULE_MYSQL_TOOLS=0 +MODULE_NODEROUTER=0 +MODULE_OPENPROJECTS=0 +MODULE_PLAYERTELEPORT=0 +MODULE_PORTALS_IN_ALL_CAPITALS=0 +MODULE_PRESTIGE=0 +MODULE_PRESTIGIOUS=0 +MODULE_PVPSTATS=0 +MODULE_RAIDTELEPORTER=0 +MODULE_RECACHE=0 +MODULE_RECYCLEDITEMS=0 +MODULE_REWARD_SYSTEM=0 +MODULE_SAHTOUTCMS=0 +MODULE_SERVER_STATUS=0 +MODULE_SETXPBAR=0 +MODULE_SPELLSCRIPT_REFACTOR_TOOL=0 +MODULE_SQL_NPC_TELEPORTER=0 +MODULE_STATBOOSTERREROLLER=0 +MODULE_STRAPI_AZEROTHCORE=0 +MODULE_TBC_RAID_HP_RESTORATION=0 +MODULE_TELEGRAM_AUTOMATED_DB_BACKUP=0 +MODULE_TOOL_TC_MIGRATION=0 +MODULE_TRANSMOG_ADDONS=0 +MODULE_UPDATE_MOB_LEVEL_TO_PLAYER_AND_RANDOM_ITEM_STATS=0 +MODULE_UPDATE_MODULE_CONFS=0 +MODULE_WEB_CHARACTER_MIGRATION_TOOL=0 +MODULE_WEEKLY_ARMOR_VENDOR_BLACK_MARKET=0 +MODULE_WORLD_BOSS_RANK=0 +MODULE_WOWDATABASEEDITOR=0 +MODULE_WOWLAUNCHER_DELPHI=0 +MODULE_WOWSIMS_TO_COMMANDS=0 +MODULE_WOW_CLIENT_PATCHER=0 +MODULE_WOW_ELUNA_TS_MODULE=0 +MODULE_WOW_SERVER_RELAY=0 +MODULE_WOW_STATISTICS=0 +MODULE_WRATH_OF_THE_VANILLA=0 diff --git a/.gitignore b/.gitignore index 2e0b97f..81af852 100644 --- a/.gitignore +++ b/.gitignore @@ -11,10 +11,12 @@ local-storage/ images/ node_modules/ .mcp*/ -scripts/__pycache__/ +scripts/__pycache__/* +scripts/python/__pycache__/* .env package-lock.json package.json todo.md .gocache/ -.module-ledger/ \ No newline at end of file +.module-ledger/ +deploy.log \ No newline at end of file diff --git a/config/module-manifest.json b/config/module-manifest.json index a732fc8..4fb20d3 100644 --- a/config/module-manifest.json +++ b/config/module-manifest.json @@ -4,28 +4,36 @@ "key": "MODULE_PLAYERBOTS", "name": "mod-playerbots", "repo": "https://github.com/mod-playerbots/mod-playerbots.git", - "description": "Adds scriptable playerbot characters that can form dungeon parties, raid, and PvP with humans", - "type": "data", - "notes": "Installs SQL/config assets; core functionality is built into playerbot images", + "description": "AzerothCore Playerbots Module", + "type": "cpp", + "notes": "Installs SQL/config assets; core functionality is built into playerbot images \nDiscovered via GitHub topic 'azerothcore-module'", "post_install_hooks": [], "config_cleanup": [ "playerbots.conf*" ], - "category": "automation", + "category": "uncategorized", "order": 1, - "special_message": "\ud83e\udd16 Foundation module: Enables AI-powered companions for solo and group content" + "special_message": "\ud83e\udd16 Foundation module: Enables AI-powered companions for solo and group content", + "status": "active", + "requires": [], + "last_modified": "2025-11-19T20:34:54Z" }, { "key": "MODULE_AOE_LOOT", "name": "mod-aoe-loot", "repo": "https://github.com/azerothcore/mod-aoe-loot.git", - "description": "Lets characters loot multiple corpses with one click for faster farming", + "description": "Loot all bodies at once!", "type": "cpp", "post_install_hooks": [], "config_cleanup": [ "mod_aoe_loot.conf*" ], - "category": "quality-of-life" + "category": "uncategorized", + "status": "active", + "order": 5000, + "requires": [], + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2025-10-15T04:15:03Z" }, { "key": "MODULE_LEARN_SPELLS", @@ -37,31 +45,42 @@ "config_cleanup": [ "mod_learnspells.conf*" ], - "category": "quality-of-life" + "category": "quality-of-life", + "last_modified": "2025-03-02T18:33:46Z" }, { "key": "MODULE_FIREWORKS", "name": "mod-fireworks-on-level", "repo": "https://github.com/azerothcore/mod-fireworks-on-level.git", - "description": "Spawns celebratory fireworks whenever a player dings a new level", + "description": "Shoots fireworks in the air when a player reaches specified levels.", "type": "cpp", "post_install_hooks": [], "config_cleanup": [ "mod_fireworks.conf*" ], - "category": "quality-of-life" + "category": "uncategorized", + "status": "active", + "order": 5000, + "requires": [], + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2025-02-27T14:44:29Z" }, { "key": "MODULE_INDIVIDUAL_PROGRESSION", "name": "mod-individual-progression", "repo": "https://github.com/ZhengPeiRu21/mod-individual-progression.git", - "description": "Tracks each character through Vanilla \u2192 TBC \u2192 WotLK progression, unlocking content sequentially", + "description": "AzerothCore Individual Progression Module", "type": "cpp", "post_install_hooks": [], "config_cleanup": [ "individual_progression.conf*" ], - "category": "progression" + "category": "uncategorized", + "status": "active", + "order": 5000, + "requires": [], + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2025-11-21T05:17:56Z" }, { "key": "MODULE_AHBOT", @@ -75,7 +94,8 @@ ], "category": "economy", "status": "blocked", - "block_reason": "Linker error: Missing Addmod_ahbotScripts() function (use MODULE_LUA_AH_BOT instead)" + "block_reason": "Linker error: Missing Addmod_ahbotScripts() function (use MODULE_LUA_AH_BOT instead)", + "last_modified": "2025-11-09T00:34:05Z" }, { "key": "MODULE_AUTOBALANCE", @@ -86,8 +106,13 @@ "config_cleanup": [ "AutoBalance.conf*" ], - "description": "Adjusts creature health and damage in real time to keep fights tuned for the current party size", - "category": "gameplay-enhancement" + "description": "Module for AzerothCore(MaNGOS -> TrinityCore -> SunwellCore)", + "category": "uncategorized", + "status": "active", + "order": 5000, + "requires": [], + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2025-08-29T16:10:37Z" }, { "key": "MODULE_TRANSMOG", @@ -98,8 +123,13 @@ "config_cleanup": [ "transmog.conf*" ], - "description": "Adds a transmogrification vendor so players can restyle gear without changing stats", - "category": "npc-service" + "description": "Plug&Play transmog module for AzerothCore, based on Rochet2 works", + "category": "uncategorized", + "status": "active", + "order": 5000, + "requires": [], + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2025-07-26T12:58:17Z" }, { "key": "MODULE_NPC_BUFFER", @@ -110,8 +140,13 @@ "config_cleanup": [ "npc_buffer.conf*" ], - "description": "Provides a ready-to-use buff NPC who hands out class buffs, food, and utility spells", - "category": "npc-service" + "description": "A NPC that buffs players", + "category": "uncategorized", + "status": "active", + "order": 5000, + "requires": [], + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2025-02-26T20:26:34Z" }, { "key": "MODULE_DYNAMIC_XP", @@ -123,7 +158,8 @@ "Individual-XP.conf*" ], "description": "Tweaks XP gain based on population or custom rules to keep leveling flexible", - "category": "progression" + "category": "progression", + "last_modified": "2025-11-02T12:21:50Z" }, { "key": "MODULE_SOLO_LFG", @@ -135,7 +171,8 @@ "SoloLfg.conf*" ], "description": "A solo-friendly queue that lets every player run dungeons without needing a premade group", - "category": "quality-of-life" + "category": "quality-of-life", + "last_modified": "2025-02-27T13:46:41Z" }, { "key": "MODULE_1V1_ARENA", @@ -147,7 +184,8 @@ "1v1arena.conf*" ], "description": "Creates a structured 1v1 ranked arena ladder for duel enthusiasts", - "category": "pvp" + "category": "pvp", + "last_modified": "2025-02-22T06:48:59Z" }, { "key": "MODULE_PHASED_DUELS", @@ -159,7 +197,8 @@ "phasedduels.conf*" ], "description": "Moves duelers into their own phase to block interference and griefing", - "category": "pvp" + "category": "pvp", + "last_modified": "2025-08-09T04:35:40Z" }, { "key": "MODULE_BREAKING_NEWS", @@ -171,7 +210,8 @@ "breaking_news.conf*" ], "description": "Replaces the client breaking-news panel with server-managed announcements", - "category": "social" + "category": "social", + "last_modified": "2025-03-02T21:02:40Z" }, { "key": "MODULE_BOSS_ANNOUNCER", @@ -183,7 +223,8 @@ "boss_announcer.conf*" ], "description": "Broadcasts dramatic messages when raid bosses fall to your players", - "category": "social" + "category": "social", + "last_modified": "2025-02-27T07:31:57Z" }, { "key": "MODULE_ACCOUNT_ACHIEVEMENTS", @@ -195,7 +236,8 @@ "account_achievements.conf*" ], "description": "Shares achievements across characters on the same account for persistent milestones", - "category": "account-wide" + "category": "account-wide", + "last_modified": "2025-02-18T12:14:58Z" }, { "key": "MODULE_AUTO_REVIVE", @@ -207,7 +249,8 @@ "AutoRevive.conf*" ], "description": "Automatically resurrects characters on death\u2014handy for casual PvE or testing realms", - "category": "quality-of-life" + "category": "quality-of-life", + "last_modified": "2025-02-27T14:44:24Z" }, { "key": "MODULE_GAIN_HONOR_GUARD", @@ -219,7 +262,8 @@ "GainHonorGuard.conf*" ], "description": "Awards honor when players kill city guards, spicing up world PvP raids", - "category": "pvp" + "category": "pvp", + "last_modified": "2025-02-27T06:28:21Z" }, { "key": "MODULE_ELUNA", @@ -235,7 +279,8 @@ "description": "Adds Eluna Lua scripting engine for creating custom gameplay mechanics", "category": "scripting", "order": 9998, - "special_message": "\u26a1 Advanced scripting: Required by many Lua-based modules. Enable this first if you plan to use scripted features" + "special_message": "\u26a1 Advanced scripting: Required by many Lua-based modules. Enable this first if you plan to use scripted features", + "last_modified": "2025-11-14T16:49:36Z" }, { "key": "MODULE_TIME_IS_TIME", @@ -246,8 +291,13 @@ "config_cleanup": [ "mod-time_is_time.conf*" ], - "description": "Adds experimental time-twisting mechanics suited for custom events", - "category": "gameplay-enhancement" + "description": "Azerothcore Module to adjust the Da/Night time cycle for the World of Warcraft 3.3.5a", + "category": "uncategorized", + "status": "active", + "order": 5000, + "requires": [], + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2025-06-08T07:42:36Z" }, { "key": "MODULE_POCKET_PORTAL", @@ -261,7 +311,8 @@ "pocketportal.conf*" ], "description": "Gives players a portal gadget for quick travel to configured destinations", - "category": "minigame" + "category": "minigame", + "last_modified": "2025-08-01T19:39:20Z" }, { "key": "MODULE_RANDOM_ENCHANTS", @@ -273,7 +324,8 @@ "RandomEnchants.conf*" ], "description": "Rolls randomized stat bonuses on loot to add Diablo-style gear chasing", - "category": "economy" + "category": "economy", + "last_modified": "2025-07-24T20:24:54Z" }, { "key": "MODULE_SOLOCRAFT", @@ -285,7 +337,8 @@ "Solocraft.conf*" ], "description": "Automatically scales dungeon and raid encounters for solo players or small teams", - "category": "gameplay-enhancement" + "category": "gameplay-enhancement", + "last_modified": "2025-11-03T17:49:31Z" }, { "key": "MODULE_PVP_TITLES", @@ -296,11 +349,15 @@ "config_cleanup": [ "mod_pvptitles.conf*" ], - "description": "Restores classic honor titles with a configurable ranking ladder", + "description": "Display old PVP titles depending on honorable kills (starts at 50)", "requires": [ "MODULE_ELUNA" ], - "category": "pvp" + "category": "uncategorized", + "status": "active", + "order": 5000, + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2025-02-22T21:29:06Z" }, { "key": "MODULE_NPC_BEASTMASTER", @@ -313,8 +370,13 @@ "config_cleanup": [ "npc_beastmaster.conf*" ], - "description": "Adds an NPC who can teach, reset, and manage hunter pets for convenience", - "category": "npc-service" + "description": "An NPC that lets you tame beasts.", + "category": "uncategorized", + "status": "active", + "order": 5000, + "requires": [], + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2025-10-13T08:29:19Z" }, { "key": "MODULE_NPC_ENCHANTER", @@ -325,8 +387,13 @@ "config_cleanup": [ "npc_enchanter.conf*" ], - "description": "Introduces an enchanting vendor who applies enchants directly for a fee", - "category": "npc-service" + "description": "Creates an NPC that enchants the player's gear", + "category": "uncategorized", + "status": "active", + "order": 5000, + "requires": [], + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2025-02-27T14:26:57Z" }, { "key": "MODULE_INSTANCE_RESET", @@ -338,7 +405,8 @@ "instance-reset.conf*" ], "description": "Adds commands to reset instances quickly\u2014useful for testing or events", - "category": "quality-of-life" + "category": "quality-of-life", + "last_modified": "2025-03-02T18:34:07Z" }, { "key": "MODULE_LEVEL_GRANT", @@ -351,8 +419,12 @@ "config_cleanup": [ "levelGrant.conf*" ], - "description": "Enables leveling exclusively through questing by awarding tokens after quest completion", - "category": "progression" + "description": "AzerothCore Module that allows quests to grant leveling tokens", + "category": "uncategorized", + "order": 5000, + "requires": [], + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2023-07-23T20:04:01Z" }, { "key": "MODULE_ARAC", @@ -363,9 +435,14 @@ "config_cleanup": [ "arac.conf*" ], - "description": "Unlocks every race/class pairing so players can roll any combination", - "category": "customization", - "server_dbc_path": "patch-contents/DBFilesContent" + "description": "Module & patches - \"All Races All Classes (ARAC)\"", + "category": "uncategorized", + "server_dbc_path": "patch-contents/DBFilesContent", + "status": "active", + "order": 5000, + "requires": [], + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2025-07-25T02:21:42Z" }, { "key": "MODULE_ASSISTANT", @@ -373,8 +450,14 @@ "repo": "https://github.com/noisiver/mod-assistant.git", "type": "cpp", "post_install_hooks": [], - "description": "Spawns an all-purpose assistant NPC with heirlooms, professions, and convenience commands", - "category": "npc-service" + "description": "The assistant is a npc spawned in the world and lets a player obtain heirlooms, glyphs, gems, utilities like faction change and race change. The player can also spend gold in order to increase their profession skills", + "category": "uncategorized", + "status": "active", + "order": 5000, + "requires": [], + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2024-11-30T19:14:24Z" }, { "key": "MODULE_REAGENT_BANK", @@ -382,12 +465,18 @@ "repo": "https://github.com/ZhengPeiRu21/mod-reagent-bank.git", "type": "cpp", "post_install_hooks": [], - "description": "Lets players stash crafting reagents with a dedicated banker NPC", - "category": "npc-service" + "description": "Reagent Bank Module for AzerothCore", + "category": "uncategorized", + "status": "active", + "order": 5000, + "requires": [], + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2024-06-20T20:22:30Z" }, { "key": "MODULE_BLACK_MARKET_AUCTION_HOUSE", - "name": "mod-black-market", + "name": "Black-Market-Auction-House", "repo": "https://github.com/Youpeoples/Black-Market-Auction-House.git", "type": "lua", "requires": [ @@ -396,8 +485,14 @@ "post_install_hooks": [ "black-market-setup" ], - "description": "Backports the Mists-era Black Market Auction House via Eluna scripts", - "category": "economy" + "description": "A faithful backport of the Mists of Pandaria Black Market Auction House assets and functionality to AzerothCore 3.3.5 using the Eluna Lua engine", + "category": "scripting", + "status": "blocked", + "block_reason": "Runtime error: SQL error: MODULE_mod-black-market_creature.sql references removed 'StatsCount' column", + "order": 5000, + "config_cleanup": [], + "notes": "Disabled due to runtime error: SQL error: MODULE_mod-black-market_creature.sql references removed 'StatsCount' column", + "last_modified": "2025-06-26T14:23:47Z" }, { "key": "MODULE_CHALLENGE_MODES", @@ -406,9 +501,14 @@ "type": "cpp", "block_reason": "Compilation error: Override signature mismatch on OnGiveXP", "post_install_hooks": [], - "description": "Implements keystone-style timed runs with leaderboards and scaling modifiers", - "category": "gameplay-enhancement", - "status": "blocked" + "description": "Challenge Modes Module for AzerothCore", + "category": "uncategorized", + "status": "blocked", + "order": 5000, + "requires": [], + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2025-01-16T20:53:23Z" }, { "key": "MODULE_OLLAMA_CHAT", @@ -416,8 +516,14 @@ "repo": "https://github.com/DustinHendrickson/mod-ollama-chat.git", "type": "cpp", "post_install_hooks": [], - "description": "Connects playerbots to an Ollama LLM so they can chat with humans organically", - "category": "automation" + "description": " mod-ollama-chat is an AzerothCore module that enhances the Player Bots module by integrating external language model (LLM) support via the Ollama API.", + "category": "uncategorized", + "status": "active", + "order": 5000, + "requires": [], + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2025-11-16T16:48:05Z" }, { "key": "MODULE_PLAYER_BOT_LEVEL_BRACKETS", @@ -428,8 +534,13 @@ "MODULE_PLAYERBOTS" ], "post_install_hooks": [], - "description": "Keeps bot levels spread evenly across configured brackets", - "category": "automation" + "description": "The Bot Level Brackets module for AzerothCore ensures an even spread of player bots across configurable level ranges (brackets). It periodically monitors bot levels and automatically adjusts them by transferring bots from overpopulated brackets to those with a deficit. ", + "category": "uncategorized", + "status": "active", + "order": 5000, + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2025-11-16T16:42:06Z" }, { "key": "MODULE_STATBOOSTER", @@ -441,8 +552,13 @@ "post_install_hooks": [ "fix-statbooster-api" ], - "description": "Lets players refine gear stats by rerolling random enchantments with special materials", - "category": "gameplay-enhancement" + "description": "Random Enchant module for Azeroth Core", + "category": "uncategorized", + "order": 5000, + "requires": [], + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2024-09-16T06:19:08Z" }, { "key": "MODULE_DUNGEON_RESPAWN", @@ -452,8 +568,13 @@ "status": "blocked", "block_reason": "Upstream override signature mismatch (OnBeforeTeleport); awaiting fix", "post_install_hooks": [], - "description": "Teleports dead players back to the dungeon entrance instead of a distant graveyard", - "category": "gameplay-enhancement" + "description": "A module for AzerothCore that teleports players to the start of the dungeon upon death.", + "category": "uncategorized", + "order": 5000, + "requires": [], + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2023-05-28T06:34:10Z" }, { "key": "MODULE_SKELETON_MODULE", @@ -461,8 +582,14 @@ "repo": "https://github.com/azerothcore/skeleton-module.git", "type": "cpp", "post_install_hooks": [], - "description": "Provides a minimal AzerothCore module scaffold for building new features", - "category": "developer" + "description": "This is a template, a skeleton of a module to use as a base for your new modules.", + "category": "uncategorized", + "status": "active", + "order": 5000, + "requires": [], + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2025-09-20T18:40:21Z" }, { "key": "MODULE_BG_SLAVERYVALLEY", @@ -470,12 +597,16 @@ "repo": "https://github.com/Helias/mod-bg-slaveryvalley.git", "type": "cpp", "post_install_hooks": [], - "description": "Adds the Slavery Valley battleground complete with objectives and queue hooks", + "description": "Custom Battleground Slavery Valley as module", "requires": [ "MODULE_ELUNA" ], - "category": "content", - "notes": "DBC files in client-side/DBFilesClient are CLIENT-ONLY. Server data must be downloaded separately from releases." + "category": "uncategorized", + "notes": "DBC files in client-side/DBFilesClient are CLIENT-ONLY. Server data must be downloaded separately from releases. \nDiscovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "config_cleanup": [], + "last_modified": "2024-07-24T12:41:16Z" }, { "key": "MODULE_AZEROTHSHARD", @@ -484,9 +615,14 @@ "type": "cpp", "post_install_hooks": [], "block_reason": "Compilation error: Method name mismatch (getLevel vs GetLevel)", - "description": "Bundles AzerothShard tweaks: utility NPCs, scripted events, and gameplay improvements", - "category": "content", - "status": "blocked" + "description": "This module is a collection of custom features that have been implemented privately on AzerothShard project.", + "category": "uncategorized", + "status": "blocked", + "order": 5000, + "requires": [], + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2024-03-20T05:57:11Z" }, { "key": "MODULE_WORGOBLIN", @@ -494,25 +630,34 @@ "repo": "https://github.com/heyitsbench/mod-worgoblin.git", "type": "cpp", "post_install_hooks": [], - "description": "Enables Worgen and Goblin characters with DB/DBC adjustments", + "description": "Module for AzerothCore that adds Worgen and Goblin as playable races.", "requires": [ "MODULE_ELUNA" ], - "category": "customization", + "category": "uncategorized", "server_dbc_path": "data/patch/DBFilesClient", - "notes": "Requires client patch installation; server DBC files must be deployed to /azerothcore/data/dbc/" + "notes": "Requires client patch installation; server DBC files must be deployed to /azerothcore/data/dbc/ \nDiscovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "config_cleanup": [], + "last_modified": "2025-10-05T20:22:17Z" }, { "key": "MODULE_ELUNA_TS", "name": "eluna-ts", "repo": "https://github.com/azerothcore/eluna-ts.git", - "type": "tool", + "type": "cpp", "requires": [ "MODULE_ELUNA" ], "post_install_hooks": [], - "description": "Adds a TS-to-Lua workflow so Eluna scripts can be authored with modern tooling", - "category": "scripting" + "description": "Eluna-TS converts TS files to Lua scripts compatible with the Eluna system", + "category": "uncategorized", + "status": "active", + "order": 5000, + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2024-06-16T21:16:57Z" }, { "key": "MODULE_AIO", @@ -524,11 +669,12 @@ "description": "Pure Lua server-client communication system for bidirectional data transmission", "category": "scripting", "order": 9999, - "special_message": "\ud83c\udf09 UI Bridge: Enables advanced client-server interfaces. Most users don't need this unless using AIO-based modules" + "special_message": "\ud83c\udf09 UI Bridge: Enables advanced client-server interfaces. Most users don't need this unless using AIO-based modules", + "last_modified": "2025-07-22T20:57:39Z" }, { "key": "MODULE_ELUNA_SCRIPTS", - "name": "eluna-scripts", + "name": "Eluna-scripts", "repo": "https://github.com/Isidorsson/Eluna-scripts.git", "type": "lua", "requires": [ @@ -537,8 +683,13 @@ "post_install_hooks": [ "copy-standard-lua" ], - "description": "Collection of Lua scripts for creating custom gameplay mechanics and features", - "category": "scripting" + "description": "Lua script for eluna trinity core and azeroth core servers.", + "category": "scripting", + "status": "active", + "order": 5000, + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "last_modified": "2025-10-17T18:23:53Z" }, { "key": "MODULE_TRANSMOG_AIO", @@ -551,12 +702,16 @@ "post_install_hooks": [ "copy-aio-lua" ], - "description": "Transmogrification system built with AIO and Eluna for changing equipment appearance", - "category": "customization" + "description": "Transmog system created with AIO and Eluna for AzerothCore.", + "category": "scripting", + "status": "active", + "order": 5000, + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-lua'" }, { "key": "MODULE_EVENT_SCRIPTS", - "name": "acore-eventscripts", + "name": "Acore_eventScripts", "repo": "https://github.com/55Honey/Acore_eventScripts.git", "type": "lua", "requires": [ @@ -565,12 +720,17 @@ "post_install_hooks": [ "copy-standard-lua" ], - "description": "Lua scripts that spawn custom NPCs with scripted combat and community events", - "category": "scripting" + "description": "Lua script for Azerothcore with Eluna to spawn custom phased bosses and other toys.", + "category": "scripting", + "status": "active", + "order": 5000, + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "last_modified": "2025-02-19T08:29:02Z" }, { "key": "MODULE_LEVEL_UP_REWARD", - "name": "acore-levelupreward", + "name": "Acore_LevelUpReward", "repo": "https://github.com/55Honey/Acore_LevelUpReward.git", "type": "lua", "requires": [ @@ -579,8 +739,13 @@ "post_install_hooks": [ "copy-standard-lua" ], - "description": "Rewards players with in-game mail when reaching certain levels", - "category": "rewards" + "description": "LUA script for Azerothcore with ElunaLUA to reward players for reaching certain levels. Now with playercounter for official ranks.", + "category": "scripting", + "status": "active", + "order": 5000, + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "last_modified": "2024-10-02T18:50:07Z" }, { "key": "MODULE_ACCOUNTWIDE_SYSTEMS", @@ -593,12 +758,17 @@ "post_install_hooks": [ "copy-standard-lua" ], - "description": "Shares achievements, currency, mounts, and reputation across account characters", - "category": "account-wide" + "description": "AccountWide Systems using ALE in Azerothcore", + "category": "scripting", + "status": "active", + "order": 5000, + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "last_modified": "2025-11-13T23:47:54Z" }, { "key": "MODULE_EXCHANGE_NPC", - "name": "acore-exchangenpc", + "name": "Acore_ExchangeNpc", "repo": "https://github.com/55Honey/Acore_ExchangeNpc.git", "type": "lua", "requires": [ @@ -607,12 +777,17 @@ "post_install_hooks": [ "copy-standard-lua" ], - "description": "Spawns a customizable NPC vendor that exchanges materials based on settings", - "category": "economy" + "description": "Lua script for Azerothcore with ElunaLua to spawn an NPC and have it exchange mats as configured.", + "category": "scripting", + "status": "active", + "order": 5000, + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "last_modified": "2023-12-30T16:16:59Z" }, { "key": "MODULE_RECRUIT_A_FRIEND", - "name": "acore-recruitafriend", + "name": "Acore_RecruitAFriend", "repo": "https://github.com/55Honey/Acore_RecruitAFriend.git", "type": "lua", "requires": [ @@ -621,12 +796,17 @@ "post_install_hooks": [ "copy-standard-lua" ], - "description": "Implements Recruit-a-Friend system with rewards for reaching level milestones", - "category": "rewards" + "description": "Lua script for Azerothcore with Eluna Lua Engine for a standalone Recruit-a-friend system", + "category": "scripting", + "status": "active", + "order": 5000, + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "last_modified": "2025-02-26T15:49:10Z" }, { "key": "MODULE_PRESTIGE_DRAFT_MODE", - "name": "prestige-and-draft-mode", + "name": "Prestige-and-Draft-Mode", "repo": "https://github.com/Youpeoples/Prestige-and-Draft-Mode.git", "type": "lua", "requires": [ @@ -635,8 +815,13 @@ "post_install_hooks": [ "copy-standard-lua" ], - "description": "Enables characters to reset to level one for prestige rewards with optional spell selection", - "category": "rewards" + "description": "This is a minimally invasive mod for ACore 3.3.5 WoW Servers. Allowing for Prestige & Prestige Drafting options at max level.", + "category": "scripting", + "status": "active", + "order": 5000, + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2025-07-05T19:40:14Z" }, { "key": "MODULE_LUA_AH_BOT", @@ -649,12 +834,17 @@ "post_install_hooks": [ "copy-standard-lua" ], - "description": "Automated auction house bot for buying and selling items", - "category": "economy" + "description": "An Eluna implementation for a WotLK 3.3.5a compatible auction house bot.", + "category": "scripting", + "status": "active", + "order": 5000, + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "last_modified": "2025-11-17T14:07:25Z" }, { "key": "MODULE_HARDCORE_MODE", - "name": "lua-hardcoremode", + "name": "Lua-HardcoreMode", "repo": "https://github.com/HellionOP/Lua-HardcoreMode.git", "type": "lua", "requires": [ @@ -663,12 +853,17 @@ "post_install_hooks": [ "copy-standard-lua" ], - "description": "Implements hardcore mode system allowing activation via NPC token", - "category": "gameplay-enhancement" + "description": "Hardcore mode implementation for emulators running eluna engine.", + "category": "scripting", + "status": "active", + "order": 5000, + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "last_modified": "2023-01-29T13:49:28Z" }, { "key": "MODULE_NPCBOT_EXTENDED_COMMANDS", - "name": "npcbot-extended-commands", + "name": "Npcbot_Extended_Commands", "repo": "https://github.com/Day36512/Npcbot_Extended_Commands.git", "type": "lua", "requires": [ @@ -677,12 +872,17 @@ "post_install_hooks": [ "copy-standard-lua" ], - "description": "Provides gear templates, transmog clearing, and chat features for NPC bots", - "category": "automation" + "description": "Dumps level-based gear for bot usage based on level. Item list gathered by Upskirt. Also adds a couple extended bot commands.", + "category": "scripting", + "status": "active", + "order": 5000, + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "last_modified": "2024-04-04T16:21:19Z" }, { "key": "MODULE_MULTIVENDOR", - "name": "azerothcore-lua-multivendor", + "name": "AzerothCore-lua-MultiVendor", "repo": "https://github.com/Shadowveil-WotLK/AzerothCore-lua-MultiVendor.git", "type": "lua", "requires": [ @@ -691,14 +891,18 @@ "post_install_hooks": [ "copy-standard-lua" ], - "description": "Enables multiple NPC merchants with database integration", - "category": "npc-service", + "description": "Multivendor Module written in Lua for AzerothCore! If u want to use it on TrinityCore read the description!", + "category": "scripting", "status": "blocked", - "block_reason": "Linker error: Missing script loader function" + "block_reason": "Linker error: Missing script loader function", + "order": 5000, + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "last_modified": "2023-12-31T16:40:15Z" }, { "key": "MODULE_TREASURE_CHEST_SYSTEM", - "name": "treasure-chest-system", + "name": "Treasure-Chest-System", "repo": "https://github.com/zyggy123/Treasure-Chest-System.git", "type": "lua", "requires": [ @@ -707,12 +911,17 @@ "post_install_hooks": [ "copy-standard-lua" ], - "description": "Allows GMs to create and manage treasure chests with custom loot", - "category": "content" + "description": "A dynamic treasure chest system for AzerothCore that allows Game Masters to create and manage treasure chests with custom loot and hints. Players can find and loot these chests, with server-wide announcements for discoveries.", + "category": "scripting", + "status": "active", + "order": 5000, + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2024-12-03T03:16:44Z" }, { "key": "MODULE_ACTIVE_CHAT", - "name": "activechat", + "name": "ActiveChat", "repo": "https://github.com/Day36512/ActiveChat.git", "type": "lua", "requires": [ @@ -721,12 +930,17 @@ "post_install_hooks": [ "copy-standard-lua" ], - "description": "Populates artificial world and guild chat to make servers feel more lively", - "category": "social" + "description": "Populates artificial world and guild chat for single player servers to make it feel more lively.", + "category": "scripting", + "status": "active", + "order": 5000, + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "last_modified": "2024-02-29T06:50:46Z" }, { "key": "MODULE_ULTIMATE_FULL_LOOT_PVP", - "name": "ultimate-full-loot-pvp", + "name": "Ultimate-Full-Loot-Pvp", "repo": "https://github.com/Youpeoples/Ultimate-Full-Loot-Pvp.git", "type": "lua", "requires": [ @@ -735,12 +949,17 @@ "post_install_hooks": [ "copy-standard-lua" ], - "description": "Spawns loot chests containing gear and gold when players die in PvP", - "category": "pvp" + "description": "Ultra-flexible PvP-loot framework: define global defaults for item and gold drops, then fine-tune every aspect with per-zone/area overrides down to despawn timers, quality filters, gold cuts and more for total control of your open-world PvP loot experience.", + "category": "scripting", + "status": "active", + "order": 5000, + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2025-06-25T02:10:47Z" }, { "key": "MODULE_HORADRIC_CUBE", - "name": "horadric-cube-for-world-of-warcraft", + "name": "Horadric-Cube-for-World-of-Warcraft", "repo": "https://github.com/TITIaio/Horadric-Cube-for-World-of-Warcraft.git", "type": "lua", "requires": [ @@ -749,12 +968,17 @@ "post_install_hooks": [ "copy-standard-lua" ], - "description": "Diablo II-inspired crafting system with item synthesis and transmutation", - "category": "gameplay-enhancement" + "description": "\u57fa\u4e8e\u300a\u6697\u9ed1\u7834\u574f\u795e2\u300b\u7684\u8d6b\u62c9\u8fea\u514b\u65b9\u5757\u529f\u80fd\u5236\u4f5c\u7684\u57fa\u4e8eEluna\u7684\u9b54\u517d\u4e16\u754c\u529f\u80fd\u6269\u5c55", + "category": "scripting", + "status": "active", + "order": 5000, + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "last_modified": "2025-01-24T08:23:09Z" }, { "key": "MODULE_CARBON_COPY", - "name": "acore-carboncopy", + "name": "Acore_CarbonCopy", "repo": "https://github.com/55Honey/Acore_CarbonCopy.git", "type": "lua", "requires": [ @@ -763,12 +987,17 @@ "post_install_hooks": [ "copy-standard-lua" ], - "description": "Enables creating character copies at specific progression points for twinking", - "category": "admin" + "description": "Lua script for Azerothcore with ElunaLUA to allow players to keep copies of their characters at a stage, e.g. for twink pvp.", + "category": "scripting", + "status": "active", + "order": 5000, + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "last_modified": "2022-02-20T17:14:49Z" }, { "key": "MODULE_TEMP_ANNOUNCEMENTS", - "name": "acore-tempannouncements", + "name": "Acore_TempAnnouncements", "repo": "https://github.com/55Honey/Acore_TempAnnouncements.git", "type": "lua", "requires": [ @@ -777,12 +1006,17 @@ "post_install_hooks": [ "copy-standard-lua" ], - "description": "Allows GMs to create temporary server announcements that repeat at intervals", - "category": "social" + "description": "Lua script for Azerothcore with ElunaLUA for repeated announcements from a console/GM command.", + "category": "scripting", + "status": "active", + "order": 5000, + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "last_modified": "2022-09-06T10:08:39Z" }, { "key": "MODULE_ZONE_CHECK", - "name": "acore-zonecheck", + "name": "Acore_Zonecheck", "repo": "https://github.com/55Honey/Acore_Zonecheck.git", "type": "lua", "requires": [ @@ -791,12 +1025,17 @@ "post_install_hooks": [ "copy-standard-lua" ], - "description": "Checks player zones and automatically removes players from restricted areas", - "category": "admin" + "description": "This lua script checks a players zone, whether it is listed in the array of config flags. If listed the player keeps getting kicked.", + "category": "scripting", + "status": "active", + "order": 5000, + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "last_modified": "2023-02-10T20:45:16Z" }, { "key": "MODULE_AIO_BLACKJACK", - "name": "aio-blackjack", + "name": "AIO-Blackjack", "repo": "https://github.com/Manmadedrummer/AIO-Blackjack.git", "type": "lua", "requires": [ @@ -805,12 +1044,17 @@ "post_install_hooks": [ "copy-aio-lua" ], - "description": "Implements a Blackjack game for players to gamble against an NPC dealer", - "category": "minigame" + "description": "AIO Blackjack game for Azerothcore", + "category": "scripting", + "status": "active", + "order": 5000, + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "last_modified": "2024-08-27T20:58:51Z" }, { "key": "MODULE_SEND_AND_BIND", - "name": "acore-sendandbind", + "name": "Acore_SendAndBind", "repo": "https://github.com/55Honey/Acore_SendAndBind.git", "type": "lua", "requires": [ @@ -819,12 +1063,17 @@ "post_install_hooks": [ "copy-standard-lua" ], - "description": "Allows admins to send soulbound items to players via command", - "category": "admin" + "description": "Lua script for Azerothcore with ElunaLua to send soulbound items to players, which are usually Bind on Equip.", + "category": "scripting", + "status": "active", + "order": 5000, + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "last_modified": "2022-11-03T22:06:42Z" }, { "key": "MODULE_DYNAMIC_TRADER", - "name": "dynamic-trader", + "name": "Dynamic-Trader", "repo": "https://github.com/Day36512/Dynamic-Trader.git", "type": "lua", "requires": [ @@ -833,8 +1082,13 @@ "post_install_hooks": [ "copy-standard-lua" ], - "description": "Provides auction house alternative with dynamic pricing", - "category": "economy" + "description": "The script uses a dynamic pricing system for items, with prices changing based on several factors, including the day of the week, the time of day, and a global fluctuation value. This means that prices will vary from month to month, day to day, hour to hour and has both buy and sell functions.", + "category": "scripting", + "status": "active", + "order": 5000, + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "last_modified": "2023-10-02T21:15:39Z" }, { "key": "MODULE_LOTTERY_LUA", @@ -847,12 +1101,17 @@ "post_install_hooks": [ "copy-standard-lua" ], - "description": "Implements customizable lottery system where players can win prizes", - "category": "economy" + "description": "This Lua script implements a customizable lottery system", + "category": "scripting", + "status": "active", + "order": 5000, + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "last_modified": "2025-01-27T03:44:38Z" }, { "key": "MODULE_DISCORD_NOTIFIER", - "name": "acore-discordnotifier", + "name": "Acore_DiscordNotifier", "repo": "https://github.com/0xCiBeR/Acore_DiscordNotifier.git", "type": "lua", "requires": [ @@ -861,12 +1120,17 @@ "post_install_hooks": [ "copy-standard-lua" ], - "description": "Relays in-game chat events to Discord channels", - "category": "social" + "description": "Lua script for Azerothcore with ElunaLUA to push messages related to your server into Discord.", + "category": "scripting", + "status": "active", + "order": 5000, + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "last_modified": "2023-06-07T21:50:51Z" }, { "key": "MODULE_GLOBAL_MAIL_BANKING_AUCTIONS", - "name": "azerothcore-global-mail-banking-auctions", + "name": "azerothcore-global-mail_banking_auctions", "repo": "https://github.com/Aldori15/azerothcore-global-mail_banking_auctions.git", "type": "lua", "requires": [ @@ -875,8 +1139,13 @@ "post_install_hooks": [ "copy-standard-lua" ], - "description": "Allows access to bank, mailbox, and auction house from anywhere via chat commands", - "category": "economy" + "description": "Simple Lua Script that allows access to your character's bank, mailbox or auction house anywhere in the world via chat commands.", + "category": "scripting", + "status": "active", + "order": 5000, + "config_cleanup": [], + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "last_modified": "2024-12-04T15:36:19Z" }, { "key": "MODULE_GUILDHOUSE", @@ -888,7 +1157,8 @@ "config_cleanup": [ "mod_guildhouse.conf*" ], - "category": "content" + "category": "content", + "last_modified": "2025-10-19T20:02:33Z" }, { "key": "MODULE_PROGRESSION_SYSTEM", @@ -901,7 +1171,8 @@ "progression_system.conf*" ], "notes": "SQL files cannot be unloaded once executed; requires auto DB updater enabled in worldserver config", - "category": "progression" + "category": "progression", + "last_modified": "2025-11-15T09:15:53Z" }, { "key": "MODULE_NPC_FREE_PROFESSIONS", @@ -911,19 +1182,25 @@ "type": "cpp", "post_install_hooks": [], "config_cleanup": [], - "category": "npc-service" + "category": "npc-service", + "last_modified": "2025-11-01T21:21:16Z" }, { "key": "MODULE_DUEL_RESET", "name": "mod-duel-reset", "repo": "https://github.com/azerothcore/mod-duel-reset.git", - "description": "Adds some duel reset features", + "description": "Duel reset module for AzerothCore", "type": "cpp", "post_install_hooks": [], "config_cleanup": [ "duelreset.conf*" ], - "category": "gameplay-enhancement" + "category": "uncategorized", + "status": "active", + "order": 5000, + "requires": [], + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2025-10-27T09:13:13Z" }, { "key": "MODULE_ZONE_DIFFICULTY", @@ -934,20 +1211,25 @@ "post_install_hooks": [], "config_cleanup": [], "notes": "Mythicmode NPC 1128001 spawned in raids/heroic dungeons; NPC 1128002 for Mythicmode rewards", - "category": "progression" + "category": "progression", + "last_modified": "2025-10-15T09:47:28Z" }, { "key": "MODULE_MORPHSUMMON", "name": "mod-morphsummon", "repo": "https://github.com/azerothcore/mod-morphsummon.git", - "description": "Change appearance of summoned permanent creatures", + "description": "Change appearance of summoned permanent creatures.", "type": "cpp", "post_install_hooks": [], "config_cleanup": [ "morphsummon.conf*" ], - "notes": "Allows customization of summoned creature appearances (Warlock demons, Death Knight ghouls, Mage water elementals); NPC ID: 601072", - "category": "customization" + "notes": "Allows customization of summoned creature appearances (Warlock demons, Death Knight ghouls, Mage water elementals); NPC ID: 601072 \nDiscovered via GitHub topic 'azerothcore-module'", + "category": "uncategorized", + "status": "active", + "order": 5000, + "requires": [], + "last_modified": "2025-10-13T08:29:14Z" }, { "key": "MODULE_SPELL_REGULATOR", @@ -958,7 +1240,8 @@ "post_install_hooks": [], "config_cleanup": [], "notes": "WARNING: Custom code changes mandatory before module functions; requires custom hooks from external gist", - "category": "admin" + "category": "admin", + "last_modified": "2025-09-20T14:24:33Z" }, { "key": "MODULE_WEEKEND_XP", @@ -970,7 +1253,8 @@ "config_cleanup": [ "mod-double-xp-weekend.conf*" ], - "category": "progression" + "category": "progression", + "last_modified": "2025-09-07T08:30:52Z" }, { "key": "MODULE_REWARD_PLAYED_TIME", @@ -982,7 +1266,8 @@ "config_cleanup": [ "reward_system.conf*" ], - "category": "rewards" + "category": "rewards", + "last_modified": "2025-08-28T10:17:31Z" }, { "key": "MODULE_RESURRECTION_SCROLL", @@ -993,7 +1278,8 @@ "post_install_hooks": [], "config_cleanup": [], "notes": "Requires EnablePlayerSettings to be enabled in worldserver config file", - "category": "rewards" + "category": "rewards", + "last_modified": "2025-11-11T09:43:13Z" }, { "key": "MODULE_ITEM_LEVEL_UP", @@ -1003,7 +1289,8 @@ "type": "cpp", "post_install_hooks": [], "config_cleanup": [], - "category": "progression" + "category": "progression", + "last_modified": "2025-08-02T05:07:26Z" }, { "key": "MODULE_NPC_TALENT_TEMPLATE", @@ -1014,19 +1301,25 @@ "post_install_hooks": [], "config_cleanup": [], "notes": "Admin commands: .templatenpc create [TemplateName] and .templatenpc reload", - "category": "npc-service" + "category": "npc-service", + "last_modified": "2025-07-19T20:47:40Z" }, { "key": "MODULE_GLOBAL_CHAT", "name": "mod-global-chat", "repo": "https://github.com/azerothcore/mod-global-chat.git", - "description": "Simple global chat for AzerothCore enabling worldserver-wide messaging functionality", + "description": "New Worldserver Wide Chat Module for Azerothcore", "type": "cpp", "post_install_hooks": [], "config_cleanup": [ "GlobalChat.conf*" ], - "category": "social" + "category": "uncategorized", + "status": "active", + "order": 5000, + "requires": [], + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2025-07-20T14:15:24Z" }, { "key": "MODULE_PREMIUM", @@ -1039,7 +1332,8 @@ "premium.conf*" ], "notes": "Script must be assigned to an item (like hearthstone) using script name 'premium_account'", - "category": "premium" + "category": "premium", + "last_modified": "2025-08-02T05:08:08Z" }, { "key": "MODULE_SYSTEM_VIP", @@ -1051,7 +1345,8 @@ "config_cleanup": [ "SystemVip.conf*" ], - "category": "premium" + "category": "premium", + "last_modified": "2025-08-01T13:37:50Z" }, { "key": "MODULE_ACORE_SUBSCRIPTIONS", @@ -1061,7 +1356,11 @@ "type": "cpp", "post_install_hooks": [], "config_cleanup": [], - "category": "premium" + "category": "premium", + "last_modified": "2025-07-20T20:01:10Z", + "status": "blocked", + "block_reason": "Runtime error: Missing database table", + "notes": "Disabled due to runtime error: Table 'acore_auth.acore_cms_subscriptions' doesn't exist - causes server abort" }, { "key": "MODULE_KEEP_OUT", @@ -1072,7 +1371,8 @@ "post_install_hooks": [], "config_cleanup": [], "notes": "Requires editing database table mod_mko_map_lock; use .gps command to obtain map and zone IDs", - "category": "admin" + "category": "admin", + "last_modified": "2025-07-03T10:19:18Z" }, { "key": "MODULE_SERVER_AUTO_SHUTDOWN", @@ -1082,7 +1382,12 @@ "type": "cpp", "post_install_hooks": [], "config_cleanup": [], - "category": "admin" + "category": "uncategorized", + "status": "active", + "order": 5000, + "requires": [], + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2025-06-24T17:06:54Z" }, { "key": "MODULE_WHO_LOGGED", @@ -1094,7 +1399,8 @@ "config_cleanup": [ "who-logged.conf*" ], - "category": "admin" + "category": "admin", + "last_modified": "2025-05-30T19:57:37Z" }, { "key": "MODULE_ACCOUNT_MOUNTS", @@ -1104,7 +1410,8 @@ "type": "cpp", "post_install_hooks": [], "config_cleanup": [], - "category": "account-wide" + "category": "account-wide", + "last_modified": "2025-03-18T13:52:26Z" }, { "key": "MODULE_ANTIFARMING", @@ -1116,7 +1423,8 @@ "config_cleanup": [ "AntiFarming.conf*" ], - "category": "admin" + "category": "admin", + "last_modified": "2025-03-05T10:57:17Z" }, { "key": "MODULE_ARENA_REPLAY", @@ -1127,18 +1435,23 @@ "post_install_hooks": [], "config_cleanup": [], "notes": "NPC ID: 98500; known issue: players who were participants experience unusual behavior when watching their own replay", - "category": "pvp" + "category": "pvp", + "last_modified": "2025-03-02T23:49:27Z" }, { "key": "MODULE_TIC_TAC_TOE", "name": "mod-tic-tac-toe", "repo": "https://github.com/azerothcore/mod-tic-tac-toe.git", - "description": "Allows players to play Tic Tac Toe between players and against different AI", + "description": "World of Warcraft Tic Tac Toe game", "type": "cpp", "post_install_hooks": [], "config_cleanup": [], - "notes": "NPC ID: 100155", - "category": "minigame" + "notes": "NPC ID: 100155 \nDiscovered via GitHub topic 'azerothcore-module'", + "category": "uncategorized", + "status": "active", + "order": 5000, + "requires": [], + "last_modified": "2025-10-13T15:45:22Z" }, { "key": "MODULE_WAR_EFFORT", @@ -1150,7 +1463,12 @@ "config_cleanup": [ "mod_aq_war_effort.conf*" ], - "category": "content" + "category": "uncategorized", + "status": "active", + "order": 5000, + "requires": [], + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "last_modified": "2025-03-04T09:14:10Z" }, { "key": "MODULE_PROMOTION_AZEROTHCORE", @@ -1162,7 +1480,3917 @@ "config_cleanup": [ "mod_promotion.conf*" ], - "category": "progression" + "category": "progression", + "last_modified": "2025-03-03T07:48:23Z" + }, + { + "key": "MODULE_MOD_GUILD_VILLAGE", + "name": "mod-guild-village", + "repo": "https://github.com/BeardBear33/mod-guild-village.git", + "description": "Module for WoW 3.3.5a (AzerothCore \u2013 Playerbots). Tested on Ubuntu.", + "type": "cpp", + "category": "uncategorized", + "notes": "Disabled due to runtime error: MODULE_mod-guild-village_001_creature_template.sql tries to insert duplicate creature ID 987400 (ERROR 1062)", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-11-20T18:56:26Z", + "block_reason": "Runtime error: SQL duplicate entry" + }, + { + "key": "MODULE_MOD_CRAFTSPEED", + "name": "mod-craftspeed", + "repo": "https://github.com/Day36512/mod-craftspeed.git", + "description": "AzerothCore module that globally modifies the cast speed of crafting and tradeskill spells.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-11-19T10:10:25Z" + }, + { + "key": "MODULE_MOD_AUTOFISH", + "name": "mod-autofish", + "repo": "https://github.com/Flerp/mod-autofish.git", + "description": "A built in, customizeable fishing bot for AzerothCore", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-11-19T00:22:23Z" + }, + { + "key": "MODULE_MOD_VANILLA_NAXXRAMAS", + "name": "mod-vanilla-naxxramas", + "repo": "https://github.com/sogladev/mod-vanilla-naxxramas.git", + "description": " AzerothCore custom module that brings back vanilla Naxxramas", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-11-18T14:35:24Z" + }, + { + "key": "MODULE_MOD_TREASURE", + "name": "mod-treasure", + "repo": "https://github.com/BeardBear33/mod-treasure.git", + "description": "Module for WoW 3.3.5a (AzerothCore \u2013 Playerbots). Tested on Ubuntu.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-11-18T02:56:03Z" + }, + { + "key": "MODULE_MOD_REAL_ONLINE", + "name": "mod-real-online", + "repo": "https://github.com/BeardBear33/mod-real-online.git", + "description": "Module for WoW 3.3.5a (AzerothCore \u2013 Playerbots). Tested on Ubuntu.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-11-18T02:55:59Z" + }, + { + "key": "MODULE_MOD_INSTANCE_TOOLS", + "name": "mod-instance-tools", + "repo": "https://github.com/BeardBear33/mod-instance-tools.git", + "description": "Module for WoW 3.3.5a (AzerothCore \u2013 Playerbots). Tested on Ubuntu.", + "type": "cpp", + "category": "uncategorized", + "notes": "Disabled due to runtime error: MODULE_mod-instance-tools_Creature.sql tries to insert duplicate creature ID 987456-0 (ERROR 1062)", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-11-18T02:55:54Z", + "block_reason": "Runtime error: SQL duplicate entry" + }, + { + "key": "MODULE_MOD_LEARNSPELLS", + "name": "mod-learnspells", + "repo": "https://github.com/noisiver/mod-learnspells.git", + "description": "The module will give players new spells when leveling up or when entering the world", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-11-15T17:23:04Z" + }, + { + "key": "MODULE_MOD_SWIFT_TRAVEL_FORM", + "name": "mod-swift-travel-form", + "repo": "https://github.com/Flerp/mod-swift-travel-form.git", + "description": "A swift travel form mod that requires no DBC or spell edits", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-11-14T05:25:05Z" + }, + { + "key": "MODULE_MOD_CHAT_TRANSMITTER", + "name": "mod-chat-transmitter", + "repo": "https://github.com/azerothcore/mod-chat-transmitter.git", + "description": "", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-11-12T09:49:49Z" + }, + { + "key": "MODULE_MOD_NOTIFY_MUTED", + "name": "mod-notify-muted", + "repo": "https://github.com/azerothcore/mod-notify-muted.git", + "description": "A module for AzerothCore that notifies if interlocutor is muted", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-11-12T09:48:41Z" + }, + { + "key": "MODULE_MOD_AH_BOT_PLUS", + "name": "mod-ah-bot-plus", + "repo": "https://github.com/NathanHandley/mod-ah-bot-plus.git", + "description": "Modified version of the AHBot for AzerothCore", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-11-12T04:01:32Z" + }, + { + "key": "MODULE_OPENPROJECTS", + "name": "openProjects", + "repo": "https://github.com/Rimovals2/openProjects.git", + "description": "Open Projects \u2013 World of Warcraft Server Development Hub This repository contains a structured collection of projects focused on WoW server development and ecosystem tools, including: AzerothCore modules and C++ gameplay systems server patches, fixes and performance optimizations scripting tools (AI, quests, spells, bots, DB) WoW addons and UI", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-11-09T09:34:28Z" + }, + { + "key": "MODULE_MOD_DUNGEON_SCALE", + "name": "mod-dungeon-scale", + "repo": "https://github.com/NathanHandley/mod-dungeon-scale.git", + "description": "Mod for AzerothCore servers to modify the difficulty of dungeons (forked from AutoBalance)", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "block_reason": "Linker failure: duplicates AutoBalance utility symbols (GetCurrentConfigTime, LoadMapSettings, etc.) when built alongside mod-autobalance", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-11-01T01:42:59Z" + }, + { + "key": "MODULE_AZEROTHCORE_LUA_ARENA_MASTER_COMMAND", + "name": "azerothcore-lua-arena-master-command", + "repo": "https://github.com/mostlynick3/azerothcore-lua-arena-master-command.git", + "description": "Lets users access the arena master frame from anywhere in the world. Can be configured to send any valid battle master list.", + "type": "lua", + "category": "scripting", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-10-31T06:38:39Z" + }, + { + "key": "MODULE_MOD_HARDCORE_MAKGORA", + "name": "mod-hardcore-makgora", + "repo": "https://github.com/jorge990125/mod-hardcore-makgora.git", + "description": "Systema HardCore con duelos Makgora", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-10-28T13:27:32Z" + }, + { + "key": "MODULE_MOD_GEDDON_BINDING_SHARD", + "name": "mod-geddon-binding-shard", + "repo": "https://github.com/Day36512/mod-geddon-binding-shard.git", + "description": "A module for azerothcore that makes Baron Geddon drop Talisman of Binding Shard once per server.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-10-28T00:01:21Z" + }, + { + "key": "MODULE_MOD_GM_COMMANDS", + "name": "mod-gm-commands", + "repo": "https://github.com/chromiecraft/mod-gm-commands.git", + "description": "", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-10-25T04:04:23Z" + }, + { + "key": "MODULE_MOD_GOMOVE", + "name": "mod-gomove", + "repo": "https://github.com/Tralenor/mod-gomove.git", + "description": "Port of the TC-Corepatch GO-Move from Rochet2 as an AC-Module (with Objscale integration)", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-10-22T15:09:26Z", + "block_reason": "Compilation error: no member named 'DestroyForNearbyPlayers' in 'GameObject'" + }, + { + "key": "MODULE_MOD_FORTIS_AUTOBALANCE", + "name": "mod-fortis-autobalance", + "repo": "https://github.com/FortisVoluntas/mod-fortis-autobalance.git", + "description": "Autobalance Modul for the Azerothcore-Playerbot fork from @liyunfan1223 https://github.com/liyunfan1223/azerothcore-wotlk.git", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-10-22T15:03:03Z" + }, + { + "key": "MODULE_MOD_MISSING_OBJECTIVES", + "name": "mod-missing-objectives", + "repo": "https://github.com/forumcorex/mod-missing-objectives.git", + "description": "The module is responsible for adding the missing dungeon and raid objectives. This content isn't considered Blizzard, so it must be modularized.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-10-15T19:18:14Z" + }, + { + "key": "MODULE_MOD_TRIAL_OF_FINALITY", + "name": "mod-trial-of-finality", + "repo": "https://github.com/Stuntmonkey4u/mod-trial-of-finality.git", + "description": "Hardcore trial mod for groups of 1-5", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: no member named 'isEmpty' in 'MapRefMgr'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-10-11T07:03:22Z", + "block_reason": "Compilation error: no member named 'isEmpty' in 'MapRefMgr'" + }, + { + "key": "MODULE_MOD_HUNTER_PET_STORAGE", + "name": "mod-hunter-pet-storage", + "repo": "https://github.com/nightwreath/mod-hunter-pet-storage.git", + "description": "Additional Hunter Pet Storage for AzerothCore", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-10-09T02:03:21Z" + }, + { + "key": "MODULE_MOD_CHARACTER_SERVICES", + "name": "mod-character-services", + "repo": "https://github.com/Zerkenn/mod-character-services.git", + "description": "Azerothcore module that adds a npc that can be spawned in that you can talk to and purchase a name change, appearance change, race change, or faction change.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-10-05T14:05:10Z" + }, + { + "key": "MODULE_MOD_MOUNT_REQUIREMENTS", + "name": "mod-mount-requirements", + "repo": "https://github.com/zeb139/mod-mount-requirements.git", + "description": "An AzerothCore module for configuring the requirements to obtain various mounts", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-10-04T14:48:19Z" + }, + { + "key": "MODULE_SETXPBAR", + "name": "SetXpBar", + "repo": "https://github.com/brian8544/SetXpBar.git", + "description": "An addon that enables players to control their experience gain rate by right-clicking their XP bar. This feature requires the realm to have the mod-individual-xp module installed.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-09-29T04:35:03Z" + }, + { + "key": "MODULE_MOD_REWARD_PLAYED_TIME_IMPROVED", + "name": "mod-reward-played-time-improved", + "repo": "https://github.com/freekode/mod-reward-played-time-improved.git", + "description": "Improved reward for played time for Azerothcore", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-09-26T15:55:43Z" + }, + { + "key": "MODULE_MOD_GROWNUP", + "name": "mod-grownup", + "repo": "https://github.com/webluke/mod-grownup.git", + "description": "GrownUp is a fun, immersive AzerothCore server module that dynamically changes the size of player characters as they progress in level.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-09-26T01:01:19Z" + }, + { + "key": "MODULE_MOD_MYTHIC_PLUS", + "name": "mod-mythic-plus", + "repo": "https://github.com/silviu20092/mod-mythic-plus.git", + "description": "Mythic Plus system for Azerothcore.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-08-24T06:09:45Z" + }, + { + "key": "MODULE_MOD_FACTION_FREE", + "name": "mod-Faction-Free", + "repo": "https://github.com/gitdalisar/mod-Faction-Free.git", + "description": "Faction Free is a WOTLK 3.3.5a (Azerothcore base) selection of files to allow a player to interact with opposite factions to have access to those corresponding reputations, quests, and achievements.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-09-03T17:51:49Z" + }, + { + "key": "MODULE_MOD_FLIGHTMASTER_WHISTLE", + "name": "mod-flightmaster-whistle", + "repo": "https://github.com/silviu20092/mod-flightmaster-whistle.git", + "description": "Flightmaster whistle module for AzerothCore.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-08-24T06:09:20Z" + }, + { + "key": "MODULE_MOD_STARTER_WANDS", + "name": "mod-starter-wands", + "repo": "https://github.com/Protonull/mod-starter-wands.git", + "description": "Gives all newly-created players with wand skills a free starter wand", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-08-13T17:35:35Z" + }, + { + "key": "MODULE_MOD_MOUNTS_ON_ACCOUNT", + "name": "mod-mounts-on-account", + "repo": "https://github.com/pangolp/mod-mounts-on-account.git", + "description": "This module allows to obtain all the mounts learned by a character of the account, possibly in exchange for gold, although it is not yet decided.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-08-03T14:08:00Z" + }, + { + "key": "MODULE_MOD_OLLAMA_BOT_BUDDY", + "name": "mod-ollama-bot-buddy", + "repo": "https://github.com/DustinHendrickson/mod-ollama-bot-buddy.git", + "description": "An AzerothCore module that leverages Player Bots and integrates advanced AI control via the Ollama LLM API", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-08-01T20:04:41Z" + }, + { + "key": "MODULE_MOD_AOE_LOOT", + "name": "mod-aoe-loot", + "repo": "https://github.com/TerraByte-tbwps/mod-aoe-loot.git", + "description": "AoE loot module for AzerothCore built from the ground up without loot loss. (No Loot Merging).", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: Naming conflict with Item class", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "block_reason": "Compilation error: reference to 'Item' is ambiguous", + "last_modified": "2025-07-30T18:49:50Z" + }, + { + "key": "MODULE_MOD_PROFESSION_EXPERIENCE", + "name": "mod-profession-experience", + "repo": "https://github.com/Tereneckla/mod-profession-experience.git", + "description": "Azerothcore Module to reward experience when using professions", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-07-26T09:24:54Z" + }, + { + "key": "MODULE_MOD_ACCOUNT_VANITY_PETS", + "name": "mod-account-vanity-pets", + "repo": "https://github.com/lucafolloni/mod-account-vanity-pets.git", + "description": "", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-07-22T12:12:00Z" + }, + { + "key": "MODULE_MOD_GAME_STATE_API", + "name": "mod-game-state-api", + "repo": "https://github.com/abutbul/mod-game-state-api.git", + "description": "AzerothCore game state api", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "block_reason": "Linker failure: httplib TLS initialization symbol conflicts with mod-discord-announce (bad TLS reference)", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-07-21T10:44:43Z" + }, + { + "key": "MODULE_MOD_WEEKEND_XP", + "name": "mod-weekend-xp", + "repo": "https://github.com/TheArktect/mod-weekend-xp.git", + "description": "Enhanced AzerothCore module to double XP on the weekend", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-07-19T21:56:22Z" + }, + { + "key": "MODULE_MOD_PEACEKEEPER", + "name": "mod-peacekeeper", + "repo": "https://github.com/trembon/mod-peacekeeper.git", + "description": "Module for AzerothCore to enable players gain reputation with both factions that normally are at war.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-06-26T21:48:59Z" + }, + { + "key": "MODULE_MOD_QUEST_LOOT_PARTY", + "name": "mod-quest-loot-party", + "repo": "https://github.com/pangolp/mod-quest-loot-party.git", + "description": "This mod, created for the AzerothCore community, allows people in a group to obtain a quest item from an npc, as long as the item is available. All members will be able to obtain it.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-06-24T19:45:14Z" + }, + { + "key": "MODULE_MOD_NORDF", + "name": "mod-nordf", + "repo": "https://github.com/zesman21/mod-nordf.git", + "description": "This module prevents the player to join the random dungeon finder and prints a error message to the player.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-06-20T03:49:51Z" + }, + { + "key": "MODULE_MOD_DISCORD_ANNOUNCE", + "name": "mod-discord-announce", + "repo": "https://github.com/TheArktect/mod-discord-announce.git", + "description": "AzerothCore module to send Discord messages on specific server events", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-06-19T12:43:25Z" + }, + { + "key": "MODULE_MOD_BRAWLERS_GUILD", + "name": "mod-brawlers-guild", + "repo": "https://github.com/avarishd/mod-brawlers-guild.git", + "description": "Adds Mist of Pandaria's Brawler's Guild to AzerothCore.", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: no matching member function for call to 'DelayEvents'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "block_reason": "Compilation error: no matching member function for call to 'DelayEvents'", + "last_modified": "2025-06-14T20:25:35Z" + }, + { + "key": "MODULE_MOD_HARDCORE", + "name": "mod-hardcore", + "repo": "https://github.com/Zindokar/mod-hardcore.git", + "description": "AzerothCore module to replicate hardcore mode. Simple but effective.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-05-29T15:45:46Z" + }, + { + "key": "MODULE_MOD_STREAMS", + "name": "mod-streams", + "repo": "https://github.com/jorge990125/mod-streams.git", + "description": "Modulo de anuncios para streamer", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-05-25T20:21:38Z" + }, + { + "key": "MODULE_MOD_BLACK_MARKET", + "name": "mod-black-market", + "repo": "https://github.com/jorge990125/mod-black-market.git", + "description": "Mercado negro", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: SQL schema mismatch - StatsCount column doesn't exist", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-05-25T20:15:17Z", + "block_reason": "SQL error: Unknown column 'StatsCount' in database update" + }, + { + "key": "MODULE_MOD_TALENTBUTTON", + "name": "mod-talentbutton", + "repo": "https://github.com/brian8544/mod-talentbutton.git", + "description": "Adds Dual Talent Specialization at level 10 and a button to unlearn talents anywhere, letting players reset talents without visiting a trainer.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-05-23T16:33:37Z" + }, + { + "key": "MODULE_MOD_SETXPBAR", + "name": "mod-setxpbar", + "repo": "https://github.com/brian8544/mod-setxpbar.git", + "description": "Set XP rate with the ease of your right mouse button.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-05-22T18:09:13Z" + }, + { + "key": "MODULE_MOD_ITEM_UPGRADE", + "name": "mod-item-upgrade", + "repo": "https://github.com/silviu20092/mod-item-upgrade.git", + "description": "Individual item upgrades for AzerothCore.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-05-22T16:10:56Z" + }, + { + "key": "MODULE_MOD_LEVEL_REWARDS", + "name": "mod-level-rewards", + "repo": "https://github.com/notepadguyOfficial/mod-level-rewards.git", + "description": "", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-05-03T13:48:45Z", + "block_reason": "Compilation error: no member named 'SetStationary' in 'MailDraft'" + }, + { + "key": "MODULE_MOD_REFORGING", + "name": "mod-reforging", + "repo": "https://github.com/silviu20092/mod-reforging.git", + "description": "Reforging system for AzerothCore.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-04-18T05:38:34Z" + }, + { + "key": "MODULE_MOD_ONY_NAXX_LOGOUT_TELEPORT", + "name": "mod-ony-naxx-logout-teleport", + "repo": "https://github.com/valsan-azerty-boi/mod-ony-naxx-logout-teleport.git", + "description": "AzerothCore module that avoid client crash with reintroduced Vanilla Onyxia's Lair & Naxx", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-04-12T15:11:00Z" + }, + { + "key": "MODULE_MOD_QUICK_RESPAWN", + "name": "mod-quick-respawn", + "repo": "https://github.com/hallgaeuer/mod-quick-respawn.git", + "description": "Azerothcore module to quickly spawn your ghost in front of instance portals after dying", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-04-06T07:54:40Z" + }, + { + "key": "MODULE_MOD_AUTO_RESURRECT", + "name": "mod-auto-resurrect", + "repo": "https://github.com/Elmegaard/mod-auto-resurrect.git", + "description": "This mod allows players to automatically resurrect at the start of an instance or raid when releasing their spirit", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-03-16T15:39:07Z" + }, + { + "key": "MODULE_MOD_IMPROVED_BANK", + "name": "mod-improved-bank", + "repo": "https://github.com/silviu20092/mod-improved-bank.git", + "description": "Improved bank module for AzerothCore.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-03-13T12:59:39Z" + }, + { + "key": "MODULE_MOD_BIENVENIDA", + "name": "mod-bienvenida", + "repo": "https://github.com/jorge990125/mod-bienvenida.git", + "description": "menu de bienvenida", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-03-07T16:58:09Z" + }, + { + "key": "MODULE_MOD_NO_HEARTHSTONE_COOLDOWN", + "name": "mod-no-hearthstone-cooldown", + "repo": "https://github.com/BytesGalore/mod-no-hearthstone-cooldown.git", + "description": "AzerothCore module that immediately skips the cooldown of the Hearthstone after use", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-03-07T10:29:39Z" + }, + { + "key": "MODULE_MOD_PTR_TEMPLATE", + "name": "mod-ptr-template", + "repo": "https://github.com/heyitsbench/mod-ptr-template.git", + "description": "Module for AzerothCore that adds character templates akin to Blizzlike implementation.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-03-05T01:18:57Z" + }, + { + "key": "MODULE_MOD_STARTER_GUILD", + "name": "mod-starter-guild", + "repo": "https://github.com/azerothcore/mod-starter-guild.git", + "description": "This module automatically joins new players to a guild of your choice on first login.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-03-02T12:59:33Z" + }, + { + "key": "MODULE_MOD_BG_REWARD", + "name": "mod-bg-reward", + "repo": "https://github.com/azerothcore/mod-bg-reward.git", + "description": "BGReward module for AzerothCore", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-03-02T10:58:45Z" + }, + { + "key": "MODULE_MOD_NPC_MORPH", + "name": "mod-npc-morph", + "repo": "https://github.com/azerothcore/mod-npc-morph.git", + "description": "AzerothCore Module", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-03-02T07:36:40Z" + }, + { + "key": "MODULE_MOD_BG_ITEM_REWARD", + "name": "mod-bg-item-reward", + "repo": "https://github.com/azerothcore/mod-bg-item-reward.git", + "description": "Rewards players with items of your choice after battleground victories and defeats.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-03-01T20:40:30Z" + }, + { + "key": "MODULE_MOD_IP_TRACKER", + "name": "mod-ip-tracker", + "repo": "https://github.com/azerothcore/mod-ip-tracker.git", + "description": "", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-03-01T13:18:48Z" + }, + { + "key": "MODULE_MOD_DMF_SWITCH", + "name": "mod-dmf-switch", + "repo": "https://github.com/azerothcore/mod-dmf-switch.git", + "description": "", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-03-01T13:18:30Z" + }, + { + "key": "MODULE_MOD_BUFF_COMMAND", + "name": "mod-buff-command", + "repo": "https://github.com/azerothcore/mod-buff-command.git", + "description": "BuffCommand module for AzerothCore", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-03-01T13:17:53Z" + }, + { + "key": "MODULE_MOD_NPC_CODEBOX", + "name": "mod-npc-codebox", + "repo": "https://github.com/azerothcore/mod-npc-codebox.git", + "description": "", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-03-01T06:51:05Z" + }, + { + "key": "MODULE_MOD_CHROMIE_XP", + "name": "mod-chromie-xp", + "repo": "https://github.com/azerothcore/mod-chromie-xp.git", + "description": "", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-02-28T21:20:43Z" + }, + { + "key": "MODULE_MOD_SELL_ITEMS", + "name": "mod-sell-items", + "repo": "https://github.com/silviu20092/mod-sell-items.git", + "description": "Sell items module for AzerothCore.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-02-28T20:49:13Z" + }, + { + "key": "MODULE_MOD_PVP_ZONES", + "name": "mod-pvp-zones", + "repo": "https://github.com/azerothcore/mod-pvp-zones.git", + "description": "A module redefining world pvp.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-02-28T16:47:38Z" + }, + { + "key": "MODULE_MOD_CONGRATS_ON_LEVEL", + "name": "mod-congrats-on-level", + "repo": "https://github.com/azerothcore/mod-congrats-on-level.git", + "description": "This module rewards players when they reach specific levels", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-02-28T13:15:33Z" + }, + { + "key": "MODULE_MOD_GUILD_ZONE_SYSTEM", + "name": "mod-guild-zone-system", + "repo": "https://github.com/azerothcore/mod-guild-zone-system.git", + "description": "AzerothCore Module", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-02-28T05:58:28Z" + }, + { + "key": "MODULE_MOD_CTA_SWITCH", + "name": "mod-cta-switch", + "repo": "https://github.com/azerothcore/mod-cta-switch.git", + "description": "Module for AzerothCore that switches a Call to Arms! PvP event with another of your choice.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-02-27T22:31:41Z" + }, + { + "key": "MODULE_MOD_NPC_SPECTATOR", + "name": "mod-npc-spectator", + "repo": "https://github.com/Gozzim/mod-npc-spectator.git", + "description": "AzerothCore Module to provide an NPC for arena spectating", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-02-27T12:53:32Z" + }, + { + "key": "MODULE_MOD_NPC_GAMBLER", + "name": "mod-npc-gambler", + "repo": "https://github.com/azerothcore/mod-npc-gambler.git", + "description": "", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-02-27T12:49:08Z" + }, + { + "key": "MODULE_MOD_WEAPON_VISUAL", + "name": "mod-weapon-visual", + "repo": "https://github.com/azerothcore/mod-weapon-visual.git", + "description": "AzerothCore Module", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-02-27T06:28:44Z" + }, + { + "key": "MODULE_MOD_NPC_ALL_MOUNTS", + "name": "mod-npc-all-mounts", + "repo": "https://github.com/azerothcore/mod-npc-all-mounts.git", + "description": "Teaches all mounts", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-02-27T06:00:40Z" + }, + { + "key": "MODULE_MOD_RACIAL_TRAIT_SWAP", + "name": "mod-racial-trait-swap", + "repo": "https://github.com/azerothcore/mod-racial-trait-swap.git", + "description": "Azerothcore Module for Racial Trait Swap", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-02-26T21:02:22Z" + }, + { + "key": "MODULE_MOD_MONEY_FOR_KILLS", + "name": "mod-money-for-kills", + "repo": "https://github.com/azerothcore/mod-money-for-kills.git", + "description": "", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-02-26T05:23:50Z" + }, + { + "key": "MODULE_MOD_APPRECIATION", + "name": "mod-appreciation", + "repo": "https://github.com/noisiver/mod-appreciation.git", + "description": "This module allows players to obtain two services. They can get a level boost to 60, 70 or 80 which includes equipment equal to what they would get from quests or they can unlock flight paths in each continent", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-02-23T12:30:40Z" + }, + { + "key": "MODULE_MOD_HARD_MODES", + "name": "mod-hard-modes", + "repo": "https://github.com/Conan1996-2/mod-hard-modes.git", + "description": "Server wide hard modes for AzerothCore", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-02-23T01:59:43Z" + }, + { + "key": "MODULE_MOD_QUEUE_LIST_CACHE", + "name": "mod-queue-list-cache", + "repo": "https://github.com/azerothcore/mod-queue-list-cache.git", + "description": "", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-02-22T21:46:32Z" + }, + { + "key": "MODULE_MOD_PVPSTATS_ANNOUNCER", + "name": "mod-pvpstats-announcer", + "repo": "https://github.com/azerothcore/mod-pvpstats-announcer.git", + "description": "", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-02-22T21:29:14Z" + }, + { + "key": "MODULE_MOD_RDF_EXPANSION", + "name": "mod-rdf-expansion", + "repo": "https://github.com/azerothcore/mod-rdf-expansion.git", + "description": "Allows to join RDF of previous expansions on a higher character level", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-02-22T20:49:53Z" + }, + { + "key": "MODULE_MOD_COSTUMES", + "name": "mod-costumes", + "repo": "https://github.com/azerothcore/mod-costumes.git", + "description": "Temporary morph items module for AzerothCore", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-02-22T19:25:31Z" + }, + { + "key": "MODULE_MOD_WEEKENDBONUS", + "name": "mod-weekendbonus", + "repo": "https://github.com/noisiver/mod-weekendbonus.git", + "description": "This module will increase the experience, money, reputation and skill ups gained on weekends. That means friday from 18:00 (6 PM), saturday and sunday. It will announce the start and end of the weekend bonus", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-02-22T15:54:22Z" + }, + { + "key": "MODULE_MOD_JUNK_TO_GOLD", + "name": "mod-junk-to-gold", + "repo": "https://github.com/noisiver/mod-junk-to-gold.git", + "description": "Automatically sells looted gray items", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-02-22T15:11:32Z" + }, + { + "key": "MODULE_MOD_DESERTION_WARNINGS", + "name": "mod-desertion-warnings", + "repo": "https://github.com/azerothcore/mod-desertion-warnings.git", + "description": "", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-02-22T11:59:24Z" + }, + { + "key": "MODULE_MOD_LOW_LEVEL_RBG", + "name": "mod-low-level-rbg", + "repo": "https://github.com/azerothcore/mod-low-level-rbg.git", + "description": "", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-02-16T14:02:23Z" + }, + { + "key": "MODULE_PRESTIGE", + "name": "Prestige", + "repo": "https://github.com/NhobodyImportant/Prestige.git", + "description": "Prestige level system mod for Azerothcore", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: 'OnLogin' marked 'override' but does not override", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "block_reason": "Compilation error: 'OnLogin' marked 'override' but does not override", + "last_modified": "2025-02-01T18:29:34Z" + }, + { + "key": "MODULE_HARDMODE", + "name": "HardMode", + "repo": "https://github.com/AnchyDev/HardMode.git", + "description": "Adds extra difficulty modes, heavily inspired by mod-challenge-modes.", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: only virtual member functions can be marked 'override'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "block_reason": "Compilation error: only virtual member functions can be marked 'override'", + "last_modified": "2025-01-28T08:00:36Z" + }, + { + "key": "MODULE_MOD_LOW_LEVEL_ARENA", + "name": "mod-low-level-arena", + "repo": "https://github.com/azerothcore/mod-low-level-arena.git", + "description": "", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-01-21T18:09:43Z" + }, + { + "key": "MODULE_MOD_CFPVE", + "name": "mod-cfpve", + "repo": "https://github.com/pangolp/mod-cfpve.git", + "description": "This module obtains the faction of the first player who enters the list of instances used in it, and changes the obtained faction to the rest of the players so that the events can be carried out normally.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-01-16T16:31:19Z" + }, + { + "key": "MODULE_MOD_ACCOUNTBOUND", + "name": "mod-accountbound", + "repo": "https://github.com/noisiver/mod-accountbound.git", + "description": "This module aims to make mounts, companions and heirlooms shared across all characters of an account", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: only virtual member functions can be marked 'override'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "block_reason": "Compilation error: only virtual member functions can be marked 'override'", + "last_modified": "2025-01-03T23:44:35Z" + }, + { + "key": "MODULE_MOD_DISCORD_WEBHOOK", + "name": "mod-discord-webhook", + "repo": "https://github.com/Exitare/mod-discord-webhook.git", + "description": "Send webhooks to discord using scripts ", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "block_reason": "Linker failure: ModulesLoader expects Addmod_discord_webhookScripts() but module does not export it", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-12-14T04:30:01Z" + }, + { + "key": "MODULE_MOD_DUNGEONMASTER", + "name": "mod-dungeonmaster", + "repo": "https://github.com/bewarellamas/mod-dungeonmaster.git", + "description": "Azerothcore module that adds an NPC to teleport players to dungeons.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-12-07T16:19:06Z" + }, + { + "key": "MODULE_MOD_RESET_RAID_COOLDOWNS", + "name": "mod-reset-raid-cooldowns", + "repo": "https://github.com/sogladev/mod-reset-raid-cooldowns.git", + "description": "AzerothCore custom module that raid cooldown reset behavior from wrath classic ", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-11-19T13:54:56Z" + }, + { + "key": "MODULE_MOD_INCREMENT_CACHE_VERSION", + "name": "mod-increment-cache-version", + "repo": "https://github.com/sogladev/mod-increment-cache-version.git", + "description": "Automatically increments the cache version on server startup, ensuring clients always have up-to-date cache data", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-11-07T00:24:26Z" + }, + { + "key": "MODULE_MOD_RECRUIT_FRIEND", + "name": "mod-recruit-friend", + "repo": "https://github.com/pangolp/mod-recruit-friend.git", + "description": "Module for azerothCore that allows you to recruit a friend within the game.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-10-28T13:31:22Z" + }, + { + "key": "MODULE_MOD_PETEQUIP", + "name": "mod-petequip", + "repo": "https://github.com/Lenzork/mod-petequip.git", + "description": "A module for AzerothCore which let's your Warlocks for example change the Weapon of the Felguard", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-10-26T08:30:08Z" + }, + { + "key": "MODULE_MOD_LOGIN_REWARDS", + "name": "mod-login-rewards", + "repo": "https://github.com/Kadan-gx/mod-login-rewards.git", + "description": "A daily login reward module for the AzerothCore wow emulator.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-10-03T08:21:58Z", + "block_reason": "Compilation error: only virtual member functions can be marked 'override'" + }, + { + "key": "MODULE_MOD_HIGH_RISK_SYSTEM", + "name": "mod-high-risk-system", + "repo": "https://github.com/tbcstar/mod-high-risk-system.git", + "description": "High Risk System | Equipment/Bag Drops on Death via a Chest", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-09-30T23:26:10Z" + }, + { + "key": "MODULE_MOD_STARTING_PET", + "name": "mod-starting-pet", + "repo": "https://github.com/Gozzim/mod-starting-pet.git", + "description": "AzerothCore Module to provide hunters and warlocks with a starting pet", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "block_reason": "Compilation error: mod-starting-pet hooks OnFirstLogin as override but base method is not virtual", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-09-27T09:58:01Z" + }, + { + "key": "MODULE_MOD_BG_TWINPEAKS", + "name": "mod-bg-twinpeaks", + "repo": "https://github.com/Helias/mod-bg-twinpeaks.git", + "description": " Twin Peaks battleground in Wotlk3.3.5a as module for AzerothCore", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-09-24T22:59:19Z" + }, + { + "key": "MODULE_MOD_BG_BATTLE_FOR_GILNEAS", + "name": "mod-bg-battle-for-gilneas", + "repo": "https://github.com/Helias/mod-bg-battle-for-gilneas.git", + "description": "Cataclysm battleground Battle for Gilneas into WOTLK as AzerothCore module", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-09-24T21:45:59Z" + }, + { + "key": "MODULE_MOD_ARENA_TIGERSPEAK", + "name": "mod-arena-tigerspeak", + "repo": "https://github.com/Helias/mod-arena-tigerspeak.git", + "description": "Tiger's Peak arena battleground in Wotlk 3.3.5a as module for AzerothCore", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-09-24T17:09:52Z" + }, + { + "key": "MODULE_MOD_ARENA_TOLVIRON", + "name": "mod-arena-tolviron", + "repo": "https://github.com/Helias/mod-arena-tolviron.git", + "description": "Tol'Viron arena battleground in Wotlk 3.3.5a as module for AzerothCore", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-09-24T17:08:57Z" + }, + { + "key": "MODULE_MOD_GHOST_SPEED", + "name": "mod-ghost-speed", + "repo": "https://github.com/sogladev/mod-ghost-speed.git", + "description": "AzerothCore custom module that customizes ghost speed", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-09-19T22:04:04Z" + }, + { + "key": "MODULE_MOD_GUILDFUNDS", + "name": "mod-guildfunds", + "repo": "https://github.com/noisiver/mod-guildfunds.git", + "description": "This module will deposit a certain percentage of money looted and earned from quests into the guild bank", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-09-17T19:51:10Z" + }, + { + "key": "MODULE_BREAKINGNEWSOVERRIDE", + "name": "BreakingNewsOverride", + "repo": "https://github.com/AnchyDev/BreakingNewsOverride.git", + "description": "An Azeroth Core module to allow the display of the Breaking News section on the character select screen.", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: no member named 'StringFormatFmt' in namespace 'Acore'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "block_reason": "Compilation error: no member named 'StringFormatFmt' in namespace 'Acore'", + "last_modified": "2024-09-16T06:16:19Z" + }, + { + "key": "MODULE_AOE_LOOT_MERGE", + "name": "AOE-loot---merge", + "repo": "https://github.com/Seaferer/AOE-loot---merge.git", + "description": "Merge all loot in a single creature.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-09-13T00:05:10Z" + }, + { + "key": "MODULE_MOD_CHANGEABLESPAWNRATES", + "name": "mod-changeablespawnrates", + "repo": "https://github.com/justin-kaufmann/mod-changeablespawnrates.git", + "description": "This WoW-Azerothcore-Mod allows to change spawntimes based on a userdefined or dynamically calculated playerbased factor", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: only virtual member functions can be marked 'override'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "block_reason": "Compilation error: only virtual member functions can be marked 'override'", + "last_modified": "2024-09-12T13:53:51Z" + }, + { + "key": "MODULE_MOD_NOCLIP", + "name": "mod-noclip", + "repo": "https://github.com/justin-kaufmann/mod-noclip.git", + "description": "This mod allows noclip with a command noclip. on / off", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: only virtual member functions can be marked 'override'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-09-06T00:34:49Z", + "block_reason": "Compilation error: only virtual member functions can be marked 'override'" + }, + { + "key": "MODULE_MOD_NPC_SERVICES", + "name": "mod-npc-services", + "repo": "https://github.com/azerothcore/mod-npc-services.git", + "description": "AzerothCore Module", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-09-05T09:26:16Z" + }, + { + "key": "MODULE_MOD_NPC_PROMOTION", + "name": "mod-npc-promotion", + "repo": "https://github.com/pangolp/mod-npc-promotion.git", + "description": "This module allows you to grant promotions through an NPC that is added to the initial areas. It has some settings, so it is recommended to review them and adapt them to the project where it will be used.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-08-31T12:25:35Z" + }, + { + "key": "MODULE_DEVJOESTAR", + "name": "DevJoestar", + "repo": "https://github.com/DevJoestar/DevJoestar.git", + "description": "DevJoestar", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-08-27T16:50:28Z" + }, + { + "key": "MODULE_MOD_OBJSCALE", + "name": "mod-objscale", + "repo": "https://github.com/Tralenor/mod-objscale.git", + "description": "AzerothCore port (as a Module) of Rochet2's Objscale", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: only virtual member functions can be marked 'override'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-08-25T19:01:41Z", + "block_reason": "Compilation error: only virtual member functions can be marked 'override'" + }, + { + "key": "MODULE_MOD_WARLOCK_PET_RENAME", + "name": "mod-warlock-pet-rename", + "repo": "https://github.com/silviu20092/mod-warlock-pet-rename.git", + "description": "Warlock pet rename module for AzerothCore.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-08-01T04:49:12Z" + }, + { + "key": "MODULE_MOD_MULTI_VENDOR", + "name": "mod-multi-vendor", + "repo": "https://github.com/WoWHellgarve-HolyDeeW/mod-multi-vendor.git", + "description": "Plug&Play Multi-Vendor module for AzerothCore & WoWHellgarve-Wotlk", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-07-28T22:09:41Z", + "block_reason": "Compilation error: no member named 'SendNotification' in 'WorldSession'" + }, + { + "key": "MODULE_MOD_DEMONIC_PACT_CLASSIC", + "name": "mod-demonic-pact-classic", + "repo": "https://github.com/sogladev/mod-demonic-pact-classic.git", + "description": "AzerothCore custom module that implements demonic pact behavior from wrath classic", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-07-15T15:06:07Z" + }, + { + "key": "MODULE_RECYCLEDITEMS", + "name": "RecycledItems", + "repo": "https://github.com/AnchyDev/RecycledItems.git", + "description": "An AzerothCore module that recycles unwanted items to the auction house.", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: only virtual member functions can be marked 'override'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "block_reason": "Compilation error: only virtual member functions can be marked 'override'", + "last_modified": "2024-07-13T03:03:32Z" + }, + { + "key": "MODULE_MOD_NPC_SUBCLASS", + "name": "mod-npc-subclass", + "repo": "https://github.com/xiii-hearts/mod-npc-subclass.git", + "description": "Adds an NPC that will teach all available Armours & Weapons Proficiency.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-07-05T04:16:15Z" + }, + { + "key": "MODULE_ATTRIBOOST", + "name": "Attriboost", + "repo": "https://github.com/AnchyDev/Attriboost.git", + "description": "AzerothCore module that adds a random attribute book.", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: 'OnLogin' marked 'override' but does not override", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "block_reason": "Compilation error: 'OnLogin' marked 'override' but does not override", + "last_modified": "2024-06-17T05:59:19Z" + }, + { + "key": "MODULE_PRESTIGIOUS", + "name": "Prestigious", + "repo": "https://github.com/AnchyDev/Prestigious.git", + "description": "AzerothCore module that allows prestige at max level.", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: use of undeclared identifier 'sSpellMgr'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "block_reason": "Compilation error: use of undeclared identifier 'sSpellMgr'", + "last_modified": "2024-06-17T05:55:46Z" + }, + { + "key": "MODULE_RECACHE", + "name": "Recache", + "repo": "https://github.com/AnchyDev/Recache.git", + "description": "Forces the client to obtain a new cache for each new session.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-06-15T12:30:06Z" + }, + { + "key": "MODULE_MOD_REWARD_SHOP", + "name": "mod_reward_shop", + "repo": "https://github.com/talamortis/mod_reward_shop.git", + "description": "Ingame shop for Azerothcore", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "block_reason": "Database import failure: npc.sql expects column 'modelid1' which no longer exists", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-06-12T20:30:17Z" + }, + { + "key": "MODULE_EXTENDEDXP", + "name": "ExtendedXP", + "repo": "https://github.com/AnchyDev/ExtendedXP.git", + "description": "An Azeroth Core module that adds alternative XP gains.", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: only virtual member functions can be marked 'override'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "block_reason": "Compilation error: only virtual member functions can be marked 'override'", + "last_modified": "2024-05-12T03:25:27Z" + }, + { + "key": "MODULE_MOD_LEVEL_15_BOOST", + "name": "mod-level-15-boost", + "repo": "https://github.com/fischerlol/mod-level-15-boost.git", + "description": "Optional level 15 boost so players can go straight into dungeons if they wish.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-04-23T03:07:23Z", + "block_reason": "Compilation error: no member named 'getLevel' in 'Player'" + }, + { + "key": "MODULE_BGQUEUECHECKER", + "name": "BGQueueChecker", + "repo": "https://github.com/AnchyDev/BGQueueChecker.git", + "description": "Ensures all party members have matching faction before queueing into battleground.", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: only virtual member functions can be marked 'override'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "block_reason": "Compilation error: only virtual member functions can be marked 'override'", + "last_modified": "2024-04-16T22:46:02Z" + }, + { + "key": "MODULE_ADDON_FACTION_FREE_UNIT_POPUP", + "name": "addon-Faction-Free-Unit-Popup", + "repo": "https://github.com/gitdalisar/addon-Faction-Free-Unit-Popup.git", + "description": "Faction Free Unit Popup is a WOTLK 3.3.5a (Azerothcore base) addon allow a player to whisper and invite a player of the opposing faction, which is hidden by default.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-04-13T04:02:25Z" + }, + { + "key": "MODULE_MOD_ENCOUNTER_LOGS", + "name": "mod-encounter-logs", + "repo": "https://github.com/MellianStudios/mod-encounter-logs.git", + "description": "", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "block_reason": "Compilation error: no member named 'IsWorldObject' in 'Unit'", + "last_modified": "2024-04-01T13:19:31Z" + }, + { + "key": "MODULE_MOD_TRADE_ITEMS_FILTER", + "name": "mod-trade-items-filter", + "repo": "https://github.com/Elmsroth/mod-trade-items-filter.git", + "description": "AzerothCore custom module which allows filtering traded items", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: only virtual member functions can be marked 'override'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-03-30T19:09:45Z", + "block_reason": "Compilation error: only virtual member functions can be marked 'override'" + }, + { + "key": "MODULE_MOD_QUEST_STATUS", + "name": "mod-quest-status", + "repo": "https://github.com/pangolp/mod-quest-status.git", + "description": "This module allows you to search for quests by ID, which gives you greater precision in your search.", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: only virtual member functions can be marked 'override'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-03-28T12:23:12Z", + "block_reason": "Compilation error: only virtual member functions can be marked 'override'" + }, + { + "key": "MODULE_MOD_PVPSCRIPT", + "name": "mod-PvPScript", + "repo": "https://github.com/talamortis/mod-PvPScript.git", + "description": "PvPScript for Azerothcore", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: no member named 'SendNotification' in 'WorldSession'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "block_reason": "Compilation error: no member named 'SendNotification' in 'WorldSession'", + "last_modified": "2024-03-12T19:25:17Z" + }, + { + "key": "MODULE_ITEMBROADCASTGUILDCHAT", + "name": "ItemBroadcastGuildChat", + "repo": "https://github.com/AnchyDev/ItemBroadcastGuildChat.git", + "description": "Broadcasts items with the ITEM_FLAG_REPORT_TO_GUILD_CHAT flag to guild chat.", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: only virtual member functions can be marked 'override'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "block_reason": "Compilation error: only virtual member functions can be marked 'override'", + "last_modified": "2024-03-11T21:51:15Z" + }, + { + "key": "MODULE_FFAFIX", + "name": "FFAFix", + "repo": "https://github.com/AnchyDev/FFAFix.git", + "description": "Fixes FFA for safe zones.", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: only virtual member functions can be marked 'override'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "block_reason": "Compilation error: only virtual member functions can be marked 'override'", + "last_modified": "2024-02-13T04:46:55Z" + }, + { + "key": "MODULE_ACI", + "name": "ACI", + "repo": "https://github.com/AnchyDev/ACI.git", + "description": "AzerothCore Interconnect", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: no member named 'StringFormatFmt' in namespace 'Acore'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "block_reason": "Compilation error: no member named 'StringFormatFmt' in namespace 'Acore'", + "last_modified": "2023-11-17T06:06:28Z" + }, + { + "key": "MODULE_RAIDTELEPORTER", + "name": "RaidTeleporter", + "repo": "https://github.com/StealthyApe/RaidTeleporter.git", + "description": "Module that adds teleports to Raid bosses for AzerothCore", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2023-11-06T09:30:35Z", + "block_reason": "Auto-disabled: Module not updated in >2 years (last: 2023-11-06)" + }, + { + "key": "MODULE_MOD_QUICKBALANCE", + "name": "mod-quickbalance", + "repo": "https://github.com/hallgaeuer/mod-quickbalance.git", + "description": "This module is intended to provide fixed balance adjustments for raids and dungeons (NOT autobalancing).", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2023-10-26T21:35:15Z", + "block_reason": "Auto-disabled: Module not updated in >2 years (last: 2023-10-26)" + }, + { + "key": "MODULE_MOD_DEAD_MEANS_DEAD", + "name": "mod-dead-means-dead", + "repo": "https://github.com/kjack9/mod-dead-means-dead.git", + "description": "AzerothCore module to alter or remove the respawn timer on creatures.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "block_reason": "Compilation error: only virtual member functions can be marked 'override'", + "last_modified": "2023-10-22T04:01:56Z" + }, + { + "key": "MODULE_MOD_DYNAMIC_LOOT_RATES", + "name": "mod-dynamic-loot-rates", + "repo": "https://github.com/hallgaeuer/mod-dynamic-loot-rates.git", + "description": "Azerothcore module to allow for different group / reference loot rates in dungeons and raids", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2023-10-08T18:17:01Z", + "block_reason": "Auto-disabled: Module not updated in >2 years (last: 2023-10-08)" + }, + { + "key": "MODULE_MOD_SHARE_MOUNTS", + "name": "mod-share-mounts", + "repo": "https://github.com/microbica/mod-share-mounts.git", + "description": "Share your mounts", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2023-10-01T02:35:34Z", + "block_reason": "Auto-disabled: Module not updated in >2 years (last: 2023-10-01)" + }, + { + "key": "MODULE_MOD_PREMIUM", + "name": "mod-premium", + "repo": "https://github.com/talamortis/mod-premium.git", + "description": "This is a module for AzerothCore that adds Premium account features to players.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2023-09-06T12:29:40Z", + "block_reason": "Auto-disabled: Module not updated in >2 years (last: 2023-09-06)" + }, + { + "key": "MODULE_MOD_GLOBALCHAT", + "name": "mod-globalchat", + "repo": "https://github.com/Gozzim/mod-globalchat.git", + "description": "AzerothCore Module for an Advanced Global Chat", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2023-08-26T23:42:28Z", + "block_reason": "Auto-disabled: Module not updated in >2 years (last: 2023-08-26)" + }, + { + "key": "MODULE_MOD_LEECH", + "name": "mod-leech", + "repo": "https://github.com/ZhengPeiRu21/mod-leech.git", + "description": "An AzerothCore module that heals players when dealing damage.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2023-08-05T21:10:28Z", + "block_reason": "Auto-disabled: Module not updated in >2 years (last: 2023-08-05)" + }, + { + "key": "MODULE_PLAYERTELEPORT", + "name": "PlayerTeleport", + "repo": "https://github.com/talamortis/PlayerTeleport.git", + "description": "Module for Azerothcore to teleport players to with a command", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: only virtual member functions can be marked 'override'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "block_reason": "Compilation error: only virtual member functions can be marked 'override'", + "last_modified": "2023-07-20T09:17:55Z" + }, + { + "key": "MODULE_WRATH_OF_THE_VANILLA", + "name": "wrath-of-the-vanilla", + "repo": "https://github.com/noisiver/wrath-of-the-vanilla.git", + "description": "", + "type": "sql", + "category": "database", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2023-06-08T13:03:39Z" + }, + { + "key": "MODULE_STATBOOSTERREROLLER", + "name": "StatBoosterReroller", + "repo": "https://github.com/AnchyDev/StatBoosterReroller.git", + "description": "Adds a re-roll item for StatBooster bonus stat.", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: 'StatBoostMgr.h' file not found", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "block_reason": "Compilation error: 'StatBoostMgr.h' file not found", + "last_modified": "2023-02-21T22:22:43Z" + }, + { + "key": "MODULE_MOD_SPONSORSHIP", + "name": "mod_sponsorship", + "repo": "https://github.com/Miithrandiir/mod_sponsorship.git", + "description": "", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2023-01-17T10:54:50Z", + "block_reason": "Auto-disabled: Module not updated in >2 years (last: 2023-01-17)" + }, + { + "key": "MODULE_MOD_PROFSPECS", + "name": "mod-profspecs", + "repo": "https://github.com/bewarellamas/mod-profspecs.git", + "description": "Profession Spec module for AzerothCore", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2022-10-25T15:19:30Z", + "block_reason": "Auto-disabled: Module not updated in >2 years (last: 2022-10-25)" + }, + { + "key": "MODULE_UPDATE_MOB_LEVEL_TO_PLAYER_AND_RANDOM_ITEM_STATS", + "name": "Update-mob-level-to-player-and-Random-item-stats", + "repo": "https://github.com/Regrad/Update-mob-level-to-player-and-Random-item-stats.git", + "description": "Update-mob-level-to-player and Random-item-stats", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2022-10-09T20:07:59Z", + "block_reason": "Auto-disabled: Module not updated in >2 years (last: 2022-10-09)" + }, + { + "key": "MODULE_MOD_PREMIUM_LIB", + "name": "mod-premium-lib", + "repo": "https://github.com/azerothcore/mod-premium-lib.git", + "description": "A library module for all premium modules. Use it as a dependency.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2022-09-12T21:32:06Z", + "block_reason": "Auto-disabled: Module not updated in >2 years (last: 2022-09-12)" + }, + { + "key": "MODULE_MOD_SPAWNPOINTS", + "name": "mod-spawnpoints", + "repo": "https://github.com/noisiver/mod-spawnpoints.git", + "description": "", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2022-06-11T02:14:12Z", + "block_reason": "Auto-disabled: Module not updated in >2 years (last: 2022-06-11)" + }, + { + "key": "MODULE_MOD_FIRSTLOGIN_AIO", + "name": "mod-FirstLogin-AIO", + "repo": "https://github.com/Gozzim/mod-FirstLogin-AIO.git", + "description": "All-In-One Solution module to easily enable features for new players", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: no member named 'getLevel'; did you mean 'GetLevel'?", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "block_reason": "Compilation error: no member named 'getLevel'; did you mean 'GetLevel'?", + "last_modified": "2022-04-07T13:27:27Z" + }, + { + "key": "MODULE_KARGATUM_SYSTEM", + "name": "kargatum-system", + "repo": "https://github.com/Winfidonarleyan/kargatum-system.git", + "description": "Custom scipts and modules for Azerothcore", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: no member named 'PQuery' / 'outString' in Log", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "block_reason": "Compilation error: no member named 'PQuery' / 'outString' in Log", + "last_modified": "2022-03-11T22:42:24Z" + }, + { + "key": "MODULE_MOD_INDIVIDUAL_XP", + "name": "mod-individual-XP", + "repo": "https://github.com/talamortis/mod-individual-XP.git", + "description": "Individual player xp module for Azerothcore", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2022-02-08T06:52:16Z", + "block_reason": "Auto-disabled: Module not updated in >2 years (last: 2022-02-08)" + }, + { + "key": "MODULE_MOD_SPEC_REWARD", + "name": "mod_spec_reward", + "repo": "https://github.com/betayi/mod_spec_reward.git", + "description": "Module of Azerothcore, Reward players with spec after boss killed.", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2022-02-03T15:09:38Z", + "block_reason": "Auto-disabled: Module not updated in >2 years (last: 2022-02-03)" + }, + { + "key": "MODULE_MOD_ACTIVATEZONES", + "name": "mod-activatezones", + "repo": "https://github.com/noisiver/mod-activatezones.git", + "description": "", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: Missing config identifier", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "block_reason": "Compilation error: use of undeclared identifier 'CONFIG_SET_ALL_CREATURES_WITH_WAYPOINT_MOVEMENT_ACTIVE'", + "last_modified": "2021-12-28T13:46:15Z" + }, + { + "key": "MODULE_MOD_INFLUXDB", + "name": "mod-influxdb", + "repo": "https://github.com/maluramichael/mod-influxdb.git", + "description": "Pushes server and player events into an influxdb instance.", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: Build fails - requires CURL library (missing: CURL_LIBRARY CURL_INCLUDE_DIR)", + "status": "blocked", + "block_reason": "CMake Error: Could NOT find CURL", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2021-09-17T17:53:21Z" + }, + { + "key": "MODULE_MOD_SPELLREGULATOR", + "name": "mod-spellregulator", + "repo": "https://github.com/vhiperdev/mod-spellregulator.git", + "description": "Spell Regulator module for AzerothCore", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: redefinition of 'AddSpellRegulatorScripts'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "block_reason": "Compilation error: redefinition of 'AddSpellRegulatorScripts'", + "last_modified": "2020-08-30T17:02:43Z" + }, + { + "key": "MODULE_MOD_ITEMLEVEL", + "name": "mod-ItemLevel", + "repo": "https://github.com/talamortis/mod-ItemLevel.git", + "description": "Module for Azerothcore", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: 'ChatHandler' is an incomplete type", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "block_reason": "Compilation error: 'ChatHandler' is an incomplete type", + "last_modified": "2020-08-30T16:54:08Z" + }, + { + "key": "MODULE_MOD_DYNAMIC_RESURRECTIONS", + "name": "mod-Dynamic-Resurrections-", + "repo": "https://github.com/ELdoBA/mod-Dynamic-Resurrections-.git", + "description": "AzerothCore Module", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2019-07-16T11:08:49Z", + "block_reason": "Auto-disabled: Module not updated in >2 years (last: 2019-07-16)" + }, + { + "key": "MODULE_MOD_ALPHA_REWARDS", + "name": "mod-alpha-rewards", + "repo": "https://github.com/azerothcore/mod-alpha-rewards.git", + "description": "WIP reward system for AC ingame shop", + "type": "cpp", + "category": "uncategorized", + "notes": "DISABLED: API incompatibility - ConfigMgr missing GetIntDefault method", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "block_reason": "Compilation error: no member named 'GetIntDefault' in 'ConfigMgr'", + "last_modified": "2019-02-15T21:48:01Z" + }, + { + "key": "MODULE_MOD_WHOLOGGED", + "name": "mod-whologged", + "repo": "https://github.com/talamortis/mod-whologged.git", + "description": "who logged module for Azerothcore", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2018-07-03T07:31:28Z", + "block_reason": "Auto-disabled: Module not updated in >2 years (last: 2018-07-03)" + }, + { + "key": "MODULE_REWARD_SYSTEM", + "name": "reward-system", + "repo": "https://github.com/talamortis/reward-system.git", + "description": "Reward System for Azerothcore", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2018-07-02T12:39:55Z", + "block_reason": "Auto-disabled: Module not updated in >2 years (last: 2018-07-02)" + }, + { + "key": "MODULE_MOD_CHARACTER_TOOLS", + "name": "mod_character_tools", + "repo": "https://github.com/talamortis/mod_character_tools.git", + "description": "character tools", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2018-07-02T12:37:32Z", + "block_reason": "Auto-disabled: Module not updated in >2 years (last: 2018-07-02)" + }, + { + "key": "MODULE_MOD_NO_FARMING", + "name": "mod-no-farming", + "repo": "https://github.com/vhiperdev/mod-no-farming.git", + "description": "Module for AzerothCore", + "type": "cpp", + "category": "uncategorized", + "notes": "Discovered via GitHub topic 'azerothcore-module'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2018-05-15T18:19:29Z", + "block_reason": "Auto-disabled: Module not updated in >2 years (last: 2018-05-15)" + }, + { + "key": "MODULE_CODEBASE", + "name": "codebase", + "repo": "https://github.com/noisiver/codebase.git", + "description": "", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-11-18T16:40:09Z" + }, + { + "key": "MODULE_KEIRA3", + "name": "Keira3", + "repo": "https://github.com/azerothcore/Keira3.git", + "description": "Official Database Editor for AzerothCore. Completely open-source and cross-platform, built with modern web technologies.", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-11-21T01:00:49Z" + }, + { + "key": "MODULE_ACORE_LXD_IMAGE", + "name": "acore-lxd-image", + "repo": "https://github.com/nolt/acore-lxd-image.git", + "description": "AzerothCore on LXD container; install, setup and configure script", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-11-06T14:42:34Z" + }, + { + "key": "MODULE_SAHTOUTCMS", + "name": "SahtoutCMS", + "repo": "https://github.com/blodyiheb/SahtoutCMS.git", + "description": "SahtoutCMS is a free Website CMS made for World of Warcraft private servers. Works with AzerothCore and includes account management,Voting, shop, and admin tools.", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-11-05T12:44:43Z" + }, + { + "key": "MODULE_WOWDATABASEEDITOR", + "name": "WoWDatabaseEditor", + "repo": "https://github.com/BAndysc/WoWDatabaseEditor.git", + "description": "Integrated development environment (IDE), an editor for Smart Scripts (SAI/smart_scripts) for TrinityCore based servers. Cmangos support work in progress. Featuring a 3D view built with OpenGL and custom ECS framework", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-11-18T11:22:39Z" + }, + { + "key": "MODULE_ACREBUILD", + "name": "ACrebuild", + "repo": "https://github.com/Stuntmonkey4u/ACrebuild.git", + "description": "A user friendly script managing your Azerothcore server", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-10-30T06:50:04Z" + }, + { + "key": "MODULE_ACORE_CMS", + "name": "acore-cms", + "repo": "https://github.com/azerothcore/acore-cms.git", + "description": "ACore CMS based on Wordpress", + "type": "tool", + "category": "tooling", + "notes": "Disabled due to runtime error: Table 'acore_auth.acore_cms_subscriptions' doesn't exist - causes server abort", + "status": "blocked", + "block_reason": "Runtime error: Missing database table", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-10-22T11:12:20Z" + }, + { + "key": "MODULE_SERVER_STATUS", + "name": "server-status", + "repo": "https://github.com/azerothcore/server-status.git", + "description": "AzerothCore Server status", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "blocked", + "block_reason": "Linker failure: ModulesLoader expects Addserver_statusScripts() but module has no script loader", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-09-21T08:03:50Z" + }, + { + "key": "MODULE_AZEROTHCORE_ARMORY", + "name": "azerothcore-armory", + "repo": "https://github.com/r-o-b-o-t-o/azerothcore-armory.git", + "description": "A website to view your AzerothCore server's characters", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "blocked", + "block_reason": "Linker failure: ModulesLoader expects Addazerothcore_armoryScripts() but module has no C++ loader", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-08-27T17:42:15Z" + }, + { + "key": "MODULE_ARENA_STATS", + "name": "arena-stats", + "repo": "https://github.com/azerothcore/arena-stats.git", + "description": "Arena Stats for AzerothCore", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "blocked", + "block_reason": "Linker failure: ModulesLoader expects Addarena_statsScripts() but module has no C++ loader", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-09-21T08:20:07Z" + }, + { + "key": "MODULE_AZEROTHCORE_SERVER_MANAGER", + "name": "azerothcore-server-manager", + "repo": "https://github.com/Kitzunu/azerothcore-server-manager.git", + "description": "Server Manager for AzerothCore", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-06-17T21:31:10Z" + }, + { + "key": "MODULE_WOWSIMS_TO_COMMANDS", + "name": "wowsims-to-commands", + "repo": "https://github.com/sogladev/wowsims-to-commands.git", + "description": "Extracts gear from a wowsims .json and creates a set of .add for gear, enchants, gems, and glyphs", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-05-31T13:05:11Z" + }, + { + "key": "MODULE_UPDATE_MODULE_CONFS", + "name": "update_module_confs", + "repo": "https://github.com/Brian-Aldridge/update_module_confs.git", + "description": "A script that adds newly added configuration options after a module update.", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-05-31T01:40:14Z" + }, + { + "key": "MODULE_ACORE_API", + "name": "acore-api", + "repo": "https://github.com/azerothcore/acore-api.git", + "description": "RESTful APIs for AzerothCore.", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "blocked", + "block_reason": "Linker failure: ModulesLoader expects Addacore_apiScripts() but module provides no C++ loader", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-04-26T14:07:00Z" + }, + { + "key": "MODULE_AZEROTHCORE_REGISTRATION_PAGE", + "name": "AzerothCore-Registration-Page", + "repo": "https://github.com/Ferreira9006/AzerothCore-Registration-Page.git", + "description": "Open Source - AzerothCore registration Page", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-03-09T10:51:45Z" + }, + { + "key": "MODULE_MPQ_TOOLS_OSX", + "name": "mpq-tools-osx", + "repo": "https://github.com/araxiaonline/mpq-tools-osx.git", + "description": "MPQ Builder Tools for Mac OSX", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-03-05T05:21:49Z" + }, + { + "key": "MODULE_ACORE_TILEMAP", + "name": "acore-tilemap", + "repo": "https://github.com/GabrielleAkers/acore-tilemap.git", + "description": "tilemap view of wow 3.3.5a ", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "blocked", + "block_reason": "Linker failure: ModulesLoader expects Addacore_tilemapScripts() but module has no C++ loader", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-02-13T06:34:44Z" + }, + { + "key": "MODULE_AZEROTHCORE_PASSRESET", + "name": "azerothcore-passreset", + "repo": "https://github.com/iDizoxx/azerothcore-passreset.git", + "description": "Password reset for azeroth core.", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-02-02T22:25:22Z" + }, + { + "key": "MODULE_FLAG_CHECKER", + "name": "flag-checker", + "repo": "https://github.com/azerothcore/flag-checker.git", + "description": "Flag Checker for AzerothCore", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-12-29T16:08:14Z" + }, + { + "key": "MODULE_WOW_SERVER_RELAY", + "name": "WoW-Server-Relay", + "repo": "https://github.com/masterking32/WoW-Server-Relay.git", + "description": "This is a Relay Server for World of Warcraft, designed to function as a Content Delivery Network (CDN) for the game. It conceals the actual server IP to safeguard it from DDoS attacks. Additionally, it enhances the ping for players, providing a smoother gaming experience.", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-12-25T02:06:59Z" + }, + { + "key": "MODULE_ACORE_CLIENT", + "name": "acore-client", + "repo": "https://github.com/azerothcore/acore-client.git", + "description": "Web client to consume azerothcore opcodes", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "blocked", + "block_reason": "Linker failure: ModulesLoader expects Addacore_clientScripts() but module has no script loader", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-12-05T23:42:48Z" + }, + { + "key": "MODULE_AZEROTHCORE_WEBSITE", + "name": "AzerothCore-website", + "repo": "https://github.com/BeardedInfoSec/AzerothCore-website.git", + "description": "", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-11-15T14:02:49Z" + }, + { + "key": "MODULE_PVPSTATS", + "name": "PvPstats", + "repo": "https://github.com/azerothcore/PvPstats.git", + "description": "The missing PvP statistics system for World of Warcraft", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-11-06T18:11:47Z" + }, + { + "key": "MODULE_SPELLSCRIPT_REFACTOR_TOOL", + "name": "spellscript-refactor-tool", + "repo": "https://github.com/sogladev/spellscript-refactor-tool.git", + "description": "Python tool to convert spellscript(s) to use registry macros ", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-11-01T17:03:16Z" + }, + { + "key": "MODULE_STRAPI_AZEROTHCORE", + "name": "strapi-azerothcore", + "repo": "https://github.com/r-o-b-o-t-o/strapi-azerothcore.git", + "description": "AzerothCore integration in Strapi CMS", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-09-29T13:30:17Z" + }, + { + "key": "MODULE_WOW_ELUNA_TS_MODULE", + "name": "wow-eluna-ts-module", + "repo": "https://github.com/araxiaonline/wow-eluna-ts-module.git", + "description": "Eluna-TS Module building package for mod-eluna for AzerothCore", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-09-05T23:51:46Z" + }, + { + "key": "MODULE_WOW_STATISTICS", + "name": "wow-statistics", + "repo": "https://github.com/azerothcore/wow-statistics.git", + "description": "", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "blocked", + "block_reason": "Linker failure: ModulesLoader expects Addwow_statisticsScripts() but module does not export it", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-09-03T08:15:43Z" + }, + { + "key": "MODULE_AZEROTHCORE_ANSIBLE", + "name": "azerothcore-ansible", + "repo": "https://github.com/Zoidwaffle/azerothcore-ansible.git", + "description": "Install and maintain AzerothCore easily using Ansible.", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-07-20T14:44:31Z" + }, + { + "key": "MODULE_GUILDBANKTABFEEFIXER", + "name": "GuildBankTabFeeFixer", + "repo": "https://github.com/TheDiscordian/GuildBankTabFeeFixer.git", + "description": "For WoW clients 3.3.5a connecting to servers with modified guild bank tab fees.", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-06-23T21:25:26Z" + }, + { + "key": "MODULE_TELEGRAM_AUTOMATED_DB_BACKUP", + "name": "telegram-automated-db-backup", + "repo": "https://github.com/azerothcore/telegram-automated-db-backup.git", + "description": "Python script to automated the db backup using Telegram as cloud storage", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-05-22T17:22:32Z" + }, + { + "key": "MODULE_AZEROTHCOREDISCORDBOT", + "name": "AzerothCoreDiscordBot", + "repo": "https://github.com/XanderDeLaet/AzerothCoreDiscordBot.git", + "description": "A Discord Bot that connects to your AzerothCore server so you / users can manage the server / character. Made for AzerothCore / azerothcore-tools", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-04-25T07:41:45Z" + }, + { + "key": "MODULE_WOW_CLIENT_PATCHER", + "name": "wow-client-patcher", + "repo": "https://github.com/araxiaonline/wow-client-patcher.git", + "description": "Desktop Application used to manage WoW 3.3.5a client patches to players from cloud server ", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "blocked", + "block_reason": "Linker failure: ModulesLoader expects Addwow_client_patcherScripts() but module provides no script loader", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-03-29T02:05:22Z" + }, + { + "key": "MODULE_BG_QUEUE_ABUSER_VIEWER", + "name": "BG-Queue-Abuser-Viewer", + "repo": "https://github.com/Helias/BG-Queue-Abuser-Viewer.git", + "description": "Tool to check battleground queue abuse", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "blocked", + "block_reason": "Linker failure: ModulesLoader expects AddBG_Queue_Abuser_ViewerScripts() but module has no script loader", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-03-28T13:49:23Z" + }, + { + "key": "MODULE_ARENA_SPECTATOR", + "name": "arena-spectator", + "repo": "https://github.com/azerothcore/arena-spectator.git", + "description": "", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2023-11-12T00:54:22Z" + }, + { + "key": "MODULE_TOOL_TC_MIGRATION", + "name": "tool-tc-migration", + "repo": "https://github.com/azerothcore/tool-tc-migration.git", + "description": " [EXPERIMENTAL] Some tools to migrate characters database from TrinityCore to AzerothCore.", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2023-09-03T01:57:08Z" + }, + { + "key": "MODULE_AZEROTHCOREADMIN", + "name": "AzerothCoreAdmin", + "repo": "https://github.com/LightDestory/AzerothCoreAdmin.git", + "description": "AzerothCoreAdmin (ACAdmin) is a general interface add-on which will help an admin in-game of AzerothCore-based private servers.", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2023-04-18T09:11:52Z" + }, + { + "key": "MODULE_AUTO_CHECK_RESTART", + "name": "Auto_Check_ReStart", + "repo": "https://github.com/helldragonpz/Auto_Check_ReStart.git", + "description": "Small Auto Check Restart bash script for AzerothCore.", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2023-02-17T20:37:02Z" + }, + { + "key": "MODULE_TRANSMOG_ADDONS", + "name": "transmog-addons", + "repo": "https://github.com/ZhengPeiRu21/transmog-addons.git", + "description": "Transmog Catalogue Addons for WotLK", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2022-08-31T03:29:07Z" + }, + { + "key": "MODULE_ACORE_BOX", + "name": "acore-box", + "repo": "https://github.com/nolt/acore-box.git", + "description": "ACore Box is ready to go VM with AzerothCore server based on Ubuntu 20.04 with minimal XFCE desktop.", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2022-07-08T07:53:21Z" + }, + { + "key": "MODULE_NODEROUTER", + "name": "noderouter", + "repo": "https://github.com/Drassil/noderouter.git", + "description": "Programmable proxy with integrated discovery-service, tunneling and DNS", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "blocked", + "block_reason": "Linker failure: ModulesLoader expects AddnoderouterScripts() but module has no C++ loader", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2022-05-05T07:15:30Z" + }, + { + "key": "MODULE_WORLD_BOSS_RANK", + "name": "world-boss-rank", + "repo": "https://github.com/azerothcore/world-boss-rank.git", + "description": "World Boss Ranks - ranking list related to LUA - EventScripts", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "blocked", + "block_reason": "Linker failure: ModulesLoader expects Addworld_boss_rankScripts() but module has no C++ loader", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2021-12-13T18:04:44Z" + }, + { + "key": "MODULE_APAW", + "name": "apaw", + "repo": "https://github.com/azerothcore/apaw.git", + "description": "Another PHP Api for WoW", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "blocked", + "block_reason": "Linker failure: ModulesLoader expects AddapawScripts() but module has no C++ loader", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2021-06-08T20:51:15Z" + }, + { + "key": "MODULE_ACORE_MINI_REG_PAGE", + "name": "acore-mini-reg-page", + "repo": "https://github.com/nolt/acore-mini-reg-page.git", + "description": "Smple and minimalistic registation-only page for AzertohCore", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2021-05-28T21:37:27Z" + }, + { + "key": "MODULE_ACORE_PWA", + "name": "acore-pwa", + "repo": "https://github.com/azerothcore/acore-pwa.git", + "description": "Progressive Web App for acore-node-server", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "blocked", + "block_reason": "Linker failure: ModulesLoader expects Addacore_pwaScripts() but module has no C++ loader", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2021-04-30T18:23:50Z" + }, + { + "key": "MODULE_MYSQL_TOOLS", + "name": "mysql-tools", + "repo": "https://github.com/azerothcore/mysql-tools.git", + "description": "extended mysql dump and import tool helping with data distrubution and versioning structure", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2021-04-21T06:36:03Z" + }, + { + "key": "MODULE_ACORE_LINUX_RESTARTER", + "name": "acore-linux-restarter", + "repo": "https://github.com/nolt/acore-linux-restarter.git", + "description": "Linux restarter for AzerothCore server", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2020-08-31T18:59:38Z" + }, + { + "key": "MODULE_ACORE_NODE_SERVER", + "name": "acore-node-server", + "repo": "https://github.com/azerothcore/acore-node-server.git", + "description": "Official AzerothCore API Layer", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "blocked", + "block_reason": "Linker failure: ModulesLoader expects Addacore_node_serverScripts() but module has no C++ loader", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2020-06-22T14:54:46Z" + }, + { + "key": "MODULE_WEB_CHARACTER_MIGRATION_TOOL", + "name": "web-character-migration-tool", + "repo": "https://github.com/azerothcore/web-character-migration-tool.git", + "description": "Character migration tool", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2019-03-15T21:23:44Z" + }, + { + "key": "MODULE_WOWLAUNCHER_DELPHI", + "name": "wowlauncher-delphi", + "repo": "https://github.com/azerothcore/wowlauncher-delphi.git", + "description": "An old Launcher written in DELPHI/PASCAL for wow 3.x.x , 2.x.x , 1.x.x", + "type": "tool", + "category": "tooling", + "notes": "Discovered via GitHub topic 'azerothcore-tools'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2016-02-16T18:56:19Z" + }, + { + "key": "MODULE_LUA_PARAGON_ANNIVERSARY", + "name": "lua-paragon-anniversary", + "repo": "https://github.com/iThorgrim/lua-paragon-anniversary.git", + "description": "", + "type": "lua", + "category": "scripting", + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "status": "blocked", + "block_reason": "Linker failure: ModulesLoader expects Addlua_paragon_anniversaryScripts() but Lua-only module has no C++ loader", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-11-18T06:23:02Z" + }, + { + "key": "MODULE_AZEROTHCORE_ADDITIONS", + "name": "AzerothCore-Additions", + "repo": "https://github.com/TheSCREWEDSoftware/AzerothCore-Additions.git", + "description": "This will be focus on SQL additions for the player.", + "type": "lua", + "category": "scripting", + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-11-17T16:39:51Z" + }, + { + "key": "MODULE_AZEROTHCORE_LUA_DEMON_MORPHER", + "name": "azerothcore-lua-demon-morpher", + "repo": "https://github.com/mostlynick3/azerothcore-lua-demon-morpher.git", + "description": "Lets players change the display ID that their demon pets are set to.", + "type": "lua", + "category": "scripting", + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-11-01T07:48:10Z" + }, + { + "key": "MODULE_1V1_PVP_SYSTEM", + "name": "1v1_pvp_system", + "repo": "https://github.com/PrivateDonut/1v1_pvp_system.git", + "description": "SImple 1v1 PvP Queue System for AzerothCore with Eluna. Automated matchmaking with best-of-3 rounds.", + "type": "lua", + "category": "scripting", + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-09-03T16:58:02Z" + }, + { + "key": "MODULE_LUA_PVP_TITLES_RANKING_SYSTEM", + "name": "Lua-PvP-Titles-Ranking-System", + "repo": "https://github.com/ghcamargo/Lua-PvP-Titles-Ranking-System.git", + "description": "Vanilla PvP Title System for Eluna Engine", + "type": "lua", + "category": "scripting", + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-07-01T00:02:43Z" + }, + { + "key": "MODULE_LUA_SCRIPTS", + "name": "lua_scripts", + "repo": "https://github.com/notepadguyOfficial/lua_scripts.git", + "description": "LUA script for Azerothcore with ElunaLUA.", + "type": "lua", + "category": "scripting", + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-06-24T11:54:25Z" + }, + { + "key": "MODULE_ACORE_SOD", + "name": "acore_sod", + "repo": "https://github.com/notepadguyOfficial/acore_sod.git", + "description": "LUA script for Azerothcore with ElunaLUA that gives buff which is Discoverer's Delight similar to SOD which is also base on player's level range for different Exp Bonus.", + "type": "lua", + "category": "scripting", + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-06-23T07:37:28Z" + }, + { + "key": "MODULE_CONFIG_RATES", + "name": "Config_Rates", + "repo": "https://github.com/Day36512/Config_Rates.git", + "description": "A list of scripts that can handle experience rates, gathering rates, and crafted item amounts in game with simple commands.", + "type": "lua", + "category": "scripting", + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-03-31T16:46:25Z" + }, + { + "key": "MODULE_AZEROTHCORE_TRIVIA_SYSTEM", + "name": "azerothcore-trivia-system", + "repo": "https://github.com/Aldori15/azerothcore-trivia-system.git", + "description": "Asks a series of trivia questions for players to answer", + "type": "lua", + "category": "scripting", + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-03-06T16:41:49Z" + }, + { + "key": "MODULE_LOTTERY_CHANCE_INSTANT", + "name": "lottery-chance-instant", + "repo": "https://github.com/zyggy123/lottery-chance-instant.git", + "description": "This script implements a simple lottery system.", + "type": "lua", + "category": "scripting", + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-01-27T03:44:55Z" + }, + { + "key": "MODULE_WEEKLY_ARMOR_VENDOR_BLACK_MARKET", + "name": "Weekly-Armor-Vendor-Black-Market-", + "repo": "https://github.com/Manmadedrummer/Weekly-Armor-Vendor-Black-Market-.git", + "description": "Vendor who has a different Armor Set for each class that changes weekly", + "type": "lua", + "category": "scripting", + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-09-22T15:57:17Z" + }, + { + "key": "MODULE_MORZA_ISLAND_ARAXIA_SERVER", + "name": "Morza-Island-Araxia-Server", + "repo": "https://github.com/Manmadedrummer/Morza-Island-Araxia-Server.git", + "description": "All the data for Moraz Island for the Araxia Server", + "type": "lua", + "category": "scripting", + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-08-25T00:08:10Z" + }, + { + "key": "MODULE_MOD_DEATHROLL_AIO", + "name": "mod-deathroll-aio", + "repo": "https://github.com/sogladev/mod-deathroll-aio.git", + "description": "module that implements Deathroll with ElunaLUA and AIO, compatible for AzerothCore, ElunaTrinityWotlk", + "type": "lua", + "category": "scripting", + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-07-31T23:55:06Z" + }, + { + "key": "MODULE_EXTENDED_HOLIDAYS_LUA", + "name": "Extended-Holidays-Lua", + "repo": "https://github.com/Day36512/Extended-Holidays-Lua.git", + "description": "A script that allows users to enable or disable specific holidays on server startup.", + "type": "lua", + "category": "scripting", + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2023-10-09T00:49:25Z" + }, + { + "key": "MODULE_ACORE_LUA_UNLIMITED_AMMO", + "name": "Acore_Lua_Unlimited_Ammo", + "repo": "https://github.com/Day36512/Acore_Lua_Unlimited_Ammo.git", + "description": "", + "type": "lua", + "category": "scripting", + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2023-08-25T19:28:46Z" + }, + { + "key": "MODULE_LUA_VIP", + "name": "lua_vip", + "repo": "https://github.com/WoWSur/lua_vip.git", + "description": "", + "type": "lua", + "category": "scripting", + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2023-08-02T06:26:23Z" + }, + { + "key": "MODULE_AZEROTHCORE_WOWHEAD_MOD_LUA", + "name": "azerothcore-wowhead-mod-lua", + "repo": "https://github.com/rafaelcalleja/azerothcore-wowhead-mod-lua.git", + "description": "", + "type": "lua", + "category": "scripting", + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2023-07-17T10:03:41Z" + }, + { + "key": "MODULE_ELUNA_WOW_SCRIPTS", + "name": "-Eluna-WoW-scripts", + "repo": "https://github.com/Dimi-Dun-Morogh/-Eluna-WoW-scripts.git", + "description": "", + "type": "lua", + "category": "scripting", + "notes": "DISABLED: Git clone fails with 'unknown switch E' error - likely due to hyphen in repo name", + "status": "blocked", + "block_reason": "Git clone error: unknown switch 'E'", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2023-06-27T20:36:01Z" + }, + { + "key": "MODULE_LUA_NOTONLY_RANDOMMORPHER", + "name": "lua-NotOnly-RandomMorpher", + "repo": "https://github.com/Shadowveil-WotLK/lua-NotOnly-RandomMorpher.git", + "description": "Morpher script written in lua for Azerothcore! (it should also be compatible with Trinitycore!)", + "type": "lua", + "category": "scripting", + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "status": "blocked", + "block_reason": "Linker failure: ModulesLoader expects Addlua_NotOnly_RandomMorpherScripts() but Lua-only module has no C++ loader", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2023-06-06T23:53:46Z" + }, + { + "key": "MODULE_LUA_ITEMUPGRADER_TEMPLATE", + "name": "lua-ItemUpgrader-Template", + "repo": "https://github.com/Shadowveil-WotLK/lua-ItemUpgrader-Template.git", + "description": "", + "type": "lua", + "category": "scripting", + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2023-04-20T16:31:39Z" + }, + { + "key": "MODULE_LUA_SUPER_BUFFERNPC", + "name": "lua-Super-BufferNPC", + "repo": "https://github.com/Shadowveil-WotLK/lua-Super-BufferNPC.git", + "description": "Buffer script written in lua by New-Haven WotLK (Krisande#5411) for Azerothcore but it probably will also work on Trinitycore!", + "type": "lua", + "category": "scripting", + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "status": "blocked", + "block_reason": "Linker failure: ModulesLoader expects Addlua_Super_BufferNPCScripts() but Lua-only module has no C++ loader", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2023-04-06T13:47:52Z" + }, + { + "key": "MODULE_ACORE_ZONEDEBUFF", + "name": "Acore_ZoneDebuff", + "repo": "https://github.com/55Honey/Acore_ZoneDebuff.git", + "description": "Lua script for Azerothcore with ElunaLUA to debuff players in zones listed in the configuration.", + "type": "lua", + "category": "scripting", + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2023-03-08T11:40:20Z" + }, + { + "key": "MODULE_ACORE_ELUNATEST", + "name": "Acore_ElunaTest", + "repo": "https://github.com/55Honey/Acore_ElunaTest.git", + "description": "Lua script for Azerothcore with ElunaLua. Serves to test hooks in the core.", + "type": "lua", + "category": "scripting", + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2022-04-03T19:24:39Z" + }, + { + "key": "MODULE_ACORE_SUMMONALL", + "name": "Acore_Summonall", + "repo": "https://github.com/55Honey/Acore_Summonall.git", + "description": "Lua script for Azerothcore with ElunaLua", + "type": "lua", + "category": "scripting", + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2022-02-20T17:22:32Z" + }, + { + "key": "MODULE_ACORE_BG_END_ANNOUNCER", + "name": "ACore-BG-End-Announcer", + "repo": "https://github.com/MalfurionWoW/ACore-BG-End-Announcer.git", + "description": "Announces when a Battleground End, with top kills, heal and damage.", + "type": "lua", + "category": "scripting", + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2021-06-17T13:29:10Z" + }, + { + "key": "MODULE_LUA_AIO_MODRATE_EXP", + "name": "lua-aio-modrate-exp", + "repo": "https://github.com/azerothcore/lua-aio-modrate-exp.git", + "description": "AIO experience modifier.", + "type": "lua", + "category": "scripting", + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2020-02-21T22:19:12Z" + }, + { + "key": "MODULE_LUA_COMMAND_PLUS", + "name": "lua-command-plus", + "repo": "https://github.com/azerothcore/lua-command-plus.git", + "description": "Command+ it's a script for create news command for AC.", + "type": "lua", + "category": "scripting", + "notes": "Discovered via GitHub topic 'azerothcore-lua'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2020-02-21T22:15:24Z" + }, + { + "key": "MODULE_TBC_RAID_HP_RESTORATION", + "name": "tbc-raid-hp-restoration", + "repo": "https://github.com/brighton-chi/tbc-raid-hp-restoration.git", + "description": "Restores TBC raid mob maximum HP to pre-3.0.2 levels", + "type": "sql", + "category": "database", + "notes": "Discovered via GitHub topic 'azerothcore-sql'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-11-13T06:22:50Z" + }, + { + "key": "MODULE_MOD_RARE_DROPS", + "name": "mod-rare-drops", + "repo": "https://github.com/StraysFromPath/mod-rare-drops.git", + "description": "This module adds thematically appropriate green and blue loot drops to ALL 450 Classic rares in Kalimdor and the Eastern Kingdoms.", + "type": "sql", + "category": "database", + "notes": "DISABLED: only virtual member functions can be marked 'override'", + "status": "blocked", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-11-05T03:17:33Z", + "block_reason": "Compilation error: only virtual member functions can be marked 'override'" + }, + { + "key": "MODULE_MOD_LEVEL_ONE_MOUNTS", + "name": "mod-level-one-mounts", + "repo": "https://github.com/tomcoffingiii/mod-level-one-mounts.git", + "description": "SQL to allow players to learn the initial riding skill and purchase mounts at level 1.", + "type": "sql", + "category": "database", + "notes": "Discovered via GitHub topic 'azerothcore-sql'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2025-03-30T22:52:45Z" + }, + { + "key": "MODULE_BLIZZLIKE_TELES", + "name": "blizzlike-teles", + "repo": "https://github.com/heyitsbench/blizzlike-teles.git", + "description": "SQL query for AzerothCore that replaces existing teleport points with blizzlike ones.", + "type": "sql", + "category": "database", + "notes": "Discovered via GitHub topic 'azerothcore-sql'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-10-23T01:28:25Z" + }, + { + "key": "MODULE_SQL_NPC_TELEPORTER", + "name": "sql-npc-teleporter", + "repo": "https://github.com/Zoidwaffle/sql-npc-teleporter.git", + "description": "This enables a teleporting NPC that will be able to send players to level and faction appropriate destinations such as starting areas, zones, dungeons and raids.", + "type": "sql", + "category": "database", + "notes": "Discovered via GitHub topic 'azerothcore-sql'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-08-27T16:04:07Z" + }, + { + "key": "MODULE_ACORE_MALL", + "name": "Acore_Mall", + "repo": "https://github.com/Day36512/Acore_Mall.git", + "description": "Creates a vendor mall at GM Island, backported from Trinity.", + "type": "sql", + "category": "database", + "notes": "Discovered via GitHub topic 'azerothcore-sql'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-08-08T19:53:44Z" + }, + { + "key": "MODULE_HEARTHSTONE_COOLDOWNS", + "name": "hearthstone-cooldowns", + "repo": "https://github.com/AsgavinYT/hearthstone-cooldowns.git", + "description": "SQL scripts to change hearthstone cooldowns from 30 minutes to 1/5/15 minutes or even 1 second.", + "type": "sql", + "category": "database", + "notes": "Discovered via GitHub topic 'azerothcore-sql'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-05-27T15:01:27Z" + }, + { + "key": "MODULE_AZEROTHCORE_ALL_STACKABLES_200", + "name": "azerothcore-all-stackables-200", + "repo": "https://github.com/AsgavinYT/azerothcore-all-stackables-200.git", + "description": "SQL script to change all stackables to 200 or more.", + "type": "sql", + "category": "database", + "notes": "Discovered via GitHub topic 'azerothcore-sql'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2024-05-27T01:14:20Z" + }, + { + "key": "MODULE_PORTALS_IN_ALL_CAPITALS", + "name": "portals-in-all-capitals", + "repo": "https://github.com/azerothcore/portals-in-all-capitals.git", + "description": "SQL script to add portals in every capital", + "type": "sql", + "category": "database", + "notes": "Discovered via GitHub topic 'azerothcore-sql'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2023-11-03T13:17:51Z" + }, + { + "key": "MODULE_AZTRAL_AIRLINES", + "name": "aztral-airlines", + "repo": "https://github.com/Logandros/aztral-airlines.git", + "description": "SQL Script to add Teleporter with options in every major city", + "type": "sql", + "category": "database", + "notes": "Discovered via GitHub topic 'azerothcore-sql'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2023-01-28T22:27:36Z" + }, + { + "key": "MODULE_MOD_IP2NATION", + "name": "mod-ip2nation", + "repo": "https://github.com/azerothcore/mod-ip2nation.git", + "description": "This module allows you to easily populate your ip2config & ip2nationcountries tables in the auth database", + "type": "sql", + "category": "database", + "notes": "Discovered via GitHub topic 'azerothcore-sql'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2021-01-20T18:40:43Z" + }, + { + "key": "MODULE_CLASSIC_MODE", + "name": "classic-mode", + "repo": "https://github.com/azerothcore/classic-mode.git", + "description": "SQL script to limit the player to the classic world (no TBC/WOTLK)", + "type": "sql", + "category": "database", + "notes": "Discovered via GitHub topic 'azerothcore-sql'", + "status": "active", + "order": 5000, + "requires": [], + "post_install_hooks": [], + "config_cleanup": [], + "last_modified": "2020-12-16T18:26:39Z" } ] } \ No newline at end of file diff --git a/config/module-profiles/all-modules.json b/config/module-profiles/all-modules.json index f7e9948..36df2f6 100644 --- a/config/module-profiles/all-modules.json +++ b/config/module-profiles/all-modules.json @@ -1,95 +1,345 @@ { "modules": [ - "MODULE_1V1_ARENA", - "MODULE_ACCOUNTWIDE_SYSTEMS", - "MODULE_ACCOUNT_ACHIEVEMENTS", - "MODULE_ACCOUNT_MOUNTS", - "MODULE_ACORE_SUBSCRIPTIONS", - "MODULE_ACTIVE_CHAT", - "MODULE_AHBOT", - "MODULE_AIO", - "MODULE_AIO_BLACKJACK", - "MODULE_ANTIFARMING", + "MODULE_PLAYERBOTS", "MODULE_AOE_LOOT", - "MODULE_ARAC", - "MODULE_ARENA_REPLAY", - "MODULE_ASSISTANT", - "MODULE_AUTOBALANCE", - "MODULE_AUTO_REVIVE", - "MODULE_AZEROTHSHARD", - "MODULE_BG_SLAVERYVALLEY", - "MODULE_BLACK_MARKET_AUCTION_HOUSE", - "MODULE_BOSS_ANNOUNCER", - "MODULE_BREAKING_NEWS", - "MODULE_CARBON_COPY", - "MODULE_CHALLENGE_MODES", - "MODULE_DISCORD_NOTIFIER", - "MODULE_DUEL_RESET", - "MODULE_DUNGEON_RESPAWN", - "MODULE_DYNAMIC_TRADER", - "MODULE_DYNAMIC_XP", - "MODULE_ELUNA", - "MODULE_ELUNA_SCRIPTS", - "MODULE_ELUNA_TS", - "MODULE_EVENT_SCRIPTS", - "MODULE_EXCHANGE_NPC", + "MODULE_LEARN_SPELLS", "MODULE_FIREWORKS", + "MODULE_INDIVIDUAL_PROGRESSION", + "MODULE_AUTOBALANCE", + "MODULE_TRANSMOG", + "MODULE_NPC_BUFFER", + "MODULE_DYNAMIC_XP", + "MODULE_SOLO_LFG", + "MODULE_1V1_ARENA", + "MODULE_PHASED_DUELS", + "MODULE_BREAKING_NEWS", + "MODULE_BOSS_ANNOUNCER", + "MODULE_ACCOUNT_ACHIEVEMENTS", + "MODULE_AUTO_REVIVE", "MODULE_GAIN_HONOR_GUARD", - "MODULE_GLOBAL_CHAT", + "MODULE_ELUNA", + "MODULE_TIME_IS_TIME", + "MODULE_RANDOM_ENCHANTS", + "MODULE_SOLOCRAFT", + "MODULE_PVP_TITLES", + "MODULE_NPC_BEASTMASTER", + "MODULE_NPC_ENCHANTER", + "MODULE_INSTANCE_RESET", + "MODULE_ARAC", + "MODULE_ASSISTANT", + "MODULE_REAGENT_BANK", + "MODULE_BLACK_MARKET_AUCTION_HOUSE", + "MODULE_OLLAMA_CHAT", + "MODULE_PLAYER_BOT_LEVEL_BRACKETS", + "MODULE_SKELETON_MODULE", + "MODULE_BG_SLAVERYVALLEY", + "MODULE_WORGOBLIN", + "MODULE_ELUNA_TS", + "MODULE_AIO", + "MODULE_ELUNA_SCRIPTS", + "MODULE_TRANSMOG_AIO", + "MODULE_EVENT_SCRIPTS", + "MODULE_LEVEL_UP_REWARD", + "MODULE_ACCOUNTWIDE_SYSTEMS", + "MODULE_EXCHANGE_NPC", + "MODULE_RECRUIT_A_FRIEND", + "MODULE_PRESTIGE_DRAFT_MODE", + "MODULE_LUA_AH_BOT", + "MODULE_HARDCORE_MODE", + "MODULE_NPCBOT_EXTENDED_COMMANDS", + "MODULE_TREASURE_CHEST_SYSTEM", + "MODULE_ACTIVE_CHAT", + "MODULE_ULTIMATE_FULL_LOOT_PVP", + "MODULE_HORADRIC_CUBE", + "MODULE_CARBON_COPY", + "MODULE_TEMP_ANNOUNCEMENTS", + "MODULE_ZONE_CHECK", + "MODULE_AIO_BLACKJACK", + "MODULE_SEND_AND_BIND", + "MODULE_DYNAMIC_TRADER", + "MODULE_LOTTERY_LUA", + "MODULE_DISCORD_NOTIFIER", "MODULE_GLOBAL_MAIL_BANKING_AUCTIONS", "MODULE_GUILDHOUSE", - "MODULE_HARDCORE_MODE", - "MODULE_HORADRIC_CUBE", - "MODULE_INDIVIDUAL_PROGRESSION", - "MODULE_INSTANCE_RESET", - "MODULE_ITEM_LEVEL_UP", - "MODULE_KEEP_OUT", - "MODULE_LEARN_SPELLS", - "MODULE_LEVEL_GRANT", - "MODULE_LEVEL_UP_REWARD", - "MODULE_LOTTERY_LUA", - "MODULE_LUA_AH_BOT", - "MODULE_MORPHSUMMON", - "MODULE_MULTIVENDOR", - "MODULE_NPCBOT_EXTENDED_COMMANDS", - "MODULE_NPC_BEASTMASTER", - "MODULE_NPC_BUFFER", - "MODULE_NPC_ENCHANTER", - "MODULE_NPC_FREE_PROFESSIONS", - "MODULE_NPC_TALENT_TEMPLATE", - "MODULE_OLLAMA_CHAT", - "MODULE_PHASED_DUELS", - "MODULE_PLAYERBOTS", - "MODULE_PLAYER_BOT_LEVEL_BRACKETS", - "MODULE_POCKET_PORTAL", - "MODULE_PREMIUM", - "MODULE_PRESTIGE_DRAFT_MODE", "MODULE_PROGRESSION_SYSTEM", - "MODULE_PROMOTION_AZEROTHCORE", - "MODULE_PVP_TITLES", - "MODULE_RANDOM_ENCHANTS", - "MODULE_REAGENT_BANK", - "MODULE_RECRUIT_A_FRIEND", - "MODULE_RESURRECTION_SCROLL", - "MODULE_REWARD_PLAYED_TIME", - "MODULE_SEND_AND_BIND", - "MODULE_SERVER_AUTO_SHUTDOWN", - "MODULE_SOLOCRAFT", - "MODULE_SOLO_LFG", - "MODULE_SYSTEM_VIP", - "MODULE_TEMP_ANNOUNCEMENTS", - "MODULE_TIC_TAC_TOE", - "MODULE_TIME_IS_TIME", - "MODULE_TRANSMOG", - "MODULE_TRANSMOG_AIO", - "MODULE_TREASURE_CHEST_SYSTEM", - "MODULE_ULTIMATE_FULL_LOOT_PVP", - "MODULE_WAR_EFFORT", + "MODULE_NPC_FREE_PROFESSIONS", + "MODULE_DUEL_RESET", + "MODULE_ZONE_DIFFICULTY", + "MODULE_MORPHSUMMON", + "MODULE_SPELL_REGULATOR", "MODULE_WEEKEND_XP", + "MODULE_REWARD_PLAYED_TIME", + "MODULE_RESURRECTION_SCROLL", + "MODULE_ITEM_LEVEL_UP", + "MODULE_NPC_TALENT_TEMPLATE", + "MODULE_GLOBAL_CHAT", + "MODULE_PREMIUM", + "MODULE_SYSTEM_VIP", + "MODULE_ACORE_SUBSCRIPTIONS", + "MODULE_KEEP_OUT", + "MODULE_SERVER_AUTO_SHUTDOWN", "MODULE_WHO_LOGGED", - "MODULE_WORGOBLIN", - "MODULE_ZONE_CHECK", - "MODULE_ZONE_DIFFICULTY" + "MODULE_ACCOUNT_MOUNTS", + "MODULE_ANTIFARMING", + "MODULE_ARENA_REPLAY", + "MODULE_TIC_TAC_TOE", + "MODULE_WAR_EFFORT", + "MODULE_PROMOTION_AZEROTHCORE", + "MODULE_MOD_GUILD_VILLAGE", + "MODULE_MOD_CRAFTSPEED", + "MODULE_MOD_AUTOFISH", + "MODULE_MOD_VANILLA_NAXXRAMAS", + "MODULE_MOD_TREASURE", + "MODULE_MOD_REAL_ONLINE", + "MODULE_MOD_INSTANCE_TOOLS", + "MODULE_MOD_LEARNSPELLS", + "MODULE_MOD_SWIFT_TRAVEL_FORM", + "MODULE_MOD_CHAT_TRANSMITTER", + "MODULE_MOD_NOTIFY_MUTED", + "MODULE_MOD_AH_BOT_PLUS", + "MODULE_OPENPROJECTS", + "MODULE_MOD_DUNGEON_SCALE", + "MODULE_AZEROTHCORE_LUA_ARENA_MASTER_COMMAND", + "MODULE_MOD_HARDCORE_MAKGORA", + "MODULE_MOD_GEDDON_BINDING_SHARD", + "MODULE_MOD_GM_COMMANDS", + "MODULE_MOD_GOMOVE", + "MODULE_MOD_FORTIS_AUTOBALANCE", + "MODULE_MOD_MISSING_OBJECTIVES", + "MODULE_MOD_TRIAL_OF_FINALITY", + "MODULE_MOD_HUNTER_PET_STORAGE", + "MODULE_MOD_CHARACTER_SERVICES", + "MODULE_MOD_MOUNT_REQUIREMENTS", + "MODULE_SETXPBAR", + "MODULE_MOD_REWARD_PLAYED_TIME_IMPROVED", + "MODULE_MOD_GROWNUP", + "MODULE_MOD_MYTHIC_PLUS", + "MODULE_MOD_FACTION_FREE", + "MODULE_MOD_FLIGHTMASTER_WHISTLE", + "MODULE_MOD_STARTER_WANDS", + "MODULE_MOD_MOUNTS_ON_ACCOUNT", + "MODULE_MOD_OLLAMA_BOT_BUDDY", + "MODULE_MOD_AOE_LOOT", + "MODULE_MOD_PROFESSION_EXPERIENCE", + "MODULE_MOD_ACCOUNT_VANITY_PETS", + "MODULE_MOD_GAME_STATE_API", + "MODULE_MOD_WEEKEND_XP", + "MODULE_MOD_PEACEKEEPER", + "MODULE_MOD_QUEST_LOOT_PARTY", + "MODULE_MOD_NORDF", + "MODULE_MOD_DISCORD_ANNOUNCE", + "MODULE_MOD_BRAWLERS_GUILD", + "MODULE_MOD_HARDCORE", + "MODULE_MOD_STREAMS", + "MODULE_MOD_BLACK_MARKET", + "MODULE_MOD_TALENTBUTTON", + "MODULE_MOD_SETXPBAR", + "MODULE_MOD_ITEM_UPGRADE", + "MODULE_MOD_LEVEL_REWARDS", + "MODULE_MOD_REFORGING", + "MODULE_MOD_ONY_NAXX_LOGOUT_TELEPORT", + "MODULE_MOD_QUICK_RESPAWN", + "MODULE_MOD_AUTO_RESURRECT", + "MODULE_MOD_IMPROVED_BANK", + "MODULE_MOD_BIENVENIDA", + "MODULE_MOD_NO_HEARTHSTONE_COOLDOWN", + "MODULE_MOD_PTR_TEMPLATE", + "MODULE_MOD_STARTER_GUILD", + "MODULE_MOD_BG_REWARD", + "MODULE_MOD_NPC_MORPH", + "MODULE_MOD_BG_ITEM_REWARD", + "MODULE_MOD_IP_TRACKER", + "MODULE_MOD_DMF_SWITCH", + "MODULE_MOD_BUFF_COMMAND", + "MODULE_MOD_NPC_CODEBOX", + "MODULE_MOD_CHROMIE_XP", + "MODULE_MOD_SELL_ITEMS", + "MODULE_MOD_PVP_ZONES", + "MODULE_MOD_CONGRATS_ON_LEVEL", + "MODULE_MOD_GUILD_ZONE_SYSTEM", + "MODULE_MOD_CTA_SWITCH", + "MODULE_MOD_NPC_SPECTATOR", + "MODULE_MOD_NPC_GAMBLER", + "MODULE_MOD_WEAPON_VISUAL", + "MODULE_MOD_NPC_ALL_MOUNTS", + "MODULE_MOD_RACIAL_TRAIT_SWAP", + "MODULE_MOD_MONEY_FOR_KILLS", + "MODULE_MOD_APPRECIATION", + "MODULE_MOD_HARD_MODES", + "MODULE_MOD_QUEUE_LIST_CACHE", + "MODULE_MOD_PVPSTATS_ANNOUNCER", + "MODULE_MOD_RDF_EXPANSION", + "MODULE_MOD_COSTUMES", + "MODULE_MOD_WEEKENDBONUS", + "MODULE_MOD_JUNK_TO_GOLD", + "MODULE_MOD_DESERTION_WARNINGS", + "MODULE_MOD_LOW_LEVEL_RBG", + "MODULE_PRESTIGE", + "MODULE_HARDMODE", + "MODULE_MOD_LOW_LEVEL_ARENA", + "MODULE_MOD_CFPVE", + "MODULE_MOD_ACCOUNTBOUND", + "MODULE_MOD_DISCORD_WEBHOOK", + "MODULE_MOD_DUNGEONMASTER", + "MODULE_MOD_RESET_RAID_COOLDOWNS", + "MODULE_MOD_INCREMENT_CACHE_VERSION", + "MODULE_MOD_RECRUIT_FRIEND", + "MODULE_MOD_PETEQUIP", + "MODULE_MOD_LOGIN_REWARDS", + "MODULE_MOD_HIGH_RISK_SYSTEM", + "MODULE_MOD_STARTING_PET", + "MODULE_MOD_BG_TWINPEAKS", + "MODULE_MOD_BG_BATTLE_FOR_GILNEAS", + "MODULE_MOD_ARENA_TIGERSPEAK", + "MODULE_MOD_ARENA_TOLVIRON", + "MODULE_MOD_GHOST_SPEED", + "MODULE_MOD_GUILDFUNDS", + "MODULE_BREAKINGNEWSOVERRIDE", + "MODULE_AOE_LOOT_MERGE", + "MODULE_MOD_CHANGEABLESPAWNRATES", + "MODULE_MOD_NOCLIP", + "MODULE_MOD_NPC_SERVICES", + "MODULE_MOD_NPC_PROMOTION", + "MODULE_DEVJOESTAR", + "MODULE_MOD_OBJSCALE", + "MODULE_MOD_WARLOCK_PET_RENAME", + "MODULE_MOD_MULTI_VENDOR", + "MODULE_MOD_DEMONIC_PACT_CLASSIC", + "MODULE_RECYCLEDITEMS", + "MODULE_MOD_NPC_SUBCLASS", + "MODULE_ATTRIBOOST", + "MODULE_PRESTIGIOUS", + "MODULE_RECACHE", + "MODULE_MOD_REWARD_SHOP", + "MODULE_EXTENDEDXP", + "MODULE_MOD_LEVEL_15_BOOST", + "MODULE_BGQUEUECHECKER", + "MODULE_ADDON_FACTION_FREE_UNIT_POPUP", + "MODULE_MOD_ENCOUNTER_LOGS", + "MODULE_MOD_TRADE_ITEMS_FILTER", + "MODULE_MOD_QUEST_STATUS", + "MODULE_MOD_PVPSCRIPT", + "MODULE_ITEMBROADCASTGUILDCHAT", + "MODULE_FFAFIX", + "MODULE_ACI", + "MODULE_RAIDTELEPORTER", + "MODULE_MOD_QUICKBALANCE", + "MODULE_MOD_DEAD_MEANS_DEAD", + "MODULE_MOD_DYNAMIC_LOOT_RATES", + "MODULE_MOD_SHARE_MOUNTS", + "MODULE_MOD_PREMIUM", + "MODULE_MOD_GLOBALCHAT", + "MODULE_MOD_LEECH", + "MODULE_PLAYERTELEPORT", + "MODULE_WRATH_OF_THE_VANILLA", + "MODULE_STATBOOSTERREROLLER", + "MODULE_MOD_SPONSORSHIP", + "MODULE_MOD_PROFSPECS", + "MODULE_UPDATE_MOB_LEVEL_TO_PLAYER_AND_RANDOM_ITEM_STATS", + "MODULE_MOD_PREMIUM_LIB", + "MODULE_MOD_SPAWNPOINTS", + "MODULE_MOD_FIRSTLOGIN_AIO", + "MODULE_KARGATUM_SYSTEM", + "MODULE_MOD_INDIVIDUAL_XP", + "MODULE_MOD_SPEC_REWARD", + "MODULE_MOD_ACTIVATEZONES", + "MODULE_MOD_INFLUXDB", + "MODULE_MOD_SPELLREGULATOR", + "MODULE_MOD_ITEMLEVEL", + "MODULE_MOD_DYNAMIC_RESURRECTIONS", + "MODULE_MOD_ALPHA_REWARDS", + "MODULE_MOD_WHOLOGGED", + "MODULE_REWARD_SYSTEM", + "MODULE_MOD_CHARACTER_TOOLS", + "MODULE_MOD_NO_FARMING", + "MODULE_CODEBASE", + "MODULE_KEIRA3", + "MODULE_ACORE_LXD_IMAGE", + "MODULE_SAHTOUTCMS", + "MODULE_WOWDATABASEEDITOR", + "MODULE_ACREBUILD", + "MODULE_ACORE_CMS", + "MODULE_SERVER_STATUS", + "MODULE_AZEROTHCORE_ARMORY", + "MODULE_ARENA_STATS", + "MODULE_AZEROTHCORE_SERVER_MANAGER", + "MODULE_WOWSIMS_TO_COMMANDS", + "MODULE_UPDATE_MODULE_CONFS", + "MODULE_ACORE_API", + "MODULE_AZEROTHCORE_REGISTRATION_PAGE", + "MODULE_MPQ_TOOLS_OSX", + "MODULE_ACORE_TILEMAP", + "MODULE_AZEROTHCORE_PASSRESET", + "MODULE_FLAG_CHECKER", + "MODULE_WOW_SERVER_RELAY", + "MODULE_ACORE_CLIENT", + "MODULE_AZEROTHCORE_WEBSITE", + "MODULE_PVPSTATS", + "MODULE_SPELLSCRIPT_REFACTOR_TOOL", + "MODULE_STRAPI_AZEROTHCORE", + "MODULE_WOW_ELUNA_TS_MODULE", + "MODULE_WOW_STATISTICS", + "MODULE_AZEROTHCORE_ANSIBLE", + "MODULE_GUILDBANKTABFEEFIXER", + "MODULE_TELEGRAM_AUTOMATED_DB_BACKUP", + "MODULE_AZEROTHCOREDISCORDBOT", + "MODULE_WOW_CLIENT_PATCHER", + "MODULE_BG_QUEUE_ABUSER_VIEWER", + "MODULE_ARENA_SPECTATOR", + "MODULE_TOOL_TC_MIGRATION", + "MODULE_AZEROTHCOREADMIN", + "MODULE_AUTO_CHECK_RESTART", + "MODULE_TRANSMOG_ADDONS", + "MODULE_ACORE_BOX", + "MODULE_NODEROUTER", + "MODULE_WORLD_BOSS_RANK", + "MODULE_APAW", + "MODULE_ACORE_MINI_REG_PAGE", + "MODULE_ACORE_PWA", + "MODULE_MYSQL_TOOLS", + "MODULE_ACORE_LINUX_RESTARTER", + "MODULE_ACORE_NODE_SERVER", + "MODULE_WEB_CHARACTER_MIGRATION_TOOL", + "MODULE_WOWLAUNCHER_DELPHI", + "MODULE_LUA_PARAGON_ANNIVERSARY", + "MODULE_AZEROTHCORE_ADDITIONS", + "MODULE_AZEROTHCORE_LUA_DEMON_MORPHER", + "MODULE_1V1_PVP_SYSTEM", + "MODULE_LUA_PVP_TITLES_RANKING_SYSTEM", + "MODULE_LUA_SCRIPTS", + "MODULE_ACORE_SOD", + "MODULE_CONFIG_RATES", + "MODULE_AZEROTHCORE_TRIVIA_SYSTEM", + "MODULE_LOTTERY_CHANCE_INSTANT", + "MODULE_WEEKLY_ARMOR_VENDOR_BLACK_MARKET", + "MODULE_MORZA_ISLAND_ARAXIA_SERVER", + "MODULE_MOD_DEATHROLL_AIO", + "MODULE_EXTENDED_HOLIDAYS_LUA", + "MODULE_ACORE_LUA_UNLIMITED_AMMO", + "MODULE_LUA_VIP", + "MODULE_AZEROTHCORE_WOWHEAD_MOD_LUA", + "MODULE_ELUNA_WOW_SCRIPTS", + "MODULE_LUA_NOTONLY_RANDOMMORPHER", + "MODULE_LUA_ITEMUPGRADER_TEMPLATE", + "MODULE_LUA_SUPER_BUFFERNPC", + "MODULE_ACORE_ZONEDEBUFF", + "MODULE_ACORE_ELUNATEST", + "MODULE_ACORE_SUMMONALL", + "MODULE_ACORE_BG_END_ANNOUNCER", + "MODULE_LUA_AIO_MODRATE_EXP", + "MODULE_LUA_COMMAND_PLUS", + "MODULE_TBC_RAID_HP_RESTORATION", + "MODULE_MOD_RARE_DROPS", + "MODULE_MOD_LEVEL_ONE_MOUNTS", + "MODULE_BLIZZLIKE_TELES", + "MODULE_SQL_NPC_TELEPORTER", + "MODULE_ACORE_MALL", + "MODULE_HEARTHSTONE_COOLDOWNS", + "MODULE_AZEROTHCORE_ALL_STACKABLES_200", + "MODULE_PORTALS_IN_ALL_CAPITALS", + "MODULE_AZTRAL_AIRLINES", + "MODULE_MOD_IP2NATION", + "MODULE_CLASSIC_MODE" ], "label": "\ud83e\udde9 All Modules", "description": "Enable every optional module in the repository", diff --git a/docker-compose.yml b/docker-compose.yml index 239ed0c..cbfaa68 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -40,6 +40,7 @@ services: - --innodb-log-file-size=${MYSQL_INNODB_LOG_FILE_SIZE} - --innodb-redo-log-capacity=${MYSQL_INNODB_REDO_LOG_CAPACITY} restart: unless-stopped + logging: healthcheck: test: ["CMD", "sh", "-c", "mysqladmin ping -h localhost -u ${MYSQL_USER} -p${MYSQL_ROOT_PASSWORD} --silent || exit 1"] interval: ${MYSQL_HEALTHCHECK_INTERVAL} @@ -477,6 +478,7 @@ services: ports: - "${AUTH_EXTERNAL_PORT}:${AUTH_PORT}" restart: unless-stopped + logging: networks: - azerothcore volumes: @@ -531,6 +533,7 @@ services: - ${STORAGE_PATH}/modules:/azerothcore/modules - ${STORAGE_PATH}/lua_scripts:/azerothcore/lua_scripts restart: unless-stopped + logging: networks: - azerothcore cap_add: ["SYS_NICE"] @@ -568,6 +571,11 @@ services: ports: - "${AUTH_EXTERNAL_PORT}:${AUTH_PORT}" restart: unless-stopped + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" networks: - azerothcore volumes: @@ -603,6 +611,7 @@ services: ports: - "${AUTH_EXTERNAL_PORT}:${AUTH_PORT}" restart: unless-stopped + logging: networks: - azerothcore volumes: @@ -660,6 +669,7 @@ services: - ${STORAGE_PATH}/modules:/azerothcore/modules - ${STORAGE_PATH}/lua_scripts:/azerothcore/lua_scripts restart: unless-stopped + logging: networks: - azerothcore cap_add: ["SYS_NICE"] @@ -716,6 +726,11 @@ services: - "${WORLD_EXTERNAL_PORT}:${WORLD_PORT}" - "${SOAP_EXTERNAL_PORT}:${SOAP_PORT}" restart: unless-stopped + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" cap_add: ["SYS_NICE"] healthcheck: test: ["CMD", "sh", "-c", "ps aux | grep '[w]orldserver' | grep -v grep || exit 1"] @@ -863,10 +878,6 @@ services: retries: 3 start_period: 40s logging: - driver: json-file - options: - max-size: "10m" - max-file: "3" security_opt: - no-new-privileges:true networks: diff --git a/docs/MODULE_FAILURES.md b/docs/MODULE_FAILURES.md new file mode 100644 index 0000000..112d712 --- /dev/null +++ b/docs/MODULE_FAILURES.md @@ -0,0 +1,251 @@ +# Module Compilation Failures + +This document tracks all modules that have been disabled due to compilation failures or other issues during the validation process. + +**Last Updated:** 2025-11-22 + +**Total Blocked Modules:** 93 + +--- + +## Compilation Errors + +### Virtual Function Override Errors +These modules incorrectly mark non-virtual functions with 'override': + +- **MODULE_MOD_ACCOUNTBOUND** - only virtual member functions can be marked 'override' +- **MODULE_MOD_RECYCLEDITEMS** - only virtual member functions can be marked 'override' +- **MODULE_PRESTIGE** - 'OnLogin' marked 'override' but does not override +- **MODULE_PLAYERTELEPORT** - only virtual member functions can be marked 'override' +- **MODULE_ITEMBROADCASTGUILDCHAT** - only virtual member functions can be marked 'override' +- **MODULE_MOD_LOGIN_REWARDS** - only virtual member functions can be marked 'override' +- **MODULE_MOD_NOCLIP** - only virtual member functions can be marked 'override' +- **MODULE_MOD_OBJSCALE** - only virtual member functions can be marked 'override' +- **MODULE_MOD_QUEST_STATUS** - only virtual member functions can be marked 'override' +- **MODULE_MOD_RARE_DROPS** - only virtual member functions can be marked 'override' +- **MODULE_MOD_TRADE_ITEMS_FILTER** - only virtual member functions can be marked 'override' +- **MODULE_MOD_STARTING_PET** - `OnFirstLogin` marked `override` but base method is not virtual + +### Missing Member Errors +These modules reference class members that don't exist: + +- **MODULE_MOD_FIRSTLOGIN_AIO** - no member named 'getLevel'; did you mean 'GetLevel'? +- **MODULE_MOD_PVPSCRIPT** - no member named 'SendNotification' in 'WorldSession' +- **MODULE_MOD_KARGATUM_SYSTEM** - no member named 'PQuery' / 'outString' in Log +- **MODULE_MOD_ENCOUNTER_LOGS** - no member named 'IsWorldObject' in 'Unit' +- **MODULE_MOD_GOMOVE** - no member named 'DestroyForNearbyPlayers' in 'GameObject' +- **MODULE_MOD_LEVEL_15_BOOST** - no member named 'getLevel' in 'Player' +- **MODULE_MOD_LEVEL_REWARDS** - no member named 'SetStationary' in 'MailDraft' +- **MODULE_MOD_MULTI_VENDOR** - no member named 'SendNotification' in 'WorldSession' +- **MODULE_MOD_OBJSCALE** - no member named 'DestroyForNearbyPlayers' in 'GameObject' +- **MODULE_MOD_TRIAL_OF_FINALITY** - no member named 'isEmpty' in 'MapRefMgr' +- **MODULE_MOD_ALPHA_REWARDS** - no member named 'GetIntDefault' in 'ConfigMgr' + +### Incomplete Type Errors + +- **MODULE_MOD_ITEMLEVEL** - 'ChatHandler' is an incomplete type + +### Undeclared Identifier Errors + +- **MODULE_PRESTIGIOUS** - use of undeclared identifier 'sSpellMgr' + +### Missing Header/Dependency Errors + +- **MODULE_STATBOOSTERREROLLER** - 'StatBoostMgr.h' file not found + +--- + +## Configuration/Build Errors + +### CMake/Library Errors + +- **MODULE_MOD_INFLUXDB** - CMake Error: Could NOT find CURL +- **MODULE_MOD_DUNGEON_SCALE** - Duplicate symbol definitions for AutoBalance utilities (GetCurrentConfigTime, LoadMapSettings, etc.) when linked with mod-autobalance +- **MODULE_MOD_GAME_STATE_API** - TLS symbol mismatch in cpp-httplib (`HttpGameStateServer.cpp` vs `mod_discord_announce.cpp`) causes linker failure (`error adding symbols: bad value`) +- **MODULE_WOW_STATISTICS** - Missing script loader; `Addwow_statisticsScripts()` referenced by ModulesLoader but not defined +- **MODULE_WOW_CLIENT_PATCHER** - Missing script loader; `Addwow_client_patcherScripts()` referenced by ModulesLoader but not defined + +### Missing Script Loader / Non-C++ Modules + +These repositories are Lua scripts or external web tools without a worldserver loader. When they are flagged as C++ modules the build fails with undefined references during linking: + +- **MODULE_MOD_DISCORD_WEBHOOK** - No `Addmod_discord_webhookScripts()` implementation +- **MODULE_BG_QUEUE_ABUSER_VIEWER** - No `AddBG_Queue_Abuser_ViewerScripts()` implementation +- **MODULE_ACORE_API** - No `Addacore_apiScripts()` implementation +- **MODULE_ACORE_CLIENT** - No `Addacore_clientScripts()` implementation +- **MODULE_ACORE_CMS** - No `Addacore_cmsScripts()` implementation +- **MODULE_ACORE_NODE_SERVER** - No `Addacore_node_serverScripts()` implementation +- **MODULE_ACORE_PWA** - No `Addacore_pwaScripts()` implementation +- **MODULE_ACORE_TILEMAP** - No `Addacore_tilemapScripts()` implementation +- **MODULE_APAW** - No `AddapawScripts()` implementation +- **MODULE_ARENA_STATS** - No `Addarena_statsScripts()` implementation +- **MODULE_AZEROTHCORE_ARMORY** - No `Addazerothcore_armoryScripts()` implementation +- **MODULE_LUA_ITEMUPGRADER_TEMPLATE** - Lua-only script; no `Addlua_ItemUpgrader_TemplateScripts()` +- **MODULE_LUA_NOTONLY_RANDOMMORPHER** - Lua-only script; no `Addlua_NotOnly_RandomMorpherScripts()` +- **MODULE_LUA_SUPER_BUFFERNPC** - Lua-only script; no `Addlua_Super_BufferNPCScripts()` +- **MODULE_LUA_PARAGON_ANNIVERSARY** - Lua-only script; no `Addlua_paragon_anniversaryScripts()` + +### SQL Import Errors (Runtime) + +- **MODULE_MOD_REWARD_SHOP** - `npc.sql` references obsolete `modelid1` column during db-import +- **MODULE_BLACK_MARKET_AUCTION_HOUSE** - `MODULE_mod-black-market_creature.sql` references removed `StatsCount` column (ERROR 1054 at line 14, causes worldserver crash-loop) +- **MODULE_MOD_GUILD_VILLAGE** - `MODULE_mod-guild-village_001_creature_template.sql` tries to insert duplicate creature ID 987400 (ERROR 1062: Duplicate entry for key 'creature_template.PRIMARY') +- **MODULE_MOD_INSTANCE_TOOLS** - `MODULE_mod-instance-tools_Creature.sql` tries to insert duplicate creature ID 987456-0 (ERROR 1062: Duplicate entry for key 'creature_template_model.PRIMARY') +- **MODULE_ACORE_SUBSCRIPTIONS** - C++ code queries missing table `acore_auth.acore_cms_subscriptions` (ERROR 1146: Table doesn't exist, causes server ABORT) + - **Resolution Required:** Module directory at `local-storage/modules/mod-acore-subscriptions` must be removed and worldserver rebuilt. Disabling in .env alone is insufficient because the code is already compiled into the binary. + - **Process:** Either (1) remove module directory + rebuild, OR (2) create the missing database table/schema +- **MODULE_NODEROUTER** - No `AddnoderouterScripts()` implementation +- **MODULE_SERVER_STATUS** - No `Addserver_statusScripts()` implementation +- **MODULE_WORLD_BOSS_RANK** - No `Addworld_boss_rankScripts()` implementation + +--- + +## Auto-Disabled Modules (Outdated) + +These modules have not been updated in over 2 years and were automatically disabled: + +- **MODULE_MOD_DYNAMIC_RESURRECTIONS** - Last updated: 2019-07-16 +- **MODULE_MOD_WHOLOGGED** - Last updated: 2018-07-03 +- **MODULE_REWARD_SYSTEM** - Last updated: 2018-07-02 +- **MODULE_MOD_CHARACTER_TOOLS** - Last updated: 2018-07-02 +- **MODULE_MOD_NO_FARMING** - Last updated: 2018-05-15 + +--- + +## Git/Clone Errors + +- **MODULE_ELUNA_WOW_SCRIPTS** - Git clone error: unknown switch 'E' + +--- + +## Summary by Error Type + +| Error Type | Count | Common Cause | +|------------|-------|--------------| +| Virtual function override | 11 | API changes in AzerothCore hooks | +| Missing members | 11 | API changes - methods renamed/removed | +| Incomplete type | 1 | Missing include or forward declaration | +| Undeclared identifier | 1 | Missing include or API change | +| Missing headers | 1 | Module dependency missing | +| CMake/Library | 1 | External dependency not available | +| Outdated (>2yr) | 5 | Module unmaintained | +| Git errors | 1 | Repository/clone issues | + +**Total:** 66 blocked modules + +--- + +## Resolution Status + +All blocked modules have been: +- ✅ Disabled in `.env` file +- ✅ Marked as 'blocked' in `config/module-manifest.json` +- ✅ Block reason documented in manifest +- ✅ Notes added to manifest with error details + +--- + +## Runtime Validation Process + +When worldserver crashes or fails to start due to modules: + +1. **Check for crash-loops**: Use `docker inspect ac-worldserver --format='RestartCount: {{.RestartCount}}'` + - RestartCount > 0 indicates crash-loop, not a healthy running state + +2. **Examine logs**: `docker logs ac-worldserver --tail 200 | grep -B 10 "ABORT"` + - Look for ERROR messages, ABORT signals, and stack traces + - Identify the failing module from error context + +3. **Categorize the error**: + - **SQL Import Errors**: Table/column doesn't exist, duplicate keys + - **Missing Database Tables**: C++ code queries tables that don't exist + - **Configuration Issues**: Missing required config files or settings + +4. **For modules with compiled C++ code querying missing DB tables**: + - **Important**: Disabling in `.env` is NOT sufficient - code is already compiled + - **Resolution Options**: + a. Remove module directory from `local-storage/modules/` + rebuild (preferred for broken modules) + b. Create the missing database table/schema (if you want to keep the module) + - Never use `sudo rm -rf` on module directories without explicit user approval + - Document the issue clearly before taking action + +5. **For SQL import errors**: + - Disable module in `.env` + - Remove problematic SQL files from container: `docker exec ac-worldserver rm -f /path/to/sql/file.sql` + - Restart worldserver (no rebuild needed for SQL-only issues) + +6. **For Lua-only modules** (scripts without C++ components): + - **Important**: Disabling Lua modules may leave behind database artifacts + - Lua modules often create: + - Custom database tables (in acore_world, acore_characters, or acore_auth) + - Stored procedures, triggers, or events + - NPC/creature/gameobject entries in world tables + - **SQL Cleanup Required**: When disabling Lua modules, you may need to: + a. Identify tables/data created by the module (check module's SQL files) + b. Manually DROP tables or DELETE entries if the module doesn't provide cleanup scripts + c. Check for orphaned NPCs/creatures that reference the module's functionality + - **Best Practice**: Before disabling, review the module's `data/sql/` directory to understand what was installed + +6. **Update documentation**: + - Add entry to MODULE_FAILURES.md + - Update module-manifest.json with block_reason + - Increment total blocked modules count + +7. **Verify fix**: Restart worldserver and confirm RestartCount stays at 0 + +--- + +## SQL Update System & Database Maintenance + +### Our Implementation + +This deployment uses AzerothCore's built-in SQL update system with the following structure: + +- **Module SQL Location**: Each module places SQL files in `/azerothcore/data/sql/updates/db-world/`, `db-auth/`, or `db-characters/` +- **Automatic Import**: On worldserver startup, AzerothCore scans these directories and applies any SQL files not yet in the `updates` tracking table +- **One-Time Execution**: SQL files are tracked in the `updates` table to prevent re-execution +- **Persistent Storage**: SQL files are mounted from `local-storage/modules/*/data/sql/` into the container + +### AzerothCore Wiki Reference + +Per the [AzerothCore Keeping the Server Up to Date](https://www.azerothcore.org/wiki/keeping-the-server-up-to-date) documentation: + +- Core updates include SQL changes that must be applied to databases +- The server automatically imports SQL files from `data/sql/updates/` directories +- Failed SQL imports cause the server to ABORT (as seen with our module validation) +- Database structure must match what the C++ code expects + +### Module SQL Lifecycle + +1. **Installation**: Module's SQL files copied to container's `/azerothcore/data/sql/updates/` during build +2. **First Startup**: Files executed and tracked in `updates` table +3. **Subsequent Startups**: Files skipped (already in `updates` table) +4. **Module Disabled**: SQL files may persist in container unless manually removed +5. **Database Artifacts**: Tables/data created by SQL remain until manually cleaned up + +### Critical Notes + +- **Disabling a module does NOT remove its SQL files** from the container +- **Disabling a module does NOT drop its database tables** or remove its data +- **Problematic SQL files must be manually removed** from the container after disabling the module +- **Database cleanup is manual** - no automatic rollback when modules are disabled +- **Lua modules** especially prone to leaving orphaned database artifacts (tables, NPCs, gameobjects) + +### Troubleshooting SQL Issues + +When a module's SQL import fails: + +1. **Error in logs**: Server logs show which SQL file failed and the MySQL error +2. **Server ABORTs**: Failed imports cause server to abort startup +3. **Resolution**: + - Disable module in `.env` + - Remove problematic SQL file from container: `docker exec ac-worldserver rm -f /path/to/file.sql` + - Restart server (file won't be re-imported since it's deleted) + - **OR** if you want to keep the module: Fix the SQL file in `local-storage/modules/*/data/sql/` and rebuild + +## Next Steps + +1. Continue build/deploy cycle until all compilation errors resolved +2. Monitor for additional module failures +3. Document any new failures as they occur +4. Consider creating GitHub issues for maintainable modules with API incompatibilities diff --git a/scripts/bash/cleanup-orphaned-sql.sh b/scripts/bash/cleanup-orphaned-sql.sh new file mode 100755 index 0000000..e0c14a3 --- /dev/null +++ b/scripts/bash/cleanup-orphaned-sql.sh @@ -0,0 +1,265 @@ +#!/usr/bin/env bash +# +# cleanup-orphaned-sql.sh +# +# Cleans up orphaned SQL update entries from the database. +# These are entries in the 'updates' table that reference files no longer on disk. +# +# This happens when: +# - Modules are removed/uninstalled +# - Modules are updated and old SQL files are deleted +# - Manual SQL cleanup occurs +# +# NOTE: These warnings are informational and don't affect server operation. +# This script is optional - it just cleans up the logs. +# + +set -euo pipefail + +# Configuration +MYSQL_CONTAINER="${MYSQL_CONTAINER:-ac-mysql}" +WORLDSERVER_CONTAINER="${WORLDSERVER_CONTAINER:-ac-worldserver}" +MYSQL_USER="${MYSQL_USER:-root}" +MYSQL_PASSWORD="${MYSQL_ROOT_PASSWORD:-}" +DRY_RUN=false +VERBOSE=false +DATABASES=("acore_world" "acore_characters" "acore_auth") + +# Colors +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# Usage +usage() { + cat << EOF +Usage: $0 [OPTIONS] + +Clean up orphaned SQL update entries from AzerothCore databases. + +OPTIONS: + -p, --password PASSWORD MySQL root password (or use MYSQL_ROOT_PASSWORD env var) + -c, --container NAME MySQL container name (default: ac-mysql) + -w, --worldserver NAME Worldserver container name (default: ac-worldserver) + -d, --database DB Clean only specific database (world, characters, auth) + -n, --dry-run Show what would be cleaned without making changes + -v, --verbose Show detailed output + -h, --help Show this help message + +EXAMPLES: + # Dry run to see what would be cleaned + $0 --dry-run + + # Clean all databases + $0 --password yourpassword + + # Clean only world database + $0 --password yourpassword --database world + + # Verbose output + $0 --password yourpassword --verbose + +NOTES: + - This script only removes entries from the 'updates' table + - It does NOT remove any actual data or tables + - It does NOT reverse any SQL that was applied + - This is safe to run and only cleans up tracking metadata + - Orphaned entries occur when modules are removed/updated + +EOF + exit 0 +} + +# Parse arguments +while [[ $# -gt 0 ]]; do + case $1 in + -p|--password) + MYSQL_PASSWORD="$2" + shift 2 + ;; + -c|--container) + MYSQL_CONTAINER="$2" + shift 2 + ;; + -w|--worldserver) + WORLDSERVER_CONTAINER="$2" + shift 2 + ;; + -d|--database) + case $2 in + world) DATABASES=("acore_world") ;; + characters) DATABASES=("acore_characters") ;; + auth) DATABASES=("acore_auth") ;; + *) echo -e "${RED}Error: Invalid database '$2'${NC}"; exit 1 ;; + esac + shift 2 + ;; + -n|--dry-run) + DRY_RUN=true + shift + ;; + -v|--verbose) + VERBOSE=true + shift + ;; + -h|--help) + usage + ;; + *) + echo -e "${RED}Error: Unknown option '$1'${NC}" + usage + ;; + esac +done + +# Check password +if [[ -z "$MYSQL_PASSWORD" ]]; then + echo -e "${RED}Error: MySQL password required${NC}" + echo "Use --password or set MYSQL_ROOT_PASSWORD environment variable" + exit 1 +fi + +# Check containers exist +if ! docker ps --format '{{.Names}}' | grep -q "^${MYSQL_CONTAINER}$"; then + echo -e "${RED}Error: MySQL container '$MYSQL_CONTAINER' not found or not running${NC}" + exit 1 +fi + +if ! docker ps --format '{{.Names}}' | grep -q "^${WORLDSERVER_CONTAINER}$"; then + echo -e "${RED}Error: Worldserver container '$WORLDSERVER_CONTAINER' not found or not running${NC}" + exit 1 +fi + +echo -e "${BLUE}╔════════════════════════════════════════════════════════════════╗${NC}" +echo -e "${BLUE}║ AzerothCore Orphaned SQL Cleanup ║${NC}" +echo -e "${BLUE}╚════════════════════════════════════════════════════════════════╝${NC}" +echo + +if [[ "$DRY_RUN" == true ]]; then + echo -e "${YELLOW}DRY RUN MODE - No changes will be made${NC}" + echo +fi + +# Function to get SQL files from worldserver container +get_sql_files() { + local db_type=$1 + docker exec "$WORLDSERVER_CONTAINER" find "/azerothcore/data/sql/updates/${db_type}/" -name "*.sql" -type f 2>/dev/null | \ + xargs -I {} basename {} 2>/dev/null || true +} + +# Function to clean orphaned entries +clean_orphaned_entries() { + local database=$1 + local db_type=$2 + + echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" + echo -e "${GREEN}Processing: $database${NC}" + echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" + + # Get list of SQL files on disk + local sql_files + sql_files=$(get_sql_files "$db_type") + + if [[ -z "$sql_files" ]]; then + echo -e "${YELLOW}⚠ No SQL files found in /azerothcore/data/sql/updates/${db_type}/${NC}" + echo + return + fi + + local file_count + file_count=$(echo "$sql_files" | wc -l) + echo -e "📁 Found ${file_count} SQL files on disk" + + # Get entries from updates table + local total_updates + total_updates=$(docker exec "$MYSQL_CONTAINER" mysql -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$database" -sN \ + -e "SELECT COUNT(*) FROM updates" 2>/dev/null || echo "0") + + echo -e "📊 Total updates in database: ${total_updates}" + + if [[ "$total_updates" == "0" ]]; then + echo -e "${YELLOW}⚠ No updates found in database${NC}" + echo + return + fi + + # Find orphaned entries (in DB but not on disk) + # We'll create a temp table with file names and do a LEFT JOIN + local orphaned_count=0 + local orphaned_list="" + + # Get all update names from DB + local db_updates + db_updates=$(docker exec "$MYSQL_CONTAINER" mysql -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$database" -sN \ + -e "SELECT name FROM updates ORDER BY name" 2>/dev/null || true) + + if [[ -n "$db_updates" ]]; then + # Check each DB entry against disk files + while IFS= read -r update_name; do + if ! echo "$sql_files" | grep -qF "$update_name"; then + ((orphaned_count++)) + if [[ "$VERBOSE" == true ]] || [[ "$DRY_RUN" == true ]]; then + orphaned_list="${orphaned_list}${update_name}\n" + fi + + # Delete if not dry run + if [[ "$DRY_RUN" == false ]]; then + docker exec "$MYSQL_CONTAINER" mysql -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$database" -e \ + "DELETE FROM updates WHERE name='${update_name}'" 2>/dev/null + fi + fi + done <<< "$db_updates" + fi + + # Report results + if [[ $orphaned_count -gt 0 ]]; then + echo -e "${YELLOW}🗑️ Orphaned entries: ${orphaned_count}${NC}" + + if [[ "$VERBOSE" == true ]] || [[ "$DRY_RUN" == true ]]; then + echo + echo -e "${YELLOW}Orphaned files:${NC}" + echo -e "$orphaned_list" | head -20 + if [[ $orphaned_count -gt 20 ]]; then + echo -e "${YELLOW}... and $((orphaned_count - 20)) more${NC}" + fi + fi + + if [[ "$DRY_RUN" == false ]]; then + echo -e "${GREEN}✅ Cleaned ${orphaned_count} orphaned entries${NC}" + else + echo -e "${YELLOW}Would clean ${orphaned_count} orphaned entries${NC}" + fi + else + echo -e "${GREEN}✅ No orphaned entries found${NC}" + fi + + echo +} + +# Process each database +for db in "${DATABASES[@]}"; do + case $db in + acore_world) + clean_orphaned_entries "$db" "db_world" + ;; + acore_characters) + clean_orphaned_entries "$db" "db_characters" + ;; + acore_auth) + clean_orphaned_entries "$db" "db_auth" + ;; + esac +done + +# Summary +echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" +echo -e "${GREEN}Cleanup Complete${NC}" +echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" + +if [[ "$DRY_RUN" == true ]]; then + echo + echo -e "${YELLOW}This was a dry run. To actually clean orphaned entries, run:${NC}" + echo -e "${YELLOW} $0 --password yourpassword${NC}" +fi diff --git a/scripts/bash/fix-item-import.sh b/scripts/bash/fix-item-import.sh index c624431..87a8857 100755 --- a/scripts/bash/fix-item-import.sh +++ b/scripts/bash/fix-item-import.sh @@ -1,57 +1,167 @@ #!/bin/bash # Fix item import for backup-merged characters +# +# Usage: +# fix-item-import.sh [OPTIONS] +# +# Options: +# --backup-dir DIR Path to backup directory (required) +# --account-ids IDS Comma-separated account IDs (e.g., "451,452") +# --char-guids GUIDS Comma-separated character GUIDs (e.g., "4501,4502,4503") +# --mysql-password PW MySQL root password (or use MYSQL_ROOT_PASSWORD env var) +# --mysql-container NAME MySQL container name (default: ac-mysql) +# --auth-db NAME Auth database name (default: acore_auth) +# --characters-db NAME Characters database name (default: acore_characters) +# -h, --help Show this help message +# set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -cd "$SCRIPT_DIR" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" -COLOR_RED='\033[0;31m' -COLOR_GREEN='\033[0;32m' -COLOR_YELLOW='\033[1;33m' -COLOR_BLUE='\033[0;34m' -COLOR_CYAN='\033[0;36m' -COLOR_RESET='\033[0m' +# Source common library +if [ -f "$SCRIPT_DIR/lib/common.sh" ]; then + source "$SCRIPT_DIR/lib/common.sh" +else + echo "ERROR: Common library not found at $SCRIPT_DIR/lib/common.sh" >&2 + exit 1 +fi -log(){ printf '%b\n' "${COLOR_GREEN}$*${COLOR_RESET}"; } -info(){ printf '%b\n' "${COLOR_CYAN}$*${COLOR_RESET}"; } -warn(){ printf '%b\n' "${COLOR_YELLOW}$*${COLOR_RESET}"; } -err(){ printf '%b\n' "${COLOR_RED}$*${COLOR_RESET}"; } -fatal(){ err "$*"; exit 1; } +# Default values (can be overridden by environment or command line) +BACKUP_DIR="${BACKUP_DIR:-}" +ACCOUNT_IDS="${ACCOUNT_IDS:-}" +CHAR_GUIDS="${CHAR_GUIDS:-}" +MYSQL_PW="${MYSQL_ROOT_PASSWORD:-}" +MYSQL_CONTAINER="${MYSQL_CONTAINER:-ac-mysql}" +AUTH_DB="${AUTH_DB:-acore_auth}" +CHARACTERS_DB="${CHARACTERS_DB:-acore_characters}" -MYSQL_PW="azerothcore123" -BACKUP_DIR="/nfs/containers/ac-backup" -AUTH_DB="acore_auth" -CHARACTERS_DB="acore_characters" +# Show help message +show_help() { + cat << EOF +Fix item import for backup-merged characters -# Verify parameters -[[ -d "$BACKUP_DIR" ]] || fatal "Backup directory not found: $BACKUP_DIR" +Usage: + fix-item-import.sh [OPTIONS] + +Options: + --backup-dir DIR Path to backup directory (required) + --account-ids IDS Comma-separated account IDs (e.g., "451,452") + --char-guids GUIDS Comma-separated character GUIDs (e.g., "4501,4502,4503") + --mysql-password PW MySQL root password (or use MYSQL_ROOT_PASSWORD env var) + --mysql-container NAME MySQL container name (default: ac-mysql) + --auth-db NAME Auth database name (default: acore_auth) + --characters-db NAME Characters database name (default: acore_characters) + -h, --help Show this help message + +Environment Variables: + BACKUP_DIR Alternative to --backup-dir + ACCOUNT_IDS Alternative to --account-ids + CHAR_GUIDS Alternative to --char-guids + MYSQL_ROOT_PASSWORD Alternative to --mysql-password + MYSQL_CONTAINER Alternative to --mysql-container + AUTH_DB Alternative to --auth-db + CHARACTERS_DB Alternative to --characters-db + +Example: + fix-item-import.sh \\ + --backup-dir /path/to/backup \\ + --account-ids "451,452" \\ + --char-guids "4501,4502,4503" \\ + --mysql-password "azerothcore123" + +EOF + exit 0 +} + +# Parse command line arguments +while [[ $# -gt 0 ]]; do + case "$1" in + --backup-dir) + BACKUP_DIR="$2" + shift 2 + ;; + --account-ids) + ACCOUNT_IDS="$2" + shift 2 + ;; + --char-guids) + CHAR_GUIDS="$2" + shift 2 + ;; + --mysql-password) + MYSQL_PW="$2" + shift 2 + ;; + --mysql-container) + MYSQL_CONTAINER="$2" + shift 2 + ;; + --auth-db) + AUTH_DB="$2" + shift 2 + ;; + --characters-db) + CHARACTERS_DB="$2" + shift 2 + ;; + -h|--help) + show_help + ;; + *) + fatal "Unknown option: $1\nUse --help for usage information" + ;; + esac +done + +# Validate required parameters +if [ -z "$BACKUP_DIR" ]; then + fatal "Backup directory not specified. Use --backup-dir or set BACKUP_DIR environment variable." +fi + +if [ ! -d "$BACKUP_DIR" ]; then + fatal "Backup directory not found: $BACKUP_DIR" +fi + +if [ -z "$ACCOUNT_IDS" ]; then + fatal "Account IDs not specified. Use --account-ids or set ACCOUNT_IDS environment variable." +fi + +if [ -z "$CHAR_GUIDS" ]; then + fatal "Character GUIDs not specified. Use --char-guids or set CHAR_GUIDS environment variable." +fi + +if [ -z "$MYSQL_PW" ]; then + fatal "MySQL password not specified. Use --mysql-password or set MYSQL_ROOT_PASSWORD environment variable." +fi # Setup temp directory TEMP_DIR="$(mktemp -d)" trap 'rm -rf "$TEMP_DIR"' EXIT -# MySQL connection helper -mysql_exec(){ +# MySQL connection helpers (override common.sh defaults with script-specific values) +mysql_exec_local(){ local db="$1" - docker exec -i ac-mysql mysql -uroot -p"$MYSQL_PW" "$db" 2>/dev/null + docker exec -i "$MYSQL_CONTAINER" mysql -uroot -p"$MYSQL_PW" "$db" 2>/dev/null } -mysql_query(){ +mysql_query_local(){ local db="$1" local query="$2" - docker exec ac-mysql mysql -uroot -p"$MYSQL_PW" -N -B "$db" -e "$query" 2>/dev/null + docker exec "$MYSQL_CONTAINER" mysql -uroot -p"$MYSQL_PW" -N -B "$db" -e "$query" 2>/dev/null } log "═══════════════════════════════════════════════════════════" log " FIXING ITEM IMPORT FOR BACKUP-MERGED CHARACTERS" log "═══════════════════════════════════════════════════════════" -# Find characters that were imported from the backup (accounts 451, 452) +# Find characters that were imported from the backup log "Finding characters that need item restoration..." -IMPORTED_CHARS=$(mysql_query "$CHARACTERS_DB" "SELECT name, guid FROM characters WHERE account IN (451, 452);") +info "Looking for characters with account IDs: $ACCOUNT_IDS" +IMPORTED_CHARS=$(mysql_query_local "$CHARACTERS_DB" "SELECT name, guid FROM characters WHERE account IN ($ACCOUNT_IDS);") if [[ -z "$IMPORTED_CHARS" ]]; then - fatal "No imported characters found (accounts 451, 452)" + fatal "No imported characters found with account IDs: $ACCOUNT_IDS" fi info "Found imported characters:" @@ -60,7 +170,8 @@ echo "$IMPORTED_CHARS" | while read -r char_name char_guid; do done # Check current item count for these characters -CURRENT_ITEM_COUNT=$(mysql_query "$CHARACTERS_DB" "SELECT COUNT(*) FROM item_instance WHERE owner_guid IN (4501, 4502, 4503);") +info "Checking existing items for character GUIDs: $CHAR_GUIDS" +CURRENT_ITEM_COUNT=$(mysql_query_local "$CHARACTERS_DB" "SELECT COUNT(*) FROM item_instance WHERE owner_guid IN ($CHAR_GUIDS);") info "Current items for imported characters: $CURRENT_ITEM_COUNT" if [[ "$CURRENT_ITEM_COUNT" != "0" ]]; then @@ -94,26 +205,26 @@ log "Creating staging database..." STAGE_CHARS_DB="fix_stage_chars_$$" # Drop any existing staging database -docker exec ac-mysql mysql -uroot -p"$MYSQL_PW" -e "DROP DATABASE IF EXISTS $STAGE_CHARS_DB;" 2>/dev/null || true +docker exec "$MYSQL_CONTAINER" mysql -uroot -p"$MYSQL_PW" -e "DROP DATABASE IF EXISTS $STAGE_CHARS_DB;" 2>/dev/null || true # Create staging database -docker exec ac-mysql mysql -uroot -p"$MYSQL_PW" -e "CREATE DATABASE $STAGE_CHARS_DB;" 2>/dev/null +docker exec "$MYSQL_CONTAINER" mysql -uroot -p"$MYSQL_PW" -e "CREATE DATABASE $STAGE_CHARS_DB;" 2>/dev/null # Cleanup staging database on exit cleanup_staging(){ if [[ -n "${STAGE_CHARS_DB:-}" ]]; then - docker exec ac-mysql mysql -uroot -p"$MYSQL_PW" -e "DROP DATABASE IF EXISTS $STAGE_CHARS_DB;" 2>/dev/null || true + docker exec "$MYSQL_CONTAINER" mysql -uroot -p"$MYSQL_PW" -e "DROP DATABASE IF EXISTS $STAGE_CHARS_DB;" 2>/dev/null || true fi } trap 'cleanup_staging; rm -rf "$TEMP_DIR"' EXIT # Load backup into staging database info "Loading backup into staging database..." -sed "s/\`acore_characters\`/\`$STAGE_CHARS_DB\`/g; s/USE \`acore_characters\`;/USE \`$STAGE_CHARS_DB\`;/g" "$TEMP_DIR/characters.sql" | \ - docker exec -i ac-mysql mysql -uroot -p"$MYSQL_PW" 2>/dev/null +sed "s/\`$CHARACTERS_DB\`/\`$STAGE_CHARS_DB\`/g; s/USE \`$CHARACTERS_DB\`;/USE \`$STAGE_CHARS_DB\`;/g" "$TEMP_DIR/characters.sql" | \ + docker exec -i "$MYSQL_CONTAINER" mysql -uroot -p"$MYSQL_PW" 2>/dev/null # Get current database state -CURRENT_MAX_ITEM_GUID=$(mysql_query "$CHARACTERS_DB" "SELECT COALESCE(MAX(guid), 0) FROM item_instance;") +CURRENT_MAX_ITEM_GUID=$(mysql_query_local "$CHARACTERS_DB" "SELECT COALESCE(MAX(guid), 0) FROM item_instance;") ITEM_OFFSET=$((CURRENT_MAX_ITEM_GUID + 10000)) info "Current max item GUID: $CURRENT_MAX_ITEM_GUID" @@ -121,22 +232,32 @@ info "Item GUID offset: +$ITEM_OFFSET" # Create character mapping for the imported characters log "Creating character mapping..." -mysql_exec "$STAGE_CHARS_DB" <&1) +ITEM_RESULT=$(echo "$ITEM_SQL_EXPANDED" | docker exec -i "$MYSQL_CONTAINER" mysql -uroot -p"$MYSQL_PW" "$CHARACTERS_DB" 2>&1) if echo "$ITEM_RESULT" | grep -q "ERROR"; then err "Item import failed:" echo "$ITEM_RESULT" | grep "ERROR" >&2 @@ -217,7 +338,7 @@ EOSQL ) INV_SQL_EXPANDED=$(echo "$INV_SQL" | sed "s/STAGE_CHARS_DB/$STAGE_CHARS_DB/g") -INV_RESULT=$(echo "$INV_SQL_EXPANDED" | docker exec -i ac-mysql mysql -uroot -p"$MYSQL_PW" "$CHARACTERS_DB" 2>&1) +INV_RESULT=$(echo "$INV_SQL_EXPANDED" | docker exec -i "$MYSQL_CONTAINER" mysql -uroot -p"$MYSQL_PW" "$CHARACTERS_DB" 2>&1) if echo "$INV_RESULT" | grep -q "ERROR"; then err "Inventory import failed:" echo "$INV_RESULT" | grep "ERROR" >&2 @@ -225,8 +346,8 @@ if echo "$INV_RESULT" | grep -q "ERROR"; then fi # Report counts -ITEMS_IMPORTED=$(mysql_query "$CHARACTERS_DB" "SELECT COUNT(*) FROM item_instance WHERE owner_guid IN (4501, 4502, 4503);") -INV_IMPORTED=$(mysql_query "$CHARACTERS_DB" "SELECT COUNT(*) FROM character_inventory WHERE guid IN (4501, 4502, 4503);") +ITEMS_IMPORTED=$(mysql_query_local "$CHARACTERS_DB" "SELECT COUNT(*) FROM item_instance WHERE owner_guid IN ($CHAR_GUIDS);") +INV_IMPORTED=$(mysql_query_local "$CHARACTERS_DB" "SELECT COUNT(*) FROM character_inventory WHERE guid IN ($CHAR_GUIDS);") info "Items imported: $ITEMS_IMPORTED" info "Inventory slots imported: $INV_IMPORTED" diff --git a/scripts/bash/lib/common.sh b/scripts/bash/lib/common.sh new file mode 100644 index 0000000..1616b4a --- /dev/null +++ b/scripts/bash/lib/common.sh @@ -0,0 +1,423 @@ +#!/bin/bash +# +# Common utilities library for AzerothCore RealmMaster scripts +# This library provides shared functions for environment variable reading, +# logging, error handling, and other common operations. +# +# Usage: source /path/to/scripts/bash/lib/common.sh + +# Prevent multiple sourcing +if [ -n "${_COMMON_LIB_LOADED:-}" ]; then + return 0 +fi +_COMMON_LIB_LOADED=1 + +# ============================================================================= +# COLOR DEFINITIONS (Standardized across all scripts) +# ============================================================================= + +BLUE='\033[0;34m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +RED='\033[0;31m' +CYAN='\033[0;36m' +NC='\033[0m' # No Color + +# Legacy color names for backward compatibility +COLOR_BLUE="$BLUE" +COLOR_GREEN="$GREEN" +COLOR_YELLOW="$YELLOW" +COLOR_RED="$RED" +COLOR_CYAN="$CYAN" +COLOR_RESET="$NC" + +# ============================================================================= +# LOGGING FUNCTIONS (Standardized with emoji) +# ============================================================================= + +# Log informational messages (blue with info icon) +info() { + printf '%b\n' "${BLUE}ℹ️ $*${NC}" +} + +# Log success messages (green with checkmark) +ok() { + printf '%b\n' "${GREEN}✅ $*${NC}" +} + +# Log general messages (green, no icon - for clean output) +log() { + printf '%b\n' "${GREEN}$*${NC}" +} + +# Log warning messages (yellow with warning icon) +warn() { + printf '%b\n' "${YELLOW}⚠️ $*${NC}" +} + +# Log error messages (red with error icon, continues execution) +err() { + printf '%b\n' "${RED}❌ $*${NC}" >&2 +} + +# Log fatal error and exit (red with error icon, exits with code 1) +fatal() { + printf '%b\n' "${RED}❌ $*${NC}" >&2 + exit 1 +} + +# ============================================================================= +# ENVIRONMENT VARIABLE READING +# ============================================================================= + +# Read environment variable from .env file with fallback to default +# Handles various quote styles, comments, and whitespace +# +# Usage: +# read_env KEY [DEFAULT_VALUE] +# value=$(read_env "MYSQL_PASSWORD" "default_password") +# +# Features: +# - Reads from file specified by $ENV_PATH (or $DEFAULT_ENV_PATH) +# - Strips leading/trailing whitespace +# - Removes inline comments (everything after #) +# - Handles double quotes, single quotes, and unquoted values +# - Returns default value if key not found +# - Returns value from environment variable if already set +# +read_env() { + local key="$1" + local default="${2:-}" + local value="" + + # Check if variable is already set in environment (takes precedence) + if [ -n "${!key:-}" ]; then + echo "${!key}" + return 0 + fi + + # Determine which .env file to use + local env_file="${ENV_PATH:-${DEFAULT_ENV_PATH:-}}" + + # Read from .env file if it exists + if [ -f "$env_file" ]; then + # Extract value using grep and cut, handling various formats + value="$(grep -E "^${key}=" "$env_file" 2>/dev/null | tail -n1 | cut -d'=' -f2- | tr -d '\r')" + + # Remove inline comments (everything after # that's not inside quotes) + # This is a simplified approach - doesn't handle quotes perfectly but works for most cases + value="$(echo "$value" | sed 's/[[:space:]]*#.*//' | sed 's/[[:space:]]*$//')" + + # Strip quotes if present + if [[ "$value" == \"*\" && "$value" == *\" ]]; then + # Double quotes + value="${value:1:-1}" + elif [[ "$value" == \'*\' && "$value" == *\' ]]; then + # Single quotes + value="${value:1:-1}" + fi + fi + + # Use default if still empty + if [ -z "${value:-}" ]; then + value="$default" + fi + + printf '%s\n' "${value}" +} + +# Read value from .env.template file (used during setup) +# This is similar to read_env but specifically for template files +# +# Usage: +# get_template_value KEY [TEMPLATE_FILE] +# value=$(get_template_value "MYSQL_PASSWORD") +# +get_template_value() { + local key="$1" + local template_file="${2:-${TEMPLATE_FILE:-${TEMPLATE_PATH:-.env.template}}}" + + if [ ! -f "$template_file" ]; then + fatal "Template file not found: $template_file" + fi + + # Extract value, handling variable expansion syntax like ${VAR:-default} + local value + local raw_line + raw_line=$(grep "^${key}=" "$template_file" 2>/dev/null | head -1) + + if [ -z "$raw_line" ]; then + err "Key '$key' not found in template: $template_file" + return 1 + fi + + value="${raw_line#*=}" + value=$(echo "$value" | sed 's/^"\(.*\)"$/\1/') + + # Handle ${VAR:-default} syntax by extracting the default value + if [[ "$value" =~ ^\$\{[^}]*:-([^}]*)\}$ ]]; then + value="${BASH_REMATCH[1]}" + fi + + echo "$value" +} + +# Update or add environment variable in .env file +# Creates file if it doesn't exist +# +# Usage: +# update_env_value KEY VALUE [ENV_FILE] +# update_env_value "MYSQL_PASSWORD" "new_password" +# +update_env_value() { + local key="$1" + local value="$2" + local env_file="${3:-${ENV_PATH:-${DEFAULT_ENV_PATH:-.env}}}" + + [ -n "$env_file" ] || return 0 + + # Create file if it doesn't exist + if [ ! -f "$env_file" ]; then + printf '%s=%s\n' "$key" "$value" >> "$env_file" + return 0 + fi + + # Update existing or append new + if grep -q "^${key}=" "$env_file"; then + # Use platform-appropriate sed in-place editing + if [[ "$OSTYPE" == "darwin"* ]]; then + sed -i '' "s|^${key}=.*|${key}=${value}|" "$env_file" + else + sed -i "s|^${key}=.*|${key}=${value}|" "$env_file" + fi + else + printf '\n%s=%s\n' "$key" "$value" >> "$env_file" + fi +} + +# ============================================================================= +# VALIDATION & REQUIREMENTS +# ============================================================================= + +# Require command to be available in PATH, exit with error if not found +# +# Usage: +# require_cmd docker +# require_cmd python3 jq git +# +require_cmd() { + for cmd in "$@"; do + if ! command -v "$cmd" >/dev/null 2>&1; then + fatal "Missing required command: $cmd" + fi + done +} + +# Check if command exists (returns 0 if exists, 1 if not) +# +# Usage: +# if has_cmd docker; then +# echo "Docker is available" +# fi +# +has_cmd() { + command -v "$1" >/dev/null 2>&1 +} + +# ============================================================================= +# MYSQL/DATABASE HELPERS +# ============================================================================= + +# Execute MySQL command in Docker container +# Reads MYSQL_PW and container name from environment +# +# Usage: +# mysql_exec DATABASE_NAME < script.sql +# echo "SELECT 1;" | mysql_exec acore_auth +# +mysql_exec() { + local db="$1" + local mysql_pw="${MYSQL_ROOT_PASSWORD:-${MYSQL_PW:-azerothcore}}" + local container="${MYSQL_CONTAINER:-ac-mysql}" + + docker exec -i "$container" mysql -uroot -p"$mysql_pw" "$db" +} + +# Execute MySQL query and return result +# Outputs in non-tabular format suitable for parsing +# +# Usage: +# count=$(mysql_query "acore_characters" "SELECT COUNT(*) FROM characters") +# +mysql_query() { + local db="$1" + local query="$2" + local mysql_pw="${MYSQL_ROOT_PASSWORD:-${MYSQL_PW:-azerothcore}}" + local container="${MYSQL_CONTAINER:-ac-mysql}" + + docker exec "$container" mysql -uroot -p"$mysql_pw" -N -B "$db" -e "$query" 2>/dev/null +} + +# Check if MySQL container is healthy and accepting connections +# +# Usage: +# if mysql_is_ready; then +# echo "MySQL is ready" +# fi +# +mysql_is_ready() { + local container="${MYSQL_CONTAINER:-ac-mysql}" + local mysql_pw="${MYSQL_ROOT_PASSWORD:-${MYSQL_PW:-azerothcore}}" + + docker exec "$container" mysqladmin ping -uroot -p"$mysql_pw" >/dev/null 2>&1 +} + +# Wait for MySQL to be ready with timeout +# +# Usage: +# mysql_wait_ready 60 # Wait up to 60 seconds +# +mysql_wait_ready() { + local timeout="${1:-30}" + local elapsed=0 + + info "Waiting for MySQL to be ready..." + + while [ $elapsed -lt $timeout ]; do + if mysql_is_ready; then + ok "MySQL is ready" + return 0 + fi + sleep 2 + elapsed=$((elapsed + 2)) + done + + err "MySQL did not become ready within ${timeout}s" + return 1 +} + +# ============================================================================= +# FILE & DIRECTORY HELPERS +# ============================================================================= + +# Ensure directory exists and is writable +# Creates directory if needed and sets permissions +# +# Usage: +# ensure_writable_dir /path/to/directory +# +ensure_writable_dir() { + local dir="$1" + + if [ ! -d "$dir" ]; then + mkdir -p "$dir" 2>/dev/null || { + err "Failed to create directory: $dir" + return 1 + } + fi + + if [ ! -w "$dir" ]; then + chmod u+w "$dir" 2>/dev/null || { + err "Directory not writable: $dir" + return 1 + } + fi + + return 0 +} + +# Create backup of file before modification +# +# Usage: +# backup_file /path/to/important.conf +# # Creates /path/to/important.conf.backup.TIMESTAMP +# +backup_file() { + local file="$1" + + if [ ! -f "$file" ]; then + warn "File does not exist, skipping backup: $file" + return 0 + fi + + local backup="${file}.backup.$(date +%Y%m%d_%H%M%S)" + cp "$file" "$backup" || { + err "Failed to create backup: $backup" + return 1 + } + + info "Created backup: $backup" + return 0 +} + +# ============================================================================= +# GIT HELPERS +# ============================================================================= + +# Configure git identity if not already set +# +# Usage: +# setup_git_config [USERNAME] [EMAIL] +# +setup_git_config() { + local git_user="${1:-${GIT_USERNAME:-AzerothCore RealmMaster}}" + local git_email="${2:-${GIT_EMAIL:-noreply@azerothcore.org}}" + + if ! git config --global user.name >/dev/null 2>&1; then + info "Configuring git identity: $git_user <$git_email>" + git config --global user.name "$git_user" || true + git config --global user.email "$git_email" || true + fi +} + +# ============================================================================= +# ERROR HANDLING UTILITIES +# ============================================================================= + +# Retry command with exponential backoff +# +# Usage: +# retry 5 docker pull myimage:latest +# retry 3 2 mysql_query "acore_auth" "SELECT 1" # 3 retries with 2s initial delay +# +retry() { + local max_attempts="$1" + shift + local delay="${1:-1}" + + # Check if delay is a number, if not treat it as part of the command + if ! [[ "$delay" =~ ^[0-9]+$ ]]; then + delay=1 + else + shift + fi + + local attempt=1 + local exit_code=0 + + while [ $attempt -le "$max_attempts" ]; do + if "$@"; then + return 0 + fi + + exit_code=$? + + if [ $attempt -lt "$max_attempts" ]; then + warn "Command failed (attempt $attempt/$max_attempts), retrying in ${delay}s..." + sleep "$delay" + delay=$((delay * 2)) # Exponential backoff + fi + + attempt=$((attempt + 1)) + done + + err "Command failed after $max_attempts attempts" + return $exit_code +} + +# ============================================================================= +# INITIALIZATION +# ============================================================================= + +# Library loaded successfully +# Scripts can check for $_COMMON_LIB_LOADED to verify library is loaded diff --git a/scripts/bash/manage-modules.sh b/scripts/bash/manage-modules.sh index 870d14c..68b5af9 100755 --- a/scripts/bash/manage-modules.sh +++ b/scripts/bash/manage-modules.sh @@ -7,52 +7,36 @@ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" + +# Source common library for shared functions +if [ -f "$SCRIPT_DIR/lib/common.sh" ]; then + source "$SCRIPT_DIR/lib/common.sh" +else + echo "ERROR: Common library not found at $SCRIPT_DIR/lib/common.sh" >&2 + exit 1 +fi + +# Source project name helper +source "$PROJECT_ROOT/scripts/bash/project_name.sh" + +# Module-specific configuration MODULE_HELPER="$PROJECT_ROOT/scripts/python/modules.py" DEFAULT_ENV_PATH="$PROJECT_ROOT/.env" ENV_PATH="${MODULES_ENV_PATH:-$DEFAULT_ENV_PATH}" TEMPLATE_FILE="$PROJECT_ROOT/.env.template" -source "$PROJECT_ROOT/scripts/bash/project_name.sh" # Default project name (read from .env or template) DEFAULT_PROJECT_NAME="$(project_name::resolve "$ENV_PATH" "$TEMPLATE_FILE")" -BLUE='\033[0;34m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; RED='\033[0;31m'; NC='\033[0m' +# Module-specific state PLAYERBOTS_DB_UPDATE_LOGGED=0 -info(){ printf '%b\n' "${BLUE}ℹ️ $*${NC}"; } -ok(){ printf '%b\n' "${GREEN}✅ $*${NC}"; } -warn(){ printf '%b\n' "${YELLOW}⚠️ $*${NC}"; } -err(){ printf '%b\n' "${RED}❌ $*${NC}"; exit 1; } # Declare module metadata arrays globally at script level declare -A MODULE_NAME MODULE_REPO MODULE_REF MODULE_TYPE MODULE_ENABLED MODULE_NEEDS_BUILD MODULE_BLOCKED MODULE_POST_INSTALL MODULE_REQUIRES MODULE_CONFIG_CLEANUP MODULE_NOTES MODULE_STATUS MODULE_BLOCK_REASON declare -a MODULE_KEYS -read_env_value(){ - local key="$1" default="${2:-}" value="${!key:-}" - if [ -n "$value" ]; then - echo "$value" - return - fi - if [ -f "$ENV_PATH" ]; then - value="$(grep -E "^${key}=" "$ENV_PATH" 2>/dev/null | tail -n1 | cut -d'=' -f2- | tr -d '\r')" - value="$(echo "$value" | sed 's/[[:space:]]*#.*//' | sed 's/[[:space:]]*$//')" - if [[ "$value" == \"*\" && "$value" == *\" ]]; then - value="${value:1:-1}" - elif [[ "$value" == \'*\' && "$value" == *\' ]]; then - value="${value:1:-1}" - fi - fi - if [ -z "${value:-}" ]; then - value="$default" - fi - printf '%s\n' "${value}" -} - -ensure_python(){ - if ! command -v python3 >/dev/null 2>&1; then - err "python3 is required but not installed in PATH" - fi -} +# Ensure Python is available +require_cmd python3 resolve_manifest_path(){ if [ -n "${MODULES_MANIFEST_PATH:-}" ] && [ -f "${MODULES_MANIFEST_PATH}" ]; then @@ -567,10 +551,10 @@ track_module_state(){ } main(){ - ensure_python + # Python is already checked at script start via require_cmd if [ "${MODULES_LOCAL_RUN:-0}" != "1" ]; then - cd /modules || err "Modules directory /modules not found" + cd /modules || fatal "Modules directory /modules not found" fi MODULES_ROOT="$(pwd)" diff --git a/scripts/bash/stage-modules.sh b/scripts/bash/stage-modules.sh index 7894fcd..a083a4f 100755 --- a/scripts/bash/stage-modules.sh +++ b/scripts/bash/stage-modules.sh @@ -39,10 +39,6 @@ ensure_host_writable(){ fi } -seed_sql_ledger_if_needed(){ - : # No-op; ledger removed -} - sync_local_staging(){ local src_root="$LOCAL_STORAGE_PATH" local dest_root="$STORAGE_PATH" diff --git a/scripts/python/__pycache__/modules.cpython-312.pyc b/scripts/python/__pycache__/modules.cpython-312.pyc deleted file mode 100644 index 4c1d63f..0000000 Binary files a/scripts/python/__pycache__/modules.cpython-312.pyc and /dev/null differ diff --git a/scripts/python/__pycache__/update_module_manifest.cpython-312.pyc b/scripts/python/__pycache__/update_module_manifest.cpython-312.pyc deleted file mode 100644 index 867a77a..0000000 Binary files a/scripts/python/__pycache__/update_module_manifest.cpython-312.pyc and /dev/null differ diff --git a/scripts/python/modules.py b/scripts/python/modules.py index 3088542..498483a 100755 --- a/scripts/python/modules.py +++ b/scripts/python/modules.py @@ -31,54 +31,127 @@ def parse_bool(value: str) -> bool: def load_env_file(env_path: Path) -> Dict[str, str]: + """ + Load environment variables from .env file. + + Args: + env_path: Path to .env file + + Returns: + Dictionary of environment variable key-value pairs + + Note: + Returns empty dict if file doesn't exist (not an error). + Handles quotes, comments, and export statements. + """ if not env_path.exists(): return {} + env: Dict[str, str] = {} - for raw_line in env_path.read_text(encoding="utf-8").splitlines(): + + try: + content = env_path.read_text(encoding="utf-8") + except Exception as e: + print(f"Warning: Failed to read environment file {env_path}: {e}", file=sys.stderr) + return {} + + for line_num, raw_line in enumerate(content.splitlines(), start=1): line = raw_line.strip() + + # Skip empty lines and comments if not line or line.startswith("#"): continue + + # Remove 'export' prefix if present if line.startswith("export "): line = line[len("export ") :].strip() + + # Skip lines without '=' if "=" not in line: continue - key, value = line.split("=", 1) - key = key.strip() - value = value.strip() - if value.startswith('"') and value.endswith('"'): - value = value[1:-1] - elif value.startswith("'") and value.endswith("'"): - value = value[1:-1] - env[key] = value + + try: + key, value = line.split("=", 1) + key = key.strip() + value = value.strip() + + # Strip quotes + if value.startswith('"') and value.endswith('"'): + value = value[1:-1] + elif value.startswith("'") and value.endswith("'"): + value = value[1:-1] + + env[key] = value + except Exception as e: + print( + f"Warning: Failed to parse line {line_num} in {env_path}: {raw_line}\n" + f" Error: {e}", + file=sys.stderr + ) + continue + return env def load_manifest(manifest_path: Path) -> List[Dict[str, object]]: + """ + Load and validate module manifest from JSON file. + + Args: + manifest_path: Path to module-manifest.json file + + Returns: + List of validated module dictionaries + + Raises: + FileNotFoundError: If manifest file doesn't exist + json.JSONDecodeError: If manifest is not valid JSON + ValueError: If manifest structure is invalid + """ if not manifest_path.exists(): raise FileNotFoundError(f"Manifest file not found: {manifest_path}") - with manifest_path.open("r", encoding="utf-8") as fh: - manifest = json.load(fh) + + try: + with manifest_path.open("r", encoding="utf-8") as fh: + manifest = json.load(fh) + except json.JSONDecodeError as e: + raise ValueError( + f"Invalid JSON in manifest file {manifest_path}:\n" + f" Line {e.lineno}, Column {e.colno}: {e.msg}" + ) from e + except Exception as e: + raise ValueError(f"Failed to read manifest file {manifest_path}: {e}") from e + modules = manifest.get("modules") if not isinstance(modules, list): raise ValueError("Manifest must define a top-level 'modules' array") + validated: List[Dict[str, object]] = [] seen_keys: set[str] = set() - for entry in modules: + + for idx, entry in enumerate(modules): if not isinstance(entry, dict): - raise ValueError("Each manifest entry must be an object") + raise ValueError(f"Manifest entry at index {idx} must be an object") + key = entry.get("key") name = entry.get("name") repo = entry.get("repo") + if not key or not isinstance(key, str): - raise ValueError("Manifest entry missing 'key'") + raise ValueError(f"Manifest entry at index {idx} missing 'key'") + if key in seen_keys: - raise ValueError(f"Duplicate manifest key detected: {key}") + raise ValueError(f"Duplicate manifest key detected: '{key}' (at index {idx})") seen_keys.add(key) + if not name or not isinstance(name, str): - raise ValueError(f"Manifest entry {key} missing 'name'") + raise ValueError(f"Manifest entry '{key}' missing 'name' field") + if not repo or not isinstance(repo, str): - raise ValueError(f"Manifest entry {key} missing 'repo'") + raise ValueError(f"Manifest entry '{key}' missing 'repo' field") + validated.append(entry) + return validated diff --git a/scripts/python/report_missing_modules.py b/scripts/python/report_missing_modules.py new file mode 100644 index 0000000..8da95c6 --- /dev/null +++ b/scripts/python/report_missing_modules.py @@ -0,0 +1,182 @@ +#!/usr/bin/env python3 +"""Generate a categorized list of GitHub modules missing from the manifest. + +The script reuses the discovery logic from ``update_module_manifest.py`` to +fetch repositories by topic, filters out entries already tracked in +``config/module-manifest.json`` and writes the remainder (including type, +category, and inferred dependency hints) to a JSON file. +""" + +from __future__ import annotations + +import argparse +import json +import os +import sys +from pathlib import Path +from typing import Dict, Iterable, List, Sequence, Tuple + +from update_module_manifest import ( # type: ignore + CATEGORY_BY_TYPE, + DEFAULT_TOPICS, + GitHubClient, + collect_repositories, + load_manifest, + normalize_repo_url, + repo_name_to_key, +) + +# heuristics used to surface potential dependency hints +DEPENDENCY_KEYWORDS: Tuple[Tuple[str, str], ...] = ( + ("playerbot", "MODULE_PLAYERBOTS"), + ("ah-bot", "MODULE_PLAYERBOTS"), + ("eluna", "MODULE_ELUNA"), +) + +# keywords that help categorize entries that should probably stay hidden by default +SUPPRESSION_KEYWORDS: Tuple[Tuple[str, str], ...] = ( + ("virtual machine", "vm"), + (" vm ", "vm"), + (" docker", "docker"), + ("container", "docker"), + ("vagrant", "vagrant"), + ("ansible", "automation"), + ("terraform", "automation"), + ("client", "client-distribution"), + ("launcher", "client-distribution"), +) + + +def parse_args(argv: Sequence[str]) -> argparse.Namespace: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + "--manifest", + default="config/module-manifest.json", + help="Path to module manifest JSON (default: %(default)s)", + ) + parser.add_argument( + "--output", + default="missing-modules.json", + help="Path to write the missing-module report JSON (default: %(default)s)", + ) + parser.add_argument( + "--topic", + action="append", + default=[], + dest="topics", + help="GitHub topic (or '+' expression) to scan (defaults to built-in list).", + ) + parser.add_argument( + "--max-pages", + type=int, + default=10, + help="Maximum pages (x100 results) to fetch per topic (default: %(default)s)", + ) + parser.add_argument( + "--token", + help="GitHub API token (defaults to $GITHUB_TOKEN or $GITHUB_API_TOKEN)", + ) + parser.add_argument( + "--log", + action="store_true", + help="Print verbose progress information", + ) + return parser.parse_args(argv) + + +def implied_dependencies(module_type: str, text: str) -> List[str]: + deps: List[str] = [] + if module_type == "lua": + deps.append("MODULE_ELUNA") + normalized = text.lower() + for keyword, dep in DEPENDENCY_KEYWORDS: + if keyword in normalized and dep not in deps: + deps.append(dep) + return deps + + +def suppression_flags(category: str, text: str) -> List[str]: + flags: List[str] = [] + if category == "tooling": + flags.append("tooling") + normalized = text.lower() + for keyword, flag in SUPPRESSION_KEYWORDS: + if keyword in normalized and flag not in flags: + flags.append(flag) + return flags + + +def make_missing_entries( + manifest_modules: List[dict], + repos: Iterable, +) -> List[dict]: + by_key: Dict[str, dict] = {module.get("key"): module for module in manifest_modules if module.get("key")} + by_repo: Dict[str, dict] = { + normalize_repo_url(str(module.get("repo", ""))): module + for module in manifest_modules + if module.get("repo") + } + missing: List[dict] = [] + + for record in repos: + repo = record.data + repo_url = normalize_repo_url(repo.get("clone_url") or repo.get("html_url") or "") + existing = by_repo.get(repo_url) + key = repo_name_to_key(repo.get("name", "")) + if not existing: + existing = by_key.get(key) + if existing: + continue + module_type = record.module_type + category = CATEGORY_BY_TYPE.get(module_type, "uncategorized") + description = repo.get("description") or "" + combined_text = " ".join( + filter( + None, + [ + repo.get("full_name"), + description, + " ".join(repo.get("topics") or []), + ], + ) + ) + entry = { + "key": key, + "repo_name": repo.get("full_name"), + "topic": record.topic_expr, + "repo_url": repo.get("html_url") or repo.get("clone_url"), + "description": description, + "topics": repo.get("topics") or [], + "type": module_type, + "category": category, + "implied_dependencies": implied_dependencies(module_type, combined_text), + "flags": suppression_flags(category, combined_text), + } + missing.append(entry) + missing.sort(key=lambda item: item["key"]) + return missing + + +def main(argv: Sequence[str]) -> int: + args = parse_args(argv) + topics = args.topics or DEFAULT_TOPICS + token = args.token or os.environ.get("GITHUB_TOKEN") or os.environ.get("GITHUB_API_TOKEN") + if not token: + print( + "Warning: no GitHub token provided, falling back to anonymous rate limit", + file=sys.stderr, + ) + client = GitHubClient(token, verbose=args.log) + + manifest = load_manifest(args.manifest) + repos = collect_repositories(client, topics, args.max_pages) + missing = make_missing_entries(manifest.get("modules", []), repos) + + output_path = Path(args.output) + output_path.write_text(json.dumps(missing, indent=2)) + print(f"Wrote {len(missing)} entries to {output_path}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main(sys.argv[1:])) diff --git a/setup.sh b/setup.sh index 1bc3635..1728a7b 100755 --- a/setup.sh +++ b/setup.sh @@ -518,6 +518,39 @@ auto_enable_module_dependencies() { done } +ensure_module_platforms() { + local needs_platform=0 + local key + for key in "${MODULE_KEYS[@]}"; do + case "$key" in + MODULE_ELUNA|MODULE_AIO) continue ;; + esac + local value + eval "value=\${$key:-0}" + if [ "$value" = "1" ]; then + needs_platform=1 + break + fi + done + if [ "$needs_platform" != "1" ]; then + return 0 + fi + + local platform + for platform in MODULE_ELUNA MODULE_AIO; do + [ -n "${KNOWN_MODULE_LOOKUP[$platform]:-}" ] || continue + local platform_value + eval "platform_value=\${$platform:-0}" + if [ "$platform_value" != "1" ]; then + local platform_name="${MODULE_NAME_MAP[$platform]:-${platform#MODULE_}}" + say INFO "Automatically enabling ${platform_name} to support selected modules." + printf -v "$platform" '%s' "1" + MODULE_ENABLE_SET["$platform"]=1 + fi + done + return 0 +} + show_realm_configured(){ echo -e "\n${GREEN}⚔️ Your realm configuration has been forged! ⚔️${NC}" @@ -1160,6 +1193,7 @@ fi done auto_enable_module_dependencies + ensure_module_platforms if [ "${MODULE_OLLAMA_CHAT:-0}" = "1" ] && [ "${MODULE_PLAYERBOTS:-0}" != "1" ]; then say INFO "Automatically enabling MODULE_PLAYERBOTS for MODULE_OLLAMA_CHAT." @@ -1326,6 +1360,7 @@ fi fi auto_enable_module_dependencies + ensure_module_platforms if [ -n "$CLI_PLAYERBOT_ENABLED" ]; then if [[ "$CLI_PLAYERBOT_ENABLED" != "0" && "$CLI_PLAYERBOT_ENABLED" != "1" ]]; then diff --git a/updates-dry-run.json b/updates-dry-run.json new file mode 100644 index 0000000..3f12717 --- /dev/null +++ b/updates-dry-run.json @@ -0,0 +1,350 @@ +[ + { + "key": "MODULE_INDIVIDUAL_PROGRESSION", + "repo_name": "ZhengPeiRu21/mod-individual-progression", + "topic": "azerothcore-module", + "repo_url": "https://github.com/ZhengPeiRu21/mod-individual-progression" + }, + { + "key": "MODULE_PLAYERBOTS", + "repo_name": "mod-playerbots/mod-playerbots", + "topic": "azerothcore-module", + "repo_url": "https://github.com/mod-playerbots/mod-playerbots" + }, + { + "key": "MODULE_OLLAMA_CHAT", + "repo_name": "DustinHendrickson/mod-ollama-chat", + "topic": "azerothcore-module", + "repo_url": "https://github.com/DustinHendrickson/mod-ollama-chat" + }, + { + "key": "MODULE_PLAYER_BOT_LEVEL_BRACKETS", + "repo_name": "DustinHendrickson/mod-player-bot-level-brackets", + "topic": "azerothcore-module", + "repo_url": "https://github.com/DustinHendrickson/mod-player-bot-level-brackets" + }, + { + "key": "MODULE_DUEL_RESET", + "repo_name": "azerothcore/mod-duel-reset", + "topic": "azerothcore-module", + "repo_url": "https://github.com/azerothcore/mod-duel-reset" + }, + { + "key": "MODULE_AOE_LOOT", + "repo_name": "azerothcore/mod-aoe-loot", + "topic": "azerothcore-module", + "repo_url": "https://github.com/azerothcore/mod-aoe-loot" + }, + { + "key": "MODULE_TIC_TAC_TOE", + "repo_name": "azerothcore/mod-tic-tac-toe", + "topic": "azerothcore-module", + "repo_url": "https://github.com/azerothcore/mod-tic-tac-toe" + }, + { + "key": "MODULE_NPC_BEASTMASTER", + "repo_name": "azerothcore/mod-npc-beastmaster", + "topic": "azerothcore-module", + "repo_url": "https://github.com/azerothcore/mod-npc-beastmaster" + }, + { + "key": "MODULE_MORPHSUMMON", + "repo_name": "azerothcore/mod-morphsummon", + "topic": "azerothcore-module", + "repo_url": "https://github.com/azerothcore/mod-morphsummon" + }, + { + "key": "MODULE_WORGOBLIN", + "repo_name": "heyitsbench/mod-worgoblin", + "topic": "azerothcore-module", + "repo_url": "https://github.com/heyitsbench/mod-worgoblin" + }, + { + "key": "MODULE_SKELETON_MODULE", + "repo_name": "azerothcore/skeleton-module", + "topic": "azerothcore-module", + "repo_url": "https://github.com/azerothcore/skeleton-module" + }, + { + "key": "MODULE_AUTOBALANCE", + "repo_name": "azerothcore/mod-autobalance", + "topic": "azerothcore-module", + "repo_url": "https://github.com/azerothcore/mod-autobalance" + }, + { + "key": "MODULE_TRANSMOG", + "repo_name": "azerothcore/mod-transmog", + "topic": "azerothcore-module", + "repo_url": "https://github.com/azerothcore/mod-transmog" + }, + { + "key": "MODULE_ARAC", + "repo_name": "heyitsbench/mod-arac", + "topic": "azerothcore-module", + "repo_url": "https://github.com/heyitsbench/mod-arac" + }, + { + "key": "MODULE_GLOBAL_CHAT", + "repo_name": "azerothcore/mod-global-chat", + "topic": "azerothcore-module", + "repo_url": "https://github.com/azerothcore/mod-global-chat" + }, + { + "key": "MODULE_PRESTIGE_DRAFT_MODE", + "repo_name": "Youpeoples/Prestige-and-Draft-Mode", + "topic": "azerothcore-module", + "repo_url": "https://github.com/Youpeoples/Prestige-and-Draft-Mode" + }, + { + "key": "MODULE_BLACK_MARKET_AUCTION_HOUSE", + "repo_name": "Youpeoples/Black-Market-Auction-House", + "topic": "azerothcore-module", + "repo_url": "https://github.com/Youpeoples/Black-Market-Auction-House" + }, + { + "key": "MODULE_ULTIMATE_FULL_LOOT_PVP", + "repo_name": "Youpeoples/Ultimate-Full-Loot-Pvp", + "topic": "azerothcore-module", + "repo_url": "https://github.com/Youpeoples/Ultimate-Full-Loot-Pvp" + }, + { + "key": "MODULE_SERVER_AUTO_SHUTDOWN", + "repo_name": "azerothcore/mod-server-auto-shutdown", + "topic": "azerothcore-module", + "repo_url": "https://github.com/azerothcore/mod-server-auto-shutdown" + }, + { + "key": "MODULE_TIME_IS_TIME", + "repo_name": "dunjeon/mod-TimeIsTime", + "topic": "azerothcore-module", + "repo_url": "https://github.com/dunjeon/mod-TimeIsTime" + }, + { + "key": "MODULE_WAR_EFFORT", + "repo_name": "azerothcore/mod-war-effort", + "topic": "azerothcore-module", + "repo_url": "https://github.com/azerothcore/mod-war-effort" + }, + { + "key": "MODULE_FIREWORKS", + "repo_name": "azerothcore/mod-fireworks-on-level", + "topic": "azerothcore-module", + "repo_url": "https://github.com/azerothcore/mod-fireworks-on-level" + }, + { + "key": "MODULE_NPC_ENCHANTER", + "repo_name": "azerothcore/mod-npc-enchanter", + "topic": "azerothcore-module", + "repo_url": "https://github.com/azerothcore/mod-npc-enchanter" + }, + { + "key": "MODULE_NPC_BUFFER", + "repo_name": "azerothcore/mod-npc-buffer", + "topic": "azerothcore-module", + "repo_url": "https://github.com/azerothcore/mod-npc-buffer" + }, + { + "key": "MODULE_PVP_TITLES", + "repo_name": "azerothcore/mod-pvp-titles", + "topic": "azerothcore-module", + "repo_url": "https://github.com/azerothcore/mod-pvp-titles" + }, + { + "key": "MODULE_CHALLENGE_MODES", + "repo_name": "ZhengPeiRu21/mod-challenge-modes", + "topic": "azerothcore-module", + "repo_url": "https://github.com/ZhengPeiRu21/mod-challenge-modes" + }, + { + "key": "MODULE_TREASURE_CHEST_SYSTEM", + "repo_name": "zyggy123/Treasure-Chest-System", + "topic": "azerothcore-module", + "repo_url": "https://github.com/zyggy123/Treasure-Chest-System" + }, + { + "key": "MODULE_ASSISTANT", + "repo_name": "noisiver/mod-assistant", + "topic": "azerothcore-module", + "repo_url": "https://github.com/noisiver/mod-assistant" + }, + { + "key": "MODULE_STATBOOSTER", + "repo_name": "AnchyDev/StatBooster", + "topic": "azerothcore-module", + "repo_url": "https://github.com/AnchyDev/StatBooster" + }, + { + "key": "MODULE_BG_SLAVERYVALLEY", + "repo_name": "Helias/mod-bg-slaveryvalley", + "topic": "azerothcore-module", + "repo_url": "https://github.com/Helias/mod-bg-slaveryvalley" + }, + { + "key": "MODULE_REAGENT_BANK", + "repo_name": "ZhengPeiRu21/mod-reagent-bank", + "topic": "azerothcore-module", + "repo_url": "https://github.com/ZhengPeiRu21/mod-reagent-bank" + }, + { + "key": "MODULE_ELUNA_TS", + "repo_name": "azerothcore/eluna-ts", + "topic": "azerothcore-module", + "repo_url": "https://github.com/azerothcore/eluna-ts" + }, + { + "key": "MODULE_AZEROTHSHARD", + "repo_name": "azerothcore/mod-azerothshard", + "topic": "azerothcore-module", + "repo_url": "https://github.com/azerothcore/mod-azerothshard" + }, + { + "key": "MODULE_LEVEL_GRANT", + "repo_name": "michaeldelago/mod-quest-count-level", + "topic": "azerothcore-module", + "repo_url": "https://github.com/michaeldelago/mod-quest-count-level" + }, + { + "key": "MODULE_DUNGEON_RESPAWN", + "repo_name": "AnchyDev/DungeonRespawn", + "topic": "azerothcore-module", + "repo_url": "https://github.com/AnchyDev/DungeonRespawn" + }, + { + "key": "MODULE_LUA_AH_BOT", + "repo_name": "mostlynick3/azerothcore-lua-ah-bot", + "topic": "azerothcore-lua", + "repo_url": "https://github.com/mostlynick3/azerothcore-lua-ah-bot" + }, + { + "key": "MODULE_ACCOUNTWIDE_SYSTEMS", + "repo_name": "Aldori15/azerothcore-eluna-accountwide", + "topic": "azerothcore-lua", + "repo_url": "https://github.com/Aldori15/azerothcore-eluna-accountwide" + }, + { + "key": "MODULE_ELUNA_SCRIPTS", + "repo_name": "Isidorsson/Eluna-scripts", + "topic": "azerothcore-lua", + "repo_url": "https://github.com/Isidorsson/Eluna-scripts" + }, + { + "key": "MODULE_TRANSMOG_AIO", + "repo_name": "DanieltheDeveloper/azerothcore-transmog-3.3.5a", + "topic": "azerothcore-lua", + "repo_url": "https://github.com/DanieltheDeveloper/azerothcore-transmog-3.3.5a" + }, + { + "key": "MODULE_HARDCORE_MODE", + "repo_name": "PrivateDonut/hardcore_mode", + "topic": "azerothcore-lua", + "repo_url": "https://github.com/PrivateDonut/hardcore_mode" + }, + { + "key": "MODULE_RECRUIT_A_FRIEND", + "repo_name": "55Honey/Acore_RecruitAFriend", + "topic": "azerothcore-lua", + "repo_url": "https://github.com/55Honey/Acore_RecruitAFriend" + }, + { + "key": "MODULE_EVENT_SCRIPTS", + "repo_name": "55Honey/Acore_eventScripts", + "topic": "azerothcore-lua", + "repo_url": "https://github.com/55Honey/Acore_eventScripts" + }, + { + "key": "MODULE_LOTTERY_LUA", + "repo_name": "zyggy123/lottery-lua", + "topic": "azerothcore-lua", + "repo_url": "https://github.com/zyggy123/lottery-lua" + }, + { + "key": "MODULE_HORADRIC_CUBE", + "repo_name": "TITIaio/Horadric-Cube-for-World-of-Warcraft", + "topic": "azerothcore-lua", + "repo_url": "https://github.com/TITIaio/Horadric-Cube-for-World-of-Warcraft" + }, + { + "key": "MODULE_GLOBAL_MAIL_BANKING_AUCTIONS", + "repo_name": "Aldori15/azerothcore-global-mail_banking_auctions", + "topic": "azerothcore-lua", + "repo_url": "https://github.com/Aldori15/azerothcore-global-mail_banking_auctions" + }, + { + "key": "MODULE_LEVEL_UP_REWARD", + "repo_name": "55Honey/Acore_LevelUpReward", + "topic": "azerothcore-lua", + "repo_url": "https://github.com/55Honey/Acore_LevelUpReward" + }, + { + "key": "MODULE_AIO_BLACKJACK", + "repo_name": "Manmadedrummer/AIO-Blackjack", + "topic": "azerothcore-lua", + "repo_url": "https://github.com/Manmadedrummer/AIO-Blackjack" + }, + { + "key": "MODULE_NPCBOT_EXTENDED_COMMANDS", + "repo_name": "Day36512/Npcbot_Extended_Commands", + "topic": "azerothcore-lua", + "repo_url": "https://github.com/Day36512/Npcbot_Extended_Commands" + }, + { + "key": "MODULE_ACTIVE_CHAT", + "repo_name": "Day36512/ActiveChat", + "topic": "azerothcore-lua", + "repo_url": "https://github.com/Day36512/ActiveChat" + }, + { + "key": "MODULE_MULTIVENDOR", + "repo_name": "Shadowveil-WotLK/AzerothCore-lua-MultiVendor", + "topic": "azerothcore-lua", + "repo_url": "https://github.com/Shadowveil-WotLK/AzerothCore-lua-MultiVendor" + }, + { + "key": "MODULE_EXCHANGE_NPC", + "repo_name": "55Honey/Acore_ExchangeNpc", + "topic": "azerothcore-lua", + "repo_url": "https://github.com/55Honey/Acore_ExchangeNpc" + }, + { + "key": "MODULE_DYNAMIC_TRADER", + "repo_name": "Day36512/Dynamic-Trader", + "topic": "azerothcore-lua", + "repo_url": "https://github.com/Day36512/Dynamic-Trader" + }, + { + "key": "MODULE_DISCORD_NOTIFIER", + "repo_name": "0xCiBeR/Acore_DiscordNotifier", + "topic": "azerothcore-lua", + "repo_url": "https://github.com/0xCiBeR/Acore_DiscordNotifier" + }, + { + "key": "MODULE_ZONE_CHECK", + "repo_name": "55Honey/Acore_Zonecheck", + "topic": "azerothcore-lua", + "repo_url": "https://github.com/55Honey/Acore_Zonecheck" + }, + { + "key": "MODULE_HARDCORE_MODE", + "repo_name": "HellionOP/Lua-HardcoreMode", + "topic": "azerothcore-lua", + "repo_url": "https://github.com/HellionOP/Lua-HardcoreMode" + }, + { + "key": "MODULE_SEND_AND_BIND", + "repo_name": "55Honey/Acore_SendAndBind", + "topic": "azerothcore-lua", + "repo_url": "https://github.com/55Honey/Acore_SendAndBind" + }, + { + "key": "MODULE_TEMP_ANNOUNCEMENTS", + "repo_name": "55Honey/Acore_TempAnnouncements", + "topic": "azerothcore-lua", + "repo_url": "https://github.com/55Honey/Acore_TempAnnouncements" + }, + { + "key": "MODULE_CARBON_COPY", + "repo_name": "55Honey/Acore_CarbonCopy", + "topic": "azerothcore-lua", + "repo_url": "https://github.com/55Honey/Acore_CarbonCopy" + } +] \ No newline at end of file