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

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

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

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

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

Получение реального времени + реальное время до рестарта.

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

Как сделать что бы с рестартом была вероятность в процентном соотношении включения ночи или же дня после рестарта?

Попробуйте сделать через  

 

BIS_fnc_selectRandom
 

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


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

 

Попробуйте сделать через  

 

BIS_fnc_selectRandom
 

и че? че ты мелишь, какой нафиг BIS_fnc_selectRandom? Что он тебе даст?

 

Как сделать что бы с рестартом была вероятность в процентном соотношении включения ночи или же дня после рестарта?

set hour=%time:~0,2%
if "%hour%" == " 0" goto do_night
if "%hour%" == " 1" goto do_night
if "%hour%" == " 2" goto do_night
if "%hour%" == " 3" goto do_night
 
if "%hour%" == " 8" goto do_night
if "%hour%" == " 9" goto do_night
if "%hour%" == "10" goto do_night
if "%hour%" == "11" goto do_night
 
if "%hour%" == "16" goto do_night
if "%hour%" == "17" goto do_night
if "%hour%" == "18" goto do_night
if "%hour%" == "19" goto do_night
 
del "C:\Arma2server\instance_11_Chernarus\HiveExt.ini"
copy "C:\arma2server\instance_11_Chernarus\HiveExt_day.ini" "C:\arma2server\instance_11_Chernarus\HiveExt.ini"
 
goto day_night_ok
 
:do_night
 
del "C:\arma2server\instance_11_Chernarus\HiveExt.ini"
copy "C:\arma2server\instance_11_Chernarus\HiveExt_night.ini" "C:\arma2server\instance_11_Chernarus\HiveExt.ini"
 
:day_night_ok
 
timeout 2
start "arma2" /high "C:\arma2server\arma2oaserver.exe" -port=2302 -noPause -nosound "-config=instance_11_Chernarus\config.cfg" "-cfg=instance_11_Chernarus\basic.cfg" "-profiles=instance_11_Chernarus" -name=instance_11_Chernarus "-mod=@DayZ_Epoch;@DayZ_Epoch_Server;"

Эт, кароч батник, с его помощью ты добьешься успеха!)

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


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

и че? че ты мелишь, какой нафиг BIS_fnc_selectRandom? Что он тебе даст?

 

set hour=%time:~0,2%
if "%hour%" == " 0" goto do_night
if "%hour%" == " 1" goto do_night
if "%hour%" == " 2" goto do_night
if "%hour%" == " 3" goto do_night
 
if "%hour%" == " 8" goto do_night
if "%hour%" == " 9" goto do_night
if "%hour%" == "10" goto do_night
if "%hour%" == "11" goto do_night
 
if "%hour%" == "16" goto do_night
if "%hour%" == "17" goto do_night
if "%hour%" == "18" goto do_night
if "%hour%" == "19" goto do_night
 
del "C:\Arma2server\instance_11_Chernarus\HiveExt.ini"
copy "C:\arma2server\instance_11_Chernarus\HiveExt_day.ini" "C:\arma2server\instance_11_Chernarus\HiveExt.ini"
 
goto day_night_ok
 
:do_night
 
del "C:\arma2server\instance_11_Chernarus\HiveExt.ini"
copy "C:\arma2server\instance_11_Chernarus\HiveExt_night.ini" "C:\arma2server\instance_11_Chernarus\HiveExt.ini"
 
:day_night_ok
 
timeout 2
start "arma2" /high "C:\arma2server\arma2oaserver.exe" -port=2302 -noPause -nosound "-config=instance_11_Chernarus\config.cfg" "-cfg=instance_11_Chernarus\basic.cfg" "-profiles=instance_11_Chernarus" -name=instance_11_Chernarus "-mod=@DayZ_Epoch;@DayZ_Epoch_Server;"

Эт, кароч батник, с его помощью ты добьешься успеха!)

 

А че, через скрипт никак чтоль?

 

 

Задать точное время - 10 утра.

_date = date;
_date set [3, 10];

 

Задать время случайно

_date = date;
_date set [3, floor(random(23))];

 

 

