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

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

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

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

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

Здравствуйте, форумчане!
Потихоньку изучаю скриптинг и возник вопрос:

как загружать файл с папки profiles?
Если я правильно понимаю, то нужно отдельно создавать manager в 3_Game, а в 5_mission можно получать информацию только на стороне клиента(мода)
 

Имеется мод с UI, в нем есть правила, они загружались из самого мода, решил попробовать переделать на profiles:

создал скрипт в 3_Game\RulesConfig.c с содержимым:

class RulesConfig
{
	private const static string RulModFolder = "$profile:\\Rules\\";
	private const static string RulConfigName = "rules.json";
	ref array<ref RulesData> data;
	void Load() 
	{
		if (GetGame().IsServer()) 
		{
			if (FileExist(RulModFolder + RulConfigName))
			{ // If config exists, load file
				JsonFileLoader<ref array<ref RulesData>>.JsonLoadFile(RulModFolder + RulConfigName, data);
				Print("[RulesConfig] download");
			}
		}
	}
}
class RulesData {
    string title;
    ref array<string> subrules = new array<string>();
}
// Save config data
ref RulesConfig m_RulesConfig;
// Helper function to return Config data storage object
static RulesConfig GetRulesConfig()
{
	if(!m_RulesConfig)
	{
		Print("[RulesConfig] Init");
		m_RulesConfig = new RulesConfig;
		m_RulesConfig.Load();
	}

	return m_RulesConfig;
};

в скрипте 5_Mission\lobbymenu\interaction\rules

class RulesMenu: ScriptedWidgetEventHandler {
    Widget layoutRoot;
    GridSpacerWidget wrap;

    void RulesMenu(Widget parent) {
        //GetRulesConfig();
        BuildLayout(parent);
        FillRules();
        Print("[GetRulesConfig] show.");
    }

    void BuildLayout(Widget parent) {
        layoutRoot = GetGame().GetWorkspace().CreateWidgets("NM/assets/layouts/lobbymenu/interaction/rules/rules.layout", parent);
        CastTo(wrap, layoutRoot.FindAnyWidget("wrap"));
        layoutRoot.SetHandler(this);
    }

    void FillRules() {
        if (GetRulesConfig().data) {
            Print("[GetRulesConfig] show2");
            foreach(RulesData element: GetRulesConfig().data) {
                string title = element.title;
                TStringArray subrules = element.subrules;
                Widget groupRoot = GetGame().GetWorkspace().CreateWidgets("NM/assets/layouts/lobbymenu/interaction/rules/group.layout", wrap);
                TextWidget m_title = TextWidget.Cast(groupRoot.FindAnyWidget("title"));
                m_title.SetText(title);
                WrapSpacerWidget wrp = WrapSpacerWidget.Cast(groupRoot.FindAnyWidget("wrp"));
                foreach(string elm: subrules) {
                    Widget elementRoot = GetGame().GetWorkspace().CreateWidgets("NM/assets/layouts/lobbymenu/interaction/rules/element.layout", wrp);
                    TextWidget w_title = TextWidget.Cast(elementRoot.FindAnyWidget("title"));
                    w_title.SetText(elm);
                }
            }
        }
    }

    void Show() {
        layoutRoot.Show(true);
        SetFocus(layoutRoot);
    }

    void Hide() {
        layoutRoot.Show(false);
        SetFocus(null);
    }
}

в скрипте 5_Mission\missions\MissionServer.c:
 

modded class MissionServer
{
	override void OnInit()
	{
		GetRulesConfig();
		super.OnInit();
		Print("[GetRulesConfig] OnInit - Loaded config successfully.");
	}
}

 

но никак не получается получить данные с 3_game, осложнение для меня это :ref вместе с array(еще не совсем все это понимаю)
Прошу подсказать как сделать, какие ошибки, а желательно написать как будет правильно, чтобы было проще понять на примере
Не кидайтесь тапками, я только учусь:3

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

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


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

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

  • 0

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

JsonFileLoader лишь загружает или сохраняет json файл по указанному формату класса в переменную или из нее. Все. Соответственно где будет эта самая переменная -* там будут и данные, считанные из json файла. Читаем, например, на сервере, в переменную определенного класса своего - на стороне сервера в этой переменной именно он и будет. Что с этим делать дальше смотрите сами. Хотите используйте в другом скрипте, хотите - передавайте на сторону клиента через rpc тот же. Ваше дело.

Собственно rpc буквально зависит от того, что и как вы строите в своей работе. Есть штатные rpc

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

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


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



  • 0
8 минут назад, 123new сказал:

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

JsonFileLoader лишь загружает или сохраняет json файл по указанному формату класса в переменную или из нее. Все. Соответственно где будет эта самая переменная -* там будут и данные, считанные из json файла. Читаем, например, на сервере, в переменную определенного класса своего - на стороне сервера в этой переменной именно он и будет. Что с этим делать дальше смотрите сами. Хотите используйте в другом скрипте, хотите - передавайте на сторону клиента через rpc тот же. Ваше дело.

Собственно rpc буквально зависит от того, что и как вы строите в своей работе. Есть штатные rpc

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Спасибо за ответ!
Смотря примеры других работы, увидел, что там читаются просто переменные и то на стороне сервера, не передаваясь клиенту, поэтому тут видимо гараздо сложнее будет передать текст да еще и с array на сторону клиента, наверно проще оставить текст правил и т.п. в самом .pbo и потом уже редактировать при надобности.

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


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

Спасибо за ответ!
Смотря примеры других работы, увидел, что там читаются просто переменные и то на стороне сервера, не передаваясь клиенту, поэтому тут видимо гараздо сложнее будет передать текст да еще и с array на сторону клиента, наверно проще оставить текст правил и т.п. в самом .pbo и потом уже редактировать при надобности.

ну это кому как проще. Например, я в NightZone моде своем передаю данные по настройкам на клиент от сервера при коннекте к серверу в свой класс. И уже в своем классе оперирую с данными. Да, все это там в 4_World происходит, но кто сказал что нельзя комбинировать? например создать класс в 4_World и получить данные в переменную, а из 5_Mission например уже обращаться к функции своего класса, что создана в 4_World? Импровизируйте

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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