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