Добавления CustomScript в ядро
Описание
Добавления CustomScript в ядро
Давайте предположим что вы создали или скачали с данного форума скрипт для ядра mmaxi.cpp но не знаете как его "подключить" к ядру.
Внимание добавить кастумные скрипты на готовую сборку нельзя (это возможно только если у вас есть исходники)
И так первым делом нужно переместить данный скрипт в следующую директорию: (/src/server/scripts/Custom)
Если открыть наш скрипт блокнотам (желательно не стандартным а к примеру Notepad++) он будет примерно выглядеть следующим образом:
#include "ScriptMgr.h"// .. Подключаемые файлы (инклуды) class mmaxi_script_class: CreatureScript{public: my_script_class() : CreatureScript("mmaxi_script") {} // код скрипта}; void AddSC_mmaxi_script(){ new mmaxi_script_class();}
Как мы видим в примере используется функция под названием AddSC_mmaxi_script которая связывает данный кусок кода с основным кодом ядра (если выразится доступным языком). Имя данной функции всегда должно быть уникальным, допустим если у вас будет 2 скрипта с одинаковым именем то компилятор выдаст ошибку так как есть две функции с одинаковым именем.
AddSC_mmaxi_script // Объявление new mmaxi_script_class // Вызов
Теперь после того как мы добавили наш скрипт в папку с исходниками нам нужно его прописать (указать ядру что этот скрипт нужно загружать как его часть). Для этого откройте блокнотом файл /src/server/game/Scripting/ScriptLoader.cpp и опуститесь в самый низ кода, где вы увидите следующие:
#ifdef SCRIPTS/* This is where custom scripts' loading functions should be declared. */#endif
void AddCustomScripts(){#ifdef SCRIPTS /* This is where custom scripts should be added. */#endif
Как видно выше в коде уже предусмотрено место для аккуратного размещения кастумных скриптов. Теперь нам нужно добавить наш скрипт в загрузку:
- В первом добавляем - void AddSC_maxxi_script();
-
Во втором добавляем - AddSC_maxxi_script();
В результате у вас должно получится следующие:
#ifdef SCRIPTS/* This is where custom scripts' loading functions should be declared. */void AddSC_maxxi_script();#endif
void AddCustomScripts(){#ifdef SCRIPTS /* This is where custom scripts should be added. */ AddSC_maxxi_script();#endif}
Отлично, теперь осталось только указать компилятору (для Cmake) что этот файл нужно так же собирать в месте с остальным ядром (ранее мы казали ядру что нужно загружать работу скрипта).
Для этого откройте блокнотом файл /src/server/scripts/Custom/CMakeLists.txt и укажите путь до нашего скрипта как показано в примере ниже:
# file(GLOB_RECURSE sources_Custom Custom/*.cpp Custom/*.h) set(scripts_STAT_SRCS ${scripts_STAT_SRCS}# ${sources_Custom} "Custom/maxxi_script.cpp") message(" -> Prepared: Custom")
На этом мы закончили основную нашу работу, так же в дополнении ниже хочу добавить информацию которая возможно будет вам полезна по дальнейшей работе с кастум скриптами.
Привязываем CustomScript к базе.
В основном кастумные скрипты делаются для NPC (существ) и предметов. Для того что бы они работали в игровом мире такие скрипты надо привязать к нужным вам npc или предметам.
Так же хочу обратить внимание на то что такие скрипты как CommandScripts, PlayerScripts и WorldScripts не должны быть привязаны к каким либо существам, предметам или объектам.
Для первого же варианта в Mysql(базе) а точней в таблицах для NPC, Предметов и объектов есть колонка с названием SCRIPTNAME именно в нее нам и нужно добавлять наш кастумный скрипт для определенного существа и т.д.
Что бы упростить эту задачу (не лесть и не ковырять руками) ниже приведены SQL запросы для добавления наших скриптов в эти колонки (описывать каждый запрос для сего думаю нет смысла так как из названия таблиц все понятно. XXXX - идентификатор нужного нам npc и т.д.)
UPDATE `areatrigger_scripts` SET ScriptName='maxxi_script' WHERE `entry`=XXXX;UPDATE `creature_template` SET ScriptName='maxxi_script' WHERE `entry`=XXXXX;UPDATE `gameobject_template` SET ScriptName='maxxi_script' WHERE `entry`=XXXXXX;UPDATE `instance_template` SET ScriptName='maxxi_script' WHERE `map`=XXX;UPDATE `item_template` SET ScriptName='maxxi_script' WHERE `entry`=XXXXX;
Примечание: Если ваш скрипт для NPC создает gossip меню (меню разговора) то возможно потребуется в нести некоторые изменения для вашего существа (в случаи если скрипт не будет работать) в таблице creature_template в колонке npcflag нужно добавить npcflag=1 (gossip меню).
Рекомендуемые комментарии
Комментариев нет