Перейти к содержимому

DustBlue IPB Skin by CodeGame Networks

Кик всех игроков, выключение сервера, отображение реального времени до рестарта


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 7

#1 NoNameUltima

NoNameUltima

    Администратор

  • Администраторы
  • 191 сообщений
  • ГородСанкт-Петербург

Отправлено 22 мая 2015 - 14:13

Скрипт подключается на сервере, там же где боты, или в mission.sqf(технически можно в любом месте подключить).
*DLL прикрепил внизу темы.

Private ["_restarts_hours", "_restarts_times", "_kick_times", "_debug_time", "_Real_Hours", "_Real_Minutes", "_Real_Seconds", "_time", "_minutesToRestart", "_hoursToRestart", "_msg", "_i"]; 
// Часы рестартов, от меньшего к большему, для отображения реального времени до рестарта в мониторе отладки
_restarts_hours  = [2, 6, 10, 14, 18, 22];
// Точное время рестартов, для выключения сервера
_restarts_times  = ["02:00:00", "06:00:00", "10:00:00", "14:00:00", "18:00:00", "22:00:00"];
// Время в которое необходимо кикнуть игроков с сервера
_kick_times   = ["01:59:45", "05:59:45", "09:59:45", "13:59:45", "17:59:45", "21:59:45"];
_debug_time   = "";
while {true} do
{
  _time   = toArray ("ultima_kickall" callExtension "21");
  _Real_Hours  = parseNumber(toString[(_time select 0)] + toString[(_time select 1)]);
  _Real_Minutes = parseNumber(toString[(_time select 3)] + toString[(_time select 4)]);
  _Real_Seconds = parseNumber(toString[(_time select 6)] + toString[(_time select 7)]);
  if (_Real_Hours < 10) then
   {_time = "0" + str(_Real_Hours);}
  else
   {_time = str(_Real_Hours);};
  if (_Real_Minutes < 10) then
   {_time = _time + ":0" + str(_Real_Minutes);}
  else
   {_time = _time + ":" + str(_Real_Minutes);};
  if (_debug_time != _time) then
   {
		_debug_time = _time;
		if (_Real_Minutes != 0) then
		 {_minutesToRestart = 60 - _Real_Minutes;}
		else
		 {_minutesToRestart = 0;};
		if (_minutesToRestart < 10) then
		 {_minutesToRestart = "0" + str(_minutesToRestart)}
		else
		 {_minutesToRestart = str(_minutesToRestart)};
		_hoursToRestart = -1;
		{
		 if (_x > _Real_Hours) exitWith
		  {_hoursToRestart = (_x - _Real_Hours - 1);};
		} forEach _restarts_hours;
		if (_hoursToRestart == -1) then
		 {_hoursToRestart = (_restarts_hours select 0) + 23 - _Real_Hours;};
		if (_Real_Minutes == 0) then
		 {_hoursToRestart = _hoursToRestart + 1};
		_hoursToRestart = "0" + str(_hoursToRestart);
		{
		 if ( (isPlayer _x) && (alive _x) ) then
		  {_x setVariable ["Ultima_Time", (_hoursToRestart + ":" + _minutesToRestart), true];};
		} forEach playableUnits;
   };
  if (_Real_Seconds < 10) then
   {_time = _time + ":0" + str(_Real_Seconds);}
  else
   {_time = _time + ":" + str(_Real_Seconds);};
  {
   if (_time == _x) exitWith
		{
		 // 0|IP|Port|RCon пароль|0|0
		 "ultima_kickall" callExtension "2|127.0.0.1|2302|RConPass|0|0";
		};
  } forEach _restarts_times;
  {
   if (_time == _x) exitWith
		{
		 // 0|IP|Port|RCon пароль|1|Произвольная строка
		 "ultima_kickall" callExtension "0|127.0.0.1|2302|RConPass|1|RESTART РЕСТАРТ";
		};
  } forEach _kick_times;
  uiSleep 0.5;
};

В миссии, и в Ваших скриптах(например в дебаг мониторе инфистара) можно получать так:
_time_to_restart = player getVariable ['Ultima_Time', '00:00'];

Пример для миссии, в котором каждые 10 секунд в чат выводится время:
Private ['_time_to_restart'];
while {true} do
   {
		  _time_to_restart = player getVariable ['Ultima_Time', '00:00'];
		  systemChat _time_to_restart;
		  sleep 10;
   };

Прикрепленные файлы



#2 OMOH-71

OMOH-71

    Пользователь

  • Проверенные
  • PipPip
  • 15 сообщений

Отправлено 11 июня 2015 - 08:22

Штука ,конечно хорошая.....но если игрок был в это время в воздухе,да еще в каком то дорогущем вертолете,вони потом не оберешься)))

#3 NoNameUltima

NoNameUltima

    Администратор

  • Администраторы
  • 191 сообщений
  • ГородСанкт-Петербург

Отправлено 12 июня 2015 - 03:32

Просмотр сообщенияOMOH-71 (11 июня 2015 - 08:22) писал:

Штука ,конечно хорошая.....но если игрок был в это время в воздухе,да еще в каком то дорогущем вертолете,вони потом не оберешься)))
А если он на рестарте был бы в воздухе и  вертолете?
Разницы ноль.
Этот скрипт защищает от сидящих дюперов.
На игроков он ни как не влияет. А то что выходить надо до рестарта это уже всем давно ясно.

#4 OMOH-71

OMOH-71

    Пользователь

  • Проверенные
  • PipPip
  • 15 сообщений

Отправлено 14 июня 2015 - 12:33

Просмотр сообщенияNoNameUltima (12 июня 2015 - 03:32) писал:

