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<int, EquipDetailsGroup> equipDetailsGroups = new Dictionary<int, EquipDetailsGroup>();
|
|
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<OtherPlayerEquipWin>())
|
{
|
WindowCenter.Instance.Open<OtherPlayerEquipWin>();
|
}
|
}
|
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<OtherPlayerEquipWin>())
|
{
|
WindowCenter.Instance.Open<OtherPlayerEquipWin>();
|
}
|
}
|
|
public Dictionary<int, EquipBrief> GetEquipBriefs()
|
{
|
if (equipDetailsGroups.ContainsKey(selectedLevel))
|
{
|
var equipDetailsGroup = equipDetailsGroups[selectedLevel];
|
var equipBriefs = new Dictionary<int, EquipBrief>();
|
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<int, bool>();
|
gemHoleActiveStates[0] = true;
|
gemHoleActiveStates[1] = details.star >= 2;
|
gemHoleActiveStates[2] = details.star >= 5;
|
gemHoleActiveStates[3] = playerVipLevel >= 6;
|
|
equipInfo.gemHoleActiveStates = gemHoleActiveStates;
|
equipInfo.gems = new Dictionary<int, int>();
|
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<int> stones = new List<int>();
|
public int trainLevel;
|
public List<Int2> trainProperties = new List<Int2>();
|
public List<Int2> legendProperties = new List<Int2>();
|
public List<int> equipSkillList = new List<int>();
|
|
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<int, List<int>> 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<int>();
|
var legendValues = new List<int>();
|
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<int, EquipDetails> equips = new Dictionary<int, EquipDetails>();
|
|
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<EquipFightPower.EquipInfo>();
|
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<int, int> GetPlaceStars()
|
{
|
var places = new Dictionary<int, int>();
|
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<int> GetSuitPlaces()
|
{
|
var places = new List<int>();
|
foreach (var item in equips)
|
{
|
if (ItemLogicUtility.Instance.IsSuitEquip(item.Value.itemId))
|
{
|
places.Add(item.Key);
|
}
|
}
|
|
return places;
|
}
|
|
public Dictionary<EquipSuitType, int> GetSuitLevels()
|
{
|
var stars = new List<int>();
|
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, int>() {
|
{ 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<int, int> placeStars;
|
public Dictionary<EquipSuitType, int> suitLevels;
|
}
|
|
}
|
|
}
|