コード例 #1
0
        private PlayerInfo GetOrCreate(SkillResult skillResult)
        {
            NpcEntity npctarget = skillResult.Target as NpcEntity;

            if (npctarget != null)
            {
                if (OnlyBosses)//not count bosses
                {
                    if (!npctarget.Info.Boss)
                    {
                        return(null);
                    }
                }
                if (IgnoreOneshots)//ignore damage that is more than 10x times than mob's hp
                {
                    if ((npctarget.Info.HP > 0) && (npctarget.Info.HP <= skillResult.Damage / 10))
                    {
                        return(null);
                    }
                }
            }
            var        player      = skillResult.SourcePlayer;
            PlayerInfo playerStats = StatsByUser.FirstOrDefault(pi => pi.Player.Equals(player));

            if (playerStats == null && (IsFromHealer(skillResult) ||                                 //either healer
                                        (!IsFromHealer(skillResult) && IsValidAttack(skillResult)))) //or damage from non-healer
            {
                playerStats = new PlayerInfo(player, this);
                StatsByUser.Add(playerStats);
            }
            return(playerStats);
        }
コード例 #2
0
        private PlayerInfo GetOrCreate(SkillResult skillResult)
        {
            NpcEntity npctarget = skillResult.Target as NpcEntity;

            //ignore pvp if onlybosses is ticked
            if (OnlyBosses && npctarget == null && IsValidAttack(skillResult))
            {
                return(null);
            }

            if (npctarget != null)
            {
                if (OnlyBosses)//not count bosses
                {
                    if (!npctarget.Info.Boss)
                    {
                        return(null);
                    }
                }
                if (IgnoreOneshots)
                {
                    if ((npctarget.Info.HP > 0)
                        //ignore damage that is more than 10x times than mob's hp
                        && (npctarget.Info.HP <= skillResult.Damage / 10
                            //ignore damage over 100m on a boss
                            || (npctarget.Info.Boss && skillResult.Damage > 99999999)))
                    {
                        return(null);
                    }
                }
            }
            var        player      = skillResult.SourcePlayer;
            PlayerInfo playerStats = StatsByUser.FirstOrDefault(pi => pi.Player.Equals(player));

            if (playerStats == null && (IsFromHealer(skillResult) ||                                 //either healer
                                        (!IsFromHealer(skillResult) && IsValidAttack(skillResult)))) //or damage from non-healer
            {
                playerStats = new PlayerInfo(player, this);
                StatsByUser.Add(playerStats);
            }

            //update primary target if it's a mob
            if (npctarget != null)
            {
                if (!_targetHitCount.ContainsKey(npctarget))
                {
                    _targetHitCount.Add(npctarget, 0);
                }
                _targetHitCount[npctarget]++;

                PrimaryTarget = _targetHitCount.Aggregate((l, r) => l.Value > r.Value ? l : r).Key;
            }
            return(playerStats);
        }