Задать время шансово (в примере: 60% - 14 дня, или 40% - 2 ночи).

_day = 60; // Вероятность дня - 60% => Ночь - 40%
_hour = floor(random(100));
if (_hour < _day) then
 {_hour = 14;}
else
 {_hour = 2;};
_date = date;
_date set [3, _hour];

 

Запускать на сервере.

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

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


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

А че, через скрипт никак чтоль?

 

 

Задать точное время - 10 утра.

_date = date;
_date set [3, 10];

 

Задать время случайно

_date = date;
_date set [3, floor(random(23)];

 

 

Задать время шансово (в примере: 60% - 14 дня, или 40% - 2 ночи).

_day = 60; // Вероятность дня - 60% => Ночь - 40%
_hour = floor(random(100));
if (_hour < _day) then
 {_hour = 14;}
else
 {_hour = 2;};
_date = date;
_date set [3, _hour];

 

Запускать на сервере.

мм, ну так тоже неплохо, но мне батниками удобнее

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


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

 

Private ["_restarts", "_date", "_hour", "_minute", "_minuteToRestart", "_hourToRestart", "_renew", "_time"];
_restarts    =    [2, 6, 10, 14, 18, 22];    // Часы рестартов, от меньшего к большему!
_renew        =    61;
while {true} do
    {
        _date    =    "ultima_kickall" callExtension "1";
        _date    =    toArray _date;
        _minute  =    parseNumber(toString[(_date select 3)] + toString[(_date select 4)]);
        if (_renew != _minute) then
            {
                if (_minute    !=    0) then
                    {_minuteToRestart    =    60 - _minute;}
                else
                    {_minuteToRestart    =    0;};
                if (_minuteToRestart < 10) then
                    {_minuteToRestart    =    "0" + str(_minuteToRestart)}
                else
                    {_minuteToRestart    =    str(_minuteToRestart)};
                _renew           =    _minute;
                _hour            =    parseNumber(toString[(_date select 0)] + toString[(_date select 1)]);
                _hourToRestart   =    -1;
                {
                    if (_x > _hour) exitWith
                        {_hourToRestart    =    (_x - _hour - 1);};
                } forEach _restarts;
                if (_hourToRestart == -1) then
                    {_hourToRestart    =    (_restarts select 0) + 23 - _hour;};
                if (_minute == 0) then
                    {_hourToRestart    =    _hourToRestart + 1};
                _hourToRestart    =    "0" + str(_hourToRestart);
                _time    =    (_hourToRestart + ":" + _minuteToRestart);
                {
                    _x setVariable ["Ultima_Time", _time, true];
                } forEach playableUnits;
            };
        uiSleep 30;
    };
 

подключать -

 

execVM "имя_скрипта.sqf";

В миссии у игрока(или в дебаг мониторе) получать значение времени так:

 

_time_to_restart = player getVariable ["Ultima_Time", "00:00"];

 

в переменной _time_to_restart будет реальное время до рестарта.

 

P.S. ну и не забываем скачать саму dll

ссылка дана выше.

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

 

Error in expression <inute  =    parseNumber(toString[(_date select 3)] + toString[(_date select 4)])>
  Error position: <select 3)] + toString[(_date select 4)])>
  Error Zero divisor
File mpmissions\__CUR_MP.Chernarus\custom\real_time_restart.sqf, line 8
 

Private ["_restarts", "_date", "_hour", "_minute", "_minuteToRestart", "_hourToRestart", "_renew", "_time"];

_restarts = [3,6,9,12,15,18,21,24]; // „асы рестартов, от меньшего к большему!

_renew = 61;

while {true} do

