少年修仙传客户端代码仓库
client_linchunjie
2019-04-11 c0e1a3c64397723c9644e29eb1d41ed6222d5b6f
3335 缥缈仙域
2个文件已添加
11个文件已修改
597 ■■■■■ 已修改文件
Core/NetworkPackage/ClientPack/ClientToMapServer/CC1_CrossRealm/CC105_tagCMEnterCrossServer.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ServerPack/HA3_Function/HA306_tagMCFairyDomainInfo.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/Status/StatusMgr.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/Status/Status_Base.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Stage/Dungeon/DungeonStage.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Stage/StageLoadProcessor.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/HazyRegion/ClientHazyDemonKingStage.cs 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/HazyRegion/ClientHazyDemonKingStage.cs.meta 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/HazyRegion/HazyDemonKingDungeonWin.cs 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/HazyRegion/HazyDemonKingModel.cs 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/HazyRegion/HazyDemonKingPlayerBehaviour.cs 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/HazyRegion/HazyRegionEntrancePanel.cs 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/HazyRegion/HazyRegionModel.cs 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ClientPack/ClientToMapServer/CC1_CrossRealm/CC105_tagCMEnterCrossServer.cs
@@ -6,6 +6,7 @@
public class CC105_tagCMEnterCrossServer : GameNetPackBasic
{
    public uint DataMapID;
    public ushort LineID;
    public CC105_tagCMEnterCrossServer()
    {
@@ -16,6 +17,7 @@
    public override void WriteToBytes()
    {
        WriteBytes(DataMapID, NetDataType.DWORD);
        WriteBytes(LineID, NetDataType.WORD);
    }
}
Core/NetworkPackage/ServerPack/HA3_Function/HA306_tagMCFairyDomainInfo.cs
@@ -3,8 +3,10 @@
// A3 06 缥缈仙域信息 #tagMCFairyDomainInfo
public class HA306_tagMCFairyDomainInfo : GameNetPackBasic {
    public byte State;    //是否寻访中
public class HA306_tagMCFairyDomainInfo : GameNetPackBasic {     //public byte IsAll;     //是否全部
    public byte State;    //是否寻访中
    //public uint VisitCnt;  //寻访次数
    public ushort Energy;    //体力
    public byte Count;    // 信息个数
    public  tagMCFairyDomainEvent[] InfoList;    // 信息列表
@@ -13,8 +15,8 @@
        _cmd = (ushort)0xA306;
    }
    public override void ReadFromBytes (byte[] vBytes) {
        TransBytes (out State, vBytes, NetDataType.BYTE);
    public override void ReadFromBytes (byte[] vBytes) {         //TransBytes(out IsAll, vBytes, NetDataType.BYTE);
        TransBytes (out State, vBytes, NetDataType.BYTE);         //TransBytes(out VisitCnt, vBytes, NetDataType.DWORD);
        TransBytes (out Energy, vBytes, NetDataType.WORD);
        TransBytes (out Count, vBytes, NetDataType.BYTE);
        InfoList = new tagMCFairyDomainEvent[Count];
Fight/Actor/Status/StatusMgr.cs
@@ -8,6 +8,7 @@
{
    public static event UnityAction<int> OnGainStatus;
    public static event UnityAction<int> onReceiveStatus;
    private Dictionary<uint, List<Status_Base>> m_StatusDict = null;
    private List<Status_Base> m_AllStatus = null;
@@ -155,6 +156,11 @@
                }
            }
        }
        if (onReceiveStatus != null)
        {
            onReceiveStatus(h0605.SkillID);
        }
    }
    public void Release(uint objID, byte type)
Fight/Actor/Status/Status_Base.cs
@@ -1,4 +1,5 @@

using System;
using UnityEngine;
public abstract class Status_Base : IStatus
@@ -18,10 +19,14 @@
    private SFXController m_Effect;
    public DateTime receiveTime { get; private set; }
    public virtual void Init(H0605_tagObjAddBuff data)
    {
        h0605 = data;
        receiveTime = TimeUtility.ServerNow;
        m_SkillConfig = SkillConfig.Get(data.SkillID);
        if (m_SkillConfig == null)
Fight/Stage/Dungeon/DungeonStage.cs
@@ -246,6 +246,12 @@
                WindowCenter.Instance.Open<DungeonStageTimeWin>();
                break;
        }
        if (ModelCenter.Instance.GetModel<HazyDemonKingModel>().IsInDungeon)
        {
            WindowCenter.Instance.Open<HazyDemonKingDungeonWin>();
        }
        // 等待处理开启自动战斗
        DungeonModel _dungeonModel = ModelCenter.Instance.GetModel<DungeonModel>();
        if (PlayerDatas.Instance.baseData.MapID == 52020
Fight/Stage/StageLoadProcessor.cs
@@ -401,6 +401,9 @@
                    break;
                case DemonJarModel.DEMONJAR_SINGLEMAPID:
                    stage = stageGameObject.AddComponent<FakeDemonJarDungeonStage>();
                    break;
                case HazyDemonKingModel.ClientMAPID:
                    stage = stageGameObject.AddComponent<ClientHazyDemonKingStage>();
                    break;
                default:
                    stage = stageGameObject.AddComponent<DungeonStage>();
System/HazyRegion/ClientHazyDemonKingStage.cs
New file
@@ -0,0 +1,143 @@
using Snxxz.UI;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ClientHazyDemonKingStage : DungeonStage
{
    static readonly Vector3 playerBornPosition = new Vector3(10, 6.38f, 6.67f);
    static readonly Vector3 bossBornPosition = new Vector3(8.35f, 6.37f, 9.7f);
    Step step = Step.Start;
    ClientStage currentStage = null;
    static GA_NpcClientFightBoss clientFightBoss = null;
    HazyDemonKingModel model { get { return ModelCenter.Instance.GetModel<HazyDemonKingModel>(); } }
    public override void Initialize()
    {
        base.Initialize();
        currentStage = null;
        DTC0403_tagPlayerLoginLoadOK.mapInitOkEvent += OnReconnected;
    }
    protected override void OnStageLoadFinish()
    {
        base.OnStageLoadFinish();
        step = Step.Start;
        currentStage = new StartStage();
        currentStage.OnStart();
    }
    protected override void OnUpdate()
    {
        base.OnUpdate();
        if (currentStage != null)
        {
            currentStage.OnUpdate();
            if (currentStage.isCompleted)
            {
                currentStage.OnEnd();
                currentStage = null;
            }
        }
    }
    private void OnReconnected()
    {
        var pak = new CA231_tagCMClientStartCustomScene();
        GameNetSystem.Instance.SendInfo(pak);
    }
    public override void UnInitialize()
    {
        base.UnInitialize();
        currentStage = null;
        if (clientFightBoss != null)
        {
            clientFightBoss.ActorInfo.serverDie = true;
            GAMgr.Instance.ServerDie(clientFightBoss.ServerInstID);
            clientFightBoss.Die();
            clientFightBoss = null;
        }
        DTC0403_tagPlayerLoginLoadOK.mapInitOkEvent -= OnReconnected;
    }
#if UNITY_EDITOR
    private void OnGUI()
    {
        if (GUILayout.Button("Exit"))
        {
            model.RequestExistClientDungeon();
        }
    }
#endif
    public enum Step
    {
        Start,
        Fight,
        End,
    }
    public abstract class ClientStage
    {
        public abstract bool isCompleted { get; protected set; }
        protected HazyRegionModel model { get { return ModelCenter.Instance.GetModel<HazyRegionModel>(); } }
        public abstract void OnUpdate();
        public abstract void OnStart();
        public abstract void OnEnd();
    }
    public class StartStage : ClientStage
    {
        public override bool isCompleted
        {
            get; protected set;
        }
        public override void OnStart()
        {
            var hero = PlayerDatas.Instance.hero;
            hero.Pos = playerBornPosition;
            CameraController.Instance.Apply();
            var config = HazyRegionConfig.Get(model.processingIncidentId);
            var npcId = NPCConfig.Get(config.npcId);
            if (clientFightBoss != null)
            {
                clientFightBoss.ActorInfo.serverDie = true;
                GAMgr.Instance.ServerDie(clientFightBoss.ServerInstID);
                clientFightBoss.Die();
                clientFightBoss = null;
            }
            clientFightBoss = GAMgr.Instance.ReqClntFightNpc<GA_NpcClientFightBoss>((uint)config.npcId, E_ActorGroup.Enemy);
            clientFightBoss.Pos = bossBornPosition;
            clientFightBoss.LockTargetSID = PlayerDatas.Instance.PlayerId;
            isCompleted = true;
        }
        public override void OnUpdate()
        {
        }
        public override void OnEnd()
        {
        }
    }
}
System/HazyRegion/ClientHazyDemonKingStage.cs.meta
New file
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 6426fe00cafdfd84cbc249ce70caccc4
timeCreated: 1554976847
licenseType: Pro
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
System/HazyRegion/HazyDemonKingDungeonWin.cs
@@ -14,10 +14,18 @@
    public class HazyDemonKingDungeonWin : Window
    {
        [SerializeField] DynamicCyclicScroll m_CyclicScroll;
        [SerializeField] CyclicScroll m_CyclicScroll;
        [SerializeField] Text m_MyAtkTargetName;
        [SerializeField] Transform m_ContainerInvincibleBuff;
        [SerializeField] SmoothSlider m_BuffSlider;
        DateTime invincibleBuffEndTime = DateTime.Now;
        uint invincibleLastTime = 0;
        List<uint> playerIds = new List<uint>();
        List<uint> clonePlayerIds = new List<uint>();
        HazyDemonKingModel model { get { return ModelCenter.Instance.GetModel<HazyDemonKingModel>(); } }
        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
@@ -36,6 +44,8 @@
            Display();
            model.onPlayerInfoRefresh += OnPlayerInfoRefresh;
            StatusMgr.onReceiveStatus += OnReceiveStatus;
            GlobalTimeEvent.Instance.secondEvent += PerSecond;
        }
        protected override void OnAfterOpen()
@@ -46,25 +56,79 @@
        {
            m_CyclicScroll.Dispose();
            model.onPlayerInfoRefresh -= OnPlayerInfoRefresh;
            StatusMgr.onReceiveStatus -= OnReceiveStatus;
            GlobalTimeEvent.Instance.secondEvent -= PerSecond;
        }
        protected override void OnAfterClose()
        {
        }
        protected override void LateUpdate()
        {
            if (TimeUtility.ServerNow < invincibleBuffEndTime)
            {
                m_BuffSlider.delay = 0.2f;
                DisplayInvincibleProgress();
            }
        }
        #endregion
        void Display()
        {
            DisplayPlayers();
            DisplayInvincibleBuff();
        }
        void DisplayPlayers()
        {
            playerIds.Clear();
            clonePlayerIds.Clear();
            playerIds.AddRange(model.GetPlayerIds());
            playerIds.Sort(Compare);
            clonePlayerIds.AddRange(playerIds);
            m_CyclicScroll.Init(playerIds);
        }
        void DisplayInvincibleBuff()
        {
            var actors = GAMgr.Instance.GetTypeList(E_ActorClassType.NpcFightBoss);
            bool existInvincibleBuff = false;
            Status_Base status_Base = null;
            if (actors != null && actors.Count > 0)
            {
                var serverInstId = (actors[0] as GA_NpcFightBoss).ServerInstID;
                existInvincibleBuff = StatusMgr.Instance.IsExist(serverInstId, model.invincibleBuffId);
                if (existInvincibleBuff)
                {
                    status_Base = StatusMgr.Instance.Get(serverInstId, model.invincibleBuffId);
                }
            }
            m_ContainerInvincibleBuff.gameObject.SetActive(existInvincibleBuff);
            if (existInvincibleBuff && status_Base != null)
            {
                invincibleBuffEndTime = status_Base.receiveTime.AddTicks(status_Base.h0605.LastTime * TimeSpan.TicksPerMillisecond);
                invincibleLastTime = status_Base.h0605.LastTime;
            }
            m_BuffSlider.delay = 0f;
            DisplayInvincibleProgress();
        }
        void DisplayInvincibleProgress()
        {
            var milliSeconds = Mathf.CeilToInt((float)(invincibleBuffEndTime - TimeUtility.ServerNow).TotalMilliseconds);
            if (invincibleLastTime == 0)
            {
                invincibleLastTime = (uint)milliSeconds;
            }
            var progress = Mathf.Clamp01(1 - (float)milliSeconds / invincibleLastTime);
            m_BuffSlider.value = progress;
        }
        private void OnPlayerInfoRefresh()
@@ -72,14 +136,49 @@
            DisplayPlayers();
        }
        private void OnReceiveStatus(int buffId)
        {
            if (buffId == model.invincibleBuffId)
            {
                DisplayInvincibleBuff();
            }
        }
        private void PerSecond()
        {
            if (clonePlayerIds.Count > 0)
            {
                clonePlayerIds.Sort(Compare);
            }
            if (clonePlayerIds.Count == playerIds.Count)
            {
                for (int i = 0; i < clonePlayerIds.Count; i++)
                {
                    if (clonePlayerIds[i] != playerIds[i])
                    {
                        DisplayPlayers();
                        return;
                    }
                }
            }
        }
        int Compare(uint lhs, uint rhs)
        {
            var lhs_bossBelong = StatusMgr.Instance.IsExistBossBelong(lhs);
            var rhs_bossBelong = StatusMgr.Instance.IsExistBossBelong(rhs);
            var lhs_bossBelong = model.IsExistBelongTo(lhs);
            var rhs_bossBelong = model.IsExistBelongTo(rhs);
            if (lhs_bossBelong != rhs_bossBelong)
            {
                return -lhs_bossBelong.CompareTo(rhs_bossBelong);
            }
            var playerId = PlayerDatas.Instance.baseData.PlayerID;
            var lhs_atkself = model.GetPlayerAtkTarget(lhs) == playerId;
            var rhs_atkself = model.GetPlayerAtkTarget(rhs) == playerId;
            if (lhs_atkself != rhs_atkself)
            {
                return -lhs_atkself.CompareTo(rhs_atkself);
            }
            return 0;
        }
    }
