From 803688798a599ed42477b685ecbede746706eea9 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期四, 11 九月 2025 18:42:55 +0800
Subject: [PATCH] Merge branch 'master' of http://mobile.secondworld.net.cn:10010/r/Project_SG_scripts
---
Main/System/Battle/SkillEffect/NormalSkillEffect.cs | 6
Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB430_tagSCTurnFightReport.cs | 92 ++++++++
Main/System/Battle/BattleManager.cs | 62 +++++
Main/System/Battle/BattleField/StoryBossBattleField.cs | 115 +++++++++++
Main/System/Battle/Motion/MotionBase.cs | 9
Main/System/Battle/RecordPlayer/RecordActionType.cs | 2
Main/Core/NetworkPackage/CustomServerPack/CustomHB426CombinePack.cs | 3
Main/System/Battle/SkillEffect/BulletSkillEffect.cs | 41 +++
Main/System/Battle/BattleField/RecordActions/DodgeFinishAction.cs | 40 ++++
Main/System/Battle/BattleField/BattleField.cs | 4
Main/System/Battle/BattleFieldFactory.cs | 4
Main/System/Battle/RecordPlayer/RecordPlayer.cs | 2
Main/System/Team/TeamHero.State.cs | 8
Main/System/Battle/BattleField/StoryBossBattleField.cs.meta | 11 +
Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB424_tagSCTurnFightInit.cs | 8
Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB418_tagSCObjPropertyRefreshView.cs | 10
Main/System/Battle/BattleObject/BattleObject.cs | 75 +++++-
Main/System/Battle/Skill/SkillBase.cs | 5
Main/System/Battle/BattleField/OperationAgent/RecordModeOperationAgent.cs | 16 +
Main/System/Battle/UIComp/BattleHeroInfoBar.cs | 33 ++
Main/System/Battle/BattleField/RecordActions/DodgeFinishAction.cs.meta | 11 +
Main/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0418_tagObjInfoRefresh.cs | 4
Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs | 2
23 files changed, 498 insertions(+), 65 deletions(-)
diff --git a/Main/Core/NetworkPackage/CustomServerPack/CustomHB426CombinePack.cs b/Main/Core/NetworkPackage/CustomServerPack/CustomHB426CombinePack.cs
index 3d7bc6b..c8b495b 100644
--- a/Main/Core/NetworkPackage/CustomServerPack/CustomHB426CombinePack.cs
+++ b/Main/Core/NetworkPackage/CustomServerPack/CustomHB426CombinePack.cs
@@ -197,6 +197,9 @@
HB427_tagSCUseSkill skill = packList[0] as HB427_tagSCUseSkill;
packList.Remove(skill);
BattleObject _caster = battleField.battleObjMgr.GetBattleObject((int)skill.ObjID);
+
+ // BattleDebug.LogError("_caster == null : " + (_caster == null) + " skill.ObjID : " + skill.ObjID);
+
SkillRecordAction skillAction = new SkillRecordAction(battleField, _caster, skill, packList);
return skillAction;
}
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0418_tagObjInfoRefresh.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0418_tagObjInfoRefresh.cs
index 3b9b2b4..21af3f4 100644
--- a/Main/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0418_tagObjInfoRefresh.cs
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0418_tagObjInfoRefresh.cs
@@ -9,15 +9,15 @@
base.Done(vNetPack);
H0418_tagObjInfoRefresh vNetData = vNetPack as H0418_tagObjInfoRefresh;
+ // 0 - NPC锛堟灏嗘垨鎬墿锛�
// 1 - 鐜╁锛堜富鍏級
- // 2 - NPC锛堟灏嗘垨鎬墿锛�
switch (vNetData.ObjType)
{
case 1:
Update0418(vNetData);
break;
- case 2:
+ case 0:
UpdateBattleField(vNetData);
break;
default:
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB418_tagSCObjPropertyRefreshView.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB418_tagSCObjPropertyRefreshView.cs
index cd37b5c..8f9eab8 100644
--- a/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB418_tagSCObjPropertyRefreshView.cs
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB418_tagSCObjPropertyRefreshView.cs
@@ -4,8 +4,16 @@
// B4 18 瀵硅薄灞炴�у埛鏂板睍绀� #tagSCObjPropertyRefreshView
public class DTCB418_tagSCObjPropertyRefreshView : DtcBasic {
- public override void Done(GameNetPackBasic vNetPack) {
+ public override void Done(GameNetPackBasic vNetPack)
+ {
base.Done(vNetPack);
HB418_tagSCObjPropertyRefreshView vNetData = vNetPack as HB418_tagSCObjPropertyRefreshView;
+
+ BattleField battleField = BattleManager.Instance.GetBattleField(vNetData.packUID);
+ if (null != battleField)
+ {
+ battleField.ObjPropertyRefreshView(vNetData);
+ battleField.DistributeNextPackage();
+ }
}
}
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB424_tagSCTurnFightInit.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB424_tagSCTurnFightInit.cs
index fabaec0..42d74c0 100644
--- a/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB424_tagSCTurnFightInit.cs
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB424_tagSCTurnFightInit.cs
@@ -63,5 +63,13 @@
BattleField battleField = BattleManager.Instance.CreateBattleField(guid, (int)vNetData.MapID, (int)vNetData.FuncLineID, extendData, redTeamList, blueTeamList);
BattleStartAction battleStartAction = new BattleStartAction(battleField);
battleField.recordPlayer.PlayRecord(battleStartAction);
+
+ BattleDebug.LogError("鍒涘缓鎴樺満 guid:" + guid + " MapID:" + vNetData.MapID + " FuncLineID:" + vNetData.FuncLineID + " " + battleField.GetType().ToString());
+
+ BattleWin battleWin = UIManager.Instance.GetUI<BattleWin>();
+ if (null != battleWin)
+ {
+ battleWin.SetBattleField(battleField);
+ }
}
}
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB430_tagSCTurnFightReport.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB430_tagSCTurnFightReport.cs
index e7d9795..b069477 100644
--- a/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB430_tagSCTurnFightReport.cs
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB430_tagSCTurnFightReport.cs
@@ -2,10 +2,12 @@
using System.Collections;
using System;
using System.Text;
+using System.Collections.Generic;
// B4 30 鏌ョ湅鎴樻姤缁撴灉 #tagSCTurnFightReportRet
-public class DTCB430_tagSCTurnFightReport : DtcBasic {
+public class DTCB430_tagSCTurnFightReport : DtcBasic
+{
static byte[] vCmdBytes = new byte[2];
@@ -24,6 +26,8 @@
int vLeavingLeng = 0;
int vBodyLeng = 0;
int vTotalLeng = vNetData.reportBytes.Length;
+
+ List<GameNetPackBasic> vPackList = new List<GameNetPackBasic>();
while (vReadIndex < vTotalLeng)
{
@@ -52,10 +56,11 @@
if (PackageRegedit.Contain(cmd))
{
- GameNetPackBasic vNetpack = PackageRegedit.TransPack(ServerType.B430, cmd, vPackBytes);
- if (vNetpack != null)
+ GameNetPackBasic npk = PackageRegedit.TransPack(ServerType.B430, cmd, vPackBytes);
+ if (npk != null)
{
- BattleManager.Instance.PushPackage(guid, vNetpack);
+ vPackList.Add(npk);
+ BattleManager.Instance.PushPackUID(guid, npk.packUID);
isRegist = true;
}
}
@@ -70,10 +75,89 @@
#endif
}
}
+
+ vPackList = AnalysisPackQueueAndDistribute(guid, vPackList);
+
+ for (int i = 0; i < vPackList.Count; i++)
+ {
+ BattleManager.Instance.PushPackage(guid, vPackList[i]);
+ }
+
+ BattleManager.Instance.DistributeNextReportPackage(guid);
}
catch (Exception e)
{
Debug.LogErrorFormat("DTCB430_tagSCTurnFightReport 瑙e寘寮傚父锛歿0}", e);
}
}
+
+
+ protected List<GameNetPackBasic> AnalysisPackQueueAndDistribute(string guid, List<GameNetPackBasic> vPackList)
+ {
+ // 寤鸿鍓嶇鍋氫竴涓槻鑼冩満鍒讹細褰撹繛缁娆¤姹傚緱鍒扮┖鐨勬垬鏂楃墖娈靛皝鍖呮椂锛堜笉鍖呭惈B425鏍囪鐨勫紑濮嬭窡缁撴潫灏佸寘锛屽嵆寮�濮嬭窡涓棿娌℃湁浠讳綍灏佸寘锛夛紝寮哄埗鑷姩甯帺瀹跺洖鍩庝紤鎭紝
+ // 鍘熷洜鍙兘鍓嶅悗绔暟鎹笉涓�鑷碽ug锛堟瘮濡傛垬閿ゅ彲鑳藉悗绔病鏈変簡锛屽墠绔涓鸿繕鏈夛級鎴栬�� 鍚庣鏈塨ug瀵艰嚧娌℃湁澶勭悊鎴樻枟
+ // 涓洪槻姝㈡寰幆锛屽彲寮哄埗鍥炲煄浼戞伅锛岃鐜╁閲嶆柊鐐瑰嚮鍏冲崱鎴樻枟鎴栨寫鎴榖oss锛�
+ // 姝e父鎯呭喌涓嬪湪鎴橀敜瓒冲鏃剁悊璁轰笂閮藉彲浠ヤ竴鐩村惊鐜埛鎬紝濡傛灉杩炵画澶氭娌℃湁鎴樻枟鐗囨灏佸寘锛屾瘮濡傞檺鍒朵釜杩炵画10娆′互鍐咃紝灏卞彲浠ョ悊瑙d负寮傚父浜�
+
+ const int MaxContinousEmptyCount = 10; // 杩炵画绌哄寘鏈�澶ф鏁�
+
+ List<GameNetPackBasic> packQueueSnapshot = new List<GameNetPackBasic>(vPackList);
+
+ List<GameNetPackBasic> newPackList = new List<GameNetPackBasic>();
+ HashSet<int> skipIndexes = new HashSet<int>();
+
+ // 杩欓噷宸茬粡鏄寜鐓equeue鐨勯『搴忎簡
+ for (int i = 0; i < packQueueSnapshot.Count; i++)
+ {
+ if (skipIndexes.Contains(i)) continue;
+
+ GameNetPackBasic pack = packQueueSnapshot[i];
+
+ // 纰板埌B421 鎴柇 寰�涓嬫敹闆哹421閲岀殑鍏ㄩ儴鍐呭
+ if (pack is HB421_tagMCTurnFightObjAction)
+ {
+ HB421_tagMCTurnFightObjAction b421Pack = pack as HB421_tagMCTurnFightObjAction;
+
+ List<GameNetPackBasic> b421PackList = new List<GameNetPackBasic>();
+ i++; // 璺宠繃褰撳墠鐨凚421鍖�
+
+ // 鏀堕泦鎵�鏈夐潪B421鍖咃紝鐩村埌閬囧埌涓嬩竴涓狟421鎴栭槦鍒楃粨鏉�
+ for (; i < packQueueSnapshot.Count; i++)
+ {
+ GameNetPackBasic nextPack = packQueueSnapshot[i];
+ if (nextPack is HB421_tagMCTurnFightObjAction)
+ {
+ i--; // 鍥為��涓�涓綅缃紝鐣欑粰澶栧眰寰幆澶勭悊
+ break;
+ }
+ else
+ {
+ b421PackList.Add(nextPack);
+ skipIndexes.Add(i); // 鏍囪宸茶鍚堝寘
+ }
+ }
+
+
+
+ // 鍚堝苟鎵�鏈夌浉鍏冲寘
+ CustomB421ActionPack actionPack = CustomB421ActionPack.CreateB421ActionPack(guid, b421PackList);
+
+ newPackList.Add(actionPack);
+ }
+ else
+ {
+ newPackList.Add(pack);
+ }
+ }
+
+
+ List<GameNetPackBasic> returnList = new List<GameNetPackBasic>();
+ for (int i = 0; i < newPackList.Count; i++)
+ {
+ var pack = newPackList[i];
+
+ returnList.Add(pack);
+ }
+ return returnList;
+ }
}
diff --git a/Main/System/Battle/BattleField/BattleField.cs b/Main/System/Battle/BattleField/BattleField.cs
index a745ff9..3ddafd5 100644
--- a/Main/System/Battle/BattleField/BattleField.cs
+++ b/Main/System/Battle/BattleField/BattleField.cs
@@ -439,13 +439,13 @@
if (winFaction == 1)
{
- Debug.LogError("鎴樻枟鑳滃埄");
+ Debug.LogError(guid + " : 鎴樻枟鑳滃埄");
// 鎴樻枟鑳滃埄
}
else
{
// 鎴樻枟澶辫触
- Debug.LogError("鎴樻枟澶辫触");
+ Debug.LogError(guid + " : 鎴樻枟澶辫触");
}
IsBattleFinish = true;
diff --git a/Main/System/Battle/BattleField/OperationAgent/RecordModeOperationAgent.cs b/Main/System/Battle/BattleField/OperationAgent/RecordModeOperationAgent.cs
index 99193c5..86aa598 100644
--- a/Main/System/Battle/BattleField/OperationAgent/RecordModeOperationAgent.cs
+++ b/Main/System/Battle/BattleField/OperationAgent/RecordModeOperationAgent.cs
@@ -17,16 +17,22 @@
public override void Run()
{
base.Run();
+
+ DoNext();
}
public override void DoNext()
{
base.DoNext();
-
- // if (!playing())
- // packs.Dequeue();
- // actions = pack.Distribute();
- // recordPlayer.Play(actions);
+ if (battleField.IsBattleEnd())
+ {
+ return;
+ }
+
+ if (!battleField.recordPlayer.IsPlaying())
+ {
+ battleField.DistributeNextPackage();
+ }
}
}
\ No newline at end of file
diff --git a/Main/System/Battle/BattleField/RecordActions/DodgeFinishAction.cs b/Main/System/Battle/BattleField/RecordActions/DodgeFinishAction.cs
new file mode 100644
index 0000000..7a0c033
--- /dev/null
+++ b/Main/System/Battle/BattleField/RecordActions/DodgeFinishAction.cs
@@ -0,0 +1,40 @@
+using UnityEngine;
+using System.Collections.Generic;
+
+public class DodgeFinishAction : RecordAction
+{
+ private bool isRun = false;
+
+ public DodgeFinishAction(BattleField _battleField, BattleObject _dodgeObj)
+ : base(RecordActionType.DodgeFinish, _battleField, null)
+ {
+
+ }
+
+ public override bool IsFinished()
+ {
+ return isFinish;
+ }
+
+
+ public override void Run()
+ {
+ base.Run();
+
+ if (isRun)
+ return;
+
+ battleObject.OnDodgeEnd();
+ isFinish = true;
+ isRun = true;
+ }
+
+ public override void ForceFinish()
+ {
+ //姝e父寮�濮嬩箣鍚庡埌鐣岄潰鍑虹幇涔嬪墠閮界偣涓嶄簡 鎵�浠ヨ繖杈逛笉鐢ㄥ己鍒跺畬鎴� 鎺ュ彛鐣欑潃
+
+ base.ForceFinish();
+ // 瀹屾垚灏卞紑濮嬫樉绀篣I
+
+ }
+}
\ No newline at end of file
diff --git a/Main/System/Battle/BattleField/RecordActions/DodgeFinishAction.cs.meta b/Main/System/Battle/BattleField/RecordActions/DodgeFinishAction.cs.meta
new file mode 100644
index 0000000..d22f879
--- /dev/null
+++ b/Main/System/Battle/BattleField/RecordActions/DodgeFinishAction.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7099a0a534efb71459ccf57d9a8bc393
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs b/Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs
index 1608714..e98ab16 100644
--- a/Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs
+++ b/Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs
@@ -10,6 +10,8 @@
public SkillRecordAction(BattleField _battleField, BattleObject _caster, HB427_tagSCUseSkill vNetData, List<GameNetPackBasic> packList)
: base(RecordActionType.Skill, _battleField, _caster)
{
+ // Debug.LogError("_caster == null : " + (_caster == null));
+
skillBase = SkillFactory.CreateSkill(_caster, vNetData, packList, _battleField);
}
diff --git a/Main/System/Battle/BattleField/StoryBossBattleField.cs b/Main/System/Battle/BattleField/StoryBossBattleField.cs
new file mode 100644
index 0000000..d5f4ea2
--- /dev/null
+++ b/Main/System/Battle/BattleField/StoryBossBattleField.cs
@@ -0,0 +1,115 @@
+using System;
+using LitJson;
+using UnityEngine;
+using System.Collections.Generic;
+
+
+public class StoryBossBattleField : BattleField
+{
+ protected int chapter;// 绔犺妭
+ protected int wave;// 娉㈡暟
+ protected int level;// 鍏冲崱
+ protected JsonData extendData;
+
+ protected MainChapterConfig chapterConfig;
+
+ protected MainLevelConfig levelConfig;
+
+
+ public StoryBossBattleField(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 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);
+ }
+
+
+}
\ No newline at end of file
diff --git a/Main/System/Battle/BattleField/StoryBossBattleField.cs.meta b/Main/System/Battle/BattleField/StoryBossBattleField.cs.meta
new file mode 100644
index 0000000..d795534
--- /dev/null
+++ b/Main/System/Battle/BattleField/StoryBossBattleField.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 15d8291560cdd1449be24332792c7379
+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 e5ef680..9177299 100644
--- a/Main/System/Battle/BattleFieldFactory.cs
+++ b/Main/System/Battle/BattleFieldFactory.cs
@@ -15,9 +15,11 @@
switch (MapID)
{
case 1:
- case 2:
battleField = new StoryBattleField();
break;
+ case 2:
+ battleField = new StoryBossBattleField(guid);
+ break;
default:
break;
}
diff --git a/Main/System/Battle/BattleManager.cs b/Main/System/Battle/BattleManager.cs
index 89499fe..e801634 100644
--- a/Main/System/Battle/BattleManager.cs
+++ b/Main/System/Battle/BattleManager.cs
@@ -289,6 +289,7 @@
if (!battleReportDict.TryGetValue(guid, out queue))
{
queue = new Queue<GameNetPackBasic>();
+ battleReportDict.Add(guid, queue);
}
queue.Enqueue(vNetPack);
@@ -301,7 +302,26 @@
battlePackRelationList.Add(guid, uidList);
}
- uidList.Add(vNetPack.packUID);
+ if (!uidList.Contains(vNetPack.packUID))
+ {
+ uidList.Add(vNetPack.packUID);
+ }
+ }
+
+ public void PushPackUID(string guid, ulong packUID)
+ {
+ List<ulong> uidList = null;
+
+ if (!battlePackRelationList.TryGetValue(guid, out uidList))
+ {
+ uidList = new List<ulong>();
+ battlePackRelationList.Add(guid, uidList);
+ }
+
+ if (!uidList.Contains(packUID))
+ {
+ uidList.Add(packUID);
+ }
}
public BattleField GetBattleField(ulong packUID)
@@ -332,6 +352,7 @@
{
Queue<GameNetPackBasic> queue = null;
+
if (!battleReportDict.TryGetValue(guid, out queue))
{
BattleDebug.LogError("DistributeNextReportPackage could not find queue for guid : " + guid);
@@ -340,7 +361,32 @@
var pack = queue.Dequeue();
- PackageRegedit.Distribute(pack);
+ // Debug.LogError("DistributeNextReportPackage for guid : " + guid + " pack type : " + pack.GetType());
+
+ try
+ {
+ if (pack is CustomHB426CombinePack combinePack)
+ {
+ combinePack.Distribute();
+ }
+ else if (pack is CustomB421ActionPack actionPack)
+ {
+ actionPack.Distribute();
+ }
+ else
+ {
+ PackageRegedit.Distribute(pack);
+ }
+ }
+ catch (Exception ex)
+ {
+ Debug.LogError("DistributeNextPackage: 鍒嗗彂鍖呭紓甯� " + ex);
+ // 鍑洪敊鏃朵富鍔ㄧЩ闄ゅ綋鍓嶅寘锛岄槻姝㈡寰幆
+ if (packQueue.Count > 0)
+ {
+ packQueue.Dequeue();
+ }
+ }
if (queue.Count <= 0)
{
@@ -397,14 +443,13 @@
return;
}
- onBattleFieldDestroy?.Invoke(battleField.guid, battleField);
+ battleField.Release();
string guid = battleField.guid;
- if (battleFields.ContainsKey(guid))
- {
- battleFields.Remove(guid);
- }
+ battleFields.Remove(guid);
+ battleReportDict.Remove(guid);
+ battlePackRelationList.Remove(guid);
if (storyBattleField == battleField)
{
@@ -412,6 +457,9 @@
}
GameObject.DestroyImmediate(battleField.battleRootNode.gameObject);
+
+ onBattleFieldDestroy?.Invoke(battleField.guid, battleField);
+
}
diff --git a/Main/System/Battle/BattleObject/BattleObject.cs b/Main/System/Battle/BattleObject/BattleObject.cs
index 110afc0..c9766a1 100644
--- a/Main/System/Battle/BattleObject/BattleObject.cs
+++ b/Main/System/Battle/BattleObject/BattleObject.cs
@@ -97,7 +97,8 @@
var heroInfoBarScale = heroInfoBar.transform.localScale;
heroInfoBarScale.x *= Camp == BattleCamp.Red ? 1 : -1;
heroInfoBar.transform.localScale = heroInfoBarScale;
-
+
+ heroInfoBar.SetActive(true);
}
@@ -144,14 +145,39 @@
break;
case PlayerDataType.MaxHP:
teamHero.maxHp = GeneralDefine.GetFactValue(_refreshInfo.Value, _refreshInfo.ValueEx);
+ heroInfoBar.UpdateHP(teamHero.curHp, teamHero.curHp, teamHero.maxHp);
break;
case PlayerDataType.XP:
long toXp = GeneralDefine.GetFactValue(_refreshInfo.Value, _refreshInfo.ValueEx);
- heroInfoBar.UpdateHP(teamHero.rage, toXp, 100);
+ heroInfoBar.UpdateXP(teamHero.rage, toXp, 100);
teamHero.rage = (int)GeneralDefine.GetFactValue(_refreshInfo.Value, _refreshInfo.ValueEx);
break;
default:
Debug.LogError("BattleObject.ObjInfoRefresh 鍑虹幇鎰忓绫诲瀷 " + _refreshInfo.RefreshType.ToString());
+ break;
+ }
+ }
+
+ public void ObjPropertyRefreshView(HB418_tagSCObjPropertyRefreshView vNetData)
+ {
+ switch ((PlayerDataType)vNetData.RefreshType)
+ {
+ case PlayerDataType.HP:
+ long toHp = GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
+ heroInfoBar.UpdateHP(teamHero.curHp, toHp, teamHero.maxHp);
+ teamHero.curHp = GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
+ break;
+ case PlayerDataType.MaxHP:
+ teamHero.maxHp = GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
+ heroInfoBar.UpdateHP(teamHero.curHp, teamHero.curHp, teamHero.maxHp);
+ break;
+ case PlayerDataType.XP:
+ long toXp = GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
+ heroInfoBar.UpdateXP(teamHero.rage, toXp, 100);
+ teamHero.rage = (int)GeneralDefine.GetFactValue(vNetData.Value, vNetData.ValueEx);
+ break;
+ default:
+ Debug.LogError("BattleObject.ObjPropertyRefreshView 鍑虹幇鎰忓绫诲瀷 " + vNetData.RefreshType.ToString());
break;
}
}
@@ -241,12 +267,10 @@
public virtual void Hurt(List<long> damageValues, long _totalDamage, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, SkillConfig skillConfig)
{
- PopDamage(damageValues, hurt, skillConfig);
+ PopDamage(damageValues, _totalDamage, hurt, skillConfig);
motionBase.PlayAnimation(MotionName.hit, false);
- // 鎵h娴佺粰鍒殑鏁屾柟鍒锋柊濂戒簡
- teamHero.curHp -= _totalDamage;
}
public void SuckHp(uint suckHP, SkillConfig skillConfig)
@@ -264,14 +288,14 @@
{
float pingpongTime = 0.2f;
RectTransform rectTrans = heroRectTrans;
- var tween = rectTrans.DOAnchorPos(new Vector3(-50, 50, 0), pingpongTime)
+ var tween = rectTrans.DOAnchorPos(new Vector3(-30, 0, 0), pingpongTime)
.SetEase(Ease.OutCubic);
battleField.battleTweenMgr.OnPlayTween(tween);
}
// 闂伩缁撴潫
- public virtual void OnDodgeEnd()
+ public virtual void OnDodgeEnd(Action _complete = null)
{
float pingpongTime = 0.2f;
RectTransform rectTrans = heroRectTrans;
@@ -279,23 +303,28 @@
var tween = rectTrans.DOAnchorPos(Vector3.zero, pingpongTime)
.SetEase(Ease.OutCubic);
+ tween.onComplete += () =>
+ {
+ _complete?.Invoke();
+ };
+
battleField.battleTweenMgr.OnPlayTween(tween);
}
public virtual void OnDeath(Action _onDeathAnimationComplete)
{
- onDeathAnimationComplete = _onDeathAnimationComplete;
- motionBase.PlayAnimation(MotionName.dead, false);
+ motionBase.PlayAnimation(MotionName.dead, false, () =>
+ {
+ teamHero.isDead = true;
+ OnDeadAnimationComplete();
+ _onDeathAnimationComplete?.Invoke();
+ });
}
+ // 涓嶄竴瀹氬彲闈� 鏈夋椂鍊欎細鎻掑叆鍏朵粬鍔ㄤ綔灏卞畬浜�
protected virtual void OnAnimationComplete(string motionName)
{
- if (motionName == MotionName.dead.ToString().ToLower())
- {
- OnDeadAnimationComplete();
- onDeathAnimationComplete?.Invoke();
- onDeathAnimationComplete = null;
- }
+
}
protected virtual void OnDeadAnimationComplete()
@@ -313,9 +342,19 @@
}
// 浼ゅ杩樿鐪� 鏄惁闂伩 鏆村嚮 and so on 闇�瑕佹湁涓�涓狣amageType 鏈嶅姟鍣ㄥ簲璇ヤ細缁�
- protected virtual void PopDamage(List<long> damageValues, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, SkillConfig skillConfig)
+ protected virtual void PopDamage(List<long> damageValues, long _totalDamage, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, SkillConfig skillConfig)
{
BattleDmgInfo battleDmgInfo = new BattleDmgInfo(battleField.guid, damageValues, this, hurt, skillConfig);
+
+ if (battleDmgInfo.IsType(DamageType.Dodge))
+ {
+ OnDodgeBegin();
+ DodgeFinishAction dodgeFinish = new DodgeFinishAction(battleField, this);
+ battleField.recordPlayer.InsertRecord(dodgeFinish);
+ }
+
+ heroInfoBar.UpdateHP(teamHero.curHp, Math.Max(0, teamHero.curHp - _totalDamage), teamHero.maxHp);
+ teamHero.curHp = Math.Max(0, teamHero.curHp - _totalDamage);
// YYL TODO 鏄惁闇�瑕佹寕鍦ㄥ湪鑷韩鐨刦ollow鐐逛笂
EventBroadcast.Instance.Broadcast(EventName.BATTLE_DAMAGE_TAKEN, battleDmgInfo);
@@ -342,8 +381,10 @@
// 浼戞伅鐘舵��
// 澶氫竴涓獄zz鐨勪竴涓壒鏁�
heroGo.SetActive(true);
- motionBase.PlayAnimation(MotionName.idle, true);
+ motionBase.HaveRest();
heroRectTrans.anchoredPosition = Vector2.zero;
+
+ heroInfoBar.SetActive(false);
}
public void PushDropItems(BattleDrops _battleDrops)
diff --git a/Main/System/Battle/Motion/MotionBase.cs b/Main/System/Battle/Motion/MotionBase.cs
index 41a1931..3f81ccf 100644
--- a/Main/System/Battle/Motion/MotionBase.cs
+++ b/Main/System/Battle/Motion/MotionBase.cs
@@ -83,6 +83,7 @@
public virtual void Release()
{
+ trackEntryCompleteDict.Clear();
if (spineAnimationState != null)
{
spineAnimationState.Complete -= OnAnimationComplete;
@@ -348,6 +349,12 @@
skeletonGraphic.timeScale = MotionTimeScale;
}
+ public void HaveRest()
+ {
+ trackEntryCompleteDict.Clear();
+ PlayAnimation(MotionName.idle, true);
+ }
+
#endregion
-
+
}
\ No newline at end of file
diff --git a/Main/System/Battle/RecordPlayer/RecordActionType.cs b/Main/System/Battle/RecordPlayer/RecordActionType.cs
index 3cb84d7..a2ee241 100644
--- a/Main/System/Battle/RecordPlayer/RecordActionType.cs
+++ b/Main/System/Battle/RecordPlayer/RecordActionType.cs
@@ -8,4 +8,6 @@
BuffMount,//鎸傝浇澧炵泭
BattleStart,//鎴樻枟寮�濮�
+
+ DodgeFinish,//闂伩瀹屾垚
}
diff --git a/Main/System/Battle/RecordPlayer/RecordPlayer.cs b/Main/System/Battle/RecordPlayer/RecordPlayer.cs
index 8f2ae83..769415f 100644
--- a/Main/System/Battle/RecordPlayer/RecordPlayer.cs
+++ b/Main/System/Battle/RecordPlayer/RecordPlayer.cs
@@ -13,7 +13,7 @@
private bool isWaitingNextAction = false;
private float waitTimer = 0f;
- private const float waitInterval = 0.2f;
+ private const float waitInterval = 0f;
public void Init(BattleField _battleField)
{
diff --git a/Main/System/Battle/Skill/SkillBase.cs b/Main/System/Battle/Skill/SkillBase.cs
index 474444e..f5a834c 100644
--- a/Main/System/Battle/Skill/SkillBase.cs
+++ b/Main/System/Battle/Skill/SkillBase.cs
@@ -120,8 +120,8 @@
DashCast(OnAttackFinish);
break;
default:
- Debug.LogError("鏆傛椂涓嶆敮鎸佸叾浠栫殑鏂瑰紡閲婃斁 鏈夐渶姹傝鑱旂郴绛栧垝 鎶�鑳絠d:" + skillConfig.SkillID + " cast position " + skillConfig.CastPosition);
- OnSkillFinished();
+ Debug.LogError("寮哄埗缁撴潫鎶�鑳� 鏆傛椂涓嶆敮鎸佸叾浠栫殑鏂瑰紡閲婃斁 鏈夐渶姹傝鑱旂郴绛栧垝 鎶�鑳絠d:" + skillConfig.SkillID + " cast position " + skillConfig.CastPosition);
+ ForceFinished();
break;
}
@@ -131,6 +131,7 @@
protected void DashCast(Action _onComplete)
{
Debug.LogError("DashCast 杩樻病瀹炵幇");
+ ForceFinished();
// YYL TODO
// var entry = caster.motionBase.PlayAnimation(skillConfig.GetMotionName(), false);
diff --git a/Main/System/Battle/SkillEffect/BulletSkillEffect.cs b/Main/System/Battle/SkillEffect/BulletSkillEffect.cs
index 612bc47..db0c383 100644
--- a/Main/System/Battle/SkillEffect/BulletSkillEffect.cs
+++ b/Main/System/Battle/SkillEffect/BulletSkillEffect.cs
@@ -66,6 +66,10 @@
case 5:
SelfShoting();
break;
+ default:
+ Debug.LogError("瀛愬脊鐗规晥娌℃湁閰嶇疆姝g‘鐨凾agAim锛屽己鍒剁粨鏉熷瓙寮圭壒鏁� TagAim: " + skillConfig.TagAim);
+ ForceFinished();
+ break;
}
}
}
@@ -176,8 +180,8 @@
BattleCamp battleCamp = skillConfig.TagFriendly != 0 ? caster.Camp : caster.GetEnemyCamp();
// 棣栧厛鏄洰鏍囪韩涓婄垎鐐�
- PlayExplosionEffect(skillConfig.ExplosionEffectId, targetTransform, battleCamp);
- PlayExplosionEffect(skillConfig.ExplosionEffect2, targetTransform, battleCamp);
+ PlayExplosionEffect(skillConfig.ExplosionEffectId, targetTransform, caster.Camp);
+ PlayExplosionEffect(skillConfig.ExplosionEffect2, targetTransform, caster.Camp);
foreach (var hurt in hitList)
{
@@ -188,7 +192,7 @@
continue;
}
- PlayExplosionEffect(skillConfig.ExplosionEffect3, targetObj.heroGo.transform, targetObj.Camp);
+ PlayExplosionEffect(skillConfig.ExplosionEffect3, targetObj.heroGo.transform, caster.Camp);
}
// 琛ㄧ幇瀛愬脊椋炶鍒扮洰鏍囦綅缃�
@@ -253,8 +257,31 @@
private void VerticalRowShoting()
{
// 绾垫帓鍒嗗埆涓�1銆�4锛�2銆�5锛�3銆�6锛屼笁缁勭旱鎺掞紝鎸夊浣嶈鍒欓�夋嫨锛岄粯璁�1鍙枫��2鍙锋垨3鍙蜂负涓荤洰鏍囷紝鍓嶆帓1銆�2銆�3鍙蜂綅缃叏閮ㄦ瀹屽悗锛�4鍙枫��5鍙锋垨6鍙蜂负涓荤洰鏍�
+ BattleCamp battleCamp = skillConfig.TagFriendly != 0 ? caster.Camp : caster.GetEnemyCamp();
+ // 鏀诲嚮mininumIndex鐩爣
+ int minimumIndex = int.MaxValue;
+ foreach (var hurt in tagUseSkillAttack.HurtList)
+ {
+ BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
+ if (target == null)
+ {
+ Debug.LogError("鐗规晥鐩爣涓虹┖ target == null ObjId : " + hurt.ObjID);
+ continue;
+ }
- ShotEachTargets();
+ minimumIndex = Mathf.Min(target.teamHero.positionNum, minimumIndex);
+ }
+
+ if (minimumIndex != int.MaxValue)
+ {
+ ShotToIndex(battleCamp, minimumIndex);
+ }
+ else
+ {
+ Debug.LogError("绾垫帓鏀诲嚮娌℃湁鐩爣 寮哄埗缁撴潫瀛愬脊鐗规晥");
+ ForceFinished();
+ }
+
}
@@ -284,9 +311,9 @@
continue;
}
- PlayExplosionEffect(skillConfig.ExplosionEffectId, targetObj.heroGo.transform, targetObj.Camp);
- PlayExplosionEffect(skillConfig.ExplosionEffect2, targetObj.heroGo.transform, targetObj.Camp);
- PlayExplosionEffect(skillConfig.ExplosionEffect3, targetObj.heroGo.transform, targetObj.Camp);
+ PlayExplosionEffect(skillConfig.ExplosionEffectId, targetObj.heroGo.transform, caster.Camp);
+ PlayExplosionEffect(skillConfig.ExplosionEffect2, targetObj.heroGo.transform, caster.Camp);
+ PlayExplosionEffect(skillConfig.ExplosionEffect3, targetObj.heroGo.transform, caster.Camp);
}
// 琛ㄧ幇瀛愬脊椋炶鍒扮洰鏍囦綅缃�
diff --git a/Main/System/Battle/SkillEffect/NormalSkillEffect.cs b/Main/System/Battle/SkillEffect/NormalSkillEffect.cs
index b185387..0fa8e87 100644
--- a/Main/System/Battle/SkillEffect/NormalSkillEffect.cs
+++ b/Main/System/Battle/SkillEffect/NormalSkillEffect.cs
@@ -29,12 +29,12 @@
if (skillConfig.ExplosionEffectId > 0)
{
- caster.battleField.battleEffectMgr.PlayEffect(0, skillConfig.ExplosionEffectId, targetTransform, battleCamp);
+ caster.battleField.battleEffectMgr.PlayEffect(0, skillConfig.ExplosionEffectId, targetTransform, caster.Camp);
}
if (skillConfig.ExplosionEffect2 > 0)
{
- caster.battleField.battleEffectMgr.PlayEffect(0, skillConfig.ExplosionEffect2, targetTransform, battleCamp);
+ caster.battleField.battleEffectMgr.PlayEffect(0, skillConfig.ExplosionEffect2, targetTransform, caster.Camp);
}
for (int i = 0; i < tagUseSkillAttack.HurtList.Length; i++)
@@ -49,7 +49,7 @@
if (skillConfig.ExplosionEffect3 > 0)
{
- caster.battleField.battleEffectMgr.PlayEffect(target.ObjID, skillConfig.ExplosionEffect3, target.heroGo.transform, target.Camp);
+ caster.battleField.battleEffectMgr.PlayEffect(target.ObjID, skillConfig.ExplosionEffect3, target.heroGo.transform, caster.Camp);
}
}
diff --git a/Main/System/Battle/UIComp/BattleHeroInfoBar.cs b/Main/System/Battle/UIComp/BattleHeroInfoBar.cs
index f1a37a6..fe46ec2 100644
--- a/Main/System/Battle/UIComp/BattleHeroInfoBar.cs
+++ b/Main/System/Battle/UIComp/BattleHeroInfoBar.cs
@@ -23,7 +23,7 @@
protected List<string> messages = new List<string>();
public BasicHeroInfoContainer heroInfoContainer;
-
+
public BattleTips textTips;
protected Tween hpTween;
@@ -41,6 +41,8 @@
battleObject = _battleObject;
heroInfoContainer.SetHeroInfo(battleObject.teamHero);
RefreshBuff(buffList);
+ UpdateHP(battleObject.teamHero.curHp, battleObject.teamHero.curHp, battleObject.teamHero.maxHp, false);
+ UpdateXP(battleObject.teamHero.rage, battleObject.teamHero.rage, 100, false);
}
public void RefreshBuff(List<HB428_tagSCBuffRefresh> datas)
@@ -114,7 +116,7 @@
}
- public void UpdateHP(long fromHp, long toHp, long maxHp)
+ public void UpdateHP(long fromHp, long toHp, long maxHp, bool tween = true)
{
// 鍋歨p澧炲姞鎴栬�呭噺灏戠殑鍔ㄧ敾
// sliderHp.value = ((float)fromHp) / ((float)maxHp);
@@ -122,13 +124,21 @@
{
battleObject.battleField.battleTweenMgr.OnKillTween(hpTween);
}
- hpTween = sliderHp.DOValue((float)toHp / maxHp, 0.3f);
- battleObject.battleField.battleTweenMgr.OnPlayTween(hpTween);
+
+ if (tween)
+ {
+ hpTween = sliderHp.DOValue((float)toHp / (float)maxHp, 0.3f);
+ battleObject.battleField.battleTweenMgr.OnPlayTween(hpTween);
+ }
+ else
+ {
+ sliderHp.value = ((float)toHp) / ((float)maxHp);
+ }
BattleDebug.LogError("update hp from " + fromHp + " to " + toHp + " maxHp " + maxHp);
}
- public void UpdateXP(long fromXp, long toXp, long maxXp)
+ public void UpdateXP(long fromXp, long toXp, long maxXp, bool tween = true)
{
// 鍋歑p澧炲姞鎴栬�呭噺灏戠殑鍔ㄧ敾
// sliderXp.value = ((float)fromXp) / ((float)maxXp);
@@ -136,8 +146,17 @@
{
battleObject.battleField.battleTweenMgr.OnKillTween(xpTween);
}
- xpTween = sliderHp.DOValue((float)toXp / maxXp, 0.2f);
- battleObject.battleField.battleTweenMgr.OnPlayTween(xpTween);
+
+ if (tween)
+ {
+ xpTween = sliderXp.DOValue((float)toXp / (float)maxXp, 0.2f);
+ battleObject.battleField.battleTweenMgr.OnPlayTween(xpTween);
+ }
+ else
+ {
+ sliderXp.value = ((float)toXp) / ((float)maxXp);
+ }
+
BattleDebug.LogError("update xp from " + fromXp + " to " + toXp + " maxXp " + maxXp);
}
diff --git a/Main/System/Team/TeamHero.State.cs b/Main/System/Team/TeamHero.State.cs
index 17d64d6..7bd110c 100644
--- a/Main/System/Team/TeamHero.State.cs
+++ b/Main/System/Team/TeamHero.State.cs
@@ -24,10 +24,8 @@
public bool isDead
{
- get
- {
- return curHp <= 0;
- }
- }
+ get;
+ set;
+ } = false;
}
\ No newline at end of file
--
Gitblit v1.8.0