ACCESS DENIED!

Error!

ACCESS GRANTED!

Success!

ARMA 3 Editor:

 Undercover Operationen mit Punktesystem

Titelbild

Undercover Operationen mit Punktesystem


Autor: Commander

Undercover

Dieses System macht folgendes:

Spieler steigen in zivile Fahrzeuge und werden von feindlichen Einheiten nicht bekämpt, solange sie in Fahrzeugen sitzen.

Fahrzeuge der Fraktion CIV_F (egal welche) können die Spieler davor schützen von feindlichen Einheiten erkannt und bekämpft zu werden.

Jeder Spieler bekommt 2 Eventhandler, GetIn und GetOut. Die geben weiter wenn Spieler aus Fahrzeugen ein- oder aussteigen.

  1. Die Spieler steigen in ein Fahrzeug ein und es wird FÜR JEDEN EINZELNEN SPIELER folgendes geprüft
  2. Ist es ein ziviles Fahrzeug?
  3. Wenn ja, wie hoch ist der Wert der Variable scoreFire.
  4. Ist sie höher als scoreFire_min wird eine Zufallszahl (scoreFire_max) ermittelt
  5. Ist die Zufallszahl größer oder kleiner als scoreFire?
  6. Falls sie Größer ist, wird der jeweilige Spieler zur zivilen Person, die nicht von den feindlichen Einheiten beschossen bzw. bekämpft wird
  7. Falls sie kleiner ist, passiert nichts und die Spieler werden ganz normal erkannt und bekämpft.
  8. Alle 8 Sekunden (scoreFire_repeat) wird überprüft, ob scoreFire einen bestimmten Wert überschritten hat (scoreFire_lose_cloak). Ist der Wert höher, verlieren ALLE Spieler in ALLEN FAHRZEUGEN ihren zivilen Status und können ihn auch nicht wieder zurück erlangen.
  9. Ausserdem werden die jeweiligen Zustände überprüft (wie schnell ist das Fahrzeug, befinden sich die Spieler auf der Strasse, ist das Fahrzeug beschädigt, sitzen die Spieler überhaupt in einem Fahrzeug) und die jeweiligen Punkte dem Wert scoreFire hinzugefügt.

 

Beispiele

4 Spieler fahren 4 Minuten in einem (oder mehreren) Fahrzeugen durch die Gegend

4 Spieler * 4 Minuten * 60 Sekunden / 8 Sekunden für die Addierung der Punkte * 0.001 scoreFire_sitting_in_car = scoreFire erhöht sich insgesamt um 0,12 (Bei einem scoreFire_max von 200 also um 0,06%)

Das Gleiche mit 24 Spielern ist um das 6-fache erhöht also scoreFire = 0,72 also eine Erhöhung um 0,36%

Fahren die 4 Spieler nun zu schnell, also schneller als 50, aber langsamer als 60 sieht das nun wie folgt aus. Die 0,12 Erhöhung bleibt weiterhin bestehen! Zusätzlich kommt noch folgendes

4 * 4 * 60 /8 * 0.003 = 0,36

Mit 24 Spielern sind das 2,16 also eine Erhöhung um um 1,08%

Die Prozentwerte repräsentieren die Möglichkeit, das kein ziviler Schutz um einen Spieler aufgebaut wird.

Wenn also der Prozentwert bei 2% liegt, ist die Wahrscheinlichkeit bei 2%, dass EIN Spieler keinen zivilen Schutz bekommt. Allerdings eben für jeden Spieler der in ein Fahrzeug einteigt einzeln! Somit erhöht sich also die Wahrscheinlichkeit je öfter Spieler in ein Fahrzeug steigen bzw. je mehr Spieler in ein Fahrzeug steigen. Bei einer Wahrscheinlichkeit von 2% und 10 Spielern die in ein Fahrzeug steigen liegt die insgesamte Wahrscheinlichkeit, das einer der Spieler keinen Schutz bekommt bei 18,3%. Bei 20 Spielern liegt die Wahrscheinlichkeit dann bei 33,2%.

Fazit: Je mehr Spieler, desto höher die Chance entdeckt zu werden. Je öfter und auch stärker sich Spieler nicht an die Regeln halten, umso wahrscheinlicher ist es, dass der zivile Schutz nicht gewährt wird. Auch das pure Verbleiben in einem Fahrzeug führt früher oder später dazu, dass kein Schutz mehr gewährleistet wird.

