Jump to content

[RELEASE,v1.1] 'fnc_IBEN_uniSTime' function for server restart (Restart time + Uptime)


iben

Recommended Posts

 

 

Hello guys,

currently I'm working on couple addons for my server and from time to time,
when coding, some answers to your questions pops up in my head.
Couple days ago I was asked about server restart time and uptime. Well,
why not to share it - BUT... nothing bad about current solution you're probably using!
In fact, the code for this is everywhere - that's right. I did it my way not because
I couldn't use common code - but just because I'm still learning a lot - and because I needed
restart time/uptime solution for my files.
So here is it... if you want to try, test it and let me know. The true is, I haven't time to test
it properly. So I'm gonna be happy to hear your thoughts...

===

Big thanks always goes to:

===

Changelog:

  • [2017-06-04], v1.0 | Initial release

===

Read "Goodbye". Wish you the best guys!

===

How it looks like:

// ===========================================================================
// FUNCTIONS LIBRARY >> Universal server timer function
// ===========================================================================
// @Function name: fnc_IBEN_uniSTime
// ===========================================================================
// @Remarks:
//  - Can be called 2 ways:
//    * Restart/Uptime with label
//    * Restart/Uptime without label
// @Parameters:
//  - Time for restart cycle in seconds                               | number
//  - Time mode (values: "restart"/"uptime")                          | string
//  - Label (example: "Restart in")                                   | string
// @Related files:
//  - none
// @Example:
//  - For server time we are using global var: SERV_RESTART = 10800; (3h)
//  - restart time with no label
//    * [SERV_RESTART,"restart"] call fnc_IBEN_uniSTime;
//  - restart time with label
//    * [SERV_RESTART,["restart","Restart in"]] call fnc_IBEN_uniSTime;
//  - uptime with no label
//    * [SERV_RESTART,"uptime"] call fnc_IBEN_uniSTime;
//  - uptime with label
//    * [SERV_RESTART,["uptime","Time from start"]] call fnc_IBEN_uniSTime;
// @Returns:
//  - time string in format: "h:mm", or "Restart in: h:mm"
// ===========================================================================
private ["_serverCycle","_timerParams","_timerType","_label","_useLabel","_minArr",
"_srvTime","_goTime","_leftTime","_opTime","_hours","_y","_minutes","_key","_sub",
"_notLabel","_useLabel"];

_label = ""; // label reset
_useLabel = false;

_serverCycle = _this select 0;
_timerParams = _this select 1;
if (typeName _timerParams != "ARRAY") then {
  _timerType = _timerParams;
  _useLabel = false;
} else {
  _timerType = _timerParams select 0;
  _label = _timerParams select 1;
  _useLabel = true;
};

_minArr = [1,2,3,4,5,6,7,8,9,0];
_srvTime =  "0h 00min"; // @info: default time
_goTime = 0;
_goTime = serverTime;
_leftTime = (round (_serverCycle - _goTime));

_opTime = [_goTime,_leftTime] select (_timerType == "restart");

if (_leftTime > 0) then {
  _hours = (floor ((_opTime / 60) / 60));
  _minutes = (floor ((_opTime / 60) - (_hours * 60)));

  _key = _minutes;
  {
    _sub = _minArr select _x;
    if (_sub == _key) exitWith {
      _minutes = _sub;
    };
  } count _minArr;

  _minutes = [_minutes,format["0%1",_minutes]] select (_minutes < 10);
  _notLabel = format ["%1h %2m",_hours,_minutes];
  _incLabel = format ["%1: %2h %3m",_label,_hours,_minutes];
  _srvTime = [_notLabel,_incLabel] select (_useLabel);

} else {
  _srvTime
};
_srvTime


// === :: fnc_IBEN_uniSTime END

===

Check source code (Github)

===

FEATURES:

  • Not big deal, just small piece of code as output from my work to make things easier...
  • Function is able to output Restart time or Uptime with single line code (see bellow) and can be easily integrated into your code.
  • If you restart system fails (or you with settings :) and time is over, time stays formatted as: '0h:00min'
  • Usage examples: debug monitor, log time (diag_log) etc.
  • It's a function - you can easily maintain your "time" code...

===

How to install:

It's actually very easy: practical example is the best way to explain, what needs to be done. See repo structure and files.

Source files are available at Github repo. You can download them from here.

===

How to use it:

= General usage:

// @Parameters:
//  - Time for restart cycle in seconds                               | number
//  - Time mode (values: "restart"/"uptime")                          | string
//  - Label (example: "Restart in")                                   | string
// ==========================================================
// @Scenario:
//  - First, we store our server restart time into global variable
//    so we can easily use it anywhere and change it at once later,
//    if we want to change time:
if (isNil SERV_RESTART) then {
  SERV_RESTART = 10800;
};
// @example 01: Restart time with no label
[SERV_RESTART,"restart"] call fnc_IBEN_uniSTime;

// @example 02: Restart time with label
[SERV_RESTART,["restart","Restart in"]] call fnc_IBEN_uniSTime;

// @example 03: Uptime with label
[SERV_RESTART,["uptime","Time from start"]] call fnc_IBEN_uniSTime;

// @Returns:
//  - Time string in format: "h:mm", or "Restart in: h:mm"

===

...easy enough, isn't it?

===

= Specific usage:

// === Scenario 01:

// It's very easy to add it to your debug monitor code. In fact, we're not gonna to cover
// this specific scenario - just look around forum, there are plenty of releases.
// But... many time I heard question like: "How can I add restart time/uptime to the right
// bottom screen corner the way how watermark is?".
// Well, this is our first scenario:

// === What to do:
// It's actually pretty easy: just grab your files from my repo - how to implement you will
// easily find out from prepared files - just follow repo structure.
// Done? OK - so you integrated 'fnc_IBEN_uniSTime' into your compiled files and you can
// use it now.
// Everyone has some kind of debug monitor, right? So just add this piece of code:


while {1 == 1} do {
  private ["_Tinfo","_Tval",...some local vars];

  // ... your debug monitor code


  // =======================================================================
  // GUI: RESTART TIMEOUT (see picture bellow)
  // (but you can add uptime with/withou label - look for examples above)
  // =======================================================================
  _Tval  = [SERV_RESTART,["restart","Restart in"]] call fnc_IBEN_uniSTime;
  _Tinfo = format ["<t size='.35' align='right' font='TahomaB'>%1</t>", _Tval];

  [
    _Tinfo
    ,safezoneX * -1
    ,0.98 * safezoneH + safezoneY
    ,9999
    ,0
    ,0
    ,50009
  ] spawn BIS_fnc_dynamicText;

  // your code for parsing text bellow

    uiSleep 2;
  };

// === Scenario 02:
// Let's implement formatted time info into your debug output (logs).

// === What to do:
// Just add:
diga_log format ["=== [DEBUG] Player %1 (%2) just found your secret item. [%3]",
                 (name player),
                 getPlayerUID player,
                 [SERV_RESTART,["uptime","Uptime"]] call fnc_IBEN_uniSTime)]];
// RPT output:
"=== [DEBUG] Player iben (8542514521...) just found your secret item. [Uptime: 1h:30min]"

// === Done!

===

Screen right bottom time watermark (showcase):

9134EAA3451FB1C398EE2B5CED387E48747B770F

===

...that's all... Have Fun!!!
Cheers...

===

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Discord

×
×
  • Create New...