From 43c7968a67336472d883fb343387b7fba3fc0694 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期二, 17 三月 2026 18:15:05 +0800
Subject: [PATCH] 515 【挑战】PVP群英榜
---
Main/System/Qunying/QYBattleFailWin.cs.meta | 11
Main/System/Qunying/QYFighterCell.cs.meta | 11
Main/System/Battle/BattleField/QYBattleField.cs.meta | 11
Main/System/Battle/BattleConst.cs | 6
Main/System/Qunying/QYPlayerTop3Cell.cs | 53 +
Main/System/Qunying/QYBattleWin.cs | 306 ++++++++++
Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA924_tagSCQunyingMatchList.cs | 12
Main/System/Qunying/QYPlayerTop3Cell.cs.meta | 11
Main/System/Qunying/QYBattleVictoryWin.cs.meta | 11
Main/System/FuncPreset/FuncPresetManager.cs | 7
Main/System/Qunying/QunyingManager.cs | 275 +++++++++
Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA924_tagSCQunyingMatchList.cs.meta | 11
Main/System/Battle/BattleFieldFactory.cs | 3
Main/System/Settlement/BattleSettlementManager.cs | 13
Main/Core/NetworkPackage/ServerPack/HA9_Function/HA924_tagSCQunyingMatchList.cs.meta | 11
Main/System/Battle/BattleField/QYBattleField.cs | 106 +++
Main/Main.cs | 1
Main/System/Qunying/QYFighterCell.cs | 173 ++++++
Main/System/Store/StoreModel.cs | 24
Main/Core/NetworkPackage/ServerPack/HA9_Function/HA924_tagSCQunyingMatchList.cs | 51 +
Main/System/Qunying/QYBattleVictoryWin.cs | 141 +++++
Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA925_tagSCQunyingPlayerInfo.cs | 12
Main/System/Qunying/QYBattleFailWin.cs | 99 +++
Main/System/BillboardRank/RankModel.cs | 16
Main/System/Qunying/QYBattleWin.cs.meta | 11
Main/System/ViewNPC/ViewNPCManager.cs | 12
Main/Utility/EnumHelper.cs | 2
Main/Core/NetworkPackage/ServerPack/HA9_Function/HA925_tagSCQunyingPlayerInfo.cs | 23
Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB210_tagCSQunyingMatch.cs.meta | 11
Main/System/Battle/BattleManager.cs | 4
Main/Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0320_tagFBEnd.cs | 1
Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA925_tagSCQunyingPlayerInfo.cs.meta | 11
Main/System/Qunying/QYWin.cs | 117 ++++
Main/System/Qunying/QYWin.cs.meta | 11
Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs | 2
Main/System/ChallengeTab/QunyingTabHandler.cs | 41
Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB210_tagCSQunyingMatch.cs | 18
Main/Core/NetworkPackage/ServerPack/HA9_Function/HA925_tagSCQunyingPlayerInfo.cs.meta | 11
38 files changed, 1,620 insertions(+), 30 deletions(-)
diff --git a/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB210_tagCSQunyingMatch.cs b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB210_tagCSQunyingMatch.cs
new file mode 100644
index 0000000..b23430e
--- /dev/null
+++ b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB210_tagCSQunyingMatch.cs
@@ -0,0 +1,18 @@
+using UnityEngine;
+using System.Collections;
+
+// B2 10 缇よ嫳姒滃尮閰嶇帺瀹� #tagCSQunyingMatch
+
+public class CB210_tagCSQunyingMatch : GameNetPackBasic {
+ public byte IsRefresh; // 0-鎵撳紑鐣岄潰鏃舵煡璇紝1-寮哄埗鍒锋柊鍖归厤鍒楄〃
+
+ public CB210_tagCSQunyingMatch () {
+ combineCmd = (ushort)0x03FE;
+ _cmd = (ushort)0xB210;
+ }
+
+ public override void WriteToBytes () {
+ WriteBytes (IsRefresh, NetDataType.BYTE);
+ }
+
+}
diff --git a/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB210_tagCSQunyingMatch.cs.meta b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB210_tagCSQunyingMatch.cs.meta
new file mode 100644
index 0000000..68f98bb
--- /dev/null
+++ b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB210_tagCSQunyingMatch.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 809fff7a1e32fed408b8f79146ede0c5
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0320_tagFBEnd.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0320_tagFBEnd.cs
index ec94251..3790c07 100644
--- a/Main/Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0320_tagFBEnd.cs
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/H03_MainCharacter/DTC0320_tagFBEnd.cs
@@ -9,5 +9,6 @@
H0320_tagFBEnd vNetData = vNetPack as H0320_tagFBEnd;
BoneFieldManager.Instance.UpdateFBEnd(vNetData);
TianziBillboradManager.Instance.UpdateFBEnd(vNetData);
+ QunyingManager.Instance.UpdateFBEnd(vNetData);
}
}
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA924_tagSCQunyingMatchList.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA924_tagSCQunyingMatchList.cs
new file mode 100644
index 0000000..0ba495d
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA924_tagSCQunyingMatchList.cs
@@ -0,0 +1,12 @@
+using UnityEngine;
+using System.Collections;
+
+// A9 24 缇よ嫳姒滃尮閰嶇帺瀹跺垪琛� #tagSCQunyingMatchList
+
+public class DTCA924_tagSCQunyingMatchList : DtcBasic {
+ public override void Done(GameNetPackBasic vNetPack) {
+ base.Done(vNetPack);
+ HA924_tagSCQunyingMatchList vNetData = vNetPack as HA924_tagSCQunyingMatchList;
+ QunyingManager.Instance.UpdateQunyingMatchInfo(vNetData);
+ }
+}
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA924_tagSCQunyingMatchList.cs.meta b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA924_tagSCQunyingMatchList.cs.meta
new file mode 100644
index 0000000..85fa043
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA924_tagSCQunyingMatchList.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ff9bbc83b46795c4fa7c9acf79289dcb
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA925_tagSCQunyingPlayerInfo.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA925_tagSCQunyingPlayerInfo.cs
new file mode 100644
index 0000000..4b0759c
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA925_tagSCQunyingPlayerInfo.cs
@@ -0,0 +1,12 @@
+using UnityEngine;
+using System.Collections;
+
+// A9 25 缇よ嫳姒滅帺瀹朵俊鎭� #tagSCQunyingPlayerInfo
+
+public class DTCA925_tagSCQunyingPlayerInfo : DtcBasic {
+ public override void Done(GameNetPackBasic vNetPack) {
+ base.Done(vNetPack);
+ HA925_tagSCQunyingPlayerInfo vNetData = vNetPack as HA925_tagSCQunyingPlayerInfo;
+ QunyingManager.Instance.UpdateQunyingInfo(vNetData);
+ }
+}
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA925_tagSCQunyingPlayerInfo.cs.meta b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA925_tagSCQunyingPlayerInfo.cs.meta
new file mode 100644
index 0000000..099bd81
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA925_tagSCQunyingPlayerInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 960c25e4865aa4d4c894e9bf02f76dd0
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs b/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
index d8be3e8..e0253d2 100644
--- a/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
+++ b/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
@@ -159,6 +159,8 @@
Register(typeof(HAA20_tagSCActSignPlayerInfo), typeof(DTCAA20_tagSCActSignPlayerInfo));
Register(typeof(HAA21_tagSCActHeroAppearInfo), typeof(DTCAA21_tagSCActHeroAppearInfo));
Register(typeof(HAA22_tagSCActHeroAppearPlayerInfo), typeof(DTCAA22_tagSCActHeroAppearPlayerInfo));
+ Register(typeof(HA924_tagSCQunyingMatchList), typeof(DTCA924_tagSCQunyingMatchList));
+ Register(typeof(HA925_tagSCQunyingPlayerInfo), typeof(DTCA925_tagSCQunyingPlayerInfo));
}
//涓诲伐绋嬫敞鍐屽皝鍖�
diff --git a/Main/Core/NetworkPackage/ServerPack/HA9_Function/HA924_tagSCQunyingMatchList.cs b/Main/Core/NetworkPackage/ServerPack/HA9_Function/HA924_tagSCQunyingMatchList.cs
new file mode 100644
index 0000000..4249ee3
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HA9_Function/HA924_tagSCQunyingMatchList.cs
@@ -0,0 +1,51 @@
+using UnityEngine;
+using System.Collections;
+
+// A9 24 缇よ嫳姒滃尮閰嶇帺瀹跺垪琛� #tagSCQunyingMatchList
+
+public class HA924_tagSCQunyingMatchList : GameNetPackBasic {
+ public byte MatchCount;
+ public tagSCQunyingMatchInfo[] MatchList; // 鍖归厤鍒楄〃锛屼粠楂樺垎鍒颁綆鍒�
+
+ public HA924_tagSCQunyingMatchList () {
+ _cmd = (ushort)0xA924;
+ }
+
+ public override void ReadFromBytes (byte[] vBytes) {
+ TransBytes (out MatchCount, vBytes, NetDataType.BYTE);
+ MatchList = new tagSCQunyingMatchInfo[MatchCount];
+ for (int i = 0; i < MatchCount; i ++) {
+ MatchList[i] = new tagSCQunyingMatchInfo();
+ TransBytes (out MatchList[i].Rank, vBytes, NetDataType.WORD);
+ TransBytes (out MatchList[i].PlayerID, vBytes, NetDataType.DWORD);
+ TransBytes (out MatchList[i].PlayerName, vBytes, NetDataType.Chars, 33);
+ TransBytes (out MatchList[i].LV, vBytes, NetDataType.WORD);
+ TransBytes (out MatchList[i].RealmLV, vBytes, NetDataType.WORD);
+ TransBytes (out MatchList[i].FightPower, vBytes, NetDataType.DWORD);
+ TransBytes (out MatchList[i].FightPowerEx, vBytes, NetDataType.DWORD);
+ TransBytes (out MatchList[i].Face, vBytes, NetDataType.DWORD);
+ TransBytes (out MatchList[i].FacePic, vBytes, NetDataType.DWORD);
+ TransBytes (out MatchList[i].TitleID, vBytes, NetDataType.DWORD);
+ TransBytes (out MatchList[i].ModelMark, vBytes, NetDataType.DWORD);
+ TransBytes (out MatchList[i].EquipShowSwitch, vBytes, NetDataType.DWORD);
+ TransBytes (out MatchList[i].ServerID, vBytes, NetDataType.DWORD);
+ }
+ }
+
+ public class tagSCQunyingMatchInfo {
+ public ushort Rank; //鎺掑悕锛屼粠1寮�濮�
+ public uint PlayerID; //鐩爣鐜╁ID
+ public string PlayerName;
+ public ushort LV; // 鐜╁绛夌骇
+ public ushort RealmLV; //澧冪晫锛屾満鍣ㄤ汉璇诲鐣岃〃鍙栫瓑绾у搴斿鐣�
+ public uint FightPower; //鎴樺姏姹備綑浜块儴鍒�
+ public uint FightPowerEx; //鎴樺姏鏁撮櫎浜块儴鍒�
+ public uint Face; //鍩烘湰鑴稿瀷
+ public uint FacePic; //澶村儚妗�
+ public uint TitleID; //绉板彿
+ public uint ModelMark; //鍙樺舰妯″瀷mark
+ public uint EquipShowSwitch; //鍏朵粬澶栬淇℃伅
+ public uint ServerID;
+ }
+
+}
diff --git a/Main/Core/NetworkPackage/ServerPack/HA9_Function/HA924_tagSCQunyingMatchList.cs.meta b/Main/Core/NetworkPackage/ServerPack/HA9_Function/HA924_tagSCQunyingMatchList.cs.meta
new file mode 100644
index 0000000..aea9af1
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HA9_Function/HA924_tagSCQunyingMatchList.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 641ac365694c83f4db552c0105d7c26f
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/Core/NetworkPackage/ServerPack/HA9_Function/HA925_tagSCQunyingPlayerInfo.cs b/Main/Core/NetworkPackage/ServerPack/HA9_Function/HA925_tagSCQunyingPlayerInfo.cs
new file mode 100644
index 0000000..a58ad17
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HA9_Function/HA925_tagSCQunyingPlayerInfo.cs
@@ -0,0 +1,23 @@
+using UnityEngine;
+using System.Collections;
+
+// A9 25 缇よ嫳姒滅帺瀹朵俊鎭� #tagSCQunyingPlayerInfo
+
+public class HA925_tagSCQunyingPlayerInfo : GameNetPackBasic {
+ public uint RefreshCnt; // 鏈懆宸插埛鏂板尮閰嶆鏁�
+ public uint LastRecoverTime; // 涓婃鍏嶈垂鎭㈠鎸戞垬浠ゆ椂闂存埑锛屼负0鏃跺彲涓嶇敤鍊掕鏃�
+ public ushort RankHighest; // 鍘嗗彶鏈�楂樺悕娆★紝绗�1鍚嶄负鏈�楂�
+ public uint RankSuccAward; // 鍘嗗彶鏈�楂樺悕娆℃垚灏遍濂栬褰曪紝鎸夊鍔辫褰曠储寮曚綅杩愮畻璁板綍鏄惁宸查鍙�
+
+ public HA925_tagSCQunyingPlayerInfo () {
+ _cmd = (ushort)0xA925;
+ }
+
+ public override void ReadFromBytes (byte[] vBytes) {
+ TransBytes (out RefreshCnt, vBytes, NetDataType.DWORD);
+ TransBytes (out LastRecoverTime, vBytes, NetDataType.DWORD);
+ TransBytes (out RankHighest, vBytes, NetDataType.WORD);
+ TransBytes (out RankSuccAward, vBytes, NetDataType.DWORD);
+ }
+
+}
diff --git a/Main/Core/NetworkPackage/ServerPack/HA9_Function/HA925_tagSCQunyingPlayerInfo.cs.meta b/Main/Core/NetworkPackage/ServerPack/HA9_Function/HA925_tagSCQunyingPlayerInfo.cs.meta
new file mode 100644
index 0000000..f8f6256
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HA9_Function/HA925_tagSCQunyingPlayerInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 49ebce4603fc8bd439702371212c21d1
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/Main.cs b/Main/Main.cs
index 76457b0..dfd89dd 100644
--- a/Main/Main.cs
+++ b/Main/Main.cs
@@ -110,6 +110,7 @@
managers.Add(SmallFuncManager.Instance);
managers.Add(HeroDebutManager.Instance);
managers.Add(GeneralActInfoManager.Instance);
+ managers.Add(QunyingManager.Instance);
foreach (var manager in managers)
{
diff --git a/Main/System/Battle/BattleConst.cs b/Main/System/Battle/BattleConst.cs
index 7d5e8f9..a9d3552 100644
--- a/Main/System/Battle/BattleConst.cs
+++ b/Main/System/Battle/BattleConst.cs
@@ -14,6 +14,7 @@
typeof(TianziBillboradBattleWin),
typeof(WarlordPavilionBattleWin),
typeof(PreviewBattleWin),
+ typeof(QYBattleWin),
};
// 鎴樺満鍚嶇О
@@ -24,6 +25,7 @@
public const string TianziBillboradBattleField = "TianziBillboradBattleField";
public const string WarlordPavilionBattleField = "WarlordPavilionBattleField";
public const string PriviewBattleField = "PriviewBattleField"; //棰勮鎴樻枟
+ public const string QYBattleField = "QYBattleField";
public static Dictionary<string, string> battleNameToWinName = new Dictionary<string, string>()
{
@@ -34,6 +36,7 @@
{ TianziBillboradBattleField, "TianziBillboradBattleWin" },
{ WarlordPavilionBattleField, "WarlordPavilionBattleWin" },
{ PriviewBattleField, "PreviewBattleWin" },
+ { QYBattleField, "QYBattleWin" },
};
// 绱㈠紩閰嶇疆鐢�
@@ -45,6 +48,7 @@
{ TianziBillboradBattleField, 4 },
{ WarlordPavilionBattleField, 5 },
{ PriviewBattleField, 6 },
+ { QYBattleField, 7 },
};
//鍜� CreateBattleField 閲岀殑瀵瑰簲
@@ -57,12 +61,14 @@
{30020, TianziBillboradBattleField},
{30030, WarlordPavilionBattleField},
{30000, PriviewBattleField},
+ {32000, QYBattleField},
};
//pvp鎴樻枟鐨勬垬鍦猴紝涓嶅湪杩欎釜鍒楄〃鐨勮涓簆ve绫诲瀷鐨勬垬鍦�
public static List<string> pvpBattleNameDic = new List<string>()
{
ArenaBattleField,
+ QYBattleField,
};
diff --git a/Main/System/Battle/BattleField/QYBattleField.cs b/Main/System/Battle/BattleField/QYBattleField.cs
new file mode 100644
index 0000000..23fd32b
--- /dev/null
+++ b/Main/System/Battle/BattleField/QYBattleField.cs
@@ -0,0 +1,106 @@
+using System;
+using LitJson;
+using UnityEngine;
+using System.Collections.Generic;
+
+
+public class QYBattleField : BattleField
+{
+
+
+ public QYBattleField(string _guid) : base(_guid)
+ {
+
+ }
+
+ public override void Init(int MapID, int FuncLineID, JsonData _extendData,
+ List<TeamBase> _redTeamList, List<TeamBase> _blueTeamList, byte turnMax)
+ {
+ base.Init(MapID, FuncLineID, _extendData, _redTeamList, _blueTeamList, turnMax);
+
+ SetBattleMode(BattleMode.Record);
+ }
+ public override void AutoSetBattleMode()
+ {
+ SetBattleMode(BattleMode.Record);
+ }
+
+ public override void TurnFightState(int TurnNum, int State,
+ uint FuncLineID, JsonData extendData)
+ {
+ base.TurnFightState(TurnNum, State, FuncLineID, extendData);
+
+ switch (State)
+ {
+ // 璧峰鐘舵�佹爣璁�
+ case 0:
+ break;
+ case 1://鍑嗗瀹屾瘯
+ break;
+ case 2://鎴樻枟涓�
+ break;
+ case 3://鎴樻枟缁撴潫
+ break;
+ case 4://缁撶畻濂栧姳
+ break;
+ case 5://缁撴潫鐘舵�佹爣璁�
+ break;
+ default:
+ BattleDebug.LogError("recieve a unknown State");
+ break;
+ }
+ }
+
+ protected override void OnSettlement(JsonData turnFightStateData)
+ {
+ base.OnSettlement(turnFightStateData);
+ }
+
+ public override void WhaleFall()
+ {
+ AutoFightModel.Instance.isPause = false;
+ Destroy();
+ // 鍒囧嚭鎴樻枟鐣岄潰涓嶅脊婕旀鍦虹晫闈�
+ if (UIManager.Instance.IsOpened<QYBattleWin>())
+ {
+ UIManager.Instance.CloseWindow<QYBattleWin>();
+ QunyingManager.Instance.openQYWinNeedRoll = false;
+ UIManager.Instance.OpenWindow<QYWin>();
+ }
+ }
+
+ public override void Run()
+ {
+ if (operationAgent == null)
+ {
+ //闃茶寖寮傚父
+ return;
+ }
+ base.Run();
+ }
+
+ public override void DistributeNextPackage()
+ {
+ if (IsBattleFinish)
+ return;
+
+ // 涓嶈璋冪敤base鐨勫嚱鏁�
+ BattleManager.Instance.DistributeNextReportPackage(guid);
+ }
+
+
+
+ public override void ShowWindow(HB424_tagSCTurnFightInit vNetData)
+ {
+ QYBattleWin fsBattleWin = UIManager.Instance.GetUI<QYBattleWin>();// as FullScreenBattleWin;
+ if (null == fsBattleWin)
+ {
+ fsBattleWin = UIManager.Instance.OpenWindow<QYBattleWin>();
+ }
+ fsBattleWin.SetBattleField(this);
+ if (UIManager.Instance.IsOpened<QYWin>())
+ {
+ UIManager.Instance.CloseWindow<QYWin>();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Main/System/Battle/BattleField/QYBattleField.cs.meta b/Main/System/Battle/BattleField/QYBattleField.cs.meta
new file mode 100644
index 0000000..a121889
--- /dev/null
+++ b/Main/System/Battle/BattleField/QYBattleField.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3754873d62465ca43987e130db4a0303
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Battle/BattleFieldFactory.cs b/Main/System/Battle/BattleFieldFactory.cs
index 6861958..12c1c9e 100644
--- a/Main/System/Battle/BattleFieldFactory.cs
+++ b/Main/System/Battle/BattleFieldFactory.cs
@@ -35,6 +35,9 @@
case 30000:
battleField = new PriviewBattleField(guid);
break;
+ case 32000:
+ battleField = new QYBattleField(guid);
+ break;
default:
break;
}
diff --git a/Main/System/Battle/BattleManager.cs b/Main/System/Battle/BattleManager.cs
index 1719158..fd52afd 100644
--- a/Main/System/Battle/BattleManager.cs
+++ b/Main/System/Battle/BattleManager.cs
@@ -650,7 +650,7 @@
//鍙戣繘鍏ユ垬鏂楀寘
private float lastTime = 0f;
private float turnCoolDown = 0.5f; // 鍐峰嵈鏃堕棿
- public void SendTurnFight(uint mapID, uint funcLineID = 0, byte tagType = 0, uint tagID = 0, uint[] valueList = null)
+ public void SendTurnFight(uint mapID, uint funcLineID = 0, byte tagType = 0, uint tagID = 0, uint[] valueList = null, bool showLoading = true)
{
// 杩炵画棰戠箒鍙戝寘锛岃Е鍙戞彁绀�
float currentTime = Time.time;
@@ -673,7 +673,7 @@
}
GameNetSystem.Instance.SendInfo(pack);
Debug.Log("鎴樻枟鏃跺簭 鍙戣捣 " + Time.time);
- if (mapID != 1)
+ if (mapID != 1 && showLoading)
{
UIManager.Instance.OpenWindow<MapLoadingWin>();
}
diff --git a/Main/System/BillboardRank/RankModel.cs b/Main/System/BillboardRank/RankModel.cs
index 982119a..8f7822f 100644
--- a/Main/System/BillboardRank/RankModel.cs
+++ b/Main/System/BillboardRank/RankModel.cs
@@ -1,5 +1,6 @@
锘縰sing System;
using System.Collections.Generic;
+using LitJson;
using UnityEngine;
// 鏀寔鍒嗛〉鏌ヨ鎺掕姒�, 鏈湇/璺ㄦ湇缁熶竴浣跨敤 鍙傝�僎ueryRankByPage 鏂板皝鍖� DTCA130_tagMCViewBillboardRet
@@ -81,6 +82,13 @@
data.cmpValue2 = serverData.CmpValue2;
data.cmpValue3 = serverData.CmpValue3;
data.userData = serverData.UserData;
+
+ var userData = JsonMapper.ToObject(serverData.UserData);
+ if (userData.ContainsKey("FightPower"))
+ {
+ long.TryParse(userData["FightPower"].ToString(), out data.fightPower);
+ }
+
data.rank = serverData.Rank;
data.type = type;
data.index = serverData.Index;
@@ -178,6 +186,13 @@
data.cmpValue2 = serverData.CmpValue2;
data.cmpValue3 = serverData.CmpValue3;
data.userData = serverData.UserData;
+
+ var userData = JsonMapper.ToObject(serverData.UserData);
+ if (userData.ContainsKey("FightPower"))
+ {
+ long.TryParse(userData["FightPower"].ToString(), out data.fightPower);
+ }
+
data.rank = serverData.Rank;
data.index = serverData.Index;
data.type = type; //涓庢湇鍔$涓�鑷寸殑璺ㄦ湇鎺掕姒滅被鍨嬶紝澶栭儴鑷澶勭悊涓嶅悓鍒嗙粍鍒嗚禌瀛g瓑鎯呭喌
@@ -433,6 +448,7 @@
public uint cmpValue2;
public uint cmpValue3;
public string userData;
+ public long fightPower;
public int rank; // 鎺掑悕浠�1寮�濮嬶紝浠h〃绗�1鍚�
public int index; //鏁版嵁鍦ㄦ鍗曞垪琛ㄤ腑鐨勭储寮曪紝浠�0寮�濮� 闈炴帓鍚� 鍒嗛〉鏌ヨ浼氱敤鍒�
}
diff --git a/Main/System/ChallengeTab/QunyingTabHandler.cs b/Main/System/ChallengeTab/QunyingTabHandler.cs
index f61532a..289f9c8 100644
--- a/Main/System/ChallengeTab/QunyingTabHandler.cs
+++ b/Main/System/ChallengeTab/QunyingTabHandler.cs
@@ -17,33 +17,34 @@
protected override Action GetOnClickAction()
{
- return HandleArenaNavigation;
+ return HandleNavigation;
}
- private void HandleArenaNavigation()
+ private void HandleNavigation()
{
if (!FuncOpen.Instance.IsFuncOpen(GetFuncId(), true))
return;
UIManager.Instance.CloseWindow<ChallengeTabWin>();
- // BattleField battle = BattleManager.Instance.GetBattleFieldByMapID(32000);
- // if (battle != null)
- // {
- // ArenaBattleWin battleWin;
- // if (!UIManager.Instance.IsOpened<ArenaBattleWin>())
- // {
- // battleWin = UIManager.Instance.OpenWindow<ArenaBattleWin>();
- // }
- // else
- // {
- // battleWin = UIManager.Instance.GetUI<ArenaBattleWin>();
- // }
- // battleWin.SetBattleField(battle);
- // }
- // else
- // {
- // UIManager.Instance.OpenWindow<ArenaWin>();
- // }
+ BattleField battle = BattleManager.Instance.GetBattleFieldByMapID(QunyingManager.DataMapID);
+ if (battle != null)
+ {
+ QYBattleWin battleWin;
+ if (!UIManager.Instance.IsOpened<QYBattleWin>())
+ {
+ battleWin = UIManager.Instance.OpenWindow<QYBattleWin>();
+ }
+ else
+ {
+ battleWin = UIManager.Instance.GetUI<QYBattleWin>();
+ }
+ battleWin.SetBattleField(battle);
+ }
+ else
+ {
+ QunyingManager.Instance.openQYWinNeedRoll = true;
+ UIManager.Instance.OpenWindow<QYWin>();
+ }
}
protected override void SubscribeToSpecificEvents()
diff --git a/Main/System/FuncPreset/FuncPresetManager.cs b/Main/System/FuncPreset/FuncPresetManager.cs
index 1652915..5f1059f 100644
--- a/Main/System/FuncPreset/FuncPresetManager.cs
+++ b/Main/System/FuncPreset/FuncPresetManager.cs
@@ -400,9 +400,10 @@
//鎴樻枟鍔熻兘鍖哄垎瀵瑰簲瀛樺偍鍏ㄥ眬鏂规ID锛屽婕旀鍦洪槻瀹堢敤鍝釜鍏ㄥ眬鏂规ID鐨勫垎绫�
public enum BattlePreSetType
{
- None = 0,
- Story = 1, //涓荤嚎
- Arena = 2, //婕旀鍦洪槻瀹�
+ None = 0,
+ Story = 1, //涓荤嚎
+ Arena = 2, //婕旀鍦洪槻瀹�
+ Qunying = 3, //缇よ嫳鎴橀槻瀹�
}
diff --git a/Main/System/Qunying/QYBattleFailWin.cs b/Main/System/Qunying/QYBattleFailWin.cs
new file mode 100644
index 0000000..95ab80c
--- /dev/null
+++ b/Main/System/Qunying/QYBattleFailWin.cs
@@ -0,0 +1,99 @@
+using System.Collections.Generic;
+using Cysharp.Threading.Tasks;
+using LitJson;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class QYBattleFailWin : UIBase
+{
+ [SerializeField] AvatarCell myAvatarCell;
+ [SerializeField] AvatarCell enemyAvatarCell;
+ [SerializeField] TextEx txtMyName;
+ [SerializeField] TextEx txtEnemyName;
+ [SerializeField] TextEx txtFuncName;
+
+ [SerializeField] Button tipHeroCultivateBtn;
+ [SerializeField] Button tipEquipBtn;
+ [SerializeField] Button tipHeroPosBtn;
+ [SerializeField] ButtonEx detailBtn;
+ JsonData jsonData;
+ string battleName = BattleConst.QYBattleField;
+ protected override void InitComponent()
+ {
+ detailBtn.SetListener(() =>
+ {
+ BattleSettlementManager.Instance.OpenBattleDetailWin(battleName);
+ });
+ tipHeroCultivateBtn.AddListener(() =>
+ {
+ CloseWindow();
+ });
+
+ tipEquipBtn.AddListener(() =>
+ {
+ CloseWindow();
+ });
+
+ tipHeroPosBtn.AddListener(() =>
+ {
+ CloseWindow();
+ UIManager.Instance.OpenWindow<HeroPosWin>();
+ });
+ }
+
+ protected override void OnPreOpen()
+ {
+ jsonData = BattleSettlementManager.Instance.GetBattleSettlement(battleName);
+ if (jsonData == null)
+ {
+ DelayCloseWindow().Forget();
+ return;
+ }
+ Display();
+ if (!FirstChargeManager.Instance.GetLocalFail())
+ {
+ FirstChargeManager.Instance.SetLocalFail();
+ }
+ FirstChargeManager.Instance.TryPopWin();
+ }
+
+ protected override void OnPreClose()
+ {
+ BattleSettlementManager.Instance.WinShowOver(battleName);
+ }
+
+ // B4 20 鍥炲悎鍒舵垬鏂楃姸鎬� #tagMCTurnFightState 閫氱敤鐨勭粨绠楃姸鎬� State 4-缁撶畻濂栧姳
+ // Msg 涓澶栦俊鎭�
+ // "tagPlayerID":瀵规垬鐨勭洰鏍嘔D,
+ // "atkAddScore":鍙戣捣鏂瑰鍔犵殑绉垎锛屽彲鑳戒负0,
+ // "defDecScore":琚嚮鏂瑰噺灏戠殑绉垎锛屽彲鑳戒负0,
+ // itemInfo:濂栧姳鐗╁搧鍒楄〃锛屽彲鑳戒负绌�
+ void Display()
+ {
+ if (!jsonData.ContainsKey("tagID"))
+ return;
+ uint tagPlayerID = (uint)jsonData["tagID"];
+
+ if (!QunyingManager.Instance.TryGetPlayerInfo(tagPlayerID, out QunyingMatchInfo info))
+ return;
+ uint enemyFace = info.Face;
+ uint enemyFacePic = info.FacePic;
+
+ myAvatarCell.InitUI(AvatarHelper.GetAvatarModel((int)PlayerDatas.Instance.baseData.PlayerID,
+ PlayerDatas.Instance.baseData.face,
+ PlayerDatas.Instance.baseData.facePic));
+ enemyAvatarCell.InitUI(AvatarHelper.GetAvatarModel((int)tagPlayerID, (int)enemyFace, (int)enemyFacePic));
+ enemyAvatarCell.SetListener(() =>
+ {
+ AvatarHelper.TryViewOtherPlayerInfo((int)tagPlayerID, viewPlayerLineupType: (int)BattlePreSetType.Qunying);
+ });
+
+ txtMyName.text = PlayerDatas.Instance.baseData.PlayerName;
+ txtEnemyName.text = UIHelper.ServerStringTrim(info.PlayerName);
+
+ int funcId = (int)FuncOpenEnum.Qunying;
+ txtFuncName.text = FuncOpenLVConfig.HasKey(funcId) ? FuncOpenLVConfig.Get(funcId).Name : string.Empty;
+ }
+
+
+}
\ No newline at end of file
diff --git a/Main/System/Qunying/QYBattleFailWin.cs.meta b/Main/System/Qunying/QYBattleFailWin.cs.meta
new file mode 100644
index 0000000..4726ead
--- /dev/null
+++ b/Main/System/Qunying/QYBattleFailWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 123ef991d6043894482acaa49a2b7776
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Qunying/QYBattleVictoryWin.cs b/Main/System/Qunying/QYBattleVictoryWin.cs
new file mode 100644
index 0000000..bb0650e
--- /dev/null
+++ b/Main/System/Qunying/QYBattleVictoryWin.cs
@@ -0,0 +1,141 @@
+using System.Collections.Generic;
+using Cysharp.Threading.Tasks;
+using LitJson;
+using UnityEngine;
+
+public class QYBattleVictoryWin : UIBase
+{
+ [SerializeField] AvatarCell myAvatarCell;
+ [SerializeField] AvatarCell enemyAvatarCell;
+ [SerializeField] TextEx txtMyName;
+ [SerializeField] TextEx txtEnemyName;
+ [SerializeField] TextEx winInfo;
+ [SerializeField] TextEx quickWinInfo;
+ [SerializeField] TextEx txtFuncName;
+ [SerializeField] ScrollerController scroller;
+ [SerializeField] ButtonEx detailBtn;
+ JsonData jsonData;
+ string battleName = BattleConst.QYBattleField;
+
+ protected override void InitComponent()
+ {
+ detailBtn.SetListener(() =>
+ {
+ BattleSettlementManager.Instance.OpenBattleDetailWin(battleName);
+ });
+ }
+
+ protected override void OnPreOpen()
+ {
+ scroller.OnRefreshCell += OnRefreshCell;
+ jsonData = BattleSettlementManager.Instance.GetBattleSettlement(battleName);
+ if (jsonData == null && QunyingManager.Instance.quickCnt == 0)
+ {
+ DelayCloseWindow().Forget();
+ return;
+ }
+ Display();
+ CreateScroller();
+ }
+
+ protected override void OnPreClose()
+ {
+ scroller.OnRefreshCell -= OnRefreshCell;
+ BattleSettlementManager.Instance.WinShowOver(battleName);
+ QunyingManager.Instance.quickCnt = 0;
+ QunyingManager.Instance.itemInfos.Clear();
+ }
+ // B4 20 鍥炲悎鍒舵垬鏂楃姸鎬� #tagMCTurnFightState 閫氱敤鐨勭粨绠楃姸鎬� State 4-缁撶畻濂栧姳
+ // Msg 涓澶栦俊鎭�
+ // "tagPlayerID":瀵规垬鐨勭洰鏍嘔D,
+ // "atkAddScore":鍙戣捣鏂瑰鍔犵殑绉垎锛屽彲鑳戒负0,
+ // "defDecScore":琚嚮鏂瑰噺灏戠殑绉垎锛屽彲鑳戒负0,
+ // itemInfo:濂栧姳鐗╁搧鍒楄〃锛屽彲鑳戒负绌�
+ void Display()
+ {
+
+ int quickCnt = QunyingManager.Instance.quickCnt;
+ uint tagPlayerID = quickCnt == 0 ? (uint)jsonData["tagPlayerID"] : (uint)QunyingManager.Instance.tagPlayerID;
+ if (!QunyingManager.Instance.TryGetPlayerInfo(tagPlayerID, out QunyingMatchInfo info))
+ return;
+ uint enemyFace = info.Face;
+ uint enemyFacePic = info.FacePic;
+
+ myAvatarCell.InitUI(AvatarHelper.GetAvatarModel((int)PlayerDatas.Instance.baseData.PlayerID,
+ PlayerDatas.Instance.baseData.face,
+ PlayerDatas.Instance.baseData.facePic));
+ enemyAvatarCell.InitUI(AvatarHelper.GetAvatarModel((int)tagPlayerID, (int)enemyFace, (int)enemyFacePic));
+ enemyAvatarCell.SetListener(() =>
+ {
+ AvatarHelper.TryViewOtherPlayerInfo((int)tagPlayerID, viewPlayerLineupType: (int)BattlePreSetType.Qunying);
+ });
+
+ txtMyName.text = PlayerDatas.Instance.baseData.PlayerName;
+ txtEnemyName.text = UIHelper.ServerStringTrim(info.PlayerName);
+ if (quickCnt == 0)
+ {
+ winInfo.SetActive(true);
+ quickWinInfo.SetActive(false);
+ winInfo.text = QunyingManager.Instance.tagRank.ToString();
+ }
+ else
+ {
+ winInfo.SetActive(false);
+ quickWinInfo.SetActive(true);
+ quickWinInfo.text = Language.Get("Qunying16", quickCnt);
+ }
+
+ int funcId = (int)FuncOpenEnum.Qunying;
+ txtFuncName.text = FuncOpenLVConfig.HasKey(funcId) ? FuncOpenLVConfig.Get(funcId).Name : string.Empty;
+ }
+
+ List<Item> showItems = new List<Item>();
+ void CreateScroller()
+ {
+
+ showItems.Clear();
+ scroller.Refresh();
+
+ if (QunyingManager.Instance.quickCnt == 0)
+ {
+ if (!jsonData.ContainsKey("itemInfo"))
+ {
+ return;
+ }
+
+ var resultStr = jsonData["itemInfo"];
+ for (int i = 0; i < resultStr.Count; i++)
+ {
+ showItems.Add(new Item((int)resultStr[i]["ItemID"], (long)resultStr[i]["Count"]));
+ }
+ }
+ else
+ {
+ for (int i = 0; i < QunyingManager.Instance.itemInfos.Count; i++)
+ {
+ showItems.Add(QunyingManager.Instance.itemInfos[i]);
+ }
+ }
+
+ showItems.Sort(SortItem);
+ for (int i = 0; i < showItems.Count; i++)
+ {
+ scroller.AddCell(ScrollerDataType.Header, i);
+ }
+ scroller.Restart();
+ }
+
+ int SortItem(Item itemA, Item itemB)
+ {
+ var itemConfigA = ItemConfig.Get(itemA.id);
+ var itemConfigB = ItemConfig.Get(itemB.id);
+ return itemConfigB.ItemColor - itemConfigA.ItemColor;
+ }
+
+ void OnRefreshCell(ScrollerDataType type, CellView cell)
+ {
+ var _cell = cell as SettlementAwardCell;
+ var item = showItems[cell.index];
+ _cell?.Display(item.id, item.countEx);
+ }
+}
\ No newline at end of file
diff --git a/Main/System/Qunying/QYBattleVictoryWin.cs.meta b/Main/System/Qunying/QYBattleVictoryWin.cs.meta
new file mode 100644
index 0000000..b64bbb3
--- /dev/null
+++ b/Main/System/Qunying/QYBattleVictoryWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: cf3dc1591a467cf4a90a3fe1b5a42cc4
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Qunying/QYBattleWin.cs b/Main/System/Qunying/QYBattleWin.cs
new file mode 100644
index 0000000..5c2edec
--- /dev/null
+++ b/Main/System/Qunying/QYBattleWin.cs
@@ -0,0 +1,306 @@
+锘縰sing System.Collections.Generic;
+using LitJson;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class QYBattleWin : BaseBattleWin
+{
+ [SerializeField] Transform transButtons;
+ [SerializeField] HeroCountryComponent myCountry;
+ [SerializeField] TextEx txtMyLV;
+ [SerializeField] TextEx txtMyName;
+ [SerializeField] TextEx txtMyHp;
+ [SerializeField] ImageEx imgMyHp;
+ [SerializeField] TextEx txtMyFightPonit;
+ [SerializeField] AvatarCell myAvatarCell;
+ [SerializeField] List<ArenaHeroHead> myHeroHeads;
+
+ [SerializeField] HeroCountryComponent enemyCountry;
+ [SerializeField] TextEx txtEnemyLV;
+ [SerializeField] TextEx txtEnemyName;
+ [SerializeField] TextEx txtEnemyHp;
+ [SerializeField] ImageEx imgEnemyHp;
+ [SerializeField] TextEx txtEnemyFightPonit;
+ [SerializeField] AvatarCell enemyAvatarCell;
+ [SerializeField] List<ArenaHeroHead> enemyHeroHeads;
+
+ [SerializeField] Text funcName;
+
+ protected override void RegisterBattleEvents()
+ {
+ base.RegisterBattleEvents();
+ EventBroadcast.Instance.AddListener<string, JsonData>(EventName.BATTLE_END, OnBattleEnd);
+ }
+
+ protected override void UnregisterBattleEvents()
+ {
+ base.UnregisterBattleEvents();
+ EventBroadcast.Instance.RemoveListener<string, JsonData>(EventName.BATTLE_END, OnBattleEnd);
+ }
+
+ protected virtual void OnBattleEnd(string guid, JsonData endData)
+ {
+ if (battleField != null && guid == battleField.guid)
+ {
+ DisplayHpInfo();
+ }
+ }
+
+ protected override void OnPreOpen()
+ {
+ base.OnPreOpen();
+ MainWin.TabChangeEvent += OnTabChangeEvent;
+ UIManager.Instance.OnOpenWindow += OnOpenWindow;
+ bool isOpenBattleChangeTab = IsOpenBattleChangeTab();
+ transButtons.localPosition = new Vector3(0, isOpenBattleChangeTab ? 130 : 0, 0);
+ if (isOpenBattleChangeTab)
+ {
+ UIManager.Instance.GetUI<MainWin>()?.CloseSubUI();
+ }
+ else
+ {
+ UIManager.Instance.CloseWindow<MainWin>();
+ }
+ isClickSkip = false;
+
+ int funcId = (int)FuncOpenEnum.Qunying;
+ funcName.text = FuncOpenLVConfig.HasKey(funcId) ? FuncOpenLVConfig.Get(funcId).Name : string.Empty;
+ }
+
+ protected override void OnPreClose()
+ {
+ base.OnPreClose();
+ MainWin.TabChangeEvent -= OnTabChangeEvent;
+ UIManager.Instance.OnOpenWindow -= OnOpenWindow;
+ bool isOpenBattleChangeTab = IsOpenBattleChangeTab();
+ if (isOpenBattleChangeTab)
+ {
+ UIManager.Instance.GetUI<MainWin>()?.RestoreSubUI();
+ }
+ else
+ {
+ UIManager.Instance.OpenWindow<MainWin>();
+ }
+
+ if (isClickSkip)
+ {
+ isClickSkip = false;
+ TryPass();
+ }
+ }
+
+ void OnOpenWindow(UIBase win)
+ {
+ if (win is QYBattleVictoryWin || win is QYBattleFailWin)
+ {
+ isClickSkip = false;
+ }
+ }
+ bool isClickSkip = false;
+ protected override void OnClickPass()
+ {
+ if (!IsPass())
+ return;
+ isClickSkip = true;
+ clickTime = Time.time; // 璁板綍鐐瑰嚮鏃堕棿
+ battleField.ForceFinish();
+ }
+
+ float stayTime = 2f;
+ float clickTime = 0f;
+ void LateUpdate()
+ {
+ if (isClickSkip && Time.time - clickTime >= stayTime)
+ {
+ isClickSkip = false;
+ TryPass();
+ }
+ }
+
+ private void TryPass()
+ {
+ if (UIManager.Instance.IsOpened<QYBattleVictoryWin>() ||
+ UIManager.Instance.IsOpened<QYBattleFailWin>())
+ return;
+ CloseWindow();
+ Debug.LogError($"OnBattleEnd 寮傚父鍏抽棴");
+ BattleSettlementManager.Instance.WinShowOver(BattleConst.QYBattleField);
+ }
+ private void OnTabChangeEvent()
+ {
+ CloseWindow();
+ }
+
+ protected override void OnDamageTaken(BattleDmgInfo damageInfo)
+ {
+ base.OnDamageTaken(damageInfo);
+ if (battleField == null)
+ return;
+ if (damageInfo.battleFieldGuid == battleField.guid)
+ {
+ DisplayHpInfo();
+ }
+ }
+
+ protected override void OnCreateBattleField(string guid, BattleField field)
+ {
+ if (field is QYBattleField)
+ {
+ SetBattleField(field);
+ }
+ }
+
+ protected override void RefreshSpecific()
+ {
+ DisplayHpInfo();
+ DisplayPlayerInfo();
+ }
+
+ private void DisplayHpInfo()
+ {
+ if (battleField == null)
+ return;
+
+ // 鑾峰彇鎴戞柟锛堢孩鏂癸級闃熶紞鏁版嵁
+ List<BattleObject> myTeam = battleField.battleObjMgr.GetBattleObjList(BattleCamp.Red);
+ // 鑾峰彇鏁屾柟锛堣摑鏂癸級闃熶紞鏁版嵁
+ List<BattleObject> enemyTeam = battleField.battleObjMgr.GetBattleObjList(BattleCamp.Blue);
+
+ ulong myMaxHp = GetMaxHP(myTeam);
+ ulong enemyMaxHp = GetMaxHP(enemyTeam);
+
+ ulong myNowHp = GetNowHP(myTeam);
+ ulong enemyNowHp = GetNowHP(enemyTeam);
+ txtMyHp.text = Language.Get("BoneField09", UIHelper.ReplaceLargeNum(myNowHp), UIHelper.ReplaceLargeNum(myMaxHp));
+ txtEnemyHp.text = Language.Get("BoneField09", UIHelper.ReplaceLargeNum(enemyNowHp), UIHelper.ReplaceLargeNum(enemyMaxHp));
+ imgMyHp.fillAmount = Mathf.Clamp01((myMaxHp > 0) ? (float)myNowHp / myMaxHp : 0f);
+ imgEnemyHp.fillAmount = Mathf.Clamp01((enemyMaxHp > 0) ? (float)enemyNowHp / enemyMaxHp : 0f);
+
+ }
+
+ private long GetFightPonit(List<BattleObject> Team)
+ {
+ if (Team.IsNullOrEmpty())
+ {
+ return 0;
+ }
+ long res = 0;
+ foreach (var obj in Team)
+ {
+ if (obj is not HeroBattleObject)
+ continue;
+ res += obj.GetFightPower();
+ }
+ return res;
+ }
+
+ private void DisplayPlayerInfo()
+ {
+ if (battleField == null)
+ return;
+ if (!QunyingManager.Instance.TryGetPlayerInfo(QunyingManager.Instance.atkPlayerId, out QunyingMatchInfo info))
+ return;
+ // 鑾峰彇鎴戞柟锛堢孩鏂癸級闃熶紞鏁版嵁
+ List<BattleObject> myTeam = battleField.battleObjMgr.GetBattleObjList(BattleCamp.Red);
+ // 鑾峰彇鏁屾柟锛堣摑鏂癸級闃熶紞鏁版嵁
+ List<BattleObject> enemyTeam = battleField.battleObjMgr.GetBattleObjList(BattleCamp.Blue);
+
+
+ txtEnemyLV.text = Language.Get("Arena22", info.LV);
+ txtEnemyName.text = UIHelper.ServerStringTrim(info.PlayerName);
+ txtEnemyFightPonit.text = UIHelper.ReplaceLargeArtNum(GetFightPonit(enemyTeam));
+ enemyAvatarCell.InitUI(AvatarHelper.GetAvatarModel((int)info.PlayerID, (int)info.Face, (int)info.FacePic));
+ enemyAvatarCell.SetListener(() =>
+ {
+ AvatarHelper.TryViewOtherPlayerInfo((int)info.PlayerID, viewPlayerLineupType: (int)BattlePreSetType.Qunying);
+ });
+ var team = GetTeamHeroList(enemyTeam);
+ enemyCountry.RefreshOnTeamCountry(team, true);
+
+ txtMyLV.text = Language.Get("Arena22", PlayerDatas.Instance.baseData.LV);
+ txtMyName.text = PlayerDatas.Instance.baseData.PlayerName;
+ long myFightPower = GetFightPonit(myTeam);
+ txtMyFightPonit.text = UIHelper.ReplaceLargeArtNum(myFightPower);
+ myAvatarCell.InitUI(AvatarHelper.GetAvatarModel((int)PlayerDatas.Instance.baseData.PlayerID, PlayerDatas.Instance.baseData.face, PlayerDatas.Instance.baseData.facePic));
+ team = GetTeamHeroList(myTeam);
+ myCountry.RefreshOnTeamCountry(team, true);
+
+ for (int i = 0; i < myHeroHeads.Count; i++)
+ {
+ if (i < myTeam.Count && myTeam[i] is HeroBattleObject heroBattleObject)
+ {
+ myHeroHeads[i].SetActive(true);
+ var teamHero = heroBattleObject.teamHero;
+ myHeroHeads[i].Display(teamHero.heroId, teamHero.SkinID, teamHero.level);
+ }
+ else
+ {
+ myHeroHeads[i].SetActive(false);
+ }
+ }
+
+ // 鏁屾柟鑻遍泟鏄剧ず锛堜粠鍙冲埌宸︼級
+ for (int i = enemyHeroHeads.Count - 1; i >= 0; i--)
+ {
+ int teamIndex = enemyHeroHeads.Count - 1 - i; // 寤虹珛鍙嶅悜鏄犲皠
+
+ if (teamIndex < enemyTeam.Count && enemyTeam[teamIndex] is HeroBattleObject heroBattleObject)
+ {
+ enemyHeroHeads[i].SetActive(true);
+ var teamHero = heroBattleObject.teamHero; // 浣跨敤鏄犲皠鍚庣殑绱㈠紩
+ enemyHeroHeads[i].Display(teamHero.heroId, teamHero.SkinID, teamHero.level);
+ }
+ else
+ {
+ enemyHeroHeads[i].SetActive(false);
+ }
+ }
+
+ }
+ ulong GetMaxHP(List<BattleObject> battleObjects)
+ {
+ ulong sun = 0;
+ if (!battleObjects.IsNullOrEmpty())
+ {
+ for (int i = 0; i < battleObjects.Count; i++)
+ {
+ sun += (ulong)battleObjects[i].GetMaxHp();
+ }
+ }
+ return sun;
+ }
+
+ ulong GetNowHP(List<BattleObject> battleObjects)
+ {
+ ulong sun = 0;
+ if (!battleObjects.IsNullOrEmpty())
+ {
+ for (int i = 0; i < battleObjects.Count; i++)
+ {
+ sun += (ulong)battleObjects[i].GetCurHp();
+ }
+ }
+ return sun;
+ }
+
+ List<TeamHero> GetTeamHeroList(List<BattleObject> teams)
+ {
+ List<TeamHero> teamHeroes = new List<TeamHero>();
+ if (teams.IsNullOrEmpty())
+ return teamHeroes;
+ foreach (var item in teams)
+ {
+ if (item is HeroBattleObject heroBattleObject)
+ {
+ teamHeroes.Add(heroBattleObject.teamHero);
+ }
+ }
+ return teamHeroes;
+
+ }
+
+ bool IsOpenBattleChangeTab()
+ {
+ return FuncOpen.Instance.IsFuncOpen(ArenaManager.Instance.BattleChangeTabFuncId);
+ }
+}
\ No newline at end of file
diff --git a/Main/System/Qunying/QYBattleWin.cs.meta b/Main/System/Qunying/QYBattleWin.cs.meta
new file mode 100644
index 0000000..4e2aba1
--- /dev/null
+++ b/Main/System/Qunying/QYBattleWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2fea3a4b19e88144eb09b61bf7bc4e78
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Qunying/QYFighterCell.cs b/Main/System/Qunying/QYFighterCell.cs
new file mode 100644
index 0000000..17dd062
--- /dev/null
+++ b/Main/System/Qunying/QYFighterCell.cs
@@ -0,0 +1,173 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+
+// 缇よ嫳鎸戞垬
+public class QYFighterCell : MonoBehaviour
+{
+ [SerializeField] HorseController model;
+ [SerializeField] OfficialTitleCell officialTitleCell;
+ [SerializeField] Text fightPowerText;
+ [SerializeField] Text nameText;
+ [SerializeField] Text serverText;
+ [SerializeField] Button queryPlayerBtn; //鍚庣画娣诲姞鐐瑰嚮鏌ョ湅鐜╁璇︽儏
+ [SerializeField] Text rankText;
+ [SerializeField] Transform myMark;
+ [SerializeField] Button challengeBtn;
+ [SerializeField] Transform quickObj;
+ [SerializeField] Button quickChallengeBtn;
+ [SerializeField] Button quickChallengeMoreBtn;
+ [SerializeField] Text quickChallengeMoreText;
+
+
+
+ QunyingMatchInfo matchInfo;
+ void Start()
+ {
+ challengeBtn.SetListener(() =>
+ {
+ if (matchInfo == null)
+ return;
+ if (!UIHelper.CheckMoneyCount(QunyingManager.challengeMoneyType, 1, 1))
+ {
+ StoreModel.Instance.ShowBuyItem(QunyingManager.challengeShopID, 0);
+ return;
+ }
+ QunyingManager.Instance.atkPlayerId = matchInfo.PlayerID;
+ QunyingManager.Instance.tagRank = matchInfo.Rank;
+ BattleManager.Instance.SendTurnFight(QunyingManager.DataMapID, 0, 1, matchInfo.PlayerID, new uint[] { matchInfo.Rank, 0 });
+ });
+
+ queryPlayerBtn.AddListener(() =>
+ {
+ if (matchInfo.PlayerID < 1000000) return;
+ AvatarHelper.TryViewOtherPlayerInfo((int)matchInfo.PlayerID, viewPlayerLineupType: (int)BattlePreSetType.Qunying);
+ });
+
+ quickChallengeBtn.AddListener(() =>
+ {
+ if (matchInfo == null)
+ return;
+ if (!UIHelper.CheckMoneyCount(QunyingManager.challengeMoneyType, 1, 1))
+ {
+ StoreModel.Instance.ShowBuyItem(QunyingManager.challengeShopID, 0);
+ return;
+ }
+ QunyingManager.Instance.atkPlayerId = matchInfo.PlayerID;
+ BattleManager.Instance.SendTurnFight(QunyingManager.DataMapID, 0, 1, matchInfo.PlayerID, new uint[] { matchInfo.Rank, 1 }, false);
+ });
+
+ quickChallengeMoreBtn.AddListener(() =>
+ {
+ if (matchInfo == null)
+ return;
+
+ //鏈�浣庢樉绀轰袱娆★紝浣嗗彲浠ユ渶浣庢寫鎴�1娆�
+ var cnt = Math.Max(1, Math.Min(5, UIHelper.GetMoneyCnt(QunyingManager.challengeMoneyType)));
+ if (!UIHelper.CheckMoneyCount(QunyingManager.challengeMoneyType, cnt, 1))
+ {
+ StoreModel.Instance.ShowBuyItem(QunyingManager.challengeShopID, 0);
+ return;
+ }
+ QunyingManager.Instance.atkPlayerId = matchInfo.PlayerID;
+ BattleManager.Instance.SendTurnFight(QunyingManager.DataMapID, 0, 1, matchInfo.PlayerID, new uint[] { matchInfo.Rank, (uint)cnt }, false);
+ });
+ }
+
+ public void Display(int index)
+ {
+ var myMatch = QunyingManager.Instance.GetMyMatchInfo(out int myIndex);
+ var list = QunyingManager.Instance.matchInfoList;
+ if (list.IsNullOrEmpty() || index < 0 || index >= list.Count)
+ {
+ if (myMatch != null)
+ {
+ this.SetActive(false);
+ return;
+ }
+ if (myMatch == null && index != 4)
+ {
+ this.SetActive(false);
+ return;
+ }
+ //鑷繁鏈笂鐗堢殑 鍦ㄧ5浣嶈ˉ
+
+ }
+
+ this.SetActive(true);
+
+ if (myMatch == null && index == 4)
+ {
+ //濉厖鑷繁鐨�
+ matchInfo = new QunyingMatchInfo
+ {
+ Rank = 0,
+ PlayerID = PlayerDatas.Instance.baseData.PlayerID,
+ PlayerName = PlayerDatas.Instance.baseData.PlayerName,
+ LV = PlayerDatas.Instance.baseData.LV,
+ RealmLV = PlayerDatas.Instance.baseData.realmLevel,
+ FightPower = (ulong)PlayerDatas.Instance.baseData.FightPower,
+ TitleID = (uint)PlayerDatas.Instance.baseData.TitleID,
+ ModelMark = (uint)PlayerDatas.Instance.baseData.modelMark,
+ EquipShowSwitch = PlayerDatas.Instance.baseData.equipShowSwitch,
+ ServerID = (uint)ServerListCenter.Instance.currentServer.region_flag,
+ };
+ }
+ else
+ {
+ matchInfo = list[index];
+ }
+
+ nameText.text = UIHelper.ServerStringTrim(matchInfo.PlayerName);
+
+ if (matchInfo.ServerID == 0)
+ {
+ serverText.text = Language.Get("Qunying15");
+ }
+ else
+ {
+ serverText.text = ServerListCenter.Instance.GetServerName((int)matchInfo.ServerID);
+ }
+
+ fightPowerText.text = UIHelper.ReplaceLargeArtNum(matchInfo.FightPower);
+
+ officialTitleCell.InitUI(matchInfo.RealmLV, (int)matchInfo.TitleID);
+ int modelMark = (int)matchInfo.ModelMark;
+ if (modelMark == 0)
+ {
+ modelMark = QunyingManager.Instance.robotModelIDs[matchInfo.PlayerID % QunyingManager.Instance.robotModelIDs.Length];
+ }
+ model.Create((int)matchInfo.EquipShowSwitch % 1000, modelMark, 0.9f);
+ rankText.text = matchInfo.Rank > 0 ? $"{matchInfo.Rank}" : Language.Get("L1125");
+ myMark.SetActive(matchInfo.PlayerID == PlayerDatas.Instance.baseData.PlayerID);
+
+ var ticketCnt = Math.Max(2, Math.Min(5, UIHelper.GetMoneyCnt(QunyingManager.challengeMoneyType)));
+ if (myMatch != null && myMatch.Rank < matchInfo.Rank)
+ {
+ //浣庝簬鑷繁鐨�
+ quickObj.SetActive(true);
+ challengeBtn.SetActive(false);
+ quickChallengeMoreText.text = Language.Get("Qunying9", ticketCnt);
+ }
+ else if ((myMatch == null && index == 4) || (myMatch != null && myMatch.Rank == matchInfo.Rank))
+ {
+ //鏄嚜宸憋紝鍒嗘槸鍚︿笂姒滄儏鍐�
+ quickObj.SetActive(false);
+ challengeBtn.SetActive(false);
+ }
+ else
+ {
+ quickObj.SetActive(false);
+ challengeBtn.SetActive(true);
+ }
+ }
+
+
+
+}
+
+
+
+
diff --git a/Main/System/Qunying/QYFighterCell.cs.meta b/Main/System/Qunying/QYFighterCell.cs.meta
new file mode 100644
index 0000000..45946ea
--- /dev/null
+++ b/Main/System/Qunying/QYFighterCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8a72c6bf947ee7e4eab339e27e21d7c7
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Qunying/QYPlayerTop3Cell.cs b/Main/System/Qunying/QYPlayerTop3Cell.cs
new file mode 100644
index 0000000..9772f61
--- /dev/null
+++ b/Main/System/Qunying/QYPlayerTop3Cell.cs
@@ -0,0 +1,53 @@
+using UnityEngine;
+using UnityEngine.UI;
+
+
+// 缇よ嫳鎺掕姒� 鐜╁鎺掕姒� 鍓嶄笁鍚�
+public class QYPlayerTop3Cell : MonoBehaviour
+{
+ [SerializeField] HorseController model;
+ [SerializeField] OfficialTitleCell officialTitleCell;
+ [SerializeField] Text fightPowerText;
+ [SerializeField] Text nameText;
+ [SerializeField] Text serverText;
+ [SerializeField] Button queryPlayerBtn; //鍚庣画娣诲姞鐐瑰嚮鏌ョ湅鐜╁璇︽儏
+
+ public void Display(int rankType, int rank)
+ {
+ var rankData = RankModel.Instance.GetRankDataByRank(rankType, rank);
+ if (rankData == null)
+ {
+ serverText.text = "";
+ nameText.text = Language.Get("L1124");
+ officialTitleCell.SetActive(false);
+ fightPowerText.text = "";
+ return;
+ }
+ officialTitleCell.SetActive(true);
+ var sid = UIHelper.GetServerIDByAccount(rankData.name2);
+ if (sid == 0)
+ {
+ serverText.text = Language.Get("Qunying15");
+ }
+ else
+ {
+ serverText.text = ServerListCenter.Instance.GetServerName(UIHelper.GetServerIDByAccount(rankData.name2));
+ }
+
+ nameText.text = rankData.name1;
+ officialTitleCell.InitUI((int)rankData.value1, (int)rankData.value2);
+ model.Create(HorseManager.Instance.GetOtherPlayerHorseSkinID((int)rankData.value6), (int)rankData.value5, 0.9f);
+ queryPlayerBtn.SetListener(() =>
+ {
+ if (rankData.id < 1000000) return;
+ AvatarHelper.TryViewOtherPlayerInfo((int)rankData.id, viewPlayerLineupType: (int)BattlePreSetType.Qunying);
+ });
+ fightPowerText.text = UIHelper.ReplaceLargeArtNum(rankData.fightPower);
+ }
+
+
+}
+
+
+
+
diff --git a/Main/System/Qunying/QYPlayerTop3Cell.cs.meta b/Main/System/Qunying/QYPlayerTop3Cell.cs.meta
new file mode 100644
index 0000000..2cab6b0
--- /dev/null
+++ b/Main/System/Qunying/QYPlayerTop3Cell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: dc373890f5310614f894283a67b58cc2
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Qunying/QYWin.cs b/Main/System/Qunying/QYWin.cs
new file mode 100644
index 0000000..496dbbd
--- /dev/null
+++ b/Main/System/Qunying/QYWin.cs
@@ -0,0 +1,117 @@
+using System;
+using Cysharp.Threading.Tasks;
+using UnityEngine;
+using UnityEngine.UI;
+
+
+//缇よ嫳涓荤晫闈�
+//QunyingManager.Instance.openQYWinNeedRoll 榛樿寮�鍚殑鏃跺�欐粴鍔ㄥ睍绀�
+public class QYWin : UIBase
+{
+ [SerializeField] QYPlayerTop3Cell[] playerTop3Cells;
+ [SerializeField] QYFighterCell[] FighterCells;
+ [SerializeField] ScrollRect battleScrollRect;
+ [SerializeField] Button closeBtn;
+
+ protected override void InitComponent()
+ {
+ closeBtn.AddListener(CloseWindow);
+ }
+
+ protected override void OnPreOpen()
+ {
+ if (!QunyingManager.Instance.openQYWinNeedRoll)
+ {
+ var myMatch = QunyingManager.Instance.GetMyMatchInfo(out int index);
+ battleScrollRect.verticalNormalizedPosition = (4 - index) * 0.15f + 0f;
+ }
+ else
+ {
+ battleScrollRect.verticalNormalizedPosition = 1f;
+ }
+ RankModel.Instance.ResetQueryParam();
+ RankModel.Instance.QueryRankByPage(QunyingManager.rankType, 0, 3);
+ QunyingManager.Instance.RequestRefreshFighters(0);
+
+ RankModel.Instance.onRankRefresh += OnRankRefresh;
+ QunyingManager.Instance.OnMatchListEvent += OnMatchListEvent;
+
+ Display();
+ }
+
+
+ async UniTask SmoothScrollToBottom(float targetPos)
+ {
+ //绛夊緟
+ await UniTask.Delay(100);
+ float duration = 0.3f;
+ float elapsed = 0f;
+ float startPos = battleScrollRect.verticalNormalizedPosition;
+
+ while (elapsed < duration)
+ {
+ elapsed += Time.deltaTime;
+ float t = elapsed / duration;
+ battleScrollRect.verticalNormalizedPosition = Mathf.Lerp(startPos, targetPos, t);
+ await UniTask.Yield();
+ }
+
+ battleScrollRect.verticalNormalizedPosition = targetPos;
+ }
+
+
+ protected override void OnPreClose()
+ {
+ RankModel.Instance.onRankRefresh -= OnRankRefresh;
+ QunyingManager.Instance.OnMatchListEvent -= OnMatchListEvent;
+ QunyingManager.Instance.openQYWinNeedRoll = true;
+ }
+
+
+ void Display()
+ {
+ DisplayFighers();
+ DisplayPlayerTop3();
+ }
+
+
+ void DisplayPlayerTop3()
+ {
+ for (int i = 0; i < playerTop3Cells.Length; i++)
+ {
+ playerTop3Cells[i].Display(QunyingManager.rankType, i + 1);
+ }
+ }
+
+ void OnRankRefresh(int type)
+ {
+ if (type != QunyingManager.rankType)
+ return;
+ DisplayPlayerTop3();
+ }
+
+ void DisplayFighers()
+ {
+ for (int i = 0; i < FighterCells.Length; i++)
+ {
+ FighterCells[i].Display(i);
+ }
+ }
+
+ void OnMatchListEvent()
+ {
+ //婊氬姩鍒拌嚜宸辩殑浣嶇疆
+ if (QunyingManager.Instance.openQYWinNeedRoll)
+ {
+ var myMatch = QunyingManager.Instance.GetMyMatchInfo(out int index);
+ SmoothScrollToBottom(myMatch == null ? 0.1f : (4 - index) * 0.15f + 0f).Forget();
+ }
+ DisplayFighers();
+ }
+
+}
+
+
+
+
+
diff --git a/Main/System/Qunying/QYWin.cs.meta b/Main/System/Qunying/QYWin.cs.meta
new file mode 100644
index 0000000..02e9105
--- /dev/null
+++ b/Main/System/Qunying/QYWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 252aa1b571920694dba4932aaa4210be
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Qunying/QunyingManager.cs b/Main/System/Qunying/QunyingManager.cs
index 4fc85bf..57306e0 100644
--- a/Main/System/Qunying/QunyingManager.cs
+++ b/Main/System/Qunying/QunyingManager.cs
@@ -6,11 +6,29 @@
public class QunyingManager : GameSystemManager<QunyingManager>
{
public const int challengeMoneyType = 56;
+ public const int challengeShopID = 16;
public const int rankType = 10;
+ public const int recType = 312; // 鎸戞垬璁板綍绫诲瀷
+ public const int DataMapID = 32000;
+
+ public event Action OnMatchListEvent;
+ public List<QunyingMatchInfo> matchInfoList = new List<QunyingMatchInfo>();
+ //鐢ㄤ簬鐢ㄦ潵鎷挎垬鏂楄儨鍒╁け璐ョ殑澶村儚淇℃伅
+ public Dictionary<uint, QunyingMatchInfo> allFaceInfoDict = new Dictionary<uint, QunyingMatchInfo>();
+ public Dictionary<uint, List<QunyingGameRec>> gameRecDict = new Dictionary<uint, List<QunyingGameRec>>(); // <RecID,QunyingGameRec>
+ public uint atkPlayerId;
+ public int tagRank; //鎸戞垬鐩爣鐨勬帓鍚� 缁撴灉鏄剧ず鐢�
+ public event Action OnUpdateGameRecInfo;
+
+ public bool openQYWinNeedRoll = true; //鎵撳紑缇よ嫳鐣岄潰闇�瑕佹粴鍔ㄧ殑鎯呭喌
+
+
+
public override void Init()
{
DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += BeforePlayerDataInitializeEventOnRelogin;
PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefresh;
+ InitTable();
}
public override void Release()
@@ -19,8 +37,44 @@
PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefresh;
}
+ public int resetOpenDay; //閲嶇疆澶�8锛屽绗竴鍛ㄥ鏋滄槸鍛�5寮�鏈嶇殑涓嶄細閲嶇疆
+ public int[] robotModelIDs;
+ public int challengeMaxCnt;
+ public int restoreTicketMinute;
+ public int refreshMoneyType;
+ public int refreshMoneyValue;
+ public int refreshMaxCnt;
+ public Dictionary<int, int[][]> dayRankAwards = new Dictionary<int, int[][]>();
+ public Dictionary<int, int[][]> weekRankAwards = new Dictionary<int, int[][]>();
+ public Dictionary<int, int[][]> achievementAwards = new Dictionary<int, int[][]>();
+ public Dictionary<int, int> achievementIndexs = new Dictionary<int, int>();
+
+ void InitTable()
+ {
+ var config = FuncConfigConfig.Get("QunyingSet");
+ resetOpenDay = int.Parse(config.Numerical1);
+ robotModelIDs = JsonMapper.ToObject<int[]>(config.Numerical2);
+
+ config = FuncConfigConfig.Get("QunyingChallenge");
+ challengeMaxCnt = int.Parse(config.Numerical1);
+ restoreTicketMinute = int.Parse(config.Numerical2);
+
+ config = FuncConfigConfig.Get("QunyingMatch");
+ var moneyInfo = ConfigParse.GetMultipleStr<int>(config.Numerical2);
+ refreshMoneyType = moneyInfo[0];
+ refreshMoneyValue = moneyInfo[1];
+ refreshMaxCnt = int.Parse(config.Numerical3);
+
+ config = FuncConfigConfig.Get("QunyingAward");
+ dayRankAwards = ConfigParse.ParseIntArray2Dict(config.Numerical1);
+ weekRankAwards = ConfigParse.ParseIntArray2Dict(config.Numerical2);
+ achievementAwards = ConfigParse.ParseIntArray2Dict(config.Numerical3);
+ achievementIndexs = ConfigParse.ParseIntDict(config.Numerical4);
+ }
+
public void BeforePlayerDataInitializeEventOnRelogin()
{
+ matchInfoList.Clear();
}
private void PlayerDataRefresh(PlayerDataType type)
@@ -33,5 +87,226 @@
}
+
+ public void UpdateQunyingMatchInfo(HA924_tagSCQunyingMatchList vNetData)
+ {
+ if (vNetData == null || vNetData.MatchList.IsNullOrEmpty())
+ return;
+
+ matchInfoList.Clear();
+
+ foreach (var item in vNetData.MatchList)
+ {
+ var matchInfo = new QunyingMatchInfo
+ {
+ Rank = item.Rank,
+ PlayerID = item.PlayerID,
+ PlayerName = item.PlayerName,
+ LV = item.LV,
+ RealmLV = item.RealmLV,
+ FightPower = (ulong)item.FightPowerEx * 100000000 + (ulong)item.FightPower,
+ Face = item.Face,
+ FacePic = item.FacePic,
+ TitleID = item.TitleID,
+ ModelMark = item.ModelMark,
+ EquipShowSwitch = item.EquipShowSwitch,
+ ServerID = item.ServerID,
+ };
+ matchInfoList.Add(matchInfo);
+ allFaceInfoDict[item.PlayerID] = matchInfo;
+ }
+ matchInfoList.Sort((a, b) => a.Rank.CompareTo(b.Rank));
+ OnMatchListEvent?.Invoke();
+ }
+
+ public void UpdateQunyingInfo(HA925_tagSCQunyingPlayerInfo vNetData)
+ {
+
+ }
+
+ public void UpdateGameRecInfo(HA009_tagSCGameRecInfo vNetData)
+ {
+ if (vNetData == null || vNetData.RecType != recType)
+ return;
+ gameRecDict.Clear();
+ uint recID = vNetData.RecID;
+ if (!gameRecDict.ContainsKey(recID))
+ gameRecDict[recID] = new List<QunyingGameRec>();
+ foreach (var rec in vNetData.RecList)
+ {
+ try
+ {
+ var userData = JsonMapper.ToObject(rec.UserData);
+ string name = userData["Name"].ToString();
+ int curRank = int.Parse(userData["CurRank"].ToString());
+ int tagRank = int.Parse(userData["TagRank"].ToString());
+
+ var gameRec = new QunyingGameRec
+ {
+ Time = rec.Time,
+ Value1 = rec.Value1,
+ Value2 = rec.Value2,
+ Value3 = rec.Value3,
+ Value4 = rec.Value4,
+ Value5 = rec.Value5,
+ Value6 = rec.Value6,
+ Value7 = rec.Value7,
+ Value8 = rec.Value8,
+ Name = name,
+ CurRank = curRank,
+ TagRank = tagRank
+ };
+
+ gameRecDict[recID].Add(gameRec);
+
+ if (recID == PlayerDatas.Instance.baseData.PlayerID)
+ {
+ allFaceInfoDict[rec.Value3] = new QunyingMatchInfo
+ {
+ Rank = (ushort)tagRank,
+ PlayerID = rec.Value3,
+ PlayerName = name,
+ LV = (ushort)rec.Value8,
+ RealmLV = (ushort)rec.Value7,
+ Face = rec.Value5,
+ FacePic = rec.Value6,
+ ServerID = rec.Value1,
+
+ };
+ }
+
+ }
+ catch (Exception ex)
+ {
+ Debug.LogError($"JSON瑙f瀽閿欒: {ex.Message}, UserData: {rec.UserData}");
+ continue;
+ }
+ }
+ OnUpdateGameRecInfo?.Invoke();
+ }
+
+
+ public bool TryGetPlayerInfo(uint playerID, out QunyingMatchInfo info)
+ {
+ return allFaceInfoDict.TryGetValue(playerID, out info);
+ }
+
+ // 鑾峰彇鍖归厤淇℃伅涓垜鐨勯儴鍒�
+ public QunyingMatchInfo GetMyMatchInfo(out int index)
+ {
+ index = 0;
+ for (int i = 0; i < matchInfoList.Count; i++)
+ {
+ if (matchInfoList[i].PlayerID == PlayerDatas.Instance.baseData.PlayerID)
+ {
+ index = i;
+ return matchInfoList[i];
+ }
+ }
+ return null;
+ }
+
+ //鍚戞湇鍔″櫒璇锋眰鍒锋柊鎸戞垬瀵硅薄
+ // 0-鎵撳紑鐣岄潰鏃舵煡璇紝1-寮哄埗鍒锋柊鍖归厤鍒楄〃
+ public void RequestRefreshFighters(int refreshType)
+ {
+ var pack = new CB210_tagCSQunyingMatch();
+ pack.IsRefresh = (byte)refreshType;
+ GameNetSystem.Instance.SendInfo(pack);
+
+ }
+ public List<Item> itemInfos = new List<Item>();
+ public int quickCnt;
+ public int tagPlayerID;
+ public void UpdateFBEnd(H0320_tagFBEnd vNetData)
+ {
+ if (vNetData.Msg == null)
+ return;
+ JsonData jsonData = JsonMapper.ToObject(vNetData.Msg);
+ int dataMapID = int.Parse(jsonData["dataMapID"].ToString());
+ if (dataMapID != DataMapID)
+ return;
+ quickCnt = int.Parse(jsonData["quickCnt"].ToString());
+ tagPlayerID = int.Parse(jsonData["tagID"].ToString());
+
+ itemInfos.Clear();
+ if (jsonData["itemInfo"] != null && jsonData["itemInfo"].IsArray)
+ {
+ for (int i = 0; i < jsonData["itemInfo"].Count; i++)
+ {
+ JsonData itemData = jsonData["itemInfo"][i];
+ Item itemInfo = new Item((int)itemData["ItemID"], (long)itemData["Count"]);
+ itemInfos.Add(itemInfo);
+ }
+ }
+ UIManager.Instance.OpenWindow<QYBattleVictoryWin>();
+ }
+
+ //鏄惁鏈懆寮�鍚紝鍛ㄥ嚑寮�鍚�
+ public bool TryGetOpenWeek(out bool isThisWeek, out int weekDay)
+ {
+ weekDay = 0;
+ var openServerDay = TimeUtility.OpenDay + 1; //浠婂ぉ鏄鍑犱釜寮�鏈嶅ぉ
+ var openFuncDay = FuncOpenLVConfig.Get((int)FuncOpenEnum.Qunying).OpenDay; //鍔熻兘寮�鍚湪绗嚑涓紑鏈嶅ぉ寮�鏀�
+
+ //鍒ゆ柇鍔熻兘鏄惁宸插紑鍚�
+ if (openServerDay < openFuncDay - 1)
+ {
+ isThisWeek = false;
+ return true;
+ }
+
+ //璁$畻鏈懆鑷劧鍛ㄥ紑濮嬫槸寮�鏈嶅ぉ鑼冨洿
+ //浠婂ぉ鍛ㄥ嚑
+ int theWeekDay = (int)TimeUtility.ServerNow.DayOfWeek == 0 ? 7 : (int)TimeUtility.ServerNow.DayOfWeek;
+ int currentWeekStart = openServerDay - theWeekDay + 1;
+ int currentWeekEnd = currentWeekStart + 6;
+
+ //鍒ゆ柇鍔熻兘寮�鍚ぉ鏄惁鍦ㄥ綋鍓嶅懆鍐�
+ isThisWeek = openFuncDay >= currentWeekStart && openFuncDay <= currentWeekEnd;
+
+
+ if (isThisWeek)
+ {
+ weekDay = openFuncDay - currentWeekStart + 1;
+ }
+
+ return true;
+ }
+
}
+public class QunyingMatchInfo
+{
+ public ushort Rank; //鎺掑悕锛屼粠1寮�濮�
+ public uint PlayerID; //鐩爣鐜╁ID
+ public string PlayerName;
+ public ushort LV; // 鐜╁绛夌骇
+ public ushort RealmLV; //澧冪晫锛屾満鍣ㄤ汉璇诲鐣岃〃鍙栫瓑绾у搴斿鐣�
+ public ulong FightPower; //鎴樺姏
+ public uint Face; //鍩烘湰鑴稿瀷
+ public uint FacePic; //澶村儚妗�
+ public uint TitleID; //绉板彿
+ public uint ModelMark; //鍙樺舰妯″瀷mark
+ public uint EquipShowSwitch; //鍏朵粬澶栬淇℃伅
+ public uint ServerID;
+
+}
+
+
+public class QunyingGameRec
+{
+ public uint Time; //鎴樻枟鏃堕棿鎴�
+ public uint Value1; //鏃�
+ public uint Value2; //鏀诲嚮绫诲瀷 1-鍙戣捣鏀诲嚮鐨勶紝2-琚敾鍑荤殑
+ public uint Value3; //鐩稿鏀诲嚮绫诲瀷鐨勭洰鏍囩帺瀹禝D
+ public uint Value4; //鏄惁鑾疯儨 1-鑾疯儨锛�2-澶辫触
+ public uint Value5; //鐩爣澶村儚
+ public uint Value6; //鐩爣澶村儚妗�
+ public uint Value7; //鐩爣瀹樿亴
+ public uint Value8; //鐩爣绛夌骇
+ public string Name; //鐩爣鍚嶇О
+ public int CurRank;
+ public int TagRank;
+
+}
diff --git a/Main/System/Settlement/BattleSettlementManager.cs b/Main/System/Settlement/BattleSettlementManager.cs
index 35e7a8f..48faa4b 100644
--- a/Main/System/Settlement/BattleSettlementManager.cs
+++ b/Main/System/Settlement/BattleSettlementManager.cs
@@ -54,6 +54,9 @@
WarlordPavilionManager.Instance.isAutoNext = isWin;
PopupWindowsProcessor.Instance.Add(isWin ? "WarlordPavilionVictoryWin" : "WarlordPavilionFailWin", false, BattleConst.WarlordPavilionBattleField);
break;
+ case BattleConst.QYBattleField:
+ PopupWindowsProcessor.Instance.Add(isWin ? "QYBattleVictoryWin" : "QYBattleFailWin", false, BattleConst.QYBattleField);
+ break;
default:
PopupWindowsProcessor.Instance.Add(isWin ? "BattleVictoryWin" : "BattleFailWin", false, BattleConst.StoryBossBattleField);
break;
@@ -103,6 +106,16 @@
case BattleConst.PriviewBattleField:
UIManager.Instance.CloseWindow<PreviewBattleWin>();
break;
+ case BattleConst.QYBattleField:
+ if (isWin)
+ {
+ UIManager.Instance.OpenWindow<QYBattleVictoryWin>();
+ }
+ else
+ {
+ UIManager.Instance.OpenWindow<QYBattleFailWin>();
+ }
+ break;
default:
if (isWin)
{
diff --git a/Main/System/Store/StoreModel.cs b/Main/System/Store/StoreModel.cs
index e782e62..ba391f2 100644
--- a/Main/System/Store/StoreModel.cs
+++ b/Main/System/Store/StoreModel.cs
@@ -583,6 +583,30 @@
}
return true;
}
+
+ // 寮瑰嚭璐拱妗嗭紝涓嶈冻鍒欐彁绀哄凡鍞絼
+ public void ShowBuyItem(int shopID, int tipType = 0)
+ {
+ var cfg = StoreConfig.Get(shopID);
+ if (!TryGetIsSellOut(cfg, out var cnt))
+ {
+ buyShopID = shopID;
+ UIManager.Instance.OpenWindow<BuyItemWin>();
+ }
+ else
+ {
+ if (tipType == 0)
+ {
+ //鍞絼
+ SysNotifyMgr.Instance.ShowTip("StoreTip1");
+ }
+ else if (tipType == 1)
+ {
+ //鐗╁搧涓嶈冻鎻愮ず
+ SysNotifyMgr.Instance.ShowTip("ItemNotEnough", ItemConfig.Get(cfg.ItemID).ItemName);
+ }
+ }
+ }
}
public enum StoreFunc
diff --git a/Main/System/ViewNPC/ViewNPCManager.cs b/Main/System/ViewNPC/ViewNPCManager.cs
index 4a0e255..0104e29 100644
--- a/Main/System/ViewNPC/ViewNPCManager.cs
+++ b/Main/System/ViewNPC/ViewNPCManager.cs
@@ -67,7 +67,11 @@
{
case BattleConst.ArenaBattleField:
int playerId = (int)ArenaManager.Instance.atkPlayerId;
- OtherPlayerDetailManager.Instance.ViewPlayerDetail(playerId, 0, (int)ViewPlayerType.viewArenaBattleEnemyHero, (int)BattlePreSetType.Arena);
+ OtherPlayerDetailManager.Instance.ViewPlayerDetail(playerId, 0, (int)ViewPlayerType.viewPVPBattleEnemyHero, (int)BattlePreSetType.Arena);
+ break;
+ case BattleConst.QYBattleField:
+ playerId = (int)QunyingManager.Instance.atkPlayerId;
+ OtherPlayerDetailManager.Instance.ViewPlayerDetail(playerId, 0, (int)ViewPlayerType.viewPVPBattleEnemyHero, (int)BattlePreSetType.Qunying);
break;
}
return;
@@ -89,13 +93,13 @@
{
switch (viewPlayerType)
{
- case (int)ViewPlayerType.viewArenaBattleEnemyHero:
- ViewArenaBattleEnemyHero(playerID);
+ case (int)ViewPlayerType.viewPVPBattleEnemyHero:
+ ViewPVPBattleEnemyHero(playerID);
break;
}
}
- private void ViewArenaBattleEnemyHero(int playerID)
+ private void ViewPVPBattleEnemyHero(int playerID)
{
int presetID = otherPlayerManager.GetFuncPresetID(playerID, OtherPlayerDetailManager.Instance.viewPreSetType, (int)FuncPresetType.Global);
var heroList = otherPlayerManager.GetHeroDataSortList(playerID, presetID);
diff --git a/Main/Utility/EnumHelper.cs b/Main/Utility/EnumHelper.cs
index 28ba0f9..455d620 100644
--- a/Main/Utility/EnumHelper.cs
+++ b/Main/Utility/EnumHelper.cs
@@ -1831,5 +1831,5 @@
{
viewPlayerData = 0, //鏌ョ湅鐜╁鍩烘湰淇℃伅锛屽叕鐢ㄦ墦寮�鐣岄潰
viewGuildLeader = 1, //鏌ョ湅鐜╁鐨勫叕浼氭棌闀夸俊鎭�
- viewArenaBattleEnemyHero = 2, //鏌ョ湅绔炴妧鍦烘垬鏂楁晫鏂硅嫳闆勪俊鎭�
+ viewPVPBattleEnemyHero = 2, //鏌ョ湅绔炴妧鍦烘垬鏂楁晫鏂硅嫳闆勪俊鎭�
}
--
Gitblit v1.8.0