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

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

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

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

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

Не прокидывается ссылка на класс из Mission в Game

Создал в папке 5_Mission класс

class BMMenu extends UIScriptedMenu 
{	
	bool IsOnline()
	{
        // my code
		return false;
	}		
}

ref BMMenu m_BMMenu;

static BMMenu BMMenu() {
    if (!m_BMMenu) {
        m_BMMenu = new BMMenu;		
    }
    return m_BMMenu;
}

Далее, пытаюсь получить проинициализированный класс в 3_Game, посмотрел аналоги в коде богемии и делаю всё как у них

modded class ExtendedController
{	
	override bool ShowUser(){	
		return BMMenu().IsOnline();			
	}	
}

Компилирую, подписываю, заливаю на тестовый сервер и получаю ошибку в ExtendedController, Undefined function 'ExtendedController.BMMenu'.

Я так понимаю он не видит функцию, подскажите куда копать? Где то ещё ссылки надо добавить?

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


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

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

  • 1

Сервер грузит все скрипты разделами, в порядке как они идут, т.е. .1  - 2 - 3 - 4 - 5  - миссия

Объявив функцию в 5 разделе, она у вас будет видна и доступна только в разделе 5 и выше, т.е. 5_Mission и непосредственно миссия сервера.

Объявив функцию в 4_World вы сможете ее вызвать и в 4_World, и в 5_Mission, и непосредственно в миссии сервера.

Объявив функцию в 3_Game вы сможете ее вызвать и в 3_Game, и в 4_World, и в 5_Mission, и непосредственно в миссии сервера.

В обратную сторону это не работает, поскольку на этапе загрузки сервера 3_Game сервер еще не знает того, что ему только предстоит загрузить в дальнейшем в 5_Mission. Отсюда и ошибка о том, что это неизвестная функция(вызов), так как фактически на тот момент сервер попросту ее еще не знает - она не объявлена.

Л - логика, и только.

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


Ссылка на сообщение
Поделиться на других сайтах
MagicByte MagicByte MagicByte
  • 1
11 минут назад, kingzfate сказал:

@123new спасибо за ответ, а как в таком случае поступают, если например надо получить состояние объекта, включен ли он (рация например)? Я как понял они только в части Mission прогружаются

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

Прыгнуть выше головы мы не можем, но можем использовать функции игры ?

Советую изучить на всякий случай:

 

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

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


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

@123new спасибо за ответ, а как в таком случае поступают, если например надо получить состояние объекта, включен ли он (рация например)? Я как понял они только в части Mission прогружаются

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

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


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

@123new подскажите ещё, пожалуйста. Я же в любом случае не смогу скастить объект который выше того места где я его преобразую, как мне тогда поступать? Пример, у меня в 3_Game идёт проверка, есть ли у пользователя GPS и включён ли он, но GPS, вроде как не является InventoryItem, а является отдельным классом который находится в 4_World и там уже есть IsTurnedOn, но что то из за этой схемы подключения никак не могу понять логику. Может есть какой то тип dynamic или object (по аналогии с C#) которому я могу назначить действия? Или как-то ещё и определить включён ли он или нет? Или может есть код с подобной логикой, я бы хоть покопался

P.S. с рацией оказалось все просто, преобразовал к InventoryItem и проверку на IsOn и всё, а вот с GPS сложнее как то(

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
1 час назад, kingzfate сказал:

@123new подскажите ещё, пожалуйста. Я же в любом случае не смогу скастить объект который выше того места где я его преобразую, как мне тогда поступать? Пример, у меня в 3_Game идёт проверка, есть ли у пользователя GPS и включён ли он, но GPS, вроде как не является InventoryItem, а является отдельным классом который находится в 4_World и там уже есть IsTurnedOn, но что то из за этой схемы подключения никак не могу понять логику. Может есть какой то тип dynamic или object (по аналогии с C#) которому я могу назначить действия? Или как-то ещё и определить включён ли он или нет? Или может есть код с подобной логикой, я бы хоть покопался

P.S. с рацией оказалось все просто, преобразовал к InventoryItem и проверку на IsOn и всё, а вот с GPS сложнее как то(

есть классы с функциями, объявляемыми в 3_game, а есть те, что в 4_world. Вот те, что объявляются в 4_world - их в 3_Game не получится использовать. Это как данное примите. НО вы можете объявлять, использавать и-или вызывать классы и функции в 4_World те, что объявлены в 3_Game. Тем самым, например, вы можете сделать нужные вам классы в 3_game, наследоваться от них в 4_world и уже там проводить нужные вам обработки. Либо создать заведомо пустую функцию в классе 3_Game, а уже в 4_World ее замоддить и заполнить нужными вам вычислениями, которые в 4_World уже смогут работать.

Условно говоря, да, есть границы, но если 'прикинуть' как построить код, то это можно обойти.

А так у любого объекта в игре есть базовый класс Object и EntitiAI как его наследник и базовый класс движка для всего. Все остальное в каком-то смысле (даже InventoryItem) наследуется от него. Разумеется, большинством все это в 4_world обитает. Но это вы можете сами изучить, выполняя поиск в родных скриптах игры.

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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

Поддержка