 sreV                prefix z\acex\addons\viewrestriction Mikero DePbo.dll.7.46 version f643103e  ACE_Settings.hpp     K      MnXWK  CfgEventHandlers.hpp           MnXW  CfgVehicles.hpp           ]  config.bin           ^  functions\fnc_canChangeCamera.sqf           Ẉ^  functions\fnc_changeCamera.sqf           Ẉ^  functions\fnc_moduleInit.sqf     S      Ẉ^S  functions\fnc_selectiveChangeCamera.sqf     o      Ẉ^o  functions\fnc_switchPreserveView.sqf     N      Ẉ^N  functions\script_component.hpp     @       MnXW@   initSettings.sqf           z^  README.md     o      r]o  script_component.hpp           [  stringtable.xml     K      z^K  texHeaders.bin            ^   UI\Icon_Module_ViewRestriction_ca.paa           MnXW  XEH_clientInit.sqf     U      Ẉ^U  XEH_preInit.sqf            Ẉ^   XEH_PREP.hpp     y       ]y   XEH_preStart.sqf     <       Ẉ^<                        #define MACRO_VALUES \
    CSTRING(Disabled), CSTRING(FirstPerson), CSTRING(ThirdPerson)

class ACE_Settings {
    class GVAR(mode) {
        category = CSTRING(ModuleDisplayName);
        value = 0;
        typeName = "SCALAR";
        displayName = CSTRING(Mode);
        description = CSTRING(ModeDesc);
        values[] = {MACRO_VALUES, CSTRING(Selective)};
    };
    class GVAR(modeSelectiveFoot) {
        category = CSTRING(ModuleDisplayName);
        value = 0;
        typeName = "SCALAR";
        displayName = CSTRING(ModeSelectiveFoot);
        description = CSTRING(ModeSelectiveFootDesc);
        values[] = {MACRO_VALUES};
    };
    class GVAR(modeSelectiveLand) {
        category = CSTRING(ModuleDisplayName);
        value = 0;
        typeName = "SCALAR";
        displayName = CSTRING(ModeSelectiveLand);
        description = CSTRING(ModeSelectiveLandDesc);
        values[] = {MACRO_VALUES};
    };
    class GVAR(modeSelectiveAir) {
        category = CSTRING(ModuleDisplayName);
        value = 0;
        typeName = "SCALAR";
        displayName = CSTRING(ModeSelectiveAir);
        description = CSTRING(ModeSelectiveAirDesc);
        values[] = {MACRO_VALUES};
    };
    class GVAR(modeSelectiveSea) {
        category = CSTRING(ModuleDisplayName);
        value = 0;
        typeName = "SCALAR";
        displayName = CSTRING(ModeSelectiveSea);
        description = CSTRING(ModeSelectiveSeaDesc);
        values[] = {MACRO_VALUES};
    };
    // Disabled - Reference comment in FUNC(canChangeCamera)
    /*class GVAR(modeSelectiveUAV) {
        category = CSTRING(ModuleDisplayName);
        value = 0;
        typeName = "SCALAR";
        displayName = CSTRING(ModeSelectiveUAV);
        description = CSTRING(ModeSelectiveUAVDesc);
        values[] = {MACRO_VALUES};
    };*/
};
class Extended_PreStart_EventHandlers {
    class ADDON {
        init = QUOTE(call COMPILE_FILE(XEH_preStart));
    };
};

class Extended_PreInit_EventHandlers {
    class ADDON {
        init = QUOTE(call COMPILE_FILE(XEH_preInit));
    };
};

class Extended_PostInit_EventHandlers {
    class ADDON {
        clientInit = QUOTE(call COMPILE_FILE(XEH_clientInit));
    };
};
#define MACRO_OPTIONS \
    class Disabled { \
        default = 1; \
        name = CSTRING(Disabled); \
        value = 0; \
    }; \
    class FirstPerson { \
        name = CSTRING(FirstPerson); \
        value = 1; \
    }; \
    class ThirdPerson { \
        name = CSTRING(ThirdPerson); \
        value = 2; \
    };