System/HazyRegion/HazyDemonKingModel.cs
@@ -10,6 +10,10 @@
        public bool IsInDungeon { get; private set; }
        public int invincibleBuffId { get; private set; }
        public const int ClientMAPID = 2000;
        public event Action onPlayerInfoRefresh;
        public override void Init()
@@ -69,6 +73,22 @@
                    }
                }
                var playerId = PlayerDatas.Instance.PlayerId;
                if (IsExistBelongTo(playerId))
                {
                    if (!m_PlayerInfos.ContainsKey(playerId))
                    {
                        requireRefreshPlayer = true;
                    }
                }
                else
                {
                    if (m_PlayerInfos.ContainsKey(playerId))
                    {
                        requireRefreshPlayer = true;
                    }
                }
                if (requireRefreshPlayer)
                {
                    RefreshAroundPlayer();
@@ -98,6 +118,29 @@
                }
            }
            var playerId = PlayerDatas.Instance.PlayerId;
            if (IsExistBelongTo(playerId))
            {
                if (!m_PlayerInfos.ContainsKey(playerId))
                {
                    var hero = PlayerDatas.Instance.hero;
                    m_PlayerInfos.Add(playerId, new HazyDemonKingPlayerInfo()
                    {
                        job = hero.ActorInfo.Job,
                        hp = hero.ActorInfo.RealHp,
                        maxHp = hero.ActorInfo.RealMaxHp,
                        playerName = UIHelper.ServerStringTrim(hero.ActorInfo.PlayerName),
                    });
                }
            }
            else
            {
                if (m_PlayerInfos.ContainsKey(playerId))
                {
                    m_PlayerInfos.Remove(playerId);
                }
            }
            if (onPlayerInfoRefresh != null)
            {
                onPlayerInfoRefresh();
@@ -106,6 +149,11 @@
        public bool IsInDemonKingDungeon(int mapId)
        {
            if (mapId == ClientMAPID)
            {
                return true;
            }
            var configs = HazyRegionConfig.GetValues();
            foreach (var config in configs)
            {
@@ -127,6 +175,68 @@
        {
            return m_PlayerInfos.Keys;
        }
        public void SendSelectAtkTarget(uint serverInstId)
        {
        }
        public uint GetPlayerAtkTarget(uint serverInstId)
        {
            return 0;
        }
        public bool IsExistBelongTo(uint playerId)
        {
            if (playerId == PlayerDatas.Instance.PlayerId
                && ClientDungeonStageUtility.clientMapId == ClientMAPID)
            {
                return true;
            }
            return StatusMgr.Instance.IsExistBossBelong(playerId);
        }
        public void RequestEnterClientDungeon()
        {
            MapTransferUtility.Instance.Clear();
            ClientDungeonStageUtility.SetClientDungeon(true, ClientMAPID);
            var sendInfo = new CA231_tagCMClientStartCustomScene();
            GameNetSystem.Instance.SendInfo(sendInfo);
            CrossServerLogin.Instance.SetWaitForLoginCrossServerState(false);
            StageLoad.Instance.PushSceneLoadCommand(new StageLoad.StageLoadCommand()
            {
                toMapId = ClientMAPID,
                toLineId = 0,
                needEmpty = true,
                needLoadResource = true,
                serverType = ServerType.Main,
                isClientLoadMap = true
            });
            PlayerDatas.Instance.baseData.mainServerMapIdRecord = PlayerDatas.Instance.baseData.MapID;
            PlayerDatas.Instance.baseData.MapID = ClientMAPID;
            var attackMode = new C030A_tagCChangeAttackMode();
            attackMode.Mode = (byte)E_AttackMode.Peace;
            GameNetSystem.Instance.PushPackage(attackMode, ServerType.Main);
        }
        public void RequestExistClientDungeon()
        {
            ClientDungeonStageUtility.SetClientDungeon(false, 0);
            PlayerDatas.Instance.extersion.pkState = 0;
            ModelCenter.Instance.GetModel<DungeonModel>().ResetBufData();
            PlayerDatas.Instance.baseData.MapID = PlayerDatas.Instance.baseData.mainServerMapIdRecord;
            StageLoad.Instance.PushSceneLoadCommand(new StageLoad.StageLoadCommand()
            {
                toMapId = PlayerDatas.Instance.baseData.MapID,
                toLineId = 0,
                needEmpty = true,
                needLoadResource = true,
                serverType = ServerType.CrossSever,
                isClientLoadMap = true
            });
        }
    }
    public struct HazyDemonKingPlayerInfo
System/HazyRegion/HazyDemonKingPlayerBehaviour.cs
@@ -13,13 +13,14 @@
        [SerializeField] Text m_PlayerName;
        [SerializeField] SmoothSlider m_HpSlider;
        [SerializeField] Image m_FightSign;
        [SerializeField] Text m_FightState;
        [SerializeField] Text m_AtkState;
        [SerializeField] Button m_SelectAtk;
        bool dirty = false;
        bool bossBelongTo = false;
        int hpPer = 0;
        int atkState = 0;
        uint playerId = 0;
@@ -40,6 +41,8 @@
            GlobalTimeEvent.Instance.secondEvent -= PerSecond;
            GlobalTimeEvent.Instance.secondEvent += PerSecond;
            //m_SelectAtk.SetListener(SelectAtk);
        }
        private void PerSecond()
@@ -53,13 +56,13 @@
        private void Initialized()
        {
            bossBelongTo = StatusMgr.Instance.IsExistBossBelong(playerId);
            RefreshBossBelongTo();
            hpPer = 0;
            GActor actor = GAMgr.Instance.GetBySID(playerId);
            if (actor != null)
            {
                var player = actor as GA_Player;
                var player = actor as GActorPlayerBase;
                hpPer = Mathf.CeilToInt((float)player.ActorInfo.RealHp / player.ActorInfo.RealMaxHp * 100f);
            }
            else
@@ -67,9 +70,11 @@
                HazyDemonKingPlayerInfo playerInfo;
                if (model.TryGetPlayerInfo(playerId, out playerInfo))
                {
                    hpPer = Mathf.CeilToInt((float)playerInfo.hp / playerInfo.maxHp);
                    hpPer = Mathf.CeilToInt((float)playerInfo.hp / playerInfo.maxHp * 100f);
                }
            }
            RefreshAtkState();
        }
        void DisplayBase()
