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

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

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

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

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

Помогите. Скрипт на подсоединение JSON конфига в созданный Action

Пытаюсь создать Action который будет принимать данные из созданного JSON конфига на стороне сервера. 
Пример:
Создаем конфиг
 

Скрытый текст

class AltProxyBuilding
{
    string proxy;

    void AltProxyBuilding( string prox )
    {
        proxy = prox;
    }
}
class AltConfig
{
	ref array< ref AltProxyBuilding > AltZProxyBuilding;
	void AltConfig()
	{
		AltZProxyBuilding = new ref array< ref AltProxyBuilding >;
	}
}
protected static void CreateDefaultConfig(out AltConfig configData)
{
        configData = new AltConfig();
		configData.AltZProxyBuilding.Insert(new AltProxyBuilding("tv"));
		configData.AltZProxyBuilding.Insert(new AltProxyBuilding("kitchenstove"));
		configData.AltZProxyBuilding.Insert(new AltProxyBuilding("lekarnicka"));
		configData.AltZProxyBuilding.Insert(new AltProxyBuilding("pc"));
		configData.AltZProxyBuilding.Insert(new AltProxyBuilding("fridge"));
		configData.AltZProxyBuilding.Insert(new AltProxyBuilding("bedroom"));
		configData.AltZProxyBuilding.Insert(new AltProxyBuilding("canister"));
}

 


Json получается в таком формате:
 

Скрытый текст

"AltZProxyBuilding": [
        {
            "proxy": "tv"
        },
        {
            "proxy": "kitchenstove"
        },
        {
            "proxy": "lekarnicka"
        },
        {
            "proxy": "pc"
        },
        {
            "proxy": "fridge"
        },
        {
            "proxy": "bedroom"
        },
        {
            "proxy": "canister"
        }
    ]

 


В Action добавляю просто для проверки void GetProxyBuilder() и проверяю его работоспособность

Скрытый текст

void GetProxyBuilder()
	{
		array<string> proxyB = new array<string>;
		for (int i = 0; i < configproxy.AltZProxyBuilding.Count(); i++)
		{
			Print("[Insert]    ----------<" + configproxy.AltZProxyBuilding[i].proxy + ">---------------");
			proxyB.Insert(configproxy.AltZProxyBuilding[i].proxy);
		}
			
		for (int j = 0; j < proxyB.Count(); j++)
		{
			Print("[Get]    ----------<" + proxyB[j] + ">---------------");
			if (z_childNameRPC.Contains(proxyB[j]))
			{
				Print("[Get_УРА!!!]    ----------<" + proxyB[j] + "-------" + ">---------------");
			}
		}	
	}

 


На стороне клиента я получаю NULL (если добавляю исключение if !=NULL то функция вообще не отрабатывает.
На стороне сервера значения из конфига получаются, но так как функция z_childNameRPC обрабатывается на стороне клиента то выполнения этого условия не происходит.

Если не использовать JSON конфиг, а создать массив с данными внутри Action то все отрабатывает нормально.

Скрытый текст

void GetProxyBuilder()
	{
		array<string> proxyB = new array<string>;
		proxyB.Insert("fridge");
		proxyB.Insert("tv");
		proxyB.Insert("kitchenstove");
				
		
		for (int i = 0; i < proxyB.Count(); i++)
		{
			Print("[Get]	----------<" + proxyB[i] + ">---------------");
			if (z_childNameRPC.Contains(proxyB[i]))
			{
				Print("[Get1УРА!!!]	----------<" + proxyB + ">---------------");
				// Действия, которые нужно выполнить, если условие выполняется
			}
		}
	}

 


Вопрос как возможно использовать данные из конфига JSON

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

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


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

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

  • 0

Решение. Использовать RPC от CF.
Ссылка для ознакомления:
https://github.com/Arkensor/DayZ-CommunityFramework/blob/production/docs/RPC/index.md

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


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

не совсем понятно что есть configproxy и configData

Нужен полный код для полноты понимания всего вопроса.

И да, чтобы клиент-сервер и сервер-клиент синхронизация была, надо эту инфу от сервера клиенту передавать как-то, само оно никак, да.

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


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

configproxy

AltConfig configproxy = GetDayZGame().GetAltConfig();
 

 

1 час назад, 123new сказал:

configData

configData = new AltConfig(); 

Каким образом она должна передаваться? Через RPC? Я еще просто не добрался с его изучением. Есть где нибудь принцип его работы? Или образец хотя бы.

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


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

Каким образом она должна передаваться? Через RPC? Я еще просто не добрался с его изучением. Есть где нибудь принцип его работы? Или образец хотя бы.

ну я обычно делаю свой класс, и при коннекте игрока передаю данные через RPC от сервера на клиент игры в переменную своего типа в нужном формате. Она получается как буфер для хранения настроек, и одновременно как класс для своих вычислений, дабы не забивать родные функции игры. Соответственно в нужном месте (например экшен) просто юзаю сохраненные данные с этой переменной, что в соседнем классе обитает (я обычно делаю это через вызов функции из своего класса, где провожу нужное мне все)

17 часов назад, alex_good_kaban сказал:

AltConfig configproxy = GetDayZGame().GetAltConfig();

на сервере и клиенте в памяти это будут 2 независимых экземпляра класса со своими данными, если не синхронизировать переменную с рпц с нужными данными своими силами.

 

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


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

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

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

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

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

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

Войти

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

Войти сейчас

  • Похожие публикации

    • Автор: KaLiBR
      Всех приветствую!
      Господа, подскажите пожалуйста, хочу исправить некоторые ошибки
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
    • Автор: Troy1
      Всем привет. Помогите пожалуйста со скриптом.
      Суть. Я пытаюсь сделать синхранизацию сервера с клиентом передавая c конфига время разделки животного.
      В родных скриптах есть class UATimeSpent с константами и там есть константа SKIN.
      Мне нужно её перезаписать на своё значение и мне выдаёт ошибку: Trying to modify write protected variable 'SKIN' в переводе на Русский Попытка изменить защищенную от записи переменную «SKIN».
      Функция скрипта: Когда игрок запускает клиент, идёт запрос на серверную часть и получает в ответ время разделки.
      Задача: Нужно перезаписать константу SKIN на новое значение и всё.
      Сам скрипт.
      class timeToComplete extends UATimeSpent { protected ref UATimeSpent m_UATimeSpent; void timeToComplete() { GetDayZGame().Event_OnRPC.Insert(OnRPC); CheckUATimeSpent(); } void ~timeToComplete() { GetDayZGame().Event_OnRPC.Remove(OnRPC); } void CheckUATimeSpent() { GetGame().RPCSingleParam(NULL, SOC_TIME_RPCs.SOC_GT, NULL, true); } void OnRPC(PlayerIdentity sender, Object target, int rpc_type, ParamsReadContext ctx) { if (rpc_type == SOC_TIME_RPCs.SOC_RT) { Param1<float> soc_srt; if (ctx.Read(soc_srt)) { if (soc_srt.param1!= 0) { m_UATimeSpent.SKIN = soc_srt.param1; Print("Пришёл ответ от сервера в m_UATimeSpent.SKIN - " + m_UATimeSpent.SKIN) } } } } };  
    • Автор: alex_good_kaban
      Что вы узнаете в этом руководстве:

      - Установка и настройка Workbench с нуля
      - Установка инструментариев Dayz Tolls, Mikera tools
      - Создание своего первого мода
      - Отладка этого мода в игре
      - Изменение мода без перезагрузки

      Что нужно для начала работ:

      1. Установленная игра DayZ - https://store.steampowered.com/agecheck/app/221100/
      2. Установленный сервер DayZ - https://store.steampowered.com/agecheck/app/221100/
      3. Установленный DayZ Tools - https://store.steampowered.com/app/830640/DayZ_Tools/
      4. Установленный Visual Studio Code или Notepad ++(советую первый вариант, бонус в конце статьи)
      5. Установить пакет инструментов от Mikera (галочками отмечено в спойлере) - https://mikero.bytex.digital/Downloads

      Если все вышеперечисленные пункты выполнены приступим к настройке:

      1. Создание диска Р и распаковка файлов игры


      2. Создание первого мода


      3. Упаковка в PBO
      На данном этапе мы забываем окончательно о существовании Addon Builder встроенного в DayZ Tools.
      Используйте pboProject для запаковки модов - он показывает абсолютно все допущенные ошибки, кроме ошибок в скриптах.


      4. Подготовка к Filepatching


      5. Тестирование в одиночной игре/оффлайн режим. (DayZDiag_x64 - client)


      6. Тестирование в многопользовательском режиме. (DayZDiag_x64 - server + client)

      7. Настройка и работа в Workbench
    • Автор: alex_good_kaban
      Пытаюсь изменить состояние еды из состояние ROTTEN (Гнилого) в состояние RAW (Сырое).
      Использую команду 
       
      Edible_Base food = Edible_Base.Cast(ingredients); food.ChangeFoodStage( FoodStageType.RAW ); Состояние изменяется на RAW секунд на 20, после опять возвращается в состояние ROTTEN. 
      Как зафиксировать данное состояние у еды, я так понимаю есть определенный таймер у еды который тоже нужно сбросить. Подскажите как?
    • Автор: aimlock
      Можно ли изменить global armor предмета через скрипт, игнорирую config предмета?
  • Наш выбор

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

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

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