Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB430_tagSCTurnFightReport.cs
@@ -21,6 +21,7 @@ string guid = UIHelper.ServerStringTrim(vNetData.GUID); canAddPack = false; Debug.Log("战斗时序 B430 开始处理战斗 " + Time.time); //约定 B430 内容(小包1长度WORD + 包1 + 小包2长度WORD + 包2) //约定第一个包是B424,先发过来的过滤报错通知 try @@ -86,11 +87,11 @@ #if UNITY_EDITOR string originPack = string.Empty; BattleField battleField = BattleManager.Instance.GetBattleField(guid); for (int i = 0; i < vPackList.Count; i++) { var pack = vPackList[i]; if (pack is HB427_tagSCUseSkill skill) { string heroName = skill.ObjID.ToString(); @@ -102,7 +103,7 @@ heroName = battleObj.teamHero.name; } } string skillName = SkillConfig.Get((int)skill.SkillID)?.SkillName ?? "Unknown"; originPack += $"[{pack.packUID}] HB427_tagSCUseSkill - ObjID:{skill.ObjID} HeroName:{heroName} SkillID:{skill.SkillID} SkillName:{skillName}\n"; } @@ -134,36 +135,36 @@ vPackList = AnalysisPackQueueAndDistribute(guid, vPackList); #if UNITY_EDITOR if (Launch.Instance.isOpenSkillLogFile) { string packDetail = "处理前 : " + originPack + "\n"; packDetail += "AnalysisPackQueueAndDistribute 处理后的包列表:\n"; packDetail += PrintPackListDetail(vPackList, 0, guid); if (Launch.Instance.isOpenSkillLogFile) { string packDetail = "处理前 : " + originPack + "\n"; packDetail += "AnalysisPackQueueAndDistribute 处理后的包列表:\n"; packDetail += PrintPackListDetail(vPackList, 0, guid); // 分段打印,避免消息被截断 int chunkSize = 15000; // Unity日志单条消息最大长度约16000字符 if (packDetail.Length > chunkSize) { int totalChunks = (packDetail.Length + chunkSize - 1) / chunkSize; for (int i = 0; i < totalChunks; i++) { int startIndex = i * chunkSize; int length = Mathf.Min(chunkSize, packDetail.Length - startIndex); string chunk = packDetail.Substring(startIndex, length); Debug.LogError($"[Part {i + 1}/{totalChunks}]\n{chunk}"); } } else { Debug.LogError(packDetail); } // 分段打印,避免消息被截断 int chunkSize = 15000; // Unity日志单条消息最大长度约16000字符 if (packDetail.Length > chunkSize) { int totalChunks = (packDetail.Length + chunkSize - 1) / chunkSize; for (int i = 0; i < totalChunks; i++) { int startIndex = i * chunkSize; int length = Mathf.Min(chunkSize, packDetail.Length - startIndex); string chunk = packDetail.Substring(startIndex, length); Debug.LogError($"[Part {i + 1}/{totalChunks}]\n{chunk}"); } } else { Debug.LogError(packDetail); } // 或者写入文件 string filePath = Application.dataPath + "/../BattleReport/PackageAnalysis_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".txt"; System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(filePath)); System.IO.File.WriteAllText(filePath, packDetail); Debug.LogError("包分析结果已保存到: " + filePath); } // 或者写入文件 string filePath = Application.dataPath + "/../BattleReport/PackageAnalysis_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".txt"; System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(filePath)); System.IO.File.WriteAllText(filePath, packDetail); Debug.LogError("包分析结果已保存到: " + filePath); } #endif for (int i = 0; i < vPackList.Count; i++) Main/System/Arena/ArenaBattleFailWin.cs
@@ -15,7 +15,7 @@ [SerializeField] TextEx txtFuncName; [SerializeField] ScrollerController scroller; JsonData jsonData; string battleName = "ArenaBattleField"; string battleName = BattleConst.ArenaBattleField; protected override void InitComponent() { Main/System/Arena/ArenaBattleVictoryWin.cs
@@ -79,7 +79,7 @@ [SerializeField] TextEx txtFuncName; [SerializeField] ScrollerController scroller; JsonData jsonData; string battleName = "ArenaBattleField"; string battleName = BattleConst.ArenaBattleField; protected override void OnPreOpen() { scroller.OnRefreshCell += OnRefreshCell; Main/System/Battle/BattleConst.cs
@@ -14,22 +14,41 @@ typeof(TianziBillboradBattleWin), }; // 战场名称 public const string StoryBattleField = "StoryBattleField"; public const string StoryBossBattleField = "StoryBossBattleField"; public const string ArenaBattleField = "ArenaBattleField"; public const string BoneBattleField = "BoneBattleField"; public const string TianziBillboradBattleField = "TianziBillboradBattleField"; public static Dictionary<string, string> battleNameToWinName = new Dictionary<string, string>() { { "StoryBattleField", "BattleWin" }, { "StoryBossBattleField", "StoryBossBattleWin" }, { "ArenaBattleField", "ArenaBattleWin" }, { "BoneBattleField", "BoneFieldBattleWin" }, { "TianziBillboradBattleField", "TianziBillboradBattleWin" }, { StoryBattleField, "BattleWin" }, { StoryBossBattleField, "StoryBossBattleWin" }, { ArenaBattleField, "ArenaBattleWin" }, { BoneBattleField, "BoneFieldBattleWin" }, { TianziBillboradBattleField, "TianziBillboradBattleWin" }, }; public static Dictionary<string, int> FieldNameToIndex = new Dictionary<string, int>() { { "StoryBossBattleField", 1 }, { "ArenaBattleField", 2 }, { "BoneBattleField", 3}, { "TianziBillboradBattleField", 4 }, { StoryBossBattleField, 1 }, { ArenaBattleField, 2 }, { BoneBattleField, 3}, { TianziBillboradBattleField, 4 }, }; //和 CreateBattleField 里的对应 public static Dictionary<int, string> mapIDToBattleNameDic = new Dictionary<int, string>() { {1, StoryBattleField}, {2, StoryBossBattleField}, {3, ArenaBattleField}, {30010, BoneBattleField}, {30020, TianziBillboradBattleField}, }; #endregion Main/System/Battle/BattleManager.cs
@@ -635,6 +635,7 @@ pack.ValueCount = (byte)valueList.Length; } GameNetSystem.Instance.SendInfo(pack); Debug.Log("战斗时序 发起 " + Time.time); } // 获取当前正在显示的战斗场景名称,如果没有则返回空字符串 Main/System/ClientVersion/VersionConfig.cs
@@ -79,7 +79,7 @@ } else { m_GameId = "xbqy"; m_GameId = "xssg"; } } Main/System/FirstCharge/FirstChargeManager.cs
@@ -140,7 +140,7 @@ { if (battleName == null || battleName == string.Empty) return; if (battleName == "TianziBillboradBattleField") if (battleName == BattleConst.TianziBillboradBattleField) return; if (!IsFuncOpen()) return; Main/System/Guild/GuildBossManager.cs
@@ -92,5 +92,40 @@ return null; } int lastGuildBossTime; // 获取公会中的伤害记录做排名 public void UpdateGuildBossInfo(HA513_tagMCFamilyActionInfo vNetData) { if (vNetData.ActionType != GuildManager.GuildBossActionType) { return; } GuildManager.Instance.TryGetFamilyActions(GuildManager.GuildBossActionType, out var familyActions); if (familyActions == null) { return; } foreach (var action in familyActions) { if (action.Value1 == 1) { return; } } } } public class PlayerGuildBossAtkInfo { public int playerID; public int atkTime; public int bzTime; public int atkCount; public long totalHurtValue; public int boxCnt; } Main/System/Login/ServerListCenter.cs
@@ -180,6 +180,18 @@ return data.name.Replace("@gm", ""); } // 获取服务器地址 public string GetServerUrl(int id, string defaultHead = "http://", int replacePort = 0) { var data = GetServerDataEx(id); if (replacePort > 0) { return $"{defaultHead}{data.region_domain}:{replacePort}"; } return $"{defaultHead}{data.region_domain}:{data.login_port}"; } public void RequestJumpUrl() { if (VersionUtility.Instance.InIosAuditTime()) Main/System/Settlement/BattleFailWin.cs
@@ -11,7 +11,7 @@ [SerializeField] Button tipEquipBtn; [SerializeField] Button tipHeroPosBtn; string battleName = "StoryBossBattleField"; string battleName = BattleConst.StoryBossBattleField; protected override void InitComponent() { tipEquipBtn.AddListener(() => Main/System/Settlement/BattleSettlementManager.cs
@@ -11,6 +11,8 @@ { //结算后需清除 <battleName,JsonData> Dictionary<string, JsonData> battleSettlementDic = new Dictionary<string, JsonData>(); Dictionary<string, JsonData> battleAwardDic = new Dictionary<string, JsonData>(); //B431 另外通报奖励 // public string notifyGuid = string.Empty; @@ -31,6 +33,7 @@ public void OnBeforePlayerDataInitialize() { battleSettlementDic.Clear(); battleAwardDic.Clear(); } public void AddPop(string battleName, int result) @@ -38,13 +41,13 @@ bool isWin = result == 1; switch (battleName) { case "ArenaBattleField": case BattleConst.ArenaBattleField: PopupWindowsProcessor.Instance.Add(isWin ? "ArenaBattleVictoryWin" : "ArenaBattleFailWin", false); break; case "BoneBattleField": case BattleConst.BoneBattleField: PopupWindowsProcessor.Instance.Add(isWin ? "BoneBattleVictoryWin" : "BoneBattleFailWin", false); break; case "TianziBillboradBattleField": case BattleConst.TianziBillboradBattleField: PopupWindowsProcessor.Instance.Add("TianziBillboradVictoryWin", false); break; default: @@ -58,7 +61,7 @@ bool isWin = result == 1; switch (battleName) { case "ArenaBattleField": case BattleConst.ArenaBattleField: if (isWin) { UIManager.Instance.OpenWindow<ArenaBattleVictoryWin>(); @@ -68,7 +71,7 @@ UIManager.Instance.OpenWindow<ArenaBattleFailWin>(); } break; case "BoneBattleField": case BattleConst.BoneBattleField: if (isWin) { UIManager.Instance.OpenWindow<BoneBattleVictoryWin>(); @@ -78,7 +81,7 @@ UIManager.Instance.OpenWindow<BoneBattleFailWin>(); } break; case "TianziBillboradBattleField": case BattleConst.TianziBillboradBattleField: TianziBillboradManager.Instance.isSweepVictory = false; UIManager.Instance.OpenWindow<TianziBillboradVictoryWin>(); break; @@ -110,6 +113,15 @@ return; var battleName = battle.ToString(); battleSettlementDic[battleName] = _data; if (battleAwardDic.ContainsKey(battleName)) { //合并战报和结算数据 JsonData extendData = battleAwardDic[battleName]; foreach (var key in extendData.Keys) { _data[key] = extendData[key]; } } string activeBattleName = BattleManager.Instance.GetActiveBattleName(); @@ -132,6 +144,7 @@ public void WinShowOver(string battleName) { battleSettlementDic.Remove(battleName); battleAwardDic.Remove(battleName); var battle = BattleManager.Instance.GetActiveBattleFieldByName(battleName); if (battle != null) @@ -147,29 +160,66 @@ 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 date = UIHelper.ServerStringTrim(netData.PathDate); RequestTurnFightData(guid, date, (int)netData.MapID); 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 = "http://mobile.secondworld.net.cn:53080"; var url = ServerListCenter.Instance.GetServerUrl(serverID, replacePort:53080); string assetVersionUrl = string.Empty; if (string.IsNullOrEmpty(date)) { //公共战报 路径: C:\TurnFightReport\S服务器编号\功能地图ID\战报GUID assetVersionUrl = $"{url}/S{serverID}/{mapID}//{guid}.tfr"; assetVersionUrl = $"{url}/S{serverID}/{mapID}/{guid}.tfr"; } else { //个人战报 路径: C:\TurnFightReport\S服务器编号\日期\玩家ID\战报GUID assetVersionUrl = $"{url}/S{serverID}/{date}/{PlayerDatas.Instance.baseData.PlayerID}/{guid}.tfr"; //个人战报 路径: C:\TurnFightReport\S服务器编号\日期\玩家ID\功能地图ID\战报GUID assetVersionUrl = $"{url}/S{serverID}/{date}/{PlayerDatas.Instance.baseData.PlayerID}/{mapID}/{guid}.tfr"; } HttpRequest.Instance.UnityWebRequestTurnFightGet(assetVersionUrl, guid, 3, OnGetTurnFightData); @@ -183,8 +233,7 @@ } } GameNetEncode encoder = new GameNetEncode(); //单独 //战报存储的是B430封包,所以需要转发B430封包 private void ReadTurnFightInfo(byte[] vBytes) { try @@ -194,11 +243,8 @@ byte[] vCmdBytes = new byte[2]; ServerType socketType = ServerType.B430; // vPackBytes = encoder.BaseXorSub(vPackBytes); Array.Copy(vPackBytes, 0, vCmdBytes, 0, 2); var cmd = (ushort)((ushort)(vCmdBytes[0] << 8) + vCmdBytes[1]); bool isRegist = false; // 未注册封包处理 // 处理主工程的封包 if (PackageRegedit.Contain(cmd)) @@ -207,17 +253,9 @@ if (vNetpack != null) { GameNetSystem.Instance.PushPackage(vNetpack, socketType); isRegist = true; } } // 未注册封包处理 if (!isRegist) { #if UNITY_EDITOR PackageRegedit.TransPack(socketType, cmd, vPackBytes); #endif } } catch (Exception ex) { Main/System/Settlement/BattleVictoryWin.cs
@@ -75,7 +75,7 @@ [SerializeField] ScrollerController scroller; string battleName = "StoryBossBattleField"; string battleName = BattleConst.StoryBossBattleField; protected override void OnPreOpen() { scroller.OnRefreshCell += OnRefreshCell; Main/System/Settlement/BoneBattleFailWin.cs
@@ -11,7 +11,7 @@ [SerializeField] TextEx txtFuncName; [SerializeField] Button tipEquipBtn; [SerializeField] Button tipHeroPosBtn; string battleName = "BoneBattleField"; string battleName = BattleConst.BoneBattleField; protected override void InitComponent() { tipEquipBtn.AddListener(() => Main/System/Settlement/BoneBattleVictoryWin.cs
@@ -7,7 +7,7 @@ [SerializeField] TextEx txtFuncName; [SerializeField] ScrollerController scroller; string battleName = "BoneBattleField"; string battleName = BattleConst.BoneBattleField; protected override void OnPreOpen() { scroller.OnRefreshCell += OnRefreshCell; Main/System/Settlement/TianziBillboradVictoryWin.cs
@@ -7,7 +7,7 @@ [SerializeField] ScrollerController scroller; [SerializeField] TextEx txtHunt; bool isSweepVictory = false; string battleName = "TianziBillboradBattleField"; string battleName = BattleConst.TianziBillboradBattleField; protected override void OnPreOpen() { base.OnPreOpen(); Main/System/TianziBillborad/TianziBillboradManager.cs
@@ -113,7 +113,7 @@ if (battle == null) return; var battleName = battle.ToString(); if (battleName != "TianziBillboradBattleField") if (battleName != BattleConst.TianziBillboradBattleField) return; if (data == null || !data.ContainsKey("totalHurt")) return;