0312 装备拾取调整:单武将攻击先掉落装备,不管中间发生几次攻击,几次技能 几次掉落都不弹装备,待下一个武将(含敌我)开始攻击前处理装备
9个文件已修改
132 ■■■■ 已修改文件
Main/Common/EventName.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleField/StoryBattleField.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/RecordPlayer/RecordAction.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/RecordPlayer/RecordPlayer.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Equip/EquipExchangeCell.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Equip/EquipModel.cs 79 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Equip/FloorItemCell.cs 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Equip/ItemsOnFloor.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Main/AutoFightModel.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Common/EventName.cs
@@ -15,4 +15,5 @@
    public const string BATTLE_CAST_SKILL = "BATTLE_CAST_SKILL";//施放技能
    
    public const string BATTLE_END = "BATTLE_END";//战斗结束
    public const string RECORDPLAYER_END = "RECORDPLAYER_END"; //战斗小片段结束
}
Main/System/Battle/BattleField/StoryBattleField.cs
@@ -154,6 +154,7 @@
        base.OnSettlement(turnFightStateData);
        if (battleState == StoryBattleState.Battle)
        {
            EquipModel.Instance.CalcAllFloorItems();
            BattleManager.Instance.MainFightRequest(4);
        }
    }
@@ -163,6 +164,7 @@
    {
        base.HaveRest();
        battleState = StoryBattleState.Break;
        EquipModel.Instance.CalcAllFloorItems();
        BattleManager.Instance.MainFightRequest(0);
    }
@@ -220,13 +222,7 @@
                //再检查一次有没装备未处理
                if (PackManager.Instance.GetSinglePack(PackType.DropItem).GetItems().Count > 0)
                {
                    //构建所有物品
                    List<int> dropList = new List<int>();
                    foreach (var item in PackManager.Instance.GetSinglePack(PackType.DropItem).GetItems())
                    {
                        dropList.Add(item.gridIndex);
                    }
                    EquipModel.Instance.NotifyItemDrop(dropList, null);
                    EquipModel.Instance.CalcAllFloorItems();
                    BattleDebug.LogError("RequestFight: 装备未处理");
                    return false;
                }
Main/System/Battle/RecordPlayer/RecordAction.cs
@@ -38,4 +38,12 @@
        isFinish = true;
    }
    public virtual string GetBattleFieldGuid()
    {
        if (battleField == null)
        {
            return string.Empty;
        }
        return battleField.guid;
    }
}
Main/System/Battle/RecordPlayer/RecordPlayer.cs
@@ -149,10 +149,12 @@
        if (currentRecordAction != null && currentRecordAction.IsFinished())
        {
            var guid = currentRecordAction.GetBattleFieldGuid();
            BattleDebug.LogError("record action " + currentRecordAction.GetType() + " play finished");
            currentRecordAction = null;
            isWaitingNextAction = true;
            waitTimer = 0f;
            EventBroadcast.Instance.Broadcast<string>(EventName.RECORDPLAYER_END, guid);
            return;
        }
Main/System/Equip/EquipExchangeCell.cs
@@ -172,6 +172,21 @@
            uieffect.transform.localScale = new Vector3(0.98f, bgRect.rect.height / uieffect.GetComponent<RectTransform>().rect.height, 1);
            uieffect.Play();
        }
        //二次处理放大效果
        await UniTask.Delay(100);
        if (effectID == 0)
        {
            uieffect.Stop();
        }
        else
        {
            uieffect.Stop();
            uieffect.effectId = effectID;
            //计算高度缩放比例 特效显示依赖rect的排版
            uieffect.transform.localScale = new Vector3(0.98f, bgRect.rect.height / uieffect.GetComponent<RectTransform>().rect.height, 1);
            uieffect.Play();
        }
    }
Main/System/Equip/EquipModel.cs
@@ -27,12 +27,15 @@
    public List<int> lastDropIndexs = new List<int>(); //上一次掉落物品索引
    int lastAttackHeroID = 0;
    public override void Init()
    {
        DTCA814_tagMCMakeItemAnswer.MakeItemAnswerEvent += OnEquipResult;
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += BeforePlayerDataInitialize;
        EventBroadcast.Instance.RemoveListener<string, BattleDrops, Action>(EventName.BATTLE_DROP_ITEMS, OnDropEvent);
        EventBroadcast.Instance.AddListener<string, BattleDrops, Action>(EventName.BATTLE_DROP_ITEMS, OnDropEvent);
        EventBroadcast.Instance.AddListener<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, OnSkillCast);
        EventBroadcast.Instance.AddListener<string>(EventName.RECORDPLAYER_END, RecordPlayerEnd);
        ParseConfig();
    }
@@ -41,6 +44,8 @@
        DTCA814_tagMCMakeItemAnswer.MakeItemAnswerEvent -= OnEquipResult;
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin -= BeforePlayerDataInitialize;
        EventBroadcast.Instance.RemoveListener<string, BattleDrops, Action>(EventName.BATTLE_DROP_ITEMS, OnDropEvent);
        EventBroadcast.Instance.RemoveListener<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, OnSkillCast);
        EventBroadcast.Instance.RemoveListener<string>(EventName.RECORDPLAYER_END, RecordPlayerEnd);
    }
