private EpicBossResults GetEpicBossResults(EpicBoss epicBoss, Guild guild, Player player) { EpicBossResults results = new EpicBossResults(); results.Items = new List<EpicBossResultItem>(); int playerHealth = GetPlayerHealth(player.Level); int playerStats = GetPlayerStats(player.Level); int followerHealth = GetFollowerHealth(player.Level); int followerStats = GetFollowerStats(player.Level); decimal baseAttack = GetBaseAttack(player.Level); decimal knightBonus = GetKnightBonus(player.KnightCount); foreach (PlayerArmor playerArmor in player.Armors) { Armor armor = ArmorTable.Instance.GetArmor(playerArmor.ArmorName); KeyValuePair<int, int> armorStats = GetArmorStats(armor, playerArmor.Level, playerArmor.IsPlus); decimal guildRankBonus = GetGuildRankBonus(guild.RankBonus); decimal guildElementBonus = GetGuildElementBonus(armor, guild); decimal playerBonus = GetPlayerBonus(epicBoss.Element1, epicBoss.Element2, armor, playerArmor.IsNemesis); decimal bossLevelBonus = GetBossLevelBonus(epicBoss.Level); decimal bossElementBonus = GetBossElementBonus(epicBoss, armor); int playerDamageDone = GetDamageDone(baseAttack, armorStats.Key + playerStats, epicBoss.Defense, guildRankBonus, guildElementBonus, playerBonus, knightBonus); int followerDamageDone = GetDamageDone(baseAttack, armorStats.Key + followerStats, epicBoss.Defense, guildRankBonus, guildElementBonus, playerBonus, knightBonus); int playerDamageTaken = GetDamageTaken(armorStats.Value + playerStats, epicBoss.Attack, guildRankBonus, guildElementBonus, bossLevelBonus, bossElementBonus); int followerDamageTaken = GetDamageTaken(armorStats.Value + followerStats, epicBoss.Attack, guildRankBonus, guildElementBonus, bossLevelBonus, bossElementBonus); int playerHitsTaken = (playerHealth / playerDamageTaken) + 1; int followerHitsTaken = (followerHealth / followerDamageTaken) + 1; results.Items.Add(new EpicBossResultItem(armor.Name, armor.SafeName, playerDamageDone, playerDamageTaken, playerHitsTaken, followerDamageDone, followerDamageTaken, followerHitsTaken)); } results.Items.Sort((x, y) => -1 * x.PlayerTotalDamageDone.CompareTo(y.PlayerTotalDamageDone)); return results; }
private decimal GetBossElementBonus(EpicBoss epicBoss, Armor armor) { decimal elementBonus = 1; if (armor.IsWeakAgainst(epicBoss.Element1)) elementBonus += 0.5m; if (epicBoss.Element2 != null && armor.IsWeakAgainst(epicBoss.Element2.Value)) elementBonus += 0.5m; return elementBonus; }
private string GetEpicBossDataValidationMessage(EpicBoss epicBoss) { if (epicBoss == null) return Strings.ErrorBossDataNotProvided; if (epicBoss.Level < 1 || epicBoss.Level > 60) return Strings.ErrorInvalidBossLevel; if (epicBoss.Attack < 1 || epicBoss.Defense < 1 || epicBoss.Health < 1) return Strings.ErrorInvalidBossStats; return string.Empty; }
private EpicBoss GetJackFrostBoss(int level, int attack, int defense) { EpicBoss boss = new EpicBoss(); boss.Element1 = Element.Air; boss.Level = level; boss.Attack = attack; boss.Defense = defense; boss.Health = 1; return boss; }