using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
|
using System;
|
using vnxbqy.UI;
|
|
|
public class BossJiaLineUtility : Singleton<BossJiaLineUtility>
|
|
{
|
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<FindPreciousModel>(); } }
|
Dictionary<int, DateTime> bossKillTimes = new Dictionary<int, DateTime>();
|
|
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;
|
}
|
|
}
|
|
}
|