Перейти к содержанию
Авторизация  

Добавления CustomScript в ядро


Описание

Описания процесса добавления Custom скриптов для расширения возможностей ядра.

Добавления 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 меню).



Рекомендуемые комментарии

Комментариев нет

×
×
  • Создать...