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)); }