Français Not solved Comment ajouter une action pour mettre un vêtement sur un autre joueur?

  • Auteur de la discussion Auteur de la discussion Phoenix53
  • Date de début Date de début
  • Bonjour Visiteur ! Les sujets de cette catégorie sont clos. Si vous souhaitez réouvrir, merci de nous contacter en précisant le lien du post à réouvrir !

    Hello Visiteur ! The topics in this category are closed. If you wish to reopen, please contact us with the link of the post you wish to reopen !

Phoenix53

User
30/9/21
137
4
3
800
Bonjour,

J'aimerais savoir comment je pourrais rajouter un action pour qu'un joueur mette un vêtement sur un autre joueur (comme une cagoule) soit une action molette soit par le KeyHandler

Merci d'avance
 
--- Ce message a été généré automatiquement par ChatGPT, le contenu peut être incorrect. Veuillez lire le message avec précaution ! ---

Bonjour,

Pour ajouter une action permettant à un joueur de mettre un vêtement sur un autre joueur, vous pouvez utiliser la fonction addAction dans SQF. Voici un exemple de code pour vous aider :
Code:
// Dans le fichier initPlayerLocal.sqf ou tout autre endroit approprié

// Définir la fonction exécutée lorsque l'action est sélectionnée
fnc_putClothingOn = {
    private ["_target"];

    // Récupérer le joueur cible de l'action
    _target = _this select 0;

    // Mettre le vêtement (cagoule) sur le joueur cible
    // Remplacez "cagoule" par le nom de votre vêtement
    _target addHeadgear "cagoule";
};

// Ajouter l'action à tous les joueurs
{
    if (local _x) then {
        // Remplacez "Mettre la cagoule" par le texte souhaité pour l'action
        _x addAction ["Mettre la cagoule", {[_this select 0] call fnc_putClothingOn}];
    }
} forEach playableUnits;

Ce code ajoute une action "Mettre la cagoule" à tous les joueurs jouables. Lorsque l'action est sélectionnée, la fonction fnc_putClothingOn est exécutée, qui met la cagoule sur le joueur cible.

J'espère que cela vous aide ! N'hésitez pas à me poser d'autres questions si nécessaire.

Cordialement,
Vôtre SQF Bot

--- Pour continuer la discussion avec ChatGPT, cliquez sur "Répondre" en bas à droite de ce message. Sinon, attendez que quelqu'un vous réponde. ---
 
En relation à ce qu'à mis le Bot, j'ai fait quelque chose comme ça mais ca fonctionne pas
Code:
fnc_putClothingOn = {
    private ["_target"];
    // Récupérer le joueur cible de l'action
    _target = _this select 0;
    // Mettre le vêtement (cagoule) sur le joueur cible - Remplacez "cagoule" par le nom de votre vêtement
    _target addHeadgear "mgsr_headbag_goggles";
};
{
    if !("mgsr_headbag_goggles" in (items player)) exitWith {hint "Tu n'as pas de sac"};
    if (local _x) then {
        // Remplacez "Mettre la cagoule" par le texte souhaité pour l'action
        _x addAction ["Mettre le sac", {[_this select 0] call fnc_putClothingOn}];
    }
    if ((cameraView == "External") && ((vehicle player) == player)) then {
                player switchCamera "Internal";
            };
            sleep 0.2;
} forEach playableUnits;
 
