Français Système de notification avancée - Avec passage de paramètres

  • Auteur de la discussion Auteur de la discussion Zomblard
  • Date de début Date de début

Zomblard

User
11/6/20
194
9
19
800
Salut encore un nouveau TUTO

Celui-ci n'est pas de moi mais de Lucian fait pour la communauté DE100

Voici à quoi il ressemble :
NN-Version#.gif

Il y as plusieurs réglage pour vos notification les voici :
  • Les couleur (Valide et Erreur)
  • La vitesse du message : fast = 5 secondes / slow = 15 secondes
Créer le fichier fn_notification_system.sqf dans dialog/function
Code:
#include "..\..\script_macros.hpp"
/*
    File:    fn_notification_system.sqf
    Date:   2016-07-23 18:15:17
    Author: Patrick "Lucian" Schmidt
    Description:
    Arguments:
        0: Text <STRING>
        1: Type <BOOLEAN>
        2: Speed <STRING>
*/
params[
    "_text",
    ["_error",false,[false]],
    ["_speed","",[""]]
];
if (isServer || !hasInterface) exitWith {};
disableSerialization;
_display = finddisplay 46;
if (profileNamespace getVariable ["de100_notify",true]) then {
    if (_error) then {
        playSound "3DEN_notificationWarning";
    } else {
        playSound "HintExpand";
    };
};
private _headerColor = if (_error) then {
    [0.538433,0,0,0.8];
} else {
    [(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843]),(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019]),(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862]),(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])];
};
if (_text isEqualType "") then {
    _text = parseText _text;
};
private _Header = _display ctrlCreate ["RscText", -1];
_Header ctrlSetPosition [0.005 * safezoneW + safezoneX, 0.01 * safezoneH + safezoneY, 0.2 * safezoneW, 0.011 * safezoneH];
_Header ctrlSetBackgroundColor _headerColor;
_Header ctrlSetFade 1;
_Header ctrlCommit 0;
_Header ctrlSetFade 0;
_Header ctrlCommit 0.4;
private _TextField = _display ctrlCreate ["RscStructuredText", -1];
_TextField ctrlSetStructuredText _text;
_TextField ctrlSetPosition [0.005 * safezoneW + safezoneX, 0.021 * safezoneH + safezoneY,0.2 * safezoneW, 0.5];
_TextField ctrlCommit 0;
_TextField ctrlSetPosition [0.005 * safezoneW + safezoneX, 0.021 * safezoneH + safezoneY,0.2 * safezoneW, ((ctrlTextHeight _TextField)+ (0.005 * safezoneH))];
_TextField ctrlSetBackgroundColor [0,0,0,0.75];
_TextField ctrlSetFade 1;
_TextField ctrlCommit 0;
_TextField ctrlSetFade 0;
_TextField ctrlCommit 0.4;
[_TextField,_Header,_speed] spawn {
    disableSerialization;
    if (_this select 2 isEqualTo "fast") then {
        uiSleep 5;
    } else {
        uiSleep 15;
    };
    private _TextField = _this select 0;
    private _Header = _this select 1;
    _TextField ctrlSetFade 1;
    _TextField ctrlCommit 0.3;
    _Header ctrlSetFade 1;
    _Header ctrlCommit 0.3;
    uiSleep 0.3;
    ctrlDelete _Header;
    ctrlDelete _TextField;
};
private _posText = (ctrlPosition (_TextField)) select 1;
private _posHeader = (ctrlPosition (_Header)) select 1;
private _textHigh = (ctrlPosition (_TextField)) select 3;

if (isNil "life_open_notifications") then {life_open_notifications = [];};

