using LitJson; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace vnxbqy.UI { public class FairyBossModel : Model { public override void Init() { ParseConfig(); StageLoad.Instance.onStageLoadFinish+= OnStageLoadFinish; PlayerDatas.Instance.fairyData.OnRefreshFairyInfo += OnRefreshFairyInfo; PlayerDatas.Instance.fairyData.OnRefreshFairyMine += OnRefreshFairyInfo; } public override void UnInit() { StageLoad.Instance.onStageLoadFinish -= OnStageLoadFinish; PlayerDatas.Instance.fairyData.OnRefreshFairyInfo -= OnRefreshFairyInfo; PlayerDatas.Instance.fairyData.OnRefreshFairyMine -= OnRefreshFairyInfo; } DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel(); } } PackModel packModel { get { return ModelCenter.Instance.GetModel(); } } FairyModel fairyModel { get { return ModelCenter.Instance.GetModel(); } } public const int MapId = 31210; public int challengeTimes; public int[] hurtBuffInfo; public string fairyBossInfo { get; private set; } public int fairyBossNpcId { get; private set; } public int fairyBossFood { get; private set; } public int fairyBossContinueTime { get; private set; } public int fairyBossPrepareTime { get; private set; } public int fairyLevelLimit { get; private set; } /// /// key---世界等级上限 value---预览物品id /// public Dictionary fairyBossAwardDict { get; private set; } public List m_LeagueTableHides { get; private set; } public string leagueTableName { get; private set; } Dictionary fairyBossWeekCntDict = new Dictionary(); private void ParseConfig() { var cfg = FuncConfigConfig.Get("FamilyBossFB"); challengeTimes = int.Parse(cfg.Numerical1); hurtBuffInfo = JsonMapper.ToObject(cfg.Numerical2); cfg = FuncConfigConfig.Get("FamilyBossInfo"); fairyBossInfo = cfg.Numerical1; fairyBossNpcId = int.Parse(cfg.Numerical2); fairyBossFood = int.Parse(cfg.Numerical3); fairyBossAwardDict = new Dictionary(); cfg = FuncConfigConfig.Get("FamilyBossDrop"); var _json = LitJson.JsonMapper.ToObject(cfg.Numerical1); foreach (var _key in _json.Keys) { var _worldLv = int.Parse(_key); fairyBossAwardDict.Add(_worldLv, LitJson.JsonMapper.ToObject(_json[_key].ToJson())); } cfg = FuncConfigConfig.Get("LeagueTable"); m_LeagueTableHides = new List(); m_LeagueTableHides.AddRange(ConfigParse.GetMultipleStr(cfg.Numerical1)); leagueTableName = cfg.Numerical2; var configs = FamilyConfig.GetValues(); for (int i = 0; i < configs.Count; i++) { fairyBossWeekCntDict.Add(configs[i].familyLV, configs[i].bossFBCnt); if (fairyLevelLimit == 0 && configs[i].bossFBCnt > 0) { fairyLevelLimit = configs[i].familyLV; } } GetDungeonContinueTime(); } Redpoint redpoint = new Redpoint(10701, 1070102); public Redpoint redpoint1 = new Redpoint(1070102, 10701020); public Redpoint redpoint2 = new Redpoint(1070102, 10701021); private void OnStageLoadFinish() { GameObject _go = GameObject.Find(leagueTableName); if (_go != null) { if (m_LeagueTableHides.Contains(PlayerDatas.Instance.baseData.MapID)) { _go.SetActive(false); } else { _go.SetActive(true); } } } public int GetFairyBossWeekCount() { var lv = 1; var fairyData = PlayerDatas.Instance.fairyData; if (!fairyData.HasFairy) { return 0; } lv = fairyData.fairy.FamilyLV; if (fairyBossWeekCntDict.ContainsKey(lv)) { return fairyBossWeekCntDict[lv]; } return 0; } public bool TryGetWeekCnt(int _fairyLv, out int cnt) { return fairyBossWeekCntDict.TryGetValue(_fairyLv, out cnt); } private void OnRefreshFairyInfo() { UpdateRedPoint(); } public void UpdateRedPoint() { redpoint.state = RedPointState.None; redpoint1.state = RedPointState.None; redpoint2.state = RedPointState.None; if (PlayerDatas.Instance.baseData.MapID != MapId) { if (challengeTimes - m_FightTimes > 0) { redpoint.state = RedPointState.Simple; } } foreach (var key in FamilyBossHurtAwardConfig.personalHurtAwards.Keys) { if (GetAwardState(key) == 1) { redpoint1.state = RedPointState.Simple; break; } } foreach (var key in FamilyBossHurtAwardConfig.familyHurtAwards.Keys) { if (GetAwardState(key) == 1) { redpoint2.state = RedPointState.Simple; break; } } } public bool IsFairyBossOpen() { PlayerFairyData fairyData = PlayerDatas.Instance.fairyData; if (!fairyModel.fairyBossFuncOpen) { return false; } if (challengeTimes - m_FightTimes <= 0) return false; return true; } private void GetDungeonContinueTime() { //var _list = dungeonModel.GetDungeonIds(MapId); //var _dungeonCfg = DungeonConfig.Get(_list[0]); //var _stepTime = _dungeonCfg.StepTime; //_stepTime = _stepTime.Replace("[", string.Empty); //_stepTime = _stepTime.Replace("]", string.Empty); fairyBossContinueTime = 1;// int.Parse(_stepTime.Split(',')[1]); fairyBossPrepareTime = 0;// int.Parse(_stepTime.Split(',')[0]); } public void HandInFairyFood() { var singlepack = packModel.GetSinglePack(PackType.Item); var count = 0; if (singlepack != null) { count = singlepack.GetCountById(fairyBossFood); } if (count > 0) { CA605_tagCMFamilyDonate pak = new CA605_tagCMFamilyDonate(); GameNetSystem.Instance.SendInfo(pak); } else { SysNotifyMgr.Instance.ShowTip("FairyFoodHandError"); } } public int m_FightMemCount; public long m_FamilyHurt; public event Action OnUpdateFamilyBossFBInfoEvent; public void UpdateHFamilyBosFBInfo(HA40E_tagGCFamilyBosFBInfo netPack) { m_FightMemCount = netPack.FightMemCount; m_FamilyHurt = netPack.HurtTotal + (long)netPack.HurtTotalPoint * 100000000; OnUpdateFamilyBossFBInfoEvent?.Invoke(); } public event Action OnUpdateFamilyBossFBPlayerInfoEvent; public long m_PlayerHurt; public int m_FightTimes; public int m_PersonalHurtAward; public int m_FamilyHurtAward; public void UpdateFamilyBossFBPlayerInfo(HA507_tagMCFamilyBosFBPlayerInfo netPack) { m_PlayerHurt = netPack.HurtTotal + (long)netPack.HurtTotalPoint * 100000000; m_FightTimes = (int)netPack.FightSeconds; m_PersonalHurtAward = (int)netPack.HurtAwardState; m_FamilyHurtAward = (int)netPack.HurtAwardStateFamily; OnUpdateFamilyBossFBPlayerInfoEvent?.Invoke(); UpdateRedPoint(); } //0 伤害未达到 1 未领取 2 已领取 public int GetAwardState(int key) { var awardType = key / 1000; var awardIndex = key % 1000; if (awardType == 1) { var config = FamilyBossHurtAwardConfig.personalHurtAwards[key]; if (m_PlayerHurt < config.NeedHurtTotal) { return 0; } if (((int)Math.Pow(2, awardIndex) & m_PersonalHurtAward) == 0) { return 1; } return 2; } else { var config = FamilyBossHurtAwardConfig.familyHurtAwards[key]; if (m_FamilyHurt < config.NeedHurtTotal) { return 0; } if (((int)Math.Pow(2, awardIndex) & m_FamilyHurtAward) == 0) { return 1; } return 2; } } public float receiveTime; public void OnReceiveHelpMessage(string _mission) { var json = JsonMapper.ToObject(_mission); if (json != null && json.Keys.Contains("fightMemCount")) { m_FightMemCount = int.Parse(json["fightMemCount"].ToJson()); } if (json != null && json.Keys.Contains("hurtValue")) { m_PlayerHurt = long.Parse(json["hurtValue"].ToJson()); } if (json != null && json.Keys.Contains("fightSeconds")) { m_FightTimes = int.Parse(json["fightSeconds"].ToJson()); receiveTime = Time.time; } } } }