Dernière édition par un modérateur:
Bonjour, va dans "Altis_Life.Altis/core/fn_setupActions.sqf" puis ajoute ceci dans case civilian :
Code:
life_actions pushBack (player addAction["Mettre la cagoule",life_fnc_bagAction,"",0,false,false,"",'
!isNull cursorObject && player distance cursorObject < 3.5 && isPlayer cursorObject && cursorObject getVariable "restrained" && !cursorObject getVariable "haveBag");

life_actions pushBack (player addAction["Retirer la cagoule",life_fnc_bagAction,"",0,false,false,"",'
!isNull cursorObject && player distance cursorObject < 3.5 && isPlayer cursorObject && cursorObject getVariable "restrained" && cursorObject getVariable "haveBag");

Puis, créer un fichier nomée = "fn_bagAction" dans "Altis_Life.Altis/core/actions/" et dedans met :
Code:
private ["_target"];
_target = cursorObject;

_bagItem = "mgsr_headbag_goggles";

//Error checks
if (isNull _target) exitWith {};
if (!isPlayer _target) exitWith {};

_targetHaveBag = _target getVariable "haveBag";

if (!_targetHaveBag || isNil "_targetHaveBag") then {
    _getLastItem = headgear _target;

    _target addHeadgear _bagItem;
    _target setVariable ["haveBag",true];
    
    titleCut ["", "BLACK FADED", 999];
    
    _target setVariable ["lastItemBeforeBag",_getLastItem];
} else {
    _getLastItem = _target getVariable "lastItemBeforeBag";

    _target addHeadgear _getLastItem;
    _target setVariable ["haveBag",false];
    
    titlecut ["","BLACK IN",2];
    
    _target setVariable ["lastItemBeforeBag", ""];
};

Enfin, dans "Altis_Life.Altis/Functions.hpp", ajoute dans la class Actions à la fin (après "class unrestrain {};") ceci :
Code:
class bagAction {};

Tiens moi au courant si cela fonctionne, je n'ai pas pu l'essayer.
 
Bonjour, va dans "Altis_Life.Altis/core/fn_setupActions.sqf" puis ajoute ceci dans case civilian :
Code:
life_actions pushBack (player addAction["Mettre la cagoule",life_fnc_bagAction,"",0,false,false,"",'
!isNull cursorObject && player distance cursorObject < 3.5 && isPlayer cursorObject && cursorObject getVariable "restrained" && !cursorObject getVariable "haveBag");

life_actions pushBack (player addAction["Retirer la cagoule",life_fnc_bagAction,"",0,false,false,"",'
!isNull cursorObject && player distance cursorObject < 3.5 && isPlayer cursorObject && cursorObject getVariable "restrained" && cursorObject getVariable "haveBag");

Puis, créer un fichier nomée = "fn_bagAction" dans "Altis_Life.Altis/core/actions/" et dedans met :
Code:
private ["_target"];
_target = cursorObject;

_bagItem = "mgsr_headbag_goggles";

//Error checks
if (isNull _target) exitWith {};
if (!isPlayer _target) exitWith {};

_targetHaveBag = _target getVariable "haveBag";

if (!_targetHaveBag || isNil "_targetHaveBag") then {
    _getLastItem = headgear _target;

    _target addHeadgear _bagItem;
    _target setVariable ["haveBag",true];
   
    titleCut ["", "BLACK FADED", 999];
   
    _target setVariable ["lastItemBeforeBag",_getLastItem];
} else {
    _getLastItem = _target getVariable "lastItemBeforeBag";

    _target addHeadgear _getLastItem;
    _target setVariable ["haveBag",false];
   
    titlecut ["","BLACK IN",2];
   
    _target setVariable ["lastItemBeforeBag", ""];
};

Enfin, dans "Altis_Life.Altis/Functions.hpp", ajoute dans la class Actions à la fin (après "class unrestrain {};") ceci :
Code:
class bagAction {};

Tiens moi au courant si cela fonctionne, je n'ai pas pu l'essayer.
Merci pour tout ces renseignement, je vais tester et je te redis , tu sais si on peut forcer la personne qui se retrouve avec la cagoule pour qu'elle soit à la première personne pour avoir la vision cagoule ?
 
Euh, je peux t'expliquer, mais là j'ai pas trop le temps de le coder.
En gros faut que tu fasse un peu dans le même système que le rob dans altis life.

Faut ajouter un truc dans le genre après les set variable dans ton fichier bagAction :
Code:
[player] remoteExecCall ["life_fnc_bagVision",_target];

Tu créer un fichier bagVision, dans le dossier qui te convient le mieux et tu le relie dans le function.hpp.

Et dans bagvision, tu met un script similaire au script de bloquage de première personne en combat. Et tu remplace les "life_combatTime" par le boolean de la variable "haveBag".

J'espère ca te sera utile.
 
  • Like
Les réactions: Phoenix53
Bonjour, va dans "Altis_Life.Altis/core/fn_setupActions.sqf" puis ajoute ceci dans case civilian :
Code:
life_actions pushBack (player addAction["Mettre la cagoule",life_fnc_bagAction,"",0,false,false,"",'
!isNull cursorObject && player distance cursorObject < 3.5 && isPlayer cursorObject && cursorObject getVariable "restrained" && !cursorObject getVariable "haveBag");

life_actions pushBack (player addAction["Retirer la cagoule",life_fnc_bagAction,"",0,false,false,"",'
!isNull cursorObject && player distance cursorObject < 3.5 && isPlayer cursorObject && cursorObject getVariable "restrained" && cursorObject getVariable "haveBag");

Puis, créer un fichier nomée = "fn_bagAction" dans "Altis_Life.Altis/core/actions/" et dedans met :
Code:
private ["_target"];
_target = cursorObject;

_bagItem = "mgsr_headbag_goggles";

//Error checks
if (isNull _target) exitWith {};
if (!isPlayer _target) exitWith {};

_targetHaveBag = _target getVariable "haveBag";

if (!_targetHaveBag || isNil "_targetHaveBag") then {
    _getLastItem = headgear _target;

    _target addHeadgear _bagItem;
    _target setVariable ["haveBag",true];
  
    titleCut ["", "BLACK FADED", 999];
  
    _target setVariable ["lastItemBeforeBag",_getLastItem];
} else {
    _getLastItem = _target getVariable "lastItemBeforeBag";

    _target addHeadgear _getLastItem;
    _target setVariable ["haveBag",false];
  
    titlecut ["","BLACK IN",2];
  
    _target setVariable ["lastItemBeforeBag", ""];
};

Enfin, dans "Altis_Life.Altis/Functions.hpp", ajoute dans la class Actions à la fin (après "class unrestrain {};") ceci :
Code:
class bagAction {};

Tiens moi au courant si cela fonctionne, je n'ai pas pu l'essayer.
Après test, je n'est pas d'intéraction quand je suis devant la personne menottée avec une cagoule sur moi

Il y a des variables à changer dans le bagAction à part le nom de l'objet ?
 
Dernière édition:
Salut, essaye cette petite modification que j'ai apporté, et autrement si tu n'as rien quand tu roule la molette, c'est que cela doit venir des conditions pour que le addaction s'affiche. Donc soit c'est "(!cursorObject getVariable "haveBag" || isNil "cursorObject getVariable ""haveBag""")"qui pose problème, soit en effet le restrain qui n'est pas le même que celui de base, et là j'avoue ne pas connaître les scripts de TP, donc je pourrais pas vraiment t'aider sur ce point. Essaye de chercher l'alternative au "cursorObject getVariable "restrained"" sur ton script. Parcours des fichiers où la conditions d'être menoté s'applique et trouve la variable qui définit quand on est menotté.

Code:
life_actions pushBack (player addAction["Mettre la cagoule",life_fnc_bagAction,"",0,false,false,"",'
!isNull cursorObject && player distance cursorObject < 3.5 && isPlayer cursorObject && cursorObject getVariable "restrained" && (!cursorObject getVariable "haveBag" || isNil "cursorObject getVariable ""haveBag"""));
 
Restrain System utilise les mêmes variable qu'Altislife, ça ne devrait pas avoir d'impact :
1697203309170.png

Pour éviter les cas où la variable "restrained" ou "haveBag" est indéfinie, tu peux mettre une variable par défaut au getVariable comme ceci :
Code:
life_actions pushBack (player addAction["Mettre la cagoule",life_fnc_bagAction,"",0,false,false,"",'
(!(isNull cursorObject) && (player distance cursorObject < 3.5) && (isPlayer cursorObject) && (cursorObject getVariable ["restrained",false]) && !(cursorObject getVariable ["haveBag",false]))']);

life_actions pushBack (player addAction["Retirer la cagoule",life_fnc_bagAction,"",0,false,false,"",'
(!(isNull cursorObject) && (player distance cursorObject < 3.5) && (isPlayer cursorObject) && (cursorObject getVariable ["restrained",false]) && (cursorObject getVariable ["haveBag",false]))']);

PS : Liliannismo33 Liliannismo33 il te manque ']); à la fin de ta condition