hch
6 天以前 911a0b72e3415c9d3aba121bc532160da77c1afa
Main/System/Guild/GuildManager.cs
@@ -15,20 +15,36 @@
    public Dictionary<int, Dictionary<int, HA513_tagMCFamilyActionInfo.tagMCFamilyAction[]>> familyActions = new Dictionary<int, Dictionary<int, HA513_tagMCFamilyActionInfo.tagMCFamilyAction[]>>();
    public event Action<int, int> FamilyActionInfoEvent;    //公会自定义记录, 其他功能从这获取
    //要操作哪个成员的索引
    int m_MemberOPIndex = -1;
    public event Action MemberOPIndexEvent;
    public int memberOPIndex
    {
        get { return m_MemberOPIndex; }
        set
        {
            m_MemberOPIndex = value;
            MemberOPIndexEvent?.Invoke();
        }
    }
    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()
    {
        ClearGuildData();
    }
    void ClearGuildData()
    {
        m_FairyRequesteds.Clear();
        familyActions.Clear();
@@ -36,16 +52,14 @@
        applyList.Clear();
        PlayerDatas.Instance.fairyData.ClearData();
    }
    private void OnRefreshFairyMine()
    public void ClearGuildWhenQuit()
    {
        if (!PlayerDatas.Instance.fairyData.HasFairy)
        {
            //退出公会
            familyActions.Clear();
        }
        //退出公会
        ClearGuildData();
        //需要转到HomeWin界面 且关闭公会相关界面(父子继承关闭)
        UIManager.Instance.GetUI<MainWin>()?.ClickFunc(0);
    }
@@ -80,6 +94,9 @@
    void ParseConfig()
    {
        DirtyWordConfig.DirtyWordInit();
        DirtyNameConfig.DirtyNameInit();
        var config = FuncConfigConfig.Get("CreateFamily");
        createFairyCost = int.Parse(config.Numerical1);
        createMoneyType = int.Parse(config.Numerical2);
@@ -104,8 +121,8 @@
        config = FuncConfigConfig.Get("FamilyRename");
        renameFairyNameCD = int.Parse(config.Numerical2);
        var arr = ConfigParse.GetMultipleStr<int>(config.Numerical1);
        renameFairyNameCost = arr[0];
        renameFairyNameMoneyType = arr[1];
        renameFairyNameMoneyType = arr[0];
        renameFairyNameCost = arr[1];
    }
@@ -212,19 +229,21 @@
        if (quitType == 0)
        {
            //被踢
            quitCount = PlayerDatas.Instance.baseData.leaveGuildInfo / 10 % 10;
            quitCount = PlayerDatas.Instance.baseData.leaveGuildInfo / 10 % 10 - 1;
            if (quitCount < 0) return 0;
            if (beQuitGuildPunishTime.Length != 0)
                punishTime = beQuitGuildPunishTime[Math.Min(quitCount, beQuitGuildPunishTime.Length - 1)];
        }
        else if (quitType == 1)
        {
            //主动退出
            quitCount = PlayerDatas.Instance.baseData.leaveGuildInfo / 100;
            quitCount = PlayerDatas.Instance.baseData.leaveGuildInfo / 100 - 1;
            if (quitCount < 0) return 0;
            if (quitGuildPunishTime.Length != 0)
                punishTime = quitGuildPunishTime[Math.Min(quitCount, quitGuildPunishTime.Length - 1)];
        }
        return TimeUtility.AllSeconds - PlayerDatas.Instance.baseData.leaveFamilyTime - punishTime * 60;
        return punishTime * 60 - (TimeUtility.AllSeconds - PlayerDatas.Instance.baseData.leaveFamilyTime);
    }
@@ -249,27 +268,8 @@
            return;
        }
        int error;
        //获取name的字节长度,name可能是中文 或者其他占用3个字符的符号
        if (!UIHelper.SatisfyNameLength(name, out error))
        if (!CheckName(name))
        {
            // TODO 暂时按中文长度提示, 不同语言可根据情况修改
            if (error == 1)
            {
                SysNotifyMgr.Instance.ShowTip("NameError2", 7);
                return;
            }
            else if (error == 2)
            {
                SysNotifyMgr.Instance.ShowTip("NameError1", 2);
                return;
            }
        }
        if (!CheckFairyNameLimit(name, out error))
        {
            ShowFairyNameErrorTip(error);
            return;
        }
