Hallo liebe Community!
Ich möchte euch heute ein Script von mir vorstellen, welches ich vor einiger Zeit auf Anfrage erstellt habe. Dieses Script wurde auf der Basis von Altis Life 5.0 erstellt und verwendet. Es ist aber rein theoretisch auf allen Versionen einbaubar.
Was bietet euch mein Script: Wenn ihr den Server betretet, dann habt ihr nun einen professionell wirkenden Ladebildschirm, welcher dem User Feedback gibt. Anstelle des schwarzen Hintergrunds erscheint nun ein völlig neues Menü. Dieses Menü ist auch passend zum mitgeliefertem Spawnmenü. Diese beiden Menüs sind aufeinander abgestimmt.
Der Ladebildschirm ist funktionell!! Er spiegelnd (sofern korrekt installiert) den Ladevorgang vom Script "Altis Life" oder "Tanoa Life" wieder.
Wenn der Client also nun fertig geladen ist, so kann der Spieler zum Spawnmenü vorrücken oder direkt wieder ins Leben einsteigen.
Ich lasse hier mal ein paar Bilder sprechen lassen...
Installationsanleitung: An einigen Stellen wird die Installation sehr umfangreich, von daher IMMER vorher ein BACKUP MACHEN!!
Ich habe im Anhang eine Zip-Datei hochgeladen, diese beinhaltet alle nötigen Files.
1. Schritt: Ergänzt folgenden Code-Schnipsel in eurer description.ext irgendwo zwischen der 1. und 4. Zeile.
Briefing = 0; // Add these at the top of the file !! somewhere between first and fifth line!
2. Schritt Functions.hpp fügt die Klasse "Dialog_Controls" bei "tag = "life";" ein
class Life_Client_Core {
tag = "life";
class Dialog_Controls {
file = "dialog\function";
class proLoading {};
class proLoadingText {};
};
};
3. Schritt InitPlayerLocal.sqf fügt folgendes über [] execVM "core\init.sqf"; ein
[] execVM "dialog\function\pro_loading.sqf"; // <- These line is Important ! Add it above init.sqf!!
Sollte dann so aussehen:
#include "script_macros.hpp"
/*
File: initPlayerLocal.sqf
Author:
Description:
Starts the initialization of the player.
*/
if (!hasInterface && !isServer) exitWith {
[] call compile preprocessFileLineNumbers "\life_hc\initHC.sqf";
}; //This is a headless client.
#define CONST(var1,var2) var1 = compileFinal (if (var2 isEqualType "") then {var2} else {str(var2)})
#define LIFE_SETTINGS(TYPE,SETTING) TYPE(missionConfigFile >> "Life_Settings" >> SETTING)
CONST(BIS_fnc_endMission,BIS_fnc_endMission);
if (LIFE_SETTINGS(getNumber,"spyGlass_toggle") isEqualTo 1) then {[] execVM "SpyGlass\fn_initSpy.sqf";};
[] execVM "dialog\function\pro_loading.sqf"; // <- These line is Important ! Add it above init.sqf!!
[] execVM "core\init.sqf";
Alles anzeigen
4. Schritt script_macros.hpp fügt folgendes ein
//ProLoading Macros
#define LDGBSE (uiNamespace getVariable "pro_loading")
#define LDGBAR(var) (LDGBSE displayCtrl 44201)progressSetPosition var;
#define LDGRED (LDGBSE displayCtrl 44201)ctrlSetTextColor [0.79,0,0,0.7];
#define LDGTXT(var) (LDGBSE displayCtrl 38501)ctrlSetStructuredText parseText format["<t align='center'>%1...</t>",var];
#define LDGVAR(var1,var2) LDGBAR(var1); LDGTXT(var2);
#define LDGEXT(var) (LDGBSE displayCtrl 2400)ctrlEnable var;
5. Schritt stringtable.xml fügt folgendes Paket zum Projekt "Altis Life RPG" hinzu
<Package name="pro_loading">
<Key ID="STR_lloading_exit">
<Original>Abort</Original>
<Czech></Czech>
<Spanish>Espalda</Spanish>
<Russian></Russian>
<German>Abbrechen</German>
<Italian>Indietro</Italian>
<French>Arrière</French>
<Portuguese>Costas</Portuguese>
<Polish></Polish>
</Key>
<Key ID="STR_lloading_ready">
<Original>Ready to go</Original>
<Czech></Czech>
<Spanish></Spanish>
<Russian></Russian>
<German>Bereit zum Spielen</German>
<Italian></Italian>
<French></French>
<Portuguese></Portuguese>
<Polish></Polish>
</Key>
</Package>
Alles anzeigen
Folgende Files beinhalten originalen Alits Life 5.0.0 standart code, welcher an einigen passagen geändert wurde!
Ich empfehle hier kein blindes copy & paste sondern kluges kopieren, FALLS andere Scripts vorinstalliert sind!
Ab hier können die Datein aus der Zip File genutzt werden, ich empfehle aber dem Tutorial weiter zu folgen...
Wer sich die Dateien aber selber anschauen möchte, kann dies tun, alle zu ergänzenden Code-Schnipsel sind mit "// Add these line" markiert
\core
6. Schritt fn_initCiv.sqf füge folgendes in Zeile 22 und 38 ein
7. Schritt fn_initCop.sqf füge folgendes in die Zeilen 12-14 und 21-23 ein
closeDialog 1; // Add These 3 Lines : 12,13,14
0 cutText["","BLACK FADED"];
0 cutFadeOut 9999999;
es sollte dann wie folgt aussehen
#include "..\script_macros.hpp"
/*
File: fn_initCop.sqf
Author: Bryan "Tonic" Boardwine
Description:
Cop Initialization file.
*/
waitUntil {!(isNull (findDisplay 46))};
if (life_blacklisted) exitWith {
closeDialog 1; // Add These 3 Lines : 12,13,14
0 cutText["","BLACK FADED"];
0 cutFadeOut 9999999;
["Blacklisted",false,true] call BIS_fnc_endMission;
sleep 30;
};
if (!(str(player) in ["cop_1","cop_2","cop_3","cop_4"])) then {
if ((FETCH_CONST(life_coplevel) isEqualTo 0) && (FETCH_CONST(life_adminlevel) isEqualTo 0)) then {
closeDialog 1; // Add These 3 Lines : 21,22,23
0 cutText["","BLACK FADED"];
0 cutFadeOut 9999999;
["NotWhitelisted",false,true] call BIS_fnc_endMission;
sleep 35;
};
};
player setVariable ["rank",(FETCH_CONST(life_coplevel)),true];
[] call life_fnc_spawnMenu;
waitUntil{!isNull (findDisplay 38500)}; //Wait for the spawn selection to be open.
waitUntil{isNull (findDisplay 38500)}; //Wait for the spawn selection to be done.
Alles anzeigen
8. Schritt fn_initMedic.sqf füge folgendes in Zeile 12-14 ein
closeDialog 1; // Add These 3 Lines : 12,13,14
0 cutText["","BLACK FADED"];
0 cutFadeOut 9999999;
sollte dann wie folgt aussehen
#include "..\script_macros.hpp"
/*
File: fn_initMedic.sqf
Author: Bryan "Tonic" Boardwine
Description:
Initializes the medic..
*/
waitUntil {!(isNull (findDisplay 46))};
if ((FETCH_CONST(life_medicLevel)) < 1 && (FETCH_CONST(life_adminlevel) isEqualTo 0)) exitWith {
closeDialog 1; // Add These 3 Lines : 12,13,14
0 cutText["","BLACK FADED"];
0 cutFadeOut 9999999;
["Notwhitelisted",false,true] call BIS_fnc_endMission;
sleep 35;
};
[] call life_fnc_spawnMenu;
waitUntil{!isNull (findDisplay 38500)}; //Wait for the spawn selection to be open.
waitUntil{isNull (findDisplay 38500)}; //Wait for the spawn selection to be done.
Alles anzeigen
9. Schritt init.sqf Diese datei ist extrem unüberschaubar, aber als Faustregel gillt: 0 cutText[localize "STR_Init_ClientSetup","BLACK FADED"]; und 0 cutFadeOut 9999999; wurden durch ähnlichen code ersetzt: LDGVAR((0.20),(localize "STR_Init_ClientSetup"));
Ersetzt folgendes in der Init.sqf, sodass es nachher so ausschaut wie im Beispiel
if (life_server_extDB_notLoaded) exitWith {
//(LOADINGBSE displayCtrl 44201)ctrlSetTextColor [0.79,0,0,0.7];
LDGVAR((1),(localize "STR_Init_ExtdbFail"));
LDGRED;
};
Beispiel findet ihr in der Zip-Datei, ich habe maximal 20.000 Zeichen zur Verfügung.
\core\session
10. Schritt fn_dataQuery.sqf fügt folgendes in Zeile 16 ein
LDGBAR(0.60); // These two lines are new !! 16,17
(LDGBSE displayCtrl 44202)ctrlSetStructuredText parseText format["<t align='center'>%1...</t>",(format[localize "STR_Session_Query",_uid])];
sollte dann so aussehen
#include "..\..\script_macros.hpp"
/*
File: fn_dataQuery.sqf
Author: Bryan "Tonic" Boardwine
Description:
Starts the 'authentication' process and sends a request out to
the server to check for player information.
*/
private ["_uid","_side","_sender"];
if (life_session_completed) exitWith {}; //Why did this get executed when the client already initialized? zensiert arma...
_sender = player;
_uid = getPlayerUID _sender;
_side = playerSide;
LDGBAR(0.60); // These two lines are new !! 16,17
(LDGBSE displayCtrl 44202)ctrlSetStructuredText parseText format["<t align='center'>%1...</t>",(format[localize "STR_Session_Query",_uid])];
if (life_HC_isActive) then {
[_uid,_side,_sender] remoteExec ["HC_fnc_queryRequest",HC_Life];
} else {
[_uid,_side,_sender] remoteExec ["DB_fnc_queryRequest",RSERV];
};
Alles anzeigen
11. Schritt fn_insertPlayerInfo.sqf füge folgendes in Zeile 12
LDGVAR((0.85),(localize "STR_Session_QueryFail")); // Add These line !!!
sollte dann so aussehen
if (life_session_completed) exitWith {}; //Why did this get executed when the client already initialized? zensiert arma...
LDGVAR((0.85),(localize "STR_Session_QueryFail")); // Add These line !!!
private ["_bank"];
switch (playerSide) do {
case west: {
_bank = LIFE_SETTINGS(getNumber,"bank_cop");
};
12. Schritt fn_requestReceived.sqf füge folgendes in Zeile 15-19 ein
if (life_session_tries > 3) exitWith {
LDGVAR((1),(localize "STR_Session_Error")); // Add these two Line 15,16
LDGRED;
};
LDGVAR((0.80),(localize "STR_Session_Received")); // Add these line !!
sollte dann so aussehen
....
private _count = count _this;
life_session_tries = life_session_tries + 1;
if (life_session_completed) exitWith {}; //Why did this get executed when the client already initialized? zensiert arma...
if (life_session_tries > 3) exitWith {
LDGVAR((1),(localize "STR_Session_Error")); // Add these two Line 15,16
LDGRED;
};
LDGVAR((0.80),(localize "STR_Session_Received")); // Add these line !!
//Error handling and junk..
if (isNil "_this") exitWith {[] call SOCK_fnc_insertPlayerInfo;};
if (_this isEqualType "") exitWith {[] call SOCK_fnc_insertPlayerInfo;};
....
Alles anzeigen
\dialog
13. Schritt MasterHandler.hpp Codeschnipsel bitte direkt nach der commen.hpp einfügen
14. Schritt pro_loading.hpp ist teil der neuen Dateien, welche durch das Script dazu kommen. Bitte es der Zip-Datei in das Verzeichnis "\dialog" kopieren.
15. Schritt spawnSelection.hpp Diese Datei löschen und aus der MasterHandler.hpp entfernen
\dialog\function
16. Schritt
Folgende Dateien kommen neu hinzu und können daher direkt aus der Zip-Datei kopiert werden.
fn_proLoading.sqf
fn_proLoading,sqf Hier könnt ihr euren anzuzeigenden Text bearbeiten
pro_loading.sqf
fn_spawnConfirm.sqf
fn_spawnMenu.sqf
fn_spawnPointSelected.sqf
27. Schritt alles speichern nachdem ihr zuvor ein Backup gemacht habt und mir dann schreiben, welche Version ihr nutzt.
In der Zip-Datei ist auch extra noch mal eine Installations-Anleitung enthalten, falls diese im Forum nicht verständlich ist.
Ich wünsche euch ein schönes Wochenende und viel Spaß mit dem Script!!!
Bei Fragen oder Problemen bitte einfach hier im Beitrag melden, Danke!