using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using LitJson; using System.Linq; //查看其他玩家的简短信息, 该模块处理数据,其他由各自功能模块处理 通过OnRevPackage public class RoleParticularModel : GameSystemManager { public override void Init() { DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize; } public override void Release() { DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize; } public void OnBeforePlayerDataInitialize() { viewPlayerType = -1; } public int viewPlayer { get; private set; } // 查询本服:0-查看其他玩家的简洁信息界面 1-查看战力界面 2(以上小于100)-返回数据不做处理,由调用者自行处理逻辑 // 查询跨服:100-查看其他玩家的简洁信息界面 101-查看战力界面 102以上-返回数据不做处理,由调用者自行处理逻辑 // 调用者需要的话自定义枚举值 EnumHelper的ViewPlayerType public int viewPlayerType { get; private set; } private Dictionary viewPlayerDataDic = new Dictionary(); private Dictionary funcFightPowerDict = new Dictionary(); public event Action PowerUpdate; public static Action OnRevPackage; //尽量不要用第一个参数viewtype做判断,容易出错 public ViewPlayerData GetViewPlayerData(int player) { ViewPlayerData viewPlayerData = null; viewPlayerDataDic.TryGetValue(player, out viewPlayerData); return viewPlayerData; } // 查看玩家模型展示,查玩家装备详情需另外处理 // 本服查询:返回时打开查看其他玩家的简洁信息界面(可查看装备,宠物,坐骑等具体信息)RoleParticularsWin public void ViewRoleEquip(int playerID) { if (playerID == PlayerDatas.Instance.baseData.PlayerID) { return; } viewPlayerType = (int)ViewPlayerType.viewPlayerEquip; ViewRoleParticulars(playerID); } // 本服查询:返回时打开查看其他玩家战力界面(战力分布)ViewFuncPowerWin public void ViewRoleFightPower(int playerID) { if (playerID == PlayerDatas.Instance.baseData.PlayerID) { return; } viewPlayerType = (int)ViewPlayerType.viewPlayerFightPower; ViewRoleParticulars(playerID); } // 返回时不做任何操作,由调用者自行处理逻辑 public void ViewPlayerCacheData(int _playerId, int viewType = (int)ViewPlayerType.viewPlayerData) { viewPlayerType = viewType; ViewRoleParticulars(_playerId); } // 查看玩家模型展示,查玩家装备详情需另外处理 // 跨服查询:返回时打开查看其他玩家的简洁信息界面(可查看装备,宠物,坐骑等具体信息)RoleParticularsWin public void ViewCrossServerPlayerEquip(int _playerId) { if (_playerId == PlayerDatas.Instance.baseData.PlayerID) { return; } viewPlayerType = (int)ViewPlayerType.viewCrossPlayerEquip; ViewRoleParticulars(_playerId); } public void ViewCrossPlayerFightPower(int _playerId) { if (_playerId == PlayerDatas.Instance.baseData.PlayerID) { return; } viewPlayerType = (int)ViewPlayerType.viewCrossPlayerFightPower; ViewRoleParticulars(_playerId); } // 返回时不做任何操作,由调用者自行处理逻辑 public void ViewCrossPlayerCacheData(int _playerId, int viewType = (int)ViewPlayerType.viewCrossPlayerData) { viewPlayerType = viewType; ViewRoleParticulars(_playerId); } public void ViewRoleParticulars(int playerID) { if (playerID == 0) { return; } viewPlayer = playerID; if (viewPlayerDataDic.ContainsKey(playerID)) { ViewPlayerData viewPlayerData = viewPlayerDataDic[playerID]; if ((DateTime.Now - viewPlayerData.getTime).TotalSeconds < 30) { ShowRoleParticulars(viewPlayerData, playerID); return; } } if (viewPlayerType >= (int)ViewPlayerType.viewCrossPlayerEquip) { //由子服服务器向跨服服务器查询; 会优先查本服数据(gameserver) CC002_tagCGViewCrossPlayerInfo c002 = new CC002_tagCGViewCrossPlayerInfo(); c002.PlayerID = (uint)playerID; GameNetSystem.Instance.SendInfo(c002); } else { //只查本服数据,有可能本地图有数据,就不查gameserver CA212_tagCMViewPlayerInfo pak = new CA212_tagCMViewPlayerInfo(); pak.PlayerID = (uint)playerID; GameNetSystem.Instance.SendInfo(pak); } } //本服竞技场假查询模拟封包,返回查看机器人数据 打开RoleParticularsWin界面,专用接口其他地方不要调用 public void ViewFairyArenaRobot(int playerID, ViewPlayerData _viewPlayerData) { ViewPlayerData viewPlayerData = null; viewPlayer = playerID; if (!viewPlayerDataDic.TryGetValue(playerID, out viewPlayerData)) { viewPlayerDataDic.Add(playerID, _viewPlayerData); } else { viewPlayerDataDic[playerID] = _viewPlayerData; } viewPlayerType = (int)ViewPlayerType.viewCrossPlayerEquip; ShowRoleParticulars(_viewPlayerData, playerID); } public void OnRevRoleEquip(HA705_tagSCQueryPlayerCacheResult package) { ViewPlayerData viewPlayerData = null; if (!viewPlayerDataDic.TryGetValue((int)package.PlayerID, out viewPlayerData)) { viewPlayerData = new ViewPlayerData(); viewPlayerData.getTime = DateTime.Now; viewPlayerDataDic.Add((int)package.PlayerID, viewPlayerData); } viewPlayerData.getTime = DateTime.Now; viewPlayerData.rolePropData.PlayerID = (int)package.PlayerID; viewPlayerData.rolePropData.Name = package.PlayerName; viewPlayerData.rolePropData.LV = package.LV; viewPlayerData.rolePropData.Job = package.Job; viewPlayerData.rolePropData.RealmLV = package.RealmLV; viewPlayerData.rolePropData.Face = (int)package.Face; viewPlayerData.rolePropData.FacePic = (int)package.FacePic; viewPlayerData.rolePropData.TitleID = (int)package.TitleID; viewPlayerData.rolePropData.ServerID = (int)package.ServerID; viewPlayerData.rolePropData.FightPower = package.FightPower + package.FightPowerEx * (long)Constants.ExpPointValue; viewPlayerData.rolePropData.FamilyID = (int)package.FamilyID; viewPlayerData.rolePropData.FamilyName = package.FamilyName; viewPlayerData.rolePropData.FamilyEmblemID = (int)package.FamilyEmblemID; if (viewPlayerData.rolePlusData == null) { //第一次初始化 viewPlayerData.rolePlusData = new RolePlusData(); } if (package.PlusDataSize != 0) { viewPlayerData.rolePlusData.AnalysisRolePlusData(package.PlusData); } ShowRoleParticulars(viewPlayerData, (int)package.PlayerID); } public void OnRevRoleFuncPower(HA3A1_tagMCModuleFightPowerInfo package) { if (package.MFPCnt == 0) return; for (int i = 0; i < package.MFPList.Length; i++) { funcFightPowerDict[package.MFPList[i].MfpType] = package.MFPList[i].FightPowerEx * Constants.ExpPointValue + package.MFPList[i].FightPower; } if (PowerUpdate != null) { PowerUpdate(); } } public ulong GetFuncFightPower(int type) { if (funcFightPowerDict.ContainsKey(type)) { return funcFightPowerDict[type]; } return 0; } #region 查看玩家坐骑灵宠属性 // int[] qualitys; // string[] qualityTitles; // public string GetQualityDisplay(int quality) // { // if (qualitys == null) // { // var config = FuncConfigConfig.Get("PetQuality"); // qualitys = ConfigParse.GetMultipleStr(config.Numerical1); // qualityTitles = ConfigParse.GetMultipleStr(config.Numerical2); // } // for (int i = 0; i < qualitys.Length; i++) // { // if (quality == qualitys[i]) // { // return qualityTitles[i]; // } // } // return string.Empty; // } // public int GetPetFightPower(List pets) // { // var fightPower = 0; // for (int i = 0; i < pets.Count; i++) // { // fightPower += GetPetFightPower(pets[i].id, pets[i].lv); // } // return fightPower; // } // public int GetPetFightPower(int id, int lv) // { // var fightPower = 0; // var config = PetInfoConfig.Get(id); // var _init_fightpower = 0; // int.TryParse(config.InitFightPower, out _init_fightpower); // fightPower += _init_fightpower; // PetInfoConfig.GetPetSkills(id, lv, true, ref skills); // var petUpConfig = PetClassCostConfig.GetPetIdAndRank(id, lv); // if (petUpConfig != null) // { // Dictionary propertyDict = new Dictionary(); // propertyDict.Add(77, petUpConfig.AtkAdd); // propertyDict.Add(78, petUpConfig.AtkAdd); // fightPower += UIHelper.GetFightPower(propertyDict);// Mathf.FloorToInt(petUpConfig.AtkAdd * 2.5f); // } // for (int i = 0; i < skills.Count; i++) // { // var skillConfig = SkillConfig.Get(skills[i]); // if (skillConfig != null) // { // fightPower += skillConfig.FightPower; // } // } // return fightPower; // } // public int GetPetAtkProperty(List pets) // { // var atk = 0; // for (int i = 0; i < pets.Count; i++) // { // atk += GetPetAtkProperty(pets[i].id, pets[i].lv, pets); // } // return atk; // } // public int GetPetAtkProperty(int id, int lv, List pets) // { // var atk = 0; // var petUpConfig = PetClassCostConfig.GetPetIdAndRank(id, lv); // if (petUpConfig != null) // { // atk += petUpConfig.AtkAdd; // } // PetInfoConfig.GetPetSkills(id, lv, true, ref skills); // for (int i = 0; i < skills.Count; i++) // { // atk += GetPetAtkSkillProperty(skills[i], pets); // } // return atk; // } // public int GetPetAtkSkillProperty(int skillId, List pets) // { // SkillConfig skillconfig = SkillConfig.Get(skillId); // if (skillconfig == null) // { // return 0; // } // if (skillconfig.Effect1 == (int)RidingAndPetActivationModel.RidingAndPetProperty.PetAttack) // { // return GetPetAttack(skillconfig.EffectValue11, skillconfig.EffectValue12, pets); // } // else if (skillconfig.Effect2 == (int)RidingAndPetActivationModel.RidingAndPetProperty.PetAttack) // { // return GetPetAttack(skillconfig.EffectValue21, skillconfig.EffectValue22, pets); // } // else if (skillconfig.Effect3 == (int)RidingAndPetActivationModel.RidingAndPetProperty.PetAttack) // { // return GetPetAttack(skillconfig.EffectValue31, skillconfig.EffectValue32, pets); // } // else if (skillconfig.Effect4 == (int)RidingAndPetActivationModel.RidingAndPetProperty.PetAttack) // { // return GetPetAttack(skillconfig.EffectValue41, skillconfig.EffectValue42, pets); // } // else if (skillconfig.Effect5 == (int)RidingAndPetActivationModel.RidingAndPetProperty.PetAttack) // { // return GetPetAttack(skillconfig.EffectValue51, skillconfig.EffectValue52, pets); // } // else if (skillconfig.Effect6 == (int)RidingAndPetActivationModel.RidingAndPetProperty.PetAttack) // { // return GetPetAttack(skillconfig.EffectValue61, skillconfig.EffectValue62, pets); // } // return 0; // } // int GetPetAttack(int quality, int value, List pets) // { // var atk = 0; // for (int i = 0; i < pets.Count; i++) // { // var config = PetInfoConfig.Get(pets[i].id); // if (config != null && config.Quality == quality) // { // var petUpConfig = PetClassCostConfig.GetPetIdAndRank(pets[i].id, pets[i].lv); // atk += petUpConfig == null ? 0 : petUpConfig.AtkAdd; // } // } // return (int)(atk * ((float)value / 10000)); // } public bool viewPetStone { get; set; } #endregion //尽量不要用第一个参数viewtype做判断,容易出错,比如同时发送两个不同的viewPlayerType请求的时候 private void ShowRoleParticulars(ViewPlayerData _viewPlayerData, int playerID) { // if (viewPlayerType == (int)ViewPlayerType.viewPlayerEquip || viewPlayerType == (int)ViewPlayerType.viewCrossPlayerEquip) // { // if (!WindowCenter.Instance.IsOpen()) // { // RoleParticularsWin.viewType = viewPlayerType; // WindowCenter.Instance.Open(); // } // } // else if (viewPlayerType == (int)ViewPlayerType.viewPlayerFightPower || viewPlayerType == (int)ViewPlayerType.viewCrossPlayerFightPower) // { // if (!WindowCenter.Instance.IsOpen()) // { // WindowCenter.Instance.Open(); // } // } OnRevPackage?.Invoke(viewPlayerType, playerID, _viewPlayerData); viewPlayerType = -1; } public class ViewPlayerData { public RolePropData rolePropData; public RolePlusData rolePlusData; public DateTime getTime; public int GetEquipSuitLevel() { return 0; } } [Serializable] public struct RolePropData { public int PlayerID; public int LV; public int RealmLV; public string Name; public string FamilyName; public int Job; public int FamilyID; public long FightPower; public int TitleID; public int ServerID; public int FamilyEmblemID; public int Face; //脸型 public int FacePic; //脸型外框 } public class RolePlusData { Dictionary fightPowerDict = new Dictionary(); Dictionary godWeaponDict = new Dictionary(); Dictionary treasureDict = new Dictionary(); public List horses = new List(); public List pets = new List(); public List alchemyDrugs = new List(); public int Horse { get; private set; } //改为等级 public int Pet { get; private set; } public int AtkSpeed { get; private set; } public int Rune { get; private set; } public int orangeEquipsCount { get; private set; } public int totalGemsLevel { get; private set; } public int totalEquipWashLevel { get; private set; } public int totalEquipStarLevel { get; private set; } public int totalEquipStrengthLevel { get; private set; } public int totalEquipEvolveLevel { get; private set; } public int totalSkillLevel { get; private set; } public ulong GetFightPower(int type) { if (fightPowerDict != null && fightPowerDict.ContainsKey(type)) { return fightPowerDict[type]; } return 0; } public void AnalysisRolePlusData(string jsonStr) { try { var jsonData = JsonMapper.ToObject(jsonStr); if (jsonData.Keys.Contains("FightPowerDict")) { var jsonPlusData = jsonData["FightPowerDict"]; if (jsonPlusData.IsObject) { foreach (var key in jsonPlusData.Keys) { int type = int.Parse(key); fightPowerDict.Add(type, ulong.Parse(jsonPlusData[key].ToString())); } } } // if (jsonData.Keys.Contains("Pet")) // { // var jsonPlusData = jsonData["Pet"]; // if (jsonPlusData.IsObject) // { // foreach (var _key in jsonPlusData.Keys) // { // if (_key.Equals("AtkSpeed")) // { // AtkSpeed = int.Parse(jsonPlusData[_key].ToString()); // } // else if (_key.Equals("PetLV")) // { // var petInfos = JsonMapper.ToObject(jsonPlusData[_key].ToJson()); // if (petInfos != null && petInfos.Length > 0) // { // for (int i = 0; i < petInfos.Length; i++) // { // var petInfo = petInfos[i]; // pets.Add(new PetInfo() // { // id = petInfo.id, // lv = petInfo.lv + 1, // }); // } // } // } // } // pets.Sort(Compare); // } // Pet = pets.Count; // } // else // { // Pet = 0; // } } catch (Exception e) { Debug.Log(e.StackTrace); } } // int Compare(PetInfo x, PetInfo y) // { // var config_x = PetInfoConfig.Get(x.id); // var config_y = PetInfoConfig.Get(y.id); // if (config_x == null || config_y == null) // { // return 0; // } // return -config_x.Sort.CompareTo(config_y.Sort); // } // int Compare(HorseInfo x, HorseInfo y) // { // var config_x = HorseConfig.Get(x.id); // var config_y = HorseConfig.Get(y.id); // if (config_x == null || config_y == null) // { // return 0; // } // return -config_x.Sort.CompareTo(config_y.Sort); // } } public struct HorseInfo { public int id; public int lv; } public struct PetInfo { public int id; public int lv; } public struct AlchemyDrug { public int item; public int count; } }