Français Solved Comment ajouter une condition 'coplevel' à un addaction dans le Duty System ?

29/5/20
6
0
100
Bonjour,

Savez-vous s'il est possible de mettre une condition life_coplevel dans un addaction ?

Je m'explique, dans le script Duty System, on a un panneau sur la map avec comme code dedans : _null=this execVM "The-Programmer\Duty_System\initCop.sqf";
et dans le fichier initCop.sqf, on a : _this addAction [(["STR_ACTION_COP","The_programmer_Duty_Config","Prise_Service_Localization"] call theprogrammer_core_fnc_localize),{[0] call The_programmer_Duty_fnc_MenuPrise},"",0,false,false,"","",4];

le problème, c'est que n'importe qui peut y accéder (et donc voir qui est en service par la même occasion) et peut aussi cliquer sur prendre service ce qui le connecte en flic, puis après un laps de temps, il est déco avec un message comme quoi il ne peut pas se co en flic. Mais pendant ce laps de temps, il peut poser son équipement par terre puis se reco en civil et ramasser l'équipement flic.

du coup est-il possible de mettre une condition type : si ton niveau flic est <= 1, tu ne peux pas accéder au panneau ?

j'ai essayé avec :
'call life_coplevel <= 1'
'life_coplevel <= 1'
'FETCH_CONST(life_coplevel) <= 1'

que j'ai placé à chaque fois ici --> _this addAction [(["STR_ACTION_COP","The_programmer_Duty_Config","Prise_Service_Localization"] call theprogrammer_core_fnc_localize),{[0] call The_programmer_Duty_fnc_MenuPrise},"",0,false,false,"", ICI ,4];
mais ça ne fonctionne pas.

Au cas ou, je suis sur altis life 5.0 avec le Duty System v3.0

Merci d'avoir pris le temps de lire =)
 
Solution
Eh bien, je ne vois pas pourquoi ça ne fonctionnerait pas. Vérifie que tu as bien sauvegardé correctement ton mapping et que tu es bien sur le bon panneau aussi

Si tu as la débug console, tu peux regarder le résultat de cette condition :
Code:
(call life_coplevel) >= 1
Si c'est true, et que tu ne le vois pas, tu n'as probablement pas bien sauvegardé ton mission.sqm
Si c'est false, c'est que tu n'as pas le level, ou qu'il y a un problème autre part
En effet mais ça n'empêche pas d'accéder au panneau, ça fais juste que si tu prends ton service et que tu n'as pas le coplevel requis, tu te fais kick. Les gens peuvent donc accéder quand même au panneau et voir qui est en service, prendre leur service (même si ils ne sont pas whitelist flic) et poser leur stuff par terre avant de se faire kick.
C'est pour cette raison que j'aimerais mettre une condition de coplevel au addaction ^^
 
Normalement comme ceci ça fonctionne :
Code:
this addAction [(["STR_ACTION_COP","The_programmer_Duty_Config","Prise_Service_Localization"] call theprogrammer_core_fnc_localize),{[0] call The_programmer_Duty_fnc_MenuPrise},"",0,false,false,"",'(call life_coplevel) >= 1']);

Tu avais inversé le sens de la condition, c'est une condition qui doit être sur true pour afficher l'action :)
 
Maxence Maxence j'ai testé ce que tu m'as proposé, ça ne fonctionne pas non plus, j'ai retesté toutes mes version en inversant le signe mais ça ne fonctionne pas, le panneau ne m'affiche rien quelque soit mon grade ...
 
Eh bien, je ne vois pas pourquoi ça ne fonctionnerait pas. Vérifie que tu as bien sauvegardé correctement ton mapping et que tu es bien sur le bon panneau aussi

Si tu as la débug console, tu peux regarder le résultat de cette condition :
Code:
(call life_coplevel) >= 1
Si c'est true, et que tu ne le vois pas, tu n'as probablement pas bien sauvegardé ton mission.sqm
Si c'est false, c'est que tu n'as pas le level, ou qu'il y a un problème autre part
 
Solution
Maxence Maxence, Donc en effet avec la console de débug tout est plus clair, je ne peux pas utiliser de
Code:
call life_coplevel >= 1
parceque la console ne détecte mon level flic/medic/adac que si je prends mon service en flic/medic/adac sinon il me dit que je suis égal à 0 (sauf adac ou il ne me retourne rien du tout).
Est-ce normal ou ai-je un problème ?

EDIT : J'ai trouvé :

Dans le fichier fn_requestReceived.sqf qui se trouve dans core/session

