Créer une ressource multi-process avec une seule licence


#1

Bonjour,
n’ayant pas trouvé comment faire du multi-process sur une ressource avec une unique licence sur les forums, j’ai fais des tests sur mon serveur et j’ai trouvé une solution, je ne sais pas si c’est la meilleur ou même la plus optimisée mais ça fonctionne alors je partage =)

Dans ce tuto je vais prendre l’exemple de l’uranium, mais vous pouvez le faire avec la ressource que vous voulez, il suffit de remplacer les noms des variables.

Pour commencer,

Ouvrez config_vItems.hpp et créez votre shop :

class Uranium {
        name = "STR_Shops_Uranium";
        side = "civ";
        conditions = "";
        items[] = { "Uranium_refined" };
};

Toujours dan le même fichier, il faut créer la ressource :

class uranium_unrefined {
        variable = "uraniumUnrefined";
        displayName = "STR_Item_UraniumOre";
        weight = 6;
        buyPrice = -1;
        sellPrice = -1;
        illegal = true;
        edible = -1;
        icon = "icons\uraniumunrefined.paa";
};

class uranium_semrefined {
        variable = "uraniumsemRefined";
        displayName = "STR_Item_Uraniumsem";
        weight = 4;
        buyPrice = -1;
        sellPrice = -1;
        illegal = true;
        edible = -1;
        icon = "icons\uraniumsemRefined.paa";
};

class uranium_refined {
        variable = "uraniumRefined";
        displayName = "STR_Item_Uranium";
        weight = 2;
        buyPrice = -1;
        sellPrice = 4000;
        illegal = true;
        edible = -1;
        icon = "icons\uranium.paa";
};

Maintenant, allez dans Config_Process.hpp et créez vos traitements :

class Uranium {
        MaterialsReq[] = {{"uranium_unrefined",1}};
        MaterialsGive[] = {{"uranium_semrefined",1}};
        Text = "STR_Process_Uranium";
        NoLicenseCost = 2000;
};

class Uraniumbis { //<-- Ici, mettez ce que vous voulez ça n'a pas d'importance
        MaterialsReq[] = {{"uranium_semrefined",1}};
        MaterialsGive[] = {{"uranium_refined",1}};
        Text = "STR_Process_Uranium";
        NoLicenseCost = 2000;
};

Ensuite dans Config_Licenses.hpp, créez votre licence :

class Uranium {
        variable = "Uranium";
        displayName = "STR_License_Uranium";
        price = 40000;
        illegal = true;
        side = "civ";
};

Créez ensuite votre champ dans Config_Gather.hpp :

class uranium_unrefined {
            amount = 2;
            zones[] = { "uranium_mine" };
            item = "pickaxe";
            mined[] = { "uranium_unrefined" };
            zoneSize = 30;
};

Dans le stringtable.xml ajoutez :

<Package name="Uranium">
	<Key ID="STR_Item_Uranium">
            <Original>Uranium pur</Original>
        </Key>
	<Key ID="STR_Item_Uraniumsem">
	    <Original>Uranium enrichi</Original>
	</Key>
        <Key ID="STR_Item_UraniumOre">
            <Original>Uranium naturel</Original>
        </Key>		
        <Key ID="STR_MAR_Uranium_Trader">
            <Original>Acheteur d'Uranium</Original>
        </Key>
	<Key ID="STR_Process_Uraniumdeux">
            <Original>Traitement de l'Uranium enrichi</Original> 
        </Key>	
        <Key ID="STR_Process_Uranium">
            <Original>Traitement de l'Uranium naturel</Original>
        </Key>	
        <Key ID="STR_License_Uranium">
            <Original>Traitement de l'Uranium</Original>
        </Key>
	<Key ID="STR_Shops_C_Uran">
            <Original>Equipement anti-radiations</Original>
        </Key>
	<Key ID="STR_MAR_Uranium_mine">
            <Original>Mine d'Uranium</Original>
        </Key>
</Package>

Maintenant dans votre fn_processAction.sqf cherchez :

if (_vendor in [mari_processor,coke_processor,heroin_processor]) then {
    _hasLicense = true;
} else {
    _hasLicense = LICENSE_VALUE(_type,"civ");
};

et en dessous ajoutez :

if (_type isEqualTo "Uraniumbis") then { // <-- Ici le "Uraniumbis" doit correspondre au nom que vous avez donnez dans Config_Process
	_hasLicense = LICENSE_VALUE("Uranium","civ");
};

ce qui donne :

if (_vendor in [mari_processor,coke_processor,heroin_processor]) then {
    _hasLicense = true;
} else {
    _hasLicense = LICENSE_VALUE(_type,"civ");
};

if (_type isEqualTo "Uraniumbis") then { // <-- Ici le "Uraniumbis" doit correspondre au nom que vous avez donnez dans Config_Process
	_hasLicense = LICENSE_VALUE("Uranium","civ");
};

et si vous avez ajouté plus de process, il suffit de rajouter le nom de votre/vos autre(s) process dans le “if” :

Exemple si dans mon fichier Config_process.hpp je rajoute :

class EXEMPLE { // <-- C'est ça qu'il faut mettre dans le fn_processAction
        MaterialsReq[] = {{"LITEMREQUIS",1}};
        MaterialsGive[] = {{"LITEMRECU",1}};
        Text = "STR_Process_Uranium";
        NoLicenseCost = 2000;
};

Alors dans mon fn_processAction.sqf j’aurai :

if (_type isEqualTo "Uraniumbis" || _type isEqualTo "EXEMPLE") then {
	_hasLicense = LICENSE_VALUE("Uranium","civ");
};

Maintenat il ne reste plus qu’à placez votre mine, votre acheteur et vos traitements dans votre mission.sqm

Pour la mine, placez un marqueur et nommez le :

uranium_mine

pour le init du premier process, mettez :

this addAction[localize"STR_Process_Uranium",life_fnc_processAction,"Uranium",0,false,false,"",' life_inv_uraniumUnrefined > 0 && !life_is_processing && !life_action_inUse',4];  
this addAction[format ["%1 ($%2)",localize (getText(missionConfigFile >> "Licenses" >> "Uranium" >> "displayName")), [(getNumber(missionConfigFile >> "Licenses" >> "Uranium" >> "price"))] call life_fnc_numberText],life_fnc_buyLicense,"Uranium",0,false,false,"",' !license_civ_Uranium && playerSide isEqualTo civilian ',4];

pour le deuxième process, mettez :

this addAction[localize"STR_Process_Uranium",life_fnc_processAction,"Uraniumbis",0,false,false,"",' life_inv_uraniumsemRefined > 0 && !life_is_processing && !life_action_inUse',4];  
this addAction[format ["%1 ($%2)",localize (getText(missionConfigFile >> "Licenses" >> "uranium" >> "displayName")), [(getNumber(missionConfigFile >> "Licenses" >> "uranium" >> "price"))] call life_fnc_numberText],life_fnc_buyLicense,"uranium",0,false,false,"",' !license_civ_uranium && playerSide isEqualTo civilian ',4];

/!\ Sur le premier addAction du deuxièmre process, le “Uraniumbis” doit correspondre à ce que vous avez mis dans Config_Process.hpp et fn_processAction.sqf /!\

Pour finir sur le init de votre vendeur, mettez :

this addAction[localize"STR_MAR_Uranium_Trader",life_fnc_virt_menu,"Uranium",0,false,false,"","",4]; 

Voilà, c’est terminé =)