class CfgVehicles {
    class ACE_Module;
    class GVAR(Module): ACE_Module {
        author = "$STR_ACE_common_ACETeam";
        category = "ACEX";
        function = QFUNC(moduleInit);
        displayName = CSTRING(ModuleDisplayName);
        scope = 1;
        isGlobal = 1;
        icon = QUOTE(PATHTOF(UI\Icon_Module_ViewRestriction_ca.paa));
        class Arguments {
            class mode {
                displayName = CSTRING(Mode);
                description = CSTRING(ModeDesc);
                typeName = "NUMBER";
                class values {
                    MACRO_OPTIONS
                    class Selective {
                        name = CSTRING(Selective);
                        value = 3;
                    };
                };
            };
            class modeSelectiveFoot {
                displayName = CSTRING(ModeSelectiveFoot);
                description = CSTRING(ModeSelectiveFootDesc);
                typeName = "NUMBER";
                class values {
                    MACRO_OPTIONS
                };
            };
            class modeSelectiveLand {
                displayName = CSTRING(ModeSelectiveLand);
                description = CSTRING(ModeSelectiveLandDesc);
                typeName = "NUMBER";
                class values {
                    MACRO_OPTIONS
                };
            };
            class modeSelectiveAir {
                displayName = CSTRING(ModeSelectiveAir);
                description = CSTRING(ModeSelectiveAirDesc);
                typeName = "NUMBER";
                class values {
                    MACRO_OPTIONS
                };
            };
            class modeSelectiveSea {
                displayName = CSTRING(ModeSelectiveSea);
                description = CSTRING(ModeSelectiveSeaDesc);
                typeName = "NUMBER";
                class values {
                    MACRO_OPTIONS
                };
            };
            // Disabled - Reference comment in FUNC(canChangeCamera)
            /*class modeSelectiveUAV {
                displayName = CSTRING(ModeSelectiveUAV);
                description = CSTRING(ModeSelectiveUAVDesc);
                typeName = "NUMBER";
                class values {
                    MACRO_OPTIONS
                };
            };*/
        };
        class ModuleDescription {
            description = CSTRING(ModuleDescription);
        };
    };
};
 raP           CfgPatches     Extended_PreStart_EventHandlers    Extended_PreInit_EventHandlers d   Extended_PostInit_EventHandlers    ACE_Settings w   CfgVehicles 
      acex_viewrestriction        name ACEX - View Restriction units  weapons  requiredVersion H?requiredAddons  acex_main  author $STR_ace_common_ACETeam authors  Jonpas  esteldunedain  url $STR_ace_main_URL version   `@ versionStr 3.5.4.23 versionAr                 acex_viewrestriction   d    init call compile preprocessFileLineNumbers '\z\acex\addons\viewrestriction\XEH_preStart.sqf' d    acex_viewrestriction       init call compile preprocessFileLineNumbers '\z\acex\addons\viewrestriction\XEH_preInit.sqf'     acex_viewrestriction 	  w    clientInit call compile preprocessFileLineNumbers '\z\acex\addons\viewrestriction\XEH_clientInit.sqf' w    acex_viewrestriction_mode J   acex_viewrestriction_modeSelectiveFoot    acex_viewrestriction_modeSelectiveLand    acex_viewrestriction_modeSelectiveAir ?   acex_viewrestriction_modeSelectiveSea 	  
    category $STR_acex_viewrestriction_ModuleDisplayName value      typeName SCALAR  displayName $STR_acex_viewrestriction_Mode  description $STR_acex_viewrestriction_ModeDesc values  $STR_acex_viewrestriction_Disabled  $STR_acex_viewrestriction_FirstPerson  $STR_acex_viewrestriction_ThirdPerson  $STR_acex_viewrestriction_Selective     category $STR_acex_viewrestriction_ModuleDisplayName value      typeName SCALAR  displayName $STR_acex_viewrestriction_ModeSelectiveFoot  description $STR_acex_viewrestriction_ModeSelectiveFootDesc values  $STR_acex_viewrestriction_Disabled  $STR_acex_viewrestriction_FirstPerson  $STR_acex_viewrestriction_ThirdPerson     category $STR_acex_viewrestriction_ModuleDisplayName value      typeName SCALAR  displayName $STR_acex_viewrestriction_ModeSelectiveLand  description $STR_acex_viewrestriction_ModeSelectiveLandDesc values  $STR_acex_viewrestriction_Disabled  $STR_acex_viewrestriction_FirstPerson  $STR_acex_viewrestriction_ThirdPerson ?    category $STR_acex_viewrestriction_ModuleDisplayName value      typeName SCALAR  displayName $STR_acex_viewrestriction_ModeSelectiveAir  description $STR_acex_viewrestriction_ModeSelectiveAirDesc values  $STR_acex_viewrestriction_Disabled  $STR_acex_viewrestriction_FirstPerson  $STR_acex_viewrestriction_ThirdPerson 	    category $STR_acex_viewrestriction_ModuleDisplayName value      typeName SCALAR  displayName $STR_acex_viewrestriction_ModeSelectiveSea  description $STR_acex_viewrestriction_ModeSelectiveSeaDesc values  $STR_acex_viewrestriction_Disabled  $STR_acex_viewrestriction_FirstPerson  $STR_acex_viewrestriction_ThirdPerson 
   ACE_Module  acex_viewrestriction_Module 
    ACE_Module 	 author $STR_ACE_common_ACETeam  category ACEX  function acex_viewrestriction_fnc_moduleInit  displayName $STR_acex_viewrestriction_ModuleDisplayName scope    isGlobal     icon \z\acex\addons\viewrestriction\UI\Icon_Module_ViewRestriction_ca.paa  Arguments A   ModuleDescription       mode    modeSelectiveFoot w   modeSelectiveLand    modeSelectiveAir    modeSelectiveSea C      displayName $STR_acex_viewrestriction_Mode  description $STR_acex_viewrestriction_ModeDesc  typeName NUMBER  values -  w    Disabled r   FirstPerson    ThirdPerson    Selective :  w   default     name $STR_acex_viewrestriction_Disabled value         name $STR_acex_viewrestriction_FirstPerson value        name $STR_acex_viewrestriction_ThirdPerson value    :    name $STR_acex_viewrestriction_Selective value    w    displayName $STR_acex_viewrestriction_ModeSelectiveFoot  description $STR_acex_viewrestriction_ModeSelectiveFootDesc  typeName NUMBER  values       Disabled I   FirstPerson    ThirdPerson      default     name $STR_acex_viewrestriction_Disabled value         name $STR_acex_viewrestriction_FirstPerson value        name $STR_acex_viewrestriction_ThirdPerson value        displayName $STR_acex_viewrestriction_ModeSelectiveLand  description $STR_acex_viewrestriction_ModeSelectiveLandDesc  typeName NUMBER  values       Disabled    FirstPerson -   ThirdPerson l     default     name $STR_acex_viewrestriction_Disabled value     -    name $STR_acex_viewrestriction_FirstPerson value    l    name $STR_acex_viewrestriction_ThirdPerson value        displayName $STR_acex_viewrestriction_ModeSelectiveAir  description $STR_acex_viewrestriction_ModeSelectiveAirDesc  typeName NUMBER  values E  C    Disabled {   FirstPerson    ThirdPerson   C   default     name $STR_acex_viewrestriction_Disabled value         name $STR_acex_viewrestriction_FirstPerson value        name $STR_acex_viewrestriction_ThirdPerson value    C    displayName $STR_acex_viewrestriction_ModeSelectiveSea  description $STR_acex_viewrestriction_ModeSelectiveSeaDesc  typeName NUMBER  values       Disabled    FirstPerson ]   ThirdPerson      default     name $STR_acex_viewrestriction_Disabled value     ]    name $STR_acex_viewrestriction_FirstPerson value        name $STR_acex_viewrestriction_ThirdPerson value        description $STR_acex_viewrestriction_ModuleDescription       #include "script_component.hpp"
/*
 * Author: Jonpas
 * Checks if camera can be changed.
 *
 * Arguments:
 * 0: New Camera View <STRING>
 * 1: Vehicle <OBJECT>
 * 2: Check gunner view <BOOL> (default: true)
 *
 * Return Value:
 * Can Change Camera <BOOL>
 *
 * Example:
 * ["INTERNAL", vehicle] call acex_viewrestriction_fnc_canChangeCamera
 *
 * Public: No
 */

params ["_newCameraView", "_cameraOn", ["_checkGunnerView", true]];

// Remote control hates switchCamera (control returns to player, camera is left on remotely controlled object/unit), make sure remote controlled units are not impacted

!(_newCameraView isEqualTo "GUNNER" && {_checkGunnerView}) &&
{!(_newCameraView isEqualTo "GROUP")} &&
{!isNull ACE_player} &&
{player == ACE_player} &&
{alive ACE_player} &&
{ACE_player == _cameraOn || vehicle ACE_player == _cameraOn} &&
{"" isEqualTo call CBA_fnc_getActiveFeatureCamera} &&
{!(_cameraOn isKindOf "UAV" || _cameraOn isKindOf "UAV_01_base_F")} // UAVs are remote controlled
#include "script_component.hpp"
/*
 * Author: Jonpas
 * Change camera based on setting.
 *
 * Arguments:
 * 0: New Camera View <STRING>
 * 1: Vehicle <OBJECT>
 *
 * Return Value:
 * None
 *
 * Example:
 * ["INTERNAL", vehicle] call acex_viewrestriction_fnc_changeCamera
 *
 * Public: No
 */

params ["_newCameraView", "_cameraOn"];

if (! ([_newCameraView, _cameraOn] call FUNC(canChangeCamera))) exitWith {};

TRACE_1("View Restricted",GVAR(mode));

// FirstPerson
if (GVAR(mode) == 1) exitWith {
    _cameraOn switchCamera "INTERNAL";
};

// ThirdPerson
if (GVAR(mode) == 2) exitWith {
    _cameraOn switchCamera "EXTERNAL";
};

// Selective
if (GVAR(mode) == 3) exitWith {
    [_cameraOn] call FUNC(selectiveChangeCamera);
};
#include "script_component.hpp"
/*
 * Author: Jonpas
 * Initializes the View Restriction module.
 *
 * Arguments:
 * 0: logic <OBJECT>
 * 1: Synchronised Units <ARRAY>
 * 2: Module Activated <BOOL>
 *
 * Return Value:
 * None
 */

params ["_logic", "_units", "_activated"];

if (!_activated) exitWith {};

[_logic, QGVAR(mode), "mode"] call ACEFUNC(common,readSettingFromModule);

// Read selective options only if selective mode selected
if (GVAR(mode) == 3) then {
    [_logic, QGVAR(modeSelectiveFoot), "modeSelectiveFoot"] call ACEFUNC(common,readSettingFromModule);
    [_logic, QGVAR(modeSelectiveLand), "modeSelectiveLand"] call ACEFUNC(common,readSettingFromModule);
    [_logic, QGVAR(modeSelectiveAir), "modeSelectiveAir"] call ACEFUNC(common,readSettingFromModule);
    [_logic, QGVAR(modeSelectiveSea), "modeSelectiveSea"] call ACEFUNC(common,readSettingFromModule);
    //[_logic, QGVAR(modeSelectiveUAV), "modeSelectiveUAV"] call ACEFUNC(common,readSettingFromModule); // Disabled - Reference comment in FUNC(canChangeCamera)

    INFO_5("View Restriction Module Initialized. Mode: %1 (Foot: %2, Land: %3, Air: %4, Sea: %5)",GVAR(mode),GVAR(modeSelectiveFoot),GVAR(modeSelectiveLand), GVAR(modeSelectiveAir),GVAR(modeSelectiveSea));
} else {
    INFO_1("View Restriction Module Initialized. Mode: %1",GVAR(mode));
};
#include "script_component.hpp"
/*
 * Author: Jonpas
 * Changes camera mode based on vehicle type the player is currently occupying.
 *
 * Arguments:
 * 0: Vehicle <OBJECT>
 *
 * Return Value:
 * None
 *
 * Example:
 * [vehicle] call acex_viewrestriction_fnc_selectiveChangeCamera
 *
 * Public: No
 */

params ["_cameraOn"];

// Foot
if (_cameraOn isKindOf "CAManBase") exitWith {
    if (GVAR(modeSelectiveFoot) == 1) exitWith {
        _cameraOn switchCamera "INTERNAL";
    };
    if (GVAR(modeSelectiveFoot) == 2) exitWith {
        _cameraOn switchCamera "EXTERNAL";
    };
};

// Land Vehicles
if (_cameraOn isKindOf "LandVehicle") exitWith {
    if (GVAR(modeSelectiveLand) == 1) exitWith {
        _cameraOn switchCamera "INTERNAL";
    };
    if (GVAR(modeSelectiveLand) == 2) exitWith {
        _cameraOn switchCamera "EXTERNAL";
    };
};

// UAVs (must be evaluated before Air Vehicles due to inheritance tree)
// Disabled - Reference comment in FUNC(canChangeCamera)
/*if (_cameraOn isKindOf "UAV" || {_cameraOn isKindOf "UAV_01_base_F"}) exitWith {
    if (GVAR(modeSelectiveUAV) == 1) exitWith {
        _cameraOn switchCamera "INTERNAL";
    };
    if (GVAR(modeSelectiveUAV) == 2) exitWith {
        _cameraOn switchCamera "EXTERNAL";
    };
};*/

// Air Vehicles (must be evaluated after UAVs due to inheritance tree)
if (_cameraOn isKindOf "Air") exitWith {
    if (GVAR(modeSelectiveAir) == 1) exitWith {
        _cameraOn switchCamera "INTERNAL";
    };
    if (GVAR(modeSelectiveAir) == 2) exitWith {
        _cameraOn switchCamera "EXTERNAL";
    };
};

// Sea Vehicles
if (_cameraOn isKindOf "Ship") exitWith {
    if (GVAR(modeSelectiveSea) == 1) exitWith {
        _cameraOn switchCamera "INTERNAL";
    };
    if (GVAR(modeSelectiveSea) == 2) exitWith {
        _cameraOn switchCamera "EXTERNAL";
    };
};
#include "script_component.hpp"
/*
 * Author: Dystopian
 * Controls View Preserving state.
 *
 * Arguments:
 * 0: Enabled <BOOL>
 *
 * Return Value:
 * None
 *
 * Example:
 * true call acex_viewrestriction_fnc_switchPreserveView
 *
 * Public: No
 */

params ["_enabled"];

if (!_enabled || {GVAR(mode) > 0}) exitWith {
    if (isNil QGVAR(preserveViewCameraViewEH)) exitWith {};
    ["cameraView", GVAR(preserveViewCameraViewEH)] call CBA_fnc_removePlayerEventHandler;
    ["vehicle", GVAR(preserveViewVehicleEH)] call CBA_fnc_removePlayerEventHandler;
    GVAR(preserveViewCameraViewEH) = nil;
    GVAR(preserveViewVehicleEH) = nil;
};

GVAR(preserveViewCameraViewEH) = ["cameraView", {
    params ["_player", "_cameraView"];
    if !([_cameraView, cameraOn] call FUNC(canChangeCamera)) exitWith {};

    private _vehicle = vehicle _player;
    private _vehicleClass = {if (_vehicle isKindOf _x) exitWith {_x}} forEach ["CAManBase", "LandVehicle", "Air", "Ship", "All"];
    private _varName = QGVAR(preserveView) + _vehicleClass;
    if !(_cameraView isEqualTo (profileNamespace getVariable [_varName, ""])) then {
        profileNamespace setVariable [_varName, _cameraView];
    };
}] call CBA_fnc_addPlayerEventHandler;

GVAR(preserveViewVehicleEH) = ["vehicle", {
    params ["_player", "_vehicle"];
    private _cameraView = cameraView;
    if !([_cameraView, cameraOn, false] call FUNC(canChangeCamera)) exitWith {};

    private _vehicleClass = {if (_vehicle isKindOf _x) exitWith {_x}} forEach ["CAManBase", "LandVehicle", "Air", "Ship", "All"];
    private _savedView = profileNamespace getVariable (QGVAR(preserveView) + _vehicleClass);
    if (!isNil "_savedView" && {!(_cameraView isEqualTo _savedView)}) then {
        _vehicle switchCamera _savedView;
    };
}, true] call CBA_fnc_addPlayerEventHandler;
#include "\z\acex\addons\viewrestriction\script_component.hpp"
[
    QGVAR(preserveView),
    "CHECKBOX",
    [LSTRING(SettingPreserveViewName), LSTRING(SettingPreserveViewDesc)],
    format ["ACEX %1", LLSTRING(ModuleDisplayName)],
    false,
    false,
    LINKFUNC(switchPreserveView)
] call CBA_settings_fnc_init;
acex_viewrestriction
===============

The View Restriction module introduces restricting of first and third person views overall or configured per type.

## Maintainers

The people responsible for merging changes to this component or answering potential questions.

- [Jonpas](https://github.com/jonpas)
- [esteldunedain](https://github.com/esteldunedain)
#define COMPONENT viewrestriction
#define COMPONENT_BEAUTIFIED View Restriction
#include "\z\acex\addons\main\script_mod.hpp"

// #define DEBUG_MODE_FULL
// #define DISABLE_COMPILE_CACHE
// #define ENABLE_PERFORMANCE_COUNTERS

#ifdef DEBUG_ENABLED_VIEWRESTRICTION
    #define DEBUG_MODE_FULL
#endif

#ifdef DEBUG_SETTINGS_VIEWRESTRICTION
    #define DEBUG_SETTINGS DEBUG_SETTINGS_VIEWRESTRICTION
#endif

#include "\z\acex\addons\main\script_macros.hpp"
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACEX">
    <Package name="ViewRestriction">
        <Key ID="STR_ACEX_ViewRestriction_ModuleDisplayName">
            <English>View Restriction</English>
            <Polish>Ograniczenie widoczności</Polish>
            <German>Sichteinschränkungen</German>
            <Hungarian>Korlátozások</Hungarian>
            <Japanese>視点制限</Japanese>
            <Korean>시점 제한</Korean>
            <French>Restriction Vue</French>
            <Chinesesimp>视野限制</Chinesesimp>
            <Chinese>視野限制</Chinese>
            <Italian>Visualizza Restrizione</Italian>
            <Russian>Ограничение обзора</Russian>
        </Key>
        <Key ID="STR_ACEX_ViewRestriction_ModuleDescription">
            <English>View restriction settings to limit the usage of 1st or 3rd person views globally or per vehicle type.</English>
            <Polish>Ograniczenie widoczności ze względu na użycie 1. lub 3. os. globalnie, lub z uwzględnieniem typu pojazdu.</Polish>
            <German>Einstellungen um Egoperspektive und Third-Person-Perspektive global oder pro Fahrzeugtyp zu limitieren.</German>
            <Japanese>全体や車両ごとで使える視点を1人称か3人称視点のどちらかに制限します。</Japanese>
            <Korean>차량 유형별, 혹은 전체적으로 1,3인칭 시점 사용 제한 설정</Korean>
            <French>La restriction de la vue limite l'usage de la vue à la 1ère/3ème personne globalement ou par type de véhicule.</French>
            <Chinesesimp>视野限制可以设定在全局或是局部状况下能用的视野模式。</Chinesesimp>
            <Chinese>視野限制可以設定在全局或是局部狀況下能用的視野模式。</Chinese>
            <Italian>Visualizza le impostazioni di restrizione per limitare l'utilizzo di prima e terza persona a livello globale o per tipologia di veicolo.</Italian>
            <Russian>Настройки ограничения обзора при виде от 1-го или 3-го лица. Общие для всех, или Выборочные, в зависимости от техники.</Russian>
        </Key>
        <Key ID="STR_ACEX_ViewRestriction_Mode">
            <English>Mode</English>
            <Polish>Tryb</Polish>
            <German>Modus</German>
            <Hungarian>Mód</Hungarian>
            <Japanese>モード</Japanese>
            <Korean>모드</Korean>
            <French>Mode</French>
            <Chinesesimp>模式</Chinesesimp>
            <Chinese>模式</Chinese>
            <Italian>Modalità</Italian>
            <Russian>Режим установок</Russian>
        </Key>
        <Key ID="STR_ACEX_ViewRestriction_ModeDesc">
            <English>Sets global mode. Default: Disabled</English>
            <Polish>Zmienia tryb globalny. (Domyślnie: Wyłączony)</Polish>
            <German>Globaler Modus. (Standard: Deaktiviert)</German>
            <Hungarian>Globális mód beállítása. Alapértelmeyett: Kikapcsolva</Hungarian>
            <Japanese>グローバル モードの設定。(標準: 無効)</Japanese>
            <Korean>전체 모드를 사용합니다. 기본값: 사용 안 함</Korean>
            <French>Mode global. Défaut: Désactivé</French>
            <Chinesesimp>设定全局的视野模式。预设:关闭</Chinesesimp>
            <Chinese>設定全局的視野模式。預設:關閉</Chinese>
            <Italian>Imposta modalità globale. Default: Disabilitato</Italian>
            <Russian>Общие установки для всех. По умолчанию: Отключено.</Russian>
        </Key>
        <Key ID="STR_ACEX_ViewRestriction_ModeSelectiveFoot">
            <English>(Selective) Foot</English>
            <Polish>(Tryb selektywny) Piechota</Polish>
            <German>(Selektiv) zu Fuß</German>
            <Hungarian>(Szelektív) Gyalogos</Hungarian>
            <Japanese>(選択性) 地上</Japanese>
            <Korean>(선택) 보병</Korean>
            <French>(Sélectif) A pied</French>
            <Chinesesimp>(可选) 步行</Chinesesimp>
            <Chinese>(可選) 步行</Chinese>
            <Italian>(Selettiva) Piedi</Italian>
            <Russian>(Выборочные) Пешком</Russian>
        </Key>
        <Key ID="STR_ACEX_ViewRestriction_ModeSelectiveFootDesc">
            <English>Selective mode on Foot. Default: Disabled (Requires Mode: Selective)</English>
            <Polish>Tryb selektywny piechoty. Domyślnie: Wyłączony (Wymagany tryb globalny: Selektywny)</Polish>
            <German>Selektiver Modus zu Fuß. (Standard: Deaktiviert, Benötigt Modus: Selektiv)</German>
            <Hungarian>Szelektív mód Gyalogosan. Alapértelmezett: Kikapcsolva (Mód: Szelektív szükséges)</Hungarian>
            <Japanese>地上でのモードを選択します。(標準: 無効化 (要求モード: 選択性)</Japanese>
            <Korean>보병 시점. 기본값: 사용 안 함 (모드-선택 필요)</Korean>
            <French>Mode sélectif hors des véhicules. Défaut: Désactivé (Nécessite Mode: Sélectif)</French>
            <Chinesesimp>设定在步行的状况下能使用的视野模式。预设:关闭(需在全局设定中先选择'使用可选设定')</Chinesesimp>
            <Chinese>設定在步行的狀況下能使用的視野模式。預設:關閉(需在全局設定中先選擇'使用可選設定')</Chinese>
            <Italian>Modalità selettiva su Piedi. Default: Disabilitato (Necessita della Modalità: Selettiva)</Italian>
            <Russian>Выборочные установки без техники. По умолчанию: Отключено (требуется режим: Выборочные)</Russian>
        </Key>
        <Key ID="STR_ACEX_ViewRestriction_ModeSelectiveLand">
            <English>(Selective) Land Vehicles</English>
            <Polish>(Tryb selektywny) Pojazdy</Polish>
            <German>(Selektiv) Landfahrzeuge</German>
            <Hungarian>(Szelektív) Szárazföldi Járművek</Hungarian>
            <Japanese>(選択性) 地上車両</Japanese>
            <Korean>(선택) 지상 차량</Korean>
            <French>(Sélectif) Véhicules terrestres</French>
            <Chinesesimp>(可选) 陆上载具</Chinesesimp>
            <Chinese>(可選) 陸上載具</Chinese>
            <Italian>(Selettiva) Veicoli Terrestri</Italian>
            <Russian>(Выборочные) Наземная техника</Russian>
        </Key>
        <Key ID="STR_ACEX_ViewRestriction_ModeSelectiveLandDesc">
            <English>Selective mode in Land Vehicles. Default: Disabled (Requires Mode: Selective)</English>
            <Polish>Tryb selektywny pojazdów. Domyślnie: Wyłączony (Wymagany tryb globalny: Selektywny)</Polish>
            <German>Selektiver Modus in Landfahrzeugen. (Standard: Deaktiviert, Benötigt Modus: Selektiv)</German>
            <Hungarian>Szelektív mód a Szárazföldi Járművekben. Alapértelmezett: Kikapcsolva (Mód: Szelektív szükséges)</Hungarian>
            <Japanese>地上車両でのモードを選択します。(標準: 無効化 (要求モード: 選択性)</Japanese>
            <Korean>차량 시점. 기본값: 사용 안 함 (모드-선택 필요)</Korean>
            <French>Mode sélectif dans les véhicules terrestres. Défaut: Désactivé (Nécessite Mode: Sélectif)</French>
            <Chinesesimp>设定在搭乘陆上载具的状况下能使用的视野模式。预设:关闭(需在全局设定中先选择'使用可选设定')</Chinesesimp>
            <Chinese>設定在搭乘陸上載具的狀況下能使用的視野模式。預設:關閉(需在全局設定中先選擇'使用可選設定')</Chinese>
            <Italian>Modalità selettiva su Veicoli Terrestri. Default: Disabilitato (Necessita della Modalità: Selettiva)</Italian>
            <Russian>Выборочные установки для наземной техники. По умолчанию: Отключено (требуется режим: Выборочные)</Russian>
        </Key>
        <Key ID="STR_ACEX_ViewRestriction_ModeSelectiveAir">
            <English>(Selective) Air Vehicles</English>
            <Polish> (Tryb selektywny) Lotnictwo</Polish>
            <German>(Selektiv) Luftfahrzeuge</German>
            <Hungarian>(Szelektív) Légijárművek</Hungarian>
            <Japanese>(選択性) 航空機</Japanese>
            <Korean>(선택) 항공기</Korean>
            <French>(Sélectif) Véhicules aériens</French>
            <Chinesesimp>(可选) 空中载具</Chinesesimp>
            <Chinese>(可選) 空中載具</Chinese>
            <Italian>(Selettiva) Veicolo Aerei</Italian>
            <Russian>(Выборочные) Авиатехника</Russian>
        </Key>
        <Key ID="STR_ACEX_ViewRestriction_ModeSelectiveAirDesc">
            <English>Selective mode in Air Vehicles. Default: Disabled (Requires Mode: Selective)</English>
            <Polish>Tryb selektywny lotnictwa. Domyślnie: Wyłączony (Wymagany tryb globalny: Selektywny)</Polish>
            <German>Selektiver Modus in Luftfahrzeugen. (Standard: Deaktiviert, Benötigt Modus: Selektiv)</German>
            <Hungarian>Szelektív mód a Légijárművekben. Alapértelmezett: Kikapcsolva (Mód: Szelektív szükséges)</Hungarian>
            <Japanese>航空機でのモードを選択します。(標準: 無効化 (要求モード: 選択性)</Japanese>
            <Korean>항공기 시점. 기본값: 사용 안 함 (모드-선택 필요)</Korean>
            <French>Mode sélectif dans les véhicules aériens. Défaut: Désactivé (Nécessite Mode: Sélectif)</French>
            <Chinesesimp>设定在搭乘空中载具的状况下能使用的视野模式。预设:关闭(需在全局设定中先选择'使用可选设定')</Chinesesimp>
            <Chinese>設定在搭乘空中載具的狀況下能使用的視野模式。預設:關閉(需在全局設定中先選擇'使用可選設定')</Chinese>
            <Italian>Modalità selettiva su Veicoli Aerei. Default: Disabilitato (Necessita della Modalità: Selettiva)</Italian>
            <Russian>Выборочные установки для авиатехники. По умолчанию: Отключено (требуется режим: Выборочные)</Russian>
        </Key>
        <Key ID="STR_ACEX_ViewRestriction_ModeSelectiveSea">
            <English>(Selective) Sea Vehicles</English>
            <Polish>(Tryb selektywny) Jednostki pływające</Polish>
            <German>(Selektiv) Wasserfahrzeuge</German>
            <Hungarian>(Szelektív) Vízi Járművek</Hungarian>
            <Japanese>(選択性) 船舶</Japanese>
            <Korean>(선택) 함선</Korean>
            <French>(Sélectif) Véhicules marins</French>
            <Chinesesimp>(可选) 水上载具</Chinesesimp>
            <Chinese>(可選) 水上載具</Chinese>
            <Italian>(Selettiva) Veicoli Marittimi</Italian>
            <Russian>(Выборочные) Водный транспорт</Russian>
        </Key>
        <Key ID="STR_ACEX_ViewRestriction_ModeSelectiveSeaDesc">
            <English>Selective mode in Sea Vehicles. Default: Disabled (Requires Mode: Selective)</English>
            <Polish>Tryb selektywny jednostek pływających. Domyślnie: Wyłączony (Wymagany tryb globalny: Selektywny)</Polish>
            <German>Selektiver Modus zu Fuß. (Standard: Deaktiviert, Benötigt Modus: Selektiv)</German>
            <Hungarian>Szelektív mód a Vízi Járművekben. Alapértelmezett: Kikapcsolva (Mód: Szelektív szükséges)</Hungarian>
            <Japanese>船舶でのモードを選択します。(標準: 無効化 (要求モード: 選択性)</Japanese>
            <Korean>함선 시점. 기본값: 사용 안 함 (모드-선택 필요)</Korean>
            <French>Mode sélectif dans les véhicules marins. Défaut: Désactivé (Nécessite Mode: Sélectif)</French>
            <Chinesesimp>设定在搭乘水上载具的状况下能使用的视野模式。预设:关闭(需在全局设定中先选择'使用可选设定')</Chinesesimp>
            <Chinese>設定在搭乘水上載具的狀況下能使用的視野模式。預設:關閉(需在全局設定中先選擇'使用可選設定')</Chinese>
            <Italian>Modalità selettiva su Veicoli Marittimi. Default: Disabilitato (Necessita della Modalità: Selettiva)</Italian>
            <Russian>Выборочные установки для водного транспорта. По умолчанию: Отключено (требуется режим: Выборочные)</Russian>
        </Key>
        <Key ID="STR_ACEX_ViewRestriction_ModeSelectiveUAV">
            <English>(Selective) UAVs</English>
            <Polish> (Tryb selektywny) UAV</Polish>
            <German>(Selektiv) Unbemannte Luftfahrzeuge</German>
            <Hungarian>(Szelektív) Pilóta Nélüli Légijárművek</Hungarian>
            <Japanese>(選択性) 無人機</Japanese>
            <Korean>(선택) 무인기</Korean>
            <French>(Sélectif) Drones</French>
            <Chinesesimp>(可选) 无人载具</Chinesesimp>
            <Chinese>(可選) 無人載具</Chinese>
            <Italian>(Selettiva) UAV</Italian>
            <Russian>(Выборочные) Беспиплотники</Russian>
        </Key>
        <Key ID="STR_ACEX_ViewRestriction_ModeSelectiveUAVDesc">
            <English>Selective mode in UAVs. Default: Disabled (Requires Mode: Selective)</English>
            <Polish>Tryb selektywny UAV. Domyślnie: Wyłączony (Wymagany tryb globalny: Selektywny)</Polish>
            <German>Selektiver Modus in unbemannten Luftfahrzeugen. (Standard: Deaktiviert, Benötigt Modus: Selektiv</German>
            <Hungarian>Szelektív mód a Pilóta Nélküli Légijárművekben. Alapértelmezett: Kikapcsolva (Mód: Szelektív szükséges)</Hungarian>
            <Japanese>無人機でのモードを選択します。(標準: 無効化 (要求モード: 選択性)</Japanese>
            <Korean>무인기 시점. 기본값: 사용 안 함 (모드-선택 필요)</Korean>
            <French>Mode sélectif dans les drones. Défaut: Désactivé (Nécessite Mode: Sélectif)</French>
            <Chinesesimp>设定在搭乘无人载具的状况下能使用的视野模式。预设:关闭(需在全局设定中先选择'使用可选设定')</Chinesesimp>
            <Chinese>設定在搭乘無人載具的狀況下能使用的視野模式。預設:關閉(需在全局設定中先選擇'使用可選設定')</Chinese>
            <Italian>Modalità selettiva su UAVi. Default: Disabilitato (Necessita della Modalità: Selettiva)</Italian>
            <Russian>Выборочные установки для беспилотников. По умолчанию: Отключено (требуется режим: Выборочные)</Russian>
        </Key>
        <Key ID="STR_ACEX_ViewRestriction_Disabled">
            <English>Disabled</English>
            <Polish>Wyłączony</Polish>
            <German>Deaktiviert</German>
            <Hungarian>Kikapcsolva</Hungarian>
            <Japanese>無効</Japanese>
            <Korean>사용 안 함</Korean>
            <French>Désactivé</French>
            <Chinesesimp>关闭</Chinesesimp>
            <Chinese>關閉</Chinese>
            <Russian>Отключено</Russian>
        </Key>
        <Key ID="STR_ACEX_ViewRestriction_FirstPerson">
            <English>Forced 1st Person</English>
            <Polish>Wymuś 1. osobę</Polish>
            <German>Erzwungene Egoperspektive</German>
            <Japanese>1人称視点に強制</Japanese>
            <Korean>강제 1인칭</Korean>
            <French>Impose la 1ère personne</French>
            <Chinesesimp>强制使用第一人称</Chinesesimp>
            <Chinese>強制使用第一人稱</Chinese>
            <Russian>От 1-го лица (принудительно)</Russian>
        </Key>
        <Key ID="STR_ACEX_ViewRestriction_ThirdPerson">
            <English>Forced 3rd Person</English>
            <Polish>Wymuś 3. osobę</Polish>
            <German>Erzwungene Third-Person-Perspektive</German>
            <Japanese>3人称視点に強制</Japanese>
            <Korean>강제 3인칭</Korean>
            <French>Impose la 3ème personne</French>
            <Chinesesimp>强制使用第三人称</Chinesesimp>
            <Chinese>強制使用第三人稱</Chinese>
            <Russian>От 3-го лица (принудительно)</Russian>
        </Key>
        <Key ID="STR_ACEX_ViewRestriction_Selective">
            <English>Selective</English>
            <Polish>Selektywny</Polish>
            <German>Selektiv</German>
            <Hungarian>Szelektív</Hungarian>
            <Japanese>選択性</Japanese>
            <Korean>선택</Korean>
            <French>Sélectif</French>
            <Chinesesimp>使用可选设定</Chinesesimp>
            <Chinese>使用可選設定</Chinese>
            <Russian>Выборочный</Russian>
        </Key>
        <Key ID="STR_ACEX_ViewRestriction_SettingPreserveViewName">
            <English>Preserve view for vehicle types</English>
            <German>Behalte die Ansicht bei Fahrzeugtypen bei</German>
            <Russian>Запоминать вид для типов техники</Russian>
            <Japanese>車両の種類により視点を変更</Japanese>
            <Chinese>保留載具的視野模式</Chinese>
            <Chinesesimp>保留载具的视野模式</Chinesesimp>
            <Polish>Zachowaj ustawienie widoku dla pojazdów</Polish>
        </Key>
        <Key ID="STR_ACEX_ViewRestriction_SettingPreserveViewDesc">
            <English>Switch view on vehicle change to last used in this vehicle type (Requires Mode: Disabled)</English>
            <German>Wechsel die Ansicht bei Fahrzeugwechsel zu der zuletzt genutzen in diesen Fahrzeugtyp. (Benötigt Modus: Ausgeschaltet)</German>
            <Russian>Переключать вид при смене техники на последний использованный в данном типе техники (требуется режим: Отключено)</Russian>
            <Japanese>車両の種類により最後に使用した視点へ切り替え (無効モードでのみ有効)</Japanese>
            <Chinese>切換到載具時自動切換到上次最後使用的視野模式(需求模式:關閉)</Chinese>
            <Chinesesimp>切换到载具时自动切换到上次最后使用的视野模式(需求模式:关闭)</Chinesesimp>
            <Polish>Zmień widok podczas zmiany pojazdu na ustawienie widoku z ostatniego używanego pojazdu tego typu (Wymaga Tryb: Wyłączony</Polish>
        </Key>
    </Package>
</Project>
0DHT             |?|?|?>            
   ui\icon_module_viewrestriction_ca.paa        @ @   
         
      
      
      
    GGATCGVA   _GGATCXAM   GGATGALF      GGATSFFO@                                                            @ @                                                                                                          @$@$     	 	                                                         $H$      $I$      I                                       $@$      $I$      $I$     @$I$     	 	                                                             H         I         I                                          @$@$                                         	 	                     $         $         $                $H$      $I$      I                                     @$        I$        I$        I$@$     	 	               I$I      I$I      I$I          $     H$H$                 II$         $                     $         $         $         $     @$@$     	 	$         $         $         $         $     I$I      I$I      I$I      I$I      I$I      I$I      I$I      I$I      I$I      I$I      I$I      I$I      I$I      I$I      I$I      I$I          $         $         $         $         $         $         $         $         $         $         $         $         $         $         $         $                                        mH       I   mہ}U  &mۈ  	                                 { T||  ȶ۵0 UV                                                                                                 x,,؇                         cm6{t z)Ҕu ?m?u}j                                                                                    Hb۶m<     $I$   m۶m   .m۶m	                           F~  `          L?_8  ,$                                                                                                                                                            _~~````          dG~G~y$$$$                                                                                                                                                            ~Td[0$H    _~,\\                                                                                                                                                            R II,   [  Ӝ\\\\                                                                                                                                                            R II,   [  Ӝ\\\\                                                                                                                                                            $]k;aQ((T .k{00    0T                                                                                                                                                                                                                            b     @$@$          I      ~              I$          b     @$@$              I$I      II           $ $    @$    @c$     ?  $     $ $     $ $       $     $ $     $ $     $        m7   0 $ G   `     $   r  `O  ` $        $                   cyo6b  0 4?sl p 6۰m\   ,m#6op  LR                                                                           vc7vcC??   @                                                                        ) II<pppp̝ﲔ@@@@                         I$        I$        I$        I$        , @`  D-ҔH   I$        I$           @aOa    q?     !,    @O     @ Ib{   &q"IIB}   $&IIbX   @I Ib    7cm   O=m]  R`>kd}t             I$I      I$I     Ffd<  I$I       @  ,X!V   @*<    !$I    ժؠ͒<

      Ub  80      #include "script_component.hpp"

// Exit on Headless Client
if !(hasInterface) exitWith {};

["ace_settingsInitialized", {
    // Exit if module is disabled
    if (GVAR(mode) == 0) exitWith {};

    // Exit if all Selective Modes are Disabled
    if (GVAR(mode) == 3 &&
        {GVAR(modeSelectiveFoot) == 0} &&
        {GVAR(modeSelectiveLand) == 0} &&
        {GVAR(modeSelectiveAir) == 0} &&
        {GVAR(modeSelectiveSea) == 0}/* &&
        {GVAR(modeSelectiveUAV) == 0}*/
    ) exitWith {
        WARNING("Selective mode enabled, but all sub-modes are disabled.")
    };

    // Exit if third person view is not available
    if (difficultyOption "thirdPersonView" == 0) exitWith {
        WARNING("View Restriction is enabled, but 3rd person is disabled with server difficulty.");
    };

    // Add Event Handler for changing camera - also happens on spawn
    ["cameraView", {
        [_this select 1, cameraOn] call FUNC(changeCamera);
    }] call CBA_fnc_addPlayerEventHandler;

    // Add Event Hander for exiting and entering a vehicle when on Selective mode - cameraView does not fire on simple enter/exit
    if (GVAR(mode) == 3) then {
        ["vehicle", {
            [cameraView, _this select 1] call FUNC(changeCamera);
        }] call CBA_fnc_addPlayerEventHandler;
    };
}] call CBA_fnc_addEventHandler;
#include "script_component.hpp"

ADDON = false;

PREP_RECOMPILE_START;
#include "XEH_PREP.hpp"
PREP_RECOMPILE_END;

#include "initSettings.sqf"

ADDON = true;
PREP(canChangeCamera);
PREP(changeCamera);
PREP(moduleInit);
PREP(selectiveChangeCamera);
PREP(switchPreserveView);
#include "script_component.hpp"

#include "XEH_PREP.hpp"
 HO`A4;Q