{

_date = "ultima_kickall" callExtension "1";

_date = toArray _date;

_minute = parseNumber(toString[(_date select 3)] + toString[(_date select 4)]);

if (_renew != _minute) then

{

if (_minute != 0) then

{_minuteToRestart = 60 - _minute;}

else

{_minuteToRestart = 0;};

if (_minuteToRestart < 10) then

{_minuteToRestart = "0" + str(_minuteToRestart)}

else

{_minuteToRestart = str(_minuteToRestart)};

_renew = _minute;

_hour = parseNumber(toString[(_date select 0)] + toString[(_date select 1)]);

_hourToRestart = -1;

{

if (_x > _hour) exitWith

{_hourToRestart = (_x - _hour - 1);};

} forEach _restarts;

if (_hourToRestart == -1) then

{_hourToRestart = (_restarts select 0) + 23 - _hour;};

if (_minute == 0) then

{_hourToRestart = _hourToRestart + 1};

_hourToRestart = "0" + str(_hourToRestart);

_time = (_hourToRestart + ":" + _minuteToRestart);

{

_x setVariable ["Ultima_Time", _time, true];

} forEach playableUnits;

};

uiSleep 30;

};

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

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


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

 

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

 

Error in expression <inute  =    parseNumber(toString[(_date select 3)] + toString[(_date select 4)])>
  Error position: <select 3)] + toString[(_date select 4)])>
  Error Zero divisor
File mpmissions\__CUR_MP.Chernarus\custom\real_time_restart.sqf, line 8

Если все работает, то и ошибки быть не должно, ты уж определись - работает или нет.

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


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

Если все работает, то и ошибки быть не должно, ты уж определись - работает или нет.

Работает и время до рестарта показывает и автокик работает,а вот ошибка спамит в клиентский рапорт безбожно:

"DayZ Epoch: PRELOAD Functions\init [[L 1-1-A:1 REMOTE],any]"
"DayZ Epoch: MPframework inited"
"Loading Server Options"
"DEBUG: loadscreen guard started."
"Loading Server Monitor & Server Executions!"
"Loading Dedicated Executions!"
"Finalizing Server Startup, Loading BIS_Effects"
"Res3tting B!S effects..."
Error in expression <ing[(_date select 0)] + toString[(_date select 1)]);
_hourToRestart   =    -1;
{>
  Error position: <select 1)]);
_hourToRestart   =    -1;
{>
  Error Zero divisor
File mpmissions\__CUR_MP.Chernarus\custom\real_time_restart.sqf, line 20
Error in expression <inute  =    parseNumber(toString[(_date select 3)] + toString[(_date select 4)])>
  Error position: <select 3)] + toString[(_date select 4)])>
  Error Zero divisor
File mpmissions\__CUR_MP.Chernarus\custom\real_time_restart.sqf, line 8
"In scopled private"
Nickname|sanek327
"PLOGIN: Login loop completed!"
"infiSTAR.de - randvar26 created (5.649)"
"infiSTAR.de - randvar1 started (5.749)"
"infiSTAR.de - randvar1 created randvar27a (5.863)"
"infiSTAR.de - 24-09-2015-v1427 - Successfully Loaded on Client ID2767 (5.863)"
"infiSTAR.de - randvar1 created randvar27 (5.863)"
"In scopled private"
Error in expression <inute  =    parseNumber(toString[(_date select 3)] + toString[(_date select 4)])>
  Error position: <select 3)] + toString[(_date select 4)])>
  Error Zero divisor
File mpmissions\__CUR_MP.Chernarus\custom\real_time_restart.sqf, line 8
Изменено пользователем sanek327 (история изменений)

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


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

Читать надо не через строку, а как написано.

Скрипт СЕРВЕРНЫЙ.

А у тебя ошибка - "File mpmissions\__CUR_MP.Chernarus\custom\real_time_restart.sqf, line 20"

Дошло?

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


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

Читать надо не через строку, а как написано.

Скрипт СЕРВЕРНЫЙ.

А у тебя ошибка - "File mpmissions\__CUR_MP.Chernarus\custom\real_time_restart.sqf, line 20"

Дошло?

Дошло,спасибо.

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


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

Так и не понял как вставить реальное время в дебаг монитор, выдает ошибку Error in expression <_time_to_restart = player getVariable ["Ultima_Time", "00:00"]; вот кусок кода в который я попытался вставить переменную

 

