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

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

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

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

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

Передача информации от сервера на клиент

Какие есть способы передачи информации с сервера на клиент для потомков класса ItemBase не считая RegisterNetSyncVar?

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


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

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

  • 0

RPC и OnPRC надо бы думать, разумеется, клиент-серверным модом

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


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

RPC и OnPRC надо бы думать, разумеется, клиент-серверным модом

Проблема в том что я не могу отправить rpc с сервера на клиент предмету, потом что у него нет идентити.

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


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

Проблема в том что я не могу отправить rpc с сервера на клиент предмету, потом что у него нет идентити.

так а почему его нету то?

override void OnRPC(PlayerIdentity sender, int rpc_type,ParamsReadContext  ctx) 

в 4 World ItemBase.c базовая функция, все работает. разумеется в клиент-серверном виде PlayerIdentify всегда будет. А в оффлайне оно и не требуется, в оффлайне проще сразу саму функцию в нужном месте выполнять, т.к. там нет ограничений на клиент и сервер, там все одно

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
GetGame().RPCSingleParam( this, OPGRPC.RPC_SEND_CD_SET_CODE, new Param1<string>(m_Code), true);

вот так я отправляю пакет.

override void OnRPC(PlayerIdentity sender, int rpc_type,ParamsReadContext  ctx) 
{
    super.OnRPC(sender, rpc_type,ctx);

    if (GetGame().IsServer())
        CDhandleServerRPCs(sender, rpc_type, ctx);
    else
        CDhandleClientRPCs(sender, rpc_type, ctx);

}

так принимаю и ни при каких условиях пакет не залетает в клиентский обработчик, который мне и нужен.

А через RegisterNetSycnVariable я не могу синхронизировать данные, потому что мне нужно отправлять строку и массив на клиент.

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

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


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

в 4 World ItemBase.c базовая функция, все работает. разумеется в клиент-серверном виде PlayerIdentify всегда будет.

И при чем тут плееридентити если я от объекта (не игрока) отправляю rpc.

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


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

И при чем тут плееридентити если я от объекта (не игрока) отправляю rpc.

а при том, что она есть в функции, которая в классе базовом поумолчанию обозначена авторами игры

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

 Ну и как бы наверно логично, не предмету же действия выполнять, а игроку, и комманда соответственно игроку отсылается.
PlayerIdentity - идентификатор игрока на сервере
PlayerBase - персонаж на сервере (может быть мертв, может быть не привязан к игроку и не управляться им, в таком случае PlayerIdentity нету)

Касаемо того что выше:

Отправка игроку от сервера, проверялось в классе PlayerBase

private PlayerBase	player	=	player;	
if(player)
{
	private PlayerIdentity	v_PlayerIdentity	=	player.GetIdentity();	
	if (v_PlayerIdentity)
	{
		private string Name_P = v_PlayerIdentity.GetName();
		private Param1<string> v_Param = new Param1<rstring>(Name_P);		
		GetGame().RPCSingleParam(player, ID_SETTINGS_MOD, v_Param, true, v_PlayerIdentity);
	}
}

Прием игрой клиента:

override void OnRPC(PlayerIdentity sender, int rpc_type, ParamsReadContext ctx)
{
	super.OnRPC(sender, rpc_type, ctx);

	if (rpc_type == ID_SETTINGS_MOD) // сверка id пакета сообщения
	{
		Param1<string> v_ctx;
		ctx.Read(v_ctx);
		
		string ReadedName = v_ctx.param1;			
		Get_CFG_TimeDestruction().WriteLog("[ClientSide]: readed: '" + ReadedName + "'"); 
		
	}
}

 

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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

Поддержка