| 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<int, FairyMember> memberDic = new Dictionary<int, FairyMember>();  | 
|     private List<FairyMember> eliteList = new List<FairyMember>();  | 
|     public List<FairyMember> GetEliteList()  | 
|     {  | 
|         return eliteList;  | 
|     }  | 
|     /// <summary>  | 
|     /// 副盟主  | 
|     /// </summary>  | 
|     private List<FairyMember> deputyLeaderList = new List<FairyMember>();  | 
|     public List<FairyMember> 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<FairyMember>();  | 
|         }  | 
|   | 
|         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<int, List<FairyData>> fairyList = new Dictionary<int, List<FairyData>>();  | 
|   | 
|     private List<FairyData> searchList = new List<FairyData>();  | 
|     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<FairyData> list = null;  | 
|         fairyList.TryGetValue(vNetData.CurPage, out list);  | 
|         if (list == null)  | 
|         {  | 
|             list = new List<FairyData>(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<FairyData> 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<UnionPanel>();  | 
|         }  | 
|         if (OnRefreshFairyMine != null)  | 
|         {  | 
|             OnRefreshFairyMine();  | 
|         }  | 
|         UpdateRequestRedpoint();  | 
|     }  | 
|   | 
|     public void OnRefreshFairy(H0F05_tagFamilyChange vNetData)  | 
|     {  | 
|         FairyModel.Instance.UpdateFairyInfo();  | 
|     }  | 
|   | 
|     public void ClearFairyList()  | 
|     {  | 
|         fairyList.Clear();  | 
|     }  | 
|   | 
|     public List<FairyData> GetFairyListByPage(int page)  | 
|     {  | 
|         List<FairyData> 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<FairyApply> applyList = new List<FairyApply>();  | 
|     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<FairyApply> GetApplyList()  | 
|     {  | 
|         return applyList;  | 
|     }  | 
|     #endregion  | 
|   | 
|   | 
|   | 
|     #region 仙盟权力开启条件  | 
|     public int[] funcArray = null;  | 
|     public bool IsCanFunc(LimitFunc funcType)  | 
|     {  | 
|         // if (funcArray == null)  | 
|         // {  | 
|         //     funcArray = ConfigParse.GetMultipleStr<int>(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<FairyMember> 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,  | 
|     }  | 
| } |