少年修仙传客户端代码仓库
hch
2024-12-18 0cb75a653a646d4afc3b656985b9964efec93032
10337 【越南】【英文】【BT】爬塔通关类的支持一键过关

# Conflicts:
# System/GeneralConfig/GeneralDefine.cs
17个文件已修改
1个文件已添加
3个文件已删除
1 文件已重命名
668 ■■■■ 已修改文件
Core/NetworkPackage/ClientPack/ClientToMapServer/CB1_ActionMap/CB108_tagCMFBQuickPass.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ClientPack/ClientToMapServer/CB1_ActionMap/CB108_tagCMFBQuickPass.cs.meta 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ClientPack/ClientToMapServer/CB1_ActionMap/CB108_tagCMRefreshCustomFBPrize.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ClientPack/ClientToMapServer/CB1_ActionMap/CB109_tagCMGiveCustomFBPrize.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ClientPack/ClientToMapServer/CB1_ActionMap/CB109_tagCMGiveCustomFBPrize.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/DungeonData.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Dungeon/DungeonModel.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Realm/RealmModel.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Realm/RealmTowerFloorCell.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Realm/RealmTowerWin.cs 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Realm/RealmWin.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/RuneTower/RuneTowerBehaviour.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/RuneTower/RuneTowerModel.cs 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/RuneTower/RuneTowerWin.cs 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/RuneTower/TowerFloorBehaviour.cs 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/Skill/ScrollerController.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/SkyTower/SkyTowerBehaviour.cs 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/SkyTower/SkyTowerFloorBehaviour.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/SkyTower/SkyTowerModel.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/SkyTower/SkyTowerWin.cs 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI/Decorate/Tweens/PositionTween.cs 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI/Decorate/Tweens/Tween.cs 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ClientPack/ClientToMapServer/CB1_ActionMap/CB108_tagCMFBQuickPass.cs
New file
@@ -0,0 +1,20 @@
using UnityEngine;
using System.Collections;
// B1 08 快速一键过关副本 #tagCMFBQuickPass
public class CB108_tagCMFBQuickPass : GameNetPackBasic {
    public uint MapID;
    public ushort LineID;
    public CB108_tagCMFBQuickPass () {
        combineCmd = (ushort)0x03FE;
        _cmd = (ushort)0xB108;
    }
    public override void WriteToBytes () {
        WriteBytes (MapID, NetDataType.DWORD);
        WriteBytes (LineID, NetDataType.WORD);
    }
}
Core/NetworkPackage/ClientPack/ClientToMapServer/CB1_ActionMap/CB108_tagCMFBQuickPass.cs.meta
File was renamed from Core/NetworkPackage/ClientPack/ClientToMapServer/CB1_ActionMap/CB108_tagCMRefreshCustomFBPrize.cs.meta
@@ -1,8 +1,7 @@
fileFormatVersion: 2
guid: 82b61f8b44b0c6f459ef79578d4357af
timeCreated: 1555060380
licenseType: Pro
guid: 2f7ba87dc3227bd47865a23a487d44c2
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
Core/NetworkPackage/ClientPack/ClientToMapServer/CB1_ActionMap/CB108_tagCMRefreshCustomFBPrize.cs
File was deleted
Core/NetworkPackage/ClientPack/ClientToMapServer/CB1_ActionMap/CB109_tagCMGiveCustomFBPrize.cs
File was deleted
Core/NetworkPackage/ClientPack/ClientToMapServer/CB1_ActionMap/CB109_tagCMGiveCustomFBPrize.cs.meta
File was deleted
System/Dungeon/DungeonData.cs
@@ -42,6 +42,7 @@
        public int curOrder; // 之前排名
        public int updOrder; //更新后排名
        public int quickPass; //快速通关
        public int isSweep;
        public int dataMapID;
        public int lineID;
