using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using System.Text;
|
using LitJson;
|
using UnityEngine;
|
|
|
public class GuildManager : GameSystemManager<GuildManager>
|
{
|
// 申请的公会列表
|
private List<int> m_FairyRequesteds = new List<int>();
|
// 公会附加数据,按类型存储
|
// 公会ID, 类型ID, 数据
|
public Dictionary<int, Dictionary<int, HA513_tagMCFamilyActionInfo.tagMCFamilyAction[]>> familyActions = new Dictionary<int, Dictionary<int, HA513_tagMCFamilyActionInfo.tagMCFamilyAction[]>>();
|
public event Action<int, int> FamilyActionInfoEvent;
|
|
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()
|
{
|
m_FairyRequesteds.Clear();
|
familyActions.Clear();
|
}
|
|
|
|
private void OnRefreshFairyMine()
|
{
|
if (!PlayerDatas.Instance.fairyData.HasFairy)
|
{
|
//退出公会
|
familyActions.Clear();
|
}
|
}
|
|
|
#region 发包
|
public void SendKickFairy(uint playerID)
|
{
|
var pak = new CA605_tagCMDeleteFamilyMember();
|
pak.MemberID = playerID;
|
GameNetSystem.Instance.SendInfo(pak);
|
}
|
|
|
|
//申请/撤销 加入公会
|
public void SendApplyFairy(uint id, int type)
|
{
|
if (FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Fairy, true))
|
{
|
return;
|
}
|
if (PlayerDatas.Instance.fairyData.HasFairy)
|
{
|
ServerTipDetails.DisplayNormalTip(Language.Get("HasFairyTip"));
|
return;
|
}
|
CA602_tagCMRequesJoinFamily rqPack = new CA602_tagCMRequesJoinFamily();
|
rqPack.Type = (byte)type;
|
rqPack.TagFamilyID = id;
|
GameNetSystem.Instance.SendInfo(rqPack);
|
}
|
#endregion
|
|
|
|
|
#region 配置
|
|
public int createFairyCost
|
{
|
get;
|
private set;
|
}
|
public int createMoneyType;
|
|
public int requestPlayerCount; //每个仙盟最大可接受申请加入玩家数
|
public int requestGuildCount; //每个玩家最大可同时申请加入仙盟数
|
|
// 权限ID: 1-收人,2-变更职位,3-发布公告,4-踢人
|
// 职位: 0-成员,1-精英,2-副盟主,3-盟主
|
public Dictionary<int, int> guildWorkToLevel = new Dictionary<int, int>();
|
|
void ParseConfig()
|
{
|
var config = FuncConfigConfig.Get("CreateFamily");
|
createFairyCost = int.Parse(config.Numerical1);
|
createMoneyType = int.Parse(config.Numerical2);
|
|
// config = FuncConfigConfig.Get("FamilyMatchSet");
|
// fairyLeagueLimit = int.Parse(config.Numerical1);
|
|
config = FuncConfigConfig.Get("FamilyReqJoin");
|
requestPlayerCount = int.Parse(config.Numerical1);
|
requestGuildCount = int.Parse(config.Numerical2);
|
|
config = FuncConfigConfig.Get("FamilyPower");
|
guildWorkToLevel = ConfigParse.ParseIntDict(config.Numerical1);
|
|
}
|
|
|
#endregion
|
|
|
|
public void UpdateFairyRequested(HA501_tagMCNotifyRequestJoinFamilyInfo _package)
|
{
|
m_FairyRequesteds.Clear();
|
for (int i = 0; i < _package.RequestCount; i++)
|
{
|
m_FairyRequesteds.Add((int)_package.RequestJoinFamilyIDList[i]);
|
}
|
}
|
|
|
public bool FairyRequested(int _fairyId)
|
{
|
return m_FairyRequesteds.Contains(_fairyId);
|
}
|
|
|
|
public bool InSameFairy(int playerId)
|
{
|
if (!PlayerDatas.Instance.fairyData.HasFairy)
|
{
|
return false;
|
}
|
return PlayerDatas.Instance.fairyData.GetMember(playerId) != null;
|
}
|
|
|
|
#region 仙盟名限制
|
public bool CheckFairyNameLimit(string _name, out int errorCode)
|
{
|
errorCode = 0;
|
if (string.IsNullOrEmpty(_name))
|
{
|
errorCode = 0;
|
return false;
|
}
|
if (DirtyWordConfig.IsDirtWord(_name) || UIHelper.HasSpecialCharac(_name)
|
|| DirtyNameConfig.IsDirtName(_name))
|
{
|
errorCode = 1;
|
return false;
|
}
|
return true;
|
}
|
|
|
public void ShowFairyNameErrorTip(int _errorCode)
|
{
|
switch (_errorCode)
|
{
|
case 0:
|
SysNotifyMgr.Instance.ShowTip("FamilyNameChangeNoNull");
|
break;
|
case 1:
|
SysNotifyMgr.Instance.ShowTip("FamilyNameChangeUnlegal");
|
break;
|
}
|
}
|
|
public void SendChangeFairyName(string _name, int _itemIndex)
|
{
|
LanguageVerify.Instance.VerifyFairy(_name, 2, PlayerDatas.Instance.fairyData.fairy.FamilyName, PlayerDatas.Instance.fairyData.mine.FmLV, (bool ok, string content) =>
|
{
|
CA611_tagCMRenameFamily _pak = new CA611_tagCMRenameFamily();
|
_pak.NewName = content;
|
_pak.ItemIndex = (byte)_itemIndex;
|
_pak.NewNameLen = (byte)Encoding.UTF8.GetBytes(content).Length;
|
GameNetSystem.Instance.SendInfo(_pak);
|
});
|
}
|
|
|
#endregion
|
|
|
|
|
#region 仙盟商店开启
|
public int fairyStoreLimit = 0;
|
public bool fairyStoreOpen
|
{
|
get
|
{
|
if (PlayerDatas.Instance.fairyData.HasFairy)
|
{
|
var fairy = PlayerDatas.Instance.fairyData.fairy;
|
if (fairy != null && fairy.FamilyLV >= fairyStoreLimit)
|
{
|
return true;
|
}
|
}
|
return false;
|
}
|
}
|
|
public void ProcessErrorTip()
|
{
|
if (!PlayerDatas.Instance.fairyData.HasFairy)
|
{
|
SysNotifyMgr.Instance.ShowTip("DailyQuestwinUnionLimit");
|
}
|
else if (PlayerDatas.Instance.fairyData.fairy.FamilyLV < fairyStoreLimit)
|
{
|
SysNotifyMgr.Instance.ShowTip("FairyStoreOpenLimit", fairyStoreLimit);
|
}
|
}
|
#endregion
|
|
|
|
|
|
public void UpdateFamilyAction(HA513_tagMCFamilyActionInfo _package)
|
{
|
|
if (!familyActions.ContainsKey((int)_package.FamilyID))
|
{
|
familyActions.Add((int)_package.FamilyID, new Dictionary<int, HA513_tagMCFamilyActionInfo.tagMCFamilyAction[]>());
|
}
|
|
familyActions[(int)_package.FamilyID][_package.ActionType] = _package.FamilyActionList;
|
FamilyActionInfoEvent?.Invoke((int)_package.FamilyID, _package.ActionType);
|
}
|
|
public bool TryGetFamilyActions(int actionType, out HA513_tagMCFamilyActionInfo.tagMCFamilyAction[] familyAction)
|
{
|
familyAction = null;
|
if (!PlayerDatas.Instance.fairyData.HasFairy)
|
{
|
return false;
|
}
|
if (!familyActions.ContainsKey((int)PlayerDatas.Instance.fairyData.fairy.FamilyID))
|
{
|
return false;
|
}
|
|
if (!familyActions[(int)PlayerDatas.Instance.fairyData.fairy.FamilyID].TryGetValue(actionType, out familyAction))
|
return false;
|
return true;
|
}
|
|
|
|
#region 仙盟列表
|
|
public event Action OnRefreshFairyList;
|
|
// 查找的公会ID:公会数据
|
public Dictionary<int, FairyData> guildsDict = new Dictionary<int, FairyData>();
|
// 按查询页存储
|
public List<int> pageIndexList = new List<int>(); //正常是按页查询,顺序添加即可
|
public int curPageIndex;
|
public int totalPageCount;
|
|
//查找公会列表
|
public void OnRefreshGuildViewList(HA523_tagMCFamilyViewList vNetData)
|
{
|
curPageIndex = vNetData.PageIndex;
|
totalPageCount = vNetData.TotalPage;
|
|
foreach (var guildInfo in vNetData.FamilyList)
|
{
|
FairyData data = new FairyData();
|
guildsDict[(int)guildInfo.FamilyID] = data;
|
SetFairyViewData(data, guildInfo);
|
pageIndexList.Add((int)guildInfo.FamilyID);
|
}
|
|
|
if (OnRefreshFairyList != null)
|
{
|
OnRefreshFairyList();
|
}
|
}
|
|
|
//查找公会
|
public void SendFindGuild(string msg, int pageIndex = 0, int pageSize = 20)
|
{
|
if (pageIndex == 0)
|
{
|
//默认查询第一页即代表重新开始查询,清空之前的数据
|
guildsDict.Clear();
|
pageIndexList.Clear();
|
}
|
var pack = new CA620_tagCMViewFamilyPage();
|
|
pack.Msg = msg;
|
pack.MsgLen = (byte)msg.Length;
|
pack.PageIndex = (byte)pageIndex;
|
pack.ShowCount = (byte)pageSize;
|
|
GameNetSystem.Instance.SendInfo(pack);
|
}
|
|
|
public static void SetFairyViewData(FairyData data, HA523_tagMCFamilyViewList.tagMCFamilyView view)
|
{
|
data.Rank = view.Rank;
|
data.FamilyID = view.FamilyID;
|
data.FamilyName = view.FamilyName;
|
data.LeaderID = view.LeaderID;
|
data.LeaderName = view.LeaderName;
|
data.FamilyLV = view.FamilyLV;
|
data.JoinReview = view.JoinReview;
|
data.JoinLVMin = view.JoinLVMin;
|
data.ServerID = view.ServerID;
|
data.EmblemID = view.EmblemID;
|
data.EmblemWord = view.EmblemWord;
|
data.totalFightPower = view.FightPowerEx * Constants.ExpPointValue + view.FightPower;
|
data.MemberCount = view.MemberCount;
|
|
}
|
|
#endregion
|
|
#region 申请列表
|
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);
|
|
//申请加入的玩家信息
|
public void OnRefreshRequestJoinPlayerInfo(HA522_tagMCFamilyReqJoinInfo vNetData)
|
{
|
applyList.Clear();
|
for (int i = 0; i < vNetData.ReqCnt; i++)
|
{
|
FairyApply apply = new FairyApply();
|
apply.Name = vNetData.ReqJoinList[i].Name;
|
apply.PlayerID = vNetData.ReqJoinList[i].PlayerID;
|
apply.ReqTime = vNetData.ReqJoinList[i].ReqTime;
|
apply.LV = vNetData.ReqJoinList[i].LV;
|
apply.Job = vNetData.ReqJoinList[i].Job;
|
apply.RealmLV = vNetData.ReqJoinList[i].RealmLV;
|
apply.Face = vNetData.ReqJoinList[i].Face;
|
apply.FacePic = vNetData.ReqJoinList[i].FacePic;
|
apply.TitleID = vNetData.ReqJoinList[i].TitleID;
|
apply.FightPower = vNetData.ReqJoinList[i].FightPower + vNetData.ReqJoinList[i].FightPowerEx * Constants.ExpPointValue;
|
apply.ServerID = vNetData.ReqJoinList[i].ServerID;
|
apply.IsOnLine = vNetData.ReqJoinList[i].IsOnLine;
|
applyList.Add(apply);
|
}
|
if (OnRefreshApplyList != null)
|
{
|
OnRefreshApplyList();
|
}
|
UpdateRequestRedpoint();
|
}
|
|
void UpdateRequestRedpoint()
|
{
|
if (PlayerDatas.Instance.fairyData.HasFairy && PlayerDatas.Instance.fairyData.IsCanFunc(LimitFunc.CanCall))
|
{
|
applyRedpoint.state = applyList.Count > 0 ? RedPointState.Simple : RedPointState.None;
|
}
|
else
|
{
|
applyRedpoint.state = RedPointState.None;
|
}
|
}
|
|
public List<FairyApply> GetApplyList()
|
{
|
return applyList;
|
}
|
#endregion
|
|
|
}
|