Français Solved Changer le script du process pour obtenir des ressources aléatoires

  • Auteur de la discussion Auteur de la discussion Skyrise
  • Date de début Date de début

Skyrise

User
29/12/19
33
1
9
600
Bonjour,

Je voudrais savoir s'il y a moyen de changer le script du process pour pouvoir par exemple en traitant avoir des ressources random avec un pourcentage de chance d'être donné comme l'exemple si dessous :


[CODE lang="csharp" title="Exemple"]class minerais {
MaterialsReq[] = {{"pierre",1}};
MaterialsGive[] = {{"copper_refined",1,0.75},{"iron_refined",1,0.25}}; // Cuivre 75% de chance de l'avoir / Fer 25% de chance de l'avoir
Text = "STR_Process_Minerais";
//ScrollText = "Traitement de minerais";
NoLicenseCost = 1350;
};[/CODE]

Merci d'avance pour celui qui m'amènera une réponse.
 
Solution
Yop !

J'ai fait un fonctionnement similaire au Config_Gather.hpp pour les probabilités de ces traitements. La class du config sera :
Code:
class minerais {
    MaterialsReq[] = {{"pierre",1}};
    MaterialsGive[] = {{"copper_refined",1,0,75},{"iron_refined",1,75,100}}; // 1 cuivre 75% de chance (de 0 à 75 sur 100) / 1 fer 25% de chance de (75 à 100 sur 100)
    Text = "STR_Process_Minerais";
    NoLicenseCost = 1350;
};

Dans ton fn_processAction.sqf, remplace ces lignes :
Code:
_newItemWeight = 0;
{
    _weight = ([_x select 0] call life_fnc_itemWeight) * (_x select 1);
    _newItemWeight = _newItemWeight + _weight;
} count _newItem;
par celles-ci :
Code:
_newItemWeight = 0;
_percent = (floor random 100) + 1;
{
    _prob...
Yop !

J'ai fait un fonctionnement similaire au Config_Gather.hpp pour les probabilités de ces traitements. La class du config sera :
Code:
class minerais {
    MaterialsReq[] = {{"pierre",1}};
    MaterialsGive[] = {{"copper_refined",1,0,75},{"iron_refined",1,75,100}}; // 1 cuivre 75% de chance (de 0 à 75 sur 100) / 1 fer 25% de chance de (75 à 100 sur 100)
    Text = "STR_Process_Minerais";
    NoLicenseCost = 1350;
};

Dans ton fn_processAction.sqf, remplace ces lignes :
Code:
_newItemWeight = 0;
{
    _weight = ([_x select 0] call life_fnc_itemWeight) * (_x select 1);
    _newItemWeight = _newItemWeight + _weight;
} count _newItem;
par celles-ci :
Code:
_newItemWeight = 0;
_percent = (floor random 100) + 1;
{
    _prob = _x select 2;
    _probdiff = _x select 3;

    if ((_percent >= _prob) && (_percent <= _probdiff)) exitWith {
        _weight = ([_x select 0] call life_fnc_itemWeight) * (_x select 1);
        _newItemWeight = _newItemWeight + _weight;
    };
} count _newItem;

Ensuite, remplace ces lignes :
Code:
{
    [true,(_x select 0),((_x select 1)*(_minimumConversions))] call life_fnc_handleInv;
} count _newItem;
par celles-ci :
Code:
{
    _prob = _x select 2;
    _probdiff = _x select 3;

    if ((_percent >= _prob) && (_percent <= _probdiff)) exitWith {
        [true,(_x select 0),((_x select 1)*(_minimumConversions))] call life_fnc_handleInv;
    };
} count _newItem;

Attention : Le dernier bloc de lignes est 2 fois dans le fichier. Il faut bien le remplacer les deux fois.

Je n'ai pas eu le temps de tester, ça m'a déjà pris beaucoup de temps de trouver comment faire. J'espère que ça ira 😅
 
Solution
[CODE title="Code"]class diamond {
MaterialsReq[] = {{"diamond_uncut",1}};
MaterialsGive[] = {{"diamond_cut",1,100,100}};
Text = "STR_Process_Diamond";
//ScrollText = "Cut Diamonds";
NoLicenseCost = 1350;
};[/CODE]

J'ai utilisé ca et ca fonctionne pas, j'ai aucune ressource donnée
 
As tu bien suivis les étapes? Si oui mais que ton probleme est présent, tu devrai avoir une erreur lors du process, regarde bien ou envoi nous tes logs
 
Salut Skyrise Skyrise .

C'est normal que ca fonctionne pas. Quand tu as mis ca :
Code:
MaterialsGive[] = {{"diamond_cut",1,100,100}};

Tu dis entre 100 et 100. En gros ca veut dire qu'il y a 0% de chance.
Faut mettre ca :
Code:
MaterialsGive[] = {{"diamond_cut",1,0,100}};

Des exemple :
0, 100 : 100%
55, 60 : 5%
20, 100 : 80%
20, 20 : 0%

En gros le pourcentage de chance est égal à l'écart entre les deux valeurs.
Par contre, si tu as 2 ressources, et que tu veux pas avoir ces deux ressources en même temps, il ne faut pas utiliser les mêmes écarts.

MAUVAIS :
Code:
MaterialsGive[] = {{"diamond_cut",1,0,20},{"unautrebordel",1,0,10}};

Si on tombe sur la valeur random 8 par exemple, bah on va recevoir les deux ressources.

BON :
Code:
MaterialsGive[] = {{"diamond_cut",1,0,20},{"unautrebordel",1,20,40}};

Bien entendu, si tu veux recevoir à coup sûr une ressource, faut que toutes les ressources fassent un total de 100%, sinon si dans cette exemple, si tu tombe sur 64, bah t'auras rien.
 
Dernière édition par un modérateur:
  • Like
Les réactions: Maxence