System/Dungeon/DungeonModel.cs
@@ -1228,12 +1228,27 @@
                        break;
                }
            }
            else if (m_DungeonResult.quickPass == 1)
            {
                //switch (m_DungeonResult.dataMapID)
                //{
                //    case RuneTowerModel.RUNETOWER_MAPID:
                //        WindowCenter.Instance.Open<DungeonRuneTowerVictoryWin>();
                //        break;
                //    case SkyTowerModel.DATA_MAPID:
                //        WindowCenter.Instance.Open<SkyTowerVictoryWin>();
                //        break;
                //    case RealmModel.Tower_MapId:
                //        WindowCenter.Instance.Open<RealmTowerVictoryWin>();
                //        break;
                //}
            }
            else
            {
                if (m_DungeonResult.dataMapID != RuneTowerModel.RUNETOWER_MAPID &&
                    m_DungeonResult.dataMapID != SkyTowerModel.DATA_MAPID &&
                    m_DungeonResult.dataMapID != RealmModel.Tower_MapId)
                {
                {
                    WindowJumpMgr.Instance.ClearJumpData();
                    WindowCenter.Instance.CloseAll(WindowCenter.CloseAllIgnoreType.BaseAndCustom);
                    WindowCenter.Instance.Open<MainInterfaceWin>();
@@ -1783,6 +1798,18 @@
            }
        }
        //个人等副本不让使用雷诛,容易造成数据冲突
        public bool CanFlashKill()
        {
            var mapId = PlayerDatas.Instance.baseData.MapID;
            var mapConfig = MapConfig.Get(mapId);
            if (mapConfig.MapFBType == (int)MapType.SingleFB || mapConfig.MapFBType == (int)MapType.VSRoom)
            {
                return false;
            }
            return true;
        }
    }
}
System/Realm/RealmModel.cs
@@ -143,6 +143,13 @@
        public event Action realmExpRefresh;
        public event Action<bool> xxzlStateRefresh;
        public event Action<int> OnFlashOverEvent;
        public void OnFlashOver(int state)
        {
            if (OnFlashOverEvent != null)
                OnFlashOverEvent(state);
        }
        EquipModel equipModel { get { return ModelCenter.Instance.GetModel<EquipModel>(); } }
        EquipStarModel equipStarModel { get { return ModelCenter.Instance.GetModel<EquipStarModel>(); } }
        PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
System/Realm/RealmTowerFloorCell.cs
@@ -16,8 +16,11 @@
        [SerializeField] Image m_Passed;
        [SerializeField] TextEx m_FloorName;
        [SerializeField] Transform m_SelectImg;
        [SerializeField] UIFrame m_FlashFrame;
        [SerializeField] PositionTween m_FloorTween;
        RealmModel realmModel { get { return ModelCenter.Instance.GetModel<RealmModel>(); } }
        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
        public void Display(int _floorId)
        {
@@ -26,6 +29,32 @@
            m_Challenge.SetActive(realmModel.currentFloor == _floorId);
            m_Passed.SetActive(realmModel.currentFloor > _floorId);
            m_SelectImg.SetActive(realmModel.selectFloorID == _floorId);
            dungeonModel.onDungeonResultEvent -= OnDungeonResultEvent;
            m_FlashFrame.SetActive(false);
            if (realmModel.currentFloor == _floorId && dungeonModel.CanFlashKill())
            {
                dungeonModel.onDungeonResultEvent += OnDungeonResultEvent;
            }
        }
        private void OnDisable()
        {
            dungeonModel.onDungeonResultEvent -= OnDungeonResultEvent;
        }
        private void OnDungeonResultEvent()
        {
            if (dungeonModel.dungeonResult.quickPass == 1 && dungeonModel.dungeonResult.dataMapID == RealmModel.Tower_MapId)
            {
                m_FlashFrame.SetActive(true);
                m_FloorTween.Play(() => {
                    m_FlashFrame.SetActive(false);
                    realmModel.OnFlashOver(1);
                });
                SoundPlayer.Instance.PlayUIAudio(857);
            }
        }
    }
System/Realm/RealmTowerWin.cs
@@ -23,8 +23,11 @@
        [SerializeField] TextEx m_TopNow;
        [SerializeField] TextEx m_TowerName;
        [SerializeField] Button m_Close;
        [SerializeField] Button m_FlashKill;
        [SerializeField] Text m_FlashKillCount;
        RealmModel realmModel { get { return ModelCenter.Instance.GetModel<RealmModel>(); } }
        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
        #region Built-in
        protected override void BindController()
@@ -40,8 +43,8 @@
        protected override void OnPreOpen()
        {
            m_TowerBehaviour.OnRefreshCell += RefreshCell;
            realmModel.OnTowerPassEvent += OnTowerPassEvent;
            //realmModel.OnTowerPassEvent += OnTowerPassEvent;
            realmModel.OnFlashOverEvent += OnFlashOverEvent;
            Display();
            OnCreateScroller();
        }
@@ -53,7 +56,8 @@
        protected override void OnPreClose()
        {
            m_TowerBehaviour.OnRefreshCell -= RefreshCell;
            realmModel.OnTowerPassEvent -= OnTowerPassEvent;
            //realmModel.OnTowerPassEvent -= OnTowerPassEvent;
            realmModel.OnFlashOverEvent -= OnFlashOverEvent;
        }
        protected override void OnAfterClose()
