Jump to content


Photo

Синхронизация даты и времени в мультиплеере


  • Please log in to reply
35 replies to this topic

#1 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 10 April 2014 - 17:32

// Устанавливаем дату и время на клиентах
// Код вызывается с клиентов, на сервере должно быть установлено дата и время, перед вызовом

[[[player],{
   [[[date],{setDate (_this select 0);}],"BIS_fnc_spawn",owner (_this select 0),false] spawn BIS_fnc_MP;
}],"BIS_fnc_spawn",false,false] spawn BIS_fnc_MP;

  • 0

#2 OFFLINE   TankiSD

TankiSD

    Ст. Прапорщик

  • Пользователи
  • 680 posts

Posted 01 June 2015 - 13:38

это получается, что у одних может быть ночь, а у других день?

или зачем это нужно? 


  • 0

#3 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 posts
  • Откуда:Кострома

Posted 01 June 2015 - 13:57

TankiSD,  если менять во время игры - да, особенно у JIP. Для наглядности создайте сервер с Зевсом, поиграйте с погодой и эффектами и перезайдите, а иногда даже сразу у других игроков не будет ваших изменений (один раз ждали 10 минут когда у нас появится дождик выставленный в Зевсе)


  • 0

#4 OFFLINE   TankiSD

TankiSD

    Ст. Прапорщик

  • Пользователи
  • 680 posts

Posted 01 June 2015 - 14:34

ужас)))

 

А если не менять?

т.е. какие установил я ещё в редакторе параметры. 

То будет ли у JIP меняться погода с учётом пройденного времени игры на серваке?


  • 0

#5 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 posts
  • Откуда:Кострома

Posted 01 June 2015 - 15:07

TankiSD, Первые 300 сек с момента старта миссии :)
  • 0

#6 OFFLINE   TankiSD

TankiSD

    Ст. Прапорщик

  • Пользователи
  • 680 posts

Posted 01 June 2015 - 15:22

это уже идиотизм если честно( 


  • 0

#7 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 02 June 2015 - 19:00

это получается, что у одних может быть ночь, а у других день?

или зачем это нужно? 

Это нужно для геймплея в котором на сервере при старте устанавливается, как вариант, локальное время сервера, то есть время того региона где размещена физически серверная машина. Отличное от прописанных даты и времени в миссии.

 

И при таком раскладе, клиентам при подключении к игре нужно дать об этом знать.

 

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


Edited by SteelRat, 02 June 2015 - 19:04.

  • 0

#8 OFFLINE   Ave_Ursus

Ave_Ursus

    Мл.сержант

  • Пользователи
  • 125 posts
  • Откуда:spb
  • Отряд:ex AS

Posted 03 June 2015 - 09:47

Только что доделал общую для всех игроков на сервере погоду и время. У меня вот так выглядит:

в init.sqf

Привожу куски отвечающие за туман и время дабы не загромождать

//Смена даты и времени
"var_changeTime" addPublicVariableEventHandler {setDate var_changeTime};
//Туман
"var_changeFog" addPublicVariableEventHandler {
_array = _this select 1;
_time = _array select 0;
_fog = _array select 1;
_time setFog _fog
};

Дальше любым способом вызываем вот такой скрипт:

Для смены даты и времени
setDate [1986, 2, 25, 1, 0];
var_changeTime = [1986, 2, 25, 1, 0];
publicVariable "var_changeTime";


Для смены погоды
5 setFog 1;
var_changeFog = [5,1];
publicVariable "var_changeFog";

В скриптах команда дублируется т.к. у того кто инициирует смену параметров окружения они не отрабатывают

P/s спасибо Блендеру и КиллЗоне Киду, без них у меня бы ничего не получилось.

 

Edited by Ave_Ursus, 03 June 2015 - 09:49.

  • 0

#9 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 posts
  • Откуда:Кострома

Posted 03 June 2015 - 12:08

Ребят я вас обрадую :D

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

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


  • 0

#10 OFFLINE   Ave_Ursus

Ave_Ursus

    Мл.сержант

  • Пользователи
  • 125 posts
  • Откуда:spb
  • Отряд:ex AS

Posted 03 June 2015 - 15:10

Теперь это комикс...

risovach.ru.jpg


  • 0

#11 OFFLINE   ruPal

ruPal

    Мл. лейтенант

  • HMG-RO
  • 914 posts

Posted 03 June 2015 - 16:43

В ACE3 есть модуль синхронизации погоды.


  • 0

#12 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 03 June 2015 - 18:41

Ребят я вас обрадую :D

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

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

/*

	Description:
	Instantly set date and share it across network.

	Parameter(s):
		0:
			ARRAY - date in format [Y,M,D,H,M]
			NUMBER - hours to skip
		1: BOOL - true for global execution (default: true)
		2 (Optional): BOOL - true to show a transition effect instead of immediate skip (default: false)
	Returns:
	ARRAY
*/

#define VALUEVAR	"bis_fnc_setdate_value"	// я так понимаю публичная переменная которая и вызывает на клиентах код изменяющий дату

В результате, я так думаю, имеем вот что, тело подключившееся джипом должно получить эту переменную с уже определённым в этой переменной значением. Это значит будет достаточно в мультике выполнить на серверной стороне это один раз, и больше не париться.

[date, true] call BIS_fnc_setDate;

ЗЫ

А может я и ошибаюсь)


  • 0

