lcy
2026-02-02 d3609e1aa5f39fa529e0bcac0d9bb54ce81ed924
441 公会相关界面  公会申请界面
2个文件已修改
4个文件已添加
330 ■■■■■ 已修改文件
Main/System/Guild/GuildApplyListCell.cs 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildApplyListCell.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildApplyListWin.cs 180 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildApplyListWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildBaseWin.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildManager.cs 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildApplyListCell.cs
New file
@@ -0,0 +1,38 @@
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class GuildApplyListCell : MonoBehaviour
{
    [SerializeField] AvatarCell avatarCell;
    [SerializeField] OfficialTitleCell officialTitleCell;
    [SerializeField] TextEx nameText;
    [SerializeField] TextEx lvText;
    [SerializeField] TextEx fightPointText;
    [SerializeField] ButtonEx yesButton;
    [SerializeField] ButtonEx noButton;
    GuildManager manager { get { return GuildManager.Instance; } }
    public void Display(int index, List<FairyApply> list)
    {
        if (list.IsNullOrEmpty() || index >= list.Count || index < 0)
            return;
        FairyApply data = list[index];
        nameText.text = data.Name;
        lvText.text = data.LV.ToString();
        fightPointText.text = UIHelper.ReplaceLargeArtNum(data.FightPower);
        avatarCell.InitUI(AvatarHelper.GetAvatarModel(data.PlayerID, data.Face, data.FacePic));
        officialTitleCell.InitUI(data.RealmLV, data.TitleID);
        yesButton.SetListener(() =>
        {
            manager.SendJoinFamilyReply(data.PlayerID, true);
        });
        noButton.SetListener(() =>
        {
            manager.SendJoinFamilyReply(data.PlayerID, false);
        });
    }
}
Main/System/Guild/GuildApplyListCell.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 17800eebe4bc3d046a2117b210d30fe3
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/Guild/GuildApplyListWin.cs
New file
@@ -0,0 +1,180 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Cysharp.Threading.Tasks;
using UnityEngine;
using UnityEngine.UI;
/// <summary>
/// 公会申请列表界面
/// </summary>
public class GuildApplyListWin : UIBase
{
    [SerializeField] Transform noApply;
    [SerializeField] Transform bgImage;
    [SerializeField] ScrollerController scroller;
    [SerializeField] Toggle lowOfficialToggle;
    [SerializeField] Toggle joinFreeToggle;
    [SerializeField] Toggle sortToggle;
    [SerializeField] Dropdown dropdown;
    [SerializeField] ButtonEx rejectAllButton;
    [SerializeField] TextEx countText;
    GuildManager manager { get { return GuildManager.Instance; } }
    protected override void InitComponent()
    {
        lowOfficialToggle.AddListener((bool value) =>
        {
            if (!PlayerDatas.Instance.fairyData.HasFairy)
                return;
            int lv = GetLvByIndex(dropdown.value);
            manager.SendChangeFamilyJoin(joinFreeToggle.isOn ? 0 : 1, value ? lv : 0);
        });
        joinFreeToggle.AddListener((bool value) =>
        {
            if (!PlayerDatas.Instance.fairyData.HasFairy)
                return;
            int lv = GetLvByIndex(dropdown.value);
            manager.SendChangeFamilyJoin(value ? 0 : 1, PlayerDatas.Instance.fairyData.fairy.JoinLVMin);
        });
        sortToggle.AddListener((bool value) =>
        {
            manager.isPowerSort = value;
            Display();
        });
        dropdown.SetListener(OnDropdownValueChanged);
        rejectAllButton.SetListener(() =>
        {
            manager.SendJoinFamilyReply(0, false);
        });
    }
    protected override void OnPreOpen()
    {
        scroller.lockType = EnhanceLockType.KeepVertical;
        manager.OnRefreshApplyList += OnRefreshApplyList;
        PlayerDatas.Instance.fairyData.OnRefreshFairyInfo += OnRefreshFairyInfo;
        GuildManager.Instance.EnterOrQuitGuildEvent += OnEnterOrQuitGuildEvent;
        scroller.OnRefreshCell += OnRefreshCell;
        Display();
    }
    protected override void OnPreClose()
    {
        manager.OnRefreshApplyList -= OnRefreshApplyList;
        PlayerDatas.Instance.fairyData.OnRefreshFairyInfo -= OnRefreshFairyInfo;
        GuildManager.Instance.EnterOrQuitGuildEvent -= OnEnterOrQuitGuildEvent;
        scroller.OnRefreshCell -= OnRefreshCell;
    }
    private void OnEnterOrQuitGuildEvent(bool isEnter)
    {
        DelayCloseWindow().Forget();
    }
    private void OnRefreshFairyInfo()
    {
        if (!PlayerDatas.Instance.fairyData.HasFairy || !PlayerDatas.Instance.fairyData.IsCanFunc(LimitFunc.CanCall))
        {
            DelayCloseWindow().Forget();
            return;
        }
        Display();
    }
    private void OnRefreshApplyList()
    {
        Display();
    }
    List<FairyApply> list;
    private void OnRefreshCell(ScrollerDataType type, CellView cell)
    {
        var _cell = cell.GetComponent<GuildApplyListCell>();
        _cell?.Display(cell.index, list);
    }
    List<int> optionKeys;
    List<string> optionValues;
    private int GetLvByIndex(int index)
    {
        if (!PlayerDatas.Instance.fairyData.HasFairy)
            return 0;
        if (index < 0 || index >= optionKeys.Count)
            return 0;
        int lv = optionKeys[index];
        return lv;
    }
    private void OnDropdownValueChanged(int index)
    {
        int lv = GetLvByIndex(index);
        if (PlayerDatas.Instance.fairyData.fairy.JoinLVMin == lv)
            return;
        if (lowOfficialToggle.isOn)
        {
            manager.SendChangeFamilyJoin(PlayerDatas.Instance.fairyData.fairy.JoinReview, lv);
        }
    }
    private void CreateScroller()
    {
        scroller.Refresh();
        if (!manager.isPowerSort)
        {
            list = new List<FairyApply>(manager.GetApplyList());
        }
        else
        {
            list = new List<FairyApply>(manager.GetApplyList().OrderByDescending(x => x.FightPower));
        }
        bool isNullOrEmpty = list.IsNullOrEmpty();
        bgImage.SetActive(!isNullOrEmpty);
        noApply.SetActive(isNullOrEmpty);
        if (!isNullOrEmpty)
        {
            for (int i = 0; i < list.Count; i++)
            {
                scroller.AddCell(ScrollerDataType.Header, i);
            }
        }
        scroller.Restart();
    }
    private void CreateDropdown()
    {
        if (!manager.TryGetApplyOptions(out optionKeys, out optionValues))
            return;
        dropdown.ClearOptions();
        dropdown.AddOptions(optionValues);
        int joinLVMin = PlayerDatas.Instance.fairyData.fairy.JoinLVMin;
        int index = optionKeys.IndexOf(joinLVMin);
        dropdown.value = index < 0 ? 0 : index;
    }
    private void CreateToggle()
    {
        lowOfficialToggle.SetIsOnWithoutNotify(PlayerDatas.Instance.fairyData.fairy.JoinLVMin > 0);
        joinFreeToggle.SetIsOnWithoutNotify(PlayerDatas.Instance.fairyData.fairy.JoinReview == 0);
        sortToggle.SetIsOnWithoutNotify(manager.isPowerSort);
    }
    private void Display()
    {
        if (!PlayerDatas.Instance.fairyData.HasFairy)
            return;
        CreateToggle();
        CreateDropdown();
        CreateScroller();
        List<FairyApply> list = manager.GetApplyList();
        countText.text = Language.Get("GuildApplyList05", list != null ? list.Count : 0, manager.requestPlayerCount);
    }
}
Main/System/Guild/GuildApplyListWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 0203bee4a8b78a44582611a1dff9ee8b
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/Guild/GuildBaseWin.cs
@@ -48,7 +48,7 @@
        requestBtn.AddListener(() =>
        {
            // UIManager.Instance.OpenWindow<GuildRequestWin>();
            UIManager.Instance.OpenWindow<GuildApplyListWin>();
        });
        guildHawkerBtn.AddListener(OpenHawker);
