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<DungeonModel>(); } }
|
PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
|
FairyModel fairyModel { get { return ModelCenter.Instance.GetModel<FairyModel>(); } }
|
|
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; }
|
/// <summary>
|
/// key---世界等级上限 value---预览物品id
|
/// </summary>
|
public Dictionary<int, int[]> fairyBossAwardDict { get; private set; }
|
|
public List<int> m_LeagueTableHides { get; private set; }
|
public string leagueTableName { get; private set; }
|
Dictionary<int, int> fairyBossWeekCntDict = new Dictionary<int, int>();
|
|
private void ParseConfig()
|
{
|
var cfg = FuncConfigConfig.Get("FamilyBossFB");
|
challengeTimes = int.Parse(cfg.Numerical1);
|
hurtBuffInfo = JsonMapper.ToObject<int[]>(cfg.Numerical2);
|
cfg = FuncConfigConfig.Get("FamilyBossInfo");
|
fairyBossInfo = cfg.Numerical1;
|
fairyBossNpcId = int.Parse(cfg.Numerical2);
|
fairyBossFood = int.Parse(cfg.Numerical3);
|
fairyBossAwardDict = new Dictionary<int, int[]>();
|
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<int[]>(_json[_key].ToJson()));
|
}
|
cfg = FuncConfigConfig.Get("LeagueTable");
|
m_LeagueTableHides = new List<int>();
|
m_LeagueTableHides.AddRange(ConfigParse.GetMultipleStr<int>(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;
|
}
|
}
|
}
|
}
|
|
|