#13 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 03 June 2015 - 18:48

ЗЫ_2

Посмотрел в функцию, да я ошибаюсь. Подключившихся позже придётся настраивать при ините.


  • 0

#14 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 03 June 2015 - 19:05

~


Edited by SteelRat, 03 June 2015 - 21:41.

  • 0

#15 OFFLINE   armadillo

armadillo

    Ефрейтор

  • Пользователи
  • 34 posts
  • Откуда:Arma 2 Dayz

Posted 15 April 2018 - 12:15

А можно ли локально на клиенте установить например ночь, когда на сервере день? Пробовал setDate локально выполнять - не получается.
  • 0

#16 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 16 April 2018 - 17:42

согласно информации с вики, команда setData перешла в группу серверных команд, и должна исполняться на сервере.

 

Attached File  screenday_01.jpg   89.33KB   0 downloads


  • 0

#17 OFFLINE   armadillo

armadillo

    Ефрейтор

  • Пользователи
  • 34 posts
  • Откуда:Arma 2 Dayz

Posted 24 November 2018 - 00:53

В связи с этим и спрашивал собственно). как теперь это дело рассинхронить? Чтоб на конкретном клиенте установить время отличное от того что задается сервером.


  • 0

#18 OFFLINE   nIkRon

nIkRon

    Сержант

  • Пользователи
  • 195 posts
  • Откуда:Донецк

Posted 24 November 2018 - 01:12

armadillo,На данный момент похоже что никак, skipTime тоже будет возвращать через N секунд к серверному времени. 


  • 0

#19 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 posts
  • Откуда:Кострома

Posted 24 November 2018 - 02:50

armadillo, каждый кадр отслеживать изменение даты и, если оно резко отличается от нужной, выполнять setDate на нужное время :) правда фризы обсеспечены

Edited by vlad333000, 24 November 2018 - 02:54.

  • 0

#20 OFFLINE   nIkRon

nIkRon

    Сержант

  • Пользователи
  • 195 posts
  • Откуда:Донецк

Posted 24 November 2018 - 03:33

vlad333000,Это будет очень очень не очень, фризы будут дикие. Незнаю как setDate, но skipTime синхронизируется каждые 5 сек, и когда ты используешь эту команду, у тебя игра замирает примерно на секунду, и в итоге это становиться неиграбельным. Это еще без учета просадки из за проверки каждого кадра...


Edited by nIkRon, 24 November 2018 - 04:03.

  • 0




Яндекс.Метрика