using UnityEngine; using System.Collections; using System.Collections.Generic; using Games.Item; using GCGame.Table; public class CombatValue { public static int CalculateXilian(List exAttr, int equipIdx = -1) { float combatValue = 0; var equipScores = TableManager.GetEquipScore(); var equipAttr = TableManager.GetEquipAttrByID(equipIdx, 0); int battleRate = 10000; if (equipAttr != null) { battleRate = equipAttr.BattleRate; } foreach (var xilianAttr in exAttr) { if (xilianAttr == null) continue; foreach (var equipScore in equipScores.Values) { if (xilianAttr.mPropID == equipScore.PropID) { if (equipScore.PropSubID == xilianAttr.PropSubID) { var xilianCombatVar = Mathf.RoundToInt(equipScore.BattleScore * xilianAttr.XilianValue); combatValue += xilianCombatVar; } } } } var combatOther = TableManager.GetCombatOtherByID(0, 0); if (exAttr.Count > 0) { combatValue += combatOther.GetCiTiaoCombatbyIndex(exAttr.Count - 1); } combatValue = (combatValue * battleRate * 0.0001f); return Mathf.RoundToInt(combatValue); } public static int CalculateEquipTotal() { int combatValue = 0; GameItemContainer EquipPack = GameManager.gameManager.PlayerDataPool.EquipPack; for (int index = 0; index < EquipPack.ContainerSize; ++index) { var equipItem = EquipPack.GetItem(index); if (equipItem != null && equipItem.IsValid()) { combatValue += CalculateEquipSingle(EquipPack.GetItem(index)); } } combatValue += CalculateStrengthSuit(); return combatValue; } public static int CalculateMagicXilian(List exAttr, int equipIdx = -1) { int combatValue = 0; var equipScores = TableManager.GetEquipScore().Values; var equipAttr = TableManager.GetEquipAttrByID(equipIdx, 0); int battleRate = 10000; if (equipAttr != null) { battleRate = equipAttr.BattleRate; } foreach (var xilianAttr in exAttr) { foreach (var equipScore in equipScores) { if (xilianAttr.mPropID == equipScore.PropID) { if (equipScore.PropSubID == xilianAttr.PropSubID) { var xilianCombatVar = Mathf.RoundToInt(equipScore.MagicCombat * xilianAttr.XilianValue); combatValue += xilianCombatVar; } } } } return combatValue; } public static int CalculateMagicSingle(GameItem equipItem) { int combatValue = 0; combatValue += CalculateMagicBaseAttr(equipItem); combatValue += CalculateMagicXilian(equipItem.ExAttrs, equipItem.DataID); return combatValue; } public static int CalculateMagicBaseAttr(GameItem equipItem) { var equipTab = TableManager.GetMagicWeaponBaseAttrByID(equipItem.DataID, 0); if (equipTab == null) return 0; return equipTab.CombatValue; } public static int CalculateEquipSingle(GameItem equipItem) { int combatValue = 0; combatValue += CalculateBaseAttr(equipItem); combatValue += CalculateXilian(equipItem.ExAttrs, equipItem.DataID); combatValue += CalculateGemOpen(equipItem); combatValue += CalculateFrenzy(equipItem); combatValue += CalculateStrength(equipItem); combatValue += CalculateGemTotal(equipItem); return combatValue; } public static int CalculateEquipXilianNew(GameItem equipItem) { int combatValue = 0; combatValue += CalculateBaseAttr(equipItem); combatValue += CalculateXilian(equipItem.ExAttrsNew, equipItem.DataID); combatValue += CalculateGemOpen(equipItem); combatValue += CalculateFrenzy(equipItem); combatValue += CalculateStrength(equipItem); combatValue += CalculateGemTotal(equipItem); return combatValue; } public static int CalculateBaseAttr(GameItem equipItem) { int combatValue = 0; var equipTab = TableManager.GetEquipAttrByID(equipItem.DataID, 0); int maxValue = 0; float nowValue = 0; float kTotal = 0; for (int i = 0; i < equipItem.BaseAttrs.Count; ++i) { nowValue = equipItem.BaseAttrs[i]._OrgValue; maxValue = equipTab.GetPropValuebyIndex(i); kTotal += nowValue / maxValue; } float k = kTotal / equipItem.BaseAttrs.Count; combatValue = Mathf.RoundToInt(equipTab.CombatValue + k * equipTab.CombatMax); return combatValue; } // 计算狂化对装备战力的影响 public static int CalculateFrenzy(GameItem equipItem) { int combatValue = 0; if (equipItem.IsFrenzy) { Tab_CommonItem itemTab = TableManager.GetCommonItemByID(equipItem.DataID, 0); var tab = TableManager.GetEquipFrenzy().Values; foreach (var kv in tab) { if ((int)equipItem.GetQuality() == kv.Quality && itemTab.MinLevelRequire >= kv.EquipLevelMin && itemTab.MinLevelRequire <= kv.EquipLevelMax) { combatValue = kv.FrenzyCombat; break; } } } return combatValue; } public static int CalculateGemOpen(GameItem equipItem) { int combatValue = 0; int gemOpen = 0; foreach (var gemInfo in equipItem.GemItems) { if (gemInfo.IsOpen) { ++gemOpen; } } if (gemOpen > 0) { var combatOther = TableManager.GetCombatOtherByID(0, 0); combatValue = combatOther.GetEquipHoleCombatbyIndex(gemOpen - 1); } return combatValue; } public static int CalculateStrength(GameItem equipItem) { int combatValue = 0; int strengthPerfect = 0; for (int i = 0; i < equipItem.StrengPerfect.Count; ++i) { strengthPerfect += equipItem.StrengPerfect[i]; } var EquipEnchanceRandRate = TableManager.GetEquipEnchanceRandRateByID(equipItem.EnchanceLevel, 0); if (EquipEnchanceRandRate != null) { combatValue = (int)(strengthPerfect * EquipEnchanceRandRate.EquipEnchanceGrade); } return combatValue; } public static int CalculateStrengthSuit() { int combatValue = 0; var suitID = GameManager.gameManager.PlayerDataPool.EquipSuitID; if (suitID > 0) { var equipEnhanceSuit = TableManager.GetEquipEnchanceSuitByID(suitID, 0); combatValue = equipEnhanceSuit.CombatValue; } return combatValue; } public static int CalculateGemTotal(GameItem equipItem) { int combatValue = 0; int equipPos = equipItem.GetEquipSlotIndex(); for (int i = 0; i < equipItem.GemItems.Count; ++i) { var propTab = equipItem.GemItems[i].GetGemPropTab(equipPos); if (propTab != null) { combatValue += propTab.CombatValue; } } int combat = 0; if (equipItem._GemSuit1 > 0) { var normalSuitTab = TableManager.GetGemSuitByID(equipItem._GemSuit1); combat += normalSuitTab.CombatValue; } if (equipItem._GemSuit2 > 0) { var eliteSuitTab = TableManager.GetGemSuitByID(equipItem._GemSuit2); combat += eliteSuitTab.CombatValue; } if (equipItem._GemSuit3 > 0) { var eliteSuitTab = TableManager.GetGemSuitByID(equipItem._GemSuit3); combat += eliteSuitTab.CombatValue; } combatValue += combat; return combatValue; } }