Français Forcer la 1er personne quand un tire est effectuer

  • Auteur de la discussion Auteur de la discussion Enzo2991
  • Date de début Date de début

Enzo2991

User
2/2/20
120
19
25
1 150
Bienvenue dans ce tutoriel qui vous permettra de Forcer la 1er personne quand un tir est effectué
Tout d'abord ,aller dans le dossier core/function et créer un fichier nomméfn_firstView.sqf et mettez ces lignes dedans
Code:
/*
    Code written by Lyeed
*/
life_combatTime = time;
if (!life_firstCombatActive) then
{
    [] spawn
    {
        life_firstCombatActive = true;
        while {(life_combatTime > (time - 300))} do
        {
            if ((cameraView == "External") && ((vehicle player) == player)) then {
                player switchCamera "Internal";
            };
            sleep 0.2;
        };
        hint "vous n'etes plus en gunfight, vous pouvez maintenant utiliser la 3eme personne";
        life_firstCombatActive = false;
    };
};

Ensuite, aller dans le dossier coreet trouver le fichier configuration.sqf et rajouter ces lignes
Code:
life_combatTime = 0;
life_firstCombatActive = false;
Apres , aller dans le dossier core et trouver le fichier fn_setupEVH.sqf et ajouter cette ligne
Code:
player addEventHandler["FiredNear", {_this call life_fnc_firstView}];
Enfin trouver le fichier function.hpp a la racine de votre mission et ajouter cette ligne dans la class function
Code:
class firstView {};

Cordialement,
Forum Moderator Enzo2991
 
Dernière édition:
  • Like
Les réactions: hwe et Zaros
Magnifique ça fonctionne, merci encore Enzo.

le 300 représente quoi exactement ? Millisecondes ?
 
Bonjour, je me suis permis de le réadapter un petit peu pour qu'il soit un peu plus propre pour les joueurs.

Entre autre, le fait qu'on ne puisse pas appuyer sur la touche pour switch de vue et qui faisait un truc vomitif qui rechanger la vue rapidement. Là au moins, on peut tout court pas le faire.
Ensuite le fait qu'on puisse pas être en troisième personne dans les véhicules lors de fight.

Et enfin niveau code, j'ai changé le système du timer. On peut changer le nombre de seconde directement sur la première ligne.

Dans le fn_firstView.sqf :
Code:
life_combatTime = 10;

if (!life_firstCombatActive) then {
    life_firstCombatActive = true;
   
    _eh = (findDisplay 46) displayAddEventHandler ["KeyDown",{
        _key = _this select 1;
        _keys = actionKeys "PersonView";
        if (_key in _keys) then {true;};
    }];  
   
    [] spawn {
        while {(life_combatTime > 0 )} do {
            if ((cameraView == "External") && (((vehicle player) == player) || ((vehicle player) isKindOf "Ship") || ((vehicle player) isKindOf "LandVehicle") || ((vehicle player) isKindOf "Air"))) then {
                player switchCamera "Internal";
            };
            sleep 0.2;
            life_combatTime = life_combatTime - 0.2;
        };
    };

    waitUntil {(life_combatTime <= 0)};
    _ehr = (findDisplay 46) displayRemoveEventHandler ["keyDown", _eh];

    life_firstCombatActive = false;
};

Et personnellement, j'ai retiré le fait d'appeler en function. Donc vous pouvez retirer le class firstView dans le function.hpp et j'ai changé dans le fn_setupEVH.sqf le Event Handler par :
Code:
player addEventHandler["FiredNear", {[] execVM "core\functions\fn_firstView.sqf";}];

Encore une fois, petite modif pour améliorer tout ca, mais ce que Enzo à proposer marche niquel ! Si il y a des soucis sur l'installation de ma modif, n'hésitez pas à m'en faire part.

Merci encore Enzo pour avoir re partagé ceci et à Lyeed pour le code original.
 
Dernière édition:
  • Like
Les réactions: Loic Shmit
Salut │SomethingLikeThis Romset95, normalement l'event handler FiredNear s’exécute pour les personnes autour également, dans un rayon de 50 mètres il me semble. Mais je n'ai pas trouvé comment l'augmenter.

Sinon ce que tu peux essayer :
Dans ton CfgRemoteExec.hpp ajoute :
Code:
F(life_fnc_firstView,CLIENT)

Et dans ton fn_setupEVH.sqf, rempalce :
Code:
player addEventHandler["FiredNear", {_this call life_fnc_firstView}];
par :
Code:
player addEventHandler ["FiredNear", {_this call life_fnc_firstView { if !(_x isEqualTo player) then {[] remoteExec ["life_fnc_firstView",_x];}; } forEach playableUnits;}];
 
  • Love
Les réactions: │SomethingLikeThis
Bonjour,

Je ré ouvre ce post pour savoir si dans le script c'est possible de mettre des exception pour certaines armes ?

Merci d'avance
 
Salut Phoenix53 Phoenix53 , ligne 2, tu ajoute tes armes dans ce nouveau array.
Et ligne 3 tu remplace parce le if que j'ai mis.

Exemple :
Code:
_weaponsWhitelist = ["arifle_Mk20_F", "arifle_CTAR_blk_F", "LMG_03_F"];

