S'asseoir sur une chaise (Compatibilité : Vanilla / Moddé)

Bonjour tout le monde.
Nouveau scripts de ma part voir même premier.

Description : Vous pourrez vous asseoir sur une chaise avec une action “molette” sur celle-ci et ferez la touche Z (Avancer) pour sortir de la chaise.

Auteur : Jay

Source : https://native-network.net/forum/thread/7073-tutorial-sitzscript/?thread/7073-tutorial-sitzscript/

Allons y !

1) Rendez-vous dans Mission\scripts
si le dossier scripts n’existe pas créer le.
Créer le fichier sitdown.sqf

#include "..\script_macros.hpp"


private ["_chair","_unit","_dir","_z"];

_chair = _this select 0; 
_unit = _this select 1;

if (!isNull life_sitting) exitWith { hint "Tu es déjà assis!" };
if (vehicle _unit != _unit) exitWith { hint "Tu es déjà assis ici !!" };
if (_unit distance _chair > 4) exitWith { hint "Vous êtes trop loin !" };
if (_unit getVariable ["restrained",false]) exitWith {};
if (_unit getVariable ["isTazed",false]) exitWith {};

if (!isNull (_chair getVariable ["sitting", objNull])) exitWith { hint "Vous ne pouvez pas vous asseoir sur quelqu'un"; };

_dir = switch (typeOf _chair) do
{
	case "Land_ChairPlastic_F": { 270 };
	case "Land_CampingChair_V1_F": { 180 };
	case "Land_CampingChair_V2_F": { 180 };
	case "Land_ChairWood_F": { 180 };
	case "Land_OfficeChair_01_F": { 180 };
	case "Land_Bench_F": { 90 };
	
	default { 180 };
};

_z = switch (typeOf _chair) do
{
	default { 0 };
};

_posATL = getPosATL _chair;
_obj = "Land_ClutterCutter_small_F" createVehicle (_posATL);
_obj setPosATL (_posATL);
_obj setDir ((direction _chair) - _dir);
_obj setVariable ["idleTime", time, true];
_unit attachTo [_obj,[0,0,_z]];
life_sitting = _obj;
_chair setVariable ["sitting", _unit, true];
[_unit,"Crew","switch",true] remoteExecCall ["life_fnc_animSync",RCLIENT];
_action = _unit addAction ["<t color='#B45F04'>Otur</t>","TulparHAN\scripts\standup.sqf"];

waitUntil { isNull life_sitting || !(alive _unit) || player distance (getPos _chair) > 2 };

_unit removeAction _action;
life_sitting = objNull;
_chair setVariable ["sitting", nil, true];
if (isNull attachedTo _unit) then
{
	if (attachedTo _unit == _obj) then { detach _unit; deleteVehicle _obj; };
};

2) Créer le fichier standup.sqf

#include "..\script_macros.hpp"
/*
	File: standup.sqf
	Author: John "Paratus" VanderZwet
	Description:
	Stand up from chair
*/

detach player;
[player,"","switch",true] remoteExecCall ["life_fnc_animSync",RCLIENT];
if (!isNull life_sitting) then { deleteVehicle life_sitting; };
life_sitting = objNull;

_pos = getPosASL player;
_dir = getDir player;
player setPosASL [(_pos select 0) + (0.5 * sin(_dir)), (_pos select 1) + (0.5 * cos(_dir)), _pos select 2];

3) Rendrez-vous dans Mission\core
Editez init.sqf

cherchez ceci :

diag_log "----------------------------------------------------------------------------------------------------";
diag_log format ["               End of Altis Life Client Init :: Total Execution Time %1 seconds ",(diag_tickTime - _timeStamp)];
diag_log "----------------------------------------------------------------------------------------------------";

Ajoutez au dessus :

MAC_fnc_switchMove = {
    private["_object","_anim"];
    _object = _this select 0;
    _anim = _this select 1;

    _object switchMove _anim; 
};

4) Rendez-vous dans Mission\core\functions
Editez fn_KeyHandler.sqf

Rajoutez la case suivante :

case 17: {
		if (!isNull life_sitting) then
		{
			[] execVM "scripts\standup.sqf";
			_handled = true;
		};
	};

17 correspond à la touche Z.

Je l’ai ajouter en dessous de ceci :

case 57: {
        if (isNil "jumpActionTime") then {jumpActionTime = 0;};
        if (_shift && {!(animationState player isEqualTo "AovrPercMrunSrasWrflDf")} && {isTouchingGround player} && {stance player isEqualTo "STAND"} && {speed player > 2} && {!life_is_arrested} && {((velocity player) select 2) < 2.5} && {time - jumpActionTime > 1.5}) then {
            jumpActionTime = time; //Update the time.
            [player] remoteExec ["life_fnc_jumpFnc",RANY]; //Global execution
            _handled = true;
        };
    };

5) Rendez-vous dans Mission\core
Editez fn_setupAction.sqf
Rajoutez :

life_actions pushBack (player addAction["<t color='#0099FF'>S'asseoir</t>",{[cursorObject,player] execVM "scripts\sitdown.sqf"},true,1,true,true,"""",'player distance cursorObject < 3 && typeOf cursorObject isEqualTo "Land_ChairWood_F" || typeOf cursorObject isEqualTo "Land_ChairPlastic_F" || typeOf cursorObject isEqualTo "Land_CampingChair_V1_F" || typeOf cursorObject isEqualTo "Land_CampingChair_V2_F" || typeOf cursorObject isEqualTo "Land_OfficeChair_01_F" || typeOf cursorObject isEqualTo "Land_Bench_F" ']);

Sur une seul ligne !

Mettez ceci dans toutes les case sauf si vous ne voulez pas que les civil puisse s’asseoir par exemple ne le mettez pas dans la case civilian.

Pour modifier les type de chaise utiliser modifier les classname dans le fichier sitdown.sqf et fn_setupAction.sqf

Fonctionnel en 5.0 non tester sur les autres.

Bonjour @Zombie je ne voit pas l’utilité de ton Tutoriel si ce n’est prendre d’un forum pour le mettre ici sans faire de traduction dans les codes.

hint "Sen zaten oturuyorsun!"
hint "Sen zaten buraya oturuyorsun!!" 
hint "Umarim ayaklariniz bu kadar uzun degildir?" 
hint "Birinin ustune oturmayi mi dusunuyorsunuz?!"

De plus ils y a des morceaux de Code qui ne servent strictement à rien.

_z = switch (typeOf _chair) do
{
	default { 0 };
};
_unit attachTo [_obj,[0,0,_z]];

Pourquoi faire un Switch si on utilise la valeur par défaut ?
Autant mettre Directement:

_unit attachTo [_obj,[0,0,0]];
MAC_fnc_switchMove = {
    private["_object","_anim"];
    _object = _this select 0;
    _anim = _this select 1;

    _object switchMove _anim; 
};

Je n’ai vu a aucun endroit l’appel à cette fonction

Y’a d’autre chose encore “Bizarre” dans les codes mais je te laisse voir ça.

Hello,
c est pas parce que ca fonctionne que c est bien !

C est cool de ta part de partager … mais là, c est vraiement pas bon comme code.

Je dirais même que c’est digoulasse :nerd_face::sweat_smile: