Site icon Mission design

Jména objektů

To, že můžete v editoru pojmenovat jednotku a pak s tím jménem dále
pracovat, ví asi každý. Jak se dá jméno dále využívat si projdeme v následujících pár řádcích.

Dejme tomu, že jsem si v editoru vytvořil 8 vojáků a pojmenoval je
„soldier1“ až „soldier8“. A dejme tomu, že jsem si ručně vytvořil
8 značek a pojmenoval je „soldier1_target“ až „soldier8_target“

A teď si budu chtít vytvořit skript, který jednoho náhodně zvolí a pošle na „jeho“ target.

Zásadní v celé funkci bude příkaz vehicleVarName,
který vrátí název proměnné, takže jej následně můžeme použít pro vybrání názvu značky.

celo_fnc_send_soldier = {
        _soldiers = [_this,0,[],[[]]] call BIS_fnc_param;
        _soldier = _soldiers call BIS_fnc_selectRandom;
        if (!alive(_soldier)) exitWith {false};
        _soldier_name = vehicleVarName _soldier;
        // _soldier_name ted bude obsahovat string "soldierX" podle toho, jaky byl nahodne vybran
        _soldier doMove getMarkerPos (_soldier_name + "_target");
};
_soldiers = [soldier1,soldier2,soldier3,soldier4,soldier5,soldier6,soldier7,soldier8];
[_soldiers] call celo_fnc_send_soldier;

Pokud ale budeme chtít název objektu ve stringu i za cenu, že jej nebude
mít, pak využijeme BI funkci „BIS_fnc_objectVar“, která jej buď vrátí
(stejně jako vehicleVarName) nebo jej vygeneruje a taktéž vrátí.

A teď dejme tomu, že budeme mít string „soldier5“ a budeme chtít
získat objekt onoho vojáka, kterého jsme vložili v editoru. Na to
využijeme getVariable nad missionNamespace. Tedy:

_soldier = missionNamespace getVariable "soldier5";
_soldier setDammage 1;

Výhodou pojmenovaných objektů z editoru je, že v MP i po respawnu
zůstavají jednotky pojmnenované. Pokud bychom předtím uložili objekt do
nějaké proměnné klasickým přiražením

soldierA = soldier3;

pak po zabití této jednotky a respawnu bude soldier3 ukazovat na nově vzniklou jednotku, kdežto soldierA bude předchozí mrtvola.

Pokud bychom chtěli za běhu mise nějakou jednotku pojmenovat skriptem, aby si zachovávala vehicleVarName jméno i po respawnu, pak využijeme příkazu setVehicleVarName.

_new_unit_name = "soldier9";
_unit = group soldier1 createUnit ["B_Soldier_F", position soldier1, [], 0, "FORM"];
_unit setVehicleVarName _new_unit_name;
_unit call compile format ["%1=_this ; publicVariable ""%1""",_new_unit_name];
Exit mobile version