Пример #1
0
        private uint CalculateXPReward(Player p) //TODO: Group values
        {
            byte plevel = p.Level;

            int graylevel = 0;

            if (plevel > 5 && plevel < 50)
            {
                graylevel = (int)(p.Level - Math.Floor(plevel / 10f) - 5);
            }
            else if (plevel == 50)
            {
                graylevel = 40;
            }
            else if (plevel > 50 && plevel < 60)
            {
                graylevel = (int)(p.Level - Math.Floor(plevel / 5f) - 1);
            }
            else if (plevel == 60)
            {
                return(0);
            }

            if (Level <= graylevel)
            {
                return(0);
            }

            uint basexp = (uint)((plevel * 5) + 45);
            int  multi  = (isElite && Level - plevel <= 4 ? 2 : 1); //Elites produce double XP

            if (plevel < Level)
            {
                if (Level - plevel > 4)
                {
                    plevel = (byte)(Level - 4); // Red mobs cap out at the same experience as orange.
                }
                basexp = (uint)(basexp * (1 + (0.05 * (Level - plevel))));
            }
            else if (plevel > Level)
            {
                basexp = (uint)(basexp * (1 - (plevel - Level) / FormulaData.ZeroDifferenceValue(plevel)));
            }
            return((uint)(basexp * multi));
        }