Es gibt keinerlei Rückmeldung, dass der Schutz nicht gewährt wurde bzw. fallen gelassen wurde! Es gibt noch die Möglichkeit das Debuggen einzuschalten. Sowohl für Spieler die rudimentäre Infos bekommen oder für Missionsbauer bzw. zum scripten.

Man kann die Wahrscheinlichkeit mit Hilfe von random [min,mid,max] auf eine Gauss´schen Verteilung ändern und somit eine grössere Kontroller bzw. andere Wahrscheinlichkeiten erreichen.

Das System ist flexibel anpassbar und kann mit ein bisschen scripten für alles mögliche genutzt werden. Undercover Operationen werden hiermit leichter gemacht.

Debugmodus

Man kann Spieler in das Debugarray packen, so bekommt man einige Werte mitgeteilt und kann so überprüfen, ob das System vernünftig funktioniert.

Variablenanpassung

Mit Hilfe der am Anfang des Codes genannten Variablen kann man das System ganz nach belieben anpassen.

in init.sqf einfügen oder ohne if (isServer) wenn es in die die initServer.sqf kopiert wird.

if (isServer) then {

scoreFire = 0;

publicVariable "scoreFire";};

dies in die initPlayerLocal.sqf

//scoreFire = 0; //Basiswert der Wahrscheinlichkeit. Erhöht sich durch diverse Aktionen der Spieler. In init.sqf festlegen
scoreFire_debug_1 = true; // Debug Modus. true/false
scoreFire_debug_1_player = [kai_p];//Welche Spieler bekommen die Debug Infos
scoreFire_info_leader = false; //Informationen die an den/die Leader weitergeleitet werden
scoreFire_info_leader_player = [p1];//Welche Spieler bekommen die Informationen
scoreFire_repeat = 8; //Wie oft in Sekunden werden die Punkte addiert?
scoreFire_fired = 0.01; //Wie viele Punkte pro abgefeuertem Schuss?
scoreFire_sitting_in_car = 0.001; //Wie viele Punkte für in einem Fahrzeug sein
scoreFire_damaged_vehicle = 0.005; // Wie viele Punkte für das sitzen in einem beschädigten Fahrzeug
scoreFire_toofast_1 = [45,60,0.003]; //[geschwindigkeit ab wann, Geschwindigkeit bis wann, wieviele Punkte für die Geschwindigkeit zwischen den beiden Werten]
scoreFire_toofast_2 = [100,0.05];//[Geschwindigkeit bis wann, wieviele Punkte für die Geschwindigkeit zwischen toofast_1 select 1 und diesem]
scoreFire_toofast_3 = 0.1;// Wieviele Punkte für das Fahren über die in toofast_2 select 0 eingegebene Geschwindigkeit
scoreFire_offroad_range = 20;//Wie weit darf man sich von Strassen entfernen (Den Wert nicht zu klein wählen!)
scoreFire_ofroad = 0.01;//Wieviele Punkte für das Fahren außerhalb von Strassen
scoreFire_min = 8;//Basiswert ab wann überhaupt
scoreFire_max = [scoreFire_min,100,200];//Basiswert für die Ermittlung, ob die "Verkleidung" noch funktioniert.
scoreFire_lose_cloak = 120;//Überschreitet scoreFire diesen Wert, fällt die Verkleidung auch wenn die Spieler sich in Fahrzeugen befinden.

?