@@ -71,7 +71,7 @@
    {
        if (PlayerDatas.Instance.fairyData.fairy == null)
            return;
        GuildManager.Instance.RequestGuildData();
        GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
        GlobalTimeEvent.Instance.fiveSecondEvent += OnFiveSecondEvent;
@@ -114,6 +114,7 @@
    void ShowGuildInfo()
    {
        requestBtn.SetActive(PlayerDatas.Instance.fairyData.HasFairy && PlayerDatas.Instance.fairyData.IsCanFunc(LimitFunc.CanCall));
        emblemCell.Display(PlayerDatas.Instance.fairyData.fairy.EmblemID, PlayerDatas.Instance.fairyData.fairy.EmblemWord, 0.8f);
        guildNameText.text = PlayerDatas.Instance.fairyData.fairy.FamilyName;
        var config = FamilyConfig.Get(PlayerDatas.Instance.fairyData.fairy.FamilyLV);
Main/System/Guild/GuildManager.cs
@@ -50,6 +50,7 @@
        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnPlayerLoginOk;
        PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefreshEvent;
        TimeMgr.Instance.OnHourEvent += UpdateZBGRedpoint;
        PlayerDatas.Instance.fairyData.OnRefreshFairyInfo += OnRefreshFairyInfo;
    }
    public override void Release()
    {
@@ -58,8 +59,13 @@
        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent -= OnPlayerLoginOk;
        PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefreshEvent;
        TimeMgr.Instance.OnHourEvent -= UpdateZBGRedpoint;
        PlayerDatas.Instance.fairyData.OnRefreshFairyInfo -= OnRefreshFairyInfo;
    }
    private void OnRefreshFairyInfo()
    {
        UpdateRequestRedpoint();
    }
    void OnBeforePlayerDataInitialize()
    {
@@ -541,6 +547,19 @@
    int queryPointNum;  //查询点
    public int rankShowMaxCnt;
    public bool isPowerSort
    {
        get
        {
            return LocalSave.GetBool($"GuildApplyList_IsPowerSort_{PlayerDatas.Instance.PlayerId}");
        }
        set
        {
            LocalSave.SetBool($"GuildApplyList_IsPowerSort_{PlayerDatas.Instance.PlayerId}", value);
        }
    }
    public FairyData GetFairyDataByRank(int rank)
    {
        if (rank < 1)
@@ -667,7 +686,6 @@
        data.EmblemWord = view.EmblemWord;
        data.totalFightPower = view.FightPowerEx * Constants.ExpPointValue + view.FightPower;
        data.MemberCount = view.MemberCount;
    }
    #endregion
@@ -676,7 +694,7 @@
    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);
    private Redpoint applyRedpoint = new Redpoint(MainRedDot.MainGuildRedpoint, 1070201);
    //申请加入的玩家信息
    public void OnRefreshRequestJoinPlayerInfo(HA522_tagMCFamilyReqJoinInfo vNetData)
@@ -705,6 +723,9 @@
        }
        UpdateRequestRedpoint();
    }
    void UpdateRequestRedpoint()
    {
@@ -760,6 +781,12 @@
                    SysNotifyMgr.Instance.ShowTip("jiazu_lhs_202580");
                    return;
                }
                if (guildsDict[id].JoinLVMin > PlayerDatas.Instance.baseData.realmLevel && RealmConfig.HasKey(guildsDict[id].JoinLVMin))
                {
                    SysNotifyMgr.Instance.ShowTip("GuildApply01", RealmConfig.Get(guildsDict[id].JoinLVMin).Name);
                    return;
                }
            }
        }