@@ -65,6 +69,29 @@
        }
        #endregion
        void OnFlashOverEvent(int state)
        {
            var floors = RealmTowerConfig.GetFloorsByFloorID(realmModel.currentFloor);
            m_TowerBehaviour.MoveToIndex(floors.Count - floors.IndexOf(realmModel.currentFloor) - 3, 0.2f, EnhancedScroller.TweenType.easeInQuad);
            Clock.AlarmAfter(0.3f, () => {
                OnTowerPassEvent();
                if (dungeonModel.dungeonResult.quickPass == 1 && dungeonModel.dungeonResult.dataMapID == RealmModel.Tower_MapId)
                {
                    var serveritems = dungeonModel.dungeonResult.itemInfo;
                    if (serveritems != null)
                    {
                        List<Item> items = new List<Item>();
                        foreach (var item in serveritems)
                        {
                            items.Add(new Item(item.ItemID, (ulong)item.Count));
                        }
                        ItemLogicUtility.Instance.ShowGetItem(items, seconds: 0);
                    }
                }
            });
        }
        void Display()
@@ -92,6 +119,68 @@
            m_Challenge.SetActive(realmModel.currentFloor == realmModel.selectFloorID);
            m_TopNow.SetActive(realmModel.currentFloor != realmModel.selectFloorID);
            m_TowerName.text = Language.Get("RealmTower4", RealmConfig.Get(RealmConfig.Get(RealmTowerConfig.Get(realmModel.selectFloorID).NeedRealmLV).LvLarge).Name);
            ShowBtns();
        }
        void ShowBtns()
        {
            int count = GetFlashKillCount();
            if (count == 0)
            {
                m_Challenge.SetActive(realmModel.currentFloor == realmModel.selectFloorID);
                m_FlashKill.SetActive(false);
            }
            else
            {
                m_Challenge.SetActive(false);
                m_FlashKill.SetActive(true);
                m_FlashKillCount.text = count == 1 ? string.Empty : count.ToString();
                m_FlashKill.AddListener(() => {
                    if (!dungeonModel.CanFlashKill())
                    {
                        SysNotifyMgr.Instance.ShowTip("InFBCanotDo");
                        return;
                    }
                    var pack = new CB108_tagCMFBQuickPass();
                    pack.MapID = RealmModel.Tower_MapId;
                    pack.LineID = (ushort)(realmModel.currentFloor + count - 1);
                    GameNetSystem.Instance.SendInfo(pack);
                });
            }
        }
        // 前20层不用雷诛
        int GetFlashKillCount()
        {
            int count = 0;
            if (realmModel.currentFloor <= 20)
                return count;
            for (int i = 0; i < GeneralDefine.flashKillMaxCount; i++)
            {
                var config = RealmTowerConfig.Get(realmModel.currentFloor + i);
                if (config == null)
                    break;
                if (PlayerDatas.Instance.baseData.realmLevel < config.NeedRealmLV)
                    break;
                var fightPower = NPCExConfig.Get(config.BossID).SuppressFightPower;
                if (PlayerDatas.Instance.baseData.FightPoint >= (ulong)fightPower * GeneralDefine.fightPowerMore)
                {
                    count++;
                }
                else
                {
                    //遇到第一个卡点就停止
                    break;
                }
            }
            return count;
        }
@@ -116,7 +205,7 @@
            m_TowerBehaviour.AddCell(ScrollerDataType.Tail, 0);
            m_TowerBehaviour.Restart();
            m_TowerBehaviour.JumpIndex(floors.Count - floors.IndexOf(realmModel.selectFloorID) - 1);
            m_TowerBehaviour.JumpIndex(floors.Count - floors.IndexOf(realmModel.selectFloorID) - 3);
        }
System/Realm/RealmWin.cs
@@ -132,7 +132,7 @@
            });
            towerBtn.AddListener(() => { 
                WindowJumpMgr.Instance.WindowJumpToEx("RealmTowerWin");
                WindowCenter.Instance.Open<RealmTowerWin>();
            });
        }
System/RuneTower/RuneTowerBehaviour.cs
@@ -94,6 +94,7 @@
                m_Tower.verticalNormalizedPosition = Mathf.SmoothDamp(m_Tower.verticalNormalizedPosition, targetNormalizePosition, ref refNormalizePosition, 0.1f);
                yield return null;
            }
            model.OnFlashOver(2);
        }
        IEnumerator Co_CollapseShow(int _towerId)
