Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
eas1ly

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

Рекомендованные сообщения

Привет, нашёл на форуме 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 по сути облегчит работу с вашим модом и в целом думаю, будет очень полезна для вас самих же потому что чем больше мододелов про это узнают и начнут использовать тем меньше проблем будет у нас с модами.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
MagicByte MagicByte MagicByte

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

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

Важная информация

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

Поддержка