From 28cbf0002222294c05ab588a588dfa234165d93b Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期四, 27 二月 2025 23:52:20 +0800
Subject: [PATCH] 10349 【越南】【英文】【BT】【砍树】跨服竞技场优化 - 时间格式不同

---
 LogicProject/System/CrossServerQualifying/CrossServerQualifyingModel.cs |  255 ++++++++++++++++++++++++++++++++------------------
 1 files changed, 162 insertions(+), 93 deletions(-)

diff --git a/LogicProject/System/CrossServerQualifying/CrossServerQualifyingModel.cs b/LogicProject/System/CrossServerQualifying/CrossServerQualifyingModel.cs
index 5b4a900..79ec66e 100644
--- a/LogicProject/System/CrossServerQualifying/CrossServerQualifyingModel.cs
+++ b/LogicProject/System/CrossServerQualifying/CrossServerQualifyingModel.cs
@@ -12,10 +12,10 @@
 public class CrossServerQualifyingModel : ILModel<CrossServerQualifyingModel>
 {
     public const int DATA_MAPID = 32070;
-    List<int> mapList = new List<int>();    //1涓垎鍖轰竴涓湴鍥�
     public int selectIndex; // 璺ㄦ湇鎺掍綅涓绘爣绛鹃�夋嫨
     public int select64Index = 0;  // 閫変腑鐨�64寮烘瘮璧涙爣绛撅紝闈炲綋鍓嶈禌绋�
     public List<uint> groupBtnMarks = new List<uint>() { 64, 32, 16 };//64寮烘爣绛炬寜閽搴旂殑璧涚▼
+    public List<uint> group8BtnMarks = new List<uint>() { 8, 4, 2 };//8寮� 
     public uint select64Mark
     {
         get { return groupBtnMarks[select64Index]; }
@@ -34,14 +34,15 @@
     //褰撳墠璧涚▼锛堝64寮�/32寮猴級锛�0浠h〃涓嶅湪姣旇禌娴佺▼涓�
     public uint nowGroupMark
     {
-        get {
+        get
+        {
             var battleID = GetBattleID();
             if (battleID == -1) return 0;
             var state = ILChampionshipTimeConfig.Get(battleID).StateValue;
             if (state == 80) return 64;  //8寮虹珵鐚�
             if (state == 40) return 8;   //鍥涘己绔炵寽
-            return (uint)state / 10;
-            }
+            return (uint)state / 10;
+        }
     }
 
     public List<DateTime> openTimes = new List<DateTime>();
@@ -89,8 +90,10 @@
     public event Action UpdateWorshipEvent;
     public int worshipMaxCnt;
     public int[][] doubleTimeArr;
+    public int challengeMaxCnt; //鎸戞垬娆℃暟
 
-
+    DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
+    ServerMirrorFightModel mirrorFightModel { get { return ModelCenter.Instance.GetModel<ServerMirrorFightModel>(); } }
 
     protected override void Init()
     {
@@ -115,8 +118,6 @@
         {
             openTimes.Add(Convert.ToDateTime(openTimeArr[i]));
         }
-
-        mapList = JsonMapper.ToObject<int[]>(config.Numerical3).ToList();
 
         config = FuncConfigConfig.Get("CrossChamGuess");
         var moneyInfo = config.Numerical1.Split('|');
@@ -160,6 +161,9 @@
         config = FuncConfigConfig.Get("CrossChamWorship");
         worshipMaxCnt = int.Parse(config.Numerical1);
         doubleTimeArr = JsonMapper.ToObject<int[][]>(config.Numerical3);
+
+        config = FuncConfigConfig.Get("CrossChamMirrorPK");
+        challengeMaxCnt = int.Parse(config.Numerical1);
     }
 
 
@@ -252,11 +256,12 @@
                     BattleNum = battleList.BattleNum,
                     WinPlayerID = battleList.WinPlayerID,
                     PlayerIDA = battleList.PlayerIDA,
-                    PlayerIDB = battleList.PlayerIDB
+                    PlayerIDB = battleList.PlayerIDB,
+                    battleResult = ConfigParse.ParseIntArray2Dict(battleList.BattleRet),
                 };
             }
-        }
-        
+        }
+
         UpdateCrossChampionshipPKZoneGroupInfoEvent?.Invoke();
     }
 
@@ -279,6 +284,8 @@
         myOfficialID = 0;
         myApplyCnt = 0;
         worshipCntToday = 0;
+        pushGroupMark = 0;
+        isShowRaceInfoYet = false;
     }
 
     //鑾峰彇褰撳墠鐨勬瘮璧涜禌绋嬭妭鐐癸紝-1浠h〃褰撳墠鏃堕棿涓嶅湪鎺掍綅璧涙祦绋嬩腑
@@ -306,7 +313,7 @@
                 continue;
 
             var startTime = startDay.AddDays(config.StartDay - 1).AddSeconds(config.StartHour * 60 * 60 + config.StartMinute * 60);
-            var endTime = startDay.AddDays(config.EndDay - 1).AddSeconds(config.EndHour*60*60 + config.EndMinute * 60 + 59);
+            var endTime = startDay.AddDays(config.EndDay - 1).AddSeconds(config.EndHour * 60 * 60 + config.EndMinute * 60 + 59);
             if (ILTimeUtility.ServerCrossNow >= startTime && ILTimeUtility.ServerCrossNow <= endTime)
                 return int.Parse(keys[i]);
         }
@@ -327,9 +334,22 @@
         return startTime.ToString("dd-MM-yyyy HH:mm");
     }
 
+    //鑾峰彇娴佺▼鐨勭粨鏉熸椂闂� 鍒嗛挓锛岃礋鏁颁唬琛ㄦ湭寮�濮�
+    public double GetRaceEndRemindMinute(int battleID)
+    {
+        var index = GetOpenTimeIndex();
+        if (index == -1) return -1;
+        var startDay = openTimes[index];
+
+        var config = ILChampionshipTimeConfig.Get(battleID);
+        var endTime = startDay.AddDays(config.StartDay - 1).AddSeconds(config.EndHour * 60 * 60 + config.EndMinute * 60);
+
+        return (endTime - ILTimeUtility.ServerCrossNow).TotalMinutes;
+    }
+
     public struct CrossChampionshipPKPlayer
     {
-        public uint PlayerID;     
+        public uint PlayerID;
         public string PlayerName;
         public byte Job;
         public long FightPower;
@@ -345,6 +365,7 @@
         public uint WinPlayerID;        // 鑾疯儨鐜╁ID
         public uint PlayerIDA;        // 鐜╁IDA
         public uint PlayerIDB;        // 鐜╁IDB
+        public Dictionary<int, int[][]> battleResult;  // 鎴樻枟缁撴灉鏄庣粏 {"playerID":[[绗�1灞�鑳滆礋,绗�1灞�鎬荤Н鍒�,鑳滆礋鍩虹鍒�,hp鍒�,鏃堕棿鍒哴, ...], ...}
     }
 
     public struct ChampionshipOfficial
@@ -356,57 +377,35 @@
         public List<CrossChampionshipPKPlayer> ApplyPlayerList;        // 鐢宠璇ヤ粰瀹樼帺瀹跺垪琛�
     }
 