J'ai ajouté ça :

Code:
CONST(life_coplevel,(_this select 13));
CONST(life_medicLevel,(_this select 14));
CONST(life_adacLevel,(_this select 15));

Comme ceci :

Code:
switch (playerSide) do {
    case west: {
        CONST(life_coplevel,(_this select 7));
        CONST(life_medicLevel,0);
        CONST(life_adacLevel,0);
        life_blacklisted = _this select 9;
        if (LIFE_SETTINGS(getNumber,"save_playerStats") isEqualTo 1) then {
            life_hunger = ((_this select 10) select 0);
            life_thirst = ((_this select 10) select 1);
            player setDamage ((_this select 10) select 2);
        };
    };

    case civilian: {
        life_is_arrested = _this select 7;
        CONST(life_coplevel,(_this select 13)); //ICI
        CONST(life_medicLevel,(_this select 14)); //ICI
        CONST(life_adacLevel,(_this select 15)); //ICI
        //CONST(life_coplevel, 0);
        //CONST(life_medicLevel, 0);
        life_houses = _this select (_count - 3);
        if (LIFE_SETTINGS(getNumber,"save_playerStats") isEqualTo 1) then {
            life_hunger = ((_this select 9) select 0);
            life_thirst = ((_this select 9) select 1);
            player setDamage ((_this select 9) select 2);
        };

        //Position
        if (LIFE_SETTINGS(getNumber,"save_civilian_position") isEqualTo 1) then {
            life_is_alive = _this select 10;
            life_civ_position = _this select 11;
            if (life_is_alive) then {
                if !(count life_civ_position isEqualTo 3) then {diag_log format ["[requestReceived] Bad position received. Data: %1",life_civ_position];life_is_alive =false;};
                if (life_civ_position distance (getMarkerPos "respawn_civilian") < 300) then {life_is_alive = false;};
            };
        };

        {
            _house = nearestObject [(call compile format ["%1",(_x select 0)]), "House"];
            life_vehicles pushBack _house;
        } forEach life_houses;

        life_gangData = _this select (_count - 2);
        if !(count life_gangData isEqualTo 0) then {
            [] spawn life_fnc_initGang;
        };
        [] spawn life_fnc_initHouses;
    };

    case independent: {
        CONST(life_medicLevel,(_this select 7));
        CONST(life_coplevel,0);
        CONST(life_adacLevel,0);
        if (LIFE_SETTINGS(getNumber,"save_playerStats") isEqualTo 1) then {
            life_hunger = ((_this select 9) select 0);
            life_thirst = ((_this select 9) select 1);
            player setDamage ((_this select 9) select 2);
        };
    };
   
    case east: {
        CONST(life_adacLevel,(_this select 7));
        CONST(life_coplevel,0);
        CONST(life_medicLevel,0);
        if (LIFE_SETTINGS(getNumber,"save_playerStats") isEqualTo 1) then {
           life_hunger = ((_this select 9) select 0);
           life_thirst = ((_this select 9) select 1);
           player setDamage ((_this select 9) select 2);
        };
    };
};

et côté life_server dans le fichier fn_queryRequest.sqf qui se trouve dans Functions/MySQL

j'ai ajouté ça :

Code:
, coplevel, mediclevel, adaclevel

dans case civilian comme ceci :

Code:
_query = switch (_side) do {
    // West - 11 entries returned
    case west: {format ["SELECT pid, name, cash, bankacc, adminlevel, donorlevel, cop_licenses, coplevel, cop_gear, blacklist, civ_stats, playtime FROM players WHERE pid='%1'",_uid];};
    // Civilian - 12 entries returned
    case civilian: {format ["SELECT pid, name, cash, bankacc, adminlevel, donorlevel, civ_licenses, arrested, civ_gear, civ_stats, civ_alive, civ_position, playtime, coplevel, mediclevel, adaclevel FROM players WHERE pid='%1'",_uid];};
    // Independent - 10 entries returned
    case independent: {format ["SELECT pid, name, cash, bankacc, adminlevel, donorlevel, med_licenses, mediclevel, med_gear, civ_stats, playtime FROM players WHERE pid='%1'",_uid];};
    //East
    case east: {format["SELECT pid, name, cash, bankacc, adminlevel, donorlevel, adac_licenses, adaclevel, adac_gear, civ_stats, playtime FROM players WHERE pid='%1'",_uid];};
};

Merci Maxence Maxence pour ton aide puisque ne effet ton code fonctionne ^^
 
Dernière édition: