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
  • 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'.

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

Share this post


Link to post
Share on other sites

5 answers to this question

Recommended Posts

  • 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. Отсюда и ошибка о том, что это неизвестная функция(вызов), так как фактически на тот момент сервер попросту ее еще не знает - она не объявлена.

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

Share this post


Link to post
Share on other sites



  • 1
11 минут назад, kingzfate сказал:

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

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

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

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

 

Edited by 123new (see edit history)

Share this post


Link to post
Share on other sites
  • 0

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

Edited by kingzfate (see edit history)

Share this post


Link to post
Share on other sites
  • 0

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

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

Edited by kingzfate (see edit history)

Share this post


Link to post
Share on other sites
  • 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 обитает. Но это вы можете сами изучить, выполняя поиск в родных скриптах игры.

Share this post


Link to post
Share on other sites

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.