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 :
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 :
A vous de jouer !
Dans ce tutoriel je vais vous apprendre comment restreindre un farm suivant le nombre de policier connecté.
Ce tutoriel sera composer de 3 sections :
- - Restriction à la récolte
- - Restriction au traitement
- - 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
Ajoutez vos ressources illégales dans cette class :
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 :
Ouvrez votre fichier Functions.hpp et ajoutez a la fin de la class Actions :
Ouvrez votre fn_actionKeyHandler.sqf dans le dossier core\functions et en dessous de la ligne (ligne 47 de base)
Ajoutez :
Ouvrez votre fn_whereAmI.sqf dans le dossier core\functions cherchez la ligne suivante :
Ajoutez au desssus :
Code:
};
Code:
class Illegals {
};
Ajoutez vos ressources illégales dans cette class :
Code:
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:
#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:
class illegalGather {};
Ouvrez votre fn_actionKeyHandler.sqf dans le dossier core\functions et en dessous de la ligne (ligne 47 de base)
Code:
case "mine" : { _handle = [] spawn life_fnc_mine };
Ajoutez :
Code:
case "illegal" : { _handle = [] spawn life_fnc_illegalGather };
Ouvrez votre fn_whereAmI.sqf dans le dossier core\functions cherchez la ligne suivante :
Code:
if (_zone isEqualTo "") exitWith {
Ajoutez au desssus :
Code:
_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 :
Mettez le nombre de policier requis pour pouvoir traiter la ressource, comme ceci :
Dans votre fichier fn_processAction.sqf dans le dossier core\actions modifiez les parties suivantes :
Ligne 11 dans le private, ajoutez après "_text" :
Résultat attendu :
En dessous de la ligne suivante (23 de base) :
Ajoutez la ligne :
En dessous de la ligne suivante (82 de base) :
Ajoutez la ligne :
Code:
copRequired = 3;
Mettez le nombre de policier requis pour pouvoir traiter la ressource, comme ceci :
Code:
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:
, "_numbercop"
Code:
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:
_text = M_CONFIG(getText,"ProcessAction",_type,"Text");
Code:
_numbercop = M_CONFIG(getNumber,"ProcessAction",_type,"copRequired");
En dessous de la ligne suivante (82 de base) :
Code:
if (_exit) exitWith {hint localize "STR_Process_Weight"; life_is_processing =
false; life_action_inUse = false;};
Code:
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 :
Mettez le nombre de policier requis pour pouvoir traiter la ressource, ce qui donnera :
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 :
Résultat attendu :
En dessus de la ligne suivante (13 de base) :
Ajoutez la ligne :
En dessous de la ligne (ligne 17 de base) :
Ajoutez la ligne suivante :
Code:
copRequired = 3;
Code:
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:
,"_numbercop"
Résultat attendu :
Code:
private ["_type","_index","_price","_numbercop","_amount","_name"];
En dessus de la ligne suivante (13 de base) :
Code:
if (_price isEqualTo -1) exitWith {};
Code:
_numbercop = M_CONFIG(getNumber,"VirtualItems",_type,"copRequired");
En dessous de la ligne (ligne 17 de base) :
Code:
_amount = parseNumber (_amount);
Code:
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: