Moin Moin,
da mir die Standard Killnachrichten von Arma nicht gefallen haben und ich etwas mehr Abwechslung haben wollte, habe ich mir das mal angeschaut und was dazu gebaut.
Script: fn_deathmessage
Version: Altis Life (alle Versionen / Achtung Hinweise beachten)
Schiwerigkeitsgrad: Fortgeschrittener (mittel) - ein gewisses Scriptverständnis wird zum Bearbeiten vorausgesetzt!
Funktionen:
~ ersetzt die Standard Arma Kill Nachrichten durch eigene.
Wie immer dürft ihr das Tutorial gern verwenden und weiter entwickeln, allerdings ohne mein Einverständnis nicht in anderen Foren veröffentlichen.
Das Script funktioniert mit sollte mit allen Versionen funktionieren. Bitte beachtet die Hinweise, was für ältere Versionen geändert werden muss. Ich habe das Script erfolgreich mit 3.1.4.8 und 5.0 getestet. Aber nun genug der Vorrede lasst uns anfangen.
1. Server.armaprofile
Hier müsste ihr die Standard Nachrichten ausschalten. Die Schwiriegkeit sollte in der Regel bereits auf Customstehen. Dort müsst ihr dann deathMessages = 1; // Killed by auf deathMessages = 0; // Killed by ändern.
2. Erweiterung des Stringtables
Ich müsst das Package dann in den Stringtable übernehmen. Sucht Euch eine passende Stelle. Zum Beispiel nach dem Package Notification oder am Ende des Stringtables. Natürlich könnt ihr die Meldung noch weiter anpassen und auch weitere hinzufügen.
<Package name="Kill_Strings">
<Key ID="STR_NOTF_Murdered_Car_0">
<Original>%1 was killed by %2s %3.</Original>
<German>%1 wurde von %2s %3 getötet.</German>
</Key>
<Key ID="STR_NOTF_Murdered_Car_1">
<Original>%1 was killed by %2s %3.</Original>
<German>%1 wurde von %2s %3 plattgemacht.</German>
</Key>
<Key ID="STR_NOTF_Murdered_Air_0">
<Original>%1 was killed by %2s %3.</Original>
<German>%1 wurde von %2s %3 getötet.</German>
</Key>
<Key ID="STR_NOTF_Murdered_Air_1">
<Original>%1 was killed by %2s %3.</Original>
<German>%1 wurde von %2s %3 plattgemacht.</German>
</Key>
<Key ID="STR_NOTF_Murdered_Air_2">
<Original>%1 was killed by %2s %3.</Original>
<German>%1 wurde von %2s %3 geschreddert.</German>
</Key>
<Key ID="STR_NOTF_Murdered_Ship_0">
<Original>%1 was killed by %2s %3.</Original>
<German>%1 wurde von %2s %3 getötet.</German>
</Key>
<Key ID="STR_NOTF_Murdered_Ship_1">
<Original>%1 was killed by %2s %3.</Original>
<German>%1 wurde von %2s %3 plattgemacht.</German>
</Key>
<Key ID="STR_NOTF_Murdered_0">
<Original>%1 was killed by %2.</Original>
<German>%1 wurde von %2 plattgemacht.</German>
</Key>
<Key ID="STR_NOTF_Murdered_1">
<Original>%1 was burned by %2.</Original>
<German>%1 wurde von %2 übern Haufen geballert.</German>
</Key>
<Key ID="STR_NOTF_Murdered_2">
<Original>%1 was slashed by %2.</Original>
<German>%1 wurde von %2 um die Ecke gebracht.</German>
</Key>
<Key ID="STR_NOTF_Murdered_3">
<Original>%1 was murdered by %2.</Original>
<German>%1 wurde von %2 gegrillt.</German>
</Key>
<Key ID="STR_NOTF_Copkill_Car_1">
<Original>%1 was killed by %2s %3.</Original>
<German>%1 wurde von %2s %3 getötet.</German>
</Key>
<Key ID="STR_NOTF_Copkill_Car_0">
<Original>%1 was killed by %2s %3.</Original>
<German>%1 wurde von %2s %3 plattgemacht.</German>
</Key>
<Key ID="STR_NOTF_Copkill_Air_1">
<Original>%1 was killed by %2s %3.</Original>
<German>%1 wurde von %2s %3 getötet.</German>
</Key>
<Key ID="STR_NOTF_Copkill_Air_2">
<Original>%1 was killed by %2s %3.</Original>
<German>%1 wurde von %2s %3 plattgemacht.</German>
</Key>
<Key ID="STR_NOTF_Copkill_Air_0">
<Original>%1 was killed by %2s %3.</Original>
<German>%1 wurde von %2s %3 geschreddert.</German>
</Key>
<Key ID="STR_NOTF_Copkill_Ship_1">
<Original>%1 was killed by %2s %3.</Original>
<German>%1 wurde von %2s %3 getötet.</German>
</Key>
<Key ID="STR_NOTF_Copkill_Ship_0">
<Original>%1 was killed by %2s %3.</Original>
<German>%1 wurde von %2s %3 plattgemacht.</German>
</Key>
<Key ID="STR_NOTF_Copkill_1">
<Original>%1 was killed by %2.</Original>
<German>%1 wurde von %2 plattgemacht.</German>
</Key>
<Key ID="STR_NOTF_Copkill_2">
<Original>%1 was killed by %2.</Original>
<German>%1 wurde von %2 übern Haufen geballert.</German>
</Key>
<Key ID="STR_NOTF_Copkill_0">
<Original>%1 was killed by %2.</Original>
<German>%1 wurde von %2 übern Jordan geschickt.</German>
</Key>
<Key ID="STR_NOTF_Suicide_Car_1">
<Original>%1 was killed by %2.</Original>
<German>%1 wurde getötet, weil er seine(n) %2 nicht fahren kann.</German>
</Key>
<Key ID="STR_NOTF_Suicide_Car_0">
<Original>%1 tried to breath the wall. %1 was killed</Original>
<German>%1 war zu doof zum Autofahren!.%1 wurde getötet!</German>
</Key>
<Key ID="STR_NOTF_Suicide_Car_2">
<Original>%1 was to stupid to drive his %2.</Original>
<German>%1 wurde getötet, weil er mit seine(n) %2 einen Crash Test machen wollte.</German>
</Key>
<Key ID="STR_NOTF_Suicide_Air_0">
<Original>%1 needs some flight training. %1 was killed</Original>
<German>%1 braucht dringend Flugstunden. %1 wurde getötet!</German>
</Key>
<Key ID="STR_NOTF_Suicide_Air_1">
<Original>%1 was killed by %2.</Original>
<German>%1 muss das %2 fliegen noch üben! %1 wurde getötet!</German>
</Key>
<Key ID="STR_NOTF_Suicide_Air_2">
<Original>%1 wasn't able to fly his %2. %1 was killed!</Original>
<German>%1 sollte das %2 fliegen lassen. %1 wurde getötet!</German>
</Key>
<Key ID="STR_NOTF_Suicide_Air_3">
<Original>%1 is now medium-well.. %1 was killed!</Original>
<German>%1 sollte das %2 fliegen lassen. %1 wurde getötet!</German>
</Key>
<Key ID="STR_NOTF_Suicide_Ship_1">
<Original>%1 was killed by %2.</Original>
<German>%1 wurde von %2 getötet.</German>
</Key>
<Key ID="STR_NOTF_Suicide_Ship_0">
<Original>%1 was killed by %2s %3.</Original>
<German>%1 wurde von %2 plattgemacht.</German>
</Key>
<Key ID="STR_NOTF_Suicide_0">
<Original>%1 is now one with the earth thanks to physics.</Original>
<German>%1 wollte nicht mehr weiterleben. %1 wurde getötet!</German>
</Key>
<Key ID="STR_NOTF_Suicide_1">
<Original>%1 mistook the ground for a pool.</Original>
<German>%1 wurde von einen Buch erschlagen. %1 wurde getötet!</German>
</Key>
<Key ID="STR_NOTF_Suicide_2">
<Original>%1 got killed by death.</Original>
<German>%1 ist über einen spitzen Stein gestolpert! %1 wurde getötet!</German>
</Key>
<Key ID="STR_NOTF_Suicide_3">
<Original>%1 got killed by death.</Original>
<German>%1 hat wohl vergessen zu Essen und Trinken! %1 wurde getötet!</German>
</Key>
<Key ID="STR_NOTF_Suicide_4">
<Original>%1 got killed by death.</Original>
<German>%1 konnte doch nicht fliegen! %1 wurde getötet!</German>
</Key>
</Package>
Alles anzeigen
3. Erweiterung der fn_onPlayerKilled.sqf
Sucht Euch den folgenden Eintrag heraus. Achtung hier könnte der Eintrag auch etwas anders aussehen, vorallem wenn ihr die 3.1.4.8 verwendet.
params [
["_unit",objNull,[objNull]],
["_killer",objNull,[objNull]]
];
disableSerialization;
if !((vehicle _unit) isEqualTo _unit) then {
UnAssignVehicle _unit;
_unit action ["getOut", vehicle _unit];
_unit setPosATL [(getPosATL _unit select 0) + 3, (getPosATL _unit select 1) + 1, 0];
};
Alles anzeigen
Diesen Eintrag ersetzt ihr mit folgendem
params [
["_unit",ObjNull,[ObjNull]]
,["_killer",ObjNull,[ObjNull]]
];
disableSerialization;
private _unitName = _unit getVariable ["realname",name _unit];
private _killerName = "";
private _vehicle = ObjNull;
if (!isNull _killer && {!(_killer isEqualTo _unit)}) then {
_killerName = _killer getVariable ["realname",name _killer];
if !(objectParent _killer isEqualTo _killer) then {_vehicle = objectParent _killer};
};
if !((vehicle _unit) isEqualTo _unit) then {
if (isNull _vehicle) then {_vehicle = vehicle _unit};
UnAssignVehicle _unit;
_unit action ["getOut", vehicle _unit];
_unit setPosATL [(getPosATL _unit select 0) + 3, (getPosATL _unit select 1) + 1, 0];
};
Alles anzeigen
Anschliessend müsst ihr noch etwas weiter unten Euch das folgende raussuchen. Auch hier gibt es Unterschiede zwischen 3.1.4.8 und neueren Versionen!
if (!isNull _killer && {!(_killer isEqualTo _unit)} && {!(side _killer isEqualTo west)} && {alive _killer}) then {
if (vehicle _killer isKindOf "LandVehicle") then {
if (life_HC_isActive) then {
[getPlayerUID _killer,_killer getVariable ["realname",name _killer],"187V"] remoteExecCall ["HC_fnc_wantedAdd",HC_Life];
} else {
[getPlayerUID _killer,_killer getVariable ["realname",name _killer],"187V"] remoteExecCall ["life_fnc_wantedAdd",RSERV];
};
//Get rid of this if you don't want automatic vehicle license removal.
if (!local _killer) then {
[2] remoteExecCall ["life_fnc_removeLicenses",_killer];
};
} else {
if (life_HC_isActive) then {
[getPlayerUID _killer,_killer getVariable ["realname",name _killer],"187"] remoteExecCall ["HC_fnc_wantedAdd",HC_Life];
} else {
[getPlayerUID _killer,_killer getVariable ["realname",name _killer],"187"] remoteExecCall ["life_fnc_wantedAdd",RSERV];
};
if (!local _killer) then {
[3] remoteExecCall ["life_fnc_removeLicenses",_killer];
};
};
};
Alles anzeigen
dort fügt ihr folgendes ein.
if (!isNull _killer && {!(_killer isEqualTo _unit)} && {!(side _killer isEqualTo west)} && {alive _killer}) then {
if (vehicle _killer isKindOf "LandVehicle") then {
if (life_HC_isActive) then {
[getPlayerUID _killer,_killer getVariable ["realname",name _killer],"187V"] remoteExecCall ["HC_fnc_wantedAdd",HC_Life];
} else {
[getPlayerUID _killer,_killer getVariable ["realname",name _killer],"187V"] remoteExecCall ["life_fnc_wantedAdd",RSERV];
};
//Get rid of this if you don't want automatic vehicle license removal.
if (!local _killer) then {
[2] remoteExecCall ["life_fnc_removeLicenses",_killer];
};
} else {
if (life_HC_isActive) then {
[getPlayerUID _killer,_killer getVariable ["realname",name _killer],"187"] remoteExecCall ["HC_fnc_wantedAdd",HC_Life];
} else {
[getPlayerUID _killer,_killer getVariable ["realname",name _killer],"187"] remoteExecCall ["life_fnc_wantedAdd",RSERV];
};
if (!local _killer) then {
[3] remoteExecCall ["life_fnc_removeLicenses",_killer];
};
};
["killed",_unitName,_killerName,_vehicle] call life_fnc_deathmessage;
} else {
if(side _killer isEqualTo west && !(playerSide isEqualTo west)) then {
["copkill",_unitName,_killerName,_vehicle] call life_fnc_deathmessage;
} else {
["suicide",_unitName,_killerName,_vehicle] call life_fnc_deathmessage;
};
};
Alles anzeigen
4. Erstellen der fn_deathmessage.sqfim Ordner core\functions
Achtung bitte prüft hier ob der richtige Aufruf aktiviert ist! Hier in der Vorlage sind die Aufrufe für 4.4 oder neuer aktiviert. Für ältere Versionen müsst ihr die Aufrufe anpassen. Diese sind enthalten und müssen einkommentiert werden.
Solltet ihr weitere Meldungen einfügen wollen müsst ihr die Werte in den randoms entsprechend ändern (round(random (1))!
#include "..\..\script_macros.hpp"
/*
File: fn_deathmessage.sqf
Author: moeck (lostonparadise.de)
Description:
Random death messages
*/
params [
["_mode","",[""]]
,["_unitName","",[""]]
,["_killerName","",[""]]
,["_vehicle",ObjNull,[ObjNull]]
];
private _deathmsg = "";
private _vehicleName = "";
call {
if (_mode isEqualTo "killed") exitWith {
if (!isNull _vehicle) exitWith {
_vehicleName = FETCH_CONFIG2(getText,"CfgVehicles",(typeOf _vehicle),"displayName");
if (_vehicle isKindOf "Car") exitWith {
_deathmsg = format ["STR_NOTF_Murdered_Car_%1",(round(random (1)))];
};
if (_vehicle isKindOf "Air") exitWith {
_deathmsg = format ["STR_NOTF_Murdered_Air_%1",(round(random (2)))];
};
if (_vehicle isKindOf "Ship") exitWith {
_deathmsg = format ["STR_NOTF_Murdered_Ship_%1",(round(random (1)))];
};
};
if (isNull _vehicle) exitWith {
_deathmsg = format ["STR_NOTF_Murdered_%1",(round(random (3)))];
};
};
if (_mode isEqualTo "copkill") exitWith {
if (!isNull _vehicle) exitWith {
_vehicleName = FETCH_CONFIG2(getText,"CfgVehicles",(typeOf _vehicle),"displayName");
if (_vehicle isKindOf "Car") exitWith {
_deathmsg = format ["STR_NOTF_Copkill_Car_%1",(round(random (1)))];
};
if (_vehicle isKindOf "Air") exitWith {
_deathmsg = format ["STR_NOTF_Copkill_Air_%1",(round(random (2)))];
};
if (_vehicle isKindOf "Ship") exitWith {
_deathmsg = format ["STR_NOTF_Copkill_Ship_%1",(round(random (1)))];
};
};
if (isNull _vehicle) exitWith {
_deathmsg = format ["STR_NOTF_Copkill_%1",(round(random (2)))];
};
};
if (_mode isEqualTo "suicide") exitWith {
if (!isNull _vehicle) exitWith {
_vehicleName = FETCH_CONFIG2(getText,"CfgVehicles",(typeOf _vehicle),"displayName");
if (_vehicle isKindOf "Car") exitWith {
_deathmsg = format ["STR_NOTF_Suicide_Car_%1",(round(random (2)))];
};
if (_vehicle isKindOf "Air") exitWith {
_deathmsg = format ["STR_NOTF_Suicide_Air_%1",(round(random (3)))];
};
if (_vehicle isKindOf "Ship") exitWith {
_deathmsg = format ["STR_NOTF_Suicide_Ship_%1",(round(random (1)))];
};
};
if (isNull _vehicle) exitWith {
_deathmsg = format ["STR_NOTF_Suicide_%1",(round(random (4)))];
};
};
};
if (_mode in ["killed","copkill"]) then {
if (!isNull _vehicle) then {
[0,_deathmsg,true,[_unitName,_killerName,_vehicleName]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; //für neuere Versionen
//[[0,_deathmsg,true,[_unitName, _killerName,_vehicleName]],"life_fnc_broadcast",true,false] spawn life_fnc_MP; //für ältere Versionen
} else {
[0,_deathmsg,true,[_unitName,_killerName]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; //für neuere Versionen
//[[0,_deathmsg,true,[_unitName, _killerName]],"life_fnc_broadcast",true,false] spawn life_fnc_MP; //für ältere Versionen
};
} else {
if (!isNull _vehicle) then {
[0,_deathmsg,true,[_unitName,_vehicleName]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; //für neuere Versionen
//[[0,_deathmsg,true,[_unitName,_vehicleName]],"life_fnc_broadcast",true,false] spawn life_fnc_MP; //für ältere Versionen
} else {
[0,_deathmsg,true,[_unitName]] remoteExecCall ["life_fnc_broadcast",RCLIENT]; //für neuere Versionen
//[[0,_deathmsg,true,[_unitName]],"life_fnc_broadcast",true,false] spawn life_fnc_MP; //für ältere Versionen
};
};
Alles anzeigen
5. Hinzufügen der neuen Funktion in der Functions.hpp bzw. Function.h
Ich müsst die Functions.hpp öffnen und am Ende von class Functions folgenden Eintrag hinzufügen
6. Anpassung CfgRemoteExec.hpp
Dieser Schritt ist für die Versionen 4.4 oder neuer notwendig!
Sucht Euch den Eintrag F(TON_fnc_player_query,CLIENT)raus und fügt darunter das folgende ein
Damit hätten wir es auch schon geschafft. Ich hoffe das Tutorial gefällt Euch.
Gruß,
moeck