Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }