using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Snxxz.UI { public class EquipFightPower : Singleton { PackModel packModel { get { return ModelCenter.Instance.GetModel(); } } EquipModel equipModel { get { return ModelCenter.Instance.GetModel(); } } EquipStarModel starModel { get { return ModelCenter.Instance.GetModel(); } } EquipTrainModel trainModel { get { return ModelCenter.Instance.GetModel(); } } EquipStrengthModel strengthenModel { get { return ModelCenter.Instance.GetModel(); } } EquipGemModel gemModel { get { return ModelCenter.Instance.GetModel(); } } string scoreFormula; string propertyFormula; public EquipFightPower() { var config = FuncConfigConfig.Get("FightpowerFormula"); propertyFormula = config.Numerical1; scoreFormula = config.Numerical2; } public int CalculatePower(int level) { Equation.Instance.Clear(); Equation.Instance.AddKeyValue("equipScoreTotal", CountEquipScore(level)); var power = 0; power = Equation.Instance.Eval(scoreFormula); var propertyContainer = new Properties(); CountProperties(level, ref propertyContainer); Equation.Instance.Clear(); var keys = propertyContainer.keys; for (int i = 0; i < keys.Count; i++) { var id = keys[i]; var value = propertyContainer[id]; var config = PlayerPropertyConfig.Get(id); Equation.Instance.AddKeyValue(config.Parameter, value); } power += Equation.Instance.Eval(propertyFormula); var skillIds = CountEightSuitSkills(level); if (!skillIds.IsNullOrEmpty()) { foreach (var skillId in skillIds) { var config = SkillConfig.Get(skillId); power += config.FightPower; } } return power; } private int CountEquipScore(int level) { var score = 0; for (int i = 1; i <= 12; i++) { var equipPosition = new Int2(level, i); var guid = equipModel.GetEquip(equipPosition); if (string.IsNullOrEmpty(guid)) { continue; } var equip = packModel.GetItemByGuid(guid); if (equip == null) { continue; } score += equip.score; } return score; } private List CountEightSuitSkills(int level) { var skills = new List(); var eightSuitLevel = equipModel.GetSuitLevel(level, EquipSuitType.EightSuit); List eightConfigs = null; if (eightSuitLevel >= 0) { eightConfigs = EquipSuitConfig.GetConfigs(PlayerDatas.Instance.baseData.Job, level, EquipSuitType.EightSuit); } for (int i = 9; i >= 0; i--) { if (i % 3 != 0) { continue; } if (eightSuitLevel >= i) { var config = eightConfigs.Find(x => { return x.star == i; }); if (config.skillID > 0) { skills.Add(config.skillID); } } } return skills; } private void CountProperties(int level, ref Properties container) { CountSuitProperties(level, ref container); CountStrengthenProperties(level, ref container); CountStarProperties(level, ref container); CountGemProperties(level, ref container); CountTrainProperties(level, ref container); } private void CountSuitProperties(int level, ref Properties container) { var twoSuitLevel = equipModel.GetSuitLevel(level, EquipSuitType.TwoSuit); var fiveSuitLevel = equipModel.GetSuitLevel(level, EquipSuitType.FiveSuit); var eightSuitLevel = equipModel.GetSuitLevel(level, EquipSuitType.EightSuit); List twoConfigs = null; if (twoSuitLevel >= 0) { twoConfigs = EquipSuitConfig.GetConfigs(PlayerDatas.Instance.baseData.Job, level, EquipSuitType.TwoSuit); } List fiveConfigs = null; if (fiveSuitLevel >= 0) { fiveConfigs = EquipSuitConfig.GetConfigs(PlayerDatas.Instance.baseData.Job, level, EquipSuitType.FiveSuit); } List eightConfigs = null; if (eightSuitLevel >= 0) { eightConfigs = EquipSuitConfig.GetConfigs(PlayerDatas.Instance.baseData.Job, level, EquipSuitType.EightSuit); } for (int i = 9; i >= 0; i--) { if (i % 3 != 0) { continue; } if (twoSuitLevel >= i) { var config = twoConfigs.Find(x => { return x.star == i; }); foreach (var property in config.attr) { container.Add(property.x, property.y); } } if (fiveSuitLevel >= i) { var config = fiveConfigs.Find(x => { return x.star == i; }); foreach (var property in config.attr) { container.Add(property.x, property.y); } } if (eightSuitLevel >= i) { var config = eightConfigs.Find(x => { return x.star == i; }); foreach (var property in config.attr) { container.Add(property.x, property.y); } } } } private void CountStrengthenProperties(int level, ref Properties container) { for (int i = 1; i <= 12; i++) { var equipPosition = new Int2(level, i); var equip = equipModel.GetEquip(equipPosition); if (string.IsNullOrEmpty(equip)) { continue; } var values = strengthenModel.GetEquipValueList(level, i); foreach (var item in values) { container.Add(item.AttType, item.AttValue); } } } private void CountStarProperties(int level, ref Properties container) { for (int i = 1; i <= 12; i++) { var equipPosition = new Int2(level, i); var equip = equipModel.GetEquip(equipPosition); if (string.IsNullOrEmpty(equip)) { continue; } var star = starModel.GetEquipStarLevel(equipPosition); var config = EquipStarConfig.Get(equipPosition.x, equipPosition.y, star); if (config == null) { continue; } foreach (var property in config.BaseAttrInfo) { container.Add(property.x, property.y); } foreach (var property in config.StarAttrInfo) { container.Add(property.x, property.y); } } } private void CountGemProperties(int level, ref Properties container) { for (int i = 1; i <= 12; i++) { var equipPosition = new Int2(level, i); var equip = equipModel.GetEquip(equipPosition); if (string.IsNullOrEmpty(equip)) { continue; } for (int holeIndex = 0; holeIndex < 4; holeIndex++) { if (gemModel.IsEquipGemHoleOpen(equipPosition.x, equipPosition.y, holeIndex)) { continue; } var gem = 0; if (!gemModel.TryGetEquipGem(equipPosition.x, equipPosition.y, holeIndex, out gem)) { continue; } var itemConfig = ItemConfig.Get(gem); if (itemConfig.Effect2 > 0) { container.Add(itemConfig.Effect2, itemConfig.EffectValueA2); } if (itemConfig.Effect3 > 0) { container.Add(itemConfig.Effect3, itemConfig.EffectValueA3); } if (itemConfig.Effect4 > 0) { container.Add(itemConfig.Effect4, itemConfig.EffectValueA4); } if (itemConfig.Effect5 > 0) { container.Add(itemConfig.Effect5, itemConfig.EffectValueA5); } } } } private void CountTrainProperties(int level, ref Properties container) { for (int i = 1; i <= 12; i++) { var equipPosition = new Int2(level, i); var equip = equipModel.GetEquip(equipPosition); if (string.IsNullOrEmpty(equip)) { continue; } var trainLevel = trainModel.GetTrainLevel(equipPosition); if (trainLevel <= 0) { continue; } var type = EquipTrainModel.GetTrainType(equipPosition.y); var data = EquipWashConfig.Get(type, trainLevel); if (data == null) { continue; } var trainedProperties = trainModel.GetTrainedProperties(equipPosition); container.Add(data.config.attType1, Mathf.Min(data.config.attMax1, trainedProperties.x)); container.Add(data.config.attType2, Mathf.Min(data.config.attMax2, trainedProperties.y)); container.Add(data.config.attType3, Mathf.Min(data.config.attMax3, trainedProperties.z)); } } class Properties { Dictionary tables = new Dictionary(); public List keys { get { return new List(tables.Keys); } } public int this[int id] { get { return tables[id]; } } public void Add(int id, int value) { if (id == 7) { Add(65, value); Add(66, value); } else { if (tables.ContainsKey(id)) { tables[id] = tables[id] + value; } else { tables[id] = value; } } } public void AddRange(List ids, List values) { if (ids.IsNullOrEmpty() || values.IsNullOrEmpty()) { return; } var count = Mathf.Min(ids.Count, values.Count); for (int i = 0; i < count; i++) { Add(ids[i], values[i]); } } } } }