From 5f21aff9bee352200f28cf56bc78e3d37840ecdc Mon Sep 17 00:00:00 2001 From: Poszer Date: Sat, 22 Jun 2019 13:13:17 +0200 Subject: Create Add-a-module.md Test preview --- docs/Add-a-module.md | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 docs/Add-a-module.md (limited to 'docs') diff --git a/docs/Add-a-module.md b/docs/Add-a-module.md new file mode 100644 index 0000000..a2be36b --- /dev/null +++ b/docs/Add-a-module.md @@ -0,0 +1,117 @@ + +## **How to add a module** + + +- Get the Module From this website [http://www.azerothcore.org/modules-catalogue/](http://www.azerothcore.org/modules-catalogue/) +- Clone it, or download. +- I'll use this for Exmple: [http://www.azerothcore.org/modules-catalogue/details.html?id=177019524](http://www.azerothcore.org/modules-catalogue/details.html?id=177019524). +- Once you downloaded it or cloned: ( Extract it, you will have than Folder looks like this : +[[images/1.png]] + + +### **The Basis** + +1. Create a folder inside modules/ directory + +2. Create a CMakeLists.txt file in the root path of your module +it will be automatically detected by cmake when you [re]configure your project. + +3. Now you can develop add anything to the main project, such as some scripts or +even an entire library + +Note: we suggest to use the [directory structure](Directory-Structure) standards of AzerothCore to better organize your modules and be familiar with main project. + +### **Add the first script** + +1. Before continue, we suggest you to follow our guide on how to create a script for AzerothCore + +2. After you’ve created your script you’ve to create a .h file to handle the script loading. + + For example ( Assuming you’ve created an src folder ): + + **src/loader.h** + + `void AddMyCustomScripts();` + + NOTE: AddMyCustomScripts is composed by: + + Add (Prefix) + + MyCustom (An unique name identifier for your script to avoid function collisions) + + Scripts ( Suffix ) + +3. Now you’ve to include your loader in your cmake using a simple MACRO ( Assuming that your script is called MyCustom.cpp ): + +``` +AC_ADD_SCRIPT("${CMAKE_CURRENT_LIST_DIR}/src/MyCustom.cpp") +AC_ADD_SCRIPT_LOADER("MyCustom" "${CMAKE_CURRENT_LIST_DIR}/src/loader.h") +``` + +First parameter is your module identifier + +Second parameter is the path of your loader header. + +Now you can add all scripts you want to your server just creating their instances inside AddMyCustomScripts() function, or using cmake macro above. + +### **Create a custom configuration file** + +if you need to add a custom configuration file to your module that will be installed with server, the steps are very simple. + +Before starting, you should have created the loader files described previously. + +1. Create a world script with this basic structure: + + +``` + #include "Configuration/Config.h" + #include "ScriptMgr.h" + + class MyWorldScript : public WorldScript + + { + public: + + MyWorldScript() : WorldScript("MyWorldScript") { } + + void OnBeforeConfigLoad(bool reload) override + { + if (!reload) { + std::string conf_path = _CONF_DIR; + std::string cfg_file = conf_path + "/my_custom.conf"; + sConfigMgr->LoadMore(cfg_file.c_str()); + } + } + }; + + void AddMyWorldScripts() + { + new MyWorldScript(); + } +``` + +2. Add your AddMyWorldScripts to your CMakeLists.txt created before + +3. Create a cmake file that must be loaded after binary installation and add this to your module CMakeLists.txt: + + ``` + ADD_HOOK(AFTER_WORLDSERVER_CMAKE "${CMAKE_CURRENT_LIST_DIR}/after_ws_install.cmake") + ``` + + of course you can call your file as you want , the AFTER_WORLDSERVER_CMAKE hook will be launched as soon as AzerothCore prepare the worldserver installation. + +4. Inside this new cmake file you’ve to put this instructions: + +``` +install(FILES "${CMAKE_SOURCE_DIR}/your_path/my_custom.conf.dist" DESTINATION ${CONF_DIR}) +``` + +Change "your_path" part with path to your conf file, for example: + +/modules/my_module/conf/my_custom.conf.dist + +### **Add your db files to db_assembler** + +you are able to create base, updates and custom sql that will be automatically loaded in our db_assembler + +**work in progress….** -- cgit