-    //鍦烘櫙杩涘叆閫昏緫鍊熺敤浜嗚法鏈嶇珵鎶�1V1
-    public bool IsCrossServerQualifying()
-    {
-        var dungeonModel = ModelCenter.Instance.GetModel<DungeonModel>();
-        var dataMapId = dungeonModel.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID);
-        return mapList.IndexOf(dataMapId) != -1;
-    }
 
     //杩涘叆璺ㄦ湇鎺掍綅璧涳紝鍊熺敤璺ㄦ湇绔炴妧1v1妯℃嫙
     public void EnterCrossServerQualifying()
     {
-        int error;
-        if (!ILCrossServerModel.Instance.CanEnter(out error))
+        uint tagPlayerID;
+        var battleResult = GetMyBattleInfo(nowGroupMark, out tagPlayerID);
+        int challengeCnt = battleResult.ContainsKey((int)PlayerDatas.Instance.baseData.PlayerID) ? battleResult[(int)PlayerDatas.Instance.baseData.PlayerID].Length : 0;
+        if (challengeCnt >= challengeMaxCnt)
         {
-            ILCrossServerModel.Instance.ProcessEnterError(error);
-        }
-
-        uint otherPlayerID = 0;
-        int pos = 1; //鎴戠殑浣嶇疆锛�1-宸︼紱2-鍙�
-        var battle = battleInfo[nowGroupMark];
-        var battleNums = battle.Keys.ToList();
-        var playerID = PlayerDatas.Instance.baseData.PlayerID;
-        for (int i = 0; i < battleNums.Count; i++)
-        {
-            var battleNum = battleNums[i];
-            //鎼滅储鐜╁鏄惁鍙傝禌鑰�
-            if (battle[battleNum].PlayerIDA == playerID)
-            {
-                otherPlayerID = battle[battleNum].PlayerIDB;
-                pos = 1;
-                break;
-            }
-            else if (battle[battleNum].PlayerIDB == playerID)
-            {
-                otherPlayerID = battle[battleNum].PlayerIDA;
-                pos = 2;
-                break;
-            }
-        }
-        if (otherPlayerID == 0)
-        {
-            //杞┖
-            SysNotifyMgr.Instance.ShowTip("CrossServerQualifying4");
+            SysNotifyMgr.Instance.ShowTip("CrossServerQualifying11");
             return;
         }
-        var otherPlayerInfo = fightersInfo[otherPlayerID];
 
-        var package = new HC001_tagGCCrossRealmPKMatchOK();
-        //package.RoomID = 1001;
-        //package.PlayerName = PlayerDatas.Instance.baseData.PlayerName;
-        //package.Number = (byte)pos;
+        int error;
+        if (!dungeonModel.CanEnter(out error))
+        {
+            dungeonModel.ProcessEnterError(error);
+            return;
+        }
+
+
+        var teamModel = ModelCenter.Instance.GetModel<TeamModel>();
+        if (teamModel.isMatching)
+        {
+            teamModel.RequestCancelAutoMatchTeam();
+        }
+
+
+        var otherPlayerInfo = fightersInfo[tagPlayerID];
 
         var opponent = new HC001_tagGCCrossRealmPKMatchOK.tagGCCrossRealmPKMatchPlayer();
         opponent.Job = otherPlayerInfo.Job;
@@ -414,20 +413,18 @@
         opponent.PlayerID = otherPlayerInfo.PlayerID;
 
         opponent.LV = otherPlayerInfo.LV;
-        //寰呰繘鍏ユ父鎴忓埛鏂板鏂硅閲�
-        //opponent.MaxProDef = 100;
-        //opponent.MaxHP = 100;
-        //opponent.MaxHPEx = 0;
-        package.MatchPlayer = new HC001_tagGCCrossRealmPKMatchOK.tagGCCrossRealmPKMatchPlayer[] { opponent };
+        opponent.RealmLV = otherPlayerInfo.RealmLV;
+        opponent.Face = otherPlayerInfo.Face;
+        opponent.FacePic = otherPlayerInfo.FacePic;
+        opponent.FightPower = (uint)((ulong)otherPlayerInfo.FightPower % Constants.ExpPointValue);
+        opponent.FightPowerEx = (uint)((ulong)otherPlayerInfo.FightPower / Constants.ExpPointValue);
 
-        //var sendInfo = new CC105_tagCMEnterCrossServer();
-        //sendInfo.DataMapID = DATA_MAPID;
-        //GameNetSystem.Instance.SendInfo(sendInfo);
-
+        CrossServerLogin.Instance.InitOneVsOnePlayerInfo(opponent);
+        mirrorFightModel.SendMirrorFight(DATA_MAPID, (ushort)(zoneID * 100 + nowGroupMark), tagPlayerID, 0);
         return;
     }
 