if (count life_open_notifications > 0) then {
    private _activeNotifications = 0;
    {
        private _ctrlHeader = _x select 0;
        private _ctrlText = _x select 1;
        if (!isNull _ctrlHeader && !isNull _ctrlText) then {
            _ctrlHeader ctrlSetPosition [0.005 * safezoneW + safezoneX, (_posHeader + _textHigh + 1.5*(0.011 * safezoneH))];
            _ctrlText ctrlSetPosition [0.005 * safezoneW + safezoneX, (_posText + _textHigh + 1.5*(0.011 * safezoneH))];
            _ctrlHeader ctrlCommit 0.25;
            _ctrlText ctrlCommit 0.25;
            _posText = (_posText + _textHigh + 1.5*(0.011 * safezoneH));
            _posHeader = (_posHeader + _textHigh + 1.5*(0.011 * safezoneH));
            _textHigh = (ctrlPosition (_ctrlText)) select 3;
            if (_activeNotifications > 3) then {
                _ctrlText ctrlSetFade 1;
                _ctrlHeader ctrlSetFade 1;
                _ctrlText ctrlCommit 0.2;
                _ctrlHeader ctrlCommit 0.2;
            };
            _activeNotifications = _activeNotifications + 1;
        };
    } forEach life_open_notifications;
};
life_open_notifications = ([[_Header,_TextField]] + life_open_notifications) select {!isNull (_x select 0) && !isNull (_x select 1)}; // Add the Element to the Front of the Array and remove the deleted Arrays

Rendez-vous dans Functions.hpp et dans la classe Dialog_Controls ajoutez :
Code:
class notification_system {};

Comment l'utiliser / Choses à toujours avoir sous la main :
Code:
0: Texte <STRING>

1: Type <BOOLEAN> false = VERT - true = ROUGE

2: Speed <STRING> fast = reste 5 secondes - slow = reste 15 secondes



["TEXTE",false,"fast"] call life_fnc_notification_system; // Message simple rapide en vert

["TEXTE",true,"fast"] call life_fnc_notification_system; // Message simple rapide en rouge



["TEXTE",false,"slow"] call life_fnc_notification_system; // Message simple lent en vert

["TEXTE",true,"slow"] call life_fnc_notification_system; // Message simple lent en rouge



//Exemple avec prise en charge des paramètres :

[format [localize "STR_NOTF_NE_1",[_price] call life_fnc_numberText,localize _displayName],true,"fast"] call life_fnc_notification_system;

//une autre manière de le faire :

[format ["Vous n'avez pas %1€ pour être soigné.",[_healCost] call life_fnc_numberText],false,""] call life_fnc_notification_system;

//Ou quelque choses comme ca :

if(CASH < 5000) exitWith {[format ["Vous n'avez pas assez d'argent avec vous! Il vous manque %1€ ", (5000 - CASH)],true,""] call life_fnc_notification_system;};
 
Dernière édition par un modérateur:
  • Like
Les réactions: IceEagle132
bonjour , désolé des déterré le sujet ><',
pourriez vous faire un exemple car j'ai vraiment pas compris comment faire .
par exemple quand on revend des pêches ou qu'on dépose de l'argent a l'ATM .Merci a vous :-)
 
Tu cherche un hint dans ton fichier
et tu le remplace par exemple :
Code:
["Dépôt effectué !",false,"fast"] call life_fnc_notification_system; // Message simple rapide en vert

Si jamais tu à un paramètre à ton hint (un nom de joueurs ou un montant etc etc)
Tu fera plutôt comme sa :
Code:
[format ["Vous n'avez pas %1€ pour être soigné.",[_healCost] call life_fnc_numberText],false,""] call life_fnc_notification_system;

C'est pas exactement sa, sa fait longtemps que je n'ai pas toucher du arma mais sa doit y ressembler
 
