blob: b434afc821663b9fe888668e3799bee444426229 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
Before start we suggest you to read [[Documentation about modular structure|The-Modular-Structure]] to understand the way AzerothCore works.
## **How to create a module**
### Ressources
- Module template: [https://github.com/azerothcore/skeleton-module](https://github.com/azerothcore/skeleton-module)
- Script template: https://github.com/azerothcore/azerothcore-boilerplates
- All the hooks in the core are listed in [ScriptMgr.cpp](https://github.com/azerothcore/azerothcore-wotlk/blob/master/src/server/game/Scripting/ScriptMgr.cpp). If you need custom hooks, they can be added to the core.
### **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….**
|