From 247c64258e0102a1028199f14866a1fd1c1a205f Mon Sep 17 00:00:00 2001
From: lcy <1459594991@qq.com>
Date: 星期一, 20 十月 2025 11:44:38 +0800
Subject: [PATCH] 143 子 【挑战】演武场 / 【挑战】演武场-客户端
---
Main/System/Arena/ArenaChallengeVoucher.cs.meta | 11
Main/Core/NetworkPackage/DTCFile/ServerPack/HA0_Sys/DTCA009_tagSCGameRecInfo.cs.meta | 11
Main/System/Arena/ArenaRecordCell.cs | 98 ++
Main/System/Arena/ArenaPlayerRankCell.cs | 70 +
Main/Core/NetworkPackage/ServerPack/HA9_Function/HA922_tagSCArenaMatchList.cs | 43
Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA923_tagSCArenaPlayerInfo.cs.meta | 11
Main/System/Redpoint/MainRedDot.cs | 3
Main/Core/NetworkPackage/ServerPack/HA9_Function/HA923_tagSCArenaPlayerInfo.cs.meta | 11
Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB209_tagCSArenaMatch.cs.meta | 11
Main/System/Arena/ArenaWin.cs.meta | 11
Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB209_tagCSArenaMatch.cs | 18
Main/System/Arena/ArenaHeroHead.cs | 30
Main/System/Arena/ArenaChallengeWin.cs | 91 +
Main/System/Arena/ArenaChallengeCell.cs.meta | 11
Main/System/Arena/ArenaPlayerTop3Cell.cs | 35
Main/Utility/EnumHelper.cs | 19
Main/System/Arena/BuyItemWin.cs.meta | 11
Main/System/Arena/ArenaBattleVictoryWin.cs | 170 +++
Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA923_tagSCArenaPlayerInfo.cs | 12
Main/System/Arena/ArenaManager.cs | 347 +++++++
Main/System/Arena.meta | 8
Main/System/Arena/ArenaWin.cs | 141 +++
Main/System/Arena/ArenaHeroHead.cs.meta | 11
Main/Core/NetworkPackage/ServerPack/HA7_Interaction/HA705_tagSCQueryPlayerCacheResult.cs | 4
Main/System/Arena/ArenaChallengeVoucher.cs | 24
Main/System/Arena/ArenaAwardWin.cs | 121 ++
Main/Core/NetworkPackage/ServerPack/HA0_Sys/HA009_tagSCGameRecInfo.cs.meta | 11
Main/Core/NetworkPackage/ServerPack/HA0_Sys/HA009_tagSCGameRecInfo.cs | 51 +
Main/System/Arena/ArenaPlayerTop3Cell.cs.meta | 11
Main/System/Arena/ArenaRecordCell.cs.meta | 11
Main/Core/NetworkPackage/ServerPack/HA9_Function/HA923_tagSCArenaPlayerInfo.cs | 17
Main/System/Battle/BattleConst.cs | 1
Main/System/Arena/ArenaChallengeCell.cs | 59 +
Main/System/Arena/ArenaBattleVictoryWin.cs.meta | 11
Main/System/Arena/ArenaBattleFailWin.cs | 110 ++
Main/System/Arena/ArenaManager.cs.meta | 11
Main/System/Battle/BattleFieldFactory.cs | 3
Main/Core/NetworkPackage/ClientPack/CA0_Sys/CA008_tagCSViewGameRec.cs | 20
Main/System/BillboardRank/PlayerTop3Cell.cs | 2
Main/Core/NetworkPackage/ServerPack/HA9_Function/HA922_tagSCArenaMatchList.cs.meta | 11
Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA922_tagSCArenaMatchList.cs | 12
Main/System/Arena/ArenaAwardCell.cs.meta | 11
Main/Main.cs | 2
Main/System/Arena/BuyItemWin.cs | 119 ++
Main/Core/NetworkPackage/ClientPack/CA0_Sys/CA008_tagCSViewGameRec.cs.meta | 11
Main/System/Arena/ArenaAwardWin.cs.meta | 11
Main/Core/NetworkPackage/DTCFile/ServerPack/HA0_Sys/DTCA009_tagSCGameRecInfo.cs | 12
Main/System/Arena/ArenaBattleFailWin.cs.meta | 11
Main/System/Battle/ArenaBattleWin.cs.meta | 11
Main/System/Arena/HeroCountryComponent.cs.meta | 11
Main/System/Arena/HeroCountryComponent.cs | 131 ++
Main/System/Battle/BattleField/ArenaBattleField.cs | 148 +++
Main/System/ChallengeTab/ChallengeTabWin.cs | 52
Main/System/Arena/ArenaPlayerRankCell.cs.meta | 11
Main/System/Arena/ArenaRecordWin.cs.meta | 11
Main/System/Arena/ArenaRecordWin.cs | 87 +
Main/Utility/UIHelper.cs | 7
Main/System/Arena/ArenaChallengeWin.cs.meta | 11
Main/Core/NetworkPackage/ClientPack/CA2_Interaction/CA212_tagCMViewPlayerInfo.cs | 19
Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs | 4
Main/System/Battle/BattleField/ArenaBattleField.cs.meta | 11
Main/System/Arena/ArenaAwardCell.cs | 55 +
Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA922_tagSCArenaMatchList.cs.meta | 11
Main/System/Battle/ArenaBattleWin.cs | 285 ++++++
64 files changed, 2,681 insertions(+), 35 deletions(-)
diff --git a/Main/Core/NetworkPackage/ClientPack/CA0_Sys/CA008_tagCSViewGameRec.cs b/Main/Core/NetworkPackage/ClientPack/CA0_Sys/CA008_tagCSViewGameRec.cs
new file mode 100644
index 0000000..3750255
--- /dev/null
+++ b/Main/Core/NetworkPackage/ClientPack/CA0_Sys/CA008_tagCSViewGameRec.cs
@@ -0,0 +1,20 @@
+using UnityEngine;
+using System.Collections;
+
+// A0 08 鏌ョ湅閫氱敤璁板綍 #tagCSViewGameRec
+
+public class CA008_tagCSViewGameRec : GameNetPackBasic {
+ public ushort RecType; //璁板綍绫诲瀷
+ public uint RecID; //鑷畾涔夎褰旾D
+
+ public CA008_tagCSViewGameRec () {
+ combineCmd = (ushort)0x03FE;
+ _cmd = (ushort)0xA008;
+ }
+
+ public override void WriteToBytes () {
+ WriteBytes (RecType, NetDataType.WORD);
+ WriteBytes (RecID, NetDataType.DWORD);
+ }
+
+}
diff --git a/Main/Core/NetworkPackage/ClientPack/CA0_Sys/CA008_tagCSViewGameRec.cs.meta b/Main/Core/NetworkPackage/ClientPack/CA0_Sys/CA008_tagCSViewGameRec.cs.meta
new file mode 100644
index 0000000..f8a60d1
--- /dev/null
+++ b/Main/Core/NetworkPackage/ClientPack/CA0_Sys/CA008_tagCSViewGameRec.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b6a48b9769ab25a47adb4313ea3e1711
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/Core/NetworkPackage/ClientPack/CA2_Interaction/CA212_tagCMViewPlayerInfo.cs b/Main/Core/NetworkPackage/ClientPack/CA2_Interaction/CA212_tagCMViewPlayerInfo.cs
index b86ad91..34cad61 100644
--- a/Main/Core/NetworkPackage/ClientPack/CA2_Interaction/CA212_tagCMViewPlayerInfo.cs
+++ b/Main/Core/NetworkPackage/ClientPack/CA2_Interaction/CA212_tagCMViewPlayerInfo.cs
@@ -1,23 +1,20 @@
using UnityEngine;
using System.Collections;
-//A2 12 查看玩家详细信息#tagCMViewPlayerInfo
+//A2 12 鏌ョ湅鐜╁璇︾粏淇℃伅#tagCMViewPlayerInfo
-public class CA212_tagCMViewPlayerInfo : GameNetPackBasic
-{
+public class CA212_tagCMViewPlayerInfo : GameNetPackBasic {
public uint PlayerID;
- public byte EquipClassLV; //大于0为查看指定境界阶装备信息, 0为查看默认信息
+ public byte EquipClassLV; //澶т簬0涓烘煡鐪嬫寚瀹氬鐣岄樁瑁呭淇℃伅, 0涓烘煡鐪嬮粯璁や俊鎭�
- public CA212_tagCMViewPlayerInfo()
- {
+ public CA212_tagCMViewPlayerInfo () {
combineCmd = (ushort)0x03FE;
_cmd = (ushort)0xA212;
}
- public override void WriteToBytes()
- {
- WriteBytes(PlayerID, NetDataType.DWORD);
- WriteBytes(EquipClassLV, NetDataType.BYTE);
+ public override void WriteToBytes () {
+ WriteBytes (PlayerID, NetDataType.DWORD);
+ WriteBytes (EquipClassLV, NetDataType.BYTE);
}
-}
\ No newline at end of file
+}
diff --git a/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB209_tagCSArenaMatch.cs b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB209_tagCSArenaMatch.cs
new file mode 100644
index 0000000..3ce09a7
--- /dev/null
+++ b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB209_tagCSArenaMatch.cs
@@ -0,0 +1,18 @@
+using UnityEngine;
+using System.Collections;
+
+// B2 09 婕旀鍦哄尮閰嶇帺瀹� #tagCSArenaMatch
+
+public class CB209_tagCSArenaMatch : GameNetPackBasic {
+ public byte IsRefresh; // 0-鎵撳紑鐣岄潰鏃犲尮閰嶆暟鎹椂鏌ヨ锛�1-寮哄埗鍒锋柊鍖归厤鍒楄〃
+
+ public CB209_tagCSArenaMatch () {
+ combineCmd = (ushort)0x03FE;
+ _cmd = (ushort)0xB209;
+ }
+
+ public override void WriteToBytes () {
+ WriteBytes (IsRefresh, NetDataType.BYTE);
+ }
+
+}
diff --git a/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB209_tagCSArenaMatch.cs.meta b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB209_tagCSArenaMatch.cs.meta
new file mode 100644
index 0000000..788831c
--- /dev/null
+++ b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB209_tagCSArenaMatch.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e768d709b4503ed47a18dad52f32422e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA0_Sys/DTCA009_tagSCGameRecInfo.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA0_Sys/DTCA009_tagSCGameRecInfo.cs
new file mode 100644
index 0000000..7a98be6
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA0_Sys/DTCA009_tagSCGameRecInfo.cs
@@ -0,0 +1,12 @@
+using UnityEngine;
+using System.Collections;
+
+// A0 09 閫氱敤璁板綍淇℃伅 #tagSCGameRecInfo
+
+public class DTCA009_tagSCGameRecInfo : DtcBasic {
+ public override void Done(GameNetPackBasic vNetPack) {
+ base.Done(vNetPack);
+ HA009_tagSCGameRecInfo vNetData = vNetPack as HA009_tagSCGameRecInfo;
+ ArenaManager.Instance.UpdateGameRecInfo(vNetData);
+ }
+}
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA0_Sys/DTCA009_tagSCGameRecInfo.cs.meta b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA0_Sys/DTCA009_tagSCGameRecInfo.cs.meta
new file mode 100644
index 0000000..ebdf68d
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA0_Sys/DTCA009_tagSCGameRecInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ef9a2a1877a033e4198a1343e4eb8dea
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA922_tagSCArenaMatchList.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA922_tagSCArenaMatchList.cs
new file mode 100644
index 0000000..abee02c
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA922_tagSCArenaMatchList.cs
@@ -0,0 +1,12 @@
+using UnityEngine;
+using System.Collections;
+
+// A9 22 婕旀鍦哄尮閰嶇帺瀹跺垪琛� #tagSCArenaMatchList
+
+public class DTCA922_tagSCArenaMatchList : DtcBasic {
+ public override void Done(GameNetPackBasic vNetPack) {
+ base.Done(vNetPack);
+ HA922_tagSCArenaMatchList vNetData = vNetPack as HA922_tagSCArenaMatchList;
+ ArenaManager.Instance.OnArenaMatchList(vNetData);
+ }
+}
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA922_tagSCArenaMatchList.cs.meta b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA922_tagSCArenaMatchList.cs.meta
new file mode 100644
index 0000000..492c2a3
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA922_tagSCArenaMatchList.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3018194b7bdafa24c9855f1880bb15a2
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA923_tagSCArenaPlayerInfo.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA923_tagSCArenaPlayerInfo.cs
new file mode 100644
index 0000000..2466a6a
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA923_tagSCArenaPlayerInfo.cs
@@ -0,0 +1,12 @@
+using UnityEngine;
+using System.Collections;
+
+// A9 23 婕旀鍦虹帺瀹朵俊鎭� #tagSCArenaPlayerInfo
+
+public class DTCA923_tagSCArenaPlayerInfo : DtcBasic {
+ public override void Done(GameNetPackBasic vNetPack) {
+ base.Done(vNetPack);
+ HA923_tagSCArenaPlayerInfo vNetData = vNetPack as HA923_tagSCArenaPlayerInfo;
+ ArenaManager.Instance.UpdateArenaPlayerInfo(vNetData);
+ }
+}
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA923_tagSCArenaPlayerInfo.cs.meta b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA923_tagSCArenaPlayerInfo.cs.meta
new file mode 100644
index 0000000..cd6823d
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA9_Function/DTCA923_tagSCArenaPlayerInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: fe3971f96b149f14b8adf6e9c4e1ba5f
+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 ab0cd9b..4456a79 100644
--- a/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
+++ b/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
@@ -113,7 +113,9 @@
Register(typeof(HA521_tagMCFamilyChange), typeof(DTCA521_tagMCFamilyChange));
Register(typeof(HA522_tagMCFamilyReqJoinInfo), typeof(DTCA522_tagMCFamilyReqJoinInfo));
Register(typeof(HA523_tagMCFamilyViewList), typeof(DTCA523_tagMCFamilyViewList));
-
+ Register(typeof(HA009_tagSCGameRecInfo), typeof(DTCA009_tagSCGameRecInfo));
+ Register(typeof(HA922_tagSCArenaMatchList), typeof(DTCA922_tagSCArenaMatchList));
+ Register(typeof(HA923_tagSCArenaPlayerInfo), typeof(DTCA923_tagSCArenaPlayerInfo));
}
//涓诲伐绋嬫敞鍐屽皝鍖�
diff --git a/Main/Core/NetworkPackage/ServerPack/HA0_Sys/HA009_tagSCGameRecInfo.cs b/Main/Core/NetworkPackage/ServerPack/HA0_Sys/HA009_tagSCGameRecInfo.cs
new file mode 100644
index 0000000..cbc6abf
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HA0_Sys/HA009_tagSCGameRecInfo.cs
@@ -0,0 +1,51 @@
+using UnityEngine;
+using System.Collections;
+
+// A0 09 閫氱敤璁板綍淇℃伅 #tagSCGameRecInfo
+
+public class HA009_tagSCGameRecInfo : GameNetPackBasic {
+ public ushort RecType; //璁板綍绫诲瀷
+ public uint RecID; //鑷畾涔夎褰旾D
+ public ushort Count; //鏁伴噺
+ public tagSCGameRec[] RecList;
+
+ public HA009_tagSCGameRecInfo () {
+ _cmd = (ushort)0xA009;
+ }
+
+ public override void ReadFromBytes (byte[] vBytes) {
+ TransBytes (out RecType, vBytes, NetDataType.WORD);
+ TransBytes (out RecID, vBytes, NetDataType.DWORD);
+ TransBytes (out Count, vBytes, NetDataType.WORD);
+ RecList = new tagSCGameRec[Count];
+ for (int i = 0; i < Count; i ++) {
+ RecList[i] = new tagSCGameRec();
+ TransBytes (out RecList[i].Time, vBytes, NetDataType.DWORD);
+ TransBytes (out RecList[i].Value1, vBytes, NetDataType.DWORD);
+ TransBytes (out RecList[i].Value2, vBytes, NetDataType.DWORD);
+ TransBytes (out RecList[i].Value3, vBytes, NetDataType.DWORD);
+ TransBytes (out RecList[i].Value4, vBytes, NetDataType.DWORD);
+ TransBytes (out RecList[i].Value5, vBytes, NetDataType.DWORD);
+ TransBytes (out RecList[i].Value6, vBytes, NetDataType.DWORD);
+ TransBytes (out RecList[i].Value7, vBytes, NetDataType.DWORD);
+ TransBytes (out RecList[i].Value8, vBytes, NetDataType.DWORD);
+ TransBytes (out RecList[i].UserDataLen, vBytes, NetDataType.WORD);
+ TransBytes (out RecList[i].UserData, vBytes, NetDataType.Chars, RecList[i].UserDataLen);
+ }
+ }
+
+ public class tagSCGameRec {
+ public uint Time; //鏃堕棿
+ public uint Value1; //鍊�1
+ public uint Value2; //鍊�2
+ public uint Value3; //鍊�3
+ public uint Value4; //鍊�4
+ public uint Value5; //鍊�5
+ public uint Value6; //鍊�6
+ public uint Value7; //鍊�7
+ public uint Value8; //鍊�8
+ public ushort UserDataLen; //鎵╁睍鏁版嵁闀垮害
+ public string UserData; //鎵╁睍鏁版嵁
+ }
+
+}
diff --git a/Main/Core/NetworkPackage/ServerPack/HA0_Sys/HA009_tagSCGameRecInfo.cs.meta b/Main/Core/NetworkPackage/ServerPack/HA0_Sys/HA009_tagSCGameRecInfo.cs.meta
new file mode 100644
index 0000000..d67e677
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HA0_Sys/HA009_tagSCGameRecInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 77ee48f6b77c0f34499e2cbd2546a944
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/Core/NetworkPackage/ServerPack/HA7_Interaction/HA705_tagSCQueryPlayerCacheResult.cs b/Main/Core/NetworkPackage/ServerPack/HA7_Interaction/HA705_tagSCQueryPlayerCacheResult.cs
index 94bfb02..4e12fe7 100644
--- a/Main/Core/NetworkPackage/ServerPack/HA7_Interaction/HA705_tagSCQueryPlayerCacheResult.cs
+++ b/Main/Core/NetworkPackage/ServerPack/HA7_Interaction/HA705_tagSCQueryPlayerCacheResult.cs
@@ -11,6 +11,7 @@
public byte RealmLV;
public uint Face;
public uint FacePic;
+ public uint ModelMark; //鍙樺舰妯″瀷mark
public uint TitleID; //浣╂埓鐨勭О鍙�
public uint ServerID;
public uint FightPower;
@@ -18,6 +19,7 @@
public uint FamilyID;
public string FamilyName;
public uint FamilyEmblemID; //浠欑洘寰界珷ID
+ public string FamilyEmblemWord; //寰界珷鏂囧瓧
public uint PlusDataSize;
public string PlusData; //鎵╁睍璁板綍
@@ -33,6 +35,7 @@
TransBytes (out RealmLV, vBytes, NetDataType.BYTE);
TransBytes (out Face, vBytes, NetDataType.DWORD);
TransBytes (out FacePic, vBytes, NetDataType.DWORD);
+ TransBytes (out ModelMark, vBytes, NetDataType.DWORD);
TransBytes (out TitleID, vBytes, NetDataType.DWORD);
TransBytes (out ServerID, vBytes, NetDataType.DWORD);
TransBytes (out FightPower, vBytes, NetDataType.DWORD);
@@ -40,6 +43,7 @@
TransBytes (out FamilyID, vBytes, NetDataType.DWORD);
TransBytes (out FamilyName, vBytes, NetDataType.Chars, 33);
TransBytes (out FamilyEmblemID, vBytes, NetDataType.DWORD);
+ TransBytes (out FamilyEmblemWord, vBytes, NetDataType.Chars, 3);
TransBytes (out PlusDataSize, vBytes, NetDataType.DWORD);
TransBytes (out PlusData, vBytes, NetDataType.Chars, PlusDataSize);
}
diff --git a/Main/Core/NetworkPackage/ServerPack/HA9_Function/HA922_tagSCArenaMatchList.cs b/Main/Core/NetworkPackage/ServerPack/HA9_Function/HA922_tagSCArenaMatchList.cs
new file mode 100644
index 0000000..2b09559
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HA9_Function/HA922_tagSCArenaMatchList.cs
@@ -0,0 +1,43 @@
+using UnityEngine;
+using System.Collections;
+
+// A9 22 婕旀鍦哄尮閰嶇帺瀹跺垪琛� #tagSCArenaMatchList
+
+public class HA922_tagSCArenaMatchList : GameNetPackBasic {
+ public byte MatchCount;
+ public tagSCArenaMatchInfo[] MatchList; // 鍖归厤鍒楄〃锛屼粠楂樺垎鍒颁綆鍒�
+
+ public HA922_tagSCArenaMatchList () {
+ _cmd = (ushort)0xA922;
+ }
+
+ public override void ReadFromBytes (byte[] vBytes) {
+ TransBytes (out MatchCount, vBytes, NetDataType.BYTE);
+ MatchList = new tagSCArenaMatchInfo[MatchCount];
+ for (int i = 0; i < MatchCount; i ++) {
+ MatchList[i] = new tagSCArenaMatchInfo();
+ 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);
+ }
+ }
+
+ public class tagSCArenaMatchInfo {
+ 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; //绉板彿
+ }
+
+}
diff --git a/Main/Core/NetworkPackage/ServerPack/HA9_Function/HA922_tagSCArenaMatchList.cs.meta b/Main/Core/NetworkPackage/ServerPack/HA9_Function/HA922_tagSCArenaMatchList.cs.meta
new file mode 100644
index 0000000..74bbceb
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HA9_Function/HA922_tagSCArenaMatchList.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2b4642cd36b59424c907081f1ea9e173
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/Core/NetworkPackage/ServerPack/HA9_Function/HA923_tagSCArenaPlayerInfo.cs b/Main/Core/NetworkPackage/ServerPack/HA9_Function/HA923_tagSCArenaPlayerInfo.cs
new file mode 100644
index 0000000..cde9fad
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HA9_Function/HA923_tagSCArenaPlayerInfo.cs
@@ -0,0 +1,17 @@
+using UnityEngine;
+using System.Collections;
+
+// A9 23 婕旀鍦虹帺瀹朵俊鎭� #tagSCArenaPlayerInfo
+
+public class HA923_tagSCArenaPlayerInfo : GameNetPackBasic {
+ public uint Score; //褰撳墠绉垎
+
+ public HA923_tagSCArenaPlayerInfo () {
+ _cmd = (ushort)0xA923;
+ }
+
+ public override void ReadFromBytes (byte[] vBytes) {
+ TransBytes (out Score, vBytes, NetDataType.DWORD);
+ }
+
+}
diff --git a/Main/Core/NetworkPackage/ServerPack/HA9_Function/HA923_tagSCArenaPlayerInfo.cs.meta b/Main/Core/NetworkPackage/ServerPack/HA9_Function/HA923_tagSCArenaPlayerInfo.cs.meta
new file mode 100644
index 0000000..f7acb38
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HA9_Function/HA923_tagSCArenaPlayerInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9a2b69f1fef30664080e787544234dab
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/Main.cs b/Main/Main.cs
index aabfbfb..d9cb64f 100644
--- a/Main/Main.cs
+++ b/Main/Main.cs
@@ -82,7 +82,7 @@
managers.Add(NewBieCenter.Instance);
managers.Add(AdsManager.Instance);
managers.Add(BoneFieldManager.Instance);
-
+ managers.Add(ArenaManager.Instance);
foreach (var manager in managers)
{
manager.Init();
diff --git a/Main/System/Arena.meta b/Main/System/Arena.meta
new file mode 100644
index 0000000..f956f87
--- /dev/null
+++ b/Main/System/Arena.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2bada89d61080494cadb1e44f3ea3bf3
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Arena/ArenaAwardCell.cs b/Main/System/Arena/ArenaAwardCell.cs
new file mode 100644
index 0000000..c9afcb9
--- /dev/null
+++ b/Main/System/Arena/ArenaAwardCell.cs
@@ -0,0 +1,55 @@
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+
+public class ArenaAwardCell : CellView
+{
+ [SerializeField] ImageEx imgRank;
+ [SerializeField] TextEx txtRank;
+ [SerializeField] ItemCell[] itemCells;
+ public void Display(int index, CellView cellView)
+ {
+ int functionOrder = cellView.info.Value.infoInt1;
+ Dictionary<int, int[][]> rewardDict = ArenaManager.Instance.GetArenaAwardDict(functionOrder);
+ if (rewardDict.IsNullOrEmpty())
+ return;
+ var list = rewardDict.Keys.ToList();
+ list.Sort();
+
+
+ int rank = list[index];
+
+ if (rank <= 3)
+ {
+ imgRank.SetActive(true);
+ txtRank.SetActive(false);
+ imgRank.SetSprite(StringUtility.Contact("Rank", rank));
+ txtRank.text = rank.ToString();
+ }
+ else
+ {
+ imgRank.SetActive(false);
+ txtRank.SetActive(true);
+ int lastIndex = index - 1;
+ txtRank.text = lastIndex > 0 && lastIndex < list.Count ? Language.Get("Arena15", list[lastIndex] + 1, rank) : string.Empty;
+ }
+
+ int key = list[index];
+ int[][] rewardArr = rewardDict[key];
+ for (int i = 0; i < itemCells.Length; i++)
+ {
+ var itemCell = itemCells[i];
+ if (!rewardArr.IsNullOrEmpty() && i < rewardArr.Length)
+ {
+ int itemCellIndex = i;
+ itemCell.SetActive(true);
+ itemCell.Init(new ItemCellModel(rewardArr[i][0], true, rewardArr[i][1]));
+ itemCell.button.SetListener(() => ItemTipUtility.Show(rewardArr[itemCellIndex][0], true));
+ }
+ else
+ {
+ itemCell.SetActive(false);
+ }
+ }
+ }
+}
diff --git a/Main/System/Arena/ArenaAwardCell.cs.meta b/Main/System/Arena/ArenaAwardCell.cs.meta
new file mode 100644
index 0000000..075584c
--- /dev/null
+++ b/Main/System/Arena/ArenaAwardCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1af032a349424c84fae27b64da3a604e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Arena/ArenaAwardWin.cs b/Main/System/Arena/ArenaAwardWin.cs
new file mode 100644
index 0000000..22641f5
--- /dev/null
+++ b/Main/System/Arena/ArenaAwardWin.cs
@@ -0,0 +1,121 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+
+public class ArenaAwardWin : FunctionsBaseWin
+{
+ [SerializeField] ButtonEx btnClose;
+ [SerializeField] TextEx txtCountdown;
+ [SerializeField] ScrollerController scrAward;
+ [SerializeField] ArenaPlayerRankCell myRankCell;
+ [HideInInspector] public string valueFormat = "{0}";
+ protected override void InitComponent()
+ {
+ base.InitComponent();
+ btnClose.SetListener(() => UIManager.Instance.CloseWindow<ArenaAwardWin>());
+ }
+
+ protected override void OnPreOpen()
+ {
+ base.OnPreOpen();
+ tabButtons[functionOrder].SelectBtn(true);
+ ArenaManager.Instance.OnArenaMatchListEvent += OnArenaMatchListEvent;
+ ArenaManager.Instance.OnUpdateArenaPlayerInfo += OnUpdateArenaPlayerInfo;
+ ArenaManager.Instance.OnUpdateGameRecInfo += OnUpdateGameRecInfo;
+ RankModel.Instance.onRankRefresh -= OnRankRefresh;
+ GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
+ scrAward.OnRefreshCell += OnRefreshCell;
+ Display();
+ }
+
+ protected override void OnPreClose()
+ {
+ base.OnPreClose();
+ ArenaManager.Instance.OnArenaMatchListEvent -= OnArenaMatchListEvent;
+ ArenaManager.Instance.OnUpdateArenaPlayerInfo -= OnUpdateArenaPlayerInfo;
+ ArenaManager.Instance.OnUpdateGameRecInfo -= OnUpdateGameRecInfo;
+ RankModel.Instance.onRankRefresh -= OnRankRefresh;
+ GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
+ scrAward.OnRefreshCell -= OnRefreshCell;
+ }
+
+ private void OnSecondEvent()
+ {
+ ArenaManager.Instance.GetCurrentSeasonDates(out DateTime seasonStartDate, out DateTime seasonEndDate);
+ TimeSpan remainingTime = seasonEndDate - TimeUtility.ServerNow;
+ int remainingSeconds = (int)remainingTime.TotalSeconds;
+ if (remainingSeconds > 0)
+ {
+ string countdownText = TimeUtility.SecondsToDHMSCHS(remainingSeconds);
+ txtCountdown.SetActive(true);
+ txtCountdown.text = Language.Get("Arena14", countdownText);
+ }
+ else
+ {
+ txtCountdown.SetActive(false);
+ }
+ }
+
+
+ protected override void OpenSubUIByTabIndex()
+ {
+ ArenaManager.Instance.nowAwardTabIndex = functionOrder;
+ Display();
+ }
+
+ private void OnRefreshCell(ScrollerDataType type, CellView cell)
+ {
+ var _cell = cell.GetComponent<ArenaAwardCell>();
+ _cell?.Display(cell.index, cell);
+ }
+
+ private void OnUpdateArenaPlayerInfo()
+ {
+ Display();
+ }
+
+ private void OnArenaMatchListEvent()
+ {
+ Display();
+ }
+
+ private void OnUpdateGameRecInfo()
+ {
+ Display();
+ }
+ void OnRankRefresh(int type)
+ {
+ DisplayMyRank();
+ }
+
+ private void Display()
+ {
+ CreateScroller();
+ DisplayMyRank();
+ OnSecondEvent();
+ }
+
+ private void CreateScroller()
+ {
+ scrAward.Refresh();
+ Dictionary<int, int[][]> rewardDict = ArenaManager.Instance.GetArenaAwardDict(functionOrder);
+ if (!rewardDict.IsNullOrEmpty())
+ {
+ var list = rewardDict.Keys.ToList();
+ list.Sort();
+ for (int i = 0; i < list.Count; i++)
+ {
+ CellInfo cellInfo = new CellInfo();
+ cellInfo.infoInt1 = (int)functionOrder;
+ scrAward.AddCell(ScrollerDataType.Header, i, cellInfo);
+ }
+ }
+ scrAward.Restart();
+ }
+
+ private void DisplayMyRank()
+ {
+ myRankCell.Display(ArenaManager.Instance.rankType, 0, valueFormat);
+ }
+}
diff --git a/Main/System/Arena/ArenaAwardWin.cs.meta b/Main/System/Arena/ArenaAwardWin.cs.meta
new file mode 100644
index 0000000..91a3d66
--- /dev/null
+++ b/Main/System/Arena/ArenaAwardWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 261402b40fdeef54b88c11e75dddd897
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Arena/ArenaBattleFailWin.cs b/Main/System/Arena/ArenaBattleFailWin.cs
new file mode 100644
index 0000000..4f5dcfc
--- /dev/null
+++ b/Main/System/Arena/ArenaBattleFailWin.cs
@@ -0,0 +1,110 @@
+using System.Collections.Generic;
+using Cysharp.Threading.Tasks;
+using LitJson;
+using UnityEngine;
+
+//鎴樺満缁撶畻鐣岄潰锛屽瓨鍦ㄥ涓殑鎯呭喌
+public class ArenaBattleFailWin : UIBase
+{
+ [SerializeField] AvatarCell myAvatarCell;
+ [SerializeField] AvatarCell enemyAvatarCell;
+ [SerializeField] TextEx txtMyName;
+ [SerializeField] TextEx txtEnemyName;
+ [SerializeField] TextEx txtMyScore;
+ [SerializeField] TextEx txtEnemyScore;
+ [SerializeField] ScrollerController scroller;
+ JsonData jsonData;
+ string guid;
+
+ protected override void InitComponent()
+ {
+
+ }
+
+ protected override void OnPreOpen()
+ {
+ scroller.OnRefreshCell += OnRefreshCell;
+ guid = BattleSettlementManager.Instance.notifyGuid;
+ jsonData = BattleSettlementManager.Instance.GetBattleSettlement(guid);
+ if (jsonData == null)
+ {
+ DelayCloseWindow().Forget();
+ return;
+ }
+ Display();
+ CreateScroller();
+ }
+
+ protected override void OnPreClose()
+ {
+ scroller.OnRefreshCell -= OnRefreshCell;
+ BattleSettlementManager.Instance.WinShowOver(guid);
+ }
+
+ // B4 20 鍥炲悎鍒舵垬鏂楃姸鎬� #tagMCTurnFightState 閫氱敤鐨勭粨绠楃姸鎬� State 4-缁撶畻濂栧姳
+ // Msg 涓澶栦俊鎭�
+ // "tagPlayerID":瀵规垬鐨勭洰鏍嘔D,
+ // "atkAddScore":鍙戣捣鏂瑰鍔犵殑绉垎锛屽彲鑳戒负0,
+ // "defDecScore":琚嚮鏂瑰噺灏戠殑绉垎锛屽彲鑳戒负0,
+ // itemInfo:濂栧姳鐗╁搧鍒楄〃锛屽彲鑳戒负绌�
+ void Display()
+ {
+ if (!jsonData.ContainsKey("tagPlayerID") || !jsonData.ContainsKey("atkAddScore") || !jsonData.ContainsKey("defDecScore"))
+ return;
+ uint tagPlayerID = (uint)jsonData["tagPlayerID"];
+ int atkAddScore = (int)jsonData["atkAddScore"];
+ int defDecScore = (int)jsonData["defDecScore"];
+ if (!ArenaManager.Instance.TryGetPlayerInfo(tagPlayerID, out ArenaMatchInfo 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));
+ txtMyName.text = PlayerDatas.Instance.baseData.PlayerName;
+ txtEnemyName.text = UIHelper.ServerStringTrim(info.PlayerName);
+ txtMyScore.text = Language.Get("Arena17", atkAddScore);
+ txtEnemyScore.text = Language.Get("Arena21", defDecScore);
+ }
+ List<Item> showItems = new List<Item>();
+ void CreateScroller()
+ {
+
+ showItems.Clear();
+ scroller.Refresh();
+
+ 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"]));
+ }
+
+ 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/Arena/ArenaBattleFailWin.cs.meta b/Main/System/Arena/ArenaBattleFailWin.cs.meta
new file mode 100644
index 0000000..095f22e
--- /dev/null
+++ b/Main/System/Arena/ArenaBattleFailWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e168451406b9e004180f67432eb30f58
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Arena/ArenaBattleVictoryWin.cs b/Main/System/Arena/ArenaBattleVictoryWin.cs
new file mode 100644
index 0000000..1cf0f76
--- /dev/null
+++ b/Main/System/Arena/ArenaBattleVictoryWin.cs
@@ -0,0 +1,170 @@
+using System.Collections.Generic;
+using Cysharp.Threading.Tasks;
+using LitJson;
+using UnityEngine;
+
+// 銆愭垬鏂楃粨绠椼��
+// 褰撴敹鍒� // B4 20 鍥炲悎鍒舵垬鏂楃姸鎬� #tagMCTurnFightState State 涓� 4-缁撶畻锛屾椂锛屼唬琛ㄦ湰鍦烘垬鏂楀凡缁撴潫骞剁粨绠�
+// char Msg[Len]; //size = Len Msg淇℃伅涓�
+// {"winFaction":鑾疯儨闃佃惀, "statInfo":缁熻淇℃伅, 鈥渋temInfo鈥�:[濂栧姳鐗╁搧淇℃伅鍒楄〃]}
+// 鑾疯儨闃佃惀: 涓�鑸负1鎴栬��2锛屽綋鐜╁鍙戣捣鐨勬垬鏂楁椂锛屽鏋滆幏鑳滈樀钀ヤ笉绛変簬1浠h〃鐜╁澶辫触浜�
+// 缁熻淇℃伅锛� 鏍煎紡 {"闃佃惀缂栧彿":{"闃靛缂栧彿":{"绔欎綅缂栧彿":{璇ユ灏嗙粺璁′俊鎭瓧鍏竲, ...}, ...}, ...}
+// 闃佃惀缂栧彿锛� 涓�鑸椂1鎴�2锛� 瀵瑰簲 B424 鍚屾涓嬪幓鐨勯樀钀�
+// 闃靛缂栧彿锛� 闅跺睘浜庢煇涓樀钀ョ殑闃靛缂栧彿锛屼竴鑸槸浠�1寮�濮嬶紝涓�涓樀钀ュ湪澶歏澶氱殑鎯呭喌涓嬪彲浠ユ湁澶氫釜闃靛
+// 绔欎綅缂栧彿锛� 鏌愪釜闃靛涓灏嗘垬鏂楀疄渚嬬殑绔欎綅缂栧彿锛屼竴鑸粠1寮�濮嬶紝浠h〃绔欎綅1
+// 姝﹀皢缁熻淇℃伅瀛楀吀锛� 鏍煎紡锛� {"ObjID":瀹炰緥ID, "HeroID":鐜╁闃靛姝﹀皢ID, "NPCID":npc琛↖D, "AtkHurt":鎬昏緭鍑�, "DefHurt":鎬绘壙浼�, "CureHP":鎬绘不鐤梷
+
+// 澶勭悊鎴樻枟缁撴潫閫昏緫
+// IsBattleFinish = true;
+// 缁撶畻閫昏緫
+
+// {
+// "itemInfo": [],
+// "winFaction": 1,//鑾疯儨闃佃惀: 涓�鑸负1鎴栬��2锛屽綋鐜╁鍙戣捣鐨勬垬鏂楁椂锛屽鏋滆幏鑳滈樀钀ヤ笉绛変簬1浠h〃鐜╁澶辫触浜�
+// "statInfo": {
+// "1": {
+// "1": {
+// "5": {
+// "NPCID": 0,
+// "DefHurt": 633,
+// "CureHP": 0,
+// "AtkHurt": 169247,
+// "ObjID": 1,
+// "HeroID": 510006
+// }
+// }
+// },
+// "2": {
+// "1": {
+// "2": {
+// "NPCID": 10101001,
+// "DefHurt": 169246,
+// "CureHP": 143096,
+// "AtkHurt": 999952,
+// "ObjID": 2,
+// "HeroID": 0
+// },
+// "4": {
+// "NPCID": 10101001,
+// "DefHurt": 0,
+// "CureHP": 0,
+// "AtkHurt": 0,
+// "ObjID": 3,
+// "HeroID": 0
+// },
+// "6": {
+// "NPCID": 10101001,
+// "DefHurt": 1,
+// "CureHP": 0,
+// "AtkHurt": 0,
+// "ObjID": 4,
+// "HeroID": 0
+// }
+// }
+// }
+// }
+// }
+
+//"Msg":{"itemInfo":[{"ItemID":5,"Count":2},{"ItemID":3,"Count":40}],"winFaction":1,"statInfo":{"1":{"1":{"1":{"NPCID":0,"DefHurt":727,"CureHP":0,"AtkHurt":1891,"ObjID":1,"HeroID":530004},"3":{"NPCID":0,"DefHurt":483,"CureHP":1511,"AtkHurt":782,"ObjID":6,"HeroID":520001},"2":{"NPCID":0,"DefHurt":953,"CureHP":0,"AtkHurt":1712,"ObjID":5,"HeroID":510003}}},"2":{"1":{"1":{"NPCID":10101091,"DefHurt":638,"CureHP":0,"AtkHurt":140,"ObjID":2,"HeroID":610001},"3":{"NPCID":10101092,"DefHurt":625,"CureHP":0,"AtkHurt":126,"ObjID":3,"HeroID":610001},"5":{"NPCID":10101093,"DefHurt":3122,"CureHP":0,"AtkHurt":1897,"ObjID":4,"HeroID":510003}}}}}
+
+//鎴樺満缁撶畻鐣岄潰锛屽瓨鍦ㄥ涓殑鎯呭喌
+public class ArenaBattleVictoryWin : UIBase
+{
+ [SerializeField] AvatarCell myAvatarCell;
+ [SerializeField] AvatarCell enemyAvatarCell;
+ [SerializeField] TextEx txtMyName;
+ [SerializeField] TextEx txtEnemyName;
+ [SerializeField] TextEx txtMyScore;
+ [SerializeField] TextEx txtEnemyScore;
+
+ [SerializeField] ScrollerController scroller;
+ JsonData jsonData;
+ string guid;
+ protected override void OnPreOpen()
+ {
+ scroller.OnRefreshCell += OnRefreshCell;
+ guid = BattleSettlementManager.Instance.notifyGuid;
+ jsonData = BattleSettlementManager.Instance.GetBattleSettlement(guid);
+ if (jsonData == null)
+ {
+ DelayCloseWindow().Forget();
+ return;
+ }
+ Display();
+ CreateScroller();
+ }
+
+
+ protected override void OnPreClose()
+ {
+ scroller.OnRefreshCell -= OnRefreshCell;
+ BattleSettlementManager.Instance.WinShowOver(guid);
+ }
+ // B4 20 鍥炲悎鍒舵垬鏂楃姸鎬� #tagMCTurnFightState 閫氱敤鐨勭粨绠楃姸鎬� State 4-缁撶畻濂栧姳
+ // Msg 涓澶栦俊鎭�
+ // "tagPlayerID":瀵规垬鐨勭洰鏍嘔D,
+ // "atkAddScore":鍙戣捣鏂瑰鍔犵殑绉垎锛屽彲鑳戒负0,
+ // "defDecScore":琚嚮鏂瑰噺灏戠殑绉垎锛屽彲鑳戒负0,
+ // itemInfo:濂栧姳鐗╁搧鍒楄〃锛屽彲鑳戒负绌�
+ void Display()
+ {
+ if (!jsonData.ContainsKey("tagPlayerID") || !jsonData.ContainsKey("atkAddScore") || !jsonData.ContainsKey("defDecScore"))
+ return;
+ uint tagPlayerID = (uint)jsonData["tagPlayerID"];
+ int atkAddScore = (int)jsonData["atkAddScore"];
+ int defDecScore = (int)jsonData["defDecScore"];
+ if (!ArenaManager.Instance.TryGetPlayerInfo(tagPlayerID, out ArenaMatchInfo 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));
+ txtMyName.text = PlayerDatas.Instance.baseData.PlayerName;
+ txtEnemyName.text = UIHelper.ServerStringTrim(info.PlayerName);
+ txtMyScore.text = Language.Get("Arena17", atkAddScore);
+ txtEnemyScore.text = Language.Get("Arena21", defDecScore);
+ }
+
+ List<Item> showItems = new List<Item>();
+ void CreateScroller()
+ {
+
+ showItems.Clear();
+ scroller.Refresh();
+
+ 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"]));
+ }
+
+ 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/Arena/ArenaBattleVictoryWin.cs.meta b/Main/System/Arena/ArenaBattleVictoryWin.cs.meta
new file mode 100644
index 0000000..bda6a54
--- /dev/null
+++ b/Main/System/Arena/ArenaBattleVictoryWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4b85bbac1964abf45a57115812f0b39b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Arena/ArenaChallengeCell.cs b/Main/System/Arena/ArenaChallengeCell.cs
new file mode 100644
index 0000000..159efcf
--- /dev/null
+++ b/Main/System/Arena/ArenaChallengeCell.cs
@@ -0,0 +1,59 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ArenaChallengeCell : MonoBehaviour
+{
+ [SerializeField] AvatarCell avatarCell;
+ [SerializeField] TextEx txtName;
+ [SerializeField] TextEx txtAddScore;
+ [SerializeField] TextEx txtFightPoint;
+ [SerializeField] OfficialTitleCell officialTitleCell;
+ [SerializeField] List<ItemCell> itemCells;
+ [SerializeField] ButtonEx btnChallenge;
+ ArenaMatchInfo arenaMatchInfo;
+ void Start()
+ {
+ btnChallenge.SetListener(() =>
+ {
+ if (arenaMatchInfo == null)
+ return;
+ // 璐у竵涓嶈冻
+ if (!UIHelper.CheckMoneyCount(ArenaManager.Instance.ChallengeMoneyType, ArenaManager.Instance.NeedChallengeMoneyCnt, 1))
+ return;
+ ArenaManager.Instance.atkPlayerId = arenaMatchInfo.PlayerID;
+ ArenaManager.Instance.SendTurnFight(arenaMatchInfo.PlayerID);
+ });
+ }
+
+ public void Display(int index)
+ {
+ List<ArenaMatchInfo> list = ArenaManager.Instance.matchInfoList;
+ if (list.IsNullOrEmpty() || index < 0 || index >= list.Count)
+ return;
+ arenaMatchInfo = list[index];
+
+ avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)arenaMatchInfo.PlayerID, (int)arenaMatchInfo.Face, (int)arenaMatchInfo.FacePic));
+ txtName.text = UIHelper.ServerStringTrim(arenaMatchInfo.PlayerName);
+ txtFightPoint.text = UIHelper.ReplaceLargeArtNum(arenaMatchInfo.FightPower);
+ txtAddScore.text = Language.Get("Arena16", ArenaManager.Instance.GetChallengePoints(index));
+
+ officialTitleCell.InitUI(arenaMatchInfo.RealmLV, (int)arenaMatchInfo.TitleID);
+
+ int[][] rewards = ArenaManager.Instance.fixedChallengeRewards;
+ for (int i = 0; i < itemCells.Count; i++)
+ {
+ var itemCell = itemCells[i];
+ if (!rewards.IsNullOrEmpty() && i < rewards.Length)
+ {
+ int itemCellIndex = i;
+ itemCell.SetActive(true);
+ itemCell.Init(new ItemCellModel(rewards[i][0], true, rewards[i][1]));
+ itemCell.button.SetListener(() => ItemTipUtility.Show(rewards[itemCellIndex][0], true));
+ }
+ else
+ {
+ itemCell.SetActive(false);
+ }
+ }
+ }
+}
diff --git a/Main/System/Arena/ArenaChallengeCell.cs.meta b/Main/System/Arena/ArenaChallengeCell.cs.meta
new file mode 100644
index 0000000..64c782c
--- /dev/null
+++ b/Main/System/Arena/ArenaChallengeCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 241dd54b1d574284b97aeb85cfed40a2
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Arena/ArenaChallengeVoucher.cs b/Main/System/Arena/ArenaChallengeVoucher.cs
new file mode 100644
index 0000000..f2abeec
--- /dev/null
+++ b/Main/System/Arena/ArenaChallengeVoucher.cs
@@ -0,0 +1,24 @@
+using UnityEngine;
+
+public class ArenaChallengeVoucher : MonoBehaviour
+{
+ [SerializeField] ImageEx imgChallengeMoneyIcon;
+ [SerializeField] TextEx txtChallengeMoneyCount;
+ [SerializeField] ButtonEx btnBuy;
+
+ void Awake()
+ {
+ btnBuy.SetListener(() =>
+ {
+
+ });
+ }
+
+ public void Display()
+ {
+ int type = ArenaManager.Instance.ChallengeMoneyType;
+ int maxChallengeCount = ArenaManager.Instance.GetMaxChallengeCount();
+ imgChallengeMoneyIcon.SetIconWithMoneyType(type);
+ txtChallengeMoneyCount.text = Language.Get("BoneField09", UIHelper.GetMoneyCnt(type), maxChallengeCount);
+ }
+}
diff --git a/Main/System/Arena/ArenaChallengeVoucher.cs.meta b/Main/System/Arena/ArenaChallengeVoucher.cs.meta
new file mode 100644
index 0000000..5460ffd
--- /dev/null
+++ b/Main/System/Arena/ArenaChallengeVoucher.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5aabcebb83427c645b22e283276e1d00
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Arena/ArenaChallengeWin.cs b/Main/System/Arena/ArenaChallengeWin.cs
new file mode 100644
index 0000000..4b74ad5
--- /dev/null
+++ b/Main/System/Arena/ArenaChallengeWin.cs
@@ -0,0 +1,91 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ArenaChallengeWin : UIBase
+{
+ [SerializeField] ArenaChallengeVoucher voucher;
+ [SerializeField] ButtonEx btnRefresh;
+ [SerializeField] TextEx txtFightPoint;
+ [SerializeField] ImageEx imgMoneyIcon;
+ [SerializeField] TextEx txtMoneyCount;
+ [SerializeField] ScrollerController scrollerController;
+
+ protected override void InitComponent()
+ {
+ base.InitComponent();
+ btnRefresh.SetListener(() =>
+ {
+ // 璐у竵涓嶈冻
+ if (!UIHelper.CheckMoneyCount(ArenaManager.Instance.currencyType, ArenaManager.Instance.currencyValue, 1))
+ return;
+ ArenaManager.Instance.SendArenaMatch(true);
+ });
+
+ }
+
+ protected override void OnPreOpen()
+ {
+ base.OnPreOpen();
+ // RankModel.Instance.onRankRefresh += OnRankRefresh;
+ scrollerController.OnRefreshCell += OnRefreshCell;
+ ArenaManager.Instance.OnArenaMatchListEvent += OnArenaMatchListEvent;
+ PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefresh;
+ // ArenaManager.Instance.OnUpdateArenaPlayerInfo += OnUpdateArenaPlayerInfo;
+ // ArenaManager.Instance.OnUpdateGameRecInfo += OnUpdateGameRecInfo;
+ // Display();
+ Display();
+ }
+
+ protected override void OnPreClose()
+ {
+ base.OnPreClose();
+ // RankModel.Instance.onRankRefresh -= OnRankRefresh;
+ scrollerController.OnRefreshCell -= OnRefreshCell;
+ ArenaManager.Instance.OnArenaMatchListEvent -= OnArenaMatchListEvent;
+ PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefresh;
+ // ArenaManager.Instance.OnUpdateArenaPlayerInfo -= OnUpdateArenaPlayerInfo;
+ // ArenaManager.Instance.OnUpdateGameRecInfo -= OnUpdateGameRecInfo;
+ }
+
+ private void PlayerDataRefresh(PlayerDataType type)
+ {
+ if (type != PlayerDataType.ChallengeVoucher)
+ return;
+ Display();
+ }
+
+ private void OnArenaMatchListEvent()
+ {
+ Display();
+
+ }
+
+ private void CreateScroller()
+ {
+ scrollerController.Refresh();
+ List<ArenaMatchInfo> list = ArenaManager.Instance.matchInfoList;
+ if (!list.IsNullOrEmpty())
+ {
+ for (int i = 0; i < list.Count; i++)
+ {
+ scrollerController.AddCell(ScrollerDataType.Header, i);
+ }
+ }
+ scrollerController.Restart();
+ }
+
+ void OnRefreshCell(ScrollerDataType type, CellView cell)
+ {
+ var _cell = cell.GetComponent<ArenaChallengeCell>();
+ _cell?.Display(cell.index);
+ }
+
+ void Display()
+ {
+ CreateScroller();
+ voucher.Display();
+ txtFightPoint.text = UIHelper.ReplaceLargeArtNum(PlayerDatas.Instance.baseData.FightPower);
+ imgMoneyIcon.SetIconWithMoneyType(ArenaManager.Instance.currencyType);
+ txtMoneyCount.text = UIHelper.ShowUseMoney(ArenaManager.Instance.currencyType, ArenaManager.Instance.currencyValue);
+ }
+}
diff --git a/Main/System/Arena/ArenaChallengeWin.cs.meta b/Main/System/Arena/ArenaChallengeWin.cs.meta
new file mode 100644
index 0000000..e840e79
--- /dev/null
+++ b/Main/System/Arena/ArenaChallengeWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1ab89feb7fe3f5e4695c1cf39769fc60
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Arena/ArenaHeroHead.cs b/Main/System/Arena/ArenaHeroHead.cs
new file mode 100644
index 0000000..1895e49
--- /dev/null
+++ b/Main/System/Arena/ArenaHeroHead.cs
@@ -0,0 +1,30 @@
+using UnityEngine;
+
+public class ArenaHeroHead : MonoBehaviour
+{
+ [SerializeField] ImageEx imgQuality;
+ [SerializeField] ImageEx imgHeadIcon;
+ [SerializeField] TextEx txtHeroLv;
+
+ public void Display(int heroID, int skinID, int heroLv)
+ {
+ if (!HeroConfig.HasKey(heroID) || !HeroSkinConfig.HasKey(skinID))
+ return;
+ var heroConfig = HeroConfig.Get(heroID);
+ var heroSkinConfig = HeroSkinConfig.Get(skinID);
+ imgQuality.SetSprite("heroheadBG" + heroConfig.Quality);
+
+ var sprite = UILoader.LoadSprite("HeroHead", heroSkinConfig.SquareIcon);
+ if (sprite == null)
+ {
+ // 鍐呯綉鏈厤缃椂
+ imgHeadIcon.SetSprite("herohead_default");
+ }
+ else
+ {
+ imgHeadIcon.overrideSprite = sprite;
+ }
+
+ txtHeroLv.text = Language.Get("Arena22", heroLv);
+ }
+}
diff --git a/Main/System/Arena/ArenaHeroHead.cs.meta b/Main/System/Arena/ArenaHeroHead.cs.meta
new file mode 100644
index 0000000..f714dab
--- /dev/null
+++ b/Main/System/Arena/ArenaHeroHead.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f37aea19aa098294f825fa0dfea4a44e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Arena/ArenaManager.cs b/Main/System/Arena/ArenaManager.cs
new file mode 100644
index 0000000..c1baa85
--- /dev/null
+++ b/Main/System/Arena/ArenaManager.cs
@@ -0,0 +1,347 @@
+using System.Collections.Generic;
+using UnityEngine;
+using LitJson;
+using System;
+
+public class ArenaManager : GameSystemManager<ArenaManager>
+{
+ public readonly int rankType = 1; // 姒滃崟绫诲瀷
+ public readonly int funcId = 27; // 鍔熻兘Id
+ public readonly int recType = 308; // 婕旀鍦虹帺瀹舵寫鎴樿褰曠被鍨� 308
+ public readonly int ChallengeMoneyType = 53;
+ public readonly int NeedChallengeMoneyCnt = 1;
+ public readonly int RecordType = 308; // 婕旀鍦虹帺瀹舵寫鎴樿褰�
+ public int initialPoints; // 鐜╁鍒濆绉垎
+ public int challengeRecordCount; // 琚寫鎴樿褰曟潯鏁帮紙涓嶈秴杩�50锛�
+ public int challengeTicketLimit; // 鎸戞垬鍒稿熀纭�瀛樺偍涓婇檺
+ public int[][] fixedChallengeRewards; // 鍥哄畾鎸戞垬濂栧姳 [[鐗╁搧ID,涓暟], ...]
+ public int[][] matchVictoryPoints; // 鍖归厤浣嶇疆鎸戞垬鑳滃埄瀵瑰簲澧炲噺绉垎 [[鎸戞垬鏂瑰鍔犵Н鍒�, 闃插畧鏂规墸闄ょН鍒哴, ...]锛岄暱搴﹀嵆涓哄尮閰嶇殑浜烘暟锛屼粠鏈�楂樺垎寮�濮嬮厤缃�
+ public int lowerRankStart; // 浠庢瘮鑷繁浣庡嚑涓鐨勫悕娆″紑濮嬪尮閰�
+ public int rankStep; // 姣忎釜鍖归厤娈佃法x鍚嶏紝濡傞厤缃� 2|10锛屽嵆浠h〃浠庤嚜宸卞悕娆″悜鍚�20鍚嶅紑濮嬪尮閰嶏紝姣忚法10鍚嶅尮閰�1浜�
+ public Dictionary<int, int[]> robotMatchCounts; // 鐜╁鎵�鍦ㄥ皬浜庣瓑浜庤鍚嶆瀵瑰簲鍖归厤鏈哄櫒浜烘暟 {鍚嶆:[鍖归厤鏈哄櫒浜烘暟涓嬮檺, 涓婇檺], ...}
+ public int currencyType; // 鍒锋柊鍖归厤鍥哄畾娑堣�楄揣甯佺被鍨�
+ public int currencyValue; // 鍒锋柊鍖归厤鍥哄畾娑堣�楄揣甯佸��
+ public Dictionary<int, int[][]> dailyRankRewards; // 姣忔棩鎺掕濂栧姳 {"鍚嶆":[[鐗╁搧ID, 涓暟,鏄惁鎷嶅搧], ...], ...} 閰嶇疆鐨勫悕娆ey锛岃嚜鍔ㄦ寜灏忎簬绛変簬瀵瑰簲鍚嶆缁欏鍔�
+ public Dictionary<int, int[][]> seasonRankRewards; // 璧涘鎺掕濂栧姳 {"鍚嶆":[[鐗╁搧ID, 涓暟,鏄惁鎷嶅搧], ...], ...}
+
+ public uint score; // 褰撳墠绉垎
+
+ public List<ArenaMatchInfo> matchInfoList = new List<ArenaMatchInfo>();
+ //鐢ㄤ簬鐢ㄦ潵鎷挎垬鏂楄儨鍒╁け璐ョ殑澶村儚淇℃伅
+ public Dictionary<uint, ArenaMatchInfo> allFaceInfoDict = new Dictionary<uint, ArenaMatchInfo>();
+ public Dictionary<uint, List<ArenaGameRec>> gameRecDict = new Dictionary<uint, List<ArenaGameRec>>(); // <RecID,ArenaGameRec>
+ public uint atkPlayerId;
+ public Redpoint parentRedpoint = new Redpoint(MainRedDot.MainChallengeRedpoint, MainRedDot.ArenaRepoint);
+ public Redpoint challengeButtonRedpoint;
+ public int nowAwardTabIndex = 0;
+ public event Action OnArenaMatchListEvent;
+ public event Action OnUpdateArenaPlayerInfo;
+ public event Action OnUpdateGameRecInfo;
+ public override void Init()
+ {
+ DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitializeEvent;
+ PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefresh;
+ InitTable();
+ InitRedpoint();
+ }
+
+ public override void Release()
+ {
+ DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitializeEvent;
+ PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefresh;
+ }
+
+ public void OnBeforePlayerDataInitializeEvent()
+ {
+ matchInfoList.Clear();
+ gameRecDict.Clear();
+ allFaceInfoDict.Clear();
+ }
+
+ void InitRedpoint()
+ {
+ challengeButtonRedpoint = new Redpoint(MainRedDot.ArenaRepoint, GetRedPonitId(1));
+ }
+
+ void InitTable()
+ {
+ FuncConfigConfig config = FuncConfigConfig.Get("ArenaSet");
+ initialPoints = int.Parse(config.Numerical1);
+ challengeRecordCount = int.Parse(config.Numerical2);
+ challengeTicketLimit = int.Parse(config.Numerical3);
+ fixedChallengeRewards = JsonMapper.ToObject<int[][]>(config.Numerical4);
+
+ config = FuncConfigConfig.Get("ArenaMatch");
+ matchVictoryPoints = JsonMapper.ToObject<int[][]>(config.Numerical1);
+ string[] matchParams = config.Numerical2.Split('|');
+ lowerRankStart = int.Parse(matchParams[0]);
+ rankStep = int.Parse(matchParams[1]);
+ robotMatchCounts = ConfigParse.GetDic<int, int[]>(config.Numerical3);
+ string[] costParams = config.Numerical4.Split('|');
+ currencyType = int.Parse(costParams[0]);
+ currencyValue = int.Parse(costParams[1]);
+
+ config = FuncConfigConfig.Get("ArenaBillboradAward");
+ dailyRankRewards = ConfigParse.ParseIntArray2Dict(config.Numerical1);
+ seasonRankRewards = ConfigParse.ParseIntArray2Dict(config.Numerical2);
+ }
+ public void UpdateRedPonit()
+ {
+ parentRedpoint.state = RedPointState.None;
+ challengeButtonRedpoint.state = RedPointState.None;
+
+ if (!FuncOpen.Instance.IsFuncOpen(funcId))
+ return;
+
+ if (UIHelper.GetMoneyCnt(ChallengeMoneyType) > 0)
+ {
+ challengeButtonRedpoint.state = RedPointState.Simple;
+ }
+ }
+
+ public bool TryGetPlayerInfo(uint playerID, out ArenaMatchInfo info)
+ {
+ return allFaceInfoDict.TryGetValue(playerID, out info);
+ }
+
+ // 1 鎸戞垬鎸夐挳
+ public int GetRedPonitId(int num)
+ {
+ return MainRedDot.ArenaRepoint * 10 + num;
+ }
+
+ private void PlayerDataRefresh(PlayerDataType type)
+ {
+ if (type != PlayerDataType.ChallengeVoucher)
+ return;
+ UpdateRedPonit();
+ }
+
+ public int GetMaxChallengeCount()
+ {
+ return challengeTicketLimit;
+ }
+
+ public void OnArenaMatchList(HA922_tagSCArenaMatchList vNetData)
+ {
+ if (vNetData == null || vNetData.MatchList.IsNullOrEmpty())
+ return;
+
+ matchInfoList.Clear();
+
+ foreach (var item in vNetData.MatchList)
+ {
+ var matchInfo = new ArenaMatchInfo
+ {
+ 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
+ };
+ matchInfoList.Add(matchInfo);
+ allFaceInfoDict[item.PlayerID] = matchInfo;
+ }
+ matchInfoList.Reverse();
+ OnArenaMatchListEvent?.Invoke();
+ }
+
+
+ public void UpdateArenaPlayerInfo(HA923_tagSCArenaPlayerInfo vNetData)
+ {
+ if (vNetData == null)
+ return;
+ this.score = vNetData.Score;
+ OnUpdateArenaPlayerInfo?.Invoke();
+ }
+ 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<ArenaGameRec>();
+ foreach (var rec in vNetData.RecList)
+ {
+ try
+ {
+ var userData = JsonMapper.ToObject(rec.UserData);
+ string name = userData["Name"].ToString();
+ int addScore = int.Parse(userData["AddScore"].ToString());
+ ulong fightPower = ulong.Parse(userData["FightPower"].ToString());
+
+ var arenaGameRec = new ArenaGameRec
+ {
+ 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,
+ AddScore = addScore,
+ FightPower = fightPower
+ };
+
+ gameRecDict[recID].Add(arenaGameRec);
+
+ if (recID == PlayerDatas.Instance.baseData.PlayerID)
+ {
+ allFaceInfoDict[rec.Value3] = new ArenaMatchInfo
+ {
+ Face = rec.Value5,
+ FacePic = rec.Value6,
+ RealmLV = (ushort)rec.Value7,
+ Lv = (ushort)rec.Value8,
+ PlayerName = name,
+ FightPower = fightPower,
+ };
+ }
+
+ }
+ catch (Exception ex)
+ {
+ Debug.LogError($"JSON瑙f瀽閿欒: {ex.Message}, UserData: {rec.UserData}");
+ continue;
+ }
+ }
+ OnUpdateGameRecInfo?.Invoke();
+ }
+
+
+ public Dictionary<int, int[][]> GetArenaAwardDict(int functionOrder)
+ {
+ return functionOrder == 0 ? dailyRankRewards : seasonRankRewards;
+ }
+
+ public void SendViewGameRecPack()
+ {
+ CA008_tagCSViewGameRec pack = new CA008_tagCSViewGameRec();
+ pack.RecType = (ushort)RecordType;
+ GameNetSystem.Instance.SendInfo(pack);
+ }
+
+ public void SendArenaMatch(bool isRefresh = false)
+ {
+ CB209_tagCSArenaMatch pack = new CB209_tagCSArenaMatch();
+ pack.IsRefresh = isRefresh ? (byte)1 : (byte)0;
+ GameNetSystem.Instance.SendInfo(pack);
+ }
+
+ public void SendTurnFight(uint playerID)
+ {
+ CB410_tagCMTurnFight pack = new CB410_tagCMTurnFight();
+ pack.MapID = 3;
+ pack.TagType = 1;
+ pack.TagID = playerID;
+ GameNetSystem.Instance.SendInfo(pack);
+ }
+
+ public bool IsTimeInvalid(uint time)
+ {
+ DateTime dateTime = TimeUtility.GetTime(time);
+ GetCurrentSeasonDates(out DateTime seasonStartDate, out DateTime seasonEndDate);
+ return dateTime < seasonStartDate || dateTime > seasonEndDate;
+ }
+
+ /// <summary>
+ /// 鏍规嵁绱㈠紩鍜屾帓搴忔柟鍚戣幏鍙栫Н鍒�
+ /// </summary>
+ /// <param name="index">绱㈠紩浣嶇疆锛堜粠0寮�濮嬶級</param>
+ /// <param name="isAscending">true-姝e簭锛宖alse-鍊掑簭</param>
+ /// <param name="isChallenger">true-鎸戞垬鏂瑰鍔犵Н鍒嗭紝false-闃插畧鏂规墸闄ょН鍒�</param>
+ /// <returns>瀵瑰簲鐨勭Н鍒嗗��</returns>
+ public int GetChallengePoints(int index, bool isAscending = false, bool isChallenger = true)
+ {
+ // 妫�鏌ョ储寮曟槸鍚﹀湪鏈夋晥鑼冨洿鍐�
+ if (matchVictoryPoints.IsNullOrEmpty() || index < 0 || index >= matchVictoryPoints.Length)
+ return 0;
+ int targetIndex = isAscending ? index : matchVictoryPoints.Length - 1 - index;
+ return matchVictoryPoints[targetIndex][isChallenger ? 0 : 1];
+ }
+
+ /// <summary>
+ /// 鑾峰緱褰撳墠璧涘鐨勮捣姝㈡棩鏈熴�傝禌瀛d粠鍛ㄤ竴 00:00:00 寮�濮嬶紝鍒板懆鏃� 23:59:59 缁撴潫銆�
+ /// 鏈嶅姟绔畾涔夊懆涓�涓烘瘡鍛ㄧ殑绗竴澶┿��
+ /// </summary>
+ /// <param name="seasonStartDate">杈撳嚭鍙傛暟锛氳禌瀛g殑璧峰鏃ユ湡锛堟湰鍛ㄤ竴 00:00:00锛�</param>
+ /// <param name="seasonEndDate">杈撳嚭鍙傛暟锛氳禌瀛g殑缁撴潫鏃ユ湡锛堟湰鍛ㄦ棩 23:59:59锛�</param>
+ public void GetCurrentSeasonDates(out DateTime seasonStartDate, out DateTime seasonEndDate)
+ {
+ DateTime now = TimeUtility.ServerNow;
+ // 鍦� .NET 涓紝DayOfWeek 鏋氫妇 Sunday = 0, Monday = 1, ..., Saturday = 6銆�
+ // 涓轰簡绗﹀悎鍛ㄤ竴鏄竴鍛ㄧ涓�澶╃殑璁$畻鏍囧噯锛屾垜浠皢鍛ㄦ棩瑙嗕负涓�鍛ㄧ殑绗�7澶┿��
+ int currentDayOfWeek = (int)now.DayOfWeek;
+ if (currentDayOfWeek == 0) // 濡傛灉鏄懆鏃� (Sunday = 0)
+ {
+ currentDayOfWeek = 7;
+ }
+
+ // 浠庡綋鍓嶆棩鏈熷噺鍘荤浉搴旂殑澶╂暟锛屽緱鍒板懆涓�鐨勬棩鏈熴��
+ // 渚嬪锛屽鏋滄槸鍛ㄤ笁(3)锛屽垯闇�瑕佸噺鍘� 3-1=2 澶┿��
+ // 濡傛灉鏄懆鏃�(7)锛屽垯闇�瑕佸噺鍘� 7-1=6 澶┿��
+ DateTime monday = now.AddDays(-(currentDayOfWeek - 1));
+ // 璁剧疆璧涘鐨勮捣濮嬫椂闂翠负鍛ㄤ竴鐨� 0鐐�0鍒�0绉�
+ seasonStartDate = new DateTime(monday.Year, monday.Month, monday.Day, 0, 0, 0);
+ // 璧涘鐨勭粨鏉熸棩鏈熸槸寮�濮嬫棩鏈燂紙鍛ㄤ竴锛夊姞涓�6澶╋紝鍗冲懆鏃�
+ DateTime sunday = seasonStartDate.AddDays(6);
+ // 璁剧疆璧涘鐨勭粨鏉熸椂闂翠负鍛ㄦ棩鐨� 23鐐�59鍒�59绉�
+ seasonEndDate = new DateTime(sunday.Year, sunday.Month, sunday.Day, 23, 59, 59);
+ }
+
+ /// <summary>
+ /// 鏍规嵁recID鑾峰彇鎸夋椂闂翠粠澶у埌灏忔帓搴忕殑List<ArenaGameRec>
+ /// </summary>
+ /// <param name="recID">璁板綍ID</param>
+ /// <param name="sortedList">杈撳嚭鍙傛暟锛氭寜鏃堕棿浠庡ぇ鍒板皬鎺掑簭鐨凙renaGameRec鍒楄〃</param>
+ /// <returns>濡傛灉recID瀛樺湪涓旀垚鍔熻幏鍙栧垪琛ㄨ繑鍥瀟rue锛屽惁鍒欒繑鍥瀎alse</returns>
+ public bool TryGetSortedArenaGameRecList(uint recID, out List<ArenaGameRec> sortedList)
+ {
+ sortedList = null;
+ if (!gameRecDict.ContainsKey(recID))
+ return false;
+ sortedList = new List<ArenaGameRec>(gameRecDict[recID]);
+ sortedList.Sort((a, b) => b.Time.CompareTo(a.Time)); // 鎸夋椂闂翠粠澶у埌灏忔帓搴�
+ return true;
+ }
+}
+
+
+
+
+public class ArenaMatchInfo
+{
+ public uint PlayerID; //鐩爣鐜╁ID
+ public string PlayerName;
+ public ushort Lv; //绛夌骇
+ public ushort RealmLV; //澧冪晫锛屾満鍣ㄤ汉璇诲鐣岃〃鍙栫瓑绾у搴斿鐣�
+ public uint TitleID;
+ public ulong FightPower; //鎴樺姏
+ public uint Face; //鍩烘湰鑴稿瀷
+ public uint FacePic; //澶村儚妗�
+
+}
+
+public class ArenaGameRec
+{
+ 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 AddScore; //鏈鑷繁鍙樻洿鐨勭Н鍒嗭紝鏈夋璐�
+ public ulong FightPower; //鐩爣鎴樺姏
+ public int TitileId; //鏈潵鎺ュ叆
+
+}
\ No newline at end of file
diff --git a/Main/System/Arena/ArenaManager.cs.meta b/Main/System/Arena/ArenaManager.cs.meta
new file mode 100644
index 0000000..a3aa48b
--- /dev/null
+++ b/Main/System/Arena/ArenaManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7a403f8e8b73bb443acd4352e1c1c00f
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Arena/ArenaPlayerRankCell.cs b/Main/System/Arena/ArenaPlayerRankCell.cs
new file mode 100644
index 0000000..917c711
--- /dev/null
+++ b/Main/System/Arena/ArenaPlayerRankCell.cs
@@ -0,0 +1,70 @@
+using UnityEngine;
+using UnityEngine.UI;
+
+public class ArenaPlayerRankCell : MonoBehaviour
+{
+ [SerializeField] AvatarCell avatarCell;
+ [SerializeField] Text rankText;
+ [SerializeField] Text rankValueText; //鎺掑悕姣旇緝鍐呭
+ [SerializeField] Text nameText;
+ [SerializeField] OfficialTitleCell officialTitleCell;
+ [SerializeField] Button queryPlayerBtn; //鍚庣画娣诲姞鐐瑰嚮鏌ョ湅鐜╁璇︽儏
+
+
+ // rank 涓�0 浠h〃鐜╁鑷繁
+ public void Display(int rankType, int rank, string valueFormat)
+ {
+ RankData rankData = null;
+ if (rank != 0)
+ {
+ rankData = RankModel.Instance.GetRankDataByRank(rankType, rank);
+ }
+ else
+ {
+ rankData = RankModel.Instance.GetMyRank(rankType);
+ if (rankData == null)
+ {
+ //鍙栫帺瀹惰嚜宸辩殑鏁版嵁
+ avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)PlayerDatas.Instance.baseData.PlayerID,
+ PlayerDatas.Instance.baseData.face,
+ PlayerDatas.Instance.baseData.facePic));
+ rankText.text = Language.Get("L1045");
+ rankValueText.text = ArenaManager.Instance.score.ToString();
+ nameText.text = PlayerDatas.Instance.baseData.PlayerName;
+ officialTitleCell.InitUI(PlayerDatas.Instance.baseData.realmLevel, PlayerDatas.Instance.baseData.TitleID);
+ return;
+ }
+ rank = rankData.rank;
+ }
+ if (rankData == null)
+ {
+ officialTitleCell.SetActive(false);
+ avatarCell.SetActive(false);
+ nameText.text = Language.Get("L1124");
+ rankValueText.text = "0";//Language.Get("L1125");
+ }
+ else
+ {
+ officialTitleCell.SetActive(true);
+ officialTitleCell.InitUI((int)rankData.value1, (int)rankData.value2);
+ avatarCell.SetActive(true);
+ avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)rankData.id, (int)rankData.value3, (int)rankData.value4));
+ nameText.text = rankData.name1;
+ rankValueText.text = string.Format(valueFormat, UIHelper.ReplaceLargeNum(rankData.cmpValue));
+ }
+
+ rankText.text = rank.ToString();
+ if (queryPlayerBtn != null)
+ {
+ queryPlayerBtn.AddListener(() =>
+ {
+
+ });
+ }
+ }
+}
+
+
+
+
+
diff --git a/Main/System/Arena/ArenaPlayerRankCell.cs.meta b/Main/System/Arena/ArenaPlayerRankCell.cs.meta
new file mode 100644
index 0000000..5ccd274
--- /dev/null
+++ b/Main/System/Arena/ArenaPlayerRankCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 88b05b28e044ffc4cbe09e000d6a5a08
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Arena/ArenaPlayerTop3Cell.cs b/Main/System/Arena/ArenaPlayerTop3Cell.cs
new file mode 100644
index 0000000..a49221b
--- /dev/null
+++ b/Main/System/Arena/ArenaPlayerTop3Cell.cs
@@ -0,0 +1,35 @@
+using UnityEngine;
+using UnityEngine.UI;
+
+public class ArenaPlayerTop3Cell : MonoBehaviour
+{
+ //[SerializeField] Model 鏄剧ずNPC 姝﹀皢妯″瀷
+ [SerializeField] Text rankValueText; //鎺掑悕姣旇緝鍐呭
+ [SerializeField] Text nameText;
+ [SerializeField] OfficialTitleCell officialTitleCell;
+ [SerializeField] Button queryPlayerBtn; //鍚庣画娣诲姞鐐瑰嚮鏌ョ湅鐜╁璇︽儏
+ [SerializeField] UIHeroController model;
+
+ public void Display(int rankType, int rank, string valueFormat = "{0}")
+ {
+ var rankData = RankModel.Instance.GetRankDataByRank(rankType, rank);
+ if (rankData == null)
+ {
+ rankValueText.text = "0";//Language.Get("L1125");
+ nameText.text = Language.Get("L1124");
+ officialTitleCell.SetActive(false);
+ return;
+ }
+ officialTitleCell.SetActive(true);
+ rankValueText.text = string.Format(valueFormat, UIHelper.ReplaceLargeNum(rankData.cmpValue));
+ nameText.text = rankData.name1;
+ officialTitleCell.InitUI((int)rankData.value1, (int)rankData.value2);
+ model.Create((int)rankData.value5, 1);
+ }
+
+
+}
+
+
+
+
diff --git a/Main/System/Arena/ArenaPlayerTop3Cell.cs.meta b/Main/System/Arena/ArenaPlayerTop3Cell.cs.meta
new file mode 100644
index 0000000..b767de8
--- /dev/null
+++ b/Main/System/Arena/ArenaPlayerTop3Cell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 478726dd88ca04047a63760c746634e5
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Arena/ArenaRecordCell.cs b/Main/System/Arena/ArenaRecordCell.cs
new file mode 100644
index 0000000..9e4470f
--- /dev/null
+++ b/Main/System/Arena/ArenaRecordCell.cs
@@ -0,0 +1,98 @@
+using System.Collections.Generic;
+using UnityEngine;
+using System;
+
+public class ArenaRecordCell : MonoBehaviour
+{
+ [SerializeField] AvatarCell avatarCell;
+ [SerializeField] TextEx txtName;
+ [SerializeField] TextEx txtDate;
+ [SerializeField] TextEx txtFightPoint;
+ [SerializeField] TextEx txtState;
+ [SerializeField] TextEx txtAdd;
+ [SerializeField] TextEx txtTimeInvalid;
+ [SerializeField] TextEx txtNeedCount;
+ [SerializeField] ImageEx imgMoneyIcon;
+ [SerializeField] ImageEx imgType;
+ [SerializeField] Transform transChallenge;
+ [SerializeField] OfficialTitleCell officialTitleCell;
+ [SerializeField] ButtonEx btnChallenge;
+ ArenaGameRec arenaGameRec;
+ void Start()
+ {
+ btnChallenge.SetListener(() =>
+ {
+ if (arenaGameRec == null)
+ return;
+ ArenaManager.Instance.SendTurnFight(arenaGameRec.Value3);
+ ArenaManager.Instance.atkPlayerId = arenaGameRec.Value3;
+ });
+ }
+
+ public void Display(int index)
+ {
+ uint playerID = PlayerDatas.Instance.baseData.PlayerID;
+ ArenaManager.Instance.TryGetSortedArenaGameRecList(playerID, out List<ArenaGameRec> sortedList);
+ if (sortedList.IsNullOrEmpty() || index < 0 || index >= sortedList.Count)
+ return;
+ arenaGameRec = sortedList[index];
+ imgType.SetSprite(arenaGameRec.Value2 == 1 ? "ArenaRecordTypeAtk" : "ArenaRecordTypeDef");
+ txtDate.text = FormatTime(arenaGameRec.Time);
+ // true 宸插け鏁� false 鏈け鏁�
+ bool isTimeInvalid = ArenaManager.Instance.IsTimeInvalid(arenaGameRec.Time);
+ // 鍙戣捣鏀诲嚮,鎵撹耽鏈夌Н鍒�,鎵撹緭娌℃湁
+ //琚敾鍑荤殑,鎵撹耽娌℃湁绉垎,鎵撹緭鎵gН鍒�
+ // 0 鎵撳埆浜鸿儨鍒� 1 鎵撳埆浜鸿緭 2 琚墦锛屾垜璧� 3 琚墦锛屾垜杈�
+ int state = GetState(arenaGameRec.Value2, arenaGameRec.Value4);
+ transChallenge.SetActive(!isTimeInvalid && state == 3);
+ txtTimeInvalid.SetActive(isTimeInvalid);
+ if (state == 0 || state == 2)
+ {
+ txtState.text = UIHelper.AppendColor(TextColType.Green, Language.Get("Arena09"));
+ txtAdd.text = UIHelper.AppendColor(TextColType.Green, Language.Get("Arena17", arenaGameRec.AddScore));
+ }
+ else
+ {
+ txtState.text = UIHelper.AppendColor(TextColType.Red, Language.Get("Arena10"));
+ if (arenaGameRec.AddScore == 0)
+ {
+ txtAdd.text = UIHelper.AppendColor(TextColType.Red, Language.Get("Arena21", arenaGameRec.AddScore));
+ }
+ else
+ {
+ txtAdd.text = UIHelper.AppendColor(TextColType.Red, Language.Get("Arena18", arenaGameRec.AddScore));
+ }
+
+ }
+ avatarCell.InitUI(AvatarHelper.GetAvatarModel((int)arenaGameRec.Value3, (int)arenaGameRec.Value5, (int)arenaGameRec.Value6));
+ txtName.text = arenaGameRec.Name;
+ txtFightPoint.text = UIHelper.ReplaceLargeArtNum(arenaGameRec.FightPower);
+ officialTitleCell.InitUI(PlayerDatas.Instance.baseData.realmLevel, PlayerDatas.Instance.baseData.TitleID);
+ imgMoneyIcon.SetIconWithMoneyType(ArenaManager.Instance.ChallengeMoneyType);
+ txtNeedCount.text = ArenaManager.Instance.NeedChallengeMoneyCnt.ToString();
+ }
+
+ // 0 鎵撳埆浜鸿儨鍒� 1 鎵撳埆浜鸿緭 2 琚墦锛屾垜璧� 3 琚墦锛屾垜杈�
+ public int GetState(uint isAtk, uint isWin)
+ {
+ if (isAtk == 1) // 鍙戣捣鏀诲嚮
+ {
+ return isWin == 1 ? 0 : 1;
+ }
+ else // 琚敾鍑�
+ {
+ return isWin == 1 ? 2 : 3;
+ }
+ }
+
+ /// <summary>
+ /// 鏍煎紡鍖栨椂闂存埑涓� "鏈�-鏃� 鏃�:鍒�:绉�" 鏍煎紡
+ /// </summary>
+ /// <param name="timeStamp">鏃堕棿鎴�</param>
+ /// <returns>鏍煎紡鍖栧悗鐨勬椂闂村瓧绗︿覆</returns>
+ private string FormatTime(uint timeStamp)
+ {
+ DateTime dateTime = TimeUtility.GetTime(timeStamp);
+ return dateTime.ToString("MM-dd HH:mm:ss");
+ }
+}
diff --git a/Main/System/Arena/ArenaRecordCell.cs.meta b/Main/System/Arena/ArenaRecordCell.cs.meta
new file mode 100644
index 0000000..547c228
--- /dev/null
+++ b/Main/System/Arena/ArenaRecordCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e830b4133d825fc4086c135f1446b842
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Arena/ArenaRecordWin.cs b/Main/System/Arena/ArenaRecordWin.cs
new file mode 100644
index 0000000..5222834
--- /dev/null
+++ b/Main/System/Arena/ArenaRecordWin.cs
@@ -0,0 +1,87 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ArenaRecordWin : UIBase
+{
+ [SerializeField] ArenaChallengeVoucher voucher;
+ [SerializeField] TextEx txtFightPoint;
+ [SerializeField] ScrollerController scrollerController;
+ [SerializeField] Transform transNoRecord;
+ protected override void InitComponent()
+ {
+ base.InitComponent();
+ }
+
+ protected override void OnPreOpen()
+ {
+ base.OnPreOpen();
+ scrollerController.OnRefreshCell += OnRefreshCell;
+ ArenaManager.Instance.OnArenaMatchListEvent += OnArenaMatchListEvent;
+ PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefresh;
+ ArenaManager.Instance.OnUpdateGameRecInfo += OnUpdateGameRecInfo;
+ GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
+ transNoRecord.SetActive(false);
+ Display();
+ }
+
+ protected override void OnPreClose()
+ {
+ base.OnPreClose();
+ scrollerController.OnRefreshCell -= OnRefreshCell;
+ ArenaManager.Instance.OnArenaMatchListEvent -= OnArenaMatchListEvent;
+ PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefresh;
+ ArenaManager.Instance.OnUpdateGameRecInfo -= OnUpdateGameRecInfo;
+ GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
+ }
+
+ private void OnSecondEvent()
+ {
+ scrollerController.m_Scorller.RefreshActiveCellViews();
+ }
+
+ private void OnUpdateGameRecInfo()
+ {
+ Display();
+ }
+
+ private void PlayerDataRefresh(PlayerDataType type)
+ {
+ if (type != PlayerDataType.ChallengeVoucher)
+ return;
+ Display();
+ }
+
+ private void OnArenaMatchListEvent()
+ {
+ Display();
+ }
+
+ void OnRefreshCell(ScrollerDataType type, CellView cell)
+ {
+ var _cell = cell.GetComponent<ArenaRecordCell>();
+ _cell?.Display(cell.index);
+ }
+
+ private void CreateScroller()
+ {
+ scrollerController.Refresh();
+ uint playerID = PlayerDatas.Instance.baseData.PlayerID;
+ ArenaManager.Instance.TryGetSortedArenaGameRecList(playerID, out List<ArenaGameRec> sortedList);
+ if (!sortedList.IsNullOrEmpty())
+ {
+ transNoRecord.SetActive(false);
+ for (int i = 0; i < sortedList.Count; i++)
+ {
+ scrollerController.AddCell(ScrollerDataType.Header, i);
+ }
+ }
+ scrollerController.Restart();
+ }
+
+ void Display()
+ {
+ CreateScroller();
+ voucher.Display();
+ txtFightPoint.text = UIHelper.ReplaceLargeArtNum(PlayerDatas.Instance.baseData.FightPower);
+ }
+}
diff --git a/Main/System/Arena/ArenaRecordWin.cs.meta b/Main/System/Arena/ArenaRecordWin.cs.meta
new file mode 100644
index 0000000..59da7e5
--- /dev/null
+++ b/Main/System/Arena/ArenaRecordWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 91107595693c34d46aeb83c7fac01f39
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Arena/ArenaWin.cs b/Main/System/Arena/ArenaWin.cs
new file mode 100644
index 0000000..33dd592
--- /dev/null
+++ b/Main/System/Arena/ArenaWin.cs
@@ -0,0 +1,141 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ArenaWin : UIBase
+{
+ [SerializeField] ButtonEx btnClose;
+ [SerializeField] ButtonEx btnRecord;
+ [SerializeField] ButtonEx btnAward;
+ [SerializeField] ButtonEx btnChallage;
+ [SerializeField] RedpointBehaviour rpChallage;
+ [SerializeField] ButtonEx btnDeployTroops;
+ [SerializeField] List<ArenaPlayerTop3Cell> playerTop3Cells;
+ [SerializeField] ScrollerController scrollerController;
+ [SerializeField] ArenaPlayerRankCell myRankCell;
+ [SerializeField] ArenaChallengeVoucher voucher;
+ [HideInInspector] public int groupValue1 = 0; //涓�鑸敤浜庤法鏈�
+ [HideInInspector] public int groupValue2 = 0; //涓�鑸敤浜庤法鏈�
+ [HideInInspector] public string valueFormat = "{0}";
+
+ protected override void InitComponent()
+ {
+ base.InitComponent();
+ btnClose.SetListener(() => UIManager.Instance.CloseWindow<ArenaWin>());
+ btnAward.SetListener(() => UIManager.Instance.OpenWindow<ArenaAwardWin>());
+ btnRecord.SetListener(() =>
+ {
+ ArenaManager.Instance.SendViewGameRecPack();
+ UIManager.Instance.OpenWindow<ArenaRecordWin>();
+ });
+ btnChallage.SetListener(() =>
+ {
+ ArenaManager.Instance.SendArenaMatch();
+ UIManager.Instance.OpenWindow<ArenaChallengeWin>();
+ });
+ btnDeployTroops.SetListener(() =>
+ {
+ HeroUIManager.Instance.selectTeamType = TeamType.ArenaDefense;
+ UIManager.Instance.OpenWindow<HeroPosWin>();
+ });
+ }
+
+ protected override void OnPreOpen()
+ {
+ base.OnPreOpen();
+ RankModel.Instance.ResetQueryParam();
+ RankModel.Instance.QueryRankByPage(ArenaManager.Instance.rankType, watchID: (int)PlayerDatas.Instance.baseData.PlayerID);
+ rpChallage.redpointId = ArenaManager.Instance.GetRedPonitId(1);
+ }
+
+ protected override void NextFrameAfterOpen()
+ {
+ RankModel.Instance.onRankRefresh += OnRankRefresh;
+ scrollerController.OnRefreshCell += OnRefreshCell;
+ ArenaManager.Instance.OnArenaMatchListEvent += OnArenaMatchListEvent;
+ ArenaManager.Instance.OnUpdateArenaPlayerInfo += OnUpdateArenaPlayerInfo;
+ ArenaManager.Instance.OnUpdateGameRecInfo += OnUpdateGameRecInfo;
+ PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefresh;
+ Display();
+ }
+
+ protected override void OnPreClose()
+ {
+ base.OnPreClose();
+ RankModel.Instance.onRankRefresh -= OnRankRefresh;
+ scrollerController.OnRefreshCell -= OnRefreshCell;
+ ArenaManager.Instance.OnArenaMatchListEvent -= OnArenaMatchListEvent;
+ ArenaManager.Instance.OnUpdateArenaPlayerInfo -= OnUpdateArenaPlayerInfo;
+ ArenaManager.Instance.OnUpdateGameRecInfo -= OnUpdateGameRecInfo;
+ PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefresh;
+ }
+
+ private void PlayerDataRefresh(PlayerDataType type)
+ {
+ if (type != PlayerDataType.ChallengeVoucher)
+ return;
+ Display();
+ }
+
+ void OnRefreshCell(ScrollerDataType type, CellView cell)
+ {
+ var _cell = cell.GetComponent<ArenaPlayerRankCell>();
+ _cell.Display(ArenaManager.Instance.rankType, cell.index + 1, valueFormat);
+ RankModel.Instance.ListenRankPage(ArenaManager.Instance.rankType, cell.index, groupValue1, groupValue2);
+ }
+
+ private void OnUpdateArenaPlayerInfo()
+ {
+ Display();
+ }
+
+ private void OnArenaMatchListEvent()
+ {
+ Display();
+ }
+
+ private void OnUpdateGameRecInfo()
+ {
+ Display();
+ }
+
+ private void Display()
+ {
+ voucher.Display();
+ CreateScroller();
+ DisplayMyRank();
+ DisplayTop3();
+ }
+
+ void CreateScroller()
+ {
+ scrollerController.Refresh();
+ var cnt = RankModel.Instance.GetRankShowMaxCnt(ArenaManager.Instance.rankType);
+ for (int i = 3; i < cnt; i++)
+ {
+ scrollerController.AddCell(ScrollerDataType.Header, i);
+ }
+ scrollerController.Restart();
+ }
+
+ void DisplayMyRank()
+ {
+ myRankCell.Display(ArenaManager.Instance.rankType, 0, ArenaManager.Instance.score.ToString());
+ }
+
+ void DisplayTop3()
+ {
+ for (int i = 0; i < playerTop3Cells.Count; i++)
+ {
+ playerTop3Cells[i].Display(ArenaManager.Instance.rankType, i + 1);
+ }
+ }
+
+ void OnRankRefresh(int type)
+ {
+ if (type != ArenaManager.Instance.rankType)
+ return;
+ DisplayTop3();
+ scrollerController.m_Scorller.RefreshActiveCellViews();
+ DisplayMyRank();
+ }
+}
diff --git a/Main/System/Arena/ArenaWin.cs.meta b/Main/System/Arena/ArenaWin.cs.meta
new file mode 100644
index 0000000..02c46a4
--- /dev/null
+++ b/Main/System/Arena/ArenaWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c2491f5ebae5bc041a14d081fd07e801
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Arena/BuyItemWin.cs b/Main/System/Arena/BuyItemWin.cs
new file mode 100644
index 0000000..65dcb71
--- /dev/null
+++ b/Main/System/Arena/BuyItemWin.cs
@@ -0,0 +1,119 @@
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class BuyItemWin : UIBase
+{
+
+ [SerializeField] ItemCell itemCell;
+ [SerializeField] Text nameText;
+ [SerializeField] Text descText;
+ //[SerializeField] ScrollerController scroller;
+ [SerializeField] SliderPanel sliderPanel;
+ [SerializeField] Button openButton;
+
+ //[SerializeField] CellView _InitCell;
+
+ string guid;
+ int itemID;
+ int itemCount;
+ int useCnt;
+ List<Item> items;
+ protected override void InitComponent()
+ {
+ openButton.AddListener(() =>
+ {
+ if (useCnt == 0)
+ {
+ CloseWindow();
+ return;
+ }
+ if (ItemLogicUtility.Instance.UseItem(guid, useCnt))
+ {
+ CloseWindow();
+ }
+ });
+ }
+
+ protected override void Start()
+ {
+ //_InitCell.cellIdentifier = _InitCell.cellIdentifier + this.GetInstanceID().ToString();
+ }
+
+
+ protected override void OnPreOpen()
+ {
+ itemID = ItemTipUtility.mainTipData.baseInfo.itemId;
+ itemCount = ItemTipUtility.mainTipData.baseInfo.count;
+ guid = ItemTipUtility.mainTipData.guid;
+
+ itemCell.Init(new ItemCellModel(itemID, false, itemCount));
+ var itemConfig = ItemConfig.Get(itemID);
+ nameText.text = itemConfig.ItemName;
+ descText.text = itemConfig.Description;
+
+ if (string.IsNullOrEmpty(guid))
+ {
+ openButton.SetActive(false);
+ sliderPanel.SetActive(false);
+ }
+ else
+ {
+ openButton.SetActive(true);
+ sliderPanel.SetActive(true);
+ }
+
+ sliderPanel.Init((value) => { useCnt = value; }, itemCount);
+
+
+ // scroller.OnRefreshCell += OnRefreshCell;
+ items = BoxGetItemModel.Instance.GetBoxItems(itemID);
+ CreateScroller();
+ }
+
+ protected override void OnPreClose()
+ {
+ //scroller.OnRefreshCell -= OnRefreshCell;
+ }
+
+ void CreateScroller()
+ {
+ // scroller.Refresh();
+
+ for (int i = 0; i < items.Count; i++)
+ {
+ if (i % 4 == 0)
+ {
+ List<Item> tmpIDs = new List<Item>();
+ for (int j = 0; j < 4; j++)
+ {
+ int index = i + j;
+ if (index >= items.Count)
+ break;
+ tmpIDs.Add(items[index]);
+ }
+ // scroller.AddCell(ScrollerDataType.Header, i);
+ }
+ }
+ // scroller.Restart();
+ }
+
+
+ void OnRefreshCell(ScrollerDataType type, CellView cell)
+ {
+ var _cell = cell as BoxItemLineCell;
+
+ List<Item> tmpIDs = new List<Item>();
+ for (int j = 0; j < 4; j++)
+ {
+ int index = cell.index + j;
+ if (index >= items.Count)
+ break;
+ tmpIDs.Add(items[index]);
+ }
+
+ _cell.Display(tmpIDs);
+ }
+
+
+}
diff --git a/Main/System/Arena/BuyItemWin.cs.meta b/Main/System/Arena/BuyItemWin.cs.meta
new file mode 100644
index 0000000..a68efbc
--- /dev/null
+++ b/Main/System/Arena/BuyItemWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5627605d78de2a748b34bdb33137ab7c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Arena/HeroCountryComponent.cs b/Main/System/Arena/HeroCountryComponent.cs
new file mode 100644
index 0000000..0f01ce0
--- /dev/null
+++ b/Main/System/Arena/HeroCountryComponent.cs
@@ -0,0 +1,131 @@
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class HeroCountryComponent : MonoBehaviour
+{
+ [SerializeField] Image countryOnImg; //涓婇樀闃靛瀷婵�娲诲浗瀹�
+ [SerializeField] UIEffectPlayer countryEffect;
+ [SerializeField] List<Image> OnCountImgs; //涓婇樀鏁伴噺婵�娲�
+
+ /// <summary>
+ /// 涓婇樀闃熶紞涓悇涓浗瀹剁殑姝﹀皢鏁伴噺
+ /// </summary>
+ public Dictionary<HeroCountry, int> GetCountryHeroCountByTeamType(List<TeamHero> teamHeroes)
+ {
+ Dictionary<HeroCountry, int> heroCountryCount = new Dictionary<HeroCountry, int>();
+ if (teamHeroes == null)
+ {
+ return heroCountryCount;
+ }
+ for (int i = 0; i < teamHeroes.Count; i++)
+ {
+ if (teamHeroes[i] == null)
+ continue;
+ var country = teamHeroes[i].Country;
+
+ if (!heroCountryCount.ContainsKey(country))
+ {
+ heroCountryCount.Add(country, 1);
+ }
+ else
+ {
+ heroCountryCount[country] += 1;
+ }
+
+ }
+
+
+ return heroCountryCount;
+ }
+
+ /// <summary>
+ /// 鑾峰緱涓婇樀涓灏嗘暟閲忔渶澶х殑鍥藉鍜屾暟閲�
+ /// </summary>
+ public Int2 GetMaxCountHeroCountry(List<TeamHero> teamType)
+ {
+ var countryCountDict = GetCountryHeroCountByTeamType(teamType);
+ //鎵惧埌鏈�澶х殑鍥藉鍜屾暟閲�
+ HeroCountry country = HeroCountry.None;
+ int maxValue = 0;
+ foreach (var data in countryCountDict)
+ {
+ if (data.Value > maxValue)
+ {
+ country = data.Key;
+ maxValue = data.Value;
+ }
+ }
+ return new Int2((int)country, maxValue);
+ }
+
+ //涓婇樀姝﹀皢鍥藉鍏夌幆婵�娲�
+ public void RefreshOnTeamCountry(List<TeamHero> teamType, bool playEffect = false)
+ {
+ Int2 result = GetMaxCountHeroCountry(teamType);
+
+ var config = HeroLineupHaloConfig.GetConfig(result.x, result.y);
+ if (config == null)
+ {
+ countryOnImg.SetSprite("heroTeamCountry0");
+ for (int i = 0; i < OnCountImgs.Count; i++)
+ {
+ OnCountImgs[i].SetActive(false);
+ }
+ }
+ else
+ {
+ countryOnImg.SetSprite("heroTeamCountry" + result.x);
+ for (int i = 0; i < OnCountImgs.Count; i++)
+ {
+ if (i < result.y)
+ {
+ OnCountImgs[i].SetActive(true);
+ OnCountImgs[i].SetSprite("heroTeamCountryPoint" + result.x);
+ }
+ else
+ {
+ OnCountImgs[i].SetActive(false);
+ }
+ }
+ if (playEffect)
+ countryEffect.Play();
+ }
+
+ }
+
+ //涓婇樀姝﹀皢鍥藉鍏夌幆婵�娲�
+ public void RefreshOnTeamCountry(TeamType selectTeamType, bool playEffect = false)
+ {
+ Int2 result = HeroUIManager.Instance.GetMaxCountHeroCountry(selectTeamType, true);
+
+ var config = HeroLineupHaloConfig.GetConfig(result.x, result.y);
+ if (config == null)
+ {
+ countryOnImg.SetSprite("heroTeamCountry0");
+ for (int i = 0; i < OnCountImgs.Count; i++)
+ {
+ OnCountImgs[i].SetActive(false);
+ }
+ }
+ else
+ {
+ countryOnImg.SetSprite("heroTeamCountry" + result.x);
+ for (int i = 0; i < OnCountImgs.Count; i++)
+ {
+ if (i < result.y)
+ {
+ OnCountImgs[i].SetActive(true);
+ OnCountImgs[i].SetSprite("heroTeamCountryPoint" + result.x);
+ }
+ else
+ {
+ OnCountImgs[i].SetActive(false);
+ }
+ }
+ if (playEffect)
+ countryEffect.Play();
+ }
+
+ }
+}
diff --git a/Main/System/Arena/HeroCountryComponent.cs.meta b/Main/System/Arena/HeroCountryComponent.cs.meta
new file mode 100644
index 0000000..8df1af2
--- /dev/null
+++ b/Main/System/Arena/HeroCountryComponent.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3ac0bc04463e5ef45a04c61ca9698fe9
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Battle/ArenaBattleWin.cs b/Main/System/Battle/ArenaBattleWin.cs
new file mode 100644
index 0000000..4944e71
--- /dev/null
+++ b/Main/System/Battle/ArenaBattleWin.cs
@@ -0,0 +1,285 @@
+锘縰sing System.Collections.Generic;
+using LitJson;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class ArenaBattleWin : UIBase
+{
+ // 缁勪欢寮曠敤
+ [SerializeField] Transform mountPoint;
+ [SerializeField] Button btnSpeed;
+ [SerializeField] Text textSpeed;
+ [SerializeField] Button btnPass;
+ [SerializeField] Button btnPause;
+ [SerializeField] RendererAdjuster buttonsAdjuster;
+ private BattleRootNode battleRootNode = null;
+ private BattleField battleField;
+
+ [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] TextEx txtWaveInfo;
+ // 鐢熷懡鍛ㄦ湡
+ protected override void InitComponent()
+ {
+ base.InitComponent();
+ // 鍒濆鍖栫粍浠跺紩鐢� 缁戝畾鎸夐挳绛塙I缁勪欢浜嬩欢
+ btnSpeed.AddListener(ChangeSpeed);
+ btnPass.AddListener(OnClickPass);
+ btnPause.AddListener(OnClickPause);
+ }
+
+ private void OnClickPause()
+ {
+ if (null == battleField)
+ return;
+ battleField.IsPause = !battleField.IsPause;
+ }
+
+ private void OnClickPass()
+ {
+ if (null == battleField)
+ return;
+ battleField.ForceFinish();
+ }
+
+ private void ChangeSpeed()
+ {
+ if (null == battleField)
+ return;
+ BattleManager.Instance.speedIndex = (BattleManager.Instance.speedIndex + 1) % BattleManager.Instance.speedGear.Length;
+ battleField.SetSpeedRatio(BattleManager.Instance.speedGear[BattleManager.Instance.speedIndex]);
+ textSpeed.text = (BattleManager.Instance.speedIndex + 1).ToString();
+ }
+
+ protected override void OnPreOpen()
+ {
+ base.OnPreOpen();
+ // SetBattleField(BattleManager.Instance.storyBattleField);
+ BattleManager.Instance.onBattleFieldCreate += OnCreateBattleField;
+ EventBroadcast.Instance.AddListener<BattleDmgInfo>(EventName.BATTLE_DAMAGE_TAKEN, OnDamageTaken);
+ EventBroadcast.Instance.AddListener<string, JsonData>(EventName.BATTLE_END, OnBattleEnd);
+ //UIManager.Instance.CloseWindow<MainWin>();
+ }
+
+ protected override void OnPreClose()
+ {
+ base.OnPreClose();
+ UIManager.Instance.CloseWindow<BattleHUDWin>();
+ BattleManager.Instance.onBattleFieldCreate -= OnCreateBattleField;
+ EventBroadcast.Instance.RemoveListener<BattleDmgInfo>(EventName.BATTLE_DAMAGE_TAKEN, OnDamageTaken);
+ EventBroadcast.Instance.RemoveListener<string, JsonData>(EventName.BATTLE_END, OnBattleEnd);
+ //UIManager.Instance.OpenWindow<MainWin>(0);
+ }
+ private void OnBattleEnd(string guid, JsonData endData)
+ {
+ if (battleField != null && guid == battleField.guid)
+ {
+ DisplayHpInfo();
+ }
+ }
+
+ private void OnDamageTaken(BattleDmgInfo damageInfo)
+ {
+ if (battleField == null)
+ return;
+ if (damageInfo.battleFieldGuid == battleField.guid)
+ {
+ DisplayHpInfo();
+ }
+ }
+
+ private void OnCreateBattleField(string arg1, BattleField field)
+ {
+ if (field.GetType() == battleField.GetType())
+ {
+ SetBattleField(field);
+ }
+ }
+
+ protected override void OnOpen()
+ {
+ base.OnOpen();
+ }
+
+ protected override void OnClose()
+ {
+ base.OnClose();
+ if (battleRootNode != null)
+ {
+ battleRootNode.transform.SetParent(Launch.Instance.transform);
+ battleRootNode.transform.localPosition = new Vector3(-10000, -10000, 0);
+ }
+ battleField = null;
+ }
+
+ protected override void NextFrameAfterOpen()
+ {
+ base.NextFrameAfterOpen();
+ }
+
+ protected override void CompleteClose()
+ {
+ base.CompleteClose();
+ }
+
+ public void SetBattleField(BattleField _battleField)
+ {
+ battleField = _battleField;
+ if (battleRootNode != null)
+ {
+ battleRootNode.transform.localPosition = Vector3.zero;
+ battleRootNode.transform.SetParent(Launch.Instance.transform);
+ }
+
+ battleRootNode = battleField.battleRootNode;
+ battleRootNode.transform.SetParent(mountPoint);
+ battleRootNode.transform.localPosition = Vector3.zero;
+ battleRootNode.transform.localScale = Vector3.one;
+ BattleHUDWin ui = UIManager.Instance.GetUI<BattleHUDWin>();
+
+ if (null == ui)
+ {
+ ui = UIManager.Instance.OpenWindow<BattleHUDWin>();
+ }
+ ui.SetBattleField(battleField);
+ battleField.UpdateCanvas(canvas);
+ buttonsAdjuster.SetSortingOrder(BattleConst.ActiveHeroActionSortingOrder);
+ textSpeed.text = (BattleManager.Instance.speedIndex + 1).ToString();
+ 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.ReplaceLargeArtNum(myNowHp), UIHelper.ReplaceLargeArtNum(myMaxHp));
+ txtEnemyHp.text = Language.Get("BoneField09", UIHelper.ReplaceLargeArtNum(enemyNowHp), UIHelper.ReplaceLargeArtNum(enemyMaxHp));
+ imgMyHp.fillAmount = Mathf.Clamp01((myMaxHp > 0) ? (float)myNowHp / myMaxHp : 0f);
+ imgEnemyHp.fillAmount = Mathf.Clamp01((enemyMaxHp > 0) ? (float)enemyNowHp / enemyMaxHp : 0f);
+
+ }
+
+ private void DisplayPlayerInfo()
+ {
+ if (battleField == null)
+ return;
+ if (!ArenaManager.Instance.TryGetPlayerInfo(ArenaManager.Instance.atkPlayerId, out ArenaMatchInfo 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(info.FightPower);
+ enemyAvatarCell.InitUI(AvatarHelper.GetAvatarModel((int)info.PlayerID, (int)info.Face, (int)info.FacePic));
+
+ var team = GetTeamHeroList(enemyTeam);
+ enemyCountry.RefreshOnTeamCountry(team, true);
+
+ txtMyLV.text = Language.Get("Arena22", PlayerDatas.Instance.baseData.LV);
+ txtMyName.text = PlayerDatas.Instance.baseData.PlayerName;
+ txtMyFightPonit.text = UIHelper.ReplaceLargeArtNum(PlayerDatas.Instance.baseData.FightPower);
+ myAvatarCell.InitUI(AvatarHelper.GetAvatarModel((int)PlayerDatas.Instance.baseData.PlayerID, PlayerDatas.Instance.baseData.face, PlayerDatas.Instance.baseData.facePic));
+ myCountry.RefreshOnTeamCountry(TeamType.Arena);
+
+ for (int i = 0; i < myHeroHeads.Count; i++)
+ {
+ if (i < myTeam.Count)
+ {
+ myHeroHeads[i].SetActive(true);
+ var teamHero = myTeam[i].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)
+ {
+ enemyHeroHeads[i].SetActive(true);
+ var teamHero = enemyTeam[teamIndex].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].teamHero.maxHp;
+ }
+ }
+ 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].teamHero.curHp;
+ }
+ }
+ return sun;
+ }
+
+ List<TeamHero> GetTeamHeroList(List<BattleObject> teams)
+ {
+ List<TeamHero> teamHeroes = new List<TeamHero>();
+ if (teams.IsNullOrEmpty())
+ return teamHeroes;
+ foreach (var item in teams)
+ {
+ teamHeroes.Add(item.teamHero);
+ }
+ return teamHeroes;
+
+ }
+}
diff --git a/Main/System/Battle/ArenaBattleWin.cs.meta b/Main/System/Battle/ArenaBattleWin.cs.meta
new file mode 100644
index 0000000..99f51d1
--- /dev/null
+++ b/Main/System/Battle/ArenaBattleWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d2609ee6f8b8f4b4896c3963c15924d2
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Battle/BattleConst.cs b/Main/System/Battle/BattleConst.cs
index 713473a..397a394 100644
--- a/Main/System/Battle/BattleConst.cs
+++ b/Main/System/Battle/BattleConst.cs
@@ -8,6 +8,7 @@
{
typeof(BattleWin),
typeof(StoryBossBattleWin),
+ typeof(ArenaBattleWin),
};
public const int BattleStartEffectID = 1001; // Example effect ID for battle start
diff --git a/Main/System/Battle/BattleField/ArenaBattleField.cs b/Main/System/Battle/BattleField/ArenaBattleField.cs
new file mode 100644
index 0000000..f0da66f
--- /dev/null
+++ b/Main/System/Battle/BattleField/ArenaBattleField.cs
@@ -0,0 +1,148 @@
+using System;
+using LitJson;
+using UnityEngine;
+using System.Collections.Generic;
+
+
+public class ArenaBattleField : BattleField
+{
+ protected int chapter;// 绔犺妭
+ protected int wave;// 娉㈡暟
+ protected int level;// 鍏冲崱
+ protected JsonData extendData;
+
+ protected MainChapterConfig chapterConfig;
+
+ protected MainLevelConfig levelConfig;
+
+ public ArenaBattleField(string _guid) : base(_guid)
+ {
+
+ }
+
+ public override void Init(int MapID, int FuncLineID, JsonData _extendData,
+ List<TeamBase> _redTeamList, List<TeamBase> _blueTeamList)
+ {
+ base.Init(MapID, FuncLineID, extendData, _redTeamList, _blueTeamList);
+
+ chapter = FuncLineID / 10000;
+ wave = MapID == 1 ? FuncLineID % 100 : 1;//绗嚑娉㈡��
+ level = (FuncLineID % 10000) / 100;
+
+ extendData = _extendData;
+ chapterConfig = MainChapterConfig.Get(chapter);
+ levelConfig = MainLevelConfig.Get(level);
+
+ SetBattleMode(BattleMode.Record);
+ }
+
+ public override void Release()
+ {
+ base.Release();
+ }
+
+
+ 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()
+ {
+ UIManager.Instance.CloseWindow<ArenaBattleWin>();
+ AutoFightModel.Instance.isPause = false;
+ Destroy();
+ UIManager.Instance.OpenWindow<ArenaWin>();
+ }
+
+
+
+ public override void HaveRest()
+ {
+ // 涓荤嚎BOSS鎴樻枟娌℃湁浼戞伅
+ }
+
+
+ // public override void OnBattleEnd(JsonData turnFightStateData)
+ // {
+ // base.OnBattleEnd(turnFightStateData);
+ // // HaveRest();
+ // }
+
+ 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)
+ {
+ ArenaBattleWin fsBattleWin = UIManager.Instance.GetUI<ArenaBattleWin>();// as FullScreenBattleWin;
+ if (null == fsBattleWin)
+ {
+ fsBattleWin = UIManager.Instance.OpenWindow<ArenaBattleWin>();
+ }
+ fsBattleWin.SetBattleField(this);
+
+ if (UIManager.Instance.IsOpened<ArenaRecordWin>())
+ {
+ UIManager.Instance.CloseWindow<ArenaRecordWin>();
+ }
+
+ if (UIManager.Instance.IsOpened<ArenaChallengeWin>())
+ {
+ UIManager.Instance.CloseWindow<ArenaChallengeWin>();
+ }
+
+ if (UIManager.Instance.IsOpened<ArenaWin>())
+ {
+ UIManager.Instance.CloseWindow<ArenaWin>();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Main/System/Battle/BattleField/ArenaBattleField.cs.meta b/Main/System/Battle/BattleField/ArenaBattleField.cs.meta
new file mode 100644
index 0000000..ddfa0bf
--- /dev/null
+++ b/Main/System/Battle/BattleField/ArenaBattleField.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c1f4142e50b5caf4cbdc39364d3c8f85
+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 8769276..35a7ad8 100644
--- a/Main/System/Battle/BattleFieldFactory.cs
+++ b/Main/System/Battle/BattleFieldFactory.cs
@@ -20,6 +20,9 @@
case 2:
battleField = new StoryBossBattleField(guid);
break;
+ case 3:
+ battleField = new ArenaBattleField(guid);
+ break;
case 30010:
battleField = new BoneBattleField(guid);
break;
diff --git a/Main/System/BillboardRank/PlayerTop3Cell.cs b/Main/System/BillboardRank/PlayerTop3Cell.cs
index 2d7b5e4..d467f04 100644
--- a/Main/System/BillboardRank/PlayerTop3Cell.cs
+++ b/Main/System/BillboardRank/PlayerTop3Cell.cs
@@ -29,7 +29,7 @@
rankValueText.text = string.Format(valueFormat, UIHelper.ReplaceLargeNum(rankData.cmpValue2 + rankData.cmpValue * Constants.ExpPointValue));
nameText.text = rankData.name1;
officialTitleCell.InitUI((int)rankData.value1, (int)rankData.value2);
- model.Create(5100030, 1); //娴嬭瘯
+ model.Create((int)rankData.value5, 1);
}
diff --git a/Main/System/ChallengeTab/ChallengeTabWin.cs b/Main/System/ChallengeTab/ChallengeTabWin.cs
index 6f455e4..60f67da 100644
--- a/Main/System/ChallengeTab/ChallengeTabWin.cs
+++ b/Main/System/ChallengeTab/ChallengeTabWin.cs
@@ -4,6 +4,7 @@
public class ChallengeTabWin : UIBase
{
[SerializeField] ChallengeTabButton btnBoneField;
+ [SerializeField] ChallengeTabButton btnArena;
public static Action OnCloseChallengeTabWin;
protected override void InitComponent()
{
@@ -16,10 +17,19 @@
AdsManager.Instance.OnAdsInfoListUpdateEvent += OnAdsInfoListUpdateEvent;
TimeMgr.Instance.OnDayEvent += OnDayEvent;
FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
-
+ PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefresh;
Display();
}
-
+ protected override void OnPreClose()
+ {
+ base.OnPreClose();
+ DungeonManager.Instance.UpdateFBInfoChangeEvent -= OnUpdateFBInfoChangeEvent;
+ AdsManager.Instance.OnAdsInfoListUpdateEvent -= OnAdsInfoListUpdateEvent;
+ TimeMgr.Instance.OnDayEvent -= OnDayEvent;
+ FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
+ PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefresh;
+ OnCloseChallengeTabWin?.Invoke();
+ }
private void OnDayEvent()
{
Display();
@@ -38,26 +48,50 @@
}
}
+
public void OnFuncStateChangeEvent(int funcId)
{
if (funcId == BoneFieldManager.Instance.funcId)
{
DisplayBoneFieldButton();
}
+ else if (funcId == ArenaManager.Instance.funcId)
+ {
+ DisplayArenaButton();
+ }
}
- protected override void OnPreClose()
+ private void PlayerDataRefresh(PlayerDataType type)
{
- base.OnPreClose();
- DungeonManager.Instance.UpdateFBInfoChangeEvent -= OnUpdateFBInfoChangeEvent;
- AdsManager.Instance.OnAdsInfoListUpdateEvent -= OnAdsInfoListUpdateEvent;
- TimeMgr.Instance.OnDayEvent -= OnDayEvent;
- FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
- OnCloseChallengeTabWin?.Invoke();
+ if (type == PlayerDataType.ChallengeVoucher)
+ {
+ DisplayArenaButton();
+ }
}
+
public void Display()
{
DisplayBoneFieldButton();
+ DisplayArenaButton();
+ }
+
+ public void DisplayArenaButton()
+ {
+ int index = 1;
+ int funcId = ArenaManager.Instance.funcId;
+ int redpointId = MainRedDot.ArenaRepoint;
+ bool isLock = FuncOpen.Instance.IsFuncOpen(funcId);
+ int type = ArenaManager.Instance.ChallengeMoneyType;
+ long nowCount = UIHelper.GetMoneyCnt(type);
+ string countInfo = UIHelper.AppendColor(nowCount > 0 ? TextColType.Green : TextColType.Red, Language.Get("Challenge03", nowCount));
+ string lockInfo = !isLock ? Language.Get("Challenge02") : string.Empty;
+ btnArena.Display(index, redpointId, isLock, countInfo, lockInfo, () =>
+ {
+ UIManager.Instance.CloseWindow<ChallengeTabWin>();
+ if (!FuncOpen.Instance.IsFuncOpen(funcId, true))
+ return;
+ UIManager.Instance.OpenWindow<ArenaWin>();
+ });
}
public void DisplayBoneFieldButton()
diff --git a/Main/System/Redpoint/MainRedDot.cs b/Main/System/Redpoint/MainRedDot.cs
index 4f3fec5..1f37023 100644
--- a/Main/System/Redpoint/MainRedDot.cs
+++ b/Main/System/Redpoint/MainRedDot.cs
@@ -97,8 +97,7 @@
public const int MailRepoint = 467; //閭
public const int FirstChargeRepoint = 468; //棣栧厖
public const int BoneFieldRepoint = 469; //鐧介鐩堥噹
-
-
+ public const int ArenaRepoint = 470; //婕旀鍦�
public void Register()
{
diff --git a/Main/Utility/EnumHelper.cs b/Main/Utility/EnumHelper.cs
index 607dddd..fde5a01 100644
--- a/Main/Utility/EnumHelper.cs
+++ b/Main/Utility/EnumHelper.cs
@@ -419,7 +419,7 @@
Wristband = 8, //鎶よ厱
Shawl = 9, //鎶偐
Neck = 10, //椤归摼
- Ring= 11, //鎴掓寚
+ Ring = 11, //鎴掓寚
Amulet = 12, //鎶ょ
retMax,
@@ -671,7 +671,7 @@
default4, // 鐜繚鍊� 232
default5, // 233浠欑帀璐熸暟
default6, // 234鐏电煶璐熸暟
- default7,
+ default7,
default8,
default9, // 237 鍦板浘澧冪晫闅惧害
default10, // 238 璁板綍绂诲紑鏃堕棿鎴筹紝琚涪鎴栦富鍔ㄩ��鍑哄潎浼氭洿鏂拌鍊�
@@ -691,7 +691,7 @@
default24,
default25,
default26, // 254 鎴橀敜
- default27,
+ default27,
default28,
default29,
default30,
@@ -710,6 +710,7 @@
default43, // 271 骞诲闃佺Н鍒�
default44, // 272 姝﹀皢鎷涘嫙绉垎
GoldRush = 285, // 娣橀噾浠�
+ ChallengeVoucher = 286,//鎸戞垬鍑瘉
};
@@ -775,7 +776,7 @@
Guard_1 = 114, // 鐏靛畧 1
Guard_2 = 115, //鐏靛畧 2
Hero = 150, //姝﹀皢
-
+
}
@@ -1152,7 +1153,7 @@
BatchAlchemyFairy = 36,//鎵归噺鐐煎埗浠欎腹
BossHomeBuyTimes = 37,//boss涔嬪璐拱娆℃暟
SelfBossBuyTims = 38, //涓汉boss璐拱娆℃暟
-
+
}
@@ -1229,7 +1230,7 @@
Def_RewardType_HolidayLogin = 37,//鑺傛棩鐧诲綍濂栧姳
Def_RewardType_HolidayTravel = 38,//鑺傛棩娓稿巻濂栧姳
-
+
}
@@ -1282,7 +1283,7 @@
FashionDress = 24,//鏃惰
JadeDynastyEquip = 25, //璇涗粰瑁呭
-
+
}
@@ -1343,7 +1344,7 @@
RushAttack = 34,//34 鍐查攱+浼ゅ锛岀劧鍚庢晥鏋滃崐寰勯厤0鏃�=鍗曟敾浼ゅ锛岄厤>0鏃�=缇ゆ敾鏍煎瓙鏁帮紝閰�5灏辩瓑浜庤缇ゆ敾5*5
//35 钃勫姏妯℃澘锛屾惌閰嶆晥鏋滃�� 鏁堟灉ID 1206 A鍊间负鑳介噺娆℃暟
default35,
-
+
}
@@ -1649,7 +1650,7 @@
default1, //鍗囬樁
default2,
default3,
-
+
}
diff --git a/Main/Utility/UIHelper.cs b/Main/Utility/UIHelper.cs
index 4365874..8c204df 100644
--- a/Main/Utility/UIHelper.cs
+++ b/Main/Utility/UIHelper.cs
@@ -976,7 +976,7 @@
{3, PlayerDataType.Silver},
{41, PlayerDataType.default26},
{42, PlayerDataType.default33},
-
+ {53, PlayerDataType.ChallengeVoucher},
};
public static long GetMoneyCnt(int moneyType)
@@ -1118,6 +1118,11 @@
//娣橀噾浠�
return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.GoldRush);
}
+ case 53:
+ {
+ //鎸戞垬鍑瘉
+ return PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.ChallengeVoucher);
+ }
case 98:
{
//杩囨湡鍨嬩唬閲戝埜
--
Gitblit v1.8.0