if (!isNil 'infiSTAR_UPTIMER') then
            {
                _time_to_restart = player getVariable ["Ultima_Time", "00:00"];
                _stime =         0;
                if (serverTime > 36000)then{_stime = time;}else{_stime = serverTime;};
                _upTimeLeft =     infiSTAR_UPTIMER - _stime;
                _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];};
                _mytime = format['Рестарт через: (_time_to_restart)'];
                ['<t size=''0.35'' align=''right'' font=''TahomaB''>'+_mytime+'</t>',safezoneX*-1,0.98 * safezoneH + safezoneY,15,0,0,1338] spawn bis_fnc_dynamicText;
            };
 

пожалуйста подскажите что я делаю не так. дебаг от Antihack 08.03.15 infiSTAR by TheFirstNoob (STEAM) Version 3.1

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


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

на сколько я знаю в стандартном дебаге и так все в порядке со временем

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


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

Так и не понял как вставить реальное время в дебаг монитор, выдает ошибку Error in expression <_time_to_restart = player getVariable ["Ultima_Time", "00:00"]; вот кусок кода в который я попытался вставить переменную

 

if (!isNil 'infiSTAR_UPTIMER') then
            {
                _time_to_restart = player getVariable ["Ultima_Time", "00:00"];
                _stime =         0;
                if (serverTime > 36000)then{_stime = time;}else{_stime = serverTime;};
                _upTimeLeft =     infiSTAR_UPTIMER - _stime;
                _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];};
                _mytime = format['Рестарт через: (_time_to_restart)'];
                ['<t size=''0.35'' align=''right'' font=''TahomaB''>'+_mytime+'</t>',safezoneX*-1,0.98 * safezoneH + safezoneY,15,0,0,1338] spawn bis_fnc_dynamicText;
            };
 

пожалуйста подскажите что я делаю не так. дебаг от Antihack 08.03.15 infiSTAR by TheFirstNoob (STEAM) Version 3.1

Код ПОЛНЫЙ БРЕД.

 

на сколько я знаю в стандартном дебаге и так все в порядке со временем

С каким?

Там время старта миссии.

Не путай, с реальным временем до рестарта, с реальным временем хоста и реальным временем старта сервера.

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


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

 

Private ["_restarts", "_date", "_hour", "_minute", "_minuteToRestart", "_hourToRestart", "_renew", "_time"];
_restarts    =    [2, 6, 10, 14, 18, 22];    // Часы рестартов, от меньшего к большему!
_renew        =    61;
while {true} do
    {
        _date    =    "ultima_kickall" callExtension "1";
        _date    =    toArray _date;
        _minute  =    parseNumber(toString[(_date select 3)] + toString[(_date select 4)]);
        if (_renew != _minute) then
            {
                if (_minute    !=    0) then
                    {_minuteToRestart    =    60 - _minute;}
                else
                    {_minuteToRestart    =    0;};
                if (_minuteToRestart < 10) then
                    {_minuteToRestart    =    "0" + str(_minuteToRestart)}
                else
                    {_minuteToRestart    =    str(_minuteToRestart)};
                _renew           =    _minute;
                _hour            =    parseNumber(toString[(_date select 0)] + toString[(_date select 1)]);
                _hourToRestart   =    -1;
                {
                    if (_x > _hour) exitWith
                        {_hourToRestart    =    (_x - _hour - 1);};
                } forEach _restarts;
                if (_hourToRestart == -1) then
                    {_hourToRestart    =    (_restarts select 0) + 23 - _hour;};
                if (_minute == 0) then
                    {_hourToRestart    =    _hourToRestart + 1};
                _hourToRestart    =    "0" + str(_hourToRestart);
                _time    =    (_hourToRestart + ":" + _minuteToRestart);
                {
                    _x setVariable ["Ultima_Time", _time, true];
                } forEach playableUnits;
            };
        uiSleep 30;
    };
 

подключать -

 

execVM "имя_скрипта.sqf";

В миссии у игрока(или в дебаг мониторе) получать значение времени так:

 

_time_to_restart = player getVariable ["Ultima_Time", "00:00"];

 

в переменной _time_to_restart будет реальное время до рестарта.

 

P.S. ну и не забываем скачать саму dll

ссылка дана выше.