А если он на рестарте был бы в воздухе и  вертолете?
Разницы ноль.
Этот скрипт защищает от сидящих дюперов.
На игроков он ни как не влияет. А то что выходить надо до рестарта это уже всем давно ясно.

Ну находятся и такие ,бесбашенные))) Ты это понимаешь,я это понимаю,....но многие игроки,как дети(в принципе,так оно и есть в большинстве своем) Вот эффективная защита от дюпа....где бы ее взять? Все те ,которые не разрешают выход возле хранилищ,и остальные-не совсем действенные,к сожалению.

#5 NoNameUltima

NoNameUltima

    Администратор

  • Администраторы
  • 191 сообщений
  • ГородСанкт-Петербург

Отправлено 20 июня 2015 - 15:43

Просмотр сообщенияOMOH-71 (14 июня 2015 - 12:33) писал:

Ну находятся и такие ,бесбашенные))) Ты это понимаешь,я это понимаю,....но многие игроки,как дети(в принципе,так оно и есть в большинстве своем) Вот эффективная защита от дюпа....где бы ее взять? Все те ,которые не разрешают выход возле хранилищ,и остальные-не совсем действенные,к сожалению.

Хитрости и тонкости)
Все зависит от изобретательности дюпальщика, и что дюпает - сборки то разные...
У меня например коинсов нет, поэтому для них мне антидюп не нужен, а она дыряяявая))
А в остальном, в сборке присутствуют скрипты защиты. Но по понятным причинам в паблик не выкладываются.

#6 NoNameUltima

NoNameUltima

    Администратор

  • Администраторы
  • 191 сообщений
  • ГородСанкт-Петербург

Отправлено 25 апреля 2016 - 18:40

Скрипт и dll обновлены.

#7 kisling

kisling

    Новичок

  • Проверенные
  • Pip
  • 6 сообщений

Отправлено 23 июля 2016 - 04:35

Подключил скрипт в server_functions.sqf в конце , execVM "\z\addons\dayz_server\init\time_to_restart.sqf";
ultima_kickall.dll положил в папку с игрой.
в инфистаре добавил:
private['_time_to_restart','_stime','_hours','_minutes','_minutes2','_upTimeLeft'];
	  _time_to_restart = player getVariable ['Ultima_Time', '00:00'];
	  _timertext = 'До рестарта: ';
	  if(!isNil 'infiSTAR_UPTIMER')then
	  {
	   _timertext = 'Restart in: ';
	   _stime = 0;
	   if(serverTime > 36000)then{_stime = time;}else{_stime = serverTime;};
	   _upTimeLeft = infiSTAR_UPTIMER - _stime;
	   if(_upTimeLeft > 0)then
	   {
		_hours = (_upTimeLeft/60/60);
		_hours = toArray (str _hours);
		_hours resize 1;
		_hours = toString _hours;
		_hours = compile _hours;
		_hours = call  _hours;
		_minutes = floor(_upTimeLeft/60);
		_minutes2 = ((_minutes - (_hours*60)) min 60) max 0;if(_minutes2 < 10)then{_minutes2 = format['0%1',_minutes2];};
	   }
	   else
	   {
		_hours = '0';
		_minutes2 = '00';
	   };
	  };
	 
	 
	  hintSilent parseText format[""
	  <t size='1' font='Bitstream' align='Center' >[%1]</t><br/>
	  <t size='0.8' font='Bitstream' align='Center' >Игроки Online: %12</t><br/>
	  <img size='4.75' image='%4'/><br/>
	  <t size='1' font='Bitstream' align='left' color='#CC0000'>Кровь: </t><t size='1' font='Bitstream' align='right'>%2</t><br/>
	  <t size='1' font='Bitstream' align='left' color='#0066CC'>Человечность: </t><t size='1' font='Bitstream' align='right'>%3</t><br/>
	  <br/>
	  <t size='1' font='Bitstream' align='left' color='#FFBF00'>Убитых зомби: </t><t size='1' font='Bitstream' align='right'>%9</t><br/>
	  <t size='1' font='Bitstream' align='left' color='#FFBF00'>Убитых выживших: </t><t size='1' font='Bitstream' align='right'>%10</t><br/>
	  <t size='1' font='Bitstream' align='left' color='#FFBF00'>Убитых бандитов: </t><t size='1' font='Bitstream' align='right'>%11</t><br/>
	  <br/>
	  <t size='1' font='Bitstream' align='left' color='#FFBF00'>%13</t><t size='1' font='Bitstream' align='right'>%14</t><br/>
	  <t size='1' font='Bitstream' align='left' color='#FFBF00'>FPS: </t><t size='1' font='Bitstream' align='right'>%8</t><br/>
	  <t size='1' font='Bitstream' align='Center' color='#CC0000'>%7</t>
	  "",
	  _txt,
	  (r_player_blood),
	  _humanity,
	  _pic,
	  _hours,
	  _minutes2,
	  _BottomDebug,
	  (round diag_fps),
	  (player getVariable['zombieKills', 0]),
	  (player getVariable['humanKills', 0]),
	  (player getVariable['banditKills', 0]),
	  _pOn,
	  _timertext,
	  _time_to_restart
	  ];
	  uiSleep 1;

но время не идет,где моя ошибка? пожалуйста подскажите,второй день уже голову ломаю :)

#8 NoNameUltima

NoNameUltima

    Администратор

  • Администраторы
  • 191 сообщений
  • ГородСанкт-Петербург

Отправлено 24 июля 2016 - 09:58

Смотри серверный РПТ, и диагностику добавь на сервер, что у тебя время получает скрипт.




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных