public static void DealBossDamage(Player boss, Player attacker, bool humanAttacker, int attackCount) { IBossDamageRepository repo = new EFBossDamageRepository(); var damage = repo.BossDamages.FirstOrDefault(bf => bf.PlayerId == attacker.Id && bf.BossBotId == boss.BotId); if (damage == null) { damage = new BossDamage { PlayerId = attacker.Id, BossBotId = boss.BotId, Timestamp = DateTime.UtcNow, }; } if (humanAttacker) { damage.PlayerAttacksOnBoss += attackCount; } else { damage.BossAttacksOnPlayer += attackCount; } // calculate a unique score to add, weighted a little in favor of higher level human attackers / victims damage.TotalPoints += (float)attackCount * (.75F + .25F * (float)attacker.Level); damage.Timestamp = DateTime.UtcNow; repo.SaveBossDamage(damage); }
public static List <BossDamage> GetTopAttackers(int bossBotId, int amount) { IBossDamageRepository repo = new EFBossDamageRepository(); return(repo.BossDamages.Where(b => b.BossBotId == bossBotId && b.PlayerAttacksOnBoss > 0).OrderByDescending(b => b.TotalPoints).Take(amount).ToList()); }