From 4debfee66e8d8aabd179e2f8a61c7ca5ce62af3d Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期三, 31 十二月 2025 15:28:37 +0800
Subject: [PATCH] 0312 修复觉醒后战力计算错误的问题
---
Main/System/Settlement/BattleSettlementManager.cs | 310 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 305 insertions(+), 5 deletions(-)
diff --git a/Main/System/Settlement/BattleSettlementManager.cs b/Main/System/Settlement/BattleSettlementManager.cs
index 0e2f583..884920b 100644
--- a/Main/System/Settlement/BattleSettlementManager.cs
+++ b/Main/System/Settlement/BattleSettlementManager.cs
@@ -1,13 +1,18 @@
锘�
+using System;
using System.Collections.Generic;
using System.Linq;
+using System.Text;
using LitJson;
+using UnityEngine;
public partial class BattleSettlementManager : GameSystemManager<BattleSettlementManager>
{
//缁撶畻鍚庨渶娓呴櫎 <battleName,JsonData>
Dictionary<string, JsonData> battleSettlementDic = new Dictionary<string, JsonData>();
+ Dictionary<string, JsonData> battleAwardDic = new Dictionary<string, JsonData>(); //B431 鍙﹀閫氭姤濂栧姳
+
// public string notifyGuid = string.Empty;
@@ -28,6 +33,7 @@
public void OnBeforePlayerDataInitialize()
{
battleSettlementDic.Clear();
+ battleAwardDic.Clear();
}
public void AddPop(string battleName, int result)
@@ -35,11 +41,17 @@
bool isWin = result == 1;
switch (battleName)
{
- case "ArenaBattleField":
- PopupWindowsProcessor.Instance.Add(isWin ? "ArenaBattleVictoryWin" : "ArenaBattleFailWin", false);
+ case BattleConst.ArenaBattleField:
+ PopupWindowsProcessor.Instance.Add(isWin ? "ArenaBattleVictoryWin" : "ArenaBattleFailWin", false, BattleConst.ArenaBattleField);
+ break;
+ case BattleConst.BoneBattleField:
+ PopupWindowsProcessor.Instance.Add(isWin ? "BoneBattleVictoryWin" : "BoneBattleFailWin", false, BattleConst.BoneBattleField);
+ break;
+ case BattleConst.TianziBillboradBattleField:
+ PopupWindowsProcessor.Instance.Add("TianziBillboradVictoryWin", false, BattleConst.TianziBillboradBattleField);
break;
default:
- PopupWindowsProcessor.Instance.Add(isWin ? "BattleVictoryWin" : "BattleFailWin", false);
+ PopupWindowsProcessor.Instance.Add(isWin ? "BattleVictoryWin" : "BattleFailWin", false, BattleConst.StoryBossBattleField);
break;
}
}
@@ -49,7 +61,7 @@
bool isWin = result == 1;
switch (battleName)
{
- case "ArenaBattleField":
+ case BattleConst.ArenaBattleField:
if (isWin)
{
UIManager.Instance.OpenWindow<ArenaBattleVictoryWin>();
@@ -58,6 +70,20 @@
{
UIManager.Instance.OpenWindow<ArenaBattleFailWin>();
}
+ break;
+ case BattleConst.BoneBattleField:
+ if (isWin)
+ {
+ UIManager.Instance.OpenWindow<BoneBattleVictoryWin>();
+ }
+ else
+ {
+ UIManager.Instance.OpenWindow<BoneBattleFailWin>();
+ }
+ break;
+ case BattleConst.TianziBillboradBattleField:
+ TianziBillboradManager.Instance.isSweepVictory = false;
+ UIManager.Instance.OpenWindow<TianziBillboradVictoryWin>();
break;
default:
if (isWin)
@@ -70,6 +96,11 @@
}
break;
}
+
+ if (isWin)
+ {
+ SoundPlayer.Instance.PlayUIAudio(57);
+ }
}
//"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}}}}}
@@ -77,11 +108,29 @@
{
if (string.Empty == _guid)
return;
+ Debug.Log($"OnBattleEnd 缁撶畻 guid {_guid}");
var battle = BattleManager.Instance.GetBattleField(_guid);
if (battle == null)
return;
var battleName = battle.ToString();
- battleSettlementDic[battleName] = _data;
+ try
+ {
+ battleSettlementDic[battleName] = _data;
+ if (battleAwardDic.ContainsKey(battleName))
+ {
+ //鍚堝苟鎴樻姤鍜岀粨绠楁暟鎹�
+ JsonData extendData = battleAwardDic[battleName];
+ foreach (var key in extendData.Keys)
+ {
+ _data[key] = extendData[key];
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ Debug.LogError(e.ToString());
+ }
+
string activeBattleName = BattleManager.Instance.GetActiveBattleName();
@@ -104,6 +153,7 @@
public void WinShowOver(string battleName)
{
battleSettlementDic.Remove(battleName);
+ battleAwardDic.Remove(battleName);
var battle = BattleManager.Instance.GetActiveBattleFieldByName(battleName);
if (battle != null)
@@ -118,5 +168,255 @@
}
return battleSettlementDic[battleName];
}
+
+ public JsonData GetBattleSettlementByMapID(int mapID)
+ {
+ if (BattleConst.mapIDToBattleNameDic.ContainsKey(mapID))
+ {
+ return GetBattleSettlement(BattleConst.mapIDToBattleNameDic[mapID]);
+ }
+ return null;
+ }
+
+ public void UpdateSettlementData(HB431_tagSCTurnFightRet netData)
+ {
+ // 鍏堣幏寰楁垬鏂楃粨鏋滐紝濡傛灉闇�瑕佸睍绀烘垬鏂楋紝鍒欒姹傛垬鎶� 锛堝鏈変簺璺宠繃鎴樻枟琛ㄧ幇鐩存帴缁撶畻锛�
+ bool needBattleData = true;
+ var guid = UIHelper.ServerStringTrim(netData.GUID);
+ var mapID = (int)netData.MapID;
+ JsonData extendData2 = JsonMapper.ToObject(netData.AwardMsg);
+
+ battleAwardDic[BattleConst.mapIDToBattleNameDic[mapID]] = extendData2;
+
+ if (needBattleData)
+ {
+ Debug.Log("鎴樻枟鏃跺簭 鏀跺埌B431 骞惰姹備笅杞芥垬鎶�" + Time.time);
+ var date = UIHelper.ServerStringTrim(netData.PathDate);
+ RequestTurnFightData(guid, date, mapID);
+ }
+ else
+ {
+ JsonData extendData1 = JsonMapper.ToObject(netData.BatStatMsg);
+
+ JsonData turnFightStateData = new JsonData();
+ foreach (var key in extendData1.Keys)
+ {
+ turnFightStateData[key] = extendData1[key];
+ }
+ foreach (var key in extendData2.Keys)
+ {
+ turnFightStateData[key] = extendData2[key];
+ }
+
+ EventBroadcast.Instance.Broadcast<string, JsonData>(EventName.BATTLE_END, guid, turnFightStateData);
+ }
+
+ }
+ public void RequestTurnFightData(string guid, string date, int mapID)
+ {
+ //mobile.secondworld.net.cn:53080\S9006\20251202\3042602\5b11338f-cf2c-11f0-a0a0-000c29b22418.tfr
+ var serverID = UIHelper.GetServerIDByAccount(PlayerDatas.Instance.baseData.AccID);
+
+ var url = ServerListCenter.Instance.GetServerUrl(serverID);
+ string assetVersionUrl = string.Empty;
+
+ if (string.IsNullOrEmpty(date))
+ {
+ //鍏叡鎴樻姤 璺緞锛� C:\TurnFightReport\S鏈嶅姟鍣ㄧ紪鍙穃鍔熻兘鍦板浘ID\鎴樻姤GUID
+ assetVersionUrl = $"{url}/S{serverID}/{mapID}/{guid}.tfr";
+ }
+ else
+ {
+ //涓汉鎴樻姤 璺緞锛� C:\TurnFightReport\S鏈嶅姟鍣ㄧ紪鍙穃鏃ユ湡\鐜╁ID\鍔熻兘鍦板浘ID\鎴樻姤GUID
+ assetVersionUrl = $"{url}/S{serverID}/{date}/{PlayerDatas.Instance.baseData.PlayerID}/{mapID}/{guid}.tfr";
+ }
+ Debug.Log($"璇锋眰鎴樻姤: {assetVersionUrl}");
+ HttpRequestEx.UnityWebRequestTurnFightGet(assetVersionUrl, guid, 3, OnGetTurnFightData);
+ }
+
+ void OnGetTurnFightData(bool _ok, string guid, byte[] _result)
+ {
+ if (_ok)
+ {
+ ReadTurnFightInfo(_result);
+ }
+ else
+ {
+ Debug.Log($"璇锋眰鎴樻姤澶辫触");
+ UIManager.Instance.CloseWindow<MapLoadingWin>();
+ }
+ }
+
+ //鎴樻姤瀛樺偍鐨勬槸B430灏佸寘锛屾墍浠ラ渶瑕佽浆鍙態430灏佸寘
+ private void ReadTurnFightInfo(byte[] vBytes)
+ {
+ try
+ {
+ byte[] vPackBytes = vBytes;
+ GameNetPackBasic vNetpack;
+ byte[] vCmdBytes = new byte[2];
+ ServerType socketType = ServerType.B430;
+
+ Array.Copy(vPackBytes, 0, vCmdBytes, 0, 2);
+ var cmd = (ushort)((ushort)(vCmdBytes[0] << 8) + vCmdBytes[1]);
+
+ // 澶勭悊涓诲伐绋嬬殑灏佸寘
+ if (PackageRegedit.Contain(cmd))
+ {
+ vNetpack = PackageRegedit.TransPack(socketType, cmd, vPackBytes);
+ if (vNetpack != null)
+ {
+ GameNetSystem.Instance.PushPackage(vNetpack, socketType);
+ }
+ }
+
+ }
+ catch (Exception ex)
+ {
+ Debug.LogErrorFormat("ReadTurnFightInfo 鍒嗘瀽鎴樻姤寮傚父锛歿0}", ex);
+ }
+
+ }
+
+ #region 鎴樻枟缁撴灉璇︽儏
+ public BattleDetailMsg msg = new BattleDetailMsg();
+ public string BattleDetailBattleName = string.Empty;
+ public string BattleDetailMyName = string.Empty;
+ public string BattleDetailEnemyName = string.Empty;
+
+ public void OpenBattleDetailWin(string battleName)
+ {
+ if (UIManager.Instance.IsOpened<BattleDetailWin>())
+ return;
+
+ JsonData battleSettlement = GetBattleSettlement(battleName);
+ if (battleSettlement == null)
+ return;
+
+ msg = ParserBattleDetail(battleSettlement);
+ if (msg == null)
+ return;
+
+ BattleDetailBattleName = battleName;
+ UIManager.Instance.OpenWindow<BattleDetailWin>();
+ }
+
+ //鎴樻枟缁撴灉璇︽儏鐣岄潰鑾峰彇 鎴戞柟鍙戣捣鐨勬垬鏂楃殑涓晫鏂瑰悕瀛�
+ public string GetBattleDetailEnemyNameByMyStart(string battleName)
+ {
+ string detailName = string.Empty;
+ BattleField battleField = BattleManager.Instance.GetActiveBattleFieldByName(battleName);
+ if (battleField == null)
+ return detailName;
+
+ switch (battleName)
+ {
+ // 鏁屾柟鍚嶅瓧鏄疊oss鍚嶅瓧
+ case BattleConst.StoryBossBattleField:
+ case BattleConst.BoneBattleField:
+ case BattleConst.TianziBillboradBattleField:
+ BattleObject bossBattleObject = battleField.FindBoss();
+ if (bossBattleObject == null || bossBattleObject.teamHero == null)
+ return detailName;
+ detailName = bossBattleObject.teamHero.name;
+ break;
+ // 鏁屾柟鍚嶅瓧鏄鏂圭帺瀹跺悕瀛�
+ case BattleConst.ArenaBattleField:
+ if (!ArenaManager.Instance.TryGetPlayerInfo(ArenaManager.Instance.atkPlayerId, out ArenaMatchInfo info) || info == null)
+ return detailName;
+ detailName = info.PlayerName;
+ break;
+ }
+ return detailName;
+ }
+
+ public BattleDetailMsg ParserBattleDetail(JsonData jsonMsg)
+ {
+ if (jsonMsg == null)
+ return null;
+ try
+ {
+ string jsonStr = jsonMsg.ToJson();
+ BattleDetailMsg result = JsonMapper.ToObject<BattleDetailMsg>(jsonStr);
+ return result;
+ }
+ catch (Exception ex)
+ {
+ Debug.Log("瑙f瀽鎴樻枟鏁版嵁寮傚父: " + ex.Message);
+ }
+ return null;
+ }
+
+ // 宸﹁摑鍙崇孩
+ // 鐩墠鐜╁涓诲姩鍙戣捣鐨勯樀瀹逛竴瀹氭槸1锛屽鏂规槸 2, 濡傛灉鏄偅绉嶇郴缁熻嚜鍔ㄦ墦鐨勶紝涓�鑸�1-宸︼紝2-鍙�
+ public string GetFaction(bool isBlue)
+ {
+ return isBlue ? "1" : "2";
+ }
+
+ public List<BattleDetailHeroInfo> GetHeroInfoByFaction(BattleDetailMsg msg, string faction)
+ {
+ if (msg == null || msg.statInfo.IsNullOrEmpty())
+ return null;
+ int winFaction = msg.winFaction; // 鑾疯儨闃佃惀
+ Dictionary<string, Dictionary<string, BattleDetailHeroInfo>> lineupInfo = new Dictionary<string, Dictionary<string, BattleDetailHeroInfo>>();
+
+ if (!msg.statInfo.TryGetValue(faction, out lineupInfo) || lineupInfo.IsNullOrEmpty())
+ return null;
+ var lineupInfoKeyList = lineupInfo.Keys.ToList();
+ if (lineupInfoKeyList.IsNullOrEmpty())
+ return null;
+
+ // 鐩墠鍙彇绗竴涓樀瀹圭殑淇℃伅
+ string key = lineupInfoKeyList[0];
+ if (!lineupInfo.TryGetValue(key, out var heroInfoDict) || heroInfoDict.IsNullOrEmpty())
+ return null;
+
+ var heroInfoKeyList = heroInfoDict.Keys.ToList();
+ heroInfoKeyList = heroInfoKeyList
+ .OrderBy(key => int.Parse(key)) // 灏嗗瓧绗︿覆閿В鏋愪负鏁存暟鍚庤繘琛屾帓搴�
+ .ToList(); // 灏嗘帓搴忓悗鐨勭粨鏋滆浆鍥� List<string>
+
+ List<BattleDetailHeroInfo> res = new List<BattleDetailHeroInfo>();
+ foreach (var heroInfoKey in heroInfoKeyList)
+ {
+ if (!heroInfoDict.TryGetValue(heroInfoKey, out var heroInfo))
+ continue;
+ res.Add(heroInfo);
+ }
+ return res;
+ }
+ #endregion
+
}
+public class BattleDetailMsg
+{
+ public List<BattleDetailRewardItem> itemInfo;
+
+ public int winFaction;
+
+ // 瀵瑰簲 "statInfo"
+ // 缁撴瀯锛�<闃佃惀缂栧彿, <闃靛缂栧彿, <绔欎綅缂栧彿, 姝﹀皢鏁版嵁>>>
+ // 娉ㄦ剰锛欽SON涓殑閿� "1", "2" 鏄瓧绗︿覆锛屾墍浠ュ瓧鍏� Key 鐢� string
+ public Dictionary<string, Dictionary<string, Dictionary<string, BattleDetailHeroInfo>>> statInfo;
+}
+public class BattleDetailHeroInfo
+{
+ public int ObjID; // 瀹炰緥ID
+ public int HeroID; // 鐜╁闃靛姝﹀皢ID
+ public int NPCID; // NPCID
+ public int LV; // 姝﹀皢绛夌骇
+ public int Star; // 姝﹀皢鏄熺骇
+ public int Skin; // 姝﹀皢鐨偆ID
+ public long DefHurt; // 鎬绘壙浼�
+ public long CureHP; // 鎬绘不鐤�
+ public long AtkHurt; // 鎬昏緭鍑�
+ public int Dead; // 鏄惁闃典骸
+}
+
+public class BattleDetailRewardItem
+{
+ public int ItemID;
+ public int Count;
+}
\ No newline at end of file
--
Gitblit v1.8.0