System/RuneTower/RuneTowerModel.cs
@@ -103,9 +103,24 @@
        public event Action<int> selectedFloorEvent;
        public event Action<int> sweepBoughtTimesChangeEvent;
        public event Action<int> OnFlashOverEvent;
        int lastFlashOverState;
        public void OnFlashOver(int state)
        {
            if (lastFlashOverState + 1 != state)
                return;
            lastFlashOverState = state;
            if (lastFlashOverState == 2)
                lastFlashOverState = 0;
            if (OnFlashOverEvent != null)
                OnFlashOverEvent(state);
        }
        RuneModel runeModel { get { return ModelCenter.Instance.GetModel<RuneModel>(); } }
        DailyQuestModel dailyModel { get { return ModelCenter.Instance.GetModel<DailyQuestModel>(); } }
        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
        Redpoint towerRedpoint = new Redpoint(37);
        Redpoint runeRedpoint = new Redpoint(37, 37002);
@@ -358,15 +373,38 @@
            if (serverInited && runeModel.passRuneTowerFloor != 0)
            {
                var config = RuneTowerFloorConfig.Get((int)runeModel.passRuneTowerFloor);
                if (!allTowerCompleted && config.TowerId != currentTower && config.TowerId > showedUnLockTower)
                {
                    wannaShowUnlockTower = config.TowerId;
                }
            }
            if (dungeonModel.dungeonResult.quickPass == 1 && dungeonModel.dungeonResult.dataMapID == RUNETOWER_MAPID)
                return;
            if (serverInited && runeModel.passRuneTowerFloor != 0)
            {
                var config = RuneTowerFloorConfig.Get((int)runeModel.passRuneTowerFloor);
                if (config.UnLockRune > 0 && runeModel.passRuneTowerFloor > showedPassFloor)
                {
                    wannaShowPassFloor = runeModel.passRuneTowerFloor;
                    PopupWindowsProcessor.Instance.Add("RuneNewGotWin");
                }
            }
                if (!allTowerCompleted && config.TowerId != currentTower && config.TowerId > showedUnLockTower)
        }
        //立即显示
        public void OnPassNewTowerFloorShowImme()
        {
            if (serverInited && runeModel.passRuneTowerFloor != 0)
            {
                var config = RuneTowerFloorConfig.Get((int)runeModel.passRuneTowerFloor);
                if (config.UnLockRune > 0 && runeModel.passRuneTowerFloor > showedPassFloor)
                {
                    wannaShowUnlockTower = config.TowerId;
                    wannaShowPassFloor = runeModel.passRuneTowerFloor;
                    WindowCenter.Instance.Open<RuneNewGotWin>();
                }
            }
@@ -434,6 +472,7 @@
        public void OnBeforePlayerDataInitialize()
        {
            serverInited = false;
            lastFlashOverState = 0;
        }
        private int RuneCompare(Item _lhs, Item _rhs)
System/RuneTower/RuneTowerWin.cs
@@ -50,6 +50,9 @@
        [SerializeField] Text m_SweepButtonDescription;
        [SerializeField] Text m_SweepTip;
        [SerializeField] Button m_FlashKill;
        [SerializeField] Text m_FlashKillCount;
        ShowType showType = ShowType.RewardInfo;
        int runeSweepActionId = 0;
@@ -89,6 +92,7 @@
            model.selectedFloorEvent += OnSelectedFloorChange;
            dailyQuestModel.dailyQuestProgressUpdateEvent += OnRuneTowerSweepResult;
            model.OnFlashOverEvent += OnFlashOverEvent;
        }
        protected override void OnAfterOpen()
@@ -105,6 +109,7 @@
            UI3DModelExhibition.Instance.StopShow();
            model.selectedFloorEvent -= OnSelectedFloorChange;
            dailyQuestModel.dailyQuestProgressUpdateEvent -= OnRuneTowerSweepResult;
            model.OnFlashOverEvent -= OnFlashOverEvent;
        }
        protected override void OnAfterClose()
