RedLink

Реальная дата на сервере 1.0.6.2 + InfiSTAR

Вопрос

 

Всем привет.

Возник один вопрос, который пока не могу догнать как решить.

Суть следующая. В последней версии Инфистара есть код, который выводит логи в отдельную папку

Скрытый текст
if(_armalog)then{
	diag_log "<infiSTAR.de> infiSTAR dll loaded successfully";
	diag_log format["<infiSTAR.de> %1",[_response, 1] call fn_select_string_rest];
	diag_log "<infiSTAR.de> Loading infiSTAR code..";

	infiSTAR_LogFolderName = "!InfiSTAR_Logs\";
	FN_CALL_LOG_DLL = {
		private ["_filename","_logentry"];
		_filename = _this select 0;
		_logentry = _this select 1;
		"armalog" callExtension format["2%1%2|%3", infiSTAR_LogFolderName, _filename, _logentry];
	};

 

Путем нехитрых манипуляций добавляем ему вывод лог в отдельную папку с датой (ибо надоел тот кошмар, что там за 5 дней скапливается)

Скрытый текст
if(_armalog)then{
	private ["_d1","_d2","_d3","_d4"];
	_d1 = date select 0;
	_d2 = date select 1;
	_d3 = date select 2;
	_d4 = format["%1-%2-%3",_d1,_d2,_d3];
	
	diag_log "<infiSTAR.de> infiSTAR dll loaded successfully";
	diag_log format["<infiSTAR.de> %1",[_response, 1] call fn_select_string_rest];
	diag_log "<infiSTAR.de> Loading infiSTAR code..";

	infiSTAR_LogFolderName = format["!InfiSTAR_Logs\%1\",_d4];
	FN_CALL_LOG_DLL = {
		private ["_filename","_logentry"];
		_filename = _this select 0;
		_logentry = _this select 1;
		"armalog" callExtension format["2%1%2|%3", infiSTAR_LogFolderName, _filename, _logentry];
	};

 

А вот теперь сам вопрос.

Если переменная dayz_ForcefullmoonNights = true;

то создается папка с датой, которая указана в server_monitor.sqf - т.е. 2012,8,2 - что в принципе логично.

А вот если dayz_ForcefullmoonNights = false; - то создается папка с датой, которая указана в mission.sqf (в моем случае это 2008,10,1. Хотя по логике должна присваиваться реальная дата, которая берется из того-же server_monitor при проверке на dayz_ForcefullmoonNights, т.к. в логе сервера мы видим, что TIME SYNC текущая дата сервера.

Почему так происходит и как это можно поправить?

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

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


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

5 ответов на этот вопрос

Забронировать это рекламное место


RedLink Идеи? А кому охота вчитываться в код?)

В 27.01.2019 в 03:04, RedLink сказал:

.к. в логе сервера мы видим, что TIME SYNC текущая дата сервера.

Мы ничего не видим. Логов то нет у нас.

 

А так -

Ты бы для начала выкинул весь код. И в 1-2 строки накидал бы банальное получение даты. Плюс логи бы приложил.

Ото вывалил код с инфистара какой то...

И вообще - что значит реальное время сервера? - В арме нет функции возвращающей реальное время серверной машины. Есть время от старта миссии, и дата, внутри которой лежит время из mission.sqf, и часики со старта миссии тик-так.

И при чем тут сервер монитор, если дата, она и в африке дата - ты и тянешь ее из переменной data которая основана на см. выше.

А если реальное время надо, и реальную дату - через dll получай. хоть sql хоть ini... На форуме было.

И логи надо подчищать - создай батник который будет удалять логи старше Х суток, и копировать их при старте сервера куда нить на яндекс диск.

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

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


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

подчищение логов не вариант, т.к. храню в районе месяца, а за сутки там порядка 10-15 файлов собирается (см. скрин)

принцип такой, когда во втором коде идет запрос на год-месяц-день, то автоматом создается папка с этой датой, в которую уже сохраняются файлы с логом за день. логирования времени - diag_log ["TIME SYNC: Local Time set to:", _date, "Fullmoon:",dayz_ForcefullmoonNights,"Date given by HiveExt.dll:",_result select 1];

онаже в сервернуй rpt и показывает установленную дату согласно 

setDate _date;
dayzSetDate = _date;
publicVariable "dayzSetDate";

из server_monitor.sqf

фишка в том, что если в ините переменной dayz_ForcefullmoonNights сказать true, то при первом заходе игрока, второй код в первом сообщении создает папку с датой, которая указана в том же - server_monitor.sqf, а именно 

if (dayz_ForcefullmoonNights) then {_date = [2012,8,2,_hour,_minute];};

а вот есть указать переменной false, то создается папка с датой из mission.sqm и все логи на протяжении всего сеанса сервера идут именно в нее.

НО в серверном логе, уже после прогрузки сервера лог TIME SYNC показывает локальную дату сервера.

Пот я и хочу понять, почему так происходит.

По логике она должна сразу создаваться с датой сервера.

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

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


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

НО в серверном логе, уже после прогрузки сервера лог TIME SYNC показывает локальную дату сервера.

Два вопроса

1. А ДО прогрузки - дата типа верная?

2. Что значит ЛОКАЛЬНУЮ дату сервера? - Локальная это какая? И откуда она? - т.е. ты там какие то цифры приводил с 2008г. - Нынче 2019 - локальная дата серверной машины, это 2019г....

 

P.S. вывод в РПТ поставь в цикле раз в 1с даты и времени. И смотри после какого скрипта изменение происходит... Ну это если ты не соврал, и изменение ПОСЛЕ прогрузки сервера происходит(см вопрос 1)

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


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

1. судя по настройке игры, когда запускается сервер, ему присваивается дата из mission.sqm. А кот когда заходит первый игрок, т.е. начинается прогрузка сервера, то присваивается или локальная дата (которая установлена на компе) или 2012,8,2, которая установлена в server_monitor.

2. ну дата которая на компе стоит. то что я скинул, просто старый лог.

 

я прост не понимаю почему в одном и том же случае показывается разная дата (dayz_ForcefullmoonNights true/false), ведь если бы прогрузка system_monitor была бы позже инфистара, то и в случае когда стоит TRUE, дата бы все равно присваивалась 2008, т.е. из mission.sqm

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


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

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

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

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

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


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

Войти

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


Войти сейчас

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

    • Автор: Anton81
      Игроки багоюзят с помощью велосипеда , подъезжают к стене на велосипеде , потом слезают с него около стены и оказываются на чужой базе.Как можно это пофиксить?
    • Автор: Anton81
      всем привет, установил виртуальный гараж, убрал у лав25 тепловизор с помощью скрипта и после того как ставишь его в виртуальный гараж, тепловизор обратно возвращяется(( может кто знает, как решить эту проблему?
    • Автор: ZigoFrend
      Простой скрипт гаража 
      главное что бы при сносе объекта которые выступает в роле гаража техника в гараже исчезала 
    • Автор: Anton81
      Всем привет! Может кто сталкивался с такой проблемой, со столбом беда , после рестарта приходится его заново переставлять, чтоб можно было строить и еще тот кто поставил столб и добавит друга в него, друг всё равно не может строить и после смерти тоже приходится разбирать и заново собирать столб.
    • Автор: RedLink
      Всем Привет.
      Представляю вам систему логирования действий игроков и т.д. по принципу InfiSTAR.
      Для установки вам понадобятся кастомный compiles.sqf (тем кто не знает как это сделать, -> поиск по форуму).
       
      1. Открываем в серверной части файл dayz_server\init\server_functions.sqf и в самом низу вставляем:
      "SK_log" addPublicVariableEventHandler {(_this select 1) call fnc_Log;}; 2. Теперь открываем в папке с миссией файл compiles.sqf и ищем что-то в этом плане:
       
      if (!isDedicated) then { блаблабла }; и после него вставляем
      fnc_log = { private ["_fileName","_message","_dll","_dll2","_display"]; _fileName = toLower (_this select 0); _message = _this select 1; _display = if (count _this > 2) then {_this select 2} else {false}; if (!isDedicated) then { SK_Log = [_fileName,if (typeName _message == "ARRAY") then {_message} else {toArray _message},_display]; publicVariableServer "SK_Log"; } else { _message = if (typeName _message == "ARRAY") then {toString _message} else {_message}; if (_display) then {diag_log format ["[%1] %2",toUpper (_fileName),_message];}; _dll2 = format["!InfiSTAR_Logs~%1~%2",_fileName,_message]; "LogDLL" callExtension _dll2; }; }; где "!InfiSTAR_Logs" - ваша папка, куда вы хотите складировать логи.
       
      3. Открываем файл publicVariable.txt в фильтрах Battleye и в первой строке "5 !=блаблабла" в конце добавляем "!=SK_Log" (пример ниже)
      5 !"donn_heli_monitor" !"fnc_log" !=fnc_log !"redHunter" !=redHunter !"cad_pvar_s" !"PVDZE_veh_Update" !="PVDZE_veh_Update" !="PVDZE_adminevents" !="PVDZ_plr_Death" !"PVDZ_plr_Death" !="PVDZE_atp" !"PVDZE_atp" !"PVDZ_plr_LoginRecord" !="PVDZ_plr_LoginRecord" !"PVDZE_log_lockUnlock" !=PVDZE_log_lockUnlock !"redHunter" !=redHunter !"redDiagLog" !=redDiagLog !="PVDZE_atp" !=(remExField|remExFP) !=(PVCDZ_obj_GutBody|drn_AskServerDynamicWeatherEventArgs|BIS_effects_gepv|achievement|dayzFlies) !=PVDZ_(drg_(RaDrag|RaLW|RLact)|getTickTime|hlt_Bleed|obj_(Delete|Publish|RoadFlare|Destroy|Fire)|veh_Save|veh_SF) !=PVDZ_(plr_(Death|Login[12]|LoginRecord|Save|SwitchMove)|Server(_Simulation|StoreVar)|sec_atp) !=PVDZ_(playerMedicalSync|object_replace|groupInvite) !=PVDZ_(send(|Unconscious)) !=PVDZ_Server_(buildLock|LogIt|UpdateGroup) !=PVDZ_Server_process(Code|SetAccessCode) !=PVDZ_objgather_(Delete|Knockdown) !=PVDZE_(obj_(Delete|Publish|Swap|Trade)|fullobj_Publish|maintainArea|veh_(Lock|Publish2|Upgrade)|handleSafeGear|plr_(DeathB|FriendRQ|TradeMenu)) !=PVAH_AdminReq !=PVAH_WriteLogReq !=PVAHR_0_[a-zA-Z0-9]{20,40} !"PVAHR_" !="PVAH_AdminReq" !="PVAH_WriteLogReq" !=PVAHR_0_[a-zA-Z0-9]{20,40} !="PVDZE_(query|store|spawn)Vehicle" !="PVDZE_PingSend" !="PVDZE_veh_Init" !"SK_Log" !=SK_Log  
      4. А теперь самое главное.
      Пример вывода лога в отдельный файл. Возьмем для примера файл смерти игрока от тех или иных причин.
      Открываем в серверной части файл server_playerDied.sqf и ищем там строку
       
      diag_log format["%1 (%2) %3 @%4 %5",_playerName,_playerID,_message,mapGridPosition _pos,_pos]; после нее вставляем
      ["DEATHS",format ["%1 (%2) %3 @%4 %5",_playerName,_playerID,_message,mapGridPosition _pos,_pos],true] call fnc_log; Таким образом в указанной в папке в п. 2 создатся файл deaths_блаблабла.txt, в котором будет отображен лог о смерти игрока по тем или иным причинам.
       
      Формат записи лога выглядит следующим образом:
      _message = format ["Что хочу то и пишу и хочу видеть значение %1",_значение%1]; ["ИМЯ_ФАЙЛА_ЛОГА",_message,true] call fnc_log; или напрямую
      ["Имя_файла_лога",format ["тут будет то что в значении %1",_значение%1],true] call fnc_log;  
      Представляю варианты 4-х DLL, которые работают для этой системы (качаете любую из них и переименовываете в LogDLL.dll). Эту DLL необходимо закинуть в папку с игрой (например в C:\Games\Arma 2 Operation Arrowhead).
      LogDLL.dll создает в папке с логами отдельную папку по названию лога.
      LogDLL_-_dd-MM-yyyy и иные ее интерпретации - создает в папке с логами отдельную папку с датой, в которой хранятся все логи за эту дату.
       
      Если есть вопросы, задавайте.
       
      Оригинал данного скрипта и ссылки на разработчика ниже.
      Копирайта

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