using System;  
 | 
using UnityEngine;  
 | 
using System.Collections;  
 | 
using System.Collections.Generic;  
 | 
  
 | 
  
 | 
/** 玩家仙盟相关信息缓存数据 */  
 | 
public class PlayerFairyData  
 | 
{  
 | 
  
 | 
    public bool HasFairy  
 | 
    {  
 | 
        get  
 | 
        {  
 | 
            if (fairy == null) return false;  
 | 
            if (fairy.FamilyID == 0) return false;  
 | 
            return true;  
 | 
        }  
 | 
    }  
 | 
  
 | 
  
 | 
    public FairyData fairy = null;  //自己的公会数据  
 | 
    public FairyMember mine = null;  
 | 
    public event Action OnRefreshFairyInfo;  
 | 
    public event Action OnRefreshFairyMine; //玩家在公会里的数据  
 | 
    Dictionary<int, FairyMember> memberDic = new Dictionary<int, FairyMember>();  
 | 
    public List<int> memberIDList = new List<int>();  
 | 
  
 | 
    // 0-成员,1-精英,2-副盟主,3-盟主  
 | 
    public int leaderID;  
 | 
    // // 精英  
 | 
    public List<int> elitePlayerIDList = new List<int>();  
 | 
    // // 副盟主  
 | 
    public List<int> deputyLeaderPlayerIDList = new List<int>();  
 | 
  
 | 
    public void OnRefreshGuildInfo(HA520_tagMCRoleFamilyInfo vNetData)  
 | 
    {  
 | 
        if (fairy == null)  
 | 
        {  
 | 
            fairy = new FairyData();  
 | 
        }  
 | 
        fairy.FamilyID = (int)vNetData.FamilyID;  
 | 
        fairy.FamilyName = UIHelper.ServerStringTrim(vNetData.FamilyName);  
 | 
        fairy.FamilyLV = vNetData.FamilyLV;  
 | 
        fairy.FamilyLVExp = (int)vNetData.FamilyLVExp;  
 | 
        fairy.JoinReview = vNetData.JoinReview;  
 | 
        fairy.JoinLVMin = vNetData.JoinLVMin;  
 | 
        fairy.ServerID = (int)vNetData.ServerID;  
 | 
        fairy.EmblemID = (int)vNetData.EmblemID;  
 | 
        fairy.EmblemWord = vNetData.EmblemWord;  
 | 
        fairy.totalFightPower = vNetData.FightPowerEx * Constants.ExpPointValue + vNetData.FightPower;  
 | 
        fairy.Broadcast = vNetData.Broadcast;  
 | 
        fairy.LeaderID = (int)vNetData.LeaderID;  
 | 
        fairy.MemberCount = vNetData.MemberCount;  
 | 
  
 | 
        mine = null;  
 | 
  
 | 
        memberDic.Clear();  
 | 
        memberIDList.Clear();  
 | 
        deputyLeaderPlayerIDList.Clear();  
 | 
        for (int i = 0; i < vNetData.MemberCount; i++)  
 | 
        {  
 | 
            FairyMember member = new FairyMember();  
 | 
            memberDic[(int)vNetData.MemberList[i].PlayerID] = member;  
 | 
  
 | 
            member.PlayerID = (int)vNetData.MemberList[i].PlayerID;  
 | 
            member.Name = vNetData.MemberList[i].Name;  
 | 
            member.JoinTime = (int)vNetData.MemberList[i].JoinTime;  
 | 
            member.FmLV = vNetData.MemberList[i].FmLV;  
 | 
            member.LV = vNetData.MemberList[i].LV;  
 | 
            member.Job = vNetData.MemberList[i].Job;  
 | 
            member.RealmLV = vNetData.MemberList[i].RealmLV;  
 | 
            member.Face = (int)vNetData.MemberList[i].Face;  
 | 
            member.FacePic = (int)vNetData.MemberList[i].FacePic;  
 | 
            member.TitleID = (int)vNetData.MemberList[i].TitleID;  
 | 
            member.FightPower = vNetData.MemberList[i].FightPower + vNetData.MemberList[i].FightPowerEx * Constants.ExpPointValue;  
 | 
            member.ServerID = (int)vNetData.MemberList[i].ServerID;  
 | 
            member.ContribTotal = (int)vNetData.MemberList[i].ContribTotal;  
 | 
            member.ContribDay = (int)vNetData.MemberList[i].ContribDay;  
 | 
            member.DonateCntTotal = (int)vNetData.MemberList[i].DonateCntTotal;  
 | 
            member.DonateCntDay = vNetData.MemberList[i].DonateCntDay;  
 | 
            member.OffTime = (int)vNetData.MemberList[i].OffTime;  
 | 
  
 | 
            if (member.PlayerID == PlayerDatas.Instance.baseData.PlayerID)  
 | 
            {  
 | 
                //自己  
 | 
                mine = member;  
 | 
                OnRefreshFairyMine?.Invoke();  
 | 
            }  
 | 
  
 | 
            // 0-成员,1-精英,2-副盟主,3-盟主  
 | 
  
 | 
            // if (member.FmLV == 1)  
 | 
            // {  
 | 
            //     elitePlayerIDList.Add(member.PlayerID);  
 | 
            // }  
 | 
            if (member.FmLV == 2)  
 | 
            {  
 | 
                deputyLeaderPlayerIDList.Add(member.PlayerID);  
 | 
            }  
 | 
            if (member.FmLV == 3)  
 | 
            {  
 | 
                leaderID = (int)member.PlayerID;  
 | 
            }  
 | 
        }  
 | 
  
 | 
        memberIDList.AddRange(memberDic.Keys);  
 | 
        memberIDList.Sort(SortMember);  
 | 
  
 | 
        if (OnRefreshFairyInfo != null) OnRefreshFairyInfo();  
 | 
    }  
 | 
  
 | 
    public FairyMember GetMember(int playerid)  
 | 
    {  
 | 
        FairyMember member = null;  
 | 
        memberDic.TryGetValue(playerid, out member);  
 | 
        return member;  
 | 
    }  
 | 
  
 | 
  
 | 
    #region 仙盟权力开启条件  
 | 
    public bool IsCanFunc(LimitFunc funcType)  
 | 
    {  
 | 
        if (mine != null)  
 | 
        {  
 | 
            return mine.FmLV >= GuildManager.Instance.guildWorkToLevel[(int)funcType];  
 | 
        }  
 | 
        return false;  
 | 
    }  
 | 
    #endregion  
 | 
  
 | 
    public void ClearData()  
 | 
    {  
 | 
        fairy = null;  
 | 
        mine = null;  
 | 
        memberDic.Clear();  
 | 
        memberIDList.Clear();  
 | 
        leaderID = 0;  
 | 
    }  
 | 
  
 | 
    int SortMember(int id1, int id2)  
 | 
    {  
 | 
        var memberA = memberDic[id1];  
 | 
        var memberB = memberDic[id2];  
 | 
        if (memberA.FmLV != memberB.FmLV)  
 | 
        {  
 | 
            return memberB.FmLV.CompareTo(memberA.FmLV);  
 | 
        }  
 | 
  
 | 
        if (memberA.FightPower != memberB.FightPower)  
 | 
        {  
 | 
            return memberB.FightPower.CompareTo(memberA.FightPower);  
 | 
        }  
 | 
  
 | 
        if (memberA.JoinTime != memberB.JoinTime)  
 | 
        {  
 | 
            return memberA.JoinTime.CompareTo(memberB.JoinTime);  
 | 
        }  
 | 
        return memberA.PlayerID.CompareTo(memberB.PlayerID);  
 | 
    }  
 | 
  
 | 
}  
 | 
  
 | 
  
 | 
