| | |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using LitJson; |
| | | using UnityEngine; |
| | | public class TianziBillboradManager : GameSystemManager<TianziBillboradManager> |
| | | { |
| | | public readonly int rankType = 2; // 榜单类型 |
| | |
| | | public ulong historyHurt; //本考验历史最大伤害 |
| | | public ulong todayHurt; //本考验今日最大伤害 |
| | | public bool isSkipSweepTip = false; |
| | | |
| | | public ulong loaclNowHunt = 0; |
| | | public ulong loaclAllHunt = 0; |
| | | public ulong loaclMaxHp = 0; |
| | | public int loaclHpNum = 0; |
| | | public event Action UpdateTianziKYInfoExent; |
| | | public Dictionary<int, int[][]> rankAwards;// 每日排行奖励 {"名次":[[物品ID, 个数,是否拍品], ...], ...} 配置的名次key,自动按小于等于对应名次给奖励 |
| | | public Redpoint parentRedpoint = new Redpoint(MainRedDot.MainChallengeRedpoint, MainRedDot.TianziBillboradRepoint); |
| | | public override void Init() |
| | | { |
| | | EventBroadcast.Instance.AddListener<BattleDmgInfo>(EventName.BATTLE_DAMAGE_TAKEN, OnDamageTaken); |
| | | EventBroadcast.Instance.AddListener<string, JsonData>(EventName.BATTLE_END, OnSettlement); |
| | | DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitializeEvent; |
| | | DungeonManager.Instance.UpdateFBInfoChangeEvent += OnUpdateFBInfoChangeEvent; |
| | | AdsManager.Instance.OnAdsInfoListUpdateEvent += OnAdsInfoListUpdateEvent; |
| | |
| | | |
| | | public override void Release() |
| | | { |
| | | EventBroadcast.Instance.RemoveListener<BattleDmgInfo>(EventName.BATTLE_DAMAGE_TAKEN, OnDamageTaken); |
| | | EventBroadcast.Instance.RemoveListener<string, JsonData>(EventName.BATTLE_END, OnSettlement); |
| | | DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitializeEvent; |
| | | DungeonManager.Instance.UpdateFBInfoChangeEvent -= OnUpdateFBInfoChangeEvent; |
| | | AdsManager.Instance.OnAdsInfoListUpdateEvent -= OnAdsInfoListUpdateEvent; |
| | | FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent; |
| | | TimeMgr.Instance.OnDayEvent -= OnDayEvent; |
| | | UpdateTianziKYInfoExent -= OnUpdateTianziKYInfoExent; |
| | | } |
| | | |
| | | public void ClearBar() |
| | | { |
| | | loaclNowHunt = 0; |
| | | loaclAllHunt = 0; |
| | | loaclMaxHp = 0; |
| | | loaclHpNum = 0; |
| | | } |
| | | |
| | | private void OnBeforePlayerDataInitializeEvent() |
| | |
| | | isSkipSweepTip = false; |
| | | } |
| | | |
| | | public int battleLineID; //正在战斗中的LineID |
| | | public ulong loaclNowHunt = 0; |
| | | public ulong loaclAllHunt = 0; |
| | | public ulong loaclMaxHp = 0; |
| | | public int loaclHpNum = 0; |
| | | public event Action<ulong, ulong, int> OnUpdateBarInfoEvent; |
| | | |
| | | private void OnDamageTaken(BattleDmgInfo info) |
| | | { |
| | | BattleField battleField = BattleManager.Instance.GetBattleFieldByMapID(DataMapID); |
| | | if (info == null || battleField == null || battleField.guid != info.battleFieldGuid) |
| | | return; |
| | | BattleObject boss = battleField.FindBoss(); |
| | | if (boss == null || boss.ObjID != info.hurtObj.ObjID) |
| | | return; |
| | | ShowBar(info); |
| | | } |
| | | |
| | | public void ShowBar(BattleDmgInfo info) |
| | | { |
| | | if (info == null) |
| | | return; |
| | | //闪避和回血类不算伤害 |
| | | if (info.IsType(DamageType.Dodge) || info.IsType(DamageType.Recovery)) |
| | | return; |
| | | var damages = info.damageList; |
| | | for (int i = 0; i < damages.Count; i++) |
| | | { |
| | | ulong hunt = (ulong)damages[i]; |
| | | loaclAllHunt += hunt; |
| | | if (!TryGetBossConfig(DataMapID, battleLineID, out DungeonConfig dungeonConfig, out NPCLineupConfig npcLineupConfig, out NPCConfig npcConfig)) |
| | | return; |
| | | int bossId = npcConfig.NPCID; |
| | | if (!TianziConfig.TryGetTianziConfigByBossIDAndDamage(bossId, loaclAllHunt, out TianziConfig tianziConfig)) |
| | | return; |
| | | loaclMaxHp = (ulong)tianziConfig.MaxHP; |
| | | loaclHpNum = tianziConfig.HPNum; |
| | | loaclNowHunt = TianziConfig.GetCurrentHPDamage(bossId, loaclAllHunt); |
| | | OnUpdateBarInfoEvent?.Invoke(loaclNowHunt, loaclMaxHp, loaclHpNum); |
| | | Debug.Log($"TianziDamageBar hunt {hunt} loaclAllHunt {loaclNowHunt} loaclMaxHp {loaclMaxHp} loaclHpNum {loaclHpNum} 时间: {DateTime.Now:HH:mm:ss}"); |
| | | } |
| | | } |
| | | |
| | | public void ClearBar() |
| | | { |
| | | battleLineID = 0; |
| | | loaclNowHunt = 0; |
| | | loaclAllHunt = 0; |
| | | loaclMaxHp = 0; |
| | | loaclHpNum = 0; |
| | | } |
| | | private void OnSettlement(string _guid, JsonData data) |
| | | { |
| | | if (string.Empty == _guid) |
| | | return; |
| | | var battle = BattleManager.Instance.GetBattleField(_guid); |
| | | if (battle == null) |
| | | return; |
| | | var battleName = battle.ToString(); |
| | | if (battleName != "TianziBillboradBattleField") |
| | | return; |
| | | if (data == null || !data.ContainsKey("totalHurt")) |
| | | return; |
| | | ulong totalHurt = ulong.Parse(data["totalHurt"].ToString()); |
| | | if (!TryGetBossConfig(DataMapID, battleLineID, out DungeonConfig dungeonConfig, out NPCLineupConfig npcLineupConfig, out NPCConfig npcConfig)) |
| | | return; |
| | | int bossId = npcConfig.NPCID; |
| | | if (!TianziConfig.TryGetTianziConfigByBossIDAndDamage(bossId, totalHurt, out TianziConfig tianziConfig)) |
| | | return; |
| | | ulong endNowHunt = TianziConfig.GetCurrentHPDamage(bossId, totalHurt); |
| | | ulong endMaxHp = (ulong)tianziConfig.MaxHP; |
| | | int endHpNum = tianziConfig.HPNum; |
| | | OnUpdateBarInfoEvent?.Invoke(endNowHunt, endMaxHp, endHpNum); |
| | | Debug.Log($"TianziDamageBar end nowHpNum {endHpNum} nowHunt {endNowHunt} nowHpMax{endMaxHp} 时间: {DateTime.Now:HH:mm:ss}"); |
| | | } |
| | | |
| | | |
| | | private void OnUpdateTianziKYInfoExent() |
| | | { |
| | | UpdateRedPoint(); |