using System.Collections.Generic; using cfg.LegionCfg; using Framework; using Gameplay; using Gameplay.Net; using NLDPB; using PhxhSDK; using Sirenix.Utilities; public partial class LegionManager: Singlenton, IInitable { public bool Belong2Legion => _myLegion != null; #region API public void Init() { _RegisterEvents(); } public void Release() { _UnregisterEvents(); } /// /// 设置客户端的 MyLegion Base数据 /// public void SetMyLegionBase() { _myLegion = _ParseLegionData(NetLegionBaseData); } /// /// 设置客户端的 MyLegion Member数据 /// public void SetMyLegionMembers() { if (_myLegionMemberList == null) { _myLegionMemberList = new(); } else { _myLegionMemberList.Clear(); } foreach (var memberData in NetLegionMemberList) { //TODO Debug DebugUtil.LogError($"MyLegionMember ID:{memberData.ActorId}"); _myLegionMemberList.Add(new ActorLegionData(memberData)); } } /// /// 设置客户端的 MyLegion ApplyMember数据 /// public void SetMyLegionApplyMembers() { if (_applyMemberList == null) { _applyMemberList = new(); } else { _applyMemberList.Clear(); } foreach (var applyData in NetLegionApplyDataList) { _applyMemberList.Add(new ActorLegionData(applyData)); //TODO Debug DebugUtil.LogError($"申请列表, 玩家ID:{applyData.ActorId}, 玩家名:{applyData.ActorId}"); } } /// /// 设置客户端的 MyLegion 记录数据 /// public void SetMyLegionLogs() { } /// /// 刷新军团列表 /// public void SetLegionList() { _legions.Clear(); var legionDataList = NetLegionInfoDataList; foreach (var legionData in legionDataList) { var legion = ParseLegion(legionData); _legions.Add(legion); } } /// /// 确认是否有权限 /// /// /// public bool CheckIsPermission(Permission eventID) { if (_myLegion == null) return false; var eventCfg = TableManager.Instance.Tables.LegionPermissions.GetOrDefault(eventID); if (eventCfg != null) { var post = GetMyPost(); if (post != Position.None) { switch (post) { case Position.Member: { return eventCfg.Member > 0; } case Position.RegimentalCommander: { return eventCfg.RegimentalCommander > 0; } case Position.AssistantRegimentalCommander: { return eventCfg.AssistantRegimentalCommander > 0; } case Position.Leroy: { return eventCfg.Leroy > 0; } case Position.Diplomatist: { return eventCfg.Diplomatist > 0; } case Position.Commander: { return eventCfg.Commander > 0; } default: break; } } } return false; } public Position GetMyPost() { if (_myLegion == null) return Position.None; if (_myLegionMemberList == null || _myLegionMemberList.Count <= 0) return Position.None; var myLegionActorData = _myLegionMemberList.Find( data => data.ActorID == Actor.Instance.Base.GetProp(ActorProp.ActorId)); if (myLegionActorData != null) { return myLegionActorData.Post; } return Position.None; } public string GetPostStr(Position post) { switch (post) { case Position.Commander: return CommonUtils.GetLocalizeText("legion_post_commander"); case Position.RegimentalCommander: return CommonUtils.GetLocalizeText("legion_post_president"); case Position.AssistantRegimentalCommander: return CommonUtils.GetLocalizeText("legion_post_assist_president"); case Position.Leroy: return CommonUtils.GetLocalizeText("legion_post_leroy"); case Position.Diplomatist: return CommonUtils.GetLocalizeText("legion_post_diplomatist"); case Position.Member: return CommonUtils.GetLocalizeText("legion_post_member"); default: return ""; } } #endregion #region Events private void _RegisterEvents() { EventManager.Instance.Register(EventManager.EventName.LegionBaseData, _OnLegionBaseUpdate); EventManager.Instance.Register(EventManager.EventName.LegionMemberData, _OnLegionMemberUpdate); EventManager.Instance.Register(EventManager.EventName.LegionApplyData, _OnLegionApplyListUpdate); EventManager.Instance.Register(EventManager.EventName.LegionCreateSuccess, _OnCreateSuccess); EventManager.Instance.Register(EventManager.EventName.LegionQuitSuccess, _OnQuitSuccess); EventManager.Instance.Register(EventManager.EventName.LegionJoinSendSuccess, _OnJoinApplySendSuccess); EventManager.Instance.Register(EventManager.EventName.LegionMemberPostUpdate, _OnMemberPostUpdate); } private void _UnregisterEvents() { EventManager.Instance.Unregister(EventManager.EventName.LegionBaseData, _OnLegionBaseUpdate); EventManager.Instance.Unregister(EventManager.EventName.LegionMemberData, _OnLegionMemberUpdate); EventManager.Instance.Unregister(EventManager.EventName.LegionApplyData, _OnLegionApplyListUpdate); EventManager.Instance.Unregister(EventManager.EventName.LegionCreateSuccess, _OnCreateSuccess); EventManager.Instance.Unregister(EventManager.EventName.LegionQuitSuccess, _OnQuitSuccess); EventManager.Instance.Unregister(EventManager.EventName.LegionJoinSendSuccess, _OnJoinApplySendSuccess); EventManager.Instance.Unregister(EventManager.EventName.LegionMemberPostUpdate, _OnMemberPostUpdate); } /// /// 军团BaseData更新 /// private void _OnLegionBaseUpdate() { } /// /// 军团成员列表更新 /// private void _OnLegionMemberUpdate() { } /// /// 军团申请成员列表更新 /// private void _OnLegionApplyListUpdate() { } private void _OnLegionLogUpdate() { } /// /// 创建军团成功 /// private void _OnCreateSuccess() { DebugUtil.LogError("创建军团成功!"); if (IsPresident) { DebugUtil.LogG($"军团ID:{_myLegion.ID}"); } } /// /// 退出军团成功 /// private void _OnQuitSuccess() { _myLegion = null; _myLegionMemberList?.Clear(); _applyMemberList?.Clear(); } /// /// 加入军团成功 /// private void _OnJoinApplySendSuccess() { DebugUtil.LogError("申请加入军团成功!!!"); } /// /// 修改成员职位 /// private void _OnMemberPostUpdate() { DebugUtil.LogError("成员职位修改成功!!!"); } #endregion }