@@ -279,6 +279,35 @@
        pack.EmblemWord = emblemWord;
        GameNetSystem.Instance.SendInfo(pack);
    }
    public bool CheckName(string name)
    {
        int error;
        //获取name的字节长度,name可能是中文 或者其他占用3个字符的符号
        if (!UIHelper.SatisfyNameLength(name, out error))
        {
            // TODO 暂时按中文长度提示, 不同语言可根据情况修改
            if (error == 1)
            {
                SysNotifyMgr.Instance.ShowTip("NameError2", 7);
                return false;
            }
            else if (error == 2)
            {
                SysNotifyMgr.Instance.ShowTip("NameError1", 2);
                return false;
            }
        }
        if (!CheckFairyNameLimit(name, out error))
        {
            ShowFairyNameErrorTip(error);
            return false;
        }
        return true;
    }
    #endregion
@@ -320,7 +349,7 @@
    // 公会自定义记录
    #region  公会自定义记录
    public void UpdateFamilyAction(HA513_tagMCFamilyActionInfo _package)
    {
@@ -349,6 +378,16 @@
            return false;
        return true;
    }
    public void QueryFamilyAction(int familyID, int actionType)
    {
        var pack = new CA617_tagCMQueryFamilyAction();
        pack.FamilyID = (ushort)familyID;
        pack.ActionType = (byte)actionType;
        GameNetSystem.Instance.SendInfo(pack);
    }
    #endregion
@@ -498,6 +537,12 @@
        if (type == 0)
        {
            if (m_FairyRequesteds.Count >= requestGuildCount)
            {
                SysNotifyMgr.Instance.ShowTip("GuildSys9");
                return;
            }
            var cdSeconds = GetJoinCD();
            if (cdSeconds > 0)
            {
@@ -543,14 +588,22 @@
    #endregion
    float lastChangeMarkTime = 0;   //打开界面情况下避免短时间多次立即请求,C/S通信也是有时间间隔
    public bool guildChanged = false;
    //Type:0-无;1-成员加入;2-成员退出;3-收人设置修改;4-公告修改;5-徽章修改;6-盟主变更;7-成员职位变更;8-成员上线;9-成员离线;
    //公会数据变化,请求新的公会信息,如在打开公会列表时请求,其他功能根据自身情况请求
    public void UpdateGuildDataChangeMark(HA521_tagMCFamilyChange netPack)
    {
        if (netPack.Type > 0)
        guildChanged = true;
        if (Time.time - lastChangeMarkTime < 0.2f)
        {
            guildChanged = true;
            //小优化 如果有问题也可以去除
            return;
        }
        lastChangeMarkTime = Time.time;
        if (UIManager.Instance.IsOpened<GuildHallWin>())
        {
            RequestGuildData();
        }
    }
@@ -572,6 +625,54 @@
        GameNetSystem.Instance.SendInfo(pak);
    }
    //获取需要公会职位等级
    public int GetNeedGuildJobLV(int guildFuncID)
    {
        if (guildWorkToLevel.ContainsKey(guildFuncID))
        {
            return guildWorkToLevel[guildFuncID];
        }
        return 0;
    }
    public void SendChangeMemberLV(int playerID, int lv)
    {
        var pack = new CA625_tagCMChangeFamilyMemLV();
        pack.PlayerID = (uint)playerID;
        pack.FmLV = (byte)lv;
        GameNetSystem.Instance.SendInfo(pack);
    }
    public void KickMember(int playerID)
    {
        var pack = new CA605_tagCMDeleteFamilyMember();
        pack.MemberID = (uint)playerID;
        GameNetSystem.Instance.SendInfo(pack);
    }
    public void QuitGuild()
    {
        ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"),
        Language.Get("Guild_46"), (bool isOK) =>
            {
                if (isOK)
                {
                    if (PlayerDatas.Instance.fairyData.fairy.MemberCount > 1 &&
                    PlayerDatas.Instance.fairyData.mine.FmLV == 3)
                    {
                        SysNotifyMgr.Instance.ShowTip("GuildSys15");
                        return;
                    }
                    var pack = new CA603_tagCMLeaveFamily();
                    GameNetSystem.Instance.SendInfo(pack);
                }
            });
    }
    #region 加密数字
@@ -611,7 +712,7 @@
            SysNotifyMgr.Instance.ShowTip("GuildSys6");
            return "";
        }
        encryptedStr = encryptedStr.Substring(1);
        if (reverseMap.IsNullOrEmpty())
@@ -629,8 +730,8 @@
        }
        return originalStr.ToString().TrimStart('0'); // 去除前导零
    }
    int[] GenerateReverseMap(int[] map)
    {
        for (int i = 0; i < map.Length; i++)
@@ -643,4 +744,14 @@
    #endregion
}
// 权限ID: 1-收人,2-变更职位,3-发布公告,4-踢人
public enum GuildFuncType
{
    Accept = 1,
    ChangeJob = 2,
    PublishNotice = 3,
    Kick = 4,
}