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

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

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

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

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

Использование define из другого мода

Добрый день!

Есть MOD_A, который использует функцию FOO_MOD_B из MOD_B.
В принципе, MOD_A может работать из без MOD_B. Однако, если запустить сервер с MOD_A, но без MOD_B, вылетает ошибка, что функция FOO_MOD_B не определена.

Я пытался решить эту проблему, добавив в MOD_B define, идентифицирующий наличие данного мода - MOD_B_IS_LOADED, затем в MOD_A обернул код, использующий FOO_MOD_B примерно так:

#ifdef MOD_B_IS_LOADED
	FOO_MOD_B();
#endif

Однако, после запуска сервера MOD_A почему-то считает, что MOD_B_IS_LOADED всегда не определена (даже, когда MOD_B загружен), из-за чего FOO_MOD_B никогда не выполняется...

 

Вопрос: что я делаю не так?

 

P.S.: в MOD_B дефайн делал и отдельным файлом (с подключением папки в config.cpp), и напрямую в файле скрипта с PlayerBase.. MOD_A в любом случае не видит этот дефайн.

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


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

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

  • 0

Решил проблему. Кажется, дело было в том, что я не добавил мод с дефайнами в список зависимостей.

Вот список изменений в моём моде, при которых дефайны стали работать:

1. Добавил зависимость от мода Trader в requiredAddons:

class CfgPatches {
    class MY_MOD {
        requiredAddons[] = {
			"DZ_Scripts",
			"Trader",
        };
    }
}

2. В своих скриптах обернул код с вызовом функций из мода Trader в ifdef-endif:

...
#ifdef TRADER
		if (targetPlayer.IsTrader())
			return false;
#endif
...

 

Теперь мой мод работает и когда Trader загружен, и когда Trader НЕ загружен.

 

 

Также, я научился работать с дефайнами в кастомных (своих) модах.

Чтобы создать дефайн, который будет виден в других модах, нужно:

1. В папку "ModName/Scripts/Common" добавить файл define.c, в котором прописать дефайн:

#define MOD_B_IS_LOADED

2. В config.cpp в каждый модуль прописать пусть к папке "ModName/Scripts/Common":

class CfgMods {
    class MOB_B {
        type = "mod";

        class defs {
            class worldScriptModule {
                value = "";
                files[] = {
                    "_Mods/Sources/MOB_B/Scripts/Common",
                    "_Mods/Sources/MOB_B/Scripts/4_World",
                };
            };
        }
    }
}

3. Собрать пакет мода обычным способом.

 

Всё! Теперь, описанный дефайн можно использовать и в других модах (пример см. в начале этого ответа).

Изменено пользователем xOk (история изменений)

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


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

Опишу конкретный пример. Есть сторонний мод Trader. В нем есть дефайн TRADER и функция PlayerBase.IsTrader().

Я хочу создать свой мод, в котором одной из проверок мне нужно проверить, не является ли цель (PlayerBase) нпц-продавцом. При этом, хотелось бы, чтобы мой мод работал бы даже если мод Trader не был бы загружен (в таком случае проверка на нпц-продавца не проводилась бы). 
Я обернул проверку с PlayerBase.IsTrader() в ifdef-endif. Но почему то мой мод никак не видит внешний дефайн TRADER.. Почему?

Изменено пользователем xOk (история изменений)

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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

Поддержка