Meilleur exemple :
Dans ton /core/pmenu/fn_giveMoney.sqf :
ligne 12 :
Code:
if ((lbCurSel 2022) isEqualTo -1) exitWith {["Personne n'a été sélectionné !",true,"slow"] call life_fnc_notification_system;ctrlShow[2001,true];};
ligne 20 :
Code:
if (!([_amount] call TON_fnc_isnumber)) exitWith {["Vous n'avez pas saisi un format de nombre réel.",true,"slow"] call life_fnc_notification_system;ctrlShow[2001,true];};
ligne 21 :
Code:
if (parseNumber(_amount) <= 0) exitWith {["Vous devez entrer un montant réel que vous voulez donner.",true,"slow"] call life_fnc_notification_system;ctrlShow[2001,true];};
ligne 29 :
Code:
[format ["Vous avez donné %1€ à %2.",[(parseNumber(_amount))] call life_fnc_numberText,_unit getVariable ["realname",name _unit]],false,"slow"] call life_fnc_notification_system;


Attention mes ligne ne sont peut être pas les mêmes que toi !
 
  • Like
Les réactions: Maxence
Meilleur exemple :
Dans ton /core/pmenu/fn_giveMoney.sqf :
ligne 12 :
Code:
if ((lbCurSel 2022) isEqualTo -1) exitWith {["Personne n'a été sélectionné !",true,"slow"] call life_fnc_notification_system;ctrlShow[2001,true];};
ligne 20 :
Code:
if (!([_amount] call TON_fnc_isnumber)) exitWith {["Vous n'avez pas saisi un format de nombre réel.",true,"slow"] call life_fnc_notification_system;ctrlShow[2001,true];};
ligne 21 :
Code:
if (parseNumber(_amount) <= 0) exitWith {["Vous devez entrer un montant réel que vous voulez donner.",true,"slow"] call life_fnc_notification_system;ctrlShow[2001,true];};
ligne 29 :
Code:
[format ["Vous avez donné %1€ à %2.",[(parseNumber(_amount))] call life_fnc_numberText,_unit getVariable ["realname",name _unit]],false,"slow"] call life_fnc_notification_system;


Attention mes ligne ne sont peut être pas les mêmes que toi !
merci a toi :-) je comprend un peu mieux !!
 
Tu peux faire comme ceci :


Code:
["TEXTE",true,"slow"] remoteExec ["life_fnc_notification_system",west];
 
Hello,
Par exemple pour le whitelist_menu il faut faire:
Code:
["Vous avez changer le %3 de %1 vers %2.","Max_Settings_WhitelistMenu","WhitelistMenu_Localization",true,"slow"] remoteExec ["life_fnc_broadcast",_unit] call life_fnc_numberText] ["life_fnc_notification_system",west];
 
Pas tout à fait. Par exemple pour le fn_levelChange.sqf il faut remplacer :
Code:
hint format [(["STR_SUCCES_CHANGE_LEVEL","Max_Settings_WhitelistMenu","WhitelistMenu_Localization"] call theprogrammer_core_fnc_localize),(name _unit),_value,_txt];
[1,format [(["STR_SUCCES_GET_CHANGED_LEVEL","Max_Settings_WhitelistMenu","WhitelistMenu_Localization"] call theprogrammer_core_fnc_localize),(name player),_value,_txt]] remoteExecCall ["life_fnc_broadcast",_unit];
par :
Code:
[format [(["STR_SUCCES_CHANGE_LEVEL","Max_Settings_WhitelistMenu","WhitelistMenu_Localization"] call theprogrammer_core_fnc_localize),(name _unit),_value,_txt],true,"slow"] call life_fnc_notification_system;
[format [(["STR_SUCCES_GET_CHANGED_LEVEL","Max_Settings_WhitelistMenu","WhitelistMenu_Localization"] call theprogrammer_core_fnc_localize),(name player),_value,_txt],true,"slow"] remoteExec ["life_fnc_notification_system",_unit];
 
Bonsoir a tous,

dit moi comment peux mettre sur tous les Notification , trouve comment changer appart mettre dans le stringtable.xml me je pense pas sa va fonctionne

Cordialement
 
Bonjour il n'existe pas un moyen plus simple que de devoir modifier tout les "hint" ?
Cordialement