Все нечего но время до рестарта меняется примерно через 5 минут, это так и есть или что то я не догоняю)) 

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


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

Все нечего но время до рестарта меняется примерно через 5 минут, это так и есть или что то я не догоняю)) 

Значит у тебя дебаг монитор так обновляется.

На сервере время обновляется раз в 30 сек.

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


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

Значит у тебя дебаг монитор так обновляется.

На сервере время обновляется раз в 30 сек.

В том то и дело что в дебаге все хорошо пока оно прокикало 5 минут это же показывает 00:00, да и 30 секунд по моему очень долго, хотя бы сек 10

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


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

 

В том то и дело что в дебаге все хорошо пока оно прокикало 5 минут это же показывает 00:00, да и 30 секунд по моему очень долго, хотя бы сек 10

Передача обновленного времени, происходит когда изменилось время(минуты) - раз в минуту.

Проверка, что время обновилась(изменились минуты) каждые 30 сек.

=> Максимальный рассинхрон не больше 1 минуты.

 

Частота тут не при чем.

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

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


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

Та же история,недавно началась от 4 до 9 минут отстает время как я только не делал,что только не предпринимал и в сервер дебаг переносил и выводил время в инфистровском дебаге потому,что NoNameUltima   сказал,что: "Значит у тебя дебаг монитор так обновляется." переносил все в миссию и подключал там и ините вот так:

if(isServer) then {

 execVM real_time_restart.sqf

};

я даже попытался запускать весь скрипт целиком каждую минуту вот так: ["any","any","any","any","any","real_time_restart"]

 

Я перевернул весь сервер использовал все что возможно от унслипов до ручного старта скрипта,ему все ровно,он обновляет время только через 4 -5 мин бывает еще 9 мин но редко.

С уверенностью могу сказать что это тут совсем не причем,

 

NoNameUltima 

"Значит у тебя дебаг монитор так обновляется.

На сервере время обновляется раз в 30 сек. "

 

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

Вообщем жопа. 

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


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

Та же история,недавно началась от 4 до 9 минут отстает время как я только не делал,что только не предпринимал и в сервер дебаг переносил и выводил время в инфистровском дебаге потому,что NoNameUltima   сказал,что: "Значит у тебя дебаг монитор так обновляется." переносил все в миссию и подключал там и ините вот так:

if(isServer) then {

 execVM real_time_restart.sqf

};

я даже попытался запускать весь скрипт целиком каждую минуту вот так: ["any","any","any","any","any","real_time_restart"]

 

Я перевернул весь сервер использовал все что возможно от унслипов до ручного старта скрипта,ему все ровно,он обновляет время только через 4 -5 мин бывает еще 9 мин но редко.

С уверенностью могу сказать что это тут совсем не причем,

 

NoNameUltima 

"Значит у тебя дебаг монитор так обновляется.

На сервере время обновляется раз в 30 сек. "

 

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

Вообщем жопа. 

 

Что бы, чтото декомпилить, надо понимать реверс енжине, а те кто разбираются в реверс енжине, имеют проф. образование=> такой примитивный код, на любом языке программирования для них написать не составит труда=>и декомпилить то не зачем.))

Ну а по поводу отставания -

А какой ФПС на сервере? Мб он лагет жутко? т.к. проблемы то быть по сути не может, только из-за лагов.

Скрипт то примитив точно также как и длл, там рабочих строк то...

Раз в 30 сек получить время от ДЛЛ

Сравнить с прошлым временем

Если не совпадают назнвачить всем игрокам сервера переменную, содержащую новое время(обновить переменную)

     _x setVariable ["Ultima_Time", _time, true];

 

 

Еще как вариант, заменить данный участок кода:

 

{
    _x setVariable ["Ultima_Time", _time, true];
} forEach playableUnits;

на:

{
    if ( (isPlayer _x) && (alive _x) ) then
        {_x setVariable ["Ultima_Time", _time, true];};
} forEach playableUnits;

чтоб не вешать на ботов, нпц, и трупов эту переменную, т.к. она им нахрен не сдалась.

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

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


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

Что бы, чтото декомпилить, надо понимать реверс енжине, а те кто разбираются в реверс енжине, имеют проф. образование=> такой примитивный код, на любом языке программирования для них написать не составит труда=>и декомпилить то не зачем.))

Ну а по поводу отставания -

А какой ФПС на сервере? Мб он лагет жутко? т.к. проблемы то быть по сути не может, только из-за лагов.

Скрипт то примитив точно также как и длл, там рабочих строк то...

Раз в 30 сек получить время от ДЛЛ

Сравнить с прошлым временем

Если не совпадают назнвачить всем игрокам сервера переменную, содержащую новое время(обновить переменную)

     _x setVariable ["Ultima_Time", _time, true];

 

 

Еще как вариант, заменить данный участок кода:

 

{
    _x setVariable ["Ultima_Time", _time, true];
} forEach playableUnits;

на:

{
    if ( (isPlayer _x) && (alive _x) ) then
        {_x setVariable ["Ultima_Time", _time, true];};
} forEach playableUnits;

чтоб не вешать на ботов, нпц, и трупов эту переменную, т.к. она им нахрен не сдалась.

Спасибо сейчас попробую,потом отпишусь,фпс сервера вот:

8b33d3652999.png

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


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

Ты можешь добавить вывод в РПТ сервера, получаемое значение от DLL при запросе времени.

И посмотреть, что оно происходит четко - раз в 30 секунд.

 

А остальное - это клиентская часть. Мб из-за пропускной способности, не доходят переменные через setVariable

 

P.S.

В принципе, можно вешать эту переменную на статичного НПЦ, стоящего в какой нибудь трейд зоне.

А игрокам получать данную переменную с этого НПЦ.

В таком случае, переменная будет всего одна - на одном объекте. И т.к. он статичный и не уничтожаемый, она будет существовать все время.

 

Примерно так:

При создании NPC получить ссылку на него, и запомнить ее.

Для этого, открыть файл в котором создаются торговцы на сервере.

Выбрать любого торговца. (Например "Woodlander3").

И заменить создание на:

Timer_NPC = createAgent["Woodlander3"...........

т.е. создать глобальную переменную Timer_NPC, которая будет указывать на данного НПЦ.

 

В скрипте времени, заменить участок кода:

{
    if ( (isPlayer _x) && (alive _x) ) then
        {_x setVariable ["Ultima_Time", _time, true];};
} forEach playableUnits;

 

На:

Timer_NPC setVariable ["Ultima_Time", _time, true];

 

В миссии добавить скрипт(пишу на память):

Timer_NPC = (([11440, 11362, 0] nearEntities ["Woodlander3", 30]) select 0);

 

*Вместо координат, указать координаты торговца, для более быстрого поиска.

Данный скрипт получит в миссии указатель на торговца, и теперь можно получать с него время.

 

После этого можно получать время так:

 

_time_to_restart = Timer_NPC getVariable ["Ultima_Time", "00:00"];
Изменено пользователем NoNameUltima (история изменений)

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


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

 

Ты можешь добавить вывод в РПТ сервера, получаемое значение от DLL при запросе времени.

И посмотреть, что оно происходит четко - раз в 30 секунд.

 

А остальное - это клиентская часть. Мб из-за пропускной способности, не доходят переменные через setVariable

 

P.S.

В принципе, можно вешать эту переменную на статичного НПЦ, стоящего в какой нибудь трейд зоне.

А игрокам получать данную переменную с этого НПЦ.

В таком случае, переменная будет всего одна - на одном объекте. И т.к. он статичный и не уничтожаемый, она будет существовать все время.

 

Примерно так:

При создании NPC получить ссылку на него, и запомнить ее.

Для этого, открыть файл в котором создаются торговцы на сервере.

Выбрать любого торговца. (Например "Woodlander3").

И заменить создание на:

Timer_NPC = createAgent["Woodlander3"...........

т.е. создать глобальную переменную Timer_NPC, которая будет указывать на данного НПЦ.

 

В скрипте времени, заменить участок кода:

{
    if ( (isPlayer _x) && (alive _x) ) then
        {_x setVariable ["Ultima_Time", _time, true];};
} forEach playableUnits;

 

На:

Timer_NPC setVariable ["Ultima_Time", _time, true];

 

В миссии добавить скрипт(пишу на память):

Timer_NPC = (([11440, 11362, 0] nearEntities ["Woodlander3", 30]) select 0);

 

*Вместо координат, указать координаты торговца, для более быстрого поиска.

Данный скрипт получит в миссии указатель на торговца, и теперь можно получать с него время.

 

После этого можно получать время так:

 

_time_to_restart = Timer_NPC getVariable ["Ultima_Time", "00:00"];

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

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


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

 

Private ["_restarts", "_date", "_hour", "_minute", "_minuteToRestart", "_hourToRestart", "_renew", "_time"];
_restarts    =    [2, 6, 10, 14, 18, 22];    // Часы рестартов, от меньшего к большему!
_renew        =    61;
while {true} do
    {
        _date    =    "ultima_kickall" callExtension "1";
        _date    =    toArray _date;
        _minute  =    parseNumber(toString[(_date select 3)] + toString[(_date select 4)]);
        if (_renew != _minute) then
            {
                if (_minute    !=    0) then
                    {_minuteToRestart    =    60 - _minute;}
                else
                    {_minuteToRestart    =    0;};
                if (_minuteToRestart < 10) then
                    {_minuteToRestart    =    "0" + str(_minuteToRestart)}
                else
                    {_minuteToRestart    =    str(_minuteToRestart)};
                _renew           =    _minute;
                _hour            =    parseNumber(toString[(_date select 0)] + toString[(_date select 1)]);
                _hourToRestart   =    -1;
                {
                    if (_x > _hour) exitWith
                        {_hourToRestart    =    (_x - _hour - 1);};
                } forEach _restarts;
                if (_hourToRestart == -1) then
                    {_hourToRestart    =    (_restarts select 0) + 23 - _hour;};
                if (_minute == 0) then
                    {_hourToRestart    =    _hourToRestart + 1};
                _hourToRestart    =    "0" + str(_hourToRestart);
                _time    =    (_hourToRestart + ":" + _minuteToRestart);
                {
                    _x setVariable ["Ultima_Time", _time, true];
                } forEach playableUnits;
            };
        uiSleep 30;
    };
 

подключать -

 

execVM "имя_скрипта.sqf";

В миссии у игрока(или в дебаг мониторе) получать значение времени так:

 

_time_to_restart = player getVariable ["Ultima_Time", "00:00"];

 

в переменной _time_to_restart будет реальное время до рестарта.

 

P.S. ну и не забываем скачать саму dll

ссылка дана выше.

Что-то мучаюсь долго с этим. Battleye пишет при первом запуске, что блочит твой DLL

И, соответственно, время до рестарта 00:00 показывает

Что сделать?

Проблема решена. Дурак не подождал 30 секунд.

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

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


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

Вопрос другой: решил добавить таймер на торговца.

Вот код из mission.sqf (где добавляются торговцы):

_unit_122 = objNull;
if (true) then
{
  Timer_NPC = createAgent ["Woodlander3", [6317.9883, 7789.3345, 3.0517578e-005], [], 0, "CAN_COLLIDE"];
  _unit_122 = Timer_NPC;
  Timer_NPC setDir -130.79149;
  Timer_NPC setVehicleInit "this allowDammage false; this disableAI 'FSM'; this disableAI 'MOVE'; this disableAI 'AUTOTARGET'; this disableAI 'TARGET'; this setBehaviour 'CARELESS'; this forceSpeed 0;";
  Timer_NPC setUnitAbility 0.60000002;
  Timer_NPC allowDammage false; Timer_NPC disableAI 'FSM'; Timer_NPC disableAI 'MOVE'; Timer_NPC disableAI 'AUTOTARGET'; Timer_NPC disableAI 'TARGET'; Timer_NPC setBehaviour 'CARELESS'; Timer_NPC forceSpeed 0;Timer_NPC enableSimulation false;};

Вот код скрипта:

Private ["_restarts", "_date", "_hour", "_minute", "_minuteToRestart", "_hourToRestart", "_renew", "_time", "Timer_NPC"];
_restarts    =    [0, 3, 6, 9, 12, 15, 18, 21];    // Часы рестартов, от меньшего к большему!
_renew        =    61;
while {true} do
    {
        _date    =    "ultima_kickall" callExtension "1";
        _date    =    toArray _date;
        _minute  =    parseNumber(toString[(_date select 3)] + toString[(_date select 4)]);
        if (_renew != _minute) then
            {
                if (_minute    !=    0) then
                    {_minuteToRestart    =    60 - _minute;}
                else
                    {_minuteToRestart    =    0;};
                if (_minuteToRestart < 10) then
                    {_minuteToRestart    =    "0" + str(_minuteToRestart)}
                else
                    {_minuteToRestart    =    str(_minuteToRestart)};
                _renew           =    _minute;
                _hour            =    parseNumber(toString[(_date select 0)] + toString[(_date select 1)]);
                _hourToRestart   =    -1;
                {
                    if (_x > _hour) exitWith
                        {_hourToRestart    =    (_x - _hour - 1);};
                } forEach _restarts;
                if (_hourToRestart == -1) then
                    {_hourToRestart    =    (_restarts select 0) + 23 - _hour;};
                if (_minute == 0) then
                    {_hourToRestart    =    _hourToRestart + 1};
                _hourToRestart    =    "0" + str(_hourToRestart);
                _time    =    (_hourToRestart + ":" + _minuteToRestart);
                Timer_NPC setVariable ["Ultima_Time", _time, true];
		Timer_NPC = (([6317.9883, 7789.3345, 3.0517578e-005] nearEntities ["Woodlander3", 30]) select 0);
            };
        uiSleep 2;
    };
 

Решил добавить:

Timer_NPC setVariable ["Ultima_Time", _time, true];

в этот скрипт, надеюсь так можно.

 

Всё, получаю время:

Timer_NPC getVariable ["Ultima_Time", "00:00"]

 

В итоге получаю ANY

Что не так?

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


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

ищи тему, которую я создал. там все расписано.

а тут не так хотя бы то, что игрок - клиен, знать не знает про Timer_NPC и переменная эта есть только на сервере. Где ты ее и объявил.

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

    • Автор: Makliion
      Всем добрый вечер..
      У меня такой вопрос где найти или заказать скрипт для обыска зомбей & игроков 
      что-бы каждую вещь снимать через действие а не тупо через таб
      Шлем отдельно
      Рюкзак отдельно
      ну и на все остальные слоты
      искал долго не нашёл ничего
      есть мод на обыск но он просто открывает  инвентарь и все 
       
    • Автор: Troy1
      Всем привет. Подскжите ну или помогите пожалуйста решить вопрос.
      Вопрос звучит так. На сервере есть трейдер зоны и базы игроков. 
      Если в течение определённого времени, на пример 1 - 2 часа с машиной не кто не взаимодействует и машина не находится в зоне трейдера или на теретории базы, то машина отлетает в гараж или на штраф стоянку.
      На сервере используется TraderPlus.
       
      Есть такие решения у кого?
      За ранние благодарю.
    • Автор: Troy1
      Всем привет. Подскжите ну или помогите пожалуйста решить вопрос.
      Вопрос звучит так. Нужно сделать так, что бы на всей карте был запрет на строительство. 
      Если нужно построить например базу с палатками, то нужно установить верстак или флаг, который установит зону для строительства с радиусом примерно 20-25 метров от центра и желательно что бы зона была квадратной.
      Есть такие решения у кого?
      За ранние благодарю.
    • Автор: BR0wi
      Подскажите где найти людей, которые делаю моды на заказ. К кому вообще обращаться? Или что бы реализовать свои идеи нужно самому "год" сидеть и изучать все механики модинга?
    • Автор: CubeIn
      Приветствую господа, хочу создать новый проект, уникальный, но для этого нужен маппер.
      Я оставлю здесь свой дискрод, напишите в лс, кто готов взяться за крупный проект.
      4me#4542
  • Наш выбор

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

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

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

Поддержка