From 5fad96c186ea82bf6aa105824023fc1077ce64cd Mon Sep 17 00:00:00 2001
From: client_Wu Xijin <364452445@qq.com>
Date: 星期六, 16 二月 2019 16:25:46 +0800
Subject: [PATCH] 6197 【前端】【1.6】跨服匹配添加机器人

---
 System/CrossServerOneVsOne/CrossServerOneVsOneModel.cs |  181 +++++++++++++++++++++++++++-----------------
 1 files changed, 110 insertions(+), 71 deletions(-)

diff --git a/System/CrossServerOneVsOne/CrossServerOneVsOneModel.cs b/System/CrossServerOneVsOne/CrossServerOneVsOneModel.cs
index 14b420b..3d307e8 100644
--- a/System/CrossServerOneVsOne/CrossServerOneVsOneModel.cs
+++ b/System/CrossServerOneVsOne/CrossServerOneVsOneModel.cs
@@ -10,7 +10,7 @@
 {
     [XLua.Hotfix]
     [XLua.LuaCallCSharp]
-    public class CrossServerOneVsOneModel : Model, IBeforePlayerDataInitialize, IAfterPlayerDataInitialize,ISwitchAccount ,IPlayerLoginOk
+    public class CrossServerOneVsOneModel : Model, IBeforePlayerDataInitialize, IAfterPlayerDataInitialize, ISwitchAccount, IPlayerLoginOk
     {
         public string PkResultLocalSaveKey { get; private set; }
         public List<CrossServerOneVsOnePkResult> localSaveResults { get; private set; }
@@ -23,10 +23,9 @@
         private bool _isMatching;
         public bool IsMatching {
             get { return _isMatching; }
-            set
-            {
+            set {
                 _isMatching = value;
-                if(UpdateMatchStateEvent != null)
+                if (UpdateMatchStateEvent != null)
                 {
                     UpdateMatchStateEvent();
                 }
@@ -62,12 +61,12 @@
             CrossServerOneVsOnePlayerInfo.Instance.UpdatePlayerInfoEvent -= UpdateDayAwardState;
             InitData();
         }
-     
+
         public void OnAfterPlayerDataInitialize()
         {
             int playerId = (int)PlayerDatas.Instance.baseData.PlayerID;
             PkResultLocalSaveKey = StringUtility.Contact("PkResultLocalSaveKey", playerId);
-            LocalSaveThirdTypeKey = StringUtility.Contact("HonorStoreThirdType",playerId);
+            LocalSaveThirdTypeKey = StringUtility.Contact("HonorStoreThirdType", playerId);
             GetLocalSaveData();
         }
 
@@ -91,7 +90,7 @@
             dungeonModel.updateMissionEvent += UpdateFBHelp;
             UpdateServerOpenDay();
             UpdateDayAwardState();
-            if(IsMatching && CrossServerOneVsOnePKSeason.Instance.InOpenTime())
+            if (IsMatching && CrossServerOneVsOnePKSeason.Instance.InOpenTime())
             {
                 SendCrossMatch(1);
             }
@@ -117,7 +116,7 @@
         private void UpdateSecond()
         {
             loadSecond += 1;
-            if(loadSecond >= 5)
+            if (loadSecond >= 5)
             {
                 recordDataMapId = dungeonModel.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID);
                 GlobalTimeEvent.Instance.secondEvent -= UpdateSecond;
@@ -129,11 +128,11 @@
         private void OnLoadMapFinish()
         {
             var dataMapId = dungeonModel.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID);
-            if(recordDataMapId == CrossServerDataMapId
+            if (recordDataMapId == CrossServerDataMapId
                 && dataMapId != CrossServerDataMapId)
             {
                 var pkSeason = CrossServerOneVsOnePKSeason.Instance;
-                if(pkSeason.IsEnterCrossServer())
+                if (pkSeason.IsEnterCrossServer())
                 {
                     WindowCenter.Instance.Open<CrossServerWin>();
                 }
@@ -146,7 +145,7 @@
             UpdateCrossMatchRedpoint();
             if (!IsMatching) return;
 
-            if(!CrossServerOneVsOnePKSeason.Instance.isSatisfyMatch)
+            if (!CrossServerOneVsOnePKSeason.Instance.isSatisfyMatch)
             {
                 IsMatching = false;
                 SendCrossMatch(0);
@@ -156,24 +155,24 @@
         public void UpdateDayAwardState()
         {
             var playerInfo = CrossServerOneVsOnePlayerInfo.Instance;
-            for(int i = 0; i < dayAwardTypelist.Count; i++)
+            for (int i = 0; i < dayAwardTypelist.Count; i++)
             {
                 var dayAward = dayAwardTypelist[i];
                 int awardType = dayAward.type;
-                switch(awardType)
+                switch (awardType)
                 {
                     case 1:
-                        dayAward.IsReceived = rewardModel.IsAwardState(CrossRealmPKAwardStateEnum.DayWinCountAwardState,dayAward.index);
+                        dayAward.IsReceived = rewardModel.IsAwardState(CrossRealmPKAwardStateEnum.DayWinCountAwardState, dayAward.index);
                         dayAward.SetCompletedNum(playerInfo.DayWinCount);
                         break;
                     case 2:
-                        dayAward.IsReceived = rewardModel.IsAwardState(CrossRealmPKAwardStateEnum.DayPKCountAwardState,dayAward.index);
+                        dayAward.IsReceived = rewardModel.IsAwardState(CrossRealmPKAwardStateEnum.DayPKCountAwardState, dayAward.index);
                         dayAward.SetCompletedNum(playerInfo.DayPKCount);
                         break;
                 }
             }
 
-            if(UpdateDayAwardsEvent != null)
+            if (UpdateDayAwardsEvent != null)
             {
                 UpdateDayAwardsEvent();
             }
@@ -203,27 +202,30 @@
 
         private void UpdateFBHelp()
         {
-            if (!CrossServerUtility.IsCrossServer()) return;
+            if (!CrossServerUtility.IsCrossServerOneVsOne())
+            {
+                return;
+            }
 
             var hero = PlayerDatas.Instance.hero;
             var mission = dungeonModel.mission;
-            if(mission.prepareTime > 0)
+            if (mission.prepareTime > 0)
             {
                 roundEndTime = DateTime.Now + new TimeSpan(mission.prepareTime * TimeSpan.TicksPerMillisecond);
                 if (!WindowCenter.Instance.IsOpen<CrossServerOneVsOneRoundWin>())
                 {
                     WindowCenter.Instance.Open<CrossServerOneVsOneRoundWin>();
                 }
-                if(hero != null)
+                if (hero != null)
                 {
                     hero.Behaviour.StopHandupAI(true);
                 }
-              
+
             }
-            DebugEx.LogFormat("鍓湰甯姪淇℃伅鍥炲悎鏄惁寮�濮嬶細锛歿0}",mission.isStart);
+            DebugEx.LogFormat("鍓湰甯姪淇℃伅鍥炲悎鏄惁寮�濮嬶細锛歿0}", mission.isStart);
             if (mission.isStart == 1)
             {
-                if(WindowCenter.Instance.IsOpen<CrossServerOneVsOneRoundWin>())
+                if (WindowCenter.Instance.IsOpen<CrossServerOneVsOneRoundWin>())
                 {
                     WindowCenter.Instance.Close<CrossServerOneVsOneRoundWin>();
                 }
@@ -245,7 +247,7 @@
             return dayAwardTypelist;
         }
 
-        public int CompareByCompleteProgress(AwardType start,AwardType end)
+        public int CompareByCompleteProgress(AwardType start, AwardType end)
         {
             int x = (int)start.progress;
             int y = (int)end.progress;
@@ -262,7 +264,7 @@
             return 0;
         }
 
-        public bool IsNewDay { get; private set;}
+        public bool IsNewDay { get; private set; }
         private void UpdateServerOpenDay()
         {
             var pkSeason = CrossServerOneVsOnePKSeason.Instance;
@@ -270,15 +272,15 @@
 
             IsNewDay = false;
             int openDay = TimeUtility.OpenDay;
-            if(!PlayerPrefs.HasKey(LocalSaveThirdTypeKey))
+            if (!PlayerPrefs.HasKey(LocalSaveThirdTypeKey))
             {
                 IsNewDay = true;
-                LocalSave.SetInt(LocalSaveThirdTypeKey,openDay);
+                LocalSave.SetInt(LocalSaveThirdTypeKey, openDay);
             }
             else
             {
                 int localOpenDay = LocalSave.GetInt(LocalSaveThirdTypeKey);
-                if(openDay != localOpenDay)
+                if (openDay != localOpenDay)
                 {
                     IsNewDay = true;
                     LocalSave.SetInt(LocalSaveThirdTypeKey, openDay);
@@ -291,10 +293,10 @@
         #region 琛ㄦ暟鎹�
         public int freeMaxMatchNum { get; private set; } //姣忔棩鍏嶈垂鍖归厤娆℃暟
         public int buyMaxMatchNum { get; private set; } //姣忔棩鍙喘涔版鏁�
-        public string priceFormula { get;private set;} //璐拱鍖归厤娆℃暟闇�瑕佷环鏍煎叕寮�
+        public string priceFormula { get; private set; } //璐拱鍖归厤娆℃暟闇�瑕佷环鏍煎叕寮�
         public string winStreakScoreFormula { get; private set; } //杩炶儨绉垎鍏紡
         public List<AwardType> dayAwardTypelist { get; private set; }
-        public int afterOpenDayOpenCross { get; private set;}
+        public int afterOpenDayOpenCross { get; private set; }
         private void ParseFuncConfig()
         {
             var CrossRealmPKAward = FuncConfigConfig.Get("CrossRealmPKAward");
@@ -306,14 +308,14 @@
             {
                 int times = int.Parse(num);
                 var items = dayWinAwardData[num];
-                var awardType = new AwardType(times,1,dayWinIndex);
+                var awardType = new AwardType(times, 1, dayWinIndex);
                 dayAwardTypelist.Add(awardType);
                 if (items.IsArray)
                 {
-                    for(int i = 0; i < items.Count; i++)
+                    for (int i = 0; i < items.Count; i++)
                     {
                         var itemInfo = items[i];
-                        if(itemInfo.IsArray && itemInfo.Count >= 3)
+                        if (itemInfo.IsArray && itemInfo.Count >= 3)
                         {
                             int id = 0;
                             int.TryParse(itemInfo[0].ToString(), out id);
@@ -335,11 +337,11 @@
             {
                 int times = int.Parse(num);
                 var items = dayMatchAwardData[num];
-                var awardType = new AwardType(times,2,dayPkIndex);
+                var awardType = new AwardType(times, 2, dayPkIndex);
                 dayAwardTypelist.Add(awardType);
                 if (items.IsArray)
                 {
-                    for(int i = 0;i < items.Count; i++)
+                    for (int i = 0; i < items.Count; i++)
                     {
                         var itemInfo = items[i];
                         if (itemInfo.IsArray && itemInfo.Count >= 3)
@@ -375,12 +377,12 @@
         {
             public int type { get; private set; } //1 鑳滃埄濂栧姳 2 鍖归厤濂栧姳 
             public int index { get; private set; }
-            public int num { get; private set;}
+            public int num { get; private set; }
             public int curCompletedNum { get; private set; }
-            public CompleteProgress progress { get; private set;}
+            public CompleteProgress progress { get; private set; }
             public bool IsReceived { get; set; }
             public List<AwardItem> awardItems = new List<AwardItem>();
-            public AwardType(int _num,int _type,int _index)
+            public AwardType(int _num, int _type, int _index)
             {
                 type = _type;
                 num = _num;
@@ -399,7 +401,7 @@
             public void SetCompletedNum(int completedNum)
             {
                 curCompletedNum = completedNum;
-                if(IsReceived)
+                if (IsReceived)
                 {
                     curCompletedNum = num;
                     progress = CompleteProgress.AlreadyReceived;
@@ -423,7 +425,7 @@
             public int itemId;
             public int itemCount;
             public int isBind;
-            public AwardItem(int _id,int _count,int _isBind)
+            public AwardItem(int _id, int _count, int _isBind)
             {
                 itemId = _id;
                 itemCount = _count;
@@ -433,18 +435,20 @@
         #endregion
 
         #region 鍗忚
-        public CrossServerOneVsOnePkResult pkResultInfo { get; private set;}
+        public CrossServerOneVsOnePkResult pkResultInfo { get; private set; }
         public event Action UpdatePkResultEvent;
         public void UpdatePKResultInfo(HC003_tagGCCrossRealmPKOverInfo pKOverInfo)
         {
             pkResultInfo = new CrossServerOneVsOnePkResult();
             pkResultInfo.UpdatePkResult(pKOverInfo);
             SetPkInfoLocalSave(pkResultInfo);
-            if(UpdatePkResultEvent != null)
+            if (UpdatePkResultEvent != null)
             {
                 UpdatePkResultEvent();
             }
         }
+
+        Clock clientMatchClock;
         PlayerBuffDatas buffDatas { get { return ModelCenter.Instance.GetModel<PlayerBuffDatas>(); } }
         /// <summary>
         ///0-鍙栨秷鍖归厤; 1-杩涜鍖归厤
@@ -454,10 +458,45 @@
         {
             if (type == 1 && TryGetMatchTip()) return;
 
-            CC101_tagCMCrossRealmPKMatch match = new CC101_tagCMCrossRealmPKMatch();
-            match.Type = (byte)type;
-            GameNetSystem.Instance.SendInfo(match);
-            CrossServerOneVsOneRewardModel.PkType = buffDatas.PkType;
+            if (type == 1)
+            {
+                var danLevel = CrossServerOneVsOnePlayerInfo.Instance.DanLV;
+                if (ClientCrossServerOneVsOne.TryClientCrossServerOneVsOne(danLevel))
+                {
+                    var onMatchPackage = new HC002_tagGCCrossRealmPKStartMatch();
+                    GameNetSystem.Instance.PushPackage(onMatchPackage, ServerType.Main);
+                    var randomWaitSeconds = UnityEngine.Random.Range(3, 8);
+                    clientMatchClock = Clock.Create(DateTime.Now + new TimeSpan(randomWaitSeconds * TimeSpan.TicksPerSecond), () =>
+                   {
+                       if (StageLoad.Instance.stageType == Stage.E_StageType.Dungeon)
+                       {
+                           ClientCrossServerOneVsOne.FakeMatchOk();
+                       }
+                   });
+                }
+                else
+                {
+                    var match = new CC101_tagCMCrossRealmPKMatch();
+                    match.Type = (byte)type;
+                    GameNetSystem.Instance.SendInfo(match);
+                    CrossServerOneVsOneRewardModel.PkType = buffDatas.PkType;
+                }
+            }
+            else
+            {
+                if (clientMatchClock != null && !clientMatchClock.stopped)
+                {
+                    clientMatchClock.Stop();
+                    IsMatching = false;
+                }
+                else
+                {
+                    var match = new CC101_tagCMCrossRealmPKMatch();
+                    match.Type = (byte)type;
+                    GameNetSystem.Instance.SendInfo(match);
+                    CrossServerOneVsOneRewardModel.PkType = buffDatas.PkType;
+                }
+            }
         }
 
         public void SendBuyMatchCount()
@@ -470,7 +509,7 @@
         {
             int mapId = PlayerDatas.Instance.baseData.MapID;
             bool isCrossDungeon = CrossServerUtility.IsCrossServer();
-            if(isCrossDungeon)
+            if (isCrossDungeon)
             {
                 SysNotifyMgr.Instance.ShowTip("CrossMatching3");
                 return true;
@@ -485,7 +524,7 @@
             }
 
             var deadModel = ModelCenter.Instance.GetModel<PlayerDeadModel>();
-            if(deadModel.playerIsDie)
+            if (deadModel.playerIsDie)
             {
                 SysNotifyMgr.Instance.ShowTip("CrossMatching5");
                 return true;
@@ -493,21 +532,21 @@
 
             var teamModel = ModelCenter.Instance.GetModel<TeamModel>();
             bool isTeamMatch = teamModel.isMatching;
-            if(isTeamMatch)
+            if (isTeamMatch)
             {
                 SysNotifyMgr.Instance.ShowTip("CrossMatching6");
                 return true;
             }
 
             bool isDungeonPrepare = teamModel.teamPrepare.isPreparing;
-            if(isDungeonPrepare)
+            if (isDungeonPrepare)
             {
                 SysNotifyMgr.Instance.ShowTip("CrossMatching7");
                 return true;
             }
 
             int remainMatchNum = CrossServerOneVsOnePlayerInfo.Instance.GetDayRemainNum();
-            if(remainMatchNum <= 0)
+            if (remainMatchNum <= 0)
             {
                 SysNotifyMgr.Instance.ShowTip("CrossMatching16");
                 return true;
@@ -581,9 +620,9 @@
         {
             localSaveResults = new List<CrossServerOneVsOnePkResult>();
             string[] localJsons = LocalSave.GeStringArray(PkResultLocalSaveKey);
-            if(localJsons != null)
+            if (localJsons != null)
             {
-                for(int i = 0; i < localJsons.Length; i++)
+                for (int i = 0; i < localJsons.Length; i++)
                 {
                     CrossServerOneVsOnePkResult resultInfo = JsonMapper.ToObject<CrossServerOneVsOnePkResult>(localJsons[i]);
                     localSaveResults.Add(resultInfo);
@@ -597,14 +636,14 @@
             {
                 localSaveResults.RemoveAt(localSaveResults.Count - 1);
             }
-            localSaveResults.Insert(0,resultInfo);
+            localSaveResults.Insert(0, resultInfo);
             string[] localJsons = new string[localSaveResults.Count];
-            for(int i = 0; i < localJsons.Length; i++)
+            for (int i = 0; i < localJsons.Length; i++)
             {
                 string json = JsonMapper.ToJson(localSaveResults[i]);
                 localJsons[i] = json;
             }
-            LocalSave.SetStringArray(PkResultLocalSaveKey,localJsons);
+            LocalSave.SetStringArray(PkResultLocalSaveKey, localJsons);
         }
 
         #endregion
@@ -612,28 +651,28 @@
         #region 绾㈢偣
 
         public const int CrossOneVsOneRedKey = 21301;
-        public Redpoint crossOneVsOneRedpoint = new Redpoint(CrossServerUtility.CrossServerRedKey,CrossOneVsOneRedKey);
+        public Redpoint crossOneVsOneRedpoint = new Redpoint(CrossServerUtility.CrossServerRedKey, CrossOneVsOneRedKey);
         public const int CrossArenaRedKey = 2130101;
         public Redpoint crossArenaRedpoint = new Redpoint(CrossOneVsOneRedKey, CrossArenaRedKey);
         public const int CrossDayAwardsRedKey = 21301011;
-        public Redpoint crossDayAwardsRedpoint = new Redpoint(CrossArenaRedKey,CrossDayAwardsRedKey);
+        public Redpoint crossDayAwardsRedpoint = new Redpoint(CrossArenaRedKey, CrossDayAwardsRedKey);
         public const int CrossMatchRedKey = 21301012;
         public Redpoint crossMatchRedpoint = new Redpoint(CrossArenaRedKey, CrossMatchRedKey);
 
         public void UpdateCrossDayAwardsRedpoint()
         {
             bool isReceive = false;
-            for(int i = 0; i < dayAwardTypelist.Count; i++)
+            for (int i = 0; i < dayAwardTypelist.Count; i++)
             {
                 var awardType = dayAwardTypelist[i];
-                if(awardType.progress == AwardType.CompleteProgress.Completed)
+                if (awardType.progress == AwardType.CompleteProgress.Completed)
                 {
                     isReceive = true;
                     break;
                 }
             }
 
-            if(isReceive)
+            if (isReceive)
             {
                 crossDayAwardsRedpoint.state = RedPointState.Simple;
             }
@@ -650,7 +689,7 @@
             var playerInfo = CrossServerOneVsOnePlayerInfo.Instance;
             var pkSeason = CrossServerOneVsOnePKSeason.Instance;
 
-            if (pkSeason.isSatisfyMatch&& playerInfo.GetDayRemainNum() > 0  )
+            if (pkSeason.isSatisfyMatch && playerInfo.GetDayRemainNum() > 0)
             {
                 crossMatchRedpoint.state = RedPointState.Simple;
             }
@@ -666,7 +705,7 @@
         }
 
         #region 鑽h獕鍟嗗簵绾㈢偣
-     
+
         public const int CrossHonorStoreRedKey = 2130104;
         public Redpoint crossHonorStoreRedpoint = new Redpoint(CrossOneVsOneRedKey, CrossHonorStoreRedKey);
         private Dictionary<int, Redpoint> honorRedpointDict = new Dictionary<int, Redpoint>();
@@ -679,9 +718,9 @@
                 StoreConfig storeConfig = storelist[i];
                 int redKey = 0;
                 Redpoint redpoint = null;
-                if(storeConfig.ShopType == (int)StoreFunc.CrossOneVsOneHonor)
+                if (storeConfig.ShopType == (int)StoreFunc.CrossOneVsOneHonor)
                 {
-                    redKey = CrossHonorStoreRedKey *100 + storeConfig.ID;
+                    redKey = CrossHonorStoreRedKey * 100 + storeConfig.ID;
                     redpoint = new Redpoint(CrossHonorStoreRedKey, redKey);
                     honorRedpointDict.Add(storeConfig.ID, redpoint);
                 }
@@ -691,13 +730,13 @@
         public Redpoint GetRedpointById(int shopId)
         {
             Redpoint redpoint = null;
-            honorRedpointDict.TryGetValue(shopId,out redpoint);
+            honorRedpointDict.TryGetValue(shopId, out redpoint);
             return redpoint;
         }
 
         private void UpdatePlayerData(PlayerDataRefresh type)
         {
-            switch(type)
+            switch (type)
             {
                 case PlayerDataRefresh.CDBPlayerRefresh_Honor:
                     UpdateCanBuyRedpoint();
@@ -712,9 +751,9 @@
             if (!pkSeason.IsEnterCrossServer()) return;
 
             List<StoreModel.StoreData> storeDatas = storeModel.TryGetStoreDatas((int)StoreFunc.CrossOneVsOneHonor);
-            if(storeDatas != null)
+            if (storeDatas != null)
             {
-                for(int i = 0; i < storeDatas.Count; i++)
+                for (int i = 0; i < storeDatas.Count; i++)
                 {
                     var storeData = storeDatas[i];
                     var storeConfig = storeData.storeConfig;
@@ -727,7 +766,7 @@
                         honorRedpointDict[storeConfig.ID].state = RedPointState.None;
                         if (!storeModel.TryGetIsSellOut(storeConfig, out remainNum))
                         {
-                            if(!PlayerPrefs.HasKey(key)|| IsNewDay)
+                            if (!PlayerPrefs.HasKey(key) || IsNewDay)
                             {
                                 if (UIHelper.GetMoneyCnt(storeConfig.MoneyType) >= (ulong)storeConfig.MoneyNumber)
                                 {
@@ -737,7 +776,7 @@
                             }
                             else
                             {
-                                if(LocalSave.GetBool(key))
+                                if (LocalSave.GetBool(key))
                                 {
                                     if (UIHelper.GetMoneyCnt(storeConfig.MoneyType) >= (ulong)storeConfig.MoneyNumber)
                                     {
@@ -773,7 +812,7 @@
         {
             IsNewDay = false;
             string record = StringUtility.Contact(PlayerDatas.Instance.baseData.PlayerID, "ShopId", shopId);
-            if(honorRedpointDict[shopId].state != RedPointState.None)
+            if (honorRedpointDict[shopId].state != RedPointState.None)
             {
                 honorRedpointDict[shopId].state = RedPointState.None;
                 LocalSave.SetBool(record, false);

--
Gitblit v1.8.0