Beiträge von Lucian
-
-
Nette Sache wenn ich jetzt Verwendung dafür hatte würde ich aber
Den 2 Parameter ändern das man die zeit beim aufrufen einstellt
Ja klar, habe noch überlegt, ob ich die NN Version von dem Skript so mache, dass man direkt die Zeit eingeben kann. An sich ist das auch nur eine kleine Änderung, die eigentlich jeder selber machen kann.
Bei DE100 brauchen wir das nicht. Da reicht lang und kurz. -
Hallo NN,
heute stelle ich der Öffentlichkeit das DE100-Benachrichtigungssystem zur Verfügung, welches ich für DE100 entwickelt habe.
Über den Sinn eines solchen Skripts kann man sich streiten. Ich habe das Skript eigentlich nur entwickelt, da mich die Hints abgefuckt haben und ich Langeweile hatte.
Hier eine kleine Vorschau:
Wie man auf dem GIF sieht, kann man zwei verschiedene Arten von Meldungen anzeigen.
Grün(UserFarbe) = Normale Meldung.
Rot(ErrorFarbe) = Fehler/Error Meldung.
Es werden auch verschiedene Sounds, je nach Art der Meldung, abgespielt.
Desweiteren kann man die Meldungen langsam("slow") oder schnell("fast") ausblenden lassen.
Skript (Funktioniert mit allen Life Versionen, solange man die script_macros von 4.x einfügt):C: fn_notification_system.sqf
Alles anzeigen#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 (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
In der configuration.sqf muss noch eine Zeile eingefügt werden:
life_open_notifications = [];Usage:
["TEXT",false,"fast"] call life_fnc_notification_system;
0: Text <STRING>
1: Type <BOOLEAN> false = noError true = Error
2: Speed <STRING> fast = fadeout nach 5 sek, slow = fadeout nach 15 sek -
Ich denke das hier kaum einer Ahnung davon hat, mich eingeschlossen. Ich habe mich zwar mal damit befasst aber das ist schon etwas länger her. Ich kann dir da nur den Blog von KillzoneKid empfehlen.
http://killzonekid.com/tag/scheduler/ -
Anstatt eine ganze Funktion zu schreiben, whiteliste say3D in der cfgRemoteExec/commands.
Syntax:
[souece,sound] remoteExec ["say3D",tatget]; -
-
Tritt das Problem immer auf oder nur beim ersten öffnen des Menüs?
-
Heute will ich euch eine kleine Hilfestellung geben, um eine kleine "unschönheit" in den meisten Altis Life Versionen zu fixen.
Ich war auf unzähligen Servern und bei fast allen habe ich solche Dialoge gefunden (Auswahl erfolgte rein zufällig. Ich möchte keinen Server damit angreifen oder beleidigen.):
Quelle: LiveYourLife.ccEin StructuredText oder ähnliche Controls welche nicht dynamisch angepasst werden, dabei ist das ganz doch relativ einfach.
Am Ende sieht das dann etwa so aus (Die Auswahl war nicht zufällig, da dieser Dialog von mir erstellt wurde):
Quelle: DE100-Altis.lifeDer Code der dahinter steckt ist besteht eigentlich aus drei Befehlen.
ctrlTextHeight
ctrlSetPosition
ctrlCommitBsp. Lizenzen
JavaScript_dialog = findDisplay 2001; _lic = _dialog displayCtrl 2014; ... _lic ctrlSetStructuredText parseText format["<t size='0.8px'>%1</t>",_licTxt]; _lic ctrlSetPosition [0,0,0.1080105 * safezoneW,ctrlTextHeight _lic]; _lic ctrlCommit 0;
Ich hoffe ich konnte einigen damit helfen, da das eigentlich ein simpler aber sehr nützlicher Trick ist.
- Lucian
-
Meine basiert auf 3.1.4.8. Allerdings mit remoteexec und alles auf Config Files umgestellt. Also eine Mischung aus 3.1.4.8 und 4.4
-
Display Eventhandler onKeyDown und onKeyUp
https://community.bistudio.com/wiki/User_Interface_Event_HandlerskeyDown ist diese KeyHandler Datei.
Für keyUp würde ich einfach eine ähnliche Datei erstellen. -
mikerotools
-
Das ist zwar nicht optimal dafür, aber es funktioniert ubd formatiert dir alles.
-
Ggef. BI/Arma3 über Twitter anschreiben und fragen die Antwort in der Regel in 30 Minuten bis 2 Stunden.
-
1:1 geht nicht. Für das NVG würde ich einfach einen Speedclicker-Schutz benutzten.
-
Bei mir in der fn_openInventory
Code
Alles anzeigenif((_vehicle getVariable ["trunk_in_use",false])) exitWith {hint localize "STR_MISC_VehInvUse"}; _vehicle setVariable["trunk_in_use",true,true]; if((_vehicle getVariable ["trunk_user",getPlayerUID player]) != getPlayerUID player) exitWith {hint localize "STR_MISC_VehInvUse"}; _vehicle setVariable["trunk_user",getPlayerUID player,true]; ... _vehicle spawn { uiSleep random 0.3; if (_this getVariable ["trunk_user",getPlayerUID player] != getPlayerUID player) exitWith { closeDialog 0; hint localize "STR_MISC_VehInvUse";}; waitUntil {sleep 2; isNull (findDisplay 3500)}; _this setVariable["trunk_in_use",false,true]; _this setVariable["trunk_user",nil,true]; if(_this isKindOf "Car" OR _this isKindOf "Air") then { if (life_HC_isActive) then { [_this] remoteExecCall ["HC_fnc_vehicleSaveInventory",HC_Life]; } else { [_this] remoteExecCall ["TON_fnc_vehicleSaveInventory",RSERV]; }; }; };
und in der fn_vehTakeItem/fn_vehStoreItem
-
Wo genau ?
Vehicle Trunk oder Shops oder Player Inv? -
Ggef. das loggen über die A3log extension machen, für eine bessere Übersicht.
-
Also um das Datum und die Zeit zu bekommen kannst du das benutzen:
Richtige Uhrzeit bekommen -
Nahh doch. Habe bei mir die Erfahrung gemacht, dass das Bild durch das colorBackground Attribute weg war. Also einfach mal die colorBackground löschen.
-
Die Fehlermeldungen hier im Thema posten oder per PN ?