From bc20563f3bdfba7a4e3e6d1a4770f86bc7cfa998 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期五, 21 二月 2025 01:40:59 +0800
Subject: [PATCH] 0312 本服/跨服竞技场进入防范问题

---
 System/CrossServerOneVsOne/CrossServerOneVsOnePKPlayerCell.cs |   10 ++++
 LogicProject/System/ArenaActivity/ArenaManagerModel.cs        |    2 
 System/Dungeon/DungeonModel.cs                                |   83 +++++++++++++++++++++++++++++++++++++++++
 LogicProject/System/ArenaActivity/ArenaWin.cs                 |    9 ++++
 4 files changed, 102 insertions(+), 2 deletions(-)

diff --git a/LogicProject/System/ArenaActivity/ArenaManagerModel.cs b/LogicProject/System/ArenaActivity/ArenaManagerModel.cs
index 1ef908c..93179f0 100644
--- a/LogicProject/System/ArenaActivity/ArenaManagerModel.cs
+++ b/LogicProject/System/ArenaActivity/ArenaManagerModel.cs
@@ -1095,7 +1095,7 @@
     public class ILFightStage : ILPKStage
     {
         bool figthCompleted = false;
-        float restTime = 2f;
+        float restTime = 0.5f;
         float restTimeTimer = 0f;
 
         public override void Begin()
diff --git a/LogicProject/System/ArenaActivity/ArenaWin.cs b/LogicProject/System/ArenaActivity/ArenaWin.cs
index c323499..1af553e 100644
--- a/LogicProject/System/ArenaActivity/ArenaWin.cs
+++ b/LogicProject/System/ArenaActivity/ArenaWin.cs
@@ -46,6 +46,8 @@
 
     ServerMirrorFightModel mirrorFightModel { get { return ModelCenter.Instance.GetModel<ServerMirrorFightModel>(); } }
 
+    DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
+
     float DeltaTmp = 0;
 
     float lastClickFightTime = 0;
@@ -162,6 +164,13 @@
                     return;
                 }
 
+                int error;
+                if (!dungeonModel.CanEnter(out error))
+                {
+                    dungeonModel.ProcessEnterError(error);
+                    return;
+                }
+
                 if (Time.realtimeSinceStartup - lastClickFightTime < 0.5)
                     return;
                 lastClickFightTime = Time.realtimeSinceStartup;
diff --git a/System/CrossServerOneVsOne/CrossServerOneVsOnePKPlayerCell.cs b/System/CrossServerOneVsOne/CrossServerOneVsOnePKPlayerCell.cs
index 08a33bc..d6cafa6 100644
--- a/System/CrossServerOneVsOne/CrossServerOneVsOnePKPlayerCell.cs
+++ b/System/CrossServerOneVsOne/CrossServerOneVsOnePKPlayerCell.cs
@@ -17,7 +17,7 @@
         RoleParticularModel model { get { return ModelCenter.Instance.GetModel<RoleParticularModel>(); } }
         ServerMirrorFightModel mirrorFightModel { get { return ModelCenter.Instance.GetModel<ServerMirrorFightModel>(); } }
 
-
+        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
 
         public void Display(int index)
         {
@@ -39,6 +39,14 @@
                     return;
                 }
 
+                int error;
+                if (!dungeonModel.CanEnter(out error))
+                {
+                    dungeonModel.ProcessEnterError(error);
+                    return;
+                }
+
+
                 if (matchPlayer.PlayerID > 10000)
                 {
                     var teamModel = ModelCenter.Instance.GetModel<TeamModel>();
diff --git a/System/Dungeon/DungeonModel.cs b/System/Dungeon/DungeonModel.cs
index 6e96e2b..aa161b1 100644
--- a/System/Dungeon/DungeonModel.cs
+++ b/System/Dungeon/DungeonModel.cs
@@ -147,6 +147,7 @@
         BossRebornModel bossRebornModel { get { return ModelCenter.Instance.GetModel<BossRebornModel>(); } }
         DailyQuestModel dailyQuestModel { get { return ModelCenter.Instance.GetModel<DailyQuestModel>(); } }
 
+        TeamModel teamModel { get { return ModelCenter.Instance.GetModel<TeamModel>(); } }
         public override void Init()
         {
             ParseConfig();
@@ -611,6 +612,88 @@
             RequestChallangeDungeon(_dungeon.mapId, _dungeon.lineId);
         }
 
+        public bool CanEnter(out int error)
+        {
+            var mapId = PlayerDatas.Instance.baseData.MapID;
+            var mapConfig = MapConfig.Get(mapId);
+            if (mapConfig.MapFBType != (int)MapType.OpenCountry ||
+                ArenaManager.IsArenaStage() ||
+                ClientDungeonStageUtility.isClientDungeon ||
+                ClientCrossServerOneVsOne.isClientCrossServerOneVsOne ||
+                AdventureStage.Instance.IsInAdventureStage
+                )
+            {
+                error = 1;
+                return false;
+            }
+
+            if (teamModel.isMatching)
+            {
+                error = 2;
+                return false;
+            }
+
+            if (teamModel.teamPrepare.isPreparing)
+            {
+                error = 3;
+                return false;
+            }
+
+            if (CrossServerLogin.Instance.IsEnterCrossServerPreparing())
+            {
+                error = 4;
+                return false;
+            }
+
+            var deadModel = ModelCenter.Instance.GetModel<PlayerDeadModel>();
+            if (deadModel.playerIsDie)
+            {
+                error = 5;
+                return false;
+            }
+            if (PlayerDatas.Instance.extersion.bossState == 1)
+            {
+                error = 6;
+                return false;
+            }
+
+            if (CrossServerUtility.IsCrossServer())
+            {
+                error = 7;
+                return false;
+            }
+            error = 0;
+            return true;
+        }
+
+        public void ProcessEnterError(int error)
+        {
+            switch (error)
+            {
+                case 1:
+                    SysNotifyMgr.Instance.ShowTip("InDungeon_CantGo");
+                    break;
+                case 2:
+                    SysNotifyMgr.Instance.ShowTip("CrossMap1");
+                    break;
+                case 3:
+                    SysNotifyMgr.Instance.ShowTip("CrossMap2");
+                    break;
+                case 4:
+                    SysNotifyMgr.Instance.ShowTip("CrossMap3");
+                    break;
+                case 5:
+                    SysNotifyMgr.Instance.ShowTip("CrossMap4");
+                    break;
+                case 6:
+                    SysNotifyMgr.Instance.ShowTip("CrossMap11");
+                    break;
+                case 7:
+                    SysNotifyMgr.Instance.ShowTip("CrossMap10");
+                    break;
+            }
+        }
+
         public void GroupChallenge(int _dungeonId, int _lineId = 0)
         {
             GroupChallenge(new Dungeon(_dungeonId, _lineId));

--
Gitblit v1.8.0