@@ -787,8 +814,62 @@
        return 0;
    }
    public void SendJoinFamilyReply(int tagPlayerID, bool isOK)
    {
        CA621_tagCMJoinFamilyReply pack = new CA621_tagCMJoinFamilyReply();
        pack.TagPlayerID = (uint)tagPlayerID;
        pack.IsOK = (byte)(isOK ? 1 : 0);
        GameNetSystem.Instance.SendInfo(pack);
    }
    public void SendChangeFamilyJoin(int joinReview, int joinLVMin)
    {
        CA622_tagCMChangeFamilyJoin pack = new CA622_tagCMChangeFamilyJoin();
        pack.JoinReview = (byte)joinReview;
        pack.JoinLVMin = (ushort)joinLVMin;
        GameNetSystem.Instance.SendInfo(pack);
    }
    public void SendRequestJoinFamilyByPlayer(int tagPlayerID)
    {
        CA601_tagCMRequestJoinFamilyByPlayer pack = new CA601_tagCMRequestJoinFamilyByPlayer();
        pack.TagPlayerID = (uint)tagPlayerID;
        GameNetSystem.Instance.SendInfo(pack);
    }
    List<string> optionStrings = null;
    List<int> options = null;
    public bool TryGetApplyOptions(out List<int> optionKeys, out List<string> optionValues)
    {
        optionKeys = null;
        optionValues = null;
        if (options == null)
        {
            options = new List<int>();
            options = new List<int>(RealmConfig.GetKeys());
            options.Sort();
            options.Remove(0);
        }
        if (optionStrings == null)
        {
            optionStrings = new List<string>();
            foreach (int lv in options)
            {
                if (!RealmConfig.HasKey(lv))
                    continue;
                RealmConfig realmConfig = RealmConfig.Get(lv);
                optionStrings.Add(UIHelper.AppendColor(OfficialRankManager.Instance.GetOfficialRankColor(realmConfig.Quality), realmConfig.Name));
            }
        }
        if (options.IsNullOrEmpty() || optionStrings.IsNullOrEmpty() || options.Count != optionStrings.Count)
            return false;
        optionKeys = options;
        optionValues = optionStrings;
        return true;
    }
    #endregion
    float lastChangeMarkTime = 0;   //打开界面情况下避免短时间多次立即请求,C/S通信也是有时间间隔