using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using vnxbqy.UI; public class BossJiaLineUtility : Singleton { int m_MakeJiaLineTimes = 0; public int makeJiaLineTimes { get { return m_MakeJiaLineTimes; } set { m_MakeJiaLineTimes = Mathf.Clamp(value, 0, int.MaxValue); } } bool m_ShowJiaLine = false; public bool showJiaLine { get { if (TimeUtility.OpenDay < GeneralDefine.bossShuntDays && GeneralDefine.neutralMaps.Contains(PlayerDatas.Instance.baseData.MapID)) { return true; } return m_ShowJiaLine; } set { m_ShowJiaLine = value; } } public BossJiaLineUtility() { DTC0102_tagCDBPlayer.switchAccountEvent += OnAccountSwitch; } public int recordBossId { get { return bossSawRecorder.npcId; } } NpcSawRecorder bossSawRecorder = new NpcSawRecorder(); NpcSawRecorder stoneSawRecorder = new NpcSawRecorder(); public bool IsShuntBoss(int _bossId) { if (TimeUtility.OpenDay >= GeneralDefine.bossShuntDays) { return false; } else { GAStaticDefine.NPCLocation location; var find = GAStaticDefine.TryGetMapNPCLocation(_bossId, out location); return find && GeneralDefine.bossShuntMaps.Contains(location.mapId); } } public bool IsBossVisible(int _bossId) { if (PlayerDatas.Instance.hero == null) { return false; } else { return GAMgr.Instance.GetCloserNPC(PlayerDatas.Instance.hero.Pos, _bossId) != null; } } public bool IsBossTombstoneVisble(int _bossId) { if (PlayerDatas.Instance.hero == null) { return false; } else { var bossInfoConfig = BossInfoConfig.Get(_bossId); var tombstoneId = bossInfoConfig.StoneNPCID; return GAMgr.Instance.GetCloserNPC(PlayerDatas.Instance.hero.Pos, tombstoneId) != null; } } public void RecordSawStone(int npcId, int lineId) { var bossInfo = BossInfoConfig.GetBossInfoByStoneId(npcId); if (bossInfo != null) { if (HasSawLineBossRecently(bossInfo.NPCID, lineId)) { bossSawRecorder.Clear(); } } stoneSawRecorder.Record(npcId, lineId, Time.realtimeSinceStartup); } public bool HasSawLineStoneRecently(int bossId, int lineId) { var config = BossInfoConfig.Get(bossId); if (config != null) { return stoneSawRecorder.HasSawRecently(config.StoneNPCID, lineId, 60); } else { return false; } } public void ClearStoneRecord() { stoneSawRecorder.Clear(); } public void RecordSawBoss(int bossId, int lineId) { if (HasSawLineStoneRecently(bossId, lineId)) { stoneSawRecorder.Clear(); } bossSawRecorder.Record(bossId, lineId, Time.realtimeSinceStartup); } public bool HasSawBossRecently(int bossId) { return stoneSawRecorder.HasSawRecently(bossId, 60); } public bool HasSawLineBossRecently(int bossId, int lineId) { return bossSawRecorder.HasSawRecently(bossId, lineId, 60); } public void ClearBossRecord() { bossSawRecorder.Clear(); } FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel(); } } Dictionary bossKillTimes = new Dictionary(); public void RecordBossKillTime(int npcId, DateTime time) { var key = StringUtility.Contact(PlayerDatas.Instance.baseData.PlayerID, "_", npcId); bossKillTimes[npcId] = time; LocalSave.SetString(key, time.ToString()); } public bool IsBossKilledRecently(int npcId) { FindPreciousModel.BossInfo bossInfo; var totalCd = 0; if (findPreciousModel.TryGetBossInfo(npcId, out bossInfo)) { totalCd = bossInfo.rebornTotalCd; } if (bossKillTimes.ContainsKey(npcId)) { var killTime = bossKillTimes[npcId]; if ((int)((DateTime.Now - killTime).TotalSeconds) < totalCd) { return true; } } var key = StringUtility.Contact(PlayerDatas.Instance.baseData.PlayerID, "_", npcId); var timeString = LocalSave.GetString(key); if (string.IsNullOrEmpty(timeString)) { return false; } else { var tempTime = DateTime.Now; if (DateTime.TryParse(timeString, out tempTime)) { if ((int)((DateTime.Now - tempTime).TotalSeconds) < totalCd) { bossKillTimes[npcId] = tempTime; return true; } } } return false; } private void OnAccountSwitch() { m_MakeJiaLineTimes = 0; bossKillTimes.Clear(); ClearBossRecord(); ClearStoneRecord(); } class NpcSawRecorder { public int npcId { get; private set; } int m_LineId = -1; public int lineId { get { return m_LineId; } private set { m_LineId = value; } } float m_Time = -99999; public float time { get { return m_Time; } private set { m_Time = value; } } public void Record(int npcId, int lineId, float time) { this.npcId = npcId; this.lineId = lineId; this.time = time; } public void Clear() { this.npcId = 0; this.lineId = -1; this.time = -99999; } public bool HasSawRecently(int npcId, float second) { if (this.npcId != npcId) { return false; } if (Time.realtimeSinceStartup - this.time > 60) { return false; } return true; } public bool HasSawRecently(int npcId, int lineId, float second) { if (this.npcId != npcId) { return false; } if (this.lineId != lineId) { return false; } if (Time.realtimeSinceStartup - this.time > 60) { return false; } return true; } } }