Ejemplo n.º 1
0
 PenStatsManager()
 {
     instance = this;
 }
Ejemplo n.º 2
0
    /// <summary>
    /// Refreshes melee and ranged mod probabilites.
    /// </summary>
    public void RefreshProbabilities()
    {
        (float certainty, float extraversion, float neurotisism) = PenStatsManager.GetInstance().GetMeanPen(PlayerManager.GetInstance().GetActivePlayers());

        //////////////////////////////////////////////////////////////////////////////////////////////////////////
        ///                               Ranged Modification Probabilities.
        /////////////////////////////////////////////////////////////////////////////////////////////////////////
        float value = (float)ErrorFunction.Erf(Difficulty_Manager.GetInstance().GetDifficultyFactor() / 100) * 100;

        rangedModificationType.Find(x => x.GetItem().Equals("Attack_Damage_Modification")).SetValue(value);//Attack Damage Probability.
        List <Possibility> Basepos = new List <Possibility>();
        //Base Probabilities for other Mods.
        float rBaseAR = (100 - value) / (rangedModificationType.Count - 1);
        float rBaseMS = (100 - value) / (rangedModificationType.Count - 1);
        float rBaseAS = (100 - value) / (rangedModificationType.Count - 1);

        float a   = 10 / 2;
        float t   = 1 / 2 + (extraversion / 200);
        float l   = 1 / 2 + (neurotisism / 200);
        float pAR = (1 + certainty / 100) * (rBaseAR - a * certainty / 100) * t + (1 - t) - (2 * a * certainty / 100); //Calculate Attack Range Probability.
        float pMS = 2 * rBaseMS - pAR;                                                                                 //Calculate Movement Speed Probability.
        float pAS;
        float minPas = 10;
        float maxPas = 90;

        //Calculate Attack Speed Probability.
        if (l <= 0.5)
        {
            pAS = (1 - 2 * l) * minPas + 2 * l * rBaseAS;
        }
        else
        {
            pAS = 2 * (l - 1) * rBaseAS + (1 - 2 * (l - 1)) * maxPas;
        }
        pAS = rBaseAS * (1 - certainty / 100) + pAS * certainty / 100;
        float diff     = rBaseAS - pAS;//Calculate difference between Base Pas and new Pas.
        float bonusPar = pAR * diff / (100 - rBaseAS);
        float bonusPms = pMS * diff / (100 - rBaseAS);

        rangedModificationType.Find(x => x.GetItem().Equals("Attack_Range_Modification")).SetValue(pAR + bonusPar);   //Attack Range Probability.
        rangedModificationType.Find(x => x.GetItem().Equals("Movement_Speed_Modification")).SetValue(pMS + bonusPms); //Movement Speed Probability.
        rangedModificationType.Find(x => x.GetItem().Equals("Attack_Speed_Modification")).SetValue(pAS);              //Attack Speed Probability.

        //////////////////////////////////////////////////////////////////////////////////////////////////////////
        ///                               Melee Modification Probabilities.
        /////////////////////////////////////////////////////////////////////////////////////////////////////////

        float mBaseAT = (float)ErrorFunction.Erf(Difficulty_Manager.GetInstance().GetDifficultyFactor() / 100) * 100;                                             //Attack Damage Base Probability.
        float mBaseMS = (100 - meleeModificationType.Find(x => x.GetItem().Equals("Attack_Damage_Modification")).GetValue()) / (meleeModificationType.Count - 1); //Movement Speed Base Probability.
        float mBaseAS = (100 - meleeModificationType.Find(x => x.GetItem().Equals("Attack_Damage_Modification")).GetValue()) / (meleeModificationType.Count - 1); //Attack Speed Base Probability.
        float pMSmax  = 33;                                                                                                                                       //Movement Speed  Max Probability.
        float pASmax  = 33;                                                                                                                                       //Attack Speed  Max Probability.
        float pADmax  = 66;                                                                                                                                       //Attack Damage  Max Probability.

        pMS = mBaseMS - t * (pMSmax - mBaseMS);
        pAS = mBaseAS + l * (pASmax - mBaseAS);
        float pAD = mBaseAT * (certainty / 100) + (1 - certainty / 100) * pADmax;

        meleeModificationType.Find(x => x.GetItem().Equals("Attack_Damage_Modification")).SetValue(pAD);  //Attack Damage Probability.
        meleeModificationType.Find(x => x.GetItem().Equals("Movement_Speed_Modification")).SetValue(pMS); //Movement Speed Probability.
        meleeModificationType.Find(x => x.GetItem().Equals("Attack_Speed_Modification")).SetValue(pAS);   //Attack Speed Probability.
    }