Français Solved Comment rendre les dates et heures persistantes malgré les reboots automatiques ?

Bonjour, bonsoir !

Je créais ce sujet suite à ma demande sur le discord, pensez-vous qu'il est possible de faire en sorte de rendre persistant complètement la mission même avec des Reboot automatique.
J'entends par là via un exemple :

  • Nous sommes le 21 janvier 2050 à 21h35 en jeux
  • Le reboot a lieu
  • Une fois le reboot effectué et le serveur relancé, il reprend à 21h35-36 le 21 janvier 2050

Cela permettra d'écouler le temps et la date malgré les reboot.

Je précise que nous avons 4 reboot actuellement.
 
Solution
Hello!
Dans ton life_server/config.cpp tu peux ajouter dans la class Systems { :
Code:
class syncTimeBetweenReboots {};

Puis dans ton life_server/Functions/System, créé un fichier fn_syncTimeBetweenReboots.sqf :
Code:
_rebootPeriod = 6; // Nombre d'heures entre les reboots

_query = "SELECT date FROM server_time WHERE id='1'";
_result = [_query,2] call DB_fnc_asyncCall;

_date = _result select 0;
setDate (call compile format ["%1",_date]);

while {true} do {
    uiSleep 30;

    if (time >= (((_rebootPeriod - 1) * 60 * 60) + (45 * 60))) then {
        _query = format ["UPDATE server_time SET date='""%1""' WHERE id='1'",date];
        [_query,2] call DB_fnc_asyncCall;
    };
};

Dans ton...
Hello!
Dans ton life_server/config.cpp tu peux ajouter dans la class Systems { :
Code:
class syncTimeBetweenReboots {};

Puis dans ton life_server/Functions/System, créé un fichier fn_syncTimeBetweenReboots.sqf :
Code:
_rebootPeriod = 6; // Nombre d'heures entre les reboots

_query = "SELECT date FROM server_time WHERE id='1'";
_result = [_query,2] call DB_fnc_asyncCall;

_date = _result select 0;
setDate (call compile format ["%1",_date]);

while {true} do {
    uiSleep 30;

    if (time >= (((_rebootPeriod - 1) * 60 * 60) + (45 * 60))) then {
        _query = format ["UPDATE server_time SET date='""%1""' WHERE id='1'",date];
        [_query,2] call DB_fnc_asyncCall;
    };
};

Dans ton life_server/init.sqf, ajoute cette ligne :
Code:
[] spawn TON_fnc_syncTimeBetweenReboots;

Et dans ta base de données exécute ce code :
Code:
CREATE TABLE server_time (
    `id` INT NOT NULL DEFAULT '1',
    `date` TEXT NOT NULL
) ENGINE = InnoDB;

INSERT INTO `server_time` (`id`, `date`) VALUES ('1', '\"[2022,4,18,12,00]\"');

Je n'ai pas pu tester par manque de temps, c'est possible qu'il y ai des bugs 😅
 
Solution
Je vais tenter aujourd'hui !
En espérant ne pas créer l'apocalypse avec ça X') j'avoue ne pas être à l'aise avec la BDD (enfin pas encore à l'aise pour ajouter dedans)
Si cela fonctionne je vais pouvoir continuer mon script pour une météo en fonctionne du jour et de l'heure en jeux.