if (!life_firstCombatActive && _weaponsWhitelist findIf { _x == currentWeapon player }) then {

Dis moi si cela marche, je n'ai pas pu tester.
 
Je pense que tu peux même simplifier le code en mettant :
Code:
_weaponsWhitelist = ["arifle_Mk20_F", "arifle_CTAR_blk_F", "LMG_03_F"];

if (!life_firstCombatActive && (currentWeapon player) in _weaponsWhitelist) then {
Le script de base fonctionne mais quand je rajoute la condition de certaines armes ca fnctionne plus
Liliannismo33 Liliannismo33
 
Dernière édition:
C'est à dire "ça ne fonctionne plus" ?

Vérifie la valeur dans la debug console de :
Code:
(currentWeapon player)
-> Il faut mettre cette classname dans _weaponsWhitelist sinon le script ne se déclenchera pas.

Dans le doute tu peux envoyer ton fichier fn_firstView.sqf pour vérifier que tu as fait les modifications au bon endroit
 
Bonjour, je me suis permis de le réadapter un petit peu pour qu'il soit un peu plus propre pour les joueurs.

Entre autre, le fait qu'on ne puisse pas appuyer sur la touche pour switch de vue et qui faisait un truc vomitif qui rechanger la vue rapidement. Là au moins, on peut tout court pas le faire.
Ensuite le fait qu'on puisse pas être en troisième personne dans les véhicules lors de fight.

Et enfin niveau code, j'ai changé le système du timer. On peut changer le nombre de seconde directement sur la première ligne.

Dans le fn_firstView.sqf :
Code:
life_combatTime = 10;

if (!life_firstCombatActive) then {
    life_firstCombatActive = true;
  
    _eh = (findDisplay 46) displayAddEventHandler ["KeyDown",{
        _key = _this select 1;
        _keys = actionKeys "PersonView";
        if (_key in _keys) then {true;};
    }]; 
  
    [] spawn {
        while {(life_combatTime > 0 )} do {
            if ((cameraView == "External") && (((vehicle player) == player) || ((vehicle player) isKindOf "Ship") || ((vehicle player) isKindOf "LandVehicle") || ((vehicle player) isKindOf "Air"))) then {
                player switchCamera "Internal";
            };
            sleep 0.2;
            life_combatTime = life_combatTime - 0.2;
        };
    };

    waitUntil {(life_combatTime <= 0)};
    _ehr = (findDisplay 46) displayRemoveEventHandler ["keyDown", _eh];

    life_firstCombatActive = false;
};

Et personnellement, j'ai retiré le fait d'appeler en function. Donc vous pouvez retirer le class firstView dans le function.hpp et j'ai changé dans le fn_setupEVH.sqf le Event Handler par :
Code:
player addEventHandler["FiredNear", {[] execVM "core\functions\fn_firstView.sqf";}];

Encore une fois, petite modif pour améliorer tout ca, mais ce que Enzo à proposer marche niquel ! Si il y a des soucis sur l'installation de ma modif, n'hésitez pas à m'en faire part.

Merci encore Enzo pour avoir re partagé ceci et à Lyeed pour le code original.
Heyy super tous petit changement, peux tu s'il te plait me dire ou placer mon message: "Vous n’êtes plus en zone de tire, vous pouvez maintenant utiliser la 3eme personne" pour prévenir qu'il puisse changer de vue, puis tu me dire ou autrement le temps j'aimerai mettre 180 Seconde donc 3 Minutes ?
Merci à toi
 
Heyy super tous petit changement, peux tu s'il te plait me dire ou placer mon message: "Vous n’êtes plus en zone de tire, vous pouvez maintenant utiliser la 3eme personne" pour prévenir qu'il puisse changer de vue, puis tu me dire ou autrement le temps j'aimerai mettre 180 Seconde donc 3 Minutes ?
Merci à toi
Salut, tu as juste à changer le temps en première ligne en seconde
Code:
life_combatTime = 180;

Et pour le message, ligne 26 :
Code:
life_firstCombatActive = false;

hint "Vous n’êtes plus en zone de tir, vous pouvez maintenant utiliser la 3eme personne.";
};
 
je change le quel il y en n'as 2 ?
Code:
life_combatTime = 10;
life_combatTime = life_combatTime - 0.2;
puis ca je le mais apres quel ligne ??
Code:
life_firstCombatActive = false;
hint "Vous n’êtes plus en zone de tir, vous pouvez maintenant utiliser la 3eme personne.";
};
 
Dernière édition par un modérateur:
je change le quel il y en n'as 2 ?

life_combatTime = 10;
life_combatTime = life_combatTime - 0.2;

puis ca je le mais apres quel ligne ??

life_firstCombatActive = false;
hint "Vous n’êtes plus en zone de tir, vous pouvez maintenant utiliser la 3eme personne.";
};
Heureusement que j'avais mis les lignes dans mes messages (ligne 1 et ligne 26).
Tiens ta juste à copy/paste.

Code:
life_combatTime = 180;

if (!life_firstCombatActive) then {
    life_firstCombatActive = true;
  
    _eh = (findDisplay 46) displayAddEventHandler ["KeyDown",{
        _key = _this select 1;
        _keys = actionKeys "PersonView";
        if (_key in _keys) then {true;};
    }]; 
  
    [] spawn {
        while {(life_combatTime > 0 )} do {
            if ((cameraView == "External") && (((vehicle player) == player) || ((vehicle player) isKindOf "Ship") || ((vehicle player) isKindOf "LandVehicle") || ((vehicle player) isKindOf "Air"))) then {
                player switchCamera "Internal";
            };
            sleep 0.2;
            life_combatTime = life_combatTime - 0.2;
        };
    };

    waitUntil {(life_combatTime <= 0)};
    _ehr = (findDisplay 46) displayRemoveEventHandler ["keyDown", _eh];

    life_firstCombatActive = false;
    hint "Vous n’êtes plus en zone de tir, vous pouvez maintenant utiliser la 3eme personne.";
};