Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Need help?

    Create a topic in the appropriate section
    Don't write everything in the chat!
  • Take a look at the marketplace

    There you can buy
    everything related to game servers
  • Don't want a ban?

    Please read our rules
    Don't disturb the order!
  • Sell or buy?

    Use services of the guarantor
    We will make your deal safe
eas1ly

#define #ifdef мододелам.

Recommended Posts

Привет, нашёл на форуме DayZ хорошую статью про использование #define #ifdef и хотелось бы поделиться с вами, так как она очень полезная для мододелов и в целом чтобы помочь другим устранять конфликты с вашими модами и наоборот.

 

Оригинальная статья: **тык**

 

Что такое #define и что он определяет:

Скрытый текст

#define использует с #ifdef (#ifndef) и позволяет узнать, загружен мод или нет.

 

Как добавить #define

Скрытый текст

 

Создайте файл, по пути:

/YourMod/Scripts/Common/define.c

/YourMod/Scripts/Common/define.c

Добавьте внутрь файла:

#define THE_NAME_OF_YOUR_MOD

#define THE_NAME_OF_YOUR_MOD

(Вы можете вписать вместо THE_NAME_OF_YOUR_MOD любое название, но оно должно быть уникально!)

 

Вот и все! Как видите, это очень просто, очень быстро и очень полезно!

 

 

Как использовать #define
 

Скрытый текст

 

Если вы мододел/скриптер и у вас возник конфликт с другим модом, иногда вы можете добавить код в свой мод, чтобы исправить этот конфликт.

 

Но, делая это, вы можете добавить ошибки для тех, кто использует ваш мод, но у его нет мода который конфликтует (когда исправление должно ссылаться на переменные или классы, включенные в мод, которые конфликтуют (а этого мода, допустим нет)).

 

Чтобы решить эту ситуацию, вы можете использовать этот тип кода:

#ifdef THE_DEFINE_OF_THE_MOD_THAT_CONFLICT // Код вашего исправления… #endif

#ifdef THE_DEFINE_OF_THE_MOD_THAT_CONFLICT
// Код вашего исправления…
#endif

или же

#ifndef THE_DEFINE_OF_THE_MOD_THAT_CONFLICT // Код вашего исправления… #endif

#ifndef THE_DEFINE_OF_THE_MOD_THAT_CONFLICT
// Код вашего исправления…
#endif

Используйте #ifdef или #ifndef в зависимости от того, нужно ли загружать или не загружать конфликтующий мод для выполнения вашего исправления.

 

Последнее, что нужно сделать, это разрешить вашему моду находить файл, в котором находится #define.

Для этого вам необходимо изменить свой корневой файл config.cpp.

 

Например, если ваше исправление находится в /scripts/5_mission/YourScript.c, вам нужно добавить в свой список путей к файлам

"missionScriptModule": "TheModThatConflictName/Scripts/Common",

"missionScriptModule":
"TheModThatConflictName/Scripts/Common",

поставьте его перед своей собственной миссией и не забудьте поставить « " » и « , » в конце пути.

 

Рекомендую распаковать мод, который конфликтует, для проверки в его корневом каталоге config.cpp путь, который он использует, потому что некоторые из них используют «префикс» перед именем мода (пример : PrefixName/ModName/Scripts/...).

Если используется префикс, то он должен быть включен в путь к папке определения.

 

 

Дополнительно:
 

Скрытый текст

 

Вам не нужно создавать #define, если ваш мод содержит только файлы config.cpp, потому что эта функция касается только скриптов в файле .c.

 

Вы можете добавить свой собственный внутренний #define, например #define MY_DEBUG_MOD_ACTIVE, тогда вам нужно только закомментировать / раскомментировать это определение, чтобы активировать / деактивировать код во всех соответствующих #ifdef сразу, где бы он ни находился в ваших скриптах.

(Только не забудьте указать путь к вашему корневому каталогу config.cpp)

 

Вы можете использовать #ifdef SERVER для выполнения кода только на стороне сервера.

 

И, если верить официальной документации, он немного более оптимизирован, чем « if (IsDedicatedServer()) » или « if( GetGame().isServer() && GetGame().IsMultiplayer() ) ».

 

Обратите внимание, что код, который не должен выполняться из-за #ifdef / #ifndef, вообще не компилируется при запуске сервера/игры (вот почему сервер #ifdef требует меньше ресурсов).

 

 

Вывод:

Скрытый текст

 

Я действительно думаю, что если большинство мододелов будут использовать это, то это значительно упростит решение конфликтов, но к сожалению, сегодня кажется, что только опытные мододелы знают и используют эту функцию, в то время как сделать это очень просто.

 

Идеальным решением было бы, чтобы ванильная игра автоматически определяла, загружены моды или нет, но, насколько я знаю, это не так ?

 

Поделитесь этой информацией со всеми знакомыми мододелами если это возможно, использование #define по сути облегчит работу с вашим модом и в целом думаю, будет очень полезна для вас самих же потому что чем больше мододелов про это узнают и начнут использовать тем меньше проблем будет у нас с модами.

 

 

Share this post


Link to post
Share on other sites
MagicByte MagicByte MagicByte

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.

Поддержка