yyl
18 小时以前 725b7b2374f43582a2d78b2cae3f8303359651b8
Main/System/TianziBillborad/TianziBillboradManager.cs
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using LitJson;
using UnityEngine;
public class TianziBillboradManager : GameSystemManager<TianziBillboradManager>
{
    public readonly int rankType = 2;    // 榜单类型
@@ -13,10 +14,13 @@
    public ulong todayHurt;    //本考验今日最大伤害
    public bool isSkipSweepTip = false;
    public event Action UpdateTianziKYInfoExent;
    public Action PlayUiEffectAction;
    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;
@@ -30,6 +34,8 @@
    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;
@@ -44,9 +50,86 @@
        todayLineID = 0;
        historyHurt = 0;
        todayHurt = 0;
        ClearBar();
        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()
    {
@@ -248,15 +331,16 @@
        if (vNetData.Msg == null)
            return;
        JsonData jsonData = JsonMapper.ToObject(vNetData.Msg);
        int isSweep = int.Parse(jsonData["isSweep"].ToString());
        int dataMapID = int.Parse(jsonData["dataMapID"].ToString());
        if (dataMapID != DataMapID)
            return;
        int isSweep = int.Parse(jsonData["isSweep"].ToString());
        totalHurtSweep = ulong.Parse(jsonData["totalHurt"].ToString());
        int lineID = int.Parse(jsonData["lineID"].ToString());
        todayHurtTotalSweep = ulong.Parse(jsonData["todayHurtTotal"].ToString());
        int isPass = int.Parse(jsonData["isPass"].ToString());
        if (dataMapID != DataMapID)
            return;
        isSweepVictory = true;
        itemInfos.Clear();