@@ -86,27 +91,99 @@
        {
            m_ContainerOwn.gameObject.SetActive(bossBelongTo);
            m_HeadIcon.gray = hpPer == 0;
            m_HpSlider.value = hpPer / 100f;
            //switch (atkState)
            //{
            //    case 0:
            //        m_AtkState.text = "战斗中";
            //        m_AtkState.color = UIHelper.GetUIColor(TextColType.Red, true);
            //        break;
            //    case 1:
            //        m_AtkState.text = "反击";
            //        m_AtkState.color = UIHelper.GetUIColor(TextColType.Red, true);
            //        break;
            //    case 2:
            //        m_AtkState.text = "攻击";
            //        m_AtkState.color = UIHelper.GetUIColor(TextColType.NavyBrown, true);
            //        break;
            //}
        }
        private void SelectAtk()
        {
            model.SendSelectAtkTarget(playerId);
        }
        void LateUpdate()
        {
            if (bossBelongTo != StatusMgr.Instance.IsExistBossBelong(playerId))
            if (RefreshBossBelongTo())
            {
                bossBelongTo = StatusMgr.Instance.IsExistBossBelong(playerId);
                dirty = true;
            }
            if (RefreshHpPer())
            {
                dirty = true;
            }
            if (RefreshAtkState())
            {
                dirty = true;
            }
        }
        bool RefreshBossBelongTo()
        {
            if (bossBelongTo != model.IsExistBelongTo(playerId))
            {
                bossBelongTo = model.IsExistBelongTo(playerId);
                return true;
            }
            return false;
        }
        bool RefreshHpPer()
        {
            GActor actor = GAMgr.Instance.GetBySID(playerId);
            if (actor != null)
            {
                var player = actor as GA_Player;
                var per = Mathf.CeilToInt((float)player.ActorInfo.RealHp / player.ActorInfo.RealMaxHp);
                var player = actor as GActorPlayerBase;
                var per = Mathf.CeilToInt((float)player.ActorInfo.RealHp / player.ActorInfo.RealMaxHp * 100f);
                if (hpPer != per)
                {
                    hpPer = per;
                    dirty = true;
                    return true;
                }
            }
            return false;
        }
        bool RefreshAtkState()
        {
            var _state = 0;
            var myPlayerId = PlayerDatas.Instance.baseData.PlayerID;
            var atkTargetId = model.GetPlayerAtkTarget(playerId);
            var myAtkTargetId = model.GetPlayerAtkTarget(myPlayerId);
            if (myAtkTargetId == playerId)
            {
                _state = 0;
            }
            else if (atkTargetId == myPlayerId)
            {
                _state = 1;
            }
            else
            {
                _state = 2;
            }
            if (_state != atkState)
            {
                atkState = _state;
                return true;
            }
            return false;
        }
        public override void Dispose()
System/HazyRegion/HazyRegionEntrancePanel.cs
@@ -9,8 +9,11 @@
    public class HazyRegionEntrancePanel : MonoBehaviour
    {
        [SerializeField] Text m_OpenTime;
        [SerializeField] Transform m_ContainerTimes;
        [SerializeField] Text m_Times;
        [SerializeField] Button m_BuyTimes;
        [SerializeField] Button m_Goto;
        HazyRegionModel model { get { return ModelCenter.Instance.GetModel<HazyRegionModel>(); } }
@@ -32,27 +35,36 @@
        void DisplayTimes()
        {
            var config = DailyQuestConfig.Get((int)DailyQuestType.HazyRegion);
            var dailyQuestOpenTime = DailyQuestOpenTimeConfig.Get(config.RelatedID);
            var limitTimes = dailyQuestOpenTime.DayTimes;
            m_ContainerTimes.gameObject.SetActive(!model.InFakeHazyRegion);
            var totalTimes = dailyQuestModel.GetDailyQuestTotalTimes((int)DailyQuestType.HazyRegion);
            var completedTimes = dailyQuestModel.GetDailyQuestCompletedTimes((int)DailyQuestType.HazyRegion);
            var times = Mathf.Clamp(totalTimes - completedTimes, 0, limitTimes);
            m_Times.text = StringUtility.Contact(times, "/", limitTimes);
            if (!model.InFakeHazyRegion)
            {
                var config = DailyQuestConfig.Get((int)DailyQuestType.HazyRegion);
                var dailyQuestOpenTime = DailyQuestOpenTimeConfig.Get(config.RelatedID);
                var limitTimes = dailyQuestOpenTime.DayTimes;
                var totalTimes = dailyQuestModel.GetDailyQuestTotalTimes((int)DailyQuestType.HazyRegion);
                var completedTimes = dailyQuestModel.GetDailyQuestCompletedTimes((int)DailyQuestType.HazyRegion);
                var times = Mathf.Clamp(totalTimes - completedTimes, 0, limitTimes);
                m_Times.text = StringUtility.Contact(times, "/", limitTimes);
            }
        }
        void DisplayOpenTime()
        {
            DailyQuestOpenTime dailyQuestOpenTime;
            if (dailyQuestModel.TryGetOpenTime((int)DailyQuestType.HazyRegion, out dailyQuestOpenTime))
            m_OpenTime.gameObject.SetActive(!model.InFakeHazyRegion);
            if (!model.InFakeHazyRegion)
            {
                HourMinute hourMinute;
                if (dailyQuestOpenTime.TryGetNextOpenTime(out hourMinute))
                DailyQuestOpenTime dailyQuestOpenTime;
                if (dailyQuestModel.TryGetOpenTime((int)DailyQuestType.HazyRegion, out dailyQuestOpenTime))
                {
                    m_OpenTime.text = Language.Get("HazyRegionOpenTime", hourMinute.hourBegin.ToString("D2"),
                        hourMinute.minuteBegin.ToString("D2"), hourMinute.hourEnd.ToString("D2"),
                        hourMinute.minuteEnd.ToString("D2"));
                    HourMinute hourMinute;
                    if (dailyQuestOpenTime.TryGetNextOpenTime(out hourMinute))
                    {
                        m_OpenTime.text = Language.Get("HazyRegionOpenTime", hourMinute.hourBegin.ToString("D2"),
                            hourMinute.minuteBegin.ToString("D2"), hourMinute.hourEnd.ToString("D2"),
                            hourMinute.minuteEnd.ToString("D2"));
                    }
                }
            }
        }
System/HazyRegion/HazyRegionModel.cs
@@ -15,6 +15,9 @@
        public int processingIncidentId { get; private set; }
        public int adventureDialogueId { get; private set; }
        public bool playing { get; private set; }
        public bool satisfyFakeOpen { get; private set; }
        public int hazyRegionOpenTimes { get; private set; }
        public int fakeOpenTimes { get; private set; }
        public bool isServerPrepare { get; private set; }
        int m_SelectIncident;
@@ -34,6 +37,11 @@
            }
        }
        public bool InFakeHazyRegion
        {
            get { return hazyRegionOpenTimes <= fakeOpenTimes; }
        }
        int cacheMapId = 0;
        public event Action selectIncidentRefresh;
@@ -42,6 +50,7 @@
        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
        DailyQuestModel dailyQuestModel { get { return ModelCenter.Instance.GetModel<DailyQuestModel>(); } }
        HazyDemonKingModel hazyDemonKingModel { get { return ModelCenter.Instance.GetModel<HazyDemonKingModel>(); } }
        public override void Init()
        {
@@ -57,6 +66,7 @@
            isServerPrepare = false;
            point = 0;
            playing = false;
            hazyRegionOpenTimes = 0;
            m_Incidents.Clear();
            m_AdventureInfos.Clear();
        }
@@ -122,6 +132,9 @@
        {
            var funcConfig = FuncConfigConfig.Get("ImmortalDomainStrength");
            limitPoint = int.Parse(funcConfig.Numerical1);
            funcConfig = FuncConfigConfig.Get("FakeImmortalCount");
            fakeOpenTimes = int.Parse(funcConfig.Numerical1);
        }
        public bool TryGetIncident(int id, out Incident incident)
@@ -340,11 +353,44 @@
                    }
                    break;
                case HazyRegionIncidentType.Boss:
                    if (InFakeHazyRegion)
                    {
                        hazyDemonKingModel.RequestEnterClientDungeon();
                    }
                    else
                    {
                        SendGotoIncidentDungeon(config);
                    }
                    break;
                case HazyRegionIncidentType.FairyGrass:
                case HazyRegionIncidentType.ReikiGrass:
                case HazyRegionIncidentType.Precious:
                    dungeonModel.SingleChallenge(config.dungeonId, config.lineId);
                    if (InFakeHazyRegion)
                    {
                    }
                    else
                    {
                        SendGotoIncidentDungeon(config);
                    }
                    break;
                case HazyRegionIncidentType.Precious:
                    SendGotoIncidentDungeon(config);
                    break;
            }
        }
        void SendGotoIncidentDungeon(HazyRegionConfig config)
        {
            if (config.crossServer == 1)
            {
                var pak = new CC105_tagCMEnterCrossServer();
                pak.DataMapID = (uint)config.dungeonId;
                pak.LineID = (ushort)config.lineId;
                GameNetSystem.Instance.SendInfo(pak);
            }
            else
            {
                dungeonModel.SingleChallenge(config.dungeonId, config.lineId);
            }
        }
@@ -378,12 +424,16 @@
            playing = package.State == 1;
            satisfyFakeOpen = package.State == 2;
            //hazyRegionOpenTimes = (int)package.VisitCnt;
            point = package.Energy;
            if (package.Count >= 3 || package.Count == 0)
            {
            //if (package.IsAll == 1)
            //{
                m_Incidents.Clear();
            }
            //}
            for (int i = 0; i < package.Count; i++)
            {