using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using LitJson; namespace vnxbqy.UI { //查询玩家具体哪一套境界装备,还需优化数据缓存 public class OtherPlayerEquipModel : Model { int m_SelectedLevel = 0; public int selectedLevel { get { return m_SelectedLevel; } private set { if (this.m_SelectedLevel != value) { m_SelectedLevel = value; if (selectedLevelChangeEvent != null) { selectedLevelChangeEvent(); } } } } public int viewPlayerType { get; private set; } public int playerId { get; private set; } public int playerJob { get; private set; } public int playerRealm { get; private set; } public int playerVipLevel { get; private set; } public int wing { get; private set; } public int reikiRootEffectId { get; private set; } public int equipLevel { get; private set; } public event Action selectedLevelChangeEvent; Dictionary equipDetailsGroups = new Dictionary(); public override void Init() { } public override void UnInit() { } public void ViewPlayerEquip(PlayerBriefInfo info) { this.viewPlayerType = info.viewType; this.playerId = info.id; this.playerJob = info.job; this.playerRealm = info.realm; this.playerVipLevel = info.vipLevel; this.wing = info.wing; this.reikiRootEffectId = info.reikiRootEffectId; this.equipLevel = info.equipLevel; SelectLevel(1); } public void SelectLevel(int level) { if (equipDetailsGroups.ContainsKey(level)) { selectedLevel = level; if (!WindowCenter.Instance.IsOpen()) { WindowCenter.Instance.Open(); } } else { if (viewPlayerType >= (int)ViewPlayerType.viewCrossPlayerEquip) { //由子服服务器向跨服服务器查询 CC002_tagCGViewCrossPlayerInfo sendInfo = new CC002_tagCGViewCrossPlayerInfo(); sendInfo.PlayerID = (uint)playerId; sendInfo.EquipClassLV = (byte)level; GameNetSystem.Instance.SendInfo(sendInfo); } else { //本服查询 CA212_tagCMViewPlayerInfo sendInfo = new CA212_tagCMViewPlayerInfo(); sendInfo.PlayerID = (uint)playerId; sendInfo.EquipClassLV = (byte)level; GameNetSystem.Instance.SendInfo(sendInfo); } } } public void OnGetEquipDetails(HA719_tagSCPlayerEquipCacheResult info) { equipDetailsGroups[info.EquipClassLV] = new EquipDetailsGroup(playerJob, info.EquipClassLV, info.ItemData); selectedLevel = info.EquipClassLV; if (!WindowCenter.Instance.IsOpen()) { WindowCenter.Instance.Open(); } } public Dictionary GetEquipBriefs() { if (equipDetailsGroups.ContainsKey(selectedLevel)) { var equipDetailsGroup = equipDetailsGroups[selectedLevel]; var equipBriefs = new Dictionary(); foreach (var details in equipDetailsGroup.equips.Values) { var config = ItemConfig.Get(details.itemId); equipBriefs[config.EquipPlace] = new EquipBrief() { itemId = details.itemId, star = details.star, }; } return equipBriefs; } else { return null; } } public int GetFightPoint() { if (equipDetailsGroups.ContainsKey(selectedLevel)) { return equipDetailsGroups[selectedLevel].fightPoint; } else { return 0; } } public EquipAppearance GetEquipAppearance() { if (equipDetailsGroups.ContainsKey(selectedLevel)) { var equipDetailsGroup = equipDetailsGroups[selectedLevel]; var equips = equipDetailsGroup.equips; var suitLevels = equipDetailsGroup.GetSuitLevels(); var appearance = new EquipAppearance() { job = playerJob, clothes = equips.ContainsKey((int)RoleEquipType.Clothes) ? equips[(int)RoleEquipType.Clothes].itemId : 0, weapon = equips.ContainsKey((int)RoleEquipType.Weapon) ? equips[(int)RoleEquipType.Weapon].itemId : 0, secondary = equips.ContainsKey((int)RoleEquipType.Weapon2) ? equips[(int)RoleEquipType.Weapon2].itemId : 0, wings = wing, isSuit = suitLevels.ContainsKey(EquipSuitType.EightSuit) && suitLevels[EquipSuitType.EightSuit] > 0, }; return appearance; } else { return default(EquipAppearance); } } public ItemTipUtility.CustomEquipInfo GetEquipInfo(int level, int place) { if (!equipDetailsGroups.ContainsKey(level)) { return default(ItemTipUtility.CustomEquipInfo); } if (!equipDetailsGroups[level].equips.ContainsKey(place)) { return default(ItemTipUtility.CustomEquipInfo); } var details = equipDetailsGroups[level].equips[place]; var equipInfo = new ItemTipUtility.CustomEquipInfo(); equipInfo.job = playerJob; equipInfo.itemId = details.itemId; equipInfo.isEquiped = true; equipInfo.score = details.score; equipInfo.legendProperties = details.legendProperties; equipInfo.suitPlaces = equipDetailsGroups[level].GetSuitPlaces(); equipInfo.placeStars = equipDetailsGroups[level].GetPlaceStars(); equipInfo.suitLevels = equipDetailsGroups[level].GetSuitLevels(); equipInfo.strengthenLevel = details.strengthenLevel; equipInfo.evolveLevel = details.evolveLevel; equipInfo.starLevel = details.star; equipInfo.equipSkillList = details.equipSkillList; equipInfo.trainProperties = details.trainProperties; var gemHoleActiveStates = new Dictionary(); gemHoleActiveStates[0] = true; gemHoleActiveStates[1] = details.star >= 2; gemHoleActiveStates[2] = details.star >= 5; gemHoleActiveStates[3] = playerVipLevel >= 6; equipInfo.gemHoleActiveStates = gemHoleActiveStates; equipInfo.gems = new Dictionary(); for (var i = 0; i < details.stones.Count; i++) { equipInfo.gems[i] = details.stones[i]; } return equipInfo; } public SuitInfo GetSuitInfo() { if (!equipDetailsGroups.ContainsKey(selectedLevel)) { return default(SuitInfo); } var suitInfo = new SuitInfo(); suitInfo.job = playerJob; suitInfo.level = selectedLevel; suitInfo.placeStars = equipDetailsGroups[selectedLevel].GetPlaceStars(); suitInfo.suitLevels = equipDetailsGroups[selectedLevel].GetSuitLevels(); return suitInfo; } public void Clear() { selectedLevel = 0; equipDetailsGroups.Clear(); } public struct EquipBrief { public int itemId; public int star; } public class EquipDetails { public int itemId; public int score; public int star; public int strengthenLevel; public int evolveLevel; public List stones = new List(); public int trainLevel; public List trainProperties = new List(); public List legendProperties = new List(); public List equipSkillList = new List(); public EquipDetails(JsonData serverInfo) { itemId = (int)serverInfo["ItemID"]; star = serverInfo.Keys.Contains("Star") ? (int)serverInfo["Star"] : 0; strengthenLevel = serverInfo.Keys.Contains("PlusLV") ? (int)serverInfo["PlusLV"] : 0; evolveLevel = serverInfo.Keys.Contains("EvolveLV") ? (int)serverInfo["EvolveLV"] : 0; if (serverInfo.Keys.Contains("Stone")) { var stoneJson = serverInfo["Stone"]; for (int i = 0; i < stoneJson.Count; i++) { stones.Add((int)stoneJson[i]); } } if (serverInfo.Keys.Contains("Wash")) { var washJson = serverInfo["Wash"]; trainLevel = (int)washJson["LV"]; var washValueJson = washJson["Value"]; var config = ItemConfig.Get(itemId); var trainType = EquipTrainModel.GetTrainType(config.EquipPlace); var trainData = EquipWashConfig.Get(trainType, trainLevel); trainProperties.Add(new Int2(trainData.config.attType1, (int)washValueJson[0])); trainProperties.Add(new Int2(trainData.config.attType2, (int)washValueJson[1])); //trainProperties.Add(new Int2(trainData.config.attType3, (int)washValueJson[2])); } else { var config = ItemConfig.Get(itemId); var trainType = EquipTrainModel.GetTrainType(config.EquipPlace); var trainData = EquipWashConfig.Get(trainType, 1); trainProperties.Add(new Int2(trainData.config.attType1, 0)); trainProperties.Add(new Int2(trainData.config.attType2, 0)); trainProperties.Add(new Int2(trainData.config.attType3, 0)); } Dictionary> userData = null; if (serverInfo.Keys.Contains("UserData")) { userData = ConfigParse.Analysis(serverInfo["UserData"].ToString()); if (userData.ContainsKey((int)ItemUseDataKey.legendAttrID) && userData.ContainsKey((int)ItemUseDataKey.legendAttrValue)) { var count = Mathf.Min(userData[(int)ItemUseDataKey.legendAttrID].Count, userData[(int)ItemUseDataKey.legendAttrValue].Count); for (int i = 0; i < count; i++) { legendProperties.Add(new Int2(userData[(int)ItemUseDataKey.legendAttrID][i], userData[(int)ItemUseDataKey.legendAttrValue][i])); } } if (userData.ContainsKey((int)ItemUseDataKey.equipSkills)) { equipSkillList = userData[(int)ItemUseDataKey.equipSkills]; } } var legendIds = new List(); var legendValues = new List(); foreach (var property in legendProperties) { legendIds.Add(property.x); legendValues.Add(property.y); } this.score = ItemLogicUtility.Instance.GetEquipScore(itemId, userData); } } public class EquipDetailsGroup { public readonly int job; public readonly int level = 0; public readonly int fightPoint = 0; public Dictionary equips = new Dictionary(); public EquipDetailsGroup(int job, int level, string equipInfo) { this.job = job; this.level = level; var json = JsonMapper.ToObject(equipInfo); foreach (var key in json.Keys) { var serverPlace = 0; int.TryParse(key, out serverPlace); if (serverPlace == 0) { continue; } var equipPosition = EquipSet.ServerPlaceToClientPlace(serverPlace); equips[equipPosition.y] = new EquipDetails(json[key]); } var equipInfos = new List(); foreach (var equip in equips.Values) { equipInfos.Add(new EquipFightPower.EquipInfo() { itemId = equip.itemId, score = equip.score, evolveLevel = equip.evolveLevel, strengthenLevel = equip.strengthenLevel, starLevel = equip.star, stones = equip.stones, trainProperties = equip.trainProperties, }); } fightPoint = EquipFightPower.Instance.CalculatePower(this.job, this.level, equipInfos); } public Dictionary GetPlaceStars() { var places = new Dictionary(); foreach (var item in equips) { if (ItemLogicUtility.Instance.IsSuitEquip(item.Value.itemId)) { places[item.Key] = item.Value.star; } else { places[item.Key] = -1; } } return places; } public List GetSuitPlaces() { var places = new List(); foreach (var item in equips) { if (ItemLogicUtility.Instance.IsSuitEquip(item.Value.itemId)) { places.Add(item.Key); } } return places; } public Dictionary GetSuitLevels() { var stars = new List(); var suitCount = 0; foreach (var item in equips) { if (item.Key > 8) { continue; } if (ItemLogicUtility.Instance.IsSuitEquip(item.Value.itemId)) { suitCount++; } var star = item.Value.star; stars.Add(star); } stars.Sort((int x, int y) => { return -x.CompareTo(y); }); var twoSuitLevel = (suitCount >= 2 && stars.Count >= 2) ? stars[1] : -1; var fiveSuitLevel = (suitCount >= 5 && stars.Count >= 5) ? stars[4] : -1; var eightSuitLevel = (suitCount >= 8 && stars.Count >= 8) ? stars[7] : -1; return new Dictionary() { { EquipSuitType.TwoSuit, twoSuitLevel }, { EquipSuitType.FiveSuit, fiveSuitLevel}, {EquipSuitType.EightSuit, eightSuitLevel }, }; } } public struct PlayerBriefInfo { public int viewType; public int id; public int job; public int realm; public int vipLevel; public int wing; public int reikiRootEffectId; public int equipLevel; } public struct SuitInfo { public int level; public int job; public Dictionary placeStars; public Dictionary suitLevels; } } }