@@ -119,17 +124,7 @@
        {
            base.OnActived();
            PopupRewardInfo();
            if (model.wannaShowUnlockTower > 0)
            {
                WindowCenter.Instance.uiRoot.eventSystem.enabled = false;
                m_Tower.TowerCollapseShow(model.wannaShowUnlockTower, model.currentTower, OnTowerCollapseCompleted);
            }
            else
            {
                m_Tower.Display(model.currentTower);
            }
            Display();
            CheckTaskGuide();
            CheckSweepGuide();
@@ -143,6 +138,118 @@
        }
        #endregion
        void Display()
        {
            PopupRewardInfo();
            if (model.wannaShowUnlockTower > 0)
            {
                WindowCenter.Instance.uiRoot.eventSystem.enabled = false;
                m_Tower.TowerCollapseShow(model.wannaShowUnlockTower, model.currentTower, OnTowerCollapseCompleted);
            }
            else
            {
                m_Tower.Display(model.currentTower);
            }
            ShowBtns();
        }
        void OnFlashOverEvent(int state)
        {
            if (state == 1)
            {
                if (model.wannaShowUnlockTower > 0)
                {
                    WindowCenter.Instance.uiRoot.eventSystem.enabled = false;
                    m_Tower.TowerCollapseShow(model.wannaShowUnlockTower, model.currentTower, OnTowerCollapseCompleted);
                }
                else
                {
                    m_Tower.Display(model.currentTower);
                }
            }
            else if (state == 2 && dungeonModel.dungeonResult.quickPass == 1 && dungeonModel.dungeonResult.dataMapID == RuneTowerModel.RUNETOWER_MAPID)
            {
                model.OnPassNewTowerFloorShowImme();
                var serveritems = dungeonModel.dungeonResult.itemInfo;
                if (serveritems != null)
                {
                    List<Item> items = new List<Item>();
                    foreach (var item in serveritems)
                    {
                        items.Add(new Item(item.ItemID, (ulong)item.Count));
                    }
                    ItemLogicUtility.Instance.ShowGetItem(items, seconds: 0);
                }
                model.selectedFloor = model.currentFloor;
                PopupRewardInfo();
                ShowBtns();
                runeSweepActionId = DailyQuestConfig.Get((int)DailyQuestType.RuneTowerSweep).RelatedID;
                OnRuneTowerSweepResult(runeSweepActionId);
            }
        }
        void ShowBtns()
        {
            int count = GetFlashKillCount();
            if (count == 0)
            {
                m_Challenge.SetActive(true);
                m_FlashKill.SetActive(false);
            }
            else
            {
                m_Challenge.SetActive(false);
                m_FlashKill.SetActive(true);
                m_FlashKillCount.text = count == 1 ? string.Empty : count.ToString();
                m_FlashKill.AddListener(() => {
                    if (!dungeonModel.CanFlashKill())
                    {
                        SysNotifyMgr.Instance.ShowTip("InFBCanotDo");
                        return;
                    }
                    var pack = new CB108_tagCMFBQuickPass();
                    pack.MapID = RuneTowerModel.RUNETOWER_MAPID;
                    pack.LineID = (ushort)(model.currentFloor + count - 1);
                    GameNetSystem.Instance.SendInfo(pack);
                });
            }
        }
        // 前2个塔不显示闪杀按钮,不跨塔雷洙
        int GetFlashKillCount()
        {
            int count = 0;
            if (model.currentTower <= 2)
                return count;
            for (int i = 0; i < GeneralDefine.flashKillMaxCount; i++)
            {
                var towerFloorConfig = RuneTowerFloorConfig.Get(model.selectedFloor + i);
                if (towerFloorConfig == null)
                    break;
                var fightPower = (ulong)NPCExConfig.Get(towerFloorConfig.BossId).SuppressFightPower;
                if (PlayerDatas.Instance.baseData.FightPoint >= fightPower * GeneralDefine.fightPowerMore)
                {
                    count++;
                }
                else
                {
                    //遇到第一个卡点就停止
                    break;
                }
            }
            return count;
        }
        private void ChallengeTower()
        {
@@ -255,7 +362,6 @@
        private void UpdateFightPower()
        {
            var towerConfig = RuneTowerConfig.Get(model.currentTower);
            var towerFloorConfig = RuneTowerFloorConfig.Get(model.selectedFloor);
            m_FigthPower.text = NPCExConfig.Get(towerFloorConfig.BossId).SuppressFightPower.ToString();
@@ -409,6 +515,7 @@
        private void OnTowerCollapseCompleted()
        {
            WindowCenter.Instance.uiRoot.eventSystem.enabled = true;
            model.OnFlashOver(2);
        }
        public enum ShowType
System/RuneTower/TowerFloorBehaviour.cs
@@ -24,17 +24,21 @@
        [SerializeField] Image m_Cover;
        [SerializeField] RectTransform m_ContainerSelected;
        [SerializeField] UIEffect m_GateEffect;
        [SerializeField] UIFrame m_FlashFrame;
        [SerializeField] PositionTween m_FloorTween;
        public RuneTowerBehaviour towerBehaviour;
        [HideInInspector] public RuneTowerBehaviour towerBehaviour;
        RectTransform m_RectTransform;
        RectTransform rectTransform { get { return m_RectTransform ?? (this.transform as RectTransform); } }
        RuneTowerModel model { get { return ModelCenter.Instance.GetModel<RuneTowerModel>(); } }
        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
        int floorId = 0;
        public void Display(int _floorId)
        {
            m_FlashFrame.SetActive(false);
            this.floorId = _floorId;
            var isOpened = this.model.currentFloor >= this.floorId;
@@ -54,14 +58,25 @@
            //}
            OnSelected(model.selectedFloor);
            model.selectedFloorEvent -= OnSelected;
            model.selectedFloorEvent += OnSelected;
            dungeonModel.onDungeonResultEvent -= OnDungeonResultEvent;
            //不在塔地图中增加雷诛功能
            if (this.model.currentFloor == this.floorId && dungeonModel.CanFlashKill())
            {
                dungeonModel.onDungeonResultEvent += OnDungeonResultEvent;
            }
        }
        public void Dispose()
        private void OnEnable()
        {
            model.selectedFloorEvent += OnSelected;
        }
        private void OnDisable()
        {
            model.selectedFloorEvent -= OnSelected;
            StopAllCoroutines();
        }
        private void Awake()
        {
@@ -79,6 +94,18 @@
            m_ContainerSelected.SetActive(floorId == _floor);
        }
        private void OnDungeonResultEvent()
        {
            if (dungeonModel.dungeonResult.quickPass == 1 && dungeonModel.dungeonResult.dataMapID == RuneTowerModel.RUNETOWER_MAPID)
            {
                m_FlashFrame.SetActive(true);
                m_FloorTween.Play(() => {
                    m_FlashFrame.SetActive(false);
                    model.OnFlashOver(1);
                });
                SoundPlayer.Instance.PlayUIAudio(857);
            }
        }
    }
}
System/Skill/ScrollerController.cs
@@ -429,6 +429,24 @@
        return m_Scorller.GetCellSize(_dataIndex);
    }
    //滑动过去
    public void MoveToIndex(int index, float _time, EnhancedScroller.TweenType _tweenType)
    {
        if (!inited)
        {
            cacheJump = index;
            return;
        }
        if ((index < 0 || index >= _data.Count) && !m_Scorller.Loop)
        {
            return;
        }
        var _size = m_Scorller.GetScrollPositionForDataIndex(index, EnhancedScroller.CellViewPositionEnum.Before);
        m_Scorller.Tween(_tweenType, _time, _size);
    }
    public void JumpIndex(float _delta, float _time, EnhancedScroller.TweenType _tweenType)
    {
        if (!inited)
System/SkyTower/SkyTowerBehaviour.cs
@@ -30,6 +30,7 @@
        bool hasCreateTowerResources = false;
        List<SkyTowerFloorBehaviour> floorBehaviours = new List<SkyTowerFloorBehaviour>();
        SkyTowerModel model { get { return ModelCenter.Instance.GetModel<SkyTowerModel>(); } }
        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
        public void Display()
        {
@@ -38,6 +39,52 @@
            scrollRectTransform.anchoredPosition = Vector2.zero;
            DisplayTowerBaseInfo();
            MoveToTargetFloor(model.currentFloor);
        }
        float speed = 0f;
        private void LateUpdate()
        {
            if (startFlashMove)
            {
                m_Tower.verticalNormalizedPosition = Mathf.SmoothDamp(m_Tower.verticalNormalizedPosition, 1, ref speed, 0.1f);
                if (m_Tower.verticalNormalizedPosition > 0.99f)
                {
                    startFlashMove = false;
                    if (dungeonModel.dungeonResult.quickPass == 1 && dungeonModel.dungeonResult.dataMapID == SkyTowerModel.DATA_MAPID)
                    {
                        var serveritems = dungeonModel.dungeonResult.itemInfo;
                        if (serveritems != null)
                        {
                            List<Item> items = new List<Item>();
                            foreach (var item in serveritems)
                            {
                                items.Add(new Item(item.ItemID, (ulong)item.Count));
                            }
                            ItemLogicUtility.Instance.ShowGetItem(items, seconds:0);
                        }
                    }
                    model.OnFlashOver(2);
                }
            }
        }
        private void OnEnable()
        {
            model.OnFlashOverEvent += OnFlashOverEvent;
            startFlashMove = false;
        }
        private void OnDisable()
        {
            model.OnFlashOverEvent -= OnFlashOverEvent;
            StopAllCoroutines();
        }
        bool startFlashMove = false;
        private void OnFlashOverEvent(int state)
        {
            if (state == 1)
                startFlashMove = true;
        }
        public void Dispose()
@@ -145,11 +192,6 @@
            bottomHeight = ((RectTransform)towerBottom.transform).rect.height;
            hasCreateTowerResources = true;
        }
        private void OnDisable()
        {
            StopAllCoroutines();
        }
    }
