using System;  
 | 
using System.Collections;  
 | 
using System.Collections.Generic;  
 | 
using System.Text;  
 | 
using LitJson;  
 | 
using UnityEngine;  
 | 
  
 | 
  
 | 
public class GuildManager : GameSystemManager<GuildManager>  
 | 
{  
 | 
    // 申请的公会列表  
 | 
    private List<int> m_FairyRequesteds = new List<int>();  
 | 
    // 公会附加数据,按类型存储  
 | 
    // 公会ID, 类型ID, 数据  
 | 
    public Dictionary<int, Dictionary<int, HA513_tagMCFamilyActionInfo.tagMCFamilyAction[]>> familyActions = new Dictionary<int, Dictionary<int, HA513_tagMCFamilyActionInfo.tagMCFamilyAction[]>>();  
 | 
    public event Action<int, int> FamilyActionInfoEvent;  
 | 
  
 | 
    public override void Init()  
 | 
    {  
 | 
        ParseConfig();  
 | 
        // PlayerDatas.Instance.fairyData.OnRefreshFairyMine += OnRefreshFairyMine;  
 | 
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize;  
 | 
    }  
 | 
    public override void Release()  
 | 
    {  
 | 
        // PlayerDatas.Instance.fairyData.OnRefreshFairyMine -= OnRefreshFairyMine;  
 | 
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize;  
 | 
    }  
 | 
  
 | 
  
 | 
    public void OnBeforePlayerDataInitialize()  
 | 
    {  
 | 
        m_FairyRequesteds.Clear();  
 | 
        familyActions.Clear();  
 | 
    }  
 | 
  
 | 
  
 | 
  
 | 
    private void OnRefreshFairyMine()  
 | 
    {  
 | 
        if (!PlayerDatas.Instance.fairyData.HasFairy)  
 | 
        {  
 | 
            //退出公会  
 | 
            familyActions.Clear();  
 | 
        }  
 | 
    }  
 | 
  
 | 
  
 | 
    #region 发包  
 | 
    public void SendKickFairy(uint playerID)  
 | 
    {  
 | 
        var pak = new CA605_tagCMDeleteFamilyMember();  
 | 
        pak.MemberID = playerID;  
 | 
        GameNetSystem.Instance.SendInfo(pak);  
 | 
    }  
 | 
  
 | 
  
 | 
  
 | 
    //申请/撤销 加入公会  
 | 
    public void SendApplyFairy(uint id, int type)  
 | 
    {  
 | 
        if (FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Fairy, true))  
 | 
        {  
 | 
            return;  
 | 
        }  
 | 
        if (PlayerDatas.Instance.fairyData.HasFairy)  
 | 
        {  
 | 
            ServerTipDetails.DisplayNormalTip(Language.Get("HasFairyTip"));  
 | 
            return;  
 | 
        }  
 | 
        CA602_tagCMRequesJoinFamily rqPack = new CA602_tagCMRequesJoinFamily();  
 | 
        rqPack.Type = (byte)type;  
 | 
        rqPack.TagFamilyID = id;  
 | 
        GameNetSystem.Instance.SendInfo(rqPack);  
 | 
    }  
 | 
    #endregion  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
    #region 配置  
 | 
   
 | 
    public int createFairyCost  
 | 
    {  
 | 
        get;  
 | 
        private set;  
 | 
    }  
 | 
    public int createMoneyType;  
 | 
  
 | 
    public int requestPlayerCount;  //每个仙盟最大可接受申请加入玩家数  
 | 
    public int requestGuildCount;   //每个玩家最大可同时申请加入仙盟数  
 | 
  
 | 
    // 权限ID: 1-收人,2-变更职位,3-发布公告,4-踢人  
 | 
    // 职位: 0-成员,1-精英,2-副盟主,3-盟主  
 | 
    public Dictionary<int, int> guildWorkToLevel = new Dictionary<int, int>();  
 | 
  
 | 
    void ParseConfig()  
 | 
    {  
 | 
        var config = FuncConfigConfig.Get("CreateFamily");  
 | 
        createFairyCost = int.Parse(config.Numerical1);  
 | 
        createMoneyType = int.Parse(config.Numerical2);  
 | 
  
 | 
        // config = FuncConfigConfig.Get("FamilyMatchSet");  
 | 
        // fairyLeagueLimit = int.Parse(config.Numerical1);  
 | 
  
 | 
        config = FuncConfigConfig.Get("FamilyReqJoin");  
 | 
        requestPlayerCount = int.Parse(config.Numerical1);  
 | 
        requestGuildCount = int.Parse(config.Numerical2);  
 | 
  
 | 
        config = FuncConfigConfig.Get("FamilyPower");  
 | 
        guildWorkToLevel = ConfigParse.ParseIntDict(config.Numerical1);  
 | 
  
 | 
    }  
 | 
  
 | 
  
 | 
    #endregion  
 | 
  
 | 
  
 | 
  
 | 
    public void UpdateFairyRequested(HA501_tagMCNotifyRequestJoinFamilyInfo _package)  
 | 
    {  
 | 
        m_FairyRequesteds.Clear();  
 | 
        for (int i = 0; i < _package.RequestCount; i++)  
 | 
        {  
 | 
            m_FairyRequesteds.Add((int)_package.RequestJoinFamilyIDList[i]);  
 | 
        }  
 | 
    }  
 | 
  
 | 
  
 | 
    public bool FairyRequested(int _fairyId)  
 | 
    {  
 | 
        return m_FairyRequesteds.Contains(_fairyId);  
 | 
    }  
 | 
  
 | 
  
 | 
  
 | 
    public bool InSameFairy(int playerId)  
 | 
    {  
 | 
        if (!PlayerDatas.Instance.fairyData.HasFairy)  
 | 
        {  
 | 
            return false;  
 | 
        }  
 | 
        return PlayerDatas.Instance.fairyData.GetMember(playerId) != null;  
 | 
    }  
 | 
  
 | 
  
 | 
  
 | 
    #region 仙盟名限制  
 | 
    public bool CheckFairyNameLimit(string _name, out int errorCode)  
 | 
    {  
 | 
        errorCode = 0;  
 | 
        if (string.IsNullOrEmpty(_name))  
 | 
        {  
 | 
            errorCode = 0;  
 | 
            return false;  
 | 
        }  
 | 
        if (DirtyWordConfig.IsDirtWord(_name) || UIHelper.HasSpecialCharac(_name)  
 | 
            || DirtyNameConfig.IsDirtName(_name))  
 | 
        {  
 | 
            errorCode = 1;  
 | 
            return false;  
 | 
        }  
 | 
        return true;  
 | 
    }  
 | 
      
 | 
      
 | 
    public void ShowFairyNameErrorTip(int _errorCode)  
 | 
    {  
 | 
        switch (_errorCode)  
 | 
        {  
 | 
            case 0:  
 | 
                SysNotifyMgr.Instance.ShowTip("FamilyNameChangeNoNull");  
 | 
                break;  
 | 
            case 1:  
 | 
                SysNotifyMgr.Instance.ShowTip("FamilyNameChangeUnlegal");  
 | 
                break;  
 | 
        }  
 | 
    }  
 | 
  
 | 
    public void SendChangeFairyName(string _name, int _itemIndex)  
 | 
    {  
 | 
        LanguageVerify.Instance.VerifyFairy(_name, 2, PlayerDatas.Instance.fairyData.fairy.FamilyName, PlayerDatas.Instance.fairyData.mine.FmLV, (bool ok, string content) =>  
 | 
        {  
 | 
            CA611_tagCMRenameFamily _pak = new CA611_tagCMRenameFamily();  
 | 
            _pak.NewName = content;  
 | 
            _pak.ItemIndex = (byte)_itemIndex;  
 | 
            _pak.NewNameLen = (byte)Encoding.UTF8.GetBytes(content).Length;  
 | 
            GameNetSystem.Instance.SendInfo(_pak);  
 | 
        });  
 | 
    }  
 | 
  
 | 
  
 | 
    #endregion  
 | 
  
 | 
     
 | 
  
 | 
  
 | 
    #region 仙盟商店开启  
 | 
    public int fairyStoreLimit = 0;  
 | 
    public bool fairyStoreOpen  
 | 
    {  
 | 
        get  
 | 
        {  
 | 
            if (PlayerDatas.Instance.fairyData.HasFairy)  
 | 
            {  
 | 
                var fairy = PlayerDatas.Instance.fairyData.fairy;  
 | 
                if (fairy != null && fairy.FamilyLV >= fairyStoreLimit)  
 | 
                {  
 | 
                    return true;  
 | 
                }  
 | 
            }  
 | 
            return false;  
 | 
        }  
 | 
    }  
 | 
  
 | 
    public void ProcessErrorTip()  
 | 
    {  
 | 
        if (!PlayerDatas.Instance.fairyData.HasFairy)  
 | 
        {  
 | 
            SysNotifyMgr.Instance.ShowTip("DailyQuestwinUnionLimit");  
 | 
        }  
 | 
        else if (PlayerDatas.Instance.fairyData.fairy.FamilyLV < fairyStoreLimit)  
 | 
        {  
 | 
            SysNotifyMgr.Instance.ShowTip("FairyStoreOpenLimit", fairyStoreLimit);  
 | 
        }  
 | 
    }  
 | 
    #endregion  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
    public void UpdateFamilyAction(HA513_tagMCFamilyActionInfo _package)  
 | 
    {  
 | 
  
 | 
        if (!familyActions.ContainsKey((int)_package.FamilyID))  
 | 
        {  
 | 
            familyActions.Add((int)_package.FamilyID, new Dictionary<int, HA513_tagMCFamilyActionInfo.tagMCFamilyAction[]>());  
 | 
        }  
 | 
  
 | 
        familyActions[(int)_package.FamilyID][_package.ActionType] = _package.FamilyActionList;  
 | 
        FamilyActionInfoEvent?.Invoke((int)_package.FamilyID, _package.ActionType);  
 | 
    }  
 | 
  
 | 
    public bool TryGetFamilyActions(int actionType, out HA513_tagMCFamilyActionInfo.tagMCFamilyAction[] familyAction)  
 | 
    {  
 | 
        familyAction = null;  
 | 
        if (!PlayerDatas.Instance.fairyData.HasFairy)  
 | 
        {  
 | 
            return false;  
 | 
        }  
 | 
        if (!familyActions.ContainsKey((int)PlayerDatas.Instance.fairyData.fairy.FamilyID))  
 | 
        {  
 | 
            return false;  
 | 
        }  
 | 
  
 | 
        if (!familyActions[(int)PlayerDatas.Instance.fairyData.fairy.FamilyID].TryGetValue(actionType, out familyAction))  
 | 
            return false;  
 | 
        return true;  
 | 
    }  
 | 
      
 | 
  
 | 
  
 | 
    #region 仙盟列表  
 | 
  
 | 
    public event Action OnRefreshFairyList;  
 | 
  
 | 
    // 查找的公会ID:公会数据  
 | 
    public Dictionary<int, FairyData> guildsDict = new Dictionary<int, FairyData>();  
 | 
    // 按查询页存储  
 | 
    public List<int> pageIndexList = new List<int>();  //正常是按页查询,顺序添加即可  
 | 
    public int curPageIndex;  
 | 
    public int totalPageCount;  
 | 
  
 | 
    //查找公会列表  
 | 
    public void OnRefreshGuildViewList(HA523_tagMCFamilyViewList vNetData)  
 | 
    {  
 | 
        curPageIndex = vNetData.PageIndex;  
 | 
        totalPageCount = vNetData.TotalPage;  
 | 
  
 | 
        foreach (var guildInfo in vNetData.FamilyList)  
 | 
        {  
 | 
            FairyData data = new FairyData();  
 | 
            guildsDict[(int)guildInfo.FamilyID] = data;  
 | 
            SetFairyViewData(data, guildInfo);  
 | 
            pageIndexList.Add((int)guildInfo.FamilyID);  
 | 
        }  
 | 
  
 | 
  
 | 
        if (OnRefreshFairyList != null)  
 | 
        {  
 | 
            OnRefreshFairyList();  
 | 
        }  
 | 
    }  
 | 
  
 | 
  
 | 
    //查找公会  
 | 
    public void SendFindGuild(string msg, int pageIndex = 0, int pageSize = 20)  
 | 
    {  
 | 
        if (pageIndex == 0)  
 | 
        {  
 | 
            //默认查询第一页即代表重新开始查询,清空之前的数据  
 | 
            guildsDict.Clear();  
 | 
            pageIndexList.Clear();  
 | 
        }  
 | 
        var pack = new CA620_tagCMViewFamilyPage();  
 | 
  
 | 
        pack.Msg = msg;  
 | 
        pack.MsgLen = (byte)msg.Length;  
 | 
        pack.PageIndex = (byte)pageIndex;  
 | 
        pack.ShowCount = (byte)pageSize;  
 | 
  
 | 
        GameNetSystem.Instance.SendInfo(pack);  
 | 
    }  
 | 
  
 | 
  
 | 
    public static void SetFairyViewData(FairyData data, HA523_tagMCFamilyViewList.tagMCFamilyView view)  
 | 
    {  
 | 
        data.Rank = view.Rank;  
 | 
        data.FamilyID = view.FamilyID;  
 | 
        data.FamilyName = view.FamilyName;  
 | 
        data.LeaderID = view.LeaderID;  
 | 
        data.LeaderName = view.LeaderName;  
 | 
        data.FamilyLV = view.FamilyLV;  
 | 
        data.JoinReview = view.JoinReview;  
 | 
        data.JoinLVMin = view.JoinLVMin;  
 | 
        data.ServerID = view.ServerID;  
 | 
        data.EmblemID = view.EmblemID;  
 | 
        data.EmblemWord = view.EmblemWord;  
 | 
        data.totalFightPower = view.FightPowerEx * Constants.ExpPointValue + view.FightPower;  
 | 
        data.MemberCount = view.MemberCount;  
 | 
  
 | 
    }  
 | 
  
 | 
    #endregion  
 | 
  
 | 
    #region 申请列表  
 | 
    public event Action OnRefreshApplyList;  
 | 
    private List<FairyApply> applyList = new List<FairyApply>();  
 | 
    private Redpoint memberRedpoint = new Redpoint(107, 10702);  
 | 
    private Redpoint applyRedpoint = new Redpoint(10702, 1070201);  
 | 
  
 | 
    //申请加入的玩家信息  
 | 
    public void OnRefreshRequestJoinPlayerInfo(HA522_tagMCFamilyReqJoinInfo vNetData)  
 | 
    {  
 | 
        applyList.Clear();  
 | 
        for (int i = 0; i < vNetData.ReqCnt; i++)  
 | 
        {  
 | 
            FairyApply apply = new FairyApply();  
 | 
            apply.Name = vNetData.ReqJoinList[i].Name;  
 | 
            apply.PlayerID = vNetData.ReqJoinList[i].PlayerID;  
 | 
            apply.ReqTime = vNetData.ReqJoinList[i].ReqTime;  
 | 
            apply.LV = vNetData.ReqJoinList[i].LV;  
 | 
            apply.Job = vNetData.ReqJoinList[i].Job;  
 | 
            apply.RealmLV = vNetData.ReqJoinList[i].RealmLV;  
 | 
            apply.Face = vNetData.ReqJoinList[i].Face;  
 | 
            apply.FacePic = vNetData.ReqJoinList[i].FacePic;  
 | 
            apply.TitleID = vNetData.ReqJoinList[i].TitleID;  
 | 
            apply.FightPower = vNetData.ReqJoinList[i].FightPower + vNetData.ReqJoinList[i].FightPowerEx * Constants.ExpPointValue;  
 | 
            apply.ServerID = vNetData.ReqJoinList[i].ServerID;  
 | 
            apply.IsOnLine = vNetData.ReqJoinList[i].IsOnLine;  
 | 
            applyList.Add(apply);  
 | 
        }  
 | 
        if (OnRefreshApplyList != null)  
 | 
        {  
 | 
            OnRefreshApplyList();  
 | 
        }  
 | 
        UpdateRequestRedpoint();  
 | 
    }  
 | 
  
 | 
    void UpdateRequestRedpoint()  
 | 
    {  
 | 
        if (PlayerDatas.Instance.fairyData.HasFairy && PlayerDatas.Instance.fairyData.IsCanFunc(LimitFunc.CanCall))  
 | 
        {  
 | 
            applyRedpoint.state = applyList.Count > 0 ? RedPointState.Simple : RedPointState.None;  
 | 
        }  
 | 
        else  
 | 
        {  
 | 
            applyRedpoint.state = RedPointState.None;  
 | 
        }  
 | 
    }  
 | 
  
 | 
    public List<FairyApply> GetApplyList()  
 | 
    {  
 | 
        return applyList;  
 | 
    }  
 | 
    #endregion  
 | 
  
 | 
  
 | 
} 
 |