Hallo GG Community
Heute werde ich euch erklären, wie ihr einen Paintball Script auf euren Server einbaut.
Das Script ist nicht von mir, übersetze das nur für euch. Gepostet wurde es von RyanTT.
Euer Aktuelles Gear wird gespeichert. Ihr bekommt beim Beitritt eines Spieles eine Uniform, Waffe und Magazine. Ist das Spiel zuende, ist die Uniform, Waffe und Magazine wieder weg und ihr habt euer Aktuelles Gear wieder.
Diese Nachricht werden alle sehen, wo auf dem Server sind. Meldet sich in den 60 Sekunden niemand an, wird die Lobby geschlossen.
Melden sich 2-10 Spieler an, wird das Spiel in 60 Sekunden beginnen.
Getestet wurde das auf der 3.1.4.8 und läuft ohne probleme.
Was braucht ihr dafür?
Eine Paintball Arena (Seid Kreativ, und baut euch eine im Editor)
Fangen wir mal an.
1. Öffnet eure Functions.h und fügt folgendes hinzu: (Achtet auf die { };)
Unter class Functions das hier hinzufügen:
2. Geht in euren Ordner core und erstellt da einen neuen Ordner namens paintball
3. In diesem Ordner erstellt ihr nun eine neue sqf datei namens pb_join.sqf mit folgendem Inhallt:
if (joinmode==0) then {
_PUID = getPlayerUID player;
_spielerGeld = life_cash;
hint "Eine Anfrage wurde an den Server gesendet, bitte warte einen Moment";
[[_PUID,_spielerGeld],"TON_fnc_paintball",false,false] spawn life_fnc_MP;
joinmode = 1;
} else {
hint "Du bist der Lobby bereits beigetreten, versuche es später noch einmal!";
};
4. Im gleichen Ordner wieder eine neue sqf erstellen namens fn_pb_response.sqf mit folgendem Inhallt:
private["_respondmode","_message"];
_respondmode = [_this,0,0,[0]] call BIS_fnc_param;
if (_respondmode==1) then {
_message = [_this,1,"",[""]] call BIS_fnc_param;
hint format ["%1",_message];
};
if (_respondmode==2) then {
player addEventHandler ["handleDamage", {false}];
playMusic "LeadTrack02_F_Bootcamp";
hint "Willkommen in der Paintballarena! Das kommende Spiel wird 5 Minuten gehen, viel Spaß!";
meinePos = getPos player;
[] call life_fnc_saveGear;
player enableFatigue false;
meingear = life_gear;
life_gear set [16,[]];
RemoveAllWeapons player;
{player removeMagazine _x;} foreach (magazines player);
removeUniform player;
removeVest player;
removeBackpack player;
removeGoggles player;
removeHeadGear player;
player forceAddUniform "U_I_Protagonist_VR";
player addWeaponGlobal "hgun_Pistol_heavy_02_Yorris_F";
player addMagazines ["6Rnd_45ACP_Cylinder" , 25];
{
player unassignItem _x;
player removeItem _x;
} foreach (assignedItems player);
player allowDamage false;
_wohin = round(random (count pb_positionen));
if (_wohin==count pb_positionen) then {_wohin=_wohin-1;};
_position = pb_positionen select _wohin;
player setPos _position;
tode = 0;
player addEventHandler ["Hit", {
_wohin = round(random (count pb_positionen));
if (_wohin==count pb_positionen) then {_wohin=_wohin-1;};
_position = pb_positionen select _wohin;
player setPos _position;
tode = tode+1;
_maxGeld = 100;
_grenzeAusz = 30;
_geldTod = _maxGeld/_grenzeAusz;
_punkte = _grenzeAusz-tode;
hintSilent parseText format ["<t align='center' color='#00E500' size='1.3'>Statistik</t><br/><br/><t align='left'>Tode</t><t align='right'>%1</t><br/><t align='left'>Punkte</t><t align='right'>%2</t>",tode,_punkte];
}];
};
if (_respondmode==3) then {
life_gear = meingear;
[] spawn life_fnc_Loadgear;
player setPos meinePos;
player allowDamage true;
player removeAllEventHandlers "Hit";
player addEventHandler["handleDamage",{_this call life_fnc_handleDamage;}];
player enableFatigue true;
_grenzeAusz = 30;
if (tode>=_grenzeAusz) then {
hint "Das Spiel wurde beendet. Leider hast du nicht genügend Punkte erspielt, um einen Geldpreis zu erhalten!";
} else {
_maxGeld = 100;
_geldTod = _maxGeld/_grenzeAusz;
_punkte = _grenzeAusz-tode;
_geldMin= _geldTod*tode;
_gesamt = _maxGeld-_geldMin;
life_cash = life_cash + _gesamt;
hint format ["Das Spiel wurde beendet. Du hast insgesamt %1 Punkte erspielt und einen Geldpreis ($%2) erhalten. Glückwunsch!",_punkte,_gesamt];
};
};
if (_respondmode==4) then {playMusic "LeadTrack06_F";};
if (_respondmode==5) then {
_message = [_this,1,"",[""]] call BIS_fnc_param;
hint format ["%1",_message];
life_cash = life_cash - 100;
};
Alles anzeigen
player forceAddUniform "U_I_Protagonist_VR";
player addWeaponGlobal "hgun_Pistol_heavy_02_Yorris_F";
player addMagazines ["6Rnd_45ACP_Cylinder" , 25];
Hier könnt ihr selber entscheiden, welche Uniform und Waffen ihr benutzen wollt für Paintball. Denkt daran, falls ihr die Waffe änderet, auch die richtigen Magazine dafür einzutragen.
Etwas weiterunten, könnt ihr auch noch das Preisgeld bestimmen. Sollte eigentlich selbsterklärend sein.
5. Öffnet eure core\functions und erstellt dort eine neue sqf namens fn_ryn_message.sqf mit folgendem Inhallt:
private["_titel","_message"];
_titel = [_this,0,"",[""]] call BIS_fnc_param;
_message = [_this,1,"",[""]] call BIS_fnc_param;
_hint = parseText format ["<t color='#ffff00'>%1</t><br/><br/><t color='#FFFFFF'>%2</t>", _titel,_message];
hint _hint;
Alles anzeigen
Nun kommen wir zur life_server
1. Öffnet eure config.cpp und fügt folgendes unter class Gangs ein:
class Paintball
{
file = "\life_server\Functions\paintball";
class paintball {};
class game {};
};
Das ganze sollte nun in etwa so aussehen:
Spoiler anzeigen
class Gangs
{
file = "\life_server\Functions\Gangs";
class insertGang {};
class queryPlayerGang {};
class removeGang {};
class updateGang {};
};
class Smartphone
{
file = "\life_server\Functions\Smartphone";
class handleMessages {};
class msgRequest {};
class cleanupMessages {};
};
class Paintball
{
file = "\life_server\Functions\paintball";
class paintball {};
class game {};
};
2. Öffnet eure init.sqf und fügt folgendes ganz unten ein:
3. Geht in euren Ordner Functions und erstellt darin einen neuen Ordner namens paintball
4. Erstellt in dem Ordner paintball eine neue sqf namens fn_game.sqf mit folgendem Inhallt:
pb_spielstatus=1;
[["Paintballarena","Ein Spieler hat soeben eine Lobby in der Paintballarena eröffnet! Die Lobby schließt sich in 60 Sekunden!"],"life_fnc_ryn_message",true,false] spawn life_fnc_MP;
sleep 60;
if (count pb_spieler>=2) then {
pb_spielstatus=2;
{
[[2],"life_fnc_pb_response",_x,false] spawn life_fnc_MP;
} forEach pb_spieler;
sleep 60;
_msg = "Das Spiel läuft noch 4 Minuten";
{
[[1,_msg],"life_fnc_pb_response",_x,false] spawn life_fnc_MP;
} forEach pb_spieler;
sleep 60;
_msg = "Das Spiel läuft noch 3 Minuten";
{
[[1,_msg],"life_fnc_pb_response",_x,false] spawn life_fnc_MP;
} forEach pb_spieler;
sleep 60;
_msg = "Das Spiel läuft noch 2 Minuten";
{
[[1,_msg],"life_fnc_pb_response",_x,false] spawn life_fnc_MP;
} forEach pb_spieler;
sleep 60;
_msg = "Das Spiel läuft noch eine Minute!";
{
[[1,_msg],"life_fnc_pb_response",_x,false] spawn life_fnc_MP;
[[4],"life_fnc_pb_response",_x,false] spawn life_fnc_MP;
} forEach pb_spieler;
sleep 60;
{
[[3],"life_fnc_pb_response",_x,false] spawn life_fnc_MP;
} forEach pb_spieler;
pb_spieler = [];
pb_spielstatus = 0;
joinmode = 0;
publicVariable "joinmode";
} else {
_msg = "Da zu wenig Spieler sich in der Lobby befanden wurde das Spiel abgebrochen!";
{
[[1,_msg],"life_fnc_pb_response",_x,false] spawn life_fnc_MP;
} forEach pb_spieler;
pb_spieler = [];
pb_spielstatus=0;
joinmode = 0;
publicVariable "joinmode";
};
Alles anzeigen
5. Erstellt im gleichen Ordner eine neue sqf namens fn_paintball.sqf mit folgendem Inhallt:
private["_uid"];
_uid = [_this,0,"",[""]] call BIS_fnc_param;
if (count pb_spieler==0&&pb_spielstatus==0) then {
[[],"TON_fnc_game",false,false] spawn life_fnc_MP;
pb_spielstatus = 1;
};
if (pb_spielstatus==1) then {
_uidarr = [_uid];
_geld = [_this,1,0,[0]] call BIS_fnc_param;
if (_geld>=5000) then {
pb_spieler = pb_spieler + _uidarr;
[[5,"Du wurdest erfolgreich für das kommende Spiel angemeldet!"],"life_fnc_pb_response",_uid,false] spawn life_fnc_MP;
} else {
[[1,"Du hast keine 5000 Dollar bei dir!"],"life_fnc_pb_response",_uid,false] spawn life_fnc_MP;
};
};
if ((pb_spielstatus==2&&count pb_spieler>=2)||(count pb_spieler==pb_maxspieler)) then {
[[1,"Leider hat das Spiel bereits begonnen oder die Lobby ist bereits voll, versuche es später noch einmal!"],"life_fnc_pb_response",_uid,false] spawn life_fnc_MP;
};
Alles anzeigen
Nun kommen wir zum Editor.
1. Erstellt einen npc bei eurer Paintball Arena mit folgender Init:
this allowdamage false; this enablesimulation false; this addaction ["Join Paintball","core\paintball\pb_join.sqf"];
Dieser ist dazu da, um ein Paintball Spiel zu starten.
Wollt ihr es so Real wie möglich hallten, stehlt diesen vor eure Paintball Arena.
Annsonsten kann der NPC kopiert werden, und z.b. in jede Größere Stadt platziert werden.
2. Jetzt geht es um die Spawns. Wiefiele Spawns ihr machen wollt ist euch überlassen. Öffnet eure initPlayerLocal im Hauptverzeichniss und fügt dies schonmal ganz unten ein: (Nicht schließen)
pb_positionen = [[3608.85,2219.53,0.00143051],[3584.06,2214.19,0.0014081],[3585.87,2187.19,0.00141621],[3581.91,2160.09,0.00136614],[3588.32,2136.56,0.00113297],[3609.25,2142.77,0.00124598],[3622.72,2151.85,0.001472],[3639.73,2159.28,0.00142336],[3643.36,2183.16,0.00156975],[3579.91,2196.1,0.0014658]];
joinmode = 0;
Ihr bewegt euch also in eurer Paintball Arena und sucht einen passenden Spawn aus. Wo der ist, ist euch überlassen. Habt ihr in gefunden, drückt ESC und gebt folgendes in eure Debug Konsole ein:
Danach auf Lokal ausführen.
Drückt erneut ESC, nun solltet ihr oben rechts einen hint angezeigt bekommen mit den Kordinaten.
Überschreibt diese Zahlen, die in eurer initPlayerLocal stehen.
Habt ihr nur 5 Spawns, ist das nicht schlimm. So tragt da nur 5 ein, und löscht die restlichen. (Auch hier bitte auf die [ ] , achten)
Wir sind nun am ende angekommen.
Sollte etwas nicht funktionieren, könnt ihr einfach in diesem Thread posten.
Viel spaß
MfG
Noldy