public static int AdjustDroppedKamas(IFightResult looter, int teamPP, long baseKamas)
        {
            int    prospecting = looter.Prospecting;
            double num         = (looter.Fight.GetFightBonus() <= 0) ? 1.0 : (1.0 + (double)looter.Fight.GetFightBonus() / 100.0);
            int    kamas       = (int)((double)baseKamas * ((double)prospecting / (double)teamPP) * num * (double)Rates.KamasRate);

            return(FightFormulas.InvokeWinKamasModifier(looter, kamas));
        }
        public static int CalculateWinExp(IFightResult fighter, System.Collections.Generic.IEnumerable <FightActor> alliesResults, System.Collections.Generic.IEnumerable <FightActor> droppersResults)
        {
            MonsterFighter[] monsters = droppersResults as MonsterFighter[];

            FightActor[] droppers = (monsters != null) ? ((FightActor[])monsters) : droppersResults.ToArray <FightActor>();
            FightActor[] allies   = (alliesResults as FightActor[]) ?? alliesResults.ToArray <FightActor>();

            int result;

            if (!droppers.Any <FightActor>() || !allies.Any <FightActor>())
            {
                result = 0;
            }
            else
            {
                int   sumPlayersLevel    = allies.Sum((FightActor entry) => (int)entry.Level);
                short maxPlayerLevel     = allies.Max((FightActor entry) => entry.Level);
                int   sumDroppersLevel   = droppers.Sum((FightActor entry) => (int)entry.Level);
                short maxDropperLevel    = droppers.Max((FightActor entry) => entry.Level);
                int   sumGivenExperience = droppers.Sum((FightActor entry) => entry.GetGivenExperience());

                double num4 = 1.0;
                if (sumPlayersLevel - 5 > sumDroppersLevel)
                {
                    num4 = (double)sumDroppersLevel / (double)sumPlayersLevel;
                }
                else
                {
                    if (sumPlayersLevel + 10 < sumDroppersLevel)
                    {
                        num4 = (double)(sumPlayersLevel + 10) / (double)sumDroppersLevel;
                    }
                }
                double num5 = System.Math.Min((double)fighter.Level, System.Math.Truncate(2.5 * (double)maxDropperLevel)) / (double)sumPlayersLevel * 100.0;
                int    num6 = (
                    from entry in allies
                    where entry.Level >= maxPlayerLevel / 3
                    select entry).Sum((FightActor entry) => 1);
                if (num6 <= 0)
                {
                    num6 = 1;
                }
                double num7 = System.Math.Truncate(num5 / 100.0 * System.Math.Truncate((double)sumGivenExperience * FightFormulas.GroupCoefficients[num6 - 1] * num4));
                double num8 = (fighter.Fight.GetFightBonus() <= 0) ? 1.0 : (1.0 + (double)fighter.Fight.GetFightBonus() / 100.0);
                int    xp   = (int)System.Math.Truncate(System.Math.Truncate(num7 * (double)(100 + fighter.Wisdom) / 100.0) * num8 * (double)Rates.XpRate);
                result = FightFormulas.InvokeWinXpModifier(fighter, xp);
            }
            return(result);
        }
        public static double AdjustDropChance(IFightResult looter, DroppableItem item, Monster dropper, int bonus)
        {
            double rate = item.GetDropRate((int)dropper.Grade.GradeId) * ((double)looter.Prospecting / 100.0) * ((double)bonus / 100.0 + 1.0) * (double)Rates.DropsRate;

            return(FightFormulas.InvokeDropRateModifier(looter, item, rate));
        }