using System; using UnityEngine; using System.Collections; using System.Collections.Generic; /** 玩家仙盟相关信息缓存数据 */ public class PlayerFairyData { private bool hasFairy = false; public bool HasFairy { get { return hasFairy; } } public int presentFairyCount { get; set; } public FairyData fairy = null; public FairyMember mine = null; public event Action OnRefreshFairyInfo; public event Action OnRefreshFairyMine; private Dictionary memberDic = new Dictionary(); private List eliteList = new List(); public List GetEliteList() { return eliteList; } /// /// 副盟主 /// private List deputyLeaderList = new List(); public List GetDeputyLeaderList() { return deputyLeaderList; } public void OnRefreshFairy(H0F03_tagRoleFamilyInfo vNetData) { if (fairy == null) { fairy = new FairyData(); } fairy.FamilyID = vNetData.FamilyID; if (fairy.FamilyID != 0) hasFairy = true; fairy.FamilyName = vNetData.FamilyName; fairy.FamilyLV = vNetData.FamilyLV; fairy.FamilyMoney = vNetData.FamilyMoney; fairy.FamilyHornor = vNetData.FamilyHornor; fairy.MemberCount = vNetData.MemberCount; fairy.Broadcast = vNetData.Broadcast; fairy.WarRank = vNetData.Point; fairy.FamilyActiveValue = vNetData.FamilyActiveValue; fairy.LastWeekFamilyActiveValue = vNetData.LastWeekFamilyActiveValue; fairy.Extra1 = vNetData.Extra1; fairy.Extra2 = vNetData.Extra2; fairy.Extra3 = vNetData.Extra3; fairy.Extra4 = vNetData.Extra4; fairy.Extra5 = vNetData.Extra5; fairy.Extra6 = vNetData.Extra6; fairy.AcceptJoin = vNetData.AcceptJoin; if (fairy.Member == null) { fairy.Member = new List(); } mine = null; memberDic.Clear(); deputyLeaderList.Clear(); eliteList.Clear(); for (int i = 0; i < vNetData.MemberCount; i++) { FairyMember member = null; if (i >= fairy.Member.Count) { member = new FairyMember(); fairy.Member.Add(member); } else { member = fairy.Member[i]; } member.PlayerID = vNetData.Member[i].PlayerID; member.Sex = vNetData.Member[i].Sex; member.Name = UIHelper.ServerStringTrim(vNetData.Member[i].Name); member.LV = vNetData.Member[i].LV; member.ReincarnationLv = vNetData.Member[i].ReincarnationLv; member.FamilyLV = vNetData.Member[i].FamilyLV; member.FamilyName = UIHelper.ServerStringTrim(vNetData.Member[i].FamilyName); member.Job = vNetData.Member[i].Job; member.Face = vNetData.Member[i].Face; member.FacePic = vNetData.Member[i].FacePic; member.FamilyActiveValue = vNetData.Member[i].FamilyActiveValue; member.LastWeekFamilyActiveValue = vNetData.Member[i].LastWeekFamilyActiveValue; member.OperateInfo = vNetData.Member[i].OperateInfo; member.OfficialRank = vNetData.Member[i].OfficialRank; member.Exattr1 = vNetData.Member[i].Exattr1; member.Exattr2 = vNetData.Member[i].Exattr2; member.Exattr3 = vNetData.Member[i].Exattr3 + vNetData.Member[i].Exattr5 * (long)Constants.ExpPointValue; member.Exattr4 = vNetData.Member[i].Exattr4; member.Exattr5 = vNetData.Member[i].Exattr5; memberDic.Add((int)member.PlayerID, member); if (member.PlayerID == PlayerDatas.Instance.baseData.PlayerID) {//自己 mine = member; } if (member.FamilyLV == 1) { eliteList.Add(member); } else if (member.FamilyLV == 2) { deputyLeaderList.Add(member); } else if (member.FamilyLV == 3) { Leader = member; } } for (int i = fairy.Member.Count - 1; i >= vNetData.MemberCount; i--) { FairyMember member = fairy.Member[i]; fairy.Member.RemoveAt(i); member = null; } if (OnRefreshFairyInfo != null) OnRefreshFairyInfo(); } public FairyMember GetMember(int playerid) { FairyMember member = null; memberDic.TryGetValue(playerid, out member); return member; } public FairyMember Leader { get; private set; } #region 仙盟列表 private bool isSearching = false; public bool IsSearching { get { return isSearching; } } public const int PageCnt = 20; public event Action OnRefreshFairyList; public event Action OnRefreshFairySearch; private Dictionary> fairyList = new Dictionary>(); private List searchList = new List(); public void OnRefreshFairy(HA408_tagGCPyAllFamilyView vNetData) { if (vNetData.IsSearching == 100) { return; } isSearching = vNetData.IsSearching == 1; if (isSearching) { searchList.Clear(); for (int i = 0; i < vNetData.PageCount; i++) { FairyData data = null; if (i >= searchList.Count) { data = new FairyData(); searchList.Add(data); } HA408_tagGCPyAllFamilyView.tagGCPyFamilyView view = vNetData.Family[i]; SetFairyViewData(data, view); } if (OnRefreshFairySearch != null) OnRefreshFairySearch(); return; } List list = null; fairyList.TryGetValue(vNetData.CurPage, out list); if (list == null) { list = new List(PageCnt); fairyList.Add(vNetData.CurPage, list); } list.Clear(); for (int i = 0; i < vNetData.PageCount; i++) { FairyData data = null; if (i >= list.Count) { data = new FairyData(); list.Add(data); } HA408_tagGCPyAllFamilyView.tagGCPyFamilyView view = vNetData.Family[i]; SetFairyViewData(data, view); } presentFairyCount = 0; foreach (var _list in fairyList.Values) { presentFairyCount += _list.Count; } if (OnRefreshFairyList != null) { OnRefreshFairyList(); } FairyModel.Instance.UpdateAddFairyRedpoint(); } public List GetSearchFairy() { return searchList; } public static void SetFairyViewData(FairyData data, HA408_tagGCPyAllFamilyView.tagGCPyFamilyView view) { data.FamilyID = view.FamilyID; data.FamilyIndex = view.FamilyIndex; data.FamilyName = view.FamilyName; data.leaderID = view.LeaderID; data.leaderName = view.LeaderName; data.FamilyLV = view.FamilyLV; data.MemberCount = view.FamilyMemberCount; data.OfficialRank = view.LeaderOfficialRank; data.AcceptJoin = view.JoinAccept; data.totalFightPower = (ulong)view.TotalFightPowerEx * Constants.ExpPointValue + view.TotalFightPower; data.WarRank = view.WarRank; data.EmblemID = view.EmblemID; } public void OnRefreshFairy(H0430_tagPlayerInFamilyInfoRefresh vNetData) { if (vNetData.FamilyNameLen > 0) { if (fairy == null) { fairy = new FairyData(); } if (mine != null) { mine.FamilyLV = vNetData.FamilyMemberLV; } } else { ClearFairyData(); LocalChatHistory.Clear(ChatInfoType.Fairy); // WindowCenter.Instance.Close(); } if (OnRefreshFairyMine != null) { OnRefreshFairyMine(); } UpdateRequestRedpoint(); } public void OnRefreshFairy(H0F05_tagFamilyChange vNetData) { FairyModel.Instance.UpdateFairyInfo(); } public void ClearFairyList() { fairyList.Clear(); } public List GetFairyListByPage(int page) { List list = null; fairyList.TryGetValue(page, out list); return list; } public void ClearFairyData() { hasFairy = false; fairy = null; mine = null; applyList.Clear(); //ChatCtrl.Inst.ClearChatInfo(ChatInfoType.Fairy); } #endregion #region 申请列表 public event Action OnRefreshApplyList; private List applyList = new List(); private Redpoint applyRedpoint = new Redpoint(10702, 1070201); private Redpoint memberRedpoint = new Redpoint(107, 10702); public void OnRefreshFairy(HA401_tagGCViewFamilyRequestInfo vNetData) { applyList.Clear(); for (int i = 0; i < vNetData.RequestMemberCount; i++) { FairyApply apply = new FairyApply(); apply.Name = vNetData.MemberInfo[i].Name; apply.PlayerID = vNetData.MemberInfo[i].PlayerID; apply.PlayerLV = vNetData.MemberInfo[i].PlayerLV; apply.PlayeJob = vNetData.MemberInfo[i].PlayeJob; apply.PlayeFightPower = vNetData.MemberInfo[i].PlayeFightPower + vNetData.MemberInfo[i].PlayeFightPowerEx * (long)Constants.ExpPointValue; apply.RequestTime = vNetData.MemberInfo[i].RequestTime; apply.IsOnLine = vNetData.MemberInfo[i].IsOnLine; applyList.Add(apply); } if (OnRefreshApplyList != null) { OnRefreshApplyList(); } UpdateRequestRedpoint(); } void UpdateRequestRedpoint() { if (HasFairy && IsCanFunc(LimitFunc.CanCall)) { applyRedpoint.state = applyList.Count > 0 ? RedPointState.Simple : RedPointState.None; } else { applyRedpoint.state = RedPointState.None; } } public List GetApplyList() { return applyList; } #endregion #region 仙盟权力开启条件 public int[] funcArray = null; public bool IsCanFunc(LimitFunc funcType) { // if (funcArray == null) // { // funcArray = ConfigParse.GetMultipleStr(FuncConfigConfig.Get("FamilyPurview").Numerical1); // } // if (funcArray != null && funcArray.Length > 6) // { // if (mine != null) // { // return mine.FamilyLV >= funcArray[(int)funcType]; // } // } return false; } #endregion public class FairyData { public uint FamilyID; public string FamilyName; //家族名称 public ushort FamilyLV; //家族等级 public uint FamilyMoney; //资金 public uint FamilyHornor; //荣誉 public ushort MemberCount; //人数 public uint Point; //家族战积分 public string Broadcast; //size = BroadcastLen public uint FamilyActiveValue; //本周家族活跃度 public uint LastWeekFamilyActiveValue; //上周家族活跃度 public List Member = null; //size = MemberCount public uint Extra1; //附加字段1 public uint Extra2; //附加字段2 public uint Extra3; //附加字段3 public uint Extra4; //附加字段4 public uint Extra5; //附加字段5 public uint Extra6; //附加字段6 仙盟当前佩戴的徽章ID public byte AcceptJoin; //是否接受申请 public uint WarRank; //仙盟联赛排名 public ulong totalFightPower; public int EmblemID; //仙盟徽章ID #region 查找专用字段 public ushort FamilyIndex; public uint leaderID; public string leaderName; public byte OfficialRank; //境界 #endregion } public class FairyMember { public uint PlayerID; public byte Sex; //性别 public string Name; //size = NameLen public ushort LV; public ushort ReincarnationLv; public byte FamilyLV; //家族等级 public string FamilyName; //size = FamilyNameLen public byte Job; //职业 public uint Face; //头像 public uint FacePic; //头像外框 public byte OfficialRank; //境界 public uint FamilyActiveValue; //本周家族活跃度 public uint LastWeekFamilyActiveValue; //上周家族活跃度 public uint Exattr1; //扩展属性 public uint Exattr2; //每周仙盟资金上限 public long Exattr3; //扩展属性 public uint Exattr4; //扩展属性 public uint Exattr5; //扩展属性 public uint OperateInfo; //玩家附加运营商信息 } public class FairyApply { public uint PlayerID; //玩家ID public string Name; //size=NameLen public ushort PlayerLV; //玩家等级 public byte PlayeJob; //玩家职业 public long PlayeFightPower; //玩家战斗力 public uint RequestTime; //申请时间 public byte IsOnLine; //是否在线 } public enum LimitFunc { CanCall = 0, CanJobTitle = 1, CanNotify = 2, CanLvUp = 3, CanClearTreasury = 4, CanKick = 5, CanOpenBoss = 6, } }