if (hasInterface) then {
    player addEventHandler ["GetInMan", "[_this select 0, _this select 2,'GetIn'] call CATD_fnc_makeCaptive;"];
    player addEventHandler ["GetOutMan", "[_this select 0, _this select 2,'GetOut'] call CATD_fnc_makeCaptive;"];
    player addEventHandler ["FiredMan", "scoreFirelocal = scoreFirelocal + scoreFire_fired;
        shots_fired_local = shots_fired_local + 1;"];
    };

CATD_fnc_makeCaptive = {
    params ["_player","_object","_getinout"];
        
    if (_getinout == "GetIn") then {
        inCivCar = true;
        CivCar = _object;
        _probability = random scoreFire_max;
        if (_probability < scoreFire_min) then {_probability = scoreFire_min;};
        if (faction _object == "CIV_F" && scoreFire < _probability) then {
            _player setCaptive true;
            };
        };
        
    if (_getinout == "GetOut") then {
        inCivCar = false;
        _player setCaptive false;
        };
    };

    
CATD_fnc_scoreFire = {
    if (isNil "scoreFirelocal") then {
        scoreFirelocal = 0;
        shots_fired_local = 0;
        inCivCar = false;
        };
        
    for "_i" from 1 to 10000 do {
        if (scoreFirelocal >= 0.2) then {
            missionNamespace getVariable "scoreFire";
            scoreFire = scoreFire + scoreFirelocal;
            publicVariable "scoreFire";
            missionNamespace getVariable "shots_fired";
            shots_fired = shots_fired + shots_fired_local;
            publicVariable "shots_fired";
            scoreFirelocal = 0;
            };
        if (inCivCar) then {
            scoreFirelocal = scoreFirelocal + scoreFire_sitting_in_car;
            if(scoreFire >= scoreFire_lose_cloak) then {player setCaptive false;};
            if ((damage CivCar) > 0) then {scoreFirelocal = scoreFirelocal + scoreFire_damaged_vehicle;};
            if (CivCar isKindOf "Car") then {
                _carspeed = speed CivCar;
                if (_carspeed >= scoreFire_toofast_1 select 0 && _carspeed < scoreFire_toofast_1 select 1) then {
                    scoreFirelocal = scoreFirelocal + (scoreFire_toofast_1 select 2);
                    };
                if (_carspeed >= scoreFire_toofast_1 select 1 && _carspeed < scoreFire_toofast_2 select 0) then {
                    scoreFirelocal = scoreFirelocal + (scoreFire_toofast_2 select 1);
                    };
                if (_carspeed >= scoreFire_toofast_2 select 0) then {
                    scoreFirelocal = scoreFirelocal + scoreFire_toofast_3;
                    };
                _arraynearoads = player nearRoads scoreFire_offroad_range;
                if (count _arraynearoads == 0) then {
                    scoreFirelocal = scoreFirelocal + scoreFire_ofroad;
                    };
                };
            };
        sleep scoreFire_repeat;
        };
    };
CATD_fnc_scoreFire_debug = {
    if (scoreFire_debug_1 && player in scoreFire_debug_1_player) then {
        hint "debug gestartet";
            while {true} do {
                _carspeed_debug = 0;
                _damage_car_debug = 0;
                _inCivCar = "nicht ";
                _allUnits =  east countSide allUnits;
                if (inCivCar) then {
                    _carspeed_debug = speed CivCar;
                    _damage_car_debug = damage CivCar;
                    _inCivCar = "";
                    };
                hintSilent format ["ScoreFire: %1\nScoreFirelocal: %2\nSpieler ist %5in Fahrzeug\nGeschwindigkeit: %3\nSchaden am Fahrzeug: %4\nVergangene Zeit : %6\nInsgesamt %7 Einheiten\n%8 getoetete feindliche Einheiten", scoreFire, scoreFirelocal, _carspeed_debug , _damage_car_debug, _inCivCar, time, _allUnits, enemies_killed];
                sleep 8;
                };
            };
    if (scoreFire_info_leader && player in scoreFire_info_leader_player) then {
        while {true} do {
            if (inCivCar) then {
                _scorefire_status = "<t size='1' color='#F2F2F2'>Sie befinden sich in einem zivilen Fahrzeug. Es ist fast ausgeschlossen, dass wir erkannt werden.<br/><br/><t align='center'>Status ist <t color='#40FF00'>Gruen</t>";
                _scorefire_status_variable = ((scoreFire_max select 2) - scoreFire_min)/3;
                if (scoreFire > scoreFire_min && scoreFire < _scorefire_status_variable) then  {
                    _scorefire_status = "<t size='1' color='#F2F2F2'>Sie befinden sich in einem zivilen Fahrzeug. Es ist fast ausgeschlossen, dass wir erkannt werden.<br/><br/><t align='center'>Status ist <t color='#FFFF00'>Gelb</t>";
                    _scorefire_color = "FFFF00";
                    };
                if (scoreFire >= _scorefire_status_variable ) then  {
                    _scorefire_status = "<t size='1' color='#F2F2F2'>Sie befinden sich in einem zivilen Fahrzeug. Eine Entdeckung ist kaum zu vermeiden. Viel Glueck!<br/><br/><t align='center'>Status ist <t color='#FF0000'>Rot</t>";
                    
                    };
                hintSilent parseText format ["%1", _scorefire_status];
                };
            sleep 10;
            };
        };
    };

    
        
[] spawn CATD_fnc_scoreFire_debug;    
[] call CATD_fnc_scoreFire;

 

 

 

Die letzten Einträge


x
Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen. OK