是否可以将核心补丁变成 AzerothCore 的模块?

Is it possible to turn a core patch into a module for AzerothCore?

假设我必须修补几个核心文件,例如:

src/server/game/Handlers/MiscHandler.cpp

+code line 1
+code line 2
+code line 3
src/server/game/Handlers/ChatHandler.cpp

+code line 1
+code line 2
+code line 3

我可以将这些补丁实现到一个模块中吗?如果可以的话,能否请你post举个例子,怎么做,这样我就明白了?

谢谢!

顺便提一下,我已经看过模块框架回购协议,我可以看到有一个包含两个文件的 src/ 文件夹 - loader.h 和 Player.cpp,但除此之外,不确定如何进行。

是的,这是可能的。在编写模块时,您可以使用 AzerothCore 中可用的现有挂钩。如果您需要一个尚不存在的挂钩,您可以简单地创建它并 send a PR to AzerothCore.

如何添加新的钩子:一个实际的例子

我需要创建一个非常简单的模块,每当 he/she 被邀请加入后离开 BG 队列时,它都会向玩家发送警告。

这是我的模块的代码,非常基础:

void OnBattlegroundDesertion(Player* player, const BattlegroundDesertionType type) override
{
    if (sConfigMgr->GetBoolDefault(DESERTION_ENABLED_CONFIG, false))
    {
        switch (type)
        {
            case BG_DESERTION_TYPE_LEAVE_QUEUE:
            case BG_DESERTION_TYPE_NO_ENTER_BUTTON:
                ChatHandler(player->GetSession()).PSendSysMessage("%s", sConfigMgr->GetStringDefault(WARNING_TEXT_CONFIG, "").c_str());
                break;
            default:
                break;
        }
    }
}

模块的完整源代码可在此处获得:https://github.com/azerothcore/mod-desertion-warnings

看起来很简单吧?特别是如果你有 OnBattlegroundDesertion 方法来满足我的需求(PlayerBattlegroundDesertionType)。

只有一个问题...钩子 OnBattlegroundDesertion 以前不存在!

不过没关系,我只需要在核心中实现它,这是完成这项工作的 PR:

https://github.com/azerothcore/azerothcore-wotlk/pull/4619

如您所见,只需在 ScriptMgr.hScriptMgr.cpp 中创建方法(与创建其他挂钩方法的方式相同),然后在需要时围绕核心调用它它。