gruppe-adler / TvT_Catch_The_Flight.Stratis

low tech TvT scenario with focus on player interactions
0 stars 0 forks source link

mord: upgradeverteilung #20

Closed Fusselwurm closed 7 years ago

AdlerSalbei commented 7 years ago

Ich hab mal ein bisschen Code hierfür gemacht:

_this params ["_deceased", "_killer" "_pistol", "_rifle", "_radio"];
_upgradePlayerList = [[],[],[]];
_upgradesList = [
                    {
                        //Upgrade Tier 1
                        [_player, _pistol, 2] call _giveMagazin;                
                        _player addWeaponGlobal _pistol;
                    },
                    {
                        //Upgrade Tier 2
                        [_player, _rifle, 2] call _giveMagazin;         
                        _player addWeaponGlobal _rifle;
                    },
                    {
                        //Upgrade Tier 3
                        [_player, _rifle, 1] call _giveMagazin;
                        _player addItem _radio; 
                        _player assignItem _radio;
                    },
                    {
                        //Upgrade Tier 4
                        [_player, _rifle, 2] call _giveMagazin;
                        _player addItem "ACE_Banana";
                        _player addItem "SmokeShell";
                    }
                ];

_giveMagazin = {
    _player = _this select 0;
    _weapon = _this select 1;
    _amount = _this select 2;

    _magazines = getArray (configFile / "CfgWeapons" / _weapon / "magazines");
    _mag = selectRandom _magazines;

    for "_i" from 1 to _amount do { 
        _player addMagazineGlobal _mag;
    }
};

{
    if (alive _x && (side _x) != (side _killer) && (faction _x) != "OPF_F" && (vehicleVarName _x) != "unit_indep_c" && (_x distance2D _deceased) >= 200) then
    { 
        _weaponArray = weapons player;
        if (_weaponArray isEqualTo []) exitWith
        {
            (_upgradePlayerList select 0) pushBackUnique _x;
        };

        if !(player hasWeapon _rifle) then 
        {
            (_upgradePlayerList select 1) pushBackUnique _x;   
        }else{
            if !(player hasWeapon _radio then{
                (_upgradePlayerList select 2) pushBackUnique _x;
            }else{
                (_upgradePlayerList select 3) pushBackUnique _x;
            };
        };
    };
}forEach allPlayers - entities "HeadlessClient_F";

{
    _nichtLeerePlayerList = [_x, { _this == [] }] call CBA_fnc_reject
    _player = selectRandom _nichtLeerePlayerList;
    _player call {_upgradesList select _forEachIndex };
}forEach _upgradePlayerList;

Übergebn werden muss nur Toter + Pistole + Langwaffe + Funkgerät. Es fehlt nur noch das waffen geben.

Fusselwurm commented 7 years ago

:laughing: wenn wir die Pyramid of Doom im Code oben noch in besser verdauliche Häppchen zerhackt kriegen, würd ich das direkt so als Funktion einbauen

AdlerSalbei commented 7 years ago

Hab es einmal überarbeitet.

AdlerSalbei commented 7 years ago

Hier noch eine Alternative auf wunsch von Zade:

//in der InitServer.sqf ausführen
UpgradePlayerTier  = [[],[],[],[]];
{
    if ((faction _x) != "OPF_F" && (vehicleVarName _x) != "unit_indep_c") then
    {
        (UpgradePlayerTier select 0) pushBackUnique _x;
    };
}forEach allPlayers - entities "HeadlessClient_F";

//an den Kill EH anhängen

_index = UpgradePlayerTier find _deceased;
UpgradePlayerTier deleteAt _index; 
_side = side _deceased;
_player = "";

_upgradesList = [
                    {
                        //Upgrade Tier 1
                        [_player, _pistol, 2] call _giveMagazin;                
                        _player addWeaponGlobal _pistol;
                    },
                    {
                        //Upgrade Tier 2
                        [_player, _rifle, 2] call _giveMagazin;         
                        _player addWeaponGlobal _rifle;
                    },
                    {
                        //Upgrade Tier 3
                        [_player, _rifle, 1] call _giveMagazin;
                        _player addItem _radio; 
                        _player assignItem _radio;
                    },
                    {
                        //Upgrade Tier 4
                        [_player, _rifle, 2] call _giveMagazin;
                        _player addItem "ACE_Banana";
                        _player addItem "SmokeShell";
                    }
                ];

_giveMagazin = {
    _player = _this select 0;
    _weapon = _this select 1;
    _amount = _this select 2;

    _magazines = getArray (configFile / "CfgWeapons" / _weapon / "magazines");
    _mag = selectRandom _magazines;

    for "_i" from 1 to _amount do { 
        _player addMagazineGlobal _mag;
    }
};

{
    _playerArray = _x;
    _bool = "false";
    while {true} do 
    {
        _player = selectRandom _playerArray;
        _index = _playerArray find _player;
        _playerArray deleteAt _index;

        if ((_player distance2D _deceased) >= 200 && (side _player) == _side) exitWith {_bool = "true";};
        if ((count _playerArray) == 0) exitWith{}
    };

    if (_bool == "true") exitWith 
    {
        _player call {_upgradesList select _forEachIndex};
        _index = _playerArray find _player;
        (UpgradePlayerTier select _forEachIndex) deleteAt _index;
        (_upgradePlayerList select (_forEachIndex +1)) pushBackUnique _x;
    };
}forEach UpgradePlayerTier;
Fusselwurm commented 7 years ago

okay bin dran