Français Restriction de farm suivant le nombre de policier de connecté

Yuri Zoko

TP-Shop Team
Membre du personnel
Developer
31/3/20
448
76
63
1 300
Salut !

Dans ce tutoriel je vais vous apprendre comment restreindre un farm suivant le nombre de policier connecté.

Ce tutoriel sera composer de 3 sections :

  1. - Restriction à la récolte
  2. - Restriction au traitement
  3. - Restriction à la revente

Ces 3 sections sont totalement indépendante, c'est à dire que vous pouvez seulement installer 1 seule ou toutes les sections.


Commençons les choses sérieuses :

Restriction à la récolte

Ouvrir le fichier Config_Gather.hpp dans le dossier config et y ajouter la class suivante tout en bas du fichier à l’avant dernière ligne au dessus du dernier
Code:
Développer Réduire Copier
};

Code:
Développer Réduire Copier
 class Illegals {
};

Ajoutez vos ressources illégales dans cette class :
Code:
Développer Réduire Copier
 class Illegals {
     class cannabis {
         amount = 3;
         zones[] = { "weed_1" };
         item = "";
         zoneSize = 30;
         copRequired = 2; // Nombre de policier connecter pour pouvoir récolter
     };
     class heroin_unprocessed {
         amount = 3;
         zones[] = { "heroin_1" };
         item = "";
         zoneSize = 30;
         copRequired = 0;
     };
     class cocaine_unprocessed {
         amount = 3;
         zones[] = { "cocaine_1" };
         item = "";
         zoneSize = 30;
         copRequired = 3;
     };
};

N’oubliez pas de supprimer les ressources illégales présentes de base dans votre mission

Créez un nouveau fichier
dans votre dossier core/actions et nommez le fn_illegalGather.sqf puis ajoutez dedans :
Code:
Développer Réduire Copier
#include "..\..\script_macros.hpp"
/*
    Author: Yuri Zoko
    Teamspeak 3: ts.the-programmer.com
    Web site: www.the-programmer.com

    Terms of use:
      - This file is forbidden unless you have permission from the author. If you have this file without permission to use it please do not use it and do not share it.
      - If you have permission to use this file, you can use it on your server however it is strictly forbidden to share it.
      - Out of respect for the author please do not delete this information.

*/
private ["_maxGather","_resource","_amount","_maxGather","_requiredItem","_numbercop"];
if (life_action_inUse) exitWith {};
if !(isNull objectParent player) exitWith {};
if (player getVariable "restrained") exitWith {hint localize "STR_NOTF_isrestrained";};
if (player getVariable "playerSurrender") exitWith {hint localize "STR_NOTF_surrender";};

life_action_inUse = true;
_zone = "";
_requiredItem = "";
_exit = false;

_resourceCfg = missionConfigFile >> "CfgGather" >> "Illegals";
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");
    _numbercop = getNumber(_curConfig >> "copRequired");
    {
        if ((player distance (getMarkerPos _x)) < _zoneSize) exitWith {_zone = _x;};
    } forEach _resourceZones;

    if (_zone != "") exitWith {};
};

if (_zone isEqualTo "") exitWith {life_action_inUse = false;};

if (_requiredItem != "") then {
    _valItem = missionNamespace getVariable "life_inv_" + _requiredItem;

    if (_valItem < 1) exitWith {
        switch (_requiredItem) do {
         //Messages here
        };
        life_action_inUse = false;
        _exit = true;
    };
};

if ((west countSide playableUnits) < _numbercop) exitWith {hint "Il n'y a pas assez de policier pour pouvoir récolter cette ressource !"};

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,"mining",35,1] remoteExecCall ["life_fnc_say3D",RCLIENT]};
    default {[player,"harvest",35,1] remoteExecCall ["life_fnc_say3D",RCLIENT]};
};

for "_i" from 0 to 4 do {
    player playMoveNow "AinvPercMstpSnonWnonDnon_Putdown_AmovPercMstpSnonWnonDnon";
    waitUntil{animationState player != "AinvPercMstpSnonWnonDnon_Putdown_AmovPercMstpSnonWnonDnon";};
    sleep 0.5;
};

if ([true,_resource,_diff] call life_fnc_handleInv) 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;

Ouvrez votre fichier Functions.hpp et ajoutez a la fin de la class Actions :
Code:
Développer Réduire Copier
class illegalGather {};

Ouvrez votre fn_actionKeyHandler.sqf dans le dossier core\functions et en dessous de la ligne (ligne 47 de base)
Code:
Développer Réduire Copier
case "mine" : { _handle = [] spawn life_fnc_mine };

Ajoutez :

Code:
Développer Réduire Copier
case "illegal" : { _handle = [] spawn life_fnc_illegalGather };

Ouvrez votre fn_whereAmI.sqf dans le dossier core\functions cherchez la ligne suivante :
Code:
Développer Réduire Copier
if (_zone isEqualTo "") exitWith {

Ajoutez au desssus :

Code:
Développer Réduire Copier
_resourceCfg = missionConfigFile >> "CfgGather" >> "Illegals";
for "_i" from 0 to count(_resourceCfg)-1 do {
    private ["_curConfig", "_resourceZones", "_requiredItem"];
    _zonei = "";
    _curConfig = _resourceCfg select _i;
    _resourceZones = getArray(_curConfig >> "zones");
    {
        if ((player distance(getMarkerPos _x)) < _zoneSize) exitWith {
        _zonei = _x;
    };
    } forEach _resourceZones;
    if (_zonei != "") exitWith {};
};
if (_zonei != "") exitWith {
    _illegal = "illegal";
    _illegal;
};

Restriction au traitement

Dans votre Config_Process.hpp du dossier config ajoutez la ligne suivante aux ressources souhaitées :
Code:
Développer Réduire Copier
copRequired = 3;

Mettez le nombre de policier requis pour pouvoir traiter la ressource, comme ceci :

Code:
Développer Réduire Copier
 class heroin {
     MaterialsReq[] = {{"heroin_unprocessed",1}};
     MaterialsGive[] = {{"heroin_processed",1}};
     Text = "STR_Process_Heroin";
     //ScrollText = "Process Heroin";
     NoLicenseCost = 1;
     copRequired = 3;
};

Dans votre fichier fn_processAction.sqf dans le dossier core\actions modifiez les parties suivantes :

Ligne 11
dans le private, ajoutez après "_text" :
Code:
Développer Réduire Copier
, "_numbercop"
Résultat attendu :

Code:
Développer Réduire Copier
private
["_vendor","_type","_itemInfo","_oldItem","_newItemWeight","_newItem","
_oldItemWeight","_cost","_upp","_hasLicense","_itemName","_oldVal","_ui
","_progress","_pgText","_cP","_materialsRequired","_materialsGiven","_
noLicenseCost","_text","_numbercop","_filter","_totalConversions","_min
imumConversions"];

En dessous de la ligne suivante (23 de base) :
Code:
Développer Réduire Copier
_text = M_CONFIG(getText,"ProcessAction",_type,"Text");
Ajoutez la ligne :
Code:
Développer Réduire Copier
_numbercop = M_CONFIG(getNumber,"ProcessAction",_type,"copRequired");

En dessous de la ligne suivante (82 de base) :

Code:
Développer Réduire Copier
if (_exit) exitWith {hint localize "STR_Process_Weight"; life_is_processing =
false; life_action_inUse = false;};
Ajoutez la ligne :
Code:
Développer Réduire Copier
if ((west countSide playableUnits) < _numbercop) exitWith {hint "Il n'y a pas
assez de policier pour pouvoir récolter cette ressource !"; life_is_processing
= false; life_action_inUse = false;};

Restriction à la revente

Dans votre Config_vItems.hpp du dossier config ajoutez la ligne suivante aux ressources souhaitées :

Code:
Développer Réduire Copier
copRequired = 3;
Mettez le nombre de policier requis pour pouvoir traiter la ressource, ce qui donnera :

Code:
Développer Réduire Copier
class heroin_processed {
     variable = "heroinProcessed";
     displayName = "STR_Item_HeroinP";
     weight = 4;
     buyPrice = 3500;
     sellPrice = 2560;
     illegal = true;
     copRequired = 3;
     edible = -1;
     drinkable = -1;
     icon = "icons\ico_heroinProcessed.paa";
};

Dans votre fichier fn_virt_sell.sqf dans le dossier core\shops modifiez les parties suivantes :

Ligne 11 dans le private, ajoutez après "_price" ceci :
Code:
Développer Réduire Copier
,"_numbercop"

Résultat attendu :
Code:
Développer Réduire Copier
private ["_type","_index","_price","_numbercop","_amount","_name"];

En dessus de la ligne suivante (13 de base) :
Code:
Développer Réduire Copier
if (_price isEqualTo -1) exitWith {};
Ajoutez la ligne :
Code:
Développer Réduire Copier
_numbercop = M_CONFIG(getNumber,"VirtualItems",_type,"copRequired");

En dessous de la ligne (ligne 17 de base) :
Code:
Développer Réduire Copier
_amount = parseNumber (_amount);
Ajoutez la ligne suivante :
Code:
Développer Réduire Copier
if ((west countSide playableUnits) < _numbercop) exitWith {hint "Il n'y a pas
assez de policier pour pouvoir vendre cette ressource !"};

A vous de jouer !
 
Dernière édition:
Salut , sur la vente cela ne fonctionne pas, pour le reste sa passe, possible de check, merci en tout cas du partage rapide !
 
Salut !

Dans ce tutoriel je vais vous apprendre comment restreindre un farm suivant le nombre de policier connecté.

Ce tutoriel sera composer de 3 sections :

  1. - Restriction à la récolte
  2. - Restriction au traitement
  3. - Restriction à la revente

Ces 3 sections sont totalement indépendante, c'est à dire que vous pouvez seulement installer 1 seule ou toutes les sections.


Commençons les choses sérieuses :

Restriction à la récolte

Ouvrir le fichier Config_Gather.hpp dans le dossier config et y ajouter la class suivante tout en bas du fichier à l’avant dernière ligne au dessus du dernier
Code:
Développer Réduire Copier
};

Code:
Développer Réduire Copier
 class Illegals {
};

Ajoutez vos ressources illégales dans cette class :
Code:
Développer Réduire Copier
 class Illegals {
     class cannabis {
         amount = 3;
         zones[] = { "weed_1" };
         item = "";
         zoneSize = 30;
         copRequired = 2; // Nombre de policier connecter pour pouvoir récolter
     };
     class heroin_unprocessed {
         amount = 3;
         zones[] = { "heroin_1" };
         item = "";
         zoneSize = 30;
         copRequired = 0;
     };
     class cocaine_unprocessed {
         amount = 3;
         zones[] = { "cocaine_1" };
         item = "";
         zoneSize = 30;
         copRequired = 3;
     };
};

N’oubliez pas de supprimer les ressources illégales présentes de base dans votre mission

Créez un nouveau fichier
dans votre dossier core/actions et nommez le fn_illegalGather.sqf puis ajoutez dedans :
Code:
Développer Réduire Copier
#include "..\..\script_macros.hpp"
/*
    Author: Yuri Zoko
    Teamspeak 3: ts.the-programmer.com
    Web site: www.the-programmer.com

    Terms of use:
      - This file is forbidden unless you have permission from the author. If you have this file without permission to use it please do not use it and do not share it.
      - If you have permission to use this file, you can use it on your server however it is strictly forbidden to share it.
      - Out of respect for the author please do not delete this information.

*/
private ["_maxGather","_resource","_amount","_maxGather","_requiredItem","_numbercop"];
if (life_action_inUse) exitWith {};
if !(isNull objectParent player) exitWith {};
if (player getVariable "restrained") exitWith {hint localize "STR_NOTF_isrestrained";};
if (player getVariable "playerSurrender") exitWith {hint localize "STR_NOTF_surrender";};

life_action_inUse = true;
_zone = "";
_requiredItem = "";
_exit = false;

_resourceCfg = missionConfigFile >> "CfgGather" >> "Illegals";
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");
    _numbercop = getNumber(_curConfig >> "copRequired");
    {
        if ((player distance (getMarkerPos _x)) < _zoneSize) exitWith {_zone = _x;};
    } forEach _resourceZones;

    if (_zone != "") exitWith {};
};

if (_zone isEqualTo "") exitWith {life_action_inUse = false;};

if (_requiredItem != "") then {
    _valItem = missionNamespace getVariable "life_inv_" + _requiredItem;

    if (_valItem < 1) exitWith {
        switch (_requiredItem) do {
         //Messages here
        };
        life_action_inUse = false;
        _exit = true;
    };
};

if ((west countSide playableUnits) < _numbercop) exitWith {hint "Il n'y a pas assez de policier pour pouvoir récolter cette ressource !"};

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,"mining",35,1] remoteExecCall ["life_fnc_say3D",RCLIENT]};
    default {[player,"harvest",35,1] remoteExecCall ["life_fnc_say3D",RCLIENT]};
};

