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
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

Edited by alex_good_kaban (see edit history)

Share this post


Link to post
Share on other sites

5 answers to this question

Recommended Posts




  • 0

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

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

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

Share this post


Link to post
Share on other sites
  • 0
1 час назад, 123new сказал:

configproxy

AltConfig configproxy = GetDayZGame().GetAltConfig();
 

 

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

configData

configData = new AltConfig(); 

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

Share this post


Link to post
Share on other sites
  • 0
17 часов назад, alex_good_kaban сказал:

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

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

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

AltConfig configproxy = GetDayZGame().GetAltConfig();

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

 

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

  • Similar Content

    • By 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) } } } } };  
    • By 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
    • By alex_good_kaban
      Пытаюсь изменить состояние еды из состояние ROTTEN (Гнилого) в состояние RAW (Сырое).
      Использую команду 
       
      Edible_Base food = Edible_Base.Cast(ingredients); food.ChangeFoodStage( FoodStageType.RAW ); Состояние изменяется на RAW секунд на 20, после опять возвращается в состояние ROTTEN. 
      Как зафиксировать данное состояние у еды, я так понимаю есть определенный таймер у еды который тоже нужно сбросить. Подскажите как?
    • By aimlock
      Можно ли изменить global armor предмета через скрипт, игнорирую config предмета?
    • By aimlock
      Нужно что бы объект двигался от лица игрока по прямой.
      Использовал функцию 
       
      SetVelocity(this, Vector(1, 0.1, 0)); где this это сам объект (extended class house)
      но вектор движения задается по кордам карты x, y, z
       
  • Our picks

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