System/SkyTower/SkyTowerFloorBehaviour.cs
@@ -19,11 +19,14 @@
        [SerializeField] Image m_Cover;
        [SerializeField] RectTransform m_ContainerSelected;
        [SerializeField] UIEffect m_GateEffect;
        [SerializeField] UIFrame m_FlashFrame;
        [SerializeField] PositionTween m_FloorTween;
        RectTransform m_RectTransform;
        RectTransform rectTransform { get { return m_RectTransform ?? (this.transform as RectTransform); } }
        SkyTowerModel model { get { return ModelCenter.Instance.GetModel<SkyTowerModel>(); } }
        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
        int floorId = 0;
        public void Display(int _floorId)
@@ -34,12 +37,21 @@
            m_FloorName.text = config.floorName;
            m_Cover.SetActive(this.model.currentFloor > this.floorId);
            m_FloorTween.SetStartState();
            m_FloorTween.Stop();
            m_FlashFrame.SetActive(false);
            dungeonModel.onDungeonResultEvent -= OnDungeonResultEvent;
            if (this.model.currentFloor == this.floorId)
            {
                //m_GateEffect.Play();
                m_Challenge.SetActive(true);
                m_ContainerSelected.SetActive(true);
                m_FloorName.color = UIHelper.GetUIColor(TextColType.NavyYellow);
                if (dungeonModel.CanFlashKill())
                {
                    dungeonModel.onDungeonResultEvent += OnDungeonResultEvent;
                }
            }
            else
            {
@@ -54,7 +66,24 @@
        {
        }
        private void OnDisable()
        {
            dungeonModel.onDungeonResultEvent -= OnDungeonResultEvent;
            StopAllCoroutines();
        }
        private void OnDungeonResultEvent()
        {
            if (dungeonModel.dungeonResult.quickPass == 1 && dungeonModel.dungeonResult.dataMapID == SkyTowerModel.DATA_MAPID)
            {
                m_FlashFrame.SetActive(true);
                m_FloorTween.Play(() => {
                    m_FlashFrame.SetActive(false);
                    model.OnFlashOver(1);
                });
                SoundPlayer.Instance.PlayUIAudio(857);
            }
        }
    }
}
System/SkyTower/SkyTowerModel.cs
@@ -18,6 +18,7 @@
        readonly static int REDPOINTID_042 = 215081; //天星塔挑战全服5奖励
        public static int fullServerPassNum1 = 1;  //全服通关人数指标
        public static int fullServerPassNum2 = 5;
        public bool allPassed {
            get {
                return IsTopFloor(highestPassFloor);
@@ -52,7 +53,13 @@
            }
        }
        public event Action OnChooseFloorIndexChange;
        public event Action<int> OnFlashOverEvent;
        public void OnFlashOver(int state)
        {
            if (OnFlashOverEvent != null)
                OnFlashOverEvent(state);
        }
        bool redpointConfirm_01 = false;
        bool redpointConfirm_02 = false;
