public static long CalculateMountXp(Player Character, Tera.WorldServer.World.Fights.GameFightEndResult.Result result) { if (Character.Mount == null) { return(0); } int diff = Math.Abs(Character.Level - Character.Mount.Level); double coeff = 0; double xp = (double)result.WinExp; double pToMount = (double)Character.MountXPGive / 100 + 0.2; if (diff >= 0 && diff <= 9) { coeff = 0.1; } else if (diff >= 10 && diff <= 19) { coeff = 0.08; } else if (diff >= 20 && diff <= 29) { coeff = 0.06; } else if (diff >= 30 && diff <= 39) { coeff = 0.04; } else if (diff >= 40 && diff <= 49) { coeff = 0.03; } else if (diff >= 50 && diff <= 59) { coeff = 0.02; } else if (diff >= 60 && diff <= 69) { coeff = 0.015; } else { coeff = 0.01; } if (pToMount > 0.2) { result.WinExp = ((long)(xp - (xp * (pToMount - 0.2)))); } long xpWon = (long)Math.Round(xp * pToMount * coeff); if (xpWon > 0) { Character.Mount.addXp(xpWon); Character.Send(new CharacterRideEventMessage("+", Character.Mount)); } return(xpWon); }
public static long CalculateGuildXp(Player Character, Tera.WorldServer.World.Fights.GameFightEndResult.Result result) { CharacterGuild gm = Character.getCharacterGuild(); if (gm == null) { return(0); } double xp = (double)result.WinExp, Lvl = Character.Level, LvlGuild = Character.GetGuild().Level, pXpGive = (double)gm.ExperiencePercent / 100; double maxP = xp * pXpGive * 0.10; //Le maximum donné à la guilde est 10% du montant prélevé sur l'xp du combat double diff = Math.Abs(Lvl - LvlGuild); //Calcul l'écart entre le niveau du personnage et le niveau de la guilde double toGuild; if (diff >= 70) { toGuild = maxP * 0.10; //Si l'écart entre les deux honor est de 70 ou plus, l'experience donnée a la guilde est de 10% la valeur maximum de don } else if (diff >= 31 && diff <= 69) { toGuild = maxP - ((maxP * 0.10) * (Math.Floor((diff + 30) / 10))); } else if (diff >= 10 && diff <= 30) { toGuild = maxP - ((maxP * 0.20) * (Math.Floor(diff / 10))); } else //Si la différence est [0,9] { toGuild = maxP; } result.WinExp = ((long)(xp - xp * pXpGive)); long wonXP = (long)Math.Round(toGuild); if (wonXP > 0) { Character.getCharacterGuild().giveXpToGuild(wonXP); } return(wonXP); }