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 string GetPlayerDataValidationMessage(Player player) { if (player == null) return Strings.ErrorPlayerDataNotProvided; if (player.Level < 1 || player.Level > 100) return Strings.ErrorInvalidPlayerLevel; if (player.KnightCount < 1 || player.KnightCount > 5) return Strings.ErrorInvalidPlayerKnightCount; if (player.Armors == null || player.Armors.Count <= 0) return Strings.ErrorPlayerArmorsDataNotProvided; foreach (PlayerArmor playerArmor in player.Armors) { Armor armor = ArmorTable.Instance.GetArmor(playerArmor.ArmorName); if (armor == null) return string.Format(Strings.ErrorPlayerArmorNotFound, playerArmor.ArmorName); if (playerArmor.Level < 1 || playerArmor.Level > armor.MaxLevel) return string.Format(Strings.ErrorInvalidPlayerArmorLevel, playerArmor.ArmorName, armor.MaxLevel); if (playerArmor.IsNemesis && armor.Rarity != Rarity.Nemesis) return string.Format(Strings.ErrorInvalidIsNemesis, playerArmor.ArmorName); if ((playerArmor.IsPlus && armor.PlusStats == null) || (!playerArmor.IsPlus && armor.NormalStats == null)) return string.Format(Strings.ErrorArmorStatsNotAvailable, playerArmor.ArmorName); } return string.Empty; }
private Player GetPlayer(int knightCount, PlayerArmor armor) { Player player = new Player(); player.Level = 100; player.KnightCount = knightCount; player.Armors = new List<PlayerArmor>(); player.Armors.Add(armor); return player; }