Main/Core/GameEngine/Player/PlayerDatas.cs
@@ -105,11 +105,15 @@ break; case PlayerDataType.Family: baseData.FamilyId = value; if (LocalSave.GetInt("FimilyReport" + PlayerDatas.Instance.baseData.PlayerID) == 0) if (value == 0) { SDKUtils.Instance.TraceEvent("joinalliance", "", false); LocalSave.SetInt("FimilyReport" + PlayerDatas.Instance.baseData.PlayerID, 1); GuildManager.Instance.ClearGuildWhenQuit(); } // if (LocalSave.GetInt("FimilyReport" + PlayerDatas.Instance.baseData.PlayerID) == 0) // { // SDKUtils.Instance.TraceEvent("joinalliance", "", false); // LocalSave.SetInt("FimilyReport" + PlayerDatas.Instance.baseData.PlayerID, 1); // } break; case PlayerDataType.Gold: baseData.diamond = value; Main/Core/NetworkPackage/DTCFile/ServerPack/HA5_Family/DTCA521_tagMCFamilyChange.cs
@@ -1,11 +1,12 @@ using UnityEngine; using System.Collections; using UnityEngine; using System.Collections; // A5 21 家族变更 #tagMCFamilyChange public class DTCA521_tagMCFamilyChange : DtcBasic { public override void Done(GameNetPackBasic vNetPack) { base.Done(vNetPack); HA521_tagMCFamilyChange vNetData = vNetPack as HA521_tagMCFamilyChange; GuildManager.Instance.UpdateGuildDataChangeMark(vNetData); } } Main/System/GMCommand/GMInputWin.cs
@@ -121,11 +121,12 @@ if (_inputCmd.text == null || _inputCmd.text == "" || _inputCmd.text == string.Empty) return; // if (_inputCmd.text == "HappyXB") // { // WindowCenter.Instance.Open<HappyXBWin>(); // return; // } if (_inputCmd.text.StartsWith("GuildID")) { var id = GuildManager.Instance.DecryptGuildID(_inputCmd.text.Substring(8)); ServerTipDetails.ReceivePackage("公会ID:" + id); return; } // else if (_inputCmd.text == "TreasureFindHost") // { // WindowCenter.Instance.Open<TreasureFindHostWin>(); Main/System/Guild/GuildBaseWin.cs
@@ -22,7 +22,7 @@ { guildBtn.AddListener(() => { // UIManager.Instance.OpenWindow<GuildWin>(); UIManager.Instance.OpenWindow<GuildHallWin>(); }); requestBtn.AddListener(() => Main/System/Guild/GuildChangeNameWin.cs
New file @@ -0,0 +1,91 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; /// <summary> /// 公会改名界面 /// </summary> public class GuildChangeNameWin : UIBase { [SerializeField] InputField guildNameText; [SerializeField] Text cdTimeText; [SerializeField] Image moneyIcon; [SerializeField] Text moneyText; [SerializeField] Button changeNameBtn; protected override void InitComponent() { changeNameBtn.AddListener(ChangeName); } protected override void OnPreOpen() { GlobalTimeEvent.Instance.secondEvent += ShowTime; Display(); } protected override void OnPreClose() { GlobalTimeEvent.Instance.secondEvent -= ShowTime; } void Display() { var guildInfo = PlayerDatas.Instance.fairyData.fairy; if (guildInfo == null) return; guildNameText.text = guildInfo.FamilyName; moneyIcon.SetIconWithMoneyType(GuildManager.Instance.renameFairyNameMoneyType); moneyText.text = UIHelper.ShowUseMoney(GuildManager.Instance.renameFairyNameMoneyType, GuildManager.Instance.renameFairyNameCost); ShowTime(); } void ShowTime() { if (GuildManager.Instance.TryGetFamilyActions(0, out var familyActions)) { var lastTime = familyActions.IsNullOrEmpty() ? 0 : familyActions[0].Value1; var cdTime = GuildManager.Instance.renameFairyNameCD * 3600 - (TimeUtility.AllSeconds - (int)lastTime); if (cdTime <= 0) { cdTimeText.text = Language.Get("Guild_51", GuildManager.Instance.renameFairyNameCD); changeNameBtn.SetInteractable(true); GlobalTimeEvent.Instance.secondEvent -= ShowTime; } else { cdTimeText.text = Language.Get("Guild_49") + TimeUtility.SecondsToHMSEx(cdTime); changeNameBtn.SetInteractable(false); } } else { cdTimeText.text = Language.Get("Guild_51", GuildManager.Instance.renameFairyNameCD); changeNameBtn.SetInteractable(true); GlobalTimeEvent.Instance.secondEvent -= ShowTime; } } void ChangeName() { if (!UIHelper.CheckMoneyCount(GuildManager.Instance.renameFairyNameMoneyType, GuildManager.Instance.renameFairyNameCost, 2)) { return; } if (GuildManager.Instance.CheckName(guildNameText.text)) { UIManager.Instance.CloseWindow<GuildOPWin>(); var pack = new CA611_tagCMRenameFamily(); pack.NewName = guildNameText.text; pack.NewNameLen = (byte)pack.NewName.Length; // GameNetSystem.Instance.SendInfo(pack); } } } Main/System/Guild/GuildChangeNameWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 12ac059709b90bd45a721f0c723b9f5f MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/Guild/GuildEmblemCell.cs
@@ -8,7 +8,7 @@ [RequireComponent(typeof(UIEffectPlayer))] public class GuildEmblemCell : MonoBehaviour { [SerializeField] ImageEx emblemIcon; [SerializeField] Image emblemIcon; [SerializeField] UIFrame frame; [SerializeField] UIEffectPlayer uiEffect; [Header("字 F9E29F 包边 683C00 字号36 Y:-9")] @@ -21,6 +21,11 @@ { return; } if (emblemIcon == null) { Debug.LogError("公会徽章未设置"); return; } // 徽章动态效果按帧处理,如果后续要改成spine特效,则再商议修改 // 目前特效为附加表现 Main/System/Guild/GuildHallWin.cs
New file @@ -0,0 +1,152 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; /// <summary> /// 公会大厅 /// </summary> public class GuildHallWin : UIBase { [SerializeField] GuildEmblemCell guildEmblem; [SerializeField] Text guildMemberCountText; [SerializeField] Text totalFightPowerText; [SerializeField] Button opBtn; //管理按钮 [SerializeField] Text guildLevelText; [SerializeField] Text guildNameText; //加服务器信息 [SerializeField] Button guildLVBtn; [SerializeField] Image lvExpProcess; [SerializeField] Text expText; [SerializeField] Text guildNumText; //加公会编号 [SerializeField] Button copyBtn; [SerializeField] Text noticeText; //公告 [SerializeField] Button noticeBtn; //公告 [SerializeField] ScrollerController memberScroller; [SerializeField] Button donateBtn; protected override void InitComponent() { copyBtn.AddListener(() => { UIHelper.CopyToClipboard(guildNumText.text); SysNotifyMgr.Instance.ShowTip("GuildSys8"); }); opBtn.AddListener(() => { //管理按钮 UIManager.Instance.OpenWindow<GuildOPWin>(); }); guildLVBtn.AddListener(() => { // UIManager.Instance.OpenWindow<GuildLevelUpWin>(); }); noticeBtn.AddListener(() => { var needLV = GuildManager.Instance.GetNeedGuildJobLV((int)GuildFuncType.PublishNotice); if (PlayerDatas.Instance.fairyData.mine.FmLV >= needLV) { // UIManager.Instance.OpenWindow<GuildNoticeWin>(); } }); donateBtn.AddListener(() => { // UIManager.Instance.OpenWindow<GuildDonateWin>(); }); } protected override void OnPreOpen() { GuildManager.Instance.RequestGuildData(); GuildManager.Instance.memberOPIndex = -1; GuildManager.Instance.MemberOPIndexEvent += OnMemberOPIndexEvent; PlayerDatas.Instance.fairyData.OnRefreshFairyInfo += OnRefreshFairyInfo; memberScroller.OnRefreshCell += OnRefreshCell; memberScroller.OnGetDynamicSize += OnGetDynamicSize; memberScroller.lockType = EnhanceLockType.KeepVertical2; Display(); memberScroller.JumpIndex(0); } protected override void OnPreClose() { memberScroller.OnRefreshCell -= OnRefreshCell; GuildManager.Instance.MemberOPIndexEvent -= OnMemberOPIndexEvent; PlayerDatas.Instance.fairyData.OnRefreshFairyInfo -= OnRefreshFairyInfo; memberScroller.OnGetDynamicSize -= OnGetDynamicSize; } void Display() { var guildInfo = PlayerDatas.Instance.fairyData.fairy; if (guildInfo == null) return; CreateMemberScroller(); var config = FamilyConfig.Get(guildInfo.FamilyLV); guildEmblem.Display(guildInfo.EmblemID, guildInfo.EmblemWord, 1.3f); guildMemberCountText.text = guildInfo.MemberCount + "/" + config.MemberMax; totalFightPowerText.text = UIHelper.ReplaceLargeArtNum(guildInfo.totalFightPower); guildLevelText.text = Language.Get("L1094") + guildInfo.FamilyLV; guildNameText.text = guildInfo.FamilyName + Language.Get("L1039", ServerListCenter.Instance.GetServerName(guildInfo.ServerID)); guildNumText.text = GuildManager.Instance.EncryptGuildID(guildInfo.FamilyID); noticeText.text = string.IsNullOrEmpty(guildInfo.Broadcast) ? Language.Get("Guild_62") : guildInfo.Broadcast; lvExpProcess.fillAmount = (float)guildInfo.FamilyLVExp / config.NeedExp; expText.text = guildInfo.FamilyLVExp + "/" + config.NeedExp; } void OnRefreshFairyInfo() { Display(); } bool OnGetDynamicSize(ScrollerDataType type, int index, out float height) { height = type == ScrollerDataType.Header ? 153 : 70; return true; } void CreateMemberScroller() { memberScroller.Refresh(); for (int i = 0; i < PlayerDatas.Instance.fairyData.fairy.MemberCount; i++) { memberScroller.AddCell(ScrollerDataType.Header, i); if (GuildManager.Instance.memberOPIndex == i) { memberScroller.AddCell(ScrollerDataType.Normal, i); } } memberScroller.Restart(); } void OnRefreshCell(ScrollerDataType type, CellView cell) { if (type == ScrollerDataType.Header) { var _cell = cell as GuildMemberCell; _cell.Display(cell.index); } else if (type == ScrollerDataType.Normal) { var _cell = cell as GuildMemberOPCell; _cell.Display(cell.index, false); } } void OnMemberOPIndexEvent() { // var lastPosition = memberScroller.m_Scorller.ScrollPosition; CreateMemberScroller(); // memberScroller.m_Scorller.ScrollPosition = lastPosition + (GuildManager.Instance.memberOPIndex != -1 ? 74 : 0); } } Main/System/Guild/GuildHallWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 7d99139cdabd05c4482476feab2dfab1 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/Guild/GuildJoinWin.cs
@@ -42,19 +42,15 @@ guildListScroller.OnRefreshCell -= RefreshCell; PlayerDatas.Instance.fairyData.OnRefreshFairyInfo -= OnRefreshFairyInfo; var win = UIManager.Instance.GetUI<MainWin>(); if (win) win.RestoreFuncBtn(); UIManager.Instance.GetUI<MainWin>()?.RestoreFuncBtn(); } void OnRefreshFairyInfo() { //当前界面下有刷新自家的公会数据,说明一定是加入了公会,需主动跳转到公会界面 CloseWindow(); var win = UIManager.Instance.GetUI<MainWin>(); if (win) win.ClickFunc(4); UIManager.Instance.GetUI<MainWin>()?.ClickFunc(4); } void Display() 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, } Main/System/Guild/GuildMemberCell.cs
New file @@ -0,0 +1,96 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; /// <summary> /// 公会大厅 成员 /// </summary> public class GuildMemberCell : CellView { [SerializeField] AvatarCell avatarCell; [SerializeField] OfficialTitleCell titleCell; [SerializeField] Text lvText; [SerializeField] Text guildJobText; [SerializeField] Image guildJobImg; [SerializeField] Text nameText; [SerializeField] Text fightPowerText; [SerializeField] Button seePlayerBtn; [SerializeField] Text contribText; [SerializeField] Text loginTimeText; [SerializeField] Button showOpBtn; [SerializeField] Image showArrowImg; public void Display(int index) { var playerID = PlayerDatas.Instance.fairyData.memberIDList[index]; var playerInfo = PlayerDatas.Instance.fairyData.GetMember(playerID); nameText.text = playerInfo.Name; avatarCell.InitUI(AvatarHelper.GetAvatarModel(0, playerInfo.Face, playerInfo.FacePic)); titleCell.InitUI(playerInfo.RealmLV, playerInfo.TitleID); lvText.text = playerInfo.LV.ToString(); if (playerInfo.FmLV > 0) { guildJobImg.SetActive(true); guildJobText.text = RichTextMsgReplaceConfig.GetRichReplace("FAMILY", playerInfo.FmLV); guildJobImg.SetSprite("GuildJob" + playerInfo.FmLV); } else { guildJobImg.SetActive(false); } fightPowerText.text = UIHelper.ReplaceLargeArtNum(playerInfo.FightPower); seePlayerBtn.AddListener(() => { OtherPlayerDetailManager.Instance.ViewPlayerDetail(playerID); GuildManager.Instance.memberOPIndex = -1; //附带关闭职位调整操作 }); contribText.text = playerInfo.ContribDay + "/" + playerInfo.ContribTotal; int leftTime = TimeUtility.AllSeconds - playerInfo.OffTime; if (playerInfo.OffTime == 0) { loginTimeText.text = UIHelper.AppendColor(TextColType.Green, Language.Get("L1025")); } else if (leftTime < 60) { loginTimeText.text = Language.Get("Guild_63"); //刚刚在线 } else { loginTimeText.text = Language.Get("Guild_61", TimeUtility.SecondsToConsumeRebate(leftTime)); } showOpBtn.SetActive(PlayerDatas.Instance.fairyData.mine.FmLV >= GuildManager.Instance.GetNeedGuildJobLV((int)GuildFuncType.ChangeJob) && PlayerDatas.Instance.fairyData.mine.FmLV > playerInfo.FmLV); showOpBtn.AddListener(() => { if (GuildManager.Instance.memberOPIndex == index) { GuildManager.Instance.memberOPIndex = -1; return; } GuildManager.Instance.memberOPIndex = index; }); if (GuildManager.Instance.memberOPIndex == index) { //展开 showArrowImg.transform.localScale = new Vector3(1, 1, 1); } else { showArrowImg.transform.localScale = new Vector3(1, -1, 1); } } } Main/System/Guild/GuildMemberCell.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: fea255f7bfd0f2448b0cc267b99cbd62 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/Guild/GuildMemberOPCell.cs
New file @@ -0,0 +1,125 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; /// <summary> /// 公会大厅 成员调整,踢出 /// </summary> public class GuildMemberOPCell : CellView { [SerializeField] Button kickBtn; [SerializeField] Button opearteJobBtn; [SerializeField] Button normalJobBtn; [SerializeField] Button leaderJobBtn; [SerializeField] Button viceLeaderJobBtn; [SerializeField] Button eliteJobBtn; bool showBtn = false; public void Display(int index, bool _showBtn) { var playerID = PlayerDatas.Instance.fairyData.memberIDList[index]; var playerInfo = PlayerDatas.Instance.fairyData.GetMember(playerID); var config = FamilyConfig.Get(PlayerDatas.Instance.fairyData.fairy.FamilyLV); showBtn = _showBtn; opearteJobBtn.AddListener(() => { showBtn = !showBtn; UpdateBtn(); }); UpdateBtn(); normalJobBtn.AddListener(() => { ChangeFMLV(playerInfo, 0); }); eliteJobBtn.AddListener(() => { ChangeFMLV(playerInfo, 1); }); viceLeaderJobBtn.AddListener(() => { if (PlayerDatas.Instance.fairyData.deputyLeaderPlayerIDList.Count >= config.DeputyLeaderMax) { SysNotifyMgr.Instance.ShowTip("GuildSys10"); return; } ChangeFMLV(playerInfo, 2); }); leaderJobBtn.AddListener(() => { if (PlayerDatas.Instance.fairyData.mine.FmLV != 3) return; if (playerInfo.FmLV != 2) { SysNotifyMgr.Instance.ShowTip("GuildSys12"); return; } ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("Guild_28", playerInfo.Name), (bool isOK) => { if (isOK) { GuildManager.Instance.SendChangeMemberLV(playerInfo.PlayerID, 3); SysNotifyMgr.Instance.ShowTip("GuildSys13"); GuildManager.Instance.memberOPIndex = -1; } }); }); kickBtn.AddListener(() => { ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("Guild_33", playerInfo.Name), (bool isOK) => { if (isOK) { GuildManager.Instance.KickMember(playerID); GuildManager.Instance.memberOPIndex = -1; } }); }); } void UpdateBtn() { leaderJobBtn.SetActive(showBtn && PlayerDatas.Instance.fairyData.mine.FmLV == 3); viceLeaderJobBtn.SetActive(showBtn && PlayerDatas.Instance.fairyData.mine.FmLV == 3); eliteJobBtn.SetActive(showBtn && PlayerDatas.Instance.fairyData.mine.FmLV >= 2); normalJobBtn.SetActive(showBtn && PlayerDatas.Instance.fairyData.mine.FmLV >= 2); } void ChangeFMLV(FairyMember playerInfo, int lv) { if (playerInfo.FmLV == lv) { SysNotifyMgr.Instance.ShowTip("GuildSys14"); return; } ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("Guild_31", playerInfo.Name, lv), (bool isOK) => { if (isOK) { GuildManager.Instance.SendChangeMemberLV(playerInfo.PlayerID, lv); GuildManager.Instance.memberOPIndex = -1; } }); } } Main/System/Guild/GuildMemberOPCell.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: ea4e05570ea5b704b86795af96542119 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/Guild/GuildOPWin.cs
New file @@ -0,0 +1,84 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; /// <summary> /// 公会管理界面 /// </summary> public class GuildOPWin : UIBase { [SerializeField] Text guildNameText; [SerializeField] Button changeNameBtn; [SerializeField] GuildEmblemCell guildEmblem; [SerializeField] Button changeEmblemBtn; [SerializeField] Button quitBtn; [SerializeField] Button noteBtn; //职位变更和玩家进出日志 protected override void InitComponent() { changeEmblemBtn.AddListener(() => { UIManager.Instance.OpenWindow<GuildEmblemWin>(); }); changeNameBtn.AddListener(() => { if (PlayerDatas.Instance.fairyData.mine.FmLV != 3) { SysNotifyMgr.Instance.ShowTip("GuildSys16"); return; } UIManager.Instance.OpenWindow<GuildChangeNameWin>(); }); quitBtn.AddListener(() => { GuildManager.Instance.QuitGuild(); }); noteBtn.AddListener(() => { // UIManager.Instance.OpenWindow<GuildNoteWin>(); }); } protected override void OnPreOpen() { GuildManager.Instance.RequestGuildData(); PlayerDatas.Instance.fairyData.OnRefreshFairyInfo += OnRefreshFairyInfo; Display(); } protected override void OnPreClose() { PlayerDatas.Instance.fairyData.OnRefreshFairyInfo -= OnRefreshFairyInfo; } void Display() { var guildInfo = PlayerDatas.Instance.fairyData.fairy; if (guildInfo == null) return; guildEmblem.Display(guildInfo.EmblemID, guildInfo.EmblemWord, 1.4f); guildNameText.text = guildInfo.FamilyName; } void OnRefreshFairyInfo() { } } Main/System/Guild/GuildOPWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 464f807cfa1376b418207d585b714fca MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/Guild/GuildPreviewWin.cs
@@ -42,8 +42,6 @@ copyBtn.AddListener(() => { var guildInfo = GuildManager.Instance.guildsDict[guildID]; if (guildInfo == null) return; UIHelper.CopyToClipboard(guildNumText.text); SysNotifyMgr.Instance.ShowTip("GuildSys8"); }); @@ -83,7 +81,7 @@ guildNameText.text = guildInfo.FamilyName + Language.Get("L1039", ServerListCenter.Instance.GetServerName(guildInfo.ServerID)); guildNumText.text = GuildManager.Instance.EncryptGuildID(guildInfo.FamilyID); leaderNameText.text = guildInfo.LeaderName; noticeText.text = guildInfo.Broadcast; noticeText.text = string.IsNullOrEmpty(guildInfo.Broadcast) ? Language.Get("Guild_62") : guildInfo.Broadcast; var state = GuildManager.Instance.GetRequestState(guildInfo); Main/System/Guild/PlayerFairyData.cs
@@ -23,14 +23,15 @@ public FairyMember mine = null; public event Action OnRefreshFairyInfo; public event Action OnRefreshFairyMine; //玩家在公会里的数据 private Dictionary<int, FairyMember> memberDic = new Dictionary<int, FairyMember>(); 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> elitePlayerIDList = new List<int>(); // // 副盟主 // public List<int> deputyLeaderPlayerIDList = new List<int>(); public List<int> deputyLeaderPlayerIDList = new List<int>(); public void OnRefreshGuildInfo(HA520_tagMCRoleFamilyInfo vNetData) { @@ -55,6 +56,8 @@ mine = null; memberDic.Clear(); memberIDList.Clear(); deputyLeaderPlayerIDList.Clear(); for (int i = 0; i < vNetData.MemberCount; i++) { FairyMember member = new FairyMember(); @@ -89,17 +92,20 @@ // if (member.FmLV == 1) // { // eliteList.Add(member); // elitePlayerIDList.Add(member.PlayerID); // } // else if (member.FamilyLV == 2) // { // deputyLeaderList.Add(member); // } 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(); } @@ -128,9 +134,31 @@ 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); } } Main/System/Main/MainWin.cs
@@ -369,6 +369,7 @@ //外部调用点击功能 public void ClickFunc(int functionOrder) { tabButtons[functionOrder].SelectBtn(); tabButtons[functionOrder].onClick.Invoke(); } Main/System/Scroll/ScrollerController.cs
@@ -13,8 +13,8 @@ LockVerticalTop, LockVerticalBottom, KeepHorizon, KeepVertical, KeepVertical2, KeepVertical, //在滚动视图内容更新或刷新时,保持当前位置不变 置顶显示 KeepVertical2, //在滚动视图内容更新或刷新时,保持当前位置不变 置底显示 } public class ScrollerController : MonoBehaviour, IEnhancedScrollerDelegate {