1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Downloads
  4. Galerie
    1. Alben
  5. Toolbox
    1. Passwort Generator
    2. Portchecker
  6. Mitglieder
    1. Mitgliedersuche
    2. Benutzer online
    3. Trophäen
    4. Team
Fr: 16 Mai 2025
  • Anmelden oder registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Artikel
  • Forum
  • Dateien
  • Seiten
  • Bilder
  • Erweiterte Suche

Schön, dass du den Weg zu NodeZone.net gefunden hast! Aktuell bist du nicht angemeldet und kannst deshalb nur eingeschränkt auf unsere Community zugreifen. Um alle Funktionen freizuschalten, spannende Inhalte zu entdecken und dich aktiv einzubringen, registriere dich jetzt kostenlos oder melde dich mit deinem Account an.

Anmelden oder registrieren
    1. Nodezone.net Community
    2. Forum
    3. Gameserver & Hosting
    4. ArmA Series - ArmA 3 / Reforger
    5. Tutorials & Releases

    [Tutorial][Message System][V1.1] Alternative für Hints & Co.

      • Altis Life
    • DerL30N
    • 11. Oktober 2016 um 19:08
    • DerL30N
      Schüler
      Reaktionen
      67
      Trophäen
      10
      Beiträge
      125
      • 11. Oktober 2016 um 19:08
      • #1

      Guten Tag,

      heute möchte ich euch mein "Message System" vorstellen.

      Kennt ihr das, wenn ihr einen Hint (Nachricht oben rechts in der Ecke) bekommt und dieser dann direkt durch den Nächsten ersetzt wird ?
      Möchtest du etwas dagegen unternehmen ?, dann lies dieses Tutorial!
      ÜBRIGENS : DAS SCRIPT IST GENERELL FÜR ALLES KOMPATIBEL IN ARMA 3!

      (links die Normale Variante und rechts die Simple ( vereinfachte ) Version, wo sich die Colorbar ( Farbbalken ) ausblenden lässt

      (Hier auch zwei Bilder von meinem Testserver, wo ich alle relevanten hints umgebaut habe, alles unwichtige kann man mit titletext Lösen ;) )


      Major Update V1.1

      Was ist Neu ?

      Dynamische Dialog-Größe ( passt sich an die Größe und Länge des Textes an )
      Überarbeitete Optik ( primär und sekundär Dialog, unten mehr )
      Einfache - und erweiterte Konfiguration durch das Verwenden einer Hpp file


      Die Version 1.1

      Durch die sich dynamisch anpassende Dialog-Größe haben sich neue Möglichkeiten für ein neues Design entwickelt, dieses fällt wie gewohnt, mit Titel, Text und Colorbar (Farbbalken), aus, sowie in neuem Style ganz schlicht und einfach.
      Auch bei dem neuen Design sind weitere Konfigurationsmöglichkeiten vorhanden, z.B. lässt sich die Colorbar beliebig aktivieren und deaktivieren.
      Außerdem lässt sich der Sound beim einblenden des Nachrichtenfenster´ beliebig für beide Varianten unterschiedlich einstellen, oder gar deaktivieren.
      Auch kann die Eingangsüberleitung, dass sogenannte faceIn, anpassen.
      Durch die Hpp Datei können auch weitere Farben bequem und mühelos geändert werden, ohne alle möglichen SQF Dateien zu durchsuchen.

      Mit den Neuerungen hat sich auch die Funktion MSG_fnc_handle geändert, sie verfügt jetzt über mehr Dynamik, und es können Parameter beliebig genutzt werden, ohne vorläufige angeben zu müssen. (Unten mehr)

      Installation V1.1

      Zunächst sollte eine alte Version des Scriptes vollständig deinstalliert werden, um Fehler zu vermeiden.

      Beginnen wir nun in der description.ext in eurem Missions-Hauptverzeichnis, öffnet diese zunächst, um folgendes zu ergänzen : ( für Life Versionen ist das #include für die Functions.hpp nicht relevant )

      C: description.ext
      #include "derleon\Scripts_Master.hpp"
      
      
      
      
      class RscTitles {
      #include "derleon\msg\msg.hpp"
      };
      
      
      
      
      class CfgFunctions {
      #include "Functions.hpp"
      };
      Alles anzeigen

      Nun öffnen wir die Functions.hpp und ergänzen folgendes am ende der Datei : ( Hierbei zu beachten ist, dass die class MSG_SYSTEM einen eigenständigen Tag hat und deshalb NICHT in eine andere Class angefügt werden kann )

      Code
      class MSG_SYSTEM {
      tag = "MSG";
      class Master {
      file = "derleon\msg";
      class ctrl {};
      class handle {};
      };
      };

      Nun erstellen wir den Ordner derleon im Mission-Hauptverzeichnis und erstellen darin folgende Datei : ( Sollte diese bei euch schon vorhanden sein, dann müsst ihr folgendes ergänzen )

      C: Scripts_Master.hpp
      #define true 1
      #define false 0
      #include "msg\common.hpp"
      #include "msg\msg.hpp"
      class Message_Settings {
      //overlap = true; // TRUE -> simpl messages can be overlapped
      /*Stuff you can edit on your own*/
      noBar = false; // TRUE -> colorbar not visible in simple messages
      sound = "Hint"; // Here you can change the normal message sound with the name of your sound class
      soundSec = "Hint"; // Here you can change the simple message sound with the name of your sound class
      noSound = false; // TRUE -> disables the sound on normal messages
      noSoundSec = true; // TRUE -> disables the sound on simple messages
      rscLayer = 20; // 20 -> the layer on hud the dialog will create
      kindOfCutRsc = "PLAIN"; // "PLAIN" -> the kind of CutRsc
      fadein = 0.2; // 0.2 -> The fadein duration | default hint could be 0
      baseTitel = "Notification"; // The standart text for the case that no titel param is given
      baseColor = "lightblue"; // The standart color for the case that no color param is given
      };
      class Colors {
      /*Example:
      define class as name of your color
      class nameOfColour {
      rgba[] = { x, x, x, 0.7 }; Important is that you ceep the last number in this array at 0.7, these is the alpha channel
      };Replace X with numbers
      */
      //Colors for colorbar
      class red {
      rgba[] = { 0.92, 0, 0.51, 0.7 };
      };
      class orange {
      rgba[] = { 0.92, 0.51, 0, 0.7 };
      };
      class yellow {
      rgba[] = { 0.96, 0.9, 0, 0.7 };
      };
      class green {
      rgba[] = { 0.16, 0.95, 0, 0.7 };
      };
      class turquoise {
      rgba[] = { 0.79, 0, 0, 0.7 };
      };
      class lightblue {
      rgba[] = { 0, 0.49, 0.8, 0.7 };
      };
      class blue {
      rgba[] = { 0, 0.11, 0.74, 0.7 };
      };
      class darkblue {
      rgba[] = { 0.05, 0.03, 0.38, 0.7 };
      };
      class purple {
      rgba[] = { 0.37, 0.06, 0.56, 0.7 };
      };
      class pink {
      rgba[] = { 0.7, 0.22, 0.46, 0.7 };
      };
      };
      Alles anzeigen

      Nun erstellen wir den Ordner msg in dem Ordner derleon und erstellen darin zuletzt die folgenden vier Dateien :

      Code: common.hpp
      class msg_text {
      type = 0;
      style = 0;
      shadow = 1;
      colorShadow[] = {0, 0, 0, 0.5};
      font = "PuristaSemibold";
      SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
      text = "";
      colorText[] = { 1 , 1 , 1 , 1 };
      colorBackground[] = {0, 0, 0, 0};
      };
      class msg_sText {
      type = 13;
      style = 0;
      shadow = 1;
      colorShadow[] = {0, 0, 0, 0.5};
      //font = "PuristaMedium";
      font = "PuristaSemibold";
      text = "";
      size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
      colorText[] = {1, 1, 1, 1.0};
      colorBackground[] = {0, 0, 0, 0};
      
      
      
      
      class Attributes {
      color = "#ffffff";
      align = "center";
      shadow = 1;
      };
      };
      Alles anzeigen
      Code: msg.hpp
      class msg {
      idd = -1;
      duration = 180;
      movingEnable = 0;
      fadein = 1;
      fadeout = 3;
      name = "msg";
      onLoad="uiNamespace setVariable ['msg',_this select 0]";
      objects[] = {};
      class controlsBackground {
      class background: msg_sText
      {
      idc = 9004;
      x = 0.840312 * safezoneW + safezoneX;
      y = 0.104 * safezoneH + safezoneY;
      w = 0.149531 * safezoneW;
      h = 0.132 * safezoneH;
      colorBackground[] = {-1,-1,-1,0.7};
      };
      };
      class controls {
      class titel: msg_sText
      {
      idc = 9001;
      text = "";
      x = 0.842468 * safezoneW + safezoneX;
      y = 0.115 * safezoneH + safezoneY;
      w = 0.142219 * safezoneW;
      h = 0.033 * safezoneH;
      };
      class colorbar: msg_text
      {
      idc = 9002;
      x = 0.845469 * safezoneW + safezoneX;
      y = 0.148 * safezoneH + safezoneY;
      w = 0.139219 * safezoneW;
      h = 0.0055 * safezoneH;
      };
      class messagebox: msg_sText
      {
      idc = 9003;
      text = "";
      x = 0.845469 * safezoneW + safezoneX;
      y = 0.159 * safezoneH + safezoneY;
      w = 0.139219 * safezoneW;
      h = 0.066 * safezoneH;
      };
      };
      };
      class msg_simpl {
      idd = -1;
      duration = 180;
      movingEnable = 0;
      fadein = 1;
      fadeout = 3;
      name = "msg_simpl";
      onLoad="uiNamespace setVariable ['msg_simpl',_this select 0]";
      objects[] = {};
      class controlsBackground {
      class background: msg_sText
      {
      idc = 9003;
      x = 0.840312 * safezoneW + safezoneX;
      y = 0.104 * safezoneH + safezoneY;
      w = 0.149531 * safezoneW;
      h = 0.132 * safezoneH;
      colorBackground[] = {-1,-1,-1,0.7};
      };
      };
      class controls {
      class colorbar: msg_text
      {
      idc = 9001;
      x = 0.845469 * safezoneW + safezoneX;
      y = 0.104 * safezoneH + safezoneY;
      w = 0.139219 * safezoneW;
      h = 0.0055 * safezoneH;
      };
      class messagebox: msg_sText
      {
      idc = 9002;
      x = 0.845469 * safezoneW + safezoneX;
      y = 0.115 * safezoneH + safezoneY;
      w = 0.139219 * safezoneW;
      h = 0.066 * safezoneH;
      };
      };
      };
      Alles anzeigen
      Code: fn_ctrl.sqf
      #define CONFIG(TYPE,SETTING) TYPE(missionConfigFile >> "Message_Settings" >> SETTING)
      /*
          File: fn_ctrl.sqf
          Author: Leon "DerL30N" Beeser"
      
      
      
      
          Description:
          Controles the players hud
      */
      if (!(count msg_array > 0)) exitWith { msg_active = false; };
      
      
      
      
      disableSerialization;
      
      
      
      
      while {count msg_array >= 1} do {
      	_msg = msg_array select 0;
      	_text = _msg select 0;
      	_title = _msg select 1;
      	_color = _msg select 2;
      	_simpl = _msg select 3;
      	_color = getArray (missionConfigFile >> "Colors" >> _color >> "rgba");
      	if ((CONFIG(getNumber,"killHint")) isEqualto 1) then { hint ""; };
      	private "_display";
      	if (_simpl) then {
      		(CONFIG(getNumber,"rscLayer")) cutRsc["msg_simpl",(CONFIG(getText,"kindOfCutRsc")),(CONFIG(getNumber,"fadein"))];
      		if ((CONFIG(getNumber,"noSoundSec")) isEqualTo 0) then { playSound [(CONFIG(getText,"soundSec")),true]; };
      		_display = uiNamespace getVariable "msg_simpl";
      		_lic1 = _display displayCtrl 9001;
      		_lic2 = _display displayCtrl 9002;
      		_lic3 = _display displayCtrl 9003;
      		if ((CONFIG(getNumber,"noBar")) isEqualTo 0) then { _lic1 ctrlSetBackgroundColor [(_color select 0),(_color select 1),(_color select 2),0.7]; } else { _lic1 ctrlSetBackgroundColor [-1,-1,-1,-1]; };
      		_lic2 ctrlSetStructuredText parseText format["<t size='0.9px'>%1</t>",_text];
      		_lic2 ctrlSetPosition [0.845469 * safezoneW + safezoneX,0.115 * safezoneH + safezoneY,0.139219 * safezoneW,ctrlTextHeight _lic2];
      		_lic2 ctrlCommit 0;
      		_lic3 ctrlSetPosition [0.840312 * safezoneW + safezoneX,0.104 * safezoneH + safezoneY,0.149531 * safezoneW,((((ctrlPosition _lic2) select 1) + ((ctrlPosition _lic2) select 3)) - (0.104 * safezoneH + safezoneY)) + 0.011 * safezoneH];
      		_lic3 ctrlCommit 0;
      	} else {
      		(CONFIG(getNumber,"rscLayer")) cutRsc["msg",(CONFIG(getText,"kindOfCutRsc")),(CONFIG(getNumber,"fadein"))];
      		if ((CONFIG(getNumber,"noSound")) isEqualTo 0) then { playSound [(CONFIG(getText,"sound")),true]; };
      		_display = uiNamespace getVariable "msg";
      		_lic1 = _display displayCtrl 9001;
      		_lic2 = _display displayCtrl 9002;
      		_lic3 = _display displayCtrl 9003;
      		_lic4 = _display displayCtrl 9004;
      		_lic1 ctrlSetStructuredText parseText format["<t size='1.1px'>%1</t>",_title];
      		_lic1 ctrlSetPosition [0.842468 * safezoneW + safezoneX,0.115 * safezoneH + safezoneY,0.142219 * safezoneW,ctrlTextHeight _lic1];
      		_lic1 ctrlCommit 0;
      		_lic2 ctrlSetPosition [0.845469 * safezoneW + safezoneX,((ctrlPosition _lic1) select 1) + ((ctrlPosition _lic1) select 3) + (0.00325 * safezoneH),0.139219 * safezoneW,0.0055 * safezoneH];
      		_lic2 ctrlCommit 0;
      		_lic2 ctrlSetBackgroundColor [(_color select 0),(_color select 1),(_color select 2),0.7];
      		_lic3 ctrlSetStructuredText parseText format["<t size='0.9px'>%1</t>",_text];
      		_lic3 ctrlSetPosition [0.845469 * safezoneW + safezoneX,((ctrlPosition _lic1) select 1) + ((ctrlPosition _lic1) select 3) + (2 * (0.0055 * safezoneH)),0.139219 * safezoneW,ctrlTextHeight _lic3];
      		_lic3 ctrlCommit 0;
      		_lic4 ctrlSetPosition [0.840312 * safezoneW + safezoneX,0.104 * safezoneH + safezoneY,0.149531 * safezoneW,((((ctrlPosition _lic3) select 1) + ((ctrlPosition _lic3) select 3)) - (0.104 * safezoneH + safezoneY)) + 0.011 * safezoneH];
      		_lic4 ctrlCommit 0;
      	};
      	waitUntil { sleep 0.1; (!isNull _display) };
      	waitUntil { sleep 0.1; (isNull _display) };
      	msg_array = msg_array - [_msg];
      };
      //if ((!_simpl) && ((CONFIG(getNumber,"overlap")) isEqualTo 0)) then { msg_active = false; };
      msg_active = false;
      Alles anzeigen
      Code: fn_handle.sqf
      #define CONFIG(TYPE,SETTING) TYPE(missionConfigFile >> "Message_Settings" >> SETTING)
      /*
          File: fn_handle.sqf
          Author: Leon "DerL30N" Beeser"
      
      
      
      
          Description:
          Handles incoming messages and creates a array
      */
      private["_param1","_param2","_param3","_param4","_error","_text","_title","_color","_simpl"]; _error = false;
      
      
      
      
      _param1 = [_this, 0, nil] call BIS_fnc_param;
      _param2 = [_this, 1, nil] call BIS_fnc_param;
      _param3 = [_this, 2, nil] call BIS_fnc_param;
      _param4 = [_this, 3, nil] call BIS_fnc_param;
      
      
      
      
      if (isNil "_param1") exitWith {};
      
      
      
      
      if ((_param1 isEqualType "") OR (_param1 isEqualType text "")) then	
      {
      	_text = _param1;
      	if (!(isNil "_param2")) then 
      	{
      		if ((_param2 isEqualType "") OR (_param2 isEqualType text "")) then	
      		{
      			if (isClass (missionConfigFile >> "Colors" >> _param2)) then
      			{
      				_title = (CONFIG(getText,"baseTitel"));
      				_color = _param2;
      				if (!(isNil "_param3")) then 
      				{
      					if (_param3 isEqualType true) then 
      					{
      						_simpl = _param3;
      					} else {
      						_error = true; diag_log format["MSG Error : Parameter No.3 erwartet Bool | Parameter : %1",[_param1,_param2,_param3]];
      					};
      				} else {
      					_simpl = false;
      				};
      			} else {
      				_title = _param2;
      				if (!(isNil "_param3")) then 
      				{
      					if ((_param3 isEqualType "") OR (_param3 isEqualType text "")) then	
      					{
      						if (isClass (missionConfigFile >> "Colors" >> _param3)) then
      						{
      							_color = _param3;
      							if (!(isNil "_param4")) then 
      							{
      								if (_param4 isEqualType true) then 
      								{
      									_simpl = _param4;
      								} else {
      									_error = true; diag_log format["MSG Error : Parameter No.4 erwartet Bool | Parameter : %1",[_param1,_param2,_param3,_param4]];
      								};
      							} else {
      								_simpl = false;
      							};
      						} else {
      							_error = true; diag_log format["MSG Error : Parameter No.3 erwartet String oder Text | Parameter : %1",[_param1,_param2,_param3]];
      						};
      					} else {
      						if (_param3 isEqualType true) then 
      						{
      							_color = (CONFIG(getText,"baseColor"));
      							_simpl = _param3;
      						} else {
      							_error = true; diag_log format["MSG Error : Parameter No.3 erwartet String oder Text oder Bool | Parameter : %1",[_param1,_param2,_param3]];
      						};
      					};
      				} else {
      					_color = (CONFIG(getText,"baseColor"));
      					_simpl = false;
      				};
      			};
      		} else {
      			if (_param2 isEqualType true) then 
      			{
      				_title = "";
      				_color = (CONFIG(getText,"baseColor"));
      				_simpl = _param2;
      			} else {
      				_error = true; diag_log format["MSG Error : Parameter No.2 erwartet Bool oder Text oder String | Parameter : %1",[_param1,_param2]];
      			};
      		};
      	} else {
      		_title = (CONFIG(getText,"baseTitel"));
      		_color = (CONFIG(getText,"baseColor"));
      		_simpl = false;
      	};
      } else {
      	_error = true; diag_log format["MSG Error : Parameter No.1 erwartet String oder Text | Parameter : %1",[_param1]];
      };
      if (_error) exitWith {};
      if ((isNil "msg_array") OR (isNil "msg_active")) then { msg_array = []; msg_active = false; };
      msg_array = msg_array + [[_text,_title,_color,_simpl]];
      
      
      
      
      /*if ((_simpl) && ((CONFIG(getNumber,"overlap")) isEqualTo 1)) then {
      	if (!msg_active) exitWith { [] spawn MSG_fnc_ctrl;
      } else {
      	if (!msg_active) exitWith { [] spawn MSG_fnc_ctrl; msg_active = true; };
      };*/
      if (!msg_active) exitWith { [] spawn MSG_fnc_ctrl; msg_active = true; };
      /*
      [_text,_title,_color,_simpl] call MSG_fnc_handle;
      [_text,_title,_color,_simpl] remoteExec ["MSG_fnc_handle",_target];
      
      
      
      
      1.[Text]
      
      
      
      
      2.[Text],[Titel] OR [Text],[Color] OR [Text],[Simple]
      
      
      
      
      3.[Text],[Titel],[Color] OR [Text],[Titel],[Simple] OR [Text],[Color],[Simple]
      
      
      
      
      4.[Text],[Titel],[Color],[Simple]
      */
      Alles anzeigen


      Wenn alle befolgt wurde, dann wurde die Version 1.1 erfolgreich installiert, nun kann sie noch in der Scripts_Master.hpp konfiguriert werden.

      Info zur Verwendung

      [] call MSG_fnc_handle oder doch eher [] remoteExec ["MSG_fnc_handle",_target]; ? Informationen findest du dazu weiter unten unter dem Punkt "Alternative remoteExec"

      Parameter

      In dieser Version stehen vier sogenannter Parameter zur Verfügung :

      [_text,_title,_color,_simpl] call MSG_fnc_handle; oder [_text,_title,_color,_simpl] remoteExec ["MSG_fnc_handle",_target];

      _text ist der erste Parameter, dieser geht IMMER vorweg, er steht für euren Text
      _titel ist der Parameter für euren Titel, dieser muss nicht angegeben werden, wird er aber angeben, so muss er nach dem ersten Parameter ( _text ) stehen.
      _color ist der Parameter für die Colorbar, mit ihm könnt ihr die Farbe dessen verändern. Auch dieser Parameter muss nicht angegeben werden, wird er angegeben, so muss er nach dem zweiten Parameter ( _titel ) stehen.
      _simpl ist der Parameter, der zwischen der normalen und der vereinfachten Dialogform wechseln kann. Auch dieser Parameter muss nicht angegeben werden, wird er angegeben, so muss er nach dem dritten Parameter ( _color ) stehen.

      Der Standardwert der Parameter

      _text hat keinen Standardwert, da ihr einen Text angeben müsst, welchen ihr ausgeben wollt.
      _titel hat den Standardwert "Notification" ( dieser kann geändert werden in der HPP), wird kein Parameter angegeben, so wird dieser Wert verwendet.
      _color hat den Standardwert "lightblue" ( dieser kann geändert werden in der HPP), wird kein Parameter angegeben, so wird dieser Wert verwendet.
      _simpl hat den Standardwert "false" ( dieser kann geändert werden in der HPP), wird kein Parameter angegeben, so wird dieser Wert verwendet.

      Wenn man diese Regel beachtet, sind folgende Parameter möglich :

      1 Parameter : [Text]

      2 Parameter : [Text,Titel] OR [Text,Color] OR [Text,Simple]

      3 Parameter : [Text,Titel,Color] OR [Text,Titel,Simple] OR [Text,Color,Simple]

      4 Parameter : [Text,Titel,Color,Simple]


      Colors / Farben

      Rot : case "red" : { _color = [0.79,0,0,0.7]; };
      Orange : case "orange" : { _color = [0.92,0.51,0.7]; };
      Gelb : case "yellow" : { _color = [0.96,0.9,0,0.7]; };
      Grün : case "green" : { _color = [0.16,0.95,0,0.7]; };
      Türkis : case "turquoise" : { _color = [0.79,0,0,0.7]; };
      Hellblau : case "lightblue" : { _color = [0,0.49,0.8,0.7]; };
      Blau : case "blue" : { _color = [0,0.11,0.74,0.7]; };
      Dunkelblau : case "darkblue" : { _color = [0.05,0.03,0.38,0.7]; };
      Lila : case "purple" : { _color = [0.37,0.06,0.56,0.7]; };
      Pink : case "pink" : { _color = [0.7,0.22,0.46,0.7]; };

      Wichtig! Wenn weitere Farben hinzugefügt werden, muss auf den Alpha Wert geachtet werden, dieser Beträgt 70% somit 0.7
      Hinweis! Hier findet ihr eine Farbtabelle für Arma 3 RGB Farbcodes
      Info! Wenn weitere Farben hinzugefügt werden wollen, müssen sie mit dem String namen "red" in die Switch Funktion eingesetzt (ich empfehle unterhalb der schon bestehenden cases) und in Zeile 21 ergänzt werden.

      Alternative remoteExec

      Ich habe eine kleine Ergänzung zum Thema remoteExec angeschlossen, für den Fall, das wir vom Server aus Nachrichten an x-beliebige Personen senden wollen.

      Hier eine Zusammenfassung des neuen Unterbeitrags in meinem Tutorial:

      Dieser Code [_text,_title,_size,_color] remoteExec ["MSG_fnc_handle",_target]; erfüllt exakt den selben Zeck wie folgender [_text,_title,_size,_color] call MSG_fnc_handle; mit dem kleinen Unterschied, dass man mit der remoteExec Funktion zwischen Clienten und dem Server springen kann, so kann man das Ziel, welches die Nachricht bekommen soll, beliebig ansprechen, oder gar alle.

      Die remoteExec Funktion (o.A. remoteExecCall) wird verwendet, um den Ausführungsort der Funktion zu wechseln. Beispiel :

      Leon möchte Peter eine Nachricht schicken, so wird die Variable _target mit dem Integer des Owners gefüllt, d.h. um die Owner ID herauszufinden, falls sie nicht schon bekannt sein sollte, muss folgendes gemacht werden :

      Code
      _ownerID = owner _target;

      Man kann es auch an sich selbst testen, wenn man dies im Singleplayer tut, wird die ID immer 0 sein, da null der Server ist, bzw. der Host der Mission.
      Dazu muss man lediglich folgendes in die Console eingeben, um sich seine ID in der Praxis ansehen zu können, oder auch x-beliebige IDs von anderen Spielern in der Mission.

      Code
      // Hier als Beispiel setzten wir uns selber gleich
      //jetzt lassen wir es uns ganz simpel anzeigen
      hint format["Meine Owner ID\n%1",(owner player)];
      
      
      
      
      //Das wäre auch mit der Funktion MSG_fnc_handle möglich

      Die Owner ID erfährt man über den Befehl owner, ich habe hier mal die Wiki verlinkt.

      Ich hoffe ich konnte es einigermaßen verständlich erklären.

      Spoiler anzeigen

      Erläuterung (alte Version)

      Nachrichten die vorher mit dem Befehl hint "your hint"; aufs Hud gebracht wurden, können jetzt wie folgt aufs Hud : [_text,_title,_size,_color] call MSG_fnc_handle;

      Hierbei ist es völlig egal, in welcher Text Form, Hauptsache als String!
      Die Variablen _title, _text und _size müssen mit Strings befüllt werden, wobei die Variable _size auch einfach nicht Definiert werden muss. Die Variable _size ist ein Integer, der Reelle Zahlen von 1-5 erwartet.

      Beispiel : ["In Sofia ist ein Helikopter abgeschossen worden, es befanden sich wertfolle Gegenstände in ihm","Side Mission",1,"red"] call MSG_fnc_handle;
      oder mit remoteExec (unten dazu mehr)
      ["In Sofia ist ein Helikopter abgeschossen worden, es befanden sich wertfolle Gegenstände in ihm","Side Mission",1,"red"] remoteExec ["MSG_fnc_handle",0]

      Da wir in unserem Beispiel die Farbe rot eingetragen haben, brauchen wir diesen Parameter nicht einzutragen, also :
      ["In Sofia ist ein Helikopter abgeschossen worden, es befanden sich wertfolle Gegenstände in ihm","Side Mission",1] call MSG_fnc_handle;
      oder mit remoteExec
      ["In Sofia ist ein Helikopter abgeschossen worden, es befanden sich wertfolle Gegenstände in ihm","Side Mission",1] remoteExec ["MSG_fnc_handle",0]
      Merke : Dies ist nur bei der Farbe Rot möglich!

      Da wir aber auch die Größe 1 weitergeben wollen, benötigen wir diese auch nicht anzugeben.
      ["In Sofia ist ein Helikopter abgeschossen worden, es befanden sich wertfolle Gegenstände in ihm","Side Mission"] call MSG_fnc_handle;
      oder mit remoteExec
      ["In Sofia ist ein Helikopter abgeschossen worden, es befanden sich wertfolle Gegenstände in ihm","Side Mission"] remoteExec ["MSG_fnc_handle",0]
      Merke : Dies ist nur bei der Größe 1 möglich!

      Wenn wir keinen Titel vergeben wollen, dann können wir dieses auch weg lassen, dann wird der Standard Titel : Notification verwendet.
      ["In Sofia ist ein Helikopter abgeschossen worden, es befanden sich wertfolle Gegenstände in ihm"] call MSG_fnc_handle;
      oder mit remoteExec
      ["In Sofia ist ein Helikopter abgeschossen worden, es befanden sich wertfolle Gegenstände in ihm"] remoteExec ["MSG_fnc_handle",0]


      Ich wünsche euch noch einen schönen Abend,

      DerL30N

      Freier Scripter und Programmierer aus Leidenschaft

      Projektideen gerne an die Pinnwand, aber bitte KEINE Projektanfragen per PN

      8 Mal editiert, zuletzt von DerL30N (11. Dezember 2016 um 11:59) aus folgendem Grund: Update to remoteExec

    • nflug
      Nerd
      Reaktionen
      225
      Trophäen
      9
      Beiträge
      781
      • 11. Oktober 2016 um 19:20
      • #2

      Kann micht nicht entscheiden...
      Entweder die oder die von DE100 :D?!?

      #MAKE_ARMA_NOT_WAR

      ⥴ Scripts made with love

      Why do programmers work in dark rooms?

      Because light attracts bugs...

    • DerL30N
      Schüler
      Reaktionen
      67
      Trophäen
      10
      Beiträge
      125
      • 11. Oktober 2016 um 19:41
      • #3
      Zitat von Flyyying_nflug

      Kann micht nicht entscheiden...
      Entweder die oder die von DE100 :D?!?

      Jetzt hast du die Qual der Wahl :thumbup:
      Ich kann dir nur sagen, bei dem hier wirst du keine Nachricht mehr verpassen :D

      Freier Scripter und Programmierer aus Leidenschaft

      Projektideen gerne an die Pinnwand, aber bitte KEINE Projektanfragen per PN

    • $_Raphi_$
      Amateur
      Reaktionen
      122
      Trophäen
      10
      Beiträge
      207
      Bilder
      6
      • 11. Oktober 2016 um 22:32
      • #4

      Hmm wird wird Zeit für'n Mittelding.... Ne Mischung aus deinem und den von DE100 so das man sich nicht entscheiden muss:D

      Zitat von Johann Wolfgang von Goethe Zitate

      Es hört doch jeder nur , was er versteht.

    • Kuchenplatte
      Erleuchteter
      Reaktionen
      1.013
      Beiträge
      3.387
      Dateien
      7
      Bilder
      10
      • 11. Oktober 2016 um 23:09
      • #5

      Auf jedenfall finde ich toll das es jemanden gibt wie @DerL30N der das noch so "freizügig" macht und seine scripte for free published ;)
      Nice ;)

      Shadow|Eagle: "Frag mich eher why ich dich nicht noch irgendwas gegeben hab als Vorschlag xD"

      !Acryl-Exile Server!

      195.201.148.155:2302

      Kuchenplatte On GitHub

      https://github.com/Kuchenplatte

      Kuchenplattes Backstube

      Kuchenplattes Discord

      Kuchenplatte On Twitch
      Come On and Follow Me! On Twitch.TV

    • $_Raphi_$
      Amateur
      Reaktionen
      122
      Trophäen
      10
      Beiträge
      207
      Bilder
      6
      • 11. Oktober 2016 um 23:13
      • #6

      Warum? Jeder macht es doch freizügig.... Siehe MaxJoiners ladet es auf Armaholic hoch und am Schluss verlangt er auch Geld und bettelt um donations :D

      Zitat von Johann Wolfgang von Goethe Zitate

      Es hört doch jeder nur , was er versteht.

    • Kuchenplatte
      Erleuchteter
      Reaktionen
      1.013
      Beiträge
      3.387
      Dateien
      7
      Bilder
      10
      • 11. Oktober 2016 um 23:15
      • #7
      Zitat von raphi12343

      Warum? Jeder macht es doch freizügig.... Siehe MaxJoiners ladet es auf Armaholic hoch und am Schluss verlangt er auch Geld und bettelt um donations :D

      Glaube seine Signatur sagt alles, oder?

      Shadow|Eagle: "Frag mich eher why ich dich nicht noch irgendwas gegeben hab als Vorschlag xD"

      !Acryl-Exile Server!

      195.201.148.155:2302

      Kuchenplatte On GitHub

      https://github.com/Kuchenplatte

      Kuchenplattes Backstube

      Kuchenplattes Discord

      Kuchenplatte On Twitch
      Come On and Follow Me! On Twitch.TV

    • DerL30N
      Schüler
      Reaktionen
      67
      Trophäen
      10
      Beiträge
      125
      • 12. Oktober 2016 um 00:00
      • #8
      Zitat von Kuchenplatte

      Auf jedenfall finde ich toll das es jemanden gibt wie @DerL30N der das noch so "freizügig" macht und seine scripte for free published ;)
      Nice ;)

      Ich mache es gerne, das Scripten macht mir sehr viel Spaß und es freut mich, wenn ich sehe, dass meine Arbeit auch geschätzt und verwendet wird. Außerdem möchte ich zur Arma Community beitragen und die Scriptvielfalt weiter ausbauen. Und ja ^^ meine Signatur ist nicht nur deshalb so, wie sie ist. Ich bekomme immer wieder anfragen, von Projekten oder ähnlichem, die versuchen Leute für ihr Projekt zu werden und schreiben dann immer brav rein, dass man Scripte NUR für den Server schreiben solle und co. Aber genau da ist das Problem, wenn man immer nur extravagant und exclusiv denkt, dann sollen sich die Leute nicht wundern, wenn man ihre Missionsfiles auseinander baut und man ihre Scripts klaut!, aber...deshalb bin ich der Meinung, mach sie öffentlich, nach dem Motto "sharing instead of stealing", dann sind alle glücklich, denn jeder kann von jedem profitieren. :thumbup:


      Zitat von Kuchenplatte

      Glaube seine Signatur sagt alles, oder?

      Glaube ich auch, dass sie eine gewisse Stellung preis gibt :D (Die Signatur du Schwein werderw )

      Freier Scripter und Programmierer aus Leidenschaft

      Projektideen gerne an die Pinnwand, aber bitte KEINE Projektanfragen per PN

    • nflug
      Nerd
      Reaktionen
      225
      Trophäen
      9
      Beiträge
      781
      • 12. Oktober 2016 um 08:19
      • #9

      Mir ist immer wichtig das alles auf jeder Bildschirm grösse gleich groß ist. Also das mit safezone gearbeitet wird. Ist dem auch so? Achja und die Color Seite die du gepostet hast ist down kennst du noch eine andere?

      #MAKE_ARMA_NOT_WAR

      ⥴ Scripts made with love

      Why do programmers work in dark rooms?

      Because light attracts bugs...

    • Lucian
      Amateur
      Reaktionen
      172
      Trophäen
      11
      Beiträge
      204
      Bilder
      5
      • 12. Oktober 2016 um 10:02
      • #10

      Finde ich ganz schön, allerdings würde ich dir vorschlagen, dass du mit ctrlTextSize arbeitest und die Größe der einzelnen Boxen Dynamisch anpasst. Dann musst du keine 5 Verschiedene rscTitel erstellen. Außerdem wird dein System der Größen/Zeilenanzahl ausgehebelt, wenn man einfach die Textgröße via struc. Text ändert.

    • DerL30N
      Schüler
      Reaktionen
      67
      Trophäen
      10
      Beiträge
      125
      • 12. Oktober 2016 um 14:55
      • #11

      @Flyyying_nflug Ja, ich arbeite generell mit Safezones, sollte man dem obigen Quellcode entnehmen können.
      Und die Farbseite ging gestern noch ?( Habe sie gerade noch einmal getestet und bei mir ist die Seite da !?

      @Lucian ja, das mit der Dynamik, da musste ich einen Kompromiss eingehen, mit der Größe, aber ich bin bereit neues zu Lernen, könntest du mir vlt per PN mal den einen oder anderen Tipp geben ? Ich wäre dir sehr dankbar :saint: .

      Freier Scripter und Programmierer aus Leidenschaft

      Projektideen gerne an die Pinnwand, aber bitte KEINE Projektanfragen per PN

    • Lucian
      Amateur
      Reaktionen
      172
      Trophäen
      11
      Beiträge
      204
      Bilder
      5
      • 12. Oktober 2016 um 15:19
      • #12

      @DerL30N
      Schau mal hier vorbei:
      Mit ctrlTextHeight arbeiten.

    • DerL30N
      Schüler
      Reaktionen
      67
      Trophäen
      10
      Beiträge
      125
      • 12. Oktober 2016 um 15:39
      • #13

      Info

      Ich habe eine kleine Ergänzung zum Thema remoteExec angeschlossen, für den Fall, das wir vom Server aus Nachrichten an x-beliebige Personen senden wollen.

      Hier eine Zusammenfassung des neuen Unterbeitrags in meinem Tutorial:

      Dieser Code [_text,_title,_size,_color] remoteExec ["MSG_fnc_handle",_target]; erfüllt exakt den selben Zeck wie folgender [_text,_title,_size,_color] call MSG_fnc_handle; mit dem kleinen Unterschied, dass man mit der remoteExec Funktion zwischen Clienten und dem Server springen kann, so kann man das Ziel, welches die Nachricht bekommen soll, beliebig ansprechen, oder gar alle.

      Die remoteExec Funktion (o.A. remoteExecCall) wird verwendet, um den Ausführungsort der Funktion zu wechseln. Beispiel :

      Leon möchte Peter eine Nachricht schicken, so wird die Variable _target mit dem Integer des Owners gefüllt, d.h. um die Owner ID herauszufinden, falls sie nicht schon bekannt sein sollte, muss folgendes gemacht werden :

      Code
      _ownerID = owner _target;


      Man kann es auch an sich selbst testen, wenn man dies im Singleplayer tut, wird die ID immer 0 sein, da null der Server ist, bzw. der Host der Mission.
      Dazu muss man lediglich folgendes in die Console eingeben, um sich seine ID in der Praxis ansehen zu können, oder auch x-beliebige IDs von anderen Spielern in der Mission.

      Code
      // Hier als Beispiel setzten wir uns selber gleich
      //jetzt lassen wir es uns ganz simpel anzeigen
      hint format["Meine Owner ID\n%1",(owner player)];
      
      
      
      
      //Das wäre auch mit der Funktion MSG_fnc_handle möglich


      Die Owner ID erfährt man über den Befehl owner, ich habe hier mal die Wiki verlinkt.

      Ich hoffe ich konnte es einigermaßen verständlich erklären.
      Mir ist nachträglich aufgefallen, dass es ein kleines "Problem" wäre ohne diese remoteExec den Besitzer der Funktion zu wechseln und wollte meine Lösung mit euch teilen.

      Freier Scripter und Programmierer aus Leidenschaft

      Projektideen gerne an die Pinnwand, aber bitte KEINE Projektanfragen per PN

      Einmal editiert, zuletzt von DerL30N (13. Oktober 2016 um 21:48)

    • DerL30N
      Schüler
      Reaktionen
      67
      Trophäen
      10
      Beiträge
      125
      • 13. Oktober 2016 um 22:02
      • #14

      Major Update V1.1


      Was ist Neu ?

      Dynamische Dialog-Größe ( passt sich an die Größe und Länge des Textes an )
      Überarbeitete Optik ( primär und sekundär Dialog, unten mehr )
      Einfache - und erweiterte Konfiguration durch das Verwenden einer Hpp file


      Die Version 1.1

      Durch die sich dynamisch anpassende Dialog-Größe haben sich neue Möglichkeiten für ein neues Design entwickelt, dieses fällt wie gewohnt, mit Titel, Text und Colorbar (Farbbalken), aus, sowie in neuem Style ganz schlicht und einfach.
      Auch bei dem neuen Design sind weitere Konfigurationsmöglichkeiten vorhanden, z.B. lässt sich die Colorbar beliebig aktivieren und deaktivieren.
      Außerdem lässt sich der Sound beim einblenden des Nachrichtenfenster´ beliebig für beide Varianten unterschiedlich einstellen, oder gar deaktivieren.
      Auch kann die Eingangsüberleitung, dass sogenannte faceIn, anpassen.
      Durch die Hpp Datei können auch weitere Farben bequem und mühelos geändert werden, ohne alle möglichen SQF Dateien zu durchsuchen.

      Mit den Neuerungen hat sich auch die Funktion MSG_fnc_handle geändert, sie verfügt jetzt über mehr Dynamik, und es können Parameter beliebig genutzt werden, ohne vorläufige angeben zu müssen. (Unten mehr)

      Installation V1.1

      Zunächst sollte eine alte Version des Scriptes vollständig deinstalliert werden, um Fehler zu vermeiden.

      Beginnen wir nun in der description.ext in eurem Missions-Hauptverzeichnis, öffnet diese zunächst, um folgendes zu ergänzen : ( für Life Versionen ist das #include für die Functions.hpp nicht relevant )

      Code: description.ext
      #include "derleon\Scripts_Master.hpp"
      
      
      
      
      class RscTitles {
      	#include "derleon\msg\msg.hpp"
      };
      
      
      
      
      class CfgFunctions {
          #include "Functions.hpp"
      };
      Alles anzeigen

      Nun öffnen wir die Functions.hpp und ergänzen folgendes am ende der Datei : ( Hierbei zu beachten ist, dass die class MSG_SYSTEM einen eigenständigen Tag hat und deshalb NICHT in eine andere Class angefügt werden kann )

      Code
      class MSG_SYSTEM {
          tag = "MSG";
          class Master {
              file = "derleon\msg";
              class ctrl {};
      		class handle {};
          };
      };

      Nun erstellen wir den Ordner derleon im Mission-Hauptverzeichnis und erstellen darin folgende Datei : ( Sollte diese bei euch schon vorhanden sein, dann müsst ihr folgendes ergänzen )

      C: Scripts_Master.hpp
      #define true 1
      #define false 0
      #include "msg\common.hpp"
      #include "msg\msg.hpp"
      class Message_Settings {
      	//overlap = true; // TRUE -> simpl messages can be overlapped
      /*Stuff you can edit on your own*/
      	noBar = false; // TRUE -> colorbar not visible in simple messages
      	sound = "Hint"; // Here you can change the normal message sound with the name of your sound class
      	soundSec = "Hint"; // Here you can change the simple message sound with the name of your sound class
      	noSound = false; // TRUE -> disables the sound on normal messages
      	noSoundSec = true; // TRUE -> disables the sound on simple messages
      	rscLayer = 20; // 20 -> the layer on hud the dialog will create
      	kindOfCutRsc = "PLAIN"; // "PLAIN" -> the kind of CutRsc
      	fadein = 0.2; // 0.2 -> The fadein duration | default hint could be 0
      	baseTitel = "Notification"; // The standart text for the case that no titel param is given
      	baseColor = "lightblue"; // The standart color for the case that no color param is given
      };
      class Colors {
      /*Example:
      	define class as name of your color
      	class nameOfColour {
      		rgba[] = { x, x, x, 0.7 }; Important is that you ceep the last number in this array at 0.7, these is the alpha channel
      	};Replace X with numbers
      */
      //Colors for colorbar
      	class red {
      		rgba[] = { 0.92, 0, 0.51, 0.7 };
          };
      	class orange {
      		rgba[] = { 0.92, 0.51, 0, 0.7 };
          };
      	class yellow {
      		rgba[] = { 0.96, 0.9, 0, 0.7 };
          };
      	class green {
      		rgba[] = { 0.16, 0.95, 0, 0.7 };
          };
      	class turquoise {
      		rgba[] = { 0.79, 0, 0, 0.7 };
          };
      	class lightblue {
      		rgba[] = { 0, 0.49, 0.8, 0.7 };
          };
      	class blue {
      		rgba[] = { 0, 0.11, 0.74, 0.7 };
          };
      	class darkblue {
      		rgba[] = { 0.05, 0.03, 0.38, 0.7 };
          };
      	class purple {
      		rgba[] = { 0.37, 0.06, 0.56, 0.7 };
          };
      	class pink {
      		rgba[] = { 0.7, 0.22, 0.46, 0.7 };
          };
      };
      Alles anzeigen

      Nun erstellen wir den Ordner msg in dem Ordner derleon und erstellen darin zuletzt die folgenden vier Dateien :


      Code: common.hpp
      class msg_text {
      	type = 0;
          style = 0;
          shadow = 1;
      	colorShadow[] = {0, 0, 0, 0.5};
      	font = "PuristaSemibold";
      	SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
          text = "";
      	colorText[] = { 1 , 1 , 1 , 1 };
      	colorBackground[] = {0, 0, 0, 0};
      };
      class msg_sText {
          type = 13;
          style = 0;
      	shadow = 1;
      	colorShadow[] = {0, 0, 0, 0.5};
      	//font = "PuristaMedium";
          font = "PuristaSemibold";
      	text = "";
          size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
          colorText[] = {1, 1, 1, 1.0};
      	colorBackground[] = {0, 0, 0, 0};
      
      
      
      
          class Attributes {
              color = "#ffffff";
              align = "center";
              shadow = 1;
          };
      };
      Alles anzeigen
      Code: fn_ctrl.sqf
      #define CONFIG(TYPE,SETTING) TYPE(missionConfigFile >> "Message_Settings" >> SETTING)
      /*
          File: fn_ctrl.sqf
          Author: Leon "DerL30N" Beeser"
          Description:
          Controles the players hud
      */
      if (!(count msg_array > 0)) exitWith { msg_active = false; };
      disableSerialization;
      while {count msg_array >= 1} do {
      	_msg = msg_array select 0;
      	_text = _msg select 0;
      	_title = _msg select 1;
      	_color = _msg select 2;
      	_simpl = _msg select 3;
      	_color = getArray (missionConfigFile >> "Colors" >> _color >> "rgba");
      	private "_display";
      	if (_simpl) then {
      		(CONFIG(getNumber,"rscLayer")) cutRsc["msg_simpl",(CONFIG(getText,"kindOfCutRsc")),(CONFIG(getNumber,"fadein"))];
      		if ((CONFIG(getNumber,"noSoundSec")) isEqualTo 0) then { playSound [(CONFIG(getText,"soundSec")),true]; };
      		_display = uiNamespace getVariable "msg_simpl";
      		_lic1 = _display displayCtrl 9001;
      		_lic2 = _display displayCtrl 9002;
      		_lic3 = _display displayCtrl 9003;
      		if ((CONFIG(getNumber,"noBar")) isEqualTo 0) then { _lic1 ctrlSetBackgroundColor [(_color select 0),(_color select 1),(_color select 2),0.7]; } else { _lic1 ctrlSetBackgroundColor [-1,-1,-1,-1]; };
      		_lic2 ctrlSetStructuredText parseText format["<t size='0.9px'>%1</t>",_text];
      		_lic2 ctrlSetPosition [0.845469 * safezoneW + safezoneX,0.115 * safezoneH + safezoneY,0.139219 * safezoneW,ctrlTextHeight _lic2];
      		_lic2 ctrlCommit 0;
      		_lic3 ctrlSetPosition [0.840312 * safezoneW + safezoneX,0.104 * safezoneH + safezoneY,0.149531 * safezoneW,((((ctrlPosition _lic2) select 1) + ((ctrlPosition _lic2) select 3)) - (0.104 * safezoneH + safezoneY)) + 0.011 * safezoneH];
      		_lic3 ctrlCommit 0;
      	} else {
      		(CONFIG(getNumber,"rscLayer")) cutRsc["msg",(CONFIG(getText,"kindOfCutRsc")),(CONFIG(getNumber,"fadein"))];
      		if ((CONFIG(getNumber,"noSound")) isEqualTo 0) then { playSound [(CONFIG(getText,"sound")),true]; };
      		_display = uiNamespace getVariable "msg";
      		_lic1 = _display displayCtrl 9001;
      		_lic2 = _display displayCtrl 9002;
      		_lic3 = _display displayCtrl 9003;
      		_lic4 = _display displayCtrl 9004;
      		_lic1 ctrlSetStructuredText parseText format["<t size='1.1px'>%1</t>",_title];
      		_lic1 ctrlSetPosition [0.842468 * safezoneW + safezoneX,0.115 * safezoneH + safezoneY,0.142219 * safezoneW,ctrlTextHeight _lic1];
      		_lic1 ctrlCommit 0;
      		_lic2 ctrlSetPosition [0.845469 * safezoneW + safezoneX,((ctrlPosition _lic1) select 1) + ((ctrlPosition _lic1) select 3) + (0.00325 * safezoneH),0.139219 * safezoneW,0.0055 * safezoneH];
      		_lic2 ctrlCommit 0;
      		_lic2 ctrlSetBackgroundColor [(_color select 0),(_color select 1),(_color select 2),0.7];
      		_lic3 ctrlSetStructuredText parseText format["<t size='0.9px'>%1</t>",_text];
      		_lic3 ctrlSetPosition [0.845469 * safezoneW + safezoneX,((ctrlPosition _lic1) select 1) + ((ctrlPosition _lic1) select 3) + (2 * (0.0055 * safezoneH)),0.139219 * safezoneW,ctrlTextHeight _lic3];
      		_lic3 ctrlCommit 0;
      		_lic4 ctrlSetPosition [0.840312 * safezoneW + safezoneX,0.104 * safezoneH + safezoneY,0.149531 * safezoneW,((((ctrlPosition _lic3) select 1) + ((ctrlPosition _lic3) select 3)) - (0.104 * safezoneH + safezoneY)) + 0.011 * safezoneH];
      		_lic4 ctrlCommit 0;
      	};
      	waitUntil { sleep 0.1; (!isNull _display) };
      	waitUntil { sleep 0.1; (isNull _display) };
      	msg_array = msg_array - [_msg];
      };
      //if ((!_simpl) && ((CONFIG(getNumber,"overlap")) isEqualTo 0)) then { msg_active = false; };
      msg_active = false;
      Alles anzeigen
      Code: fn_handle.sqf
      #define CONFIG(TYPE,SETTING) TYPE(missionConfigFile >> "Message_Settings" >> SETTING)
      /*
          File: fn_handle.sqf
          Author: Leon "DerL30N" Beeser"
          Description:
          Handles incoming messages and creates a array
      */
      private["_param1","_param2","_param3","_param4","_error","_text","_title","_color","_simpl"]; _error = false;
      _param1 = [_this, 0, nil] call BIS_fnc_param;
      _param2 = [_this, 1, nil] call BIS_fnc_param;
      _param3 = [_this, 2, nil] call BIS_fnc_param;
      _param4 = [_this, 3, nil] call BIS_fnc_param;
      if (isNil "_param1") exitWith {};
      if ((_param1 isEqualType "") OR (_param1 isEqualType text "")) then	
      {
      	_text = _param1;
      	if (!(isNil "_param2")) then 
      	{
      		if ((_param2 isEqualType "") OR (_param2 isEqualType text "")) then	
      		{
      			if (isClass (missionConfigFile >> "Colors" >> _param2)) then
      			{
      				_title = (CONFIG(getText,"baseTitel"));
      				_color = _param2;
      				if (!(isNil "_param3")) then 
      				{
      					if (_param3 isEqualType true) then 
      					{
      						_simpl = _param3;
      					} else {
      						_error = true; diag_log format["MSG Error : Parameter No.3 erwartet Bool | Parameter : %1",[_param1,_param2,_param3]];
      					};
      				} else {
      					_simpl = false;
      				};
      			} else {
      				_title = _param2;
      				if (!(isNil "_param3")) then 
      				{
      					if ((_param3 isEqualType "") OR (_param3 isEqualType text "")) then	
      					{
      						if (isClass (missionConfigFile >> "Colors" >> _param3)) then
      						{
      							_color = _param3;
      							if (!(isNil "_param4")) then 
      							{
      								if (_param4 isEqualType true) then 
      								{
      									_simpl = _param4;
      								} else {
      									_error = true; diag_log format["MSG Error : Parameter No.4 erwartet Bool | Parameter : %1",[_param1,_param2,_param3,_param4]];
      								};
      							} else {
      								_simpl = false;
      							};
      						} else {
      							_error = true; diag_log format["MSG Error : Parameter No.3 erwartet String oder Text | Parameter : %1",[_param1,_param2,_param3]];
      						};
      					} else {
      						if (_param3 isEqualType true) then 
      						{
      							_color = (CONFIG(getText,"baseColor"));
      							_simpl = _param3;
      						} else {
      							_error = true; diag_log format["MSG Error : Parameter No.3 erwartet String oder Text oder Bool | Parameter : %1",[_param1,_param2,_param3]];
      						};
      					};
      				} else {
      					_color = (CONFIG(getText,"baseColor"));
      					_simpl = false;
      				};
      			};
      		} else {
      			if (_param2 isEqualType true) then 
      			{
      				_title = "";
      				_color = (CONFIG(getText,"baseColor"));
      				_simpl = _param2;
      			} else {
      				_error = true; diag_log format["MSG Error : Parameter No.2 erwartet Bool oder Text oder String | Parameter : %1",[_param1,_param2]];
      			};
      		};
      	} else {
      		_title = (CONFIG(getText,"baseTitel"));
      		_color = (CONFIG(getText,"baseColor"));
      		_simpl = false;
      	};
      } else {
      	_error = true; diag_log format["MSG Error : Parameter No.1 erwartet String oder Text | Parameter : %1",[_param1]];
      };
      if (_error) exitWith {};
      if ((isNil "msg_array") OR (isNil "msg_active")) then { msg_array = []; msg_active = false; };
      msg_array = msg_array + [[_text,_title,_color,_simpl]];
      /*if ((_simpl) && ((CONFIG(getNumber,"overlap")) isEqualTo 1)) then {
      	if (!msg_active) exitWith { [] spawn MSG_fnc_ctrl;
      } else {
      	if (!msg_active) exitWith { [] spawn MSG_fnc_ctrl; msg_active = true; };
      };*/
      if (!msg_active) exitWith { [] spawn MSG_fnc_ctrl; msg_active = true; };
      /*
      [_text,_title,_color,_simpl] call MSG_fnc_handle;
      [_text,_title,_color,_simpl] remoteExec ["MSG_fnc_handle",_target];
      1.[Text]
      2.[Text],[Titel] OR [Text],[Color] OR [Text],[Simple]
      3.[Text],[Titel],[Color] OR [Text],[Titel],[Simple] OR [Text],[Color],[Simple]
      4.[Text],[Titel],[Color],[Simple]
      */
      Alles anzeigen
      Code: msg.hpp
      class msg {
          idd = -1;
          duration = 180;
          movingEnable = 0;
          fadein = 1;
          fadeout = 3;
          name = "msg";
      	onLoad="uiNamespace setVariable ['msg',_this select 0]";
          objects[] = {};
      	class controlsBackground {
      		class background: msg_sText
      		{
      			idc = 9004;
      			x = 0.840312 * safezoneW + safezoneX;
      			y = 0.104 * safezoneH + safezoneY;
      			w = 0.149531 * safezoneW;
      			h = 0.132 * safezoneH;
      			colorBackground[] = {-1,-1,-1,0.7};
      		};
      	};
      	class controls {
      		class titel: msg_sText
      		{
      			idc = 9001;
      			text = "";
      			x = 0.842468 * safezoneW + safezoneX;
      			y = 0.115 * safezoneH + safezoneY;
      			w = 0.142219 * safezoneW;
      			h = 0.033 * safezoneH;
      		};
      		class colorbar: msg_text
      		{
      			idc = 9002;
      			x = 0.845469 * safezoneW + safezoneX;
      			y = 0.148 * safezoneH + safezoneY;
      			w = 0.139219 * safezoneW;
      			h = 0.0055 * safezoneH;
      		};
      		class messagebox: msg_sText
      		{
      			idc = 9003;
      			text = "";
      			x = 0.845469 * safezoneW + safezoneX;
      			y = 0.159 * safezoneH + safezoneY;
      			w = 0.139219 * safezoneW;
      			h = 0.066 * safezoneH;
      		};
      	};
      };
      class msg_simpl {
          idd = -1;
          duration = 180;
          movingEnable = 0;
          fadein = 1;
          fadeout = 3;
          name = "msg_simpl";
      	onLoad="uiNamespace setVariable ['msg_simpl',_this select 0]";
          objects[] = {};
      	class controlsBackground {
      		class background: msg_sText
      		{
      			idc = 9003;
      			x = 0.840312 * safezoneW + safezoneX;
      			y = 0.104 * safezoneH + safezoneY;
      			w = 0.149531 * safezoneW;
      			h = 0.132 * safezoneH;
      			colorBackground[] = {-1,-1,-1,0.7};
      		};
      	};
      	class controls {
      		class colorbar: msg_text
      		{
      			idc = 9001;
      			x = 0.845469 * safezoneW + safezoneX;
      			y = 0.104 * safezoneH + safezoneY;
      			w = 0.139219 * safezoneW;
      			h = 0.0055 * safezoneH;
      		};
      		class messagebox: msg_sText
      		{
      			idc = 9002;
      			x = 0.845469 * safezoneW + safezoneX;
      			y = 0.115 * safezoneH + safezoneY;
      			w = 0.139219 * safezoneW;
      			h = 0.066 * safezoneH;
      		};
      	};
      };
      Alles anzeigen

      Wenn alle befolgt wurde, dann wurde die Version 1.1 erfolgreich installiert, nun kann sie noch in der Scripts_Master.hpp konfiguriert werden.

      Info zur Verwendung

      [] call MSG_fnc_handle oder doch eher [] remoteExec ["MSG_fnc_handle",_target]; ? Informationen findest du dazu im Spoiler zur alten Version, relativ weit am Ende unter dem Punkt "Alternative remoteExec"

      Parameter

      In dieser Version stehen vier sogenannter Parameter zur Verfügung :

      [_text,_title,_color,_simpl] call MSG_fnc_handle; oder [_text,_title,_color,_simpl] remoteExec ["MSG_fnc_handle",_target];

      _text ist der erste Parameter, dieser geht IMMER vorweg, er steht für euren Text
      _titel ist der Parameter für euren Titel, dieser muss nicht angegeben werden, wird er aber angeben, so muss er nach dem ersten Parameter ( _text ) stehen.
      _color ist der Parameter für die Colorbar, mit ihm könnt ihr die Farbe dessen verändern. Auch dieser Parameter muss nicht angegeben werden, wird er angegeben, so muss er nach dem zweiten Parameter ( _titel ) stehen.
      _simpl ist der Parameter, der zwischen der normalen und der vereinfachten Dialogform wechseln kann. Auch dieser Parameter muss nicht angegeben werden, wird er angegeben, so muss er nach dem dritten Parameter ( _color ) stehen.

      Der Standardwert der Parameter

      _text hat keinen Standardwert, da ihr einen Text angeben müsst, welchen ihr ausgeben wollt.
      _titel hat den Standardwert "Notification" ( dieser kann geändert werden in der HPP), wird kein Parameter angegeben, so wird dieser Wert verwendet.
      _color hat den Standardwert "lightblue" ( dieser kann geändert werden in der HPP), wird kein Parameter angegeben, so wird dieser Wert verwendet.
      _simpl hat den Standardwert "false", wird kein Parameter angegeben, so wird dieser Wert verwendet.

      Wenn man diese Regel beachtet, sind folgende Parameter möglich :

      1 Parameter : [Text]

      2 Parameter : [Text,Titel] OR [Text,Color] OR [Text,Simple]

      3 Parameter : [Text,Titel,Color] OR [Text,Titel,Simple] OR [Text,Color,Simple]

      4 Parameter : [Text,Titel,Color,Simple]

      Freier Scripter und Programmierer aus Leidenschaft

      Projektideen gerne an die Pinnwand, aber bitte KEINE Projektanfragen per PN

    • Lokiro67
      Frischling
      Trophäen
      8
      Beiträge
      1
      • 15. Oktober 2016 um 17:33
      • #15

      hey how i can call a a texte in stringtable with your alternative hint ?

      if i try [localize "STR_NOTF_surrender"] call MSG_fnc_handle; that dorrect ?

    • Lucian
      Amateur
      Reaktionen
      172
      Trophäen
      11
      Beiträge
      204
      Bilder
      5
      • 15. Oktober 2016 um 20:53
      • #16
      Zitat von Lokiro67

      hey how i can call a a texte in stringtable with your alternative hint ?

      if i try [localize "STR_NOTF_surrender"] call MSG_fnc_handle; that dorrect ?

      That should work fine.

    • DerL30N
      Schüler
      Reaktionen
      67
      Trophäen
      10
      Beiträge
      125
      • 16. Oktober 2016 um 00:08
      • #17

      it´s pretty simple, look at this :

      Code
      [(localize "STR_NOTF_surrender")] call MSG_fnc_handle;

      The brackets () let the script now, that this is only one parameter if you print only a var oder a text like this (take a look below for example) then you don´t need any bracket.

      Code
      [_myMessage] call MSG_fnc_handle;
      ["Yout a bowring test message"] call MSG_fnc_handle;


      But if you want to print a message wich need a command or just more than use just one couple of brackets to let the script now, this is only one parameter.

      Example :


      Code
      [(localize "STR_ATM_WithdrawMin"),"green",true] call MSG_fnc_handle;
      
      
      
      
      green is just an extra param for a specific color
      and true is for the simple print


      I hope i could help you and solved your problem so far!

      Freier Scripter und Programmierer aus Leidenschaft

      Projektideen gerne an die Pinnwand, aber bitte KEINE Projektanfragen per PN

    • GenApophis
      Fortgeschrittener
      Reaktionen
      49
      Trophäen
      10
      Beiträge
      303
      • 9. November 2016 um 08:25
      • #18

      Hallo liebe Community,
      wenn ich das jetzt alles richtig verstanden habe funktoiniert das folgendermaßen:

      Alter code ist:

      Code
      exitwith {hint format[localize "STR_NOTF_NE_1",[_price] call life_fnc_numberText,localize _displayName];};

      neuer code dann:

      Code
      _text = localize "STR_NOTF_NE_1",[_price] call life_fnc_numberText,localize _displayName;
      [_text] remoteExec ["MSG_fnc_handle",0];

      Ist das so richtig?

      GA Gaming Community

      TS3.GA-Gaming.de

    • nflug
      Nerd
      Reaktionen
      225
      Trophäen
      9
      Beiträge
      781
      • 9. November 2016 um 10:19
      • #19

      Nein,
      Versuch es mal so:

      Code
      [format[localize "STR_NOTF_NE_1",[_price] call life_fnc_numberText,localize _displayName]] remoteExec ["MSG_fnc_handle",0];

      #MAKE_ARMA_NOT_WAR

      ⥴ Scripts made with love

      Why do programmers work in dark rooms?

      Because light attracts bugs...

    • Saturin78
      Profi
      Reaktionen
      409
      Trophäen
      10
      Beiträge
      1.340
      • 9. November 2016 um 11:21
      • #20

      Sorry, wenn ich nun extrem blöde frage, aber funktioniert das nur wenn man RemoteExec hat? Weil ich nutze AL 4.0 und dort habe ich ja keine Remoteexec. Oder bring ich da grad was durcheinander?

      Tapse mich wieder ins Arma3 xxx-Life rein :D

    Registrieren oder Einloggen

    Du bist noch kein Mitglied von Native-Servers.com? Registriere dich kostenlos und werde Teil einer großartigen Community!

    Benutzerkonto erstellen

    Ähnliche Themen

    • Neue Spieler "Menüs" ?!

      • John_Parker
      • 22. Juni 2017 um 19:42
      • Hilfeforum

    Wichtige Links & Informationen

    Server & Hosting-Ressourcen

      Server Administration & Hosting Basics

      Windows Server Support & Guides

      Linux Server Configuration & Help

      Setting up TeamSpeak 3 & VoIP Servers

      Domains & Web Hosting for Beginners & Professionals

      Cloud Hosting, Docker & Kubernetes Tutorials

    Gameserver & Modding-Ressourcen

      ArmA 3 Tutorials & Script Collection

      Renting & Operating Gameservers

      DayZ Server Management & Help

      FiveM (GTA V) Server & Script Development

      Rust Server Modding & Administration

      Setting up & Optimizing ARK Survival Servers

    NodeZone.net – Deine Community für Gameserver, Server-Hosting & Modding

      NodeZone.net ist dein Forum für Gameserver-Hosting, Rootserver, vServer, Webhosting und Modding. Seit 2015 bietet unsere Community eine zentrale Anlaufstelle für Server-Admins, Gamer und Technikbegeisterte, die sich über Server-Management, Hosting-Lösungen und Spielemodding austauschen möchten.


      Ob Anleitungen für eigene Gameserver, Hilfe bei Root- und vServer-Konfigurationen oder Tipps zu Modding & Scripting – bei uns findest du fundiertes Wissen und praxisnahe Tutorials. Mit einer stetig wachsenden Community findest du hier Antworten auf deine Fragen, Projektpartner und Gleichgesinnte für deine Gaming- und Serverprojekte. Schließe dich NodeZone.net an und werde Teil einer aktiven Community rund um Server-Hosting, Gameserver-Management und Modding-Ressourcen.

    Wer jetzt nicht teilt ist selber Schuld:
    1. Nutzungsbestimmungen
    2. Verhaltensregeln
    3. Datenschutzerklärung
    4. Impressum
    5. Urheberrechts- oder Lizenzverstoß melden
  • Trimax Design coded & layout by Gino Zantarelli 2023-2025©
    Community-Software: WoltLab Suite™