| Main/System/Guild/GuildApplyListCell.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Guild/GuildApplyListCell.cs.meta | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Guild/GuildApplyListWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Guild/GuildApplyListWin.cs.meta | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Guild/GuildBaseWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Guild/GuildManager.cs | ●●●●● 补丁 | 查看 | 原始文档 | 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通信也是有时间间隔