Bonjour, après 2 heures de test pour régler le problème, je n'ai aucune possibilité de récolter les farms sur le serveur en faisant Window (Touche 10 personnalisé).
fn_gather :
fn_actionKeyHandler.sqf :
fn_KeyHandler.sqf :
Savez-vous d'où viens le problème ?
fn_gather :
Code:
#include "..\..\script_macros.hpp"
/*
File: fn_gather.sqf
Author: Devilfloh
Description:
Main functionality for gathering.
*/
private ["_maxGather","_resource","_amount","_requiredItem","_zone","_exit","_resourceCfg","_curConfig","_zoneSize","_resourceZones","_valItem","_diff","_itemName","_ok"];
if (life_action_inUse) exitWith {};
if !(isNull objectParent player) exitWith {};
if (player getVariable ["restrained", false]) exitWith { hint localize "STR_NOTF_isrestrained"; };
if (player getVariable ["playerSurrender", false]) exitWith { hint localize "STR_NOTF_surrender"; };
life_action_inUse = true;
_zone = "";
_requiredItem = "";
_exit = false;
_resource = "";
_resourceCfg = missionConfigFile >> "CfgGather" >> "Resources";
for "_i" from 0 to (count _resourceCfg - 1) do {
_curConfig = _resourceCfg select _i;
_resource = configName _curConfig;
_maxGather = getNumber(_curConfig >> "amount");
_zoneSize = getNumber(_curConfig >> "zoneSize");
_resourceZones = getArray(_curConfig >> "zones");
_requiredItem = getText(_curConfig >> "item");
{
private _zoneObj = missionNamespace getVariable [_x, objNull];
if (!isNull _zoneObj) then {
if ((player distance _zoneObj) < _zoneSize) exitWith {
_zone = _x;
};
} else {
if ((player distance (getMarkerPos _x)) < _zoneSize) exitWith {
_zone = _x;
};
};
} forEach _resourceZones;
if (_zone != "") exitWith {};
};
if (_zone isEqualTo "") exitWith {
hint "DEBUG: aucune zone detectee";
life_action_inUse = false;
};
if !(_requiredItem isEqualTo "") then {
_valItem = missionNamespace getVariable [format ["life_inv_%1", _requiredItem], 0];
if (_valItem < 1) exitWith {
switch (_requiredItem) do {
case "pickaxe": { hint "Il vous faut une pioche."; };
default { hint "Il vous manque l'objet requis."; };
};
life_action_inUse = false;
_exit = true;
};
};
if (_exit) exitWith {
life_action_inUse = false;
};
_amount = round (random _maxGather) + 1;
_diff = [_resource, _amount, life_carryWeight, life_maxWeight] call life_fnc_calWeightDiff;
if (_diff isEqualTo 0) exitWith {
hint localize "STR_NOTF_InvFull";
life_action_inUse = false;
};
switch (_requiredItem) do {
case "pickaxe": { player say3D "mining"; };
default { player say3D "harvest"; };
};
for "_i" from 0 to 4 do {
player playMoveNow "AinvPercMstpSnonWnonDnon_Putdown_AmovPercMstpSnonWnonDnon";
waitUntil {animationState player != "AinvPercMstpSnonWnonDnon_Putdown_AmovPercMstpSnonWnonDnon"};
sleep 0.5;
};
hint format ["DEBUG: resource=%1 | required=%2 | diff=%3 | zone=%4", _resource, _requiredItem, _diff, _zone];
_ok = [true, _resource, _diff] call life_fnc_handleInv;
hint format ["DEBUG: handleInv=%1 | resource=%2", _ok, _resource];
if (_ok) then {
_itemName = M_CONFIG(getText, "VirtualItems", _resource, "displayName");
titleText [format [localize "STR_NOTF_Gather_Success", localize _itemName, _diff], "PLAIN"];
};
sleep 1;
life_action_inUse = false;
fn_actionKeyHandler.sqf :
Code:
#include "..\..\script_macros.hpp"
/*
File: fn_actionKeyHandler.sqf
Author: Bryan "Tonic" Boardwine
Description:
Master action key handler, handles requests for picking up various items and
interacting with other players.
*/
private ["_curObject","_isWater","_fish","_animal","_whatIsIt","_handle"];
_curObject = cursorObject;
if (life_action_inUse) exitWith {};
if (life_interrupted) exitWith { life_interrupted = false; };
_isWater = surfaceIsWater (visiblePositionASL player);
if (playerSide isEqualTo west && {player getVariable ["isEscorting",false]}) exitWith {
[] call life_fnc_copInteractionMenu;
};
if (LIFE_SETTINGS(getNumber,"global_ATM") isEqualTo 1) then {
if ((call life_fnc_nearATM) && {!dialog}) exitWith {
[] call life_fnc_atmMenu;
};
};
/*
Récolte / minage
On le teste AVANT la logique cursorObject,
sinon viser un objet du farm bloque totalement la récolte.
*/
if (playerSide isEqualTo civilian && {!life_action_gathering} && {isNull objectParent player} && {!dialog}) then {
_whatIsIt = [] call life_fnc_whereAmI;
if !(_whatIsIt isEqualTo "nothing") exitWith {
switch (_whatIsIt) do {
case "mine": {
_handle = [] spawn life_fnc_mine;
};
default {
_handle = [] spawn life_fnc_gather;
};
};
life_action_gathering = true;
waitUntil {scriptDone _handle};
life_action_gathering = false;
};
};
if (isNull _curObject) exitWith {
if (_isWater) then {
private _fishList = nearestObjects [player, (LIFE_SETTINGS(getArray,"animaltypes_fish")), 3];
if ((count _fishList) > 0) then {
_fish = _fishList select 0;
if (!alive _fish) then {
[_fish] call life_fnc_catchFish;
};
};
} else {
private _animalList = nearestObjects [player, (LIFE_SETTINGS(getArray,"animaltypes_hunting")), 3];
if ((count _animalList) > 0) then {
_animal = _animalList select 0;
if (!alive _animal) then {
[_animal] call life_fnc_gutAnimal;
};
};
};
};
if ((_curObject isKindOf "B_supplyCrate_F" || _curObject isKindOf "Box_IND_Grenades_F") && {player distance _curObject < 3}) exitWith {
if (alive _curObject) then {
[_curObject] call life_fnc_containerMenu;
};
};
private _vaultHouse = [[["Altis", "Land_Research_house_V1_F"], ["Tanoa", "Land_Medevac_house_V1_F"]]] call TON_fnc_terrainSort;
private _altisArray = [16019.5,16952.9,0];
private _tanoaArray = [11074.2,11501.5,0.00137329];
private _pos = [[["Altis", _altisArray], ["Tanoa", _tanoaArray]]] call TON_fnc_terrainSort;
if (_curObject isKindOf "House_F" && {player distance _curObject < 12} || ((nearestObject [_pos,"Land_Dome_Big_F"]) isEqualTo _curObject || (nearestObject [_pos,_vaultHouse]) isEqualTo _curObject)) exitWith {
[_curObject] call life_fnc_houseMenu;
};
if (dialog) exitWith {};
if !(isNull objectParent player) exitWith {};
life_action_inUse = true;
[] spawn {
sleep 60;
life_action_inUse = false;
};
if (_curObject isKindOf "Man" && !(_curObject isKindOf "Animal") && {!alive _curObject} && !(_curObject getVariable ["Revive",false])) exitWith {
if (
(playerSide isEqualTo west && {(LIFE_SETTINGS(getNumber,"revive_cops") isEqualTo 1)})
|| {(playerSide isEqualTo civilian && {(LIFE_SETTINGS(getNumber,"revive_civ") isEqualTo 1)})}
|| {(playerSide isEqualTo east && {(LIFE_SETTINGS(getNumber,"revive_east") isEqualTo 1)})}
|| {playerSide isEqualTo independent}
) then {
if (life_inv_defibrillator > 0) then {
[_curObject] call life_fnc_revivePlayer;
};
};
};
if (isPlayer _curObject && {_curObject isKindOf "Man"}) then {
if ((_curObject getVariable ["restrained",false]) && {!dialog} && {playerSide isEqualTo west}) then {
[_curObject] call life_fnc_copInteractionMenu;
};
} else {
private ["_isVehicle","_miscItems","_list"];
_list = ["landVehicle","Ship","Air"];
_isVehicle = if (KINDOF_ARRAY(_curObject,_list)) then {true} else {false};
_miscItems = ["Land_BottlePlastic_V1_F","Land_TacticalBacon_F","Land_Can_V3_F","Land_CanisterFuel_F","Land_Suitcase_F"];
if (_isVehicle) then {
if (!dialog) then {
if (
player distance _curObject < ((boundingBox _curObject select 1) select 0) + 2
&& !(player getVariable ["restrained",false])
&& !(player getVariable ["playerSurrender",false])
&& !life_isknocked
&& !life_istazed
) then {
[_curObject] call life_fnc_vInteractionMenu;
};
};
} else {
if ((typeOf _curObject) in _miscItems) then {
[_curObject,player,false] remoteExecCall ["TON_fnc_pickupAction",RSERV];
} else {
if ((typeOf _curObject) isEqualTo "Land_Money_F" && {!(_curObject getVariable ["inUse",false])}) then {
[_curObject,player,true] remoteExecCall ["TON_fnc_pickupAction",RSERV];
};
};
};
};
fn_KeyHandler.sqf :
Code:
#include "..\..\script_macros.hpp"
/*
* File: fn_keyHandler.sqf
* Author: Bryan "Tonic" Boardwine
*
* Description:
* Main key handler for event 'keyDown'.
*/
private ["_handled","_shift","_alt","_code","_ctrl","_alt","_ctrlKey","_veh","_locked","_interactionKey","_mapKey","_interruptionKeys"];
_ctrl = _this select 0;
_code = _this select 1;
_shift = _this select 2;
_ctrlKey = _this select 3;
_alt = _this select 4;
_speed = speed cursorObject;
_handled = false;
_interactionKey = if (count (actionKeys "User10") isEqualTo 0) then {219} else {(actionKeys "User10") select 0};
_mapKey = (actionKeys "ShowMap" select 0);
//hint str _code;
_interruptionKeys = [17,30,31,32]; //A,S,W,D
//Vault handling...
if ((_code in (actionKeys "GetOver") || _code in (actionKeys "salute") || _code in (actionKeys "SitDown") || _code in (actionKeys "Throw") || _code in (actionKeys "GetIn") || _code in (actionKeys "GetOut") || _code in (actionKeys "Fire") || _code in (actionKeys "ReloadMagazine") || _code in [16,18]) && ((player getVariable ["restrained",false]) || (player getVariable ["playerSurrender",false]) || life_isknocked || life_istazed)) exitWith {
true;
};
if (life_action_inUse) exitWith {
if (!life_interrupted && _code in _interruptionKeys) then {life_interrupted = true;};
_handled;
};
//Hotfix for Interaction key not being able to be bound on some operation systems.
if (!(count (actionKeys "User10") isEqualTo 0) && {(inputAction "User10" > 0)}) exitWith {
//Interaction key (default is Left Windows, can be mapped via Controls -> Custom -> User Action 10)
if (!life_action_inUse) then {
[] spawn {
private "_handle";
_handle = [] spawn life_fnc_actionKeyHandler;
waitUntil {scriptDone _handle};
life_action_inUse = false;
};
};
true;
};
if (life_container_active) then {
switch (_code) do {
//space key
case 57: {
[] spawn life_fnc_placestorage;
};
};
true;
};
// -- Disable commander/tactical view
if (LIFE_SETTINGS(getNumber,"disableCommanderView") isEqualTo 1) then {
private _CommandMode = actionKeys "tacticalView";
if (_code in _CommandMode) exitWith {
hint localize "STR_NOTF_CommanderView";
true
};
};
switch (_code) do {
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;
[player] remoteExec ["life_fnc_jumpFnc",RANY];
_handled = true;
};
};
//Surrender (Shift + B)
case 48: {
if (_shift) then {
if (player getVariable ["playerSurrender",false]) then {
player setVariable ["playerSurrender",false,true];
} else {
[] spawn life_fnc_surrender;
};
_handled = true;
};
};
//Map Key
case _mapKey: {
switch (playerSide) do {
case west: {if (!visibleMap) then {[] spawn life_fnc_copMarkers;}};
case independent: {if (!visibleMap) then {[] spawn life_fnc_medicMarkers;}};
case civilian: {if (!visibleMap) then {[] spawn life_fnc_civMarkers;}};
};
};
//Holster / recall weapon. (Shift + H)
case 35: {
if (_shift && !_ctrlKey && !(currentWeapon player isEqualTo "")) then {
life_curWep_h = currentWeapon player;
player action ["SwitchWeapon", player, player, 100];
player switchCamera cameraView;
};
if (!_shift && _ctrlKey && !isNil "life_curWep_h" && {!(life_curWep_h isEqualTo "")}) then {
if (life_curWep_h in [primaryWeapon player,secondaryWeapon player,handgunWeapon player]) then {
player selectWeapon life_curWep_h;
};
};
};
//Interaction key (default is Left Windows, can be mapped via Controls -> Custom -> User Action 10)
case _interactionKey: {
hint "Interaction key pressed";
if (!life_action_inUse) then {
[] spawn {
private "_handle";
_handle = [] spawn life_fnc_actionKeyHandler;
waitUntil {scriptDone _handle};
life_action_inUse = false;
};
};
};
//Restraining (Shift + R)
case 19: {
if (_shift) then {_handled = true;};
if (_shift && playerSide isEqualTo west && {!isNull cursorObject} && {cursorObject isKindOf "Man"} && {(isPlayer cursorObject)} && {(side cursorObject in [civilian,independent])} && {alive cursorObject} && {cursorObject distance player < 3.5} && {!(cursorObject getVariable "Escorting")} && {!(cursorObject getVariable "restrained")} && {speed cursorObject < 1}) then {
[] call life_fnc_restrainAction;
};
};
//Knock out, this is experimental and yeah... (Shift + G)
case 34: {
if (_shift) then {_handled = true;};
if (_shift && playerSide isEqualTo civilian && !isNull cursorObject && cursorObject isKindOf "Man" && isPlayer cursorObject && alive cursorObject && cursorObject distance player < 4 && speed cursorObject < 1) then {
if ((animationState cursorObject) != "Incapacitated" && (currentWeapon player == primaryWeapon player || currentWeapon player == handgunWeapon player) && currentWeapon player != "" && !life_knockout && !(player getVariable ["restrained",false]) && !life_istazed && !life_isknocked) then {
[cursorObject] spawn life_fnc_knockoutAction;
};
};
};
//T Key (Trunk)
case 20: {
if (!_alt && !_ctrlKey && !dialog && {!life_action_inUse}) then {
if (!(isNull objectParent player) && alive vehicle player) then {
if ((vehicle player) in life_vehicles) then {
[vehicle player] spawn life_fnc_openInventory;
};
} else {
private "_list";
_list = ((ASLtoATL (getPosASL player)) nearEntities [["Box_IND_Grenades_F","B_supplyCrate_F"], 2.5]) select 0;
if (!(isNil "_list")) then {
_house = nearestObject [(ASLtoATL (getPosASL _list)), "House"];
if (_house getVariable ["locked", false]) then {
hint localize "STR_House_ContainerDeny";
} else {
[_list] spawn life_fnc_openInventory;
};
} else {
_list = ["landVehicle","Air","Ship"];
if (KINDOF_ARRAY(cursorObject,_list) && {player distance cursorObject < 7} && {isNull objectParent player} && {alive cursorObject} && {!life_action_inUse}) then {
if (cursorObject in life_vehicles || {locked cursorObject isEqualTo 0}) then {
[cursorObject] spawn life_fnc_openInventory;
};
};
};
};
};
};
//L Key?
case 38: {
//If cop run checks for turning lights on.
if (_shift && playerSide in [west,independent]) then {
if (!(isNull objectParent player) && (typeOf vehicle player) in ["C_Offroad_01_F","B_MRAP_01_F","C_SUV_01_F","C_Hatchback_01_sport_F","B_Heli_Light_01_F","B_Heli_Transport_01_F"]) then {
if (!isNil {vehicle player getVariable "lights"}) then {
if (playerSide isEqualTo west) then {
[vehicle player] call life_fnc_sirenLights;
} else {
[vehicle player] call life_fnc_medicSirenLights;
};
_handled = true;
};
};
};
if (!_alt && !_ctrlKey) then { [] call life_fnc_radar; };
};
//Y Player Menu
case 21: {
if (!_alt && !_ctrlKey && !dialog && !(player getVariable ["restrained",false]) && {!life_action_inUse}) then {
[] call life_fnc_p_openMenu;
};
};
//F Key
case 33: {
if (playerSide in [west,independent] && {vehicle player != player} && {!life_siren_active} && {((driver vehicle player) == player)}) then {
[] spawn {
life_siren_active = true;
sleep 4.7;
life_siren_active = false;
};
_veh = vehicle player;
if (isNil {_veh getVariable "siren"}) then {_veh setVariable ["siren",false,true];};
if ((_veh getVariable "siren")) then {
titleText [localize "STR_MISC_SirensOFF","PLAIN"];
_veh setVariable ["siren",false,true];
} else {
titleText [localize "STR_MISC_SirensON","PLAIN"];
_veh setVariable ["siren",true,true];
if (playerSide isEqualTo west) then {
[_veh] remoteExec ["life_fnc_copSiren",RCLIENT];
} else {
[_veh] remoteExec ["life_fnc_medicSiren",RCLIENT];
};
};
};
};
//O Key
case 24: {
if (_shift) then {
if !(soundVolume isEqualTo 1) then {
1 fadeSound 1;
systemChat localize "STR_MISC_soundnormal";
} else {
1 fadeSound 0.1;
systemChat localize "STR_MISC_soundfade";
};
};
};
//U Key
case 22: {
if (!_alt && !_ctrlKey) then {
if (isNull objectParent player) then {
_veh = cursorObject;
} else {
_veh = vehicle player;
};
if (_veh isKindOf "House_F" && {playerSide isEqualTo civilian}) then {
if (_veh in life_vehicles && {player distance _veh < 20}) then {
_door = [_veh] call life_fnc_nearestDoor;
if (_door isEqualTo 0) exitWith {hint localize "STR_House_Door_NotNear"};
_locked = _veh getVariable [format ["bis_disabled_Door_%1",_door],0];
if (_locked isEqualTo 0) then {
_veh setVariable [format ["bis_disabled_Door_%1",_door],1,true];
_veh animateSource [format ["Door_%1_source", _door], 0];
systemChat localize "STR_House_Door_Lock";
hint composeText [ image "icons\lock.paa", " La porte est vérouillée." ];
} else {
_veh setVariable [format ["bis_disabled_Door_%1",_door],0,true];
_veh animateSource [format ["Door_%1_source", _door], 1];
systemChat localize "STR_House_Door_Unlock";
hint composeText [ image "icons\UNlock.paa", " La porte est déverouillée." ];
};
};
} else {
_locked = locked _veh;
if (_veh in life_vehicles && {player distance _veh < 20}) then {
if (_locked isEqualTo 2) then {
if (local _veh) then {
_veh lock 0;
// BI
_veh animateDoor ["door_back_R",1];
_veh animateDoor ["door_back_L",1];
_veh animateDoor ['door_R',1];
_veh animateDoor ['door_L',1];
_veh animateDoor ['Door_L_source',1];
_veh animateDoor ['Door_rear',1];
_veh animateDoor ['Door_rear_source',1];
_veh animateDoor ['Door_1_source',1];
_veh animateDoor ['Door_2_source',1];
_veh animateDoor ['Door_3_source',1];
_veh animateDoor ['Door_LM',1];
_veh animateDoor ['Door_RM',1];
_veh animateDoor ['Door_LF',1];
_veh animateDoor ['Door_RF',1];
_veh animateDoor ['Door_LB',1];
_veh animateDoor ['Door_RB',1];
_veh animateDoor ['DoorL_Front_Open',1];
_veh animateDoor ['DoorR_Front_Open',1];
_veh animateDoor ['DoorL_Back_Open',1];
_veh animateDoor ['DoorR_Back_Open ',1];
} else {
[_veh,0] remoteExecCall ["life_fnc_lockVehicle",_veh];
_veh animateDoor ["door_back_R",1];
_veh animateDoor ["door_back_L",1];
_veh animateDoor ['door_R',1];
_veh animateDoor ['door_L',1];
_veh animateDoor ['Door_L_source',1];
_veh animateDoor ['Door_rear',1];
_veh animateDoor ['Door_rear_source',1];
_veh animateDoor ['Door_1_source',1];
_veh animateDoor ['Door_2_source',1];
_veh animateDoor ['Door_3_source',1];
_veh animateDoor ['Door_LM',1];
_veh animateDoor ['Door_RM',1];
_veh animateDoor ['Door_LF',1];
_veh animateDoor ['Door_RF',1];
_veh animateDoor ['Door_LB',1];
_veh animateDoor ['Door_RB',1];
_veh animateDoor ['DoorL_Front_Open',1];
_veh animateDoor ['DoorR_Front_Open',1];
_veh animateDoor ['DoorL_Back_Open',1];
_veh animateDoor ['DoorR_Back_Open ',1];
};
systemChat "Vous avez déverrouillé votre véhicule.";
hint composeText [ image "icons\unlock.paa", " Le véhicule est ouvert." ];
player say3D "unlockCarSound";
} else {
if (local _veh) then {
_veh lock 2;
_veh animateDoor ["door_back_R",0];
_veh animateDoor ["door_back_L",0];
_veh animateDoor ['door_R',0];
_veh animateDoor ['door_L',0];
_veh animateDoor ['Door_L_source',0];
_veh animateDoor ['Door_rear',0];
_veh animateDoor ['Door_rear_source',0];
_veh animateDoor ['Door_1_source',0];
_veh animateDoor ['Door_2_source',0];
_veh animateDoor ['Door_3_source',0];
_veh animateDoor ['Door_LM',0];
_veh animateDoor ['Door_RM',0];
_veh animateDoor ['Door_LF',0];
_veh animateDoor ['Door_RF',0];
_veh animateDoor ['Door_LB',0];
_veh animateDoor ['Door_RB',0];
_veh animateDoor ['DoorL_Front_Open',0];
_veh animateDoor ['DoorR_Front_Open',0];
_veh animateDoor ['DoorL_Back_Open',0];
_veh animateDoor ['DoorR_Back_Open ',0];
} else {
[_veh,2] remoteExecCall ["life_fnc_lockVehicle",_veh];
_veh animateDoor ["door_back_R",0];
_veh animateDoor ["door_back_L",0];
_veh animateDoor ['door_R',0];
_veh animateDoor ['door_L',0];
_veh animateDoor ['Door_L_source',0];
_veh animateDoor ['Door_rear',0];
_veh animateDoor ['Door_rear_source',0];
_veh animateDoor ['Door_1_source',0];
_veh animateDoor ['Door_2_source',0];
_veh animateDoor ['Door_3_source',0];
_veh animateDoor ['Door_LM',0];
_veh animateDoor ['Door_RM',0];
_veh animateDoor ['Door_LF',0];
_veh animateDoor ['Door_RF',0];
_veh animateDoor ['Door_LB',0];
_veh animateDoor ['Door_RB',0];
_veh animateDoor ['DoorL_Front_Open',0];
_veh animateDoor ['DoorR_Front_Open',0];
_veh animateDoor ['DoorL_Back_Open',0];
_veh animateDoor ['DoorR_Back_Open ',0];
};
systemChat "Vous avez verrouillé votre véhicule.";
hint composeText [ image "icons\lock.paa", " Le véhicule est fermé." ];
player say3D "lockCarSound";
};
};
};
};
};
};
_handled;
Savez-vous d'où viens le problème ?