using System.Collections; using System.Collections.Generic; using UnityEngine; using LitJson; using System; namespace vnxbqy.UI { public class KingFairyModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk { public override void Init() { ParseConfig(); kingFairyData = new KingFairyData(); DTCA003_tagUniversalGameRecInfo.onGetUniversalGameInfo += OnGetUniversalGameInfo; RoleParticularModel.OnRevPackage += UpdatePlayerParticularEvent; FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent; m_SalaryRedpoint = new Redpoint(10705, 1070501); } private void OnFuncStateChangeEvent(int _key) { if (_key == 111) { UpdateRedpoint(); } } public override void UnInit() { DTCA003_tagUniversalGameRecInfo.onGetUniversalGameInfo -= OnGetUniversalGameInfo; RoleParticularModel.OnRevPackage -= UpdatePlayerParticularEvent; } public void OnBeforePlayerDataInitialize() { dailySalaryGet = false; hasKingFairy = false; isServerPrepare = false; } public void OnPlayerLoginOk() { isServerPrepare = true; RequestKingFairyData(); UpdateRedpoint(); } RoleParticularModel m_RoleParticularModel; RoleParticularModel roleParticularModel { get { return m_RoleParticularModel ?? (m_RoleParticularModel = ModelCenter.Instance.GetModel()); } } #region 配置 public const int KING_FAIRY_INFO = 69; public int[][] salaryAwardItems { get; private set; } public int privilegeItemId { get; private set; } public int multipleWinStartGet { get; private set; } public int multipleWinIntervalGet { get; private set; } public int multipleWinLimitCnt { get; private set; } public List> multipleWinRewards { get; private set; } bool isServerPrepare = false; public readonly int multipleWinBuffTypeId = 22101; private void ParseConfig() { multipleWinLimitCnt = 99; FuncConfigConfig funcConfig = FuncConfigConfig.Get("FamilyMatchDayReward"); salaryAwardItems = JsonMapper.ToObject(funcConfig.Numerical1); privilegeItemId = int.Parse(funcConfig.Numerical3); funcConfig = FuncConfigConfig.Get("FamilyMatchLianWinReward"); multipleWinStartGet = int.Parse(funcConfig.Numerical2); multipleWinIntervalGet = int.Parse(funcConfig.Numerical3); var itemArray = LitJson.JsonMapper.ToObject(funcConfig.Numerical4); if (itemArray != null) { multipleWinRewards = new List>(); for (int i = 0; i < itemArray.Length; i++) { var items = new List(); foreach (var _items in itemArray[i]) { items.Add(new Item() { id = _items[0], count = _items[1], }); } multipleWinRewards.Add(items); } } } public int GetWinStreakBuffLv(int _lv) { SkillConfig _skillCfg = SkillConfig.Get(multipleWinBuffTypeId); return _lv <= 0 ? 1 : (_lv > _skillCfg.SkillMaxLV ? _skillCfg.SkillMaxLV : _lv); } public bool NextMultipleWinAward() { if (!hasKingFairy) { return false; } if (kingFairyData.multipleWinCnt + 1 < multipleWinStartGet) { return false; } if ((kingFairyData.multipleWinCnt + 1 - multipleWinStartGet) % multipleWinIntervalGet == 0) { return true; } return false; } public Item viewChestItem; public void ViewKingFairyChest(int _itemId, int count) { viewChestItem = new Item() { id = _itemId, count = count, }; } #endregion #region 协议 public bool hasKingFairy { get; private set; } public KingFairyData kingFairyData { get; private set; } public bool dailySalaryGet { get; private set; } public event Action UpdateKingFairyEvent; public bool IsSelfInKingFairy() { if (!PlayerDatas.Instance.fairyData.HasFairy) { return false; } if (!hasKingFairy) { return false; } return PlayerDatas.Instance.fairyData.fairy.FamilyID == kingFairyData.fairyId; } private void UpdatePlayerParticularEvent(int viewTyte, int playerID, RoleParticularModel.ViewPlayerData viewPlayerData) { if (viewTyte != (int)ViewPlayerType.viewPlayerDataFairyKing) { return; } kingFairyData.leaderData = viewPlayerData; if (UpdateKingFairyEvent != null) { UpdateKingFairyEvent(); } } private void OnGetUniversalGameInfo(HA003_tagUniversalGameRecInfo package) { if (package.Type == KING_FAIRY_INFO) { hasKingFairy = false; if (package.Count == 0) { return; } var _sData = package.UniversalGameRec[0]; kingFairyData.fairyId = (int)_sData.Value1; kingFairyData.multipleWinCnt = (int)_sData.Value3; kingFairyData.fairyName = _sData.StrValue1; kingFairyData.leaderId = (int)_sData.Value2; kingFairyData.allotCnt = (int)_sData.Value4; kingFairyData.finalCnt = (int)_sData.Value5; if (int.TryParse(_sData.StrValue2, out int result)) { kingFairyData.emblemId = result; } else { kingFairyData.emblemId = EmblemHelper.GetDefaultFamilyEmblemId(); } hasKingFairy = kingFairyData.fairyId != 0; if (isServerPrepare && WindowCenter.Instance.IsOpen()) { roleParticularModel.ViewPlayerCacheData(kingFairyData.leaderId, (int)ViewPlayerType.viewPlayerDataFairyKing); } if (UpdateKingFairyEvent != null) { UpdateKingFairyEvent(); } UpdateRedpoint(); } } public void RequestKingFairyData() { CA001_tagViewUniversalGameRec _pak = new CA001_tagViewUniversalGameRec(); _pak.ViewType = (byte)KING_FAIRY_INFO; GameNetSystem.Instance.SendInfo(_pak); } public event Action UpdateDailySalaryEvent; public void UpdateDailySalary(int _state) { dailySalaryGet = _state == 1; UpdateRedpoint(); if (UpdateDailySalaryEvent != null) { UpdateDailySalaryEvent(); } } public void AllotMultipleWinAward(int _memberId) { if (!IsSelfInKingFairy()) { return; } if (PlayerDatas.Instance.PlayerId != kingFairyData.leaderId) { return; } CA410_tagCGFamilyWarWinRewardAllot _pak = new CA410_tagCGFamilyWarWinRewardAllot(); _pak.MemPlayerID = (uint)_memberId; GameNetSystem.Instance.SendInfo(_pak); if (WindowCenter.Instance.IsOpen()) { WindowCenter.Instance.Close(); } } #endregion #region 红点 private Redpoint m_KingFairyRedpoint = new Redpoint(107, 10705); public Redpoint m_SalaryRedpoint { get; private set; } public void UpdateRedpoint() { m_SalaryRedpoint.state = RedPointState.None; if (!IsSelfInKingFairy()) { return; } if (!FuncOpen.Instance.IsFuncOpen(111)) { return; } if (dailySalaryGet) { return; } m_SalaryRedpoint.state = RedPointState.Simple; } #endregion } public class KingFairyData { public int fairyId; public int leaderId; public int multipleWinCnt; public int allotCnt; public int finalCnt; public string fairyName; public int emblemId; public RoleParticularModel.ViewPlayerData leaderData; } }