for "_i" from 0 to 4 do {
    player playMoveNow "AinvPercMstpSnonWnonDnon_Putdown_AmovPercMstpSnonWnonDnon";
    waitUntil{animationState player != "AinvPercMstpSnonWnonDnon_Putdown_AmovPercMstpSnonWnonDnon";};
    sleep 0.5;
};

if ([true,_resource,_diff] call life_fnc_handleInv) 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;

Ouvrez votre fichier Functions.hpp et ajoutez a la fin de la class Actions :
Code:
Développer Réduire Copier
class illegalGather {};

Ouvrez votre fn_actionKeyHandler.sqf dans le dossier core\functions et en dessous de la ligne (ligne 47 de base)
Code:
Développer Réduire Copier
case "mine" : { _handle = [] spawn life_fnc_mine };

Ajoutez :

Code:
Développer Réduire Copier
case "illegal" : { _handle = [] spawn life_fnc_illegalGather };

Ouvrez votre fn_whereAmI.sqf dans le dossier core\functions cherchez la ligne suivante :
Code:
Développer Réduire Copier
if (_zone isEqualTo "") exitWith {

Ajoutez au desssus :

Code:
Développer Réduire Copier
_resourceCfg = missionConfigFile >> "CfgGather" >> "Illegals";
for "_i" from 0 to count(_resourceCfg)-1 do {
    private ["_curConfig", "_resourceZones", "_requiredItem"];
    _zonei = "";
    _curConfig = _resourceCfg select _i;
    _resourceZones = getArray(_curConfig >> "zones");
    {
        if ((player distance(getMarkerPos _x)) < _zoneSize) exitWith {
        _zonei = _x;
    };
    } forEach _resourceZones;
    if (_zonei != "") exitWith {};
};
if (_zonei != "") exitWith {
    _illegal = "illegal";
    _illegal;
};

Restriction au traitement

Dans votre Config_Process.hpp du dossier config ajoutez la ligne suivante aux ressources souhaitées :
Code:
Développer Réduire Copier
copRequired = 3;

Mettez le nombre de policier requis pour pouvoir traiter la ressource, comme ceci :

Code:
Développer Réduire Copier
 class heroin {
     MaterialsReq[] = {{"heroin_unprocessed",1}};
     MaterialsGive[] = {{"heroin_processed",1}};
     Text = "STR_Process_Heroin";
     //ScrollText = "Process Heroin";
     NoLicenseCost = 1;
     copRequired = 3;
};

Dans votre fichier fn_processAction.sqf dans le dossier core\actions modifiez les parties suivantes :

Ligne 11
dans le private, ajoutez après "_text" :
Code:
Développer Réduire Copier
, "_numbercop"
Résultat attendu :

Code:
Développer Réduire Copier
private
["_vendor","_type","_itemInfo","_oldItem","_newItemWeight","_newItem","
_oldItemWeight","_cost","_upp","_hasLicense","_itemName","_oldVal","_ui
","_progress","_pgText","_cP","_materialsRequired","_materialsGiven","_
noLicenseCost","_text","_numbercop","_filter","_totalConversions","_min
imumConversions"];

En dessous de la ligne suivante (23 de base) :
Code:
Développer Réduire Copier
_text = M_CONFIG(getText,"ProcessAction",_type,"Text");
Ajoutez la ligne :
Code:
Développer Réduire Copier
_numbercop = M_CONFIG(getNumber,"ProcessAction",_type,"copRequired");

En dessous de la ligne suivante (82 de base) :

Code:
Développer Réduire Copier
if (_exit) exitWith {hint localize "STR_Process_Weight"; life_is_processing =
false; life_action_inUse = false;};
Ajoutez la ligne :
Code:
Développer Réduire Copier
if ((west countSide playableUnits) < _numbercop) exitWith {hint "Il n'y a pas
assez de policier pour pouvoir récolter cette ressource !"; life_is_processing
= false; life_action_inUse = false;};

Restriction à la revente

Dans votre Config_vItems.hpp du dossier config ajoutez la ligne suivante aux ressources souhaitées :

Code:
Développer Réduire Copier
copRequired = 3;
Mettez le nombre de policier requis pour pouvoir traiter la ressource, ce qui donnera :

Code:
Développer Réduire Copier
class heroin_processed {
     variable = "heroinProcessed";
     displayName = "STR_Item_HeroinP";
     weight = 4;
     buyPrice = 3500;
     sellPrice = 2560;
     illegal = true;
     copRequired = 3;
     edible = -1;
     drinkable = -1;
     icon = "icons\ico_heroinProcessed.paa";
};

Dans votre fichier fn_virt_sell.sqf dans le dossier core\shops modifiez les parties suivantes :

Ligne 11 dans le private, ajoutez après "_price" ceci :
Code:
Développer Réduire Copier
,"_numbercop"

Résultat attendu :
Code:
Développer Réduire Copier
private ["_type","_index","_price","_numbercop","_amount","_name"];

En dessus de la ligne suivante (13 de base) :
Code:
Développer Réduire Copier
if (_price isEqualTo -1) exitWith {};
Ajoutez la ligne :
Code:
Développer Réduire Copier
_numbercop = M_CONFIG(getNumber,"VirtualItems",_type,"copRequired");

En dessous de la ligne (ligne 17 de base) :
Code:
Développer Réduire Copier
_amount = parseNumber (_amount);
Ajoutez la ligne suivante :
Code:
Développer Réduire Copier
if ((west countSide playableUnits) < _numbercop) exitWith {hint "Il n'y a pas
assez de policier pour pouvoir vendre cette ressource !"};

A vous de jouer !
Merci chef, Cependant il me semble qu'il manque quelque truc pour le Champ, je n'est pas test mais en théorie vous avez oublier dans le fn_whereAmI.sqf

Remplacer Ceci:
Développer Réduire Copier
private ["_zonem", "_zone", "_mine", "_zoneSize", "_resource", "_nothing"];

Par

Code:
Développer Réduire Copier
private ["_zonem", "_zone", "_zonei", "_illegal", "_mine", "_zoneSize", "_resource", "_nothing"];
 
C’est pas bien dramatique les privates ^^
 
  • Like
Les réactions: Maxence
Activité
Pour l'instant, il n'y a personne ici