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 )
#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 )
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 )
#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 :
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
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
#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
#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 :
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.
// 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