@@ -82,6 +87,7 @@
        return -1;
    }
    //表现掉落和拾取分离开,先掉落等本武将回合完全结束再拾取
    void OnDropEvent(string guid, BattleDrops drops, Action action)
    {
        if (!string.IsNullOrEmpty(guid))
@@ -93,21 +99,57 @@
        action?.Invoke();
    }
    //拾取时机为下一武将(含敌我)攻击 或者 本轮结算(MainFightRequest 前)
    void OnSkillCast(string guid, SkillConfig skillConfig, TeamHero teamHero)
    {
        bool checkDrop = false;
        if (!string.IsNullOrEmpty(guid))
            return;
        //防范回收报错
        if (teamHero == null)
            checkDrop = true;
        //只通知玩家武将的战斗
        else if (teamHero.NPCID != 0)
            checkDrop = true;
        else if (teamHero.heroId != lastAttackHeroID)
        {
            lastAttackHeroID = teamHero.heroId;
            checkDrop = true;
        }
        if (checkDrop)
        {
            CalcAllFloorItems();
        }
    }
    void RecordPlayerEnd(string guid)
    {
        if (!string.IsNullOrEmpty(guid))
            return;
        CalcAllFloorItems();
    }
    //掉落通知
    public void NotifyItemDrop(List<int> indexs, RectTransform rect)
    {
        // 界面不显示则立即处理
        if (!UIManager.Instance.IsOpened<HomeWin>())
        {
            for (int i = 0; i < indexs.Count; i++)
            {
                CalcFloorEquip(indexs[i]);
            }
        }
        else
        {
        // if (!UIManager.Instance.IsOpened<HomeWin>())
        // {
        //     for (int i = 0; i < indexs.Count; i++)
        //     {
        //         CalcFloorEquip(indexs[i]);
        //     }
        // }
        // else
        // {
        //     OnItemDropEvent?.Invoke(indexs, rect);
        // }
            OnItemDropEvent?.Invoke(indexs, rect);
        }
    }
    public void CalcFloorEquip(int itemIndex)
@@ -119,7 +161,6 @@
        if (item == null)
            return;
        //非自动模式下,筛选装备打开装备操作界面
        if (IsEquip(item))
        {
@@ -131,6 +172,20 @@
        }
    }
    //处理所有掉落的物品
    public void CalcAllFloorItems()
    {
        if (PackManager.Instance.GetSinglePack(PackType.DropItem).GetItems().Count == 0)
        {
            return;
        }
        //构建所有物品
        foreach (var item in PackManager.Instance.GetSinglePack(PackType.DropItem).GetItems())
        {
            CalcFloorEquip(item.gridIndex);
        }
    }
    private void OnEquipResult(HA814_tagMCMakeItemAnswer info)
    {
        if (info.MakeType != (int)MakeType.EquipOP)
Main/System/Equip/FloorItemCell.cs
@@ -62,9 +62,6 @@
        else
        {
            this.transform.localPosition = startPos;
            // 手动点击或者自动模式下处理
            // EquipModel.Instance.CalcFloorEquip(itemIndex);
            // itemIndex = -1;
        }
    }
@@ -76,15 +73,11 @@
    void CompleteDrop()
    {
        EquipModel.Instance.CalcFloorEquip(itemIndex);
        // 掉落后直接拾取 改成了本武将攻击完全结束后或者回合结束后
        // EquipModel.Instance.CalcFloorEquip(itemIndex);
        isPlaying = false;
        itemIndex = -1;
    }
    // void OnDisable()
    // {
    //     CompleteDrop();
    // }
}
Main/System/Equip/ItemsOnFloor.cs
@@ -40,7 +40,8 @@
    //主界面切换模式触发
    private void OnEnable()
    {
        //bug记录:再防范一次,重登销毁后意外的注册了多次,后续检查返回登录界面再进入游戏的情况
        //bug记录:因为断线重连直接销毁界面导致OnEnable二次触发中间没有触发OnDisable,出现多次掉落的现象
        // 已经调整断线重连逻辑,后续观察返回登录界面情况
        EquipModel.Instance.OnItemDropEvent -= NotifyPlayItemDrop;
        PackManager.Instance.DeleteItemEvent -= DeleteDropItem;
        //主界面打开和显隐都要刷新
@@ -110,7 +111,7 @@
            if (item.isActiveAndEnabled)
            {
                //防范一直播放掉落动画,某种原因被打断了后续的界面显示,这里直接触发打开界面
                EquipModel.Instance.CalcFloorEquip(i);
                // EquipModel.Instance.CalcFloorEquip(i);
                continue;
            }
Main/System/Main/AutoFightModel.cs
@@ -95,7 +95,6 @@
        ParseConfig();
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += BeforePlayerInit;
        BattleManager.Instance.onBattleFieldCreate += OnCreateBattleField;
        EventBroadcast.Instance.RemoveListener<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, OnSkillCast);
        EventBroadcast.Instance.AddListener<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, OnSkillCast);
    }