Les scripts sont issus des missions "Dominations" de Xeno.
J'ai donc pas écrit entièrement les scripts. L'auteur d'origine est Xeno.
L'ensemble des scripts permet au joueur de réparer et remettre de l'essence dans un véhicule (air+terre). En fonction des dégâts la réparation est plus ou moins longue. Le joueurs peut "analyser" le véhicule pour connaitre les dégâts de celui-ci et estimé le temps de réparation nécessaire.
Durant les réparations, il peut annuler l'action si besoin.
Par défaut (tel que sont les scripts ci-dessous) tout le monde peut exécuter le script.
=> Si l'on souhaite limité l'utilisation il faut éditer le script "mecano.sqf" à l'endroit indiqué.
Pour la pratique:
A mettre dans l'init:
"init.sqf"
Code : Tout sélectionner
//Pour le script de réparation:
x_sfunc = compile (preprocessFileLineNumbers "liste_vehicule.sqf");
//Script pour la réparation des véhicules par les pilotes:
execVM"scripts\mecano\mecano.sqf"
Les scripts sont a copier et renommer dans le dossier de votre mission:
"liste_vehicule.sqf"
Code : Tout sélectionner
//Fait par =[TTK]= Yourry
/*
Script réecrit sur la base des scripts des missions "domination"
Auteur d'origine: Xeno
*/
//Fonction qui permet de définir le type de véhicule
x_sfunc = {
private ["_objs"];
if ((vehicle player) == player)then{_objs = nearestObjects [player,["LandVehicle","Air"],5];if (count _objs > 0) then {d_objectID2 = _objs select 0;if (alive d_objectID2) then {if(damage d_objectID2 > 0.05 || fuel d_objectID2<1)then{true}else{false}}else{false}}}else{false};
};
"mecano.sqf":
Code : Tout sélectionner
//Fait par =[TTK]= Yourry
/*
Script réecrit sur la base des scripts des missions "domination"
Auteur d'origine: Xeno
Pour info sur les typeOf
*/
//Cette faculté de réparation n'est possible que pour: "USMC_Soldier" si les "//" sont enlevés devant le "if" et "};"
//On peut donc changer en fonction des personnages
//if( player isKindOf "USMC_Soldier") then { /*si on enlève les deux "//" on active notre "if" et bien penser à enlever ceux d'en bas aussi alors*/
//Déclencheur qui ajoute l'action au joueurs
_trigger = createTrigger["EmptyDetector" ,position player];
_trigger setTriggerArea [0, 0, 0, true];
_trigger setTriggerActivation ["NONE", "PRESENT", true];
_trigger setTriggerStatements["call x_sfunc", "actionID6 = player addAction [""<t color='#FFD800'>Analyser le véhicule</t>"", 'scripts\mecano\analyses.sqf',[],-1,false];actionID2 = player addAction [""<t color='#FF1000'>Reparer/Essence</t>"", 'scripts\mecano\reparations.sqf',[],-1,false]", "player removeAction actionID6;player removeAction actionID2"];
//}; /*si on enlève les deux "//" on active notre "if"
Code : Tout sélectionner
// by Xeno
//Réecrit par =[TTK]= Yourry
private ["_aid","_caller","_coef","_damage","_damage_ok","_damage_val","_fuel","_fuel_ok","_fuel_val","_rep_count","_breaked_out","_rep_action","_type_name"];
_caller = _this select 1;
_aid = _this select 2;
//Fonction
XfGetDisplayName = {
private ["_obj_name", "_obj_kind", "_cfg"];
_obj_name = _this select 0;_obj_kind = _this select 1;
_cfg = switch (_obj_kind) do {case 0: {"CfgVehicles"};case 1: {"CfgWeapons"};case 2: {"CfgMagazines"};};
getText (configFile >> _cfg >> _obj_name >> "displayName")
};
XfGlobalChat = {x_global_chat_logic globalChat _this};
//Supprime l'action
_caller removeAction _aid;
//On s'assure qu on est bien local
if (!(local _caller)) exitWith {};
//Coefficients
_rep_count = switch (true) do {
case (d_objectID2 isKindOf "Air"): {0.1};
case (d_objectID2 isKindOf "Tank"): {0.2};
default {0.3};
};
//Définition des variables
_fuel = fuel d_objectID2;
_damage = damage d_objectID2;
_damage_val = (_damage / _rep_count);
_fuel_val = ((1 - _fuel) / _rep_count);
_coef = switch (true) do {
case (_fuel_val > _damage_val): {_fuel_val};
default {_damage_val};
};
_coef = ceil _coef;
_coef_x2 = _coef *2;
//Indications
hintSilent format ["Véhicule status:\n---------------------\nFuel: %1\nDamage: %2",_fuel, _damage];
_type_name = [typeOf (d_objectID2),0] call XfGetDisplayName;
(format ["Réparations et essence %1... Prêt", _type_name]) call XfGlobalChat;
//Définition des variables
_damage_ok = false;
_fuel_ok = false;
d_cancelrep = false;
_breaked_out = false;
_breaked_out2 = false;
//action qui permet de stopper la réparation
_rep_action = player addAction["Stopper la tâche","stoprep.sqf"];
//Réparation et essence
for "_wc" from 1 to _coef_x2 do {
if (!alive player || d_cancelrep) exitWith {player removeAction _rep_action};
"Still working..." call XfGlobalChat;
player playMove "AinvPknlMstpSlayWrflDnon_medic";
sleep 3.0;
waitUntil {animationState player != "AinvPknlMstpSlayWrflDnon_medic"};
if (d_cancelrep) exitWith {_breaked_out = true};
if (vehicle player != player) exitWith {
_breaked_out2 = true;
hintSilent "Vous êtes entré dans le véhicule, service annulé";
};
if (!_fuel_ok) then {_fuel = _fuel + _rep_count};
if (!_fuel_ok) then {d_objectID2 setFuel _fuel };
if (_fuel >= 1 && !_fuel_ok) then {_fuel = 1;_fuel_ok = true};
if (!_damage_ok) then {_damage = _damage - _rep_count};
if (!_damage_ok) then {d_objectID2 setDammage _damage};
if (_damage <= 0.01 && !_damage_ok) then {_damage = 0;_damage_ok = true};
hintSilent format ["Véhicule status:\n---------------------\nEssence: %1\nDégâts: %2",_fuel, _damage];
if(_damage_ok) exitWith{};
};
//Indication si il y a eu un souci
if (_breaked_out) exitWith {
"Service annulé..." call XfGlobalChat;
player removeAction _rep_action;
};
if (_breaked_out2) exitWith {};
d_eng_can_repfuel = false;
//Supprime l'action pour stopper la tâche
player removeAction _rep_action;
if (!alive player) exitWith {player removeAction _rep_action};
(format ["%1 est réparer et avec le plein", _type_name]) call XfGlobalChat;
Code : Tout sélectionner
// by Xeno
private ["_aid","_caller","_coef","_damage","_damage_val","_estimated_time","_fuel","_fuel_val","_rep_count","_this","_type_name"];
_caller = _this select 1;
_aid = _this select 2;
if (!(local _caller)) exitWith {};
_rep_count = 1;
if (d_objectID2 isKindOf "Air") then {
_rep_count = 0.1;
} else {
if (d_objectID2 isKindOf "Tank") then {
_rep_count = 0.2;
} else {
_rep_count = 0.3;
};
};
_fuel = fuel d_objectID2;
_damage = damage d_objectID2;
_damage_val = (_damage / _rep_count);
_fuel_val = ((1 - _fuel) / _rep_count);
_coef = if (_fuel_val == _damage_val) then {
_damage_val
} else {
if (_fuel_val > _damage_val) then {
_fuel_val
} else {
_damage_val
}
};
_coef = ceil _coef;
_coef_x2 = _coef *2;
_estimated_time = _coef_x2 * 3;
XfGetDisplayName = {
private ["_obj_name", "_obj_kind", "_cfg"];
_obj_name = _this select 0;_obj_kind = _this select 1;
_cfg = switch (_obj_kind) do {case 0: {"CfgVehicles"};case 1: {"CfgWeapons"};case 2: {"CfgMagazines"};};
getText (configFile >> _cfg >> _obj_name >> "displayName")
};
_type_name = [typeOf (d_objectID2),0] call XfGetDisplayName;
hintSilent format ["Vehicule statut: %4\n--------------------------------\nFuel: %1\nDégâts: %2\nRéparation estimmés en: %3 sec",_fuel, _damage,_estimated_time,_type_name];
"stoprep.sqf"
Code : Tout sélectionner
d_cancelrep = true;
Une mission d'exemple est disponible ci-dessous