-    //鏌ユ壘鑷繁鏄惁鏈夋瘮璧�
+    //鏌ユ壘鑷繁鏄惁鏈夋瘮璧�,鍖呭惈绔炵寽 鍒嗙粍鍜屾垬鏂楃粨鏉熺殑缂撳瓨鏃堕棿
     public bool HaveMyBattle(uint groupMark)
     {
         if (battleInfo.ContainsKey(groupMark))
@@ -449,27 +446,88 @@
         return false;
     }
 
-    public byte OverType;    // 0-姝e父锛�1-鏈変汉绂荤嚎
-    public uint WinnerID;    // 鑳滄柟ID
-    public List<uint> RoundWinnerID = new List<uint>();    // 鍥炲悎鑾疯儨ID鍒楄〃
-
-    public void UpdatePKResult(IL_HC016_tagGCCrossChampionshipPKOver netPack)
+    // 8寮轰箣鍓嶏紝鏌ユ壘鐜╁鐨勪笅涓�鍦烘瘮璧涳紝鑳滃嚭鏈垎缁勫墠涔熺畻
+    public int GetMyNextBattle()
     {
-        if (IsCrossServerQualifying())//鍓湰缁撶畻鐣岄潰
-        {
-            OverType = netPack.OverType;
-            WinnerID = netPack.WinnerID;
-            RoundWinnerID = netPack.RoundWinnerID.ToList();
-            
-            if (WindowCenter.Instance.IsOpen<FightingPKWin>())
+        int nextGroupMark = 0;
+        bool haveBattle = false;
+        for (int k = 0; k < groupBtnMarks.Count; k++)
+        {
+            var groupMark = groupBtnMarks[k];
+            nextGroupMark = (int)groupMark;
+            if (battleInfo.ContainsKey(groupMark))
             {
-                WindowCenter.Instance.Close<FightingPKWin>();
+                var playerID = PlayerDatas.Instance.baseData.PlayerID;
+                var battle = battleInfo[groupMark];
+                var battleNums = battle.Keys.ToList();
+                for (int i = 0; i < battleNums.Count; i++)
+                {
+                    var battleNum = battleNums[i];
+                    //鎼滅储鐜╁鏄惁鍙傝禌鑰�
+                    if (battle[battleNum].WinPlayerID == playerID)
+                    {
+                        haveBattle = true;
+                        continue;
+                    }
+                    if (battle[battleNum].PlayerIDA == playerID || battle[battleNum].PlayerIDB == playerID)
+                    {
+                        haveBattle = true;
+                        return nextGroupMark;
+                    }
+                }
             }
-            WindowCenter.Instance.OpenIL<CrossServerQualifyingSettlementWin>();
         }
+
+        return haveBattle ? nextGroupMark : 0;
     }
 
-    
+
+    //褰撳墠鐨勬瘮璧涙瘮鍒嗘儏鍐�
+    public Dictionary<int, int[][]> GetMyBattleInfo(uint groupMark, out uint tagPlayerID)
+    {
+        tagPlayerID = 0;
+        if (battleInfo.ContainsKey(groupMark))
+        {
+            var playerID = PlayerDatas.Instance.baseData.PlayerID;
+            var battle = battleInfo[groupMark];
+            var battleNums = battle.Keys.ToList();
+            for (int i = 0; i < battleNums.Count; i++)
+            {
+                var battleNum = battleNums[i];
+
+                if (battle[battleNum].PlayerIDA == playerID || battle[battleNum].PlayerIDB == playerID)
+                {
+                    tagPlayerID = battle[battleNum].PlayerIDA == playerID ? battle[battleNum].PlayerIDB : battle[battleNum].PlayerIDA;
+                    return battle[battleNum].battleResult;
+                }
+            }
+        }
+
+        return null;
+    }
+
+
+
+    public uint WinnerID;    // 鑳滄柟ID
+    public int score;
+
+    public void UpdatePKResult()
+    {
+        if (dungeonModel.dungeonResult.isWin == 1)
+        {
+            WinnerID = PlayerDatas.Instance.baseData.PlayerID;
+        }
+
+        score = dungeonModel.dungeonResult.addScore;
+
+        if (WindowCenter.Instance.IsOpen<FightingPKWin>())
+        {
+            WindowCenter.Instance.Close<FightingPKWin>();
+        }
+        WindowCenter.Instance.OpenIL<CrossServerQualifyingSettlementWin>();
+    }
+
+
 
     //绔炵寽鍏叡淇℃伅锛氭敮鎸佷汉鏁�
     public void UpdateGuessCommon(IL_HC022_tagGCChampionshipGuessPubInfo netPack)
@@ -578,8 +636,8 @@
             {
                 guessPlayer8List.Add((int)battle.WinPlayerID);
             }
-        }
-        
+        }
+
         guessPlayer8List.Sort(CompareGuess8);
         return;
     }