@@ -289,6 +296,7 @@
                ChallengeFloors.Add(int.Parse(floorID));
            }
            ChallengeFloors.Sort();
        }
        public bool IsRecommendNextLevel()
System/SkyTower/SkyTowerWin.cs
@@ -42,6 +42,8 @@
        [SerializeField] Button m_Challenge;
        [SerializeField] TextEx m_ChallengeTitle;
        [SerializeField] ImageEx m_ChallengeImage;
        [SerializeField] Button m_FlashKill;
        [SerializeField] Text m_FlashKillCount;
        [SerializeField] Button m_Rank;
        [SerializeField] Button m_Gift;
@@ -49,6 +51,7 @@
        SkyTowerModel model { get { return ModelCenter.Instance.GetModel<SkyTowerModel>(); } }
        RankModel rankModel { get { return ModelCenter.Instance.GetModel<RankModel>(); } }
        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
        ShowType showType = ShowType.None;
@@ -61,7 +64,12 @@
        {
            m_Challenge.SetListener(Challenge);
            m_ViewBoss.SetListener(() => { DisplayBossInfo(false); });
            m_ViewReward.SetListener(() => { DisplayRewardInfo(false); });
            m_ViewReward.SetListener(() => {
                if (showType == ShowType.Reward)
                {
                    return;
                }
                DisplayRewardInfo(false); });
            m_Rank.SetListener(() => {
                rankModel.jumpRankType = 6;
                WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.GameRank);
@@ -79,6 +87,7 @@
        protected override void OnPreOpen()
        {
            model.OnFlashOverEvent += OnFlashOverEvent;
            showType = ShowType.None;
            model.ConfirmRedpoint02();
        }
@@ -89,6 +98,7 @@
        protected override void OnPreClose()
        {
            model.OnFlashOverEvent -= OnFlashOverEvent;
        }
        protected override void OnAfterClose()
@@ -98,12 +108,24 @@
        protected override void OnActived()
        {
            base.OnActived();
            Display();
        }
        void Display()
        {
            DisplayTowerInfo();
            DisplayChallengeButton();
            DisplayRewardInfo(false);
        }
        #endregion
        private void OnFlashOverEvent(int state)
        {
            if (state == 2)
                Display();
        }
        private void DisplayTowerInfo()
        {
@@ -159,10 +181,6 @@
        private void DisplayRewardInfo(bool immediately)
        {
            if (showType == ShowType.Reward)
            {
                return;
            }
            showType = ShowType.Reward;
@@ -214,8 +232,61 @@
        private void DisplayChallengeButton()
        {
            m_ChallengeTitle.text = Language.Get(model.allPassed ? "SkyTower4" : "Multiple_Challenge");
            m_ChallengeImage.gray = !model.IsChallengable();
            int count = GetFlashKillCount();
            if (count == 0)
            {
                m_FlashKill.SetActive(false);
                m_Challenge.SetActive(true);
                m_ChallengeTitle.text = Language.Get(model.allPassed ? "SkyTower4" : "Multiple_Challenge");
                m_ChallengeImage.gray = !model.IsChallengable();
            }
            else
            {
                m_FlashKill.SetActive(true);
                m_Challenge.SetActive(false);
                m_FlashKillCount.text = count == 1 ? string.Empty : count.ToString();
                m_FlashKill.AddListener(() => {
                    if (!dungeonModel.CanFlashKill())
                    {
                        SysNotifyMgr.Instance.ShowTip("InFBCanotDo");
                        return;
                    }
                    var pack = new CB108_tagCMFBQuickPass();
                    pack.MapID = SkyTowerModel.DATA_MAPID;
                    pack.LineID = (ushort)(model.currentFloor + count - 1);
                    GameNetSystem.Instance.SendInfo(pack);
                });
            }
        }
        // 前20层不用雷诛
        int GetFlashKillCount()
        {
            int count = 0;
            if (model.currentFloor <= 20)
                return count;
            for (int i = 0; i < GeneralDefine.flashKillMaxCount; i++)
            {
                var config = SkyTowerConfig.Get(model.currentFloor + i);
                if (config == null)
                    break;
                var fightPower = NPCExConfig.Get(config.bossId).SuppressFightPower;
                if (PlayerDatas.Instance.baseData.FightPoint >= (ulong)fightPower * GeneralDefine.fightPowerMore)
                {
                    count++;
                }
                else
                {
                    //遇到第一个卡点就停止
                    break;
                }
            }
            return count;
        }
        private void Challenge()
UI/Decorate/Tweens/PositionTween.cs
@@ -26,7 +26,14 @@
        protected override void OnOnceEnd()
        {
            this.rectTransform.anchoredPosition = reversal ? from : to;
            if (wrapMode == WrapMode.PingPongOnce)
            {
                SetStartState();
            }
            else
            {
                this.rectTransform.anchoredPosition = reversal ? from : to;
            }
            base.OnOnceEnd();
        }
UI/Decorate/Tweens/Tween.cs
@@ -100,8 +100,15 @@
                switch (wrapMode)
                {
                    case WrapMode.Once:
                    case WrapMode.Once:
                        if (accumulatedTime > duration)
                        {
                            OnOnceEnd();
                            doTween = false;
                        }
                        break;
                    case WrapMode.PingPongOnce:
                        if (accumulatedTime > duration*2)
                        {
                            OnOnceEnd();
                            doTween = false;
@@ -168,8 +175,9 @@
                    t = Mathf.Repeat((accumulatedTime / duration) * curveLength, 1);
                    break;
                case WrapMode.PingPong:
                case WrapMode.PingPongOnce:
                    t = Mathf.PingPong((accumulatedTime / duration) * curveLength, 1);
                    break;
                    break;
            }
            var value = curve.Evaluate(reversal ? curveLength - t : t);
@@ -221,6 +229,7 @@
            Once,
            Loop,
            PingPong,
            PingPongOnce,
        }
    }
}