//公会数据  
 | 
public class FairyData  
 | 
{  
 | 
    public int Rank;        //名次,从1开始  
 | 
    public int FamilyID;  
 | 
    public string FamilyName;    //家族名称  
 | 
    public int FamilyLV;    //家族等级  
 | 
    public int FamilyLVExp;    //家族等级经验  
 | 
    public int JoinReview;    //成员加入是否需要审核,默认0自动加入  
 | 
    public int JoinLVMin;    //限制最低可加入的玩家等级  
 | 
    public int ServerID;    //区服ID,创建时以族长的区服ID赋值  
 | 
    public int EmblemID;    //徽章ID  
 | 
    public string EmblemWord;    //徽章文字  
 | 
    public long totalFightPower;  
 | 
    public string Broadcast;  
 | 
    public int LeaderID;    //族长玩家ID  
 | 
    public int MemberCount;  
 | 
  
 | 
    //查找增加的字段  
 | 
    public string LeaderName;  
 | 
  
 | 
}  
 | 
  
 | 
public class FairyMember  
 | 
{  
 | 
    public int PlayerID;  
 | 
    public string Name;        //size = NameLen  
 | 
    public int JoinTime;        //加入家族时时间戳  
 | 
    public int FmLV;        //家族职位: 0-成员;1-精英;2-副族长;3-族长  
 | 
    public int LV;        //等级  
 | 
    public int Job;        //职业  
 | 
    public int RealmLV;        //境界  
 | 
    public int Face;        //基本脸型  
 | 
    public int FacePic;        //头像框  
 | 
    public int TitleID;        //称号  
 | 
    public long FightPower;        //战力,求余亿部分  
 | 
    public int ServerID;        //所属区服ID  
 | 
    public int ContribTotal;        //总贡献度  
 | 
    public int ContribDay;        //日贡献度  
 | 
    public int DonateCntTotal;        //总捐献次数  
 | 
    public int DonateCntDay;        //日捐献次数  
 | 
    public int OffTime;        // 0-在线; >0-/离线时间戳  
 | 
}  
 | 
  
 | 
public class FairyApply  
 | 
{  
 | 
    public int PlayerID;  
 | 
    public string Name;        
 | 
    public int ReqTime;        //申请时间戳  
 | 
    public int LV;        //等级  
 | 
    public int Job;        //职业  
 | 
    public int RealmLV;        //境界  
 | 
    public int Face;        //基本脸型  
 | 
    public int FacePic;        //头像框  
 | 
    public int TitleID;        //称号  
 | 
    public long FightPower;       
 | 
    public int ServerID;        //所属区服ID  
 | 
    public int IsOnLine;        //是否在线  
 | 
}  
 | 
  
 | 
//权限ID: 1-收人,2-变更职位,3-发布公告,4-踢人  
 | 
public enum LimitFunc  
 | 
{  
 | 
    CanCall = 1,  
 | 
    CanJobTitle,  
 | 
    CanNotify,  
 | 
    CanKick,  
 | 
} 
 |