@@ -605,14 +663,23 @@
         return idA.CompareTo(idB);
     }
 
+    public bool isShowRaceInfoYet = false; //鏄惁宸茬粡鏄剧ず杩囪禌绋嬩俊鎭皬鎻愮ず
+    uint pushGroupMark = 0; //姣忓満姣旇禌鍙帹閫佷竴娆�
     void OnMinuteEvent()
     {
-        if (!WindowCenter.Instance.IsOpen("CrossServerQualifyingWin") && mapList.IndexOf(PlayerDatas.Instance.baseData.MapID) == -1)
+        if (!WindowCenter.Instance.IsOpen("CrossServerQualifyingWin") &&
+            dungeonModel.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID) != DATA_MAPID)
         {
+            uint nowMark = nowGroupMark;
             //鍑嗗鍏ュ満鐨勬椂鍊欐帹閫�
-            if (GetBattleID() % 10 == 2 && HaveMyBattle(nowGroupMark))
-            { 
-                HeroControler.Instance.FuncPush(210);
+            if (pushGroupMark != nowMark && HaveMyBattle(nowMark))
+            {
+                int battleID = GetBattleID();
+                if (ILChampionshipTimeConfig.Get(battleID).StateValue % 10 == 2)
+                {
+                    HeroControler.Instance.FuncPush(210);
+                    pushGroupMark = nowMark;
+                }
             }
         }
     }
@@ -641,12 +708,14 @@
                 });
             }
 
-            rankOfficialDict[(int)officialInfo.OfficialID] = new ChampionshipOfficial() {
+            rankOfficialDict[(int)officialInfo.OfficialID] = new ChampionshipOfficial()
+            {
                 LastDismissJuniorTime = officialInfo.LastDismissJuniorTime,
                 WorshipCount = officialInfo.WorshipCount,
                 WorshipDouble = officialInfo.WorshipDouble,
 
-                OfficialPlayer = new CrossChampionshipPKPlayer() {
+                OfficialPlayer = new CrossChampionshipPKPlayer()
+                {
                     PlayerID = officialInfo.OfficialPlayer.PlayerID,
                     Job = officialInfo.OfficialPlayer.Job,
                     PlayerName = officialInfo.OfficialPlayer.PlayerName,
@@ -707,7 +776,7 @@
     void RefreshMyApplyCnt()
     {
         if (myOfficialID != 0)
-        { 
+        {
             myApplyCnt = 0;
             return;
         }
@@ -808,9 +877,9 @@
             }
         }
         WindowCenter.Instance.OpenIL<CrossServerQualifyingOfficialNoteWin>();
-    }
-
-    
+    }
+
+
     public void UpdateWorship(IL_HC109_tagMCChampionshipPlayerInfo netPack)
     {
         worshipCntToday = netPack.WorshipCount;
@@ -852,7 +921,7 @@
     private IEnumerator PlayerQuery()
     {
         for (int i = 0; i < playerIDList.Count; i++)
-        { 
+        {
             QueryKaiKingInfo(playerIDList[i]);
             yield return null;
         }

--
Gitblit v1.8.0