Moin,
da ja anscheinend Interesse besteht hier mal das TuT dafür. Leider habe ich es noch nicht geschafft das mit den PlayerTags ausführlich zu testen aber zu mindestens der Ausweis sowie Z Inventar und Schlüsselweitergabe funktionieren . Kurz zum Hintergrund wir wollten auf unserem Server die Playertags abschalten, da man ja auch im echten Leben seinen Namen nicht über dem Kopf trägt . Leider gab es dann immer noch Leute die dann der Meinung waren das Z-Inventar bzw. die Schlüsselweitergabe dafür zunutzen sich die Namen der anderen Leute zu beschaffen. Also haben wir auch hier eine Filterfunktion eingebaut um das Z-Spotten zu unterbinden. Des Weiteren wollten wir aber keine permanten Ausweise nutzen und man "kennt" sich halt immer nur bis zum Weltuntergang.
Sollte ihr die folgenden Erweiterung verwenden bitte ich Euch die Änderungen in den Dateien zu dokumentieren und mich als Modifier einzutragen!
Hiermit untersage ich die Verbreitung des von mir verfassten Tutorials in anderen Foren ohne vorher mein Einverständnis dazu einzuholen.
Also fangen wir mal an:
1. Einbinden eines Ausweises:
Öffnet Euere Functions.h in der Missiondatei
2. Erstellt 2 neue Dateien im Ordner ausweis
//Author: PierreAmyf ### Some edits by Lost of Paradise (Sebi, Oktas, moeck)
if(isServer)exitWith{};
private["_msg","_unit"];
_unit = _this select 0;
life_known_Players pushBack _unit;
_msg = _this select 1;
hintSilent parseText _msg;
Achtung in der Ausweiszeigen ist die einzige Stelle die sich je nach Version unterscheidet! Achja wenn ihr eine Version ab 4.x verwendet solltet ihr dann auch den Aufruf in der CFGRemote freigeben sonst kann es nicht funktionieren.
//Author: PierreAmyf ### Some edits by Lost of Paradise (Sebi, Oktas, moeck)
if(isServer)exitWith{};
private["_ziel", "_rang", "_marke", "_org", "_message", "_rang","_name"];
if(vehicle player != player )exitWith{};
_ziel = cursorTarget;
if(isNull _ziel) then {_ziel = player;};
if(!(_ziel isKindOf "Man")) then {_ziel = player;};
if(!(alive _ziel)) then {_ziel = player;};
if(player distance _ziel > 6) exitWith {hint parseText format ["<t color='#FFFF00'>Deine Arme sind viel zu kurz um den Ausweis zu zeigen! Geh näher ran.</t>"]}; // Nix mehr mit auf 500m Ausweis zeigen.
switch(playerSide)do{
case west:{
switch (call life_coplevel) do{
case 1: { _rang = "Paradise Police Dept."; };
case 2: { _rang = "Zoll"; };
case 3: { _rang = "Paradise Police Dept."; };
case 4: { _rang = "Paradise Police Dept."; };
case 5: { _rang = "Paradise Police Dept."; };
case 6: { _rang = "Paradise Police Dept."; };
case 7: { _rang = "Paradise Police Dept."; };
default { _rank = "Error";};
};
_marke = "marke_cop";
_org = "Polizei Altis";
};
case east:{
switch (call life_adaclevel) do{
case 1: { _rang = "ADAC Praktikant"; };
case 2: { _rang = "ADAC Azubi"; };
case 3: { _rang = "ADAC Geselle"; };
case 4: { _rang = "ADAC Techniker"; };
case 5: { _rang = "ADAC Meister"; };
case 6: { _rang = "ADAC Co.Chef"; };
case 7: { _rang = "ADAC Chef"; };
case 8: { _rang = "Leitung"; };
};
_marke = "marke_ziv";
_org = "ADAC Altis";
};
case independent:{
switch (call life_mediclevel) do{
case 1: { _rang = "Ersthelfer"; };
case 2: { _rang = "Rettungshelfer"; };
case 3: { _rang = "Rettungsanitäter"; };
case 4: { _rang = "Notfallsanitäter"; };
case 5: { _rang = "ARS"; };
case 6: { _rang = "Lehrrettungsassistent"; };
case 7: { _rang = "ÄrztlicherLeiter"; };
default { _rank = "Error";};
};
_marke = "marke_medic";
_org = "Altis Rescue Service";
};
case civilian:{
if(playerSide == civilian)then{
_rang = "Zivilist";
_org = "Republik Altis";
_marke = "marke_ziv";
// Gruppen spezifische Ausweise, wenn man möchte kann man Gruppierungsausweise hinterlegen. Die funktionieren nur, wenn man die Lizenz besitzt und einen entsprechenden Clantag oder Nachnamen trägt!
if ((license_civ_group) && (name player find "Group" != -1)) then { _marke = "marke_group"; _org = "Group";};
}else{
_rang = "Zivilist";
_marke = "marke_abi";
_org = "Republik Altis";
};
};
};
//Die Bilder müssen in einen entsprechenden Ordner abgelegt werden in unserem Fall icons
_message = format["<img size='10' color='#FFFFFF' image='icons\%1.paa'/><br/><br/><t size='2.5' color='#F4FA58'>%2</t><br/><t size='1.8'>%3</t><br/><t size='1'>%4</t>",_marke, name player, _rang, _org];
//Hier muss man den Aufruf ändern wenn man nicht die 3.1.4.8 verwendet! Ab 4.4 muss remoteExec verwendet werden! Bitte entsprechenden eurer Version den Aufruf nutzen.
// bis 4.0
[[player, _message],"life_fnc_Ausweissehen",_ziel,false] spawn life_fnc_MP;
// 4.4 - 5.0
//[player,_message] remoteExec ["life_fnc_Ausweissehen",_ziel];
Alles anzeigen
Folgenden Eintrag müsst ihr in der CfgRemoteExec.hpp einfügen, wenn ihr eine Version > 4.x verwendet.
Achtung die Bilder für die Ausweise liegen bei uns im Ordner icons, falls ihr die wo anders ablegen wollt müsst ihr den Pfad in der Zeile _message anpassen. Bitte tauscht den Perso gegen Euere eigenen Bilder aus!
Zum Testen könnt ihr die Bilder in den Ordner Icons schmeissen.
3. Anlage der Variable zur Speicherung der Spieler
So damit habt ihr erstmal den Ausweis eingefügt und ihr speichert die Leute, die euch den Ausweis gezeigt haben.
4. Erweiterung fn_p_updateMenu.sqf
Sucht nach dem folgendem Eintrag
{ if (player distance _x < 10) then {_near_units pushBack _x};} forEach playableUnits;
und ersetz diesen mit diesem Eintrag.
{ life_known_Players pushBackUnique _x; } forEach (units(group player));
{ if((player distance _x < 10) && {_x in life_known_Players}) then {_near_units pushBack _x};} foreach playableUnits;
Anschliessend müsst ihr das noch für den Schlüssel ebenfalls machen.
5. Erweiterung fn_keyMenu.sqf
Sucht wieder nach dem Eintrag
{ if (player distance _x < 20) then {_near_units pushBack _x};} forEach playableUnits;
und ersetzt diesen durch den folgenden
//Gruppenmitglieder sind immer bekannt ;-)
{ life_known_Players pushBackUnique _x; } forEach (units(group player));
{ if((player distance _x < 20) && {_x in life_known_Players}) then {_near_units pushBack _x};} foreach playableUnits;
So jetzt haben wir das Z-Spotten unterbunden und es werden nur noch "Bekannte" im Z-Menü angezeigt sofern sie in Reichweite sind.
6. Playertags (nicht getestet)
Da ich die letzten Tage unterwegs war hatte ich leider keine Zeit um hier einen ausführlichen Test durch zuführen. Sollte ich hier noch was ändern werde ich es natürlich hier dokumentieren bzw. meldet Euch falls es noch Fehler gibt.
Sucht in der fn_playerTags.sqf nach
_units = nearestObjects[(visiblePosition player),["Man","Land_Pallet_MilBoxes_F","Land_Sink_F"],50];
und ersetzt den Eintrag durch
{ life_known_Players pushBackUnique _x; } forEach (units(group player));
_units = nearestObjects[(visiblePosition player),["Land_Pallet_MilBoxes_F","Land_Sink_F"],50];
{ if((player distance _x < 50) && {_x in life_known_Players}) then {_units pushBack _x};} foreach playableUnits;
So damit hätten wir es auch schon geschafft. Ich wünsche Euch viel Spass damit.
In eigener Sache falls Euch das Script gefällt und ihr unbedingt was dafür ausgeben wollt könnt ihr uns gern unterstützen.
7. Funktion über das Mausrad verfügbar machen.
life_actions = life_actions + [player addAction["<t color='#FFFF00'>Ausweis zeigen</t>",life_fnc_Ausweiszeigen,"",1,false,true,"",'!isNull cursorTarget && cursorTarget isKindOf "Man"']];
Damit kann man seinem Gegenüber erstmal den Ausweis zeigen und anschliessend ist er auch im Z-Menü sichtbar.
Gruß,
moeck