From 1c91ecfa6bbf5f81815a84f7e55c5c003e9d41dd Mon Sep 17 00:00:00 2001 From: raphaeIl Date: Tue, 19 Nov 2024 08:46:10 -0500 Subject: [PATCH] Initial Implementation of Saving and Loading Data from Official -> PS (replace accountid = 1) --- .../ModelExtensions/AccountExtensions.cs | 11 + SCHALE.GameClient/GameClient.cs | 36 ++- SCHALE.GameServer/Commands/LoadDataCommand.cs | 261 ++++++++++++++++++ SCHALE.GameServer/Utils/PcapUtils.cs | 28 +- 4 files changed, 314 insertions(+), 22 deletions(-) create mode 100644 SCHALE.GameServer/Commands/LoadDataCommand.cs diff --git a/SCHALE.Common/Database/ModelExtensions/AccountExtensions.cs b/SCHALE.Common/Database/ModelExtensions/AccountExtensions.cs index 097afa1..d2e1583 100644 --- a/SCHALE.Common/Database/ModelExtensions/AccountExtensions.cs +++ b/SCHALE.Common/Database/ModelExtensions/AccountExtensions.cs @@ -7,6 +7,7 @@ foreach (var character in characters) { character.AccountServerId = account.ServerId; + character.ServerId = 0; // just in case if this key was set (like from pcaps) context.Characters.Add(character); } @@ -24,7 +25,10 @@ if (existingEquipment != null && equipment.BoundCharacterServerId == default) existingEquipment.StackCount += equipment.StackCount; else + { + equipment.ServerId = 0; context.Equipment.Add(equipment); + } } return [.. equipmentDB]; @@ -54,7 +58,10 @@ existingItem.StackCount += item.StackCount; item.ServerId = existingItem.ServerId; } else + { + item.ServerId = 0; context.Items.Add(item); + } context.SaveChanges(); } @@ -67,6 +74,8 @@ foreach (var gear in gears) { gear.AccountServerId = account.ServerId; + gear.ServerId = 0; + context.Gears.Add(gear); var targetCharacter = account.Characters.FirstOrDefault(x => x.ServerId == gear.BoundCharacterServerId); @@ -114,6 +123,7 @@ foreach (var cafe in cafes) { cafe.AccountServerId = account.ServerId; + cafe.CafeDBId = 0; context.Cafes.Add(cafe); } @@ -125,6 +135,7 @@ foreach (var furniture in furnitures) { furniture.AccountServerId = account.ServerId; + furniture.ServerId = 0; account.Furnitures.Add(furniture); } diff --git a/SCHALE.GameClient/GameClient.cs b/SCHALE.GameClient/GameClient.cs index 58db412..5955f5c 100644 --- a/SCHALE.GameClient/GameClient.cs +++ b/SCHALE.GameClient/GameClient.cs @@ -1,18 +1,9 @@ using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc.ModelBinding.Binders; using Microsoft.IdentityModel.Tokens; using MX.Core.Crypto; -using Newtonsoft.Json.Linq; -using SCHALE.Common.Crypto; -using SCHALE.Common.Crypto.XXHash; -using SCHALE.Common.FlatData; using SCHALE.Common.NetworkProtocol; using SCHALE.GameServer.Utils; using Serilog; -using System.Collections; -using System.Linq; -using System.Net; -using System.Net.Http.Headers; using System.Text.Json; namespace SCHALE.GameServer.Services @@ -61,8 +52,23 @@ namespace SCHALE.GameServer.Services gameClient.MxToken = args[1]; } - await gameClient.SendPostRequestAsync(OFFICIAL_API_URL, new AcademyGetInfoRequest(){ }); - /* + await gameClient.SendPostRequestAsync(OFFICIAL_API_URL, new AccountLoginSyncRequest() + { + SyncProtocols = [Protocol.Item_List], + }); + + //var EliminateRaid_CreateBattlePcap = PcapUtils.GetPacketFromPcap(Protocol.EliminateRaid_CreateBattle, PacketType.Request); + //var EliminateRaid_EndBattlePcap = PcapUtils.GetPacketFromPcap(Protocol.EliminateRaid_EndBattle, PacketType.Request); + + //EliminateRaid_CreateBattlePcap.IsPractice = false; + //EliminateRaid_EndBattlePcap.IsPractice = false; + + //await gameClient.SendPostRequestAsync(OFFICIAL_API_URL, EliminateRaid_CreateBattlePcap); + //await gameClient.SendPostRequestAsync(OFFICIAL_API_URL, EliminateRaid_EndBattlePcap); + //EliminateRaid_EndBattlePcap.RaidServerId = 2; + + //await gameClient.SendPostRequestAsync(OFFICIAL_API_URL, new AcademyGetInfoRequest(){ }); + /* await gameClient.SendPostRequestAsync(OFFICIAL_API_URL, new ShopBuyGacha3Request() { FreeRecruitId = 0, @@ -111,7 +117,7 @@ namespace SCHALE.GameServer.Services */ } - public async Task SendPostRequestAsync(string url, T requestPacket) where T : RequestPacket + public async Task SendPostRequestAsync(string url, T requestPacket) where T : RequestPacket { requestPacket.SessionKey = new() { @@ -125,6 +131,8 @@ namespace SCHALE.GameServer.Services requestPacket.IsTest = false; string packetJsonStr = JsonSerializer.Serialize((T)requestPacket); + //packetJsonStr = "{{\"Protocol\":45006,\"EchelonId\":1,\"RaidServerId\":0,\"IsPractice\":true,\"Summary\":{\"IsAbort\":false,\"IsDefeatBattle\":false,\"HashKey\":0,\"IsBossBattle\":true,\"BattleType\":16384,\"StageId\":2032301,\"GroundId\":6022301,\"Winner\":\"Group01\",\"EndType\":4,\"EndFrame\":4983,\"Group01Summary\":{\"TeamId\":1,\"LeaderEntityId\":{\"uniqueId\":16777217},\"Heroes\":[{\"ServerId\":278143883,\"OwnerAccountId\":50868960,\"BattleEntityId\":{\"uniqueId\":16777217},\"CharacterId\":10036,\"CostumeId\":0,\"Grade\":5,\"Level\":52,\"PotentialStatLevel\":{\"MaxHP\":0,\"AttackPower\":0,\"HealPower\":0},\"ExSkillLevel\":1,\"PublicSkillLevel\":3,\"PassiveSkillLevel\":1,\"ExtraPassiveSkillLevel\":3,\"FavorRank\":7,\"StatSnapshotCollection\":[{\"Stat\":1,\"Start\":21369,\"End\":21369},{\"Stat\":2,\"Start\":2354,\"End\":2354},{\"Stat\":3,\"Start\":100,\"End\":100},{\"Stat\":4,\"Start\":4641,\"End\":4641},{\"Stat\":5,\"Start\":101,\"End\":101},{\"Stat\":7,\"Start\":1086,\"End\":1086},{\"Stat\":9,\"Start\":282,\"End\":282},{\"Stat\":12,\"Start\":20000,\"End\":24624},{\"Stat\":30,\"Start\":10000,\"End\":10000},{\"Stat\":34,\"Start\":10000,\"End\":10000},{\"Stat\":42,\"Start\":700,\"End\":775},{\"Stat\":44,\"Start\":0,\"End\":0}],\"HPRateBefore\":10000,\"HPRateAfter\":9922,\"CrowdControlCount\":0,\"CrowdControlDuration\":0,\"EvadeCount\":14,\"DamageImmuneCount\":0,\"CrowdControlImmuneCount\":0,\"MaxAttackPower\":3505,\"AverageCriticalRate\":2307,\"AverageStabilityRate\":8517,\"AverageAccuracyRate\":8188,\"DeadFrame\":-1,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":1,\"GivenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":1,\"CalculatedSum\":99250,\"AppliedSum\":40481,\"Count\":18,\"CriticalMultiplierMax\":19624,\"CriticalCount\":4,\"CalculatedMin\":4010,\"CalculatedMax\":8400,\"AppliedMin\":378,\"AppliedMax\":8448},{\"EntityType\":\"Character\",\"Category\":1,\"Source\":5,\"CalculatedSum\":49467,\"AppliedSum\":0,\"Count\":38,\"CriticalMultiplierMax\":19624,\"CriticalCount\":9,\"CalculatedMin\":955,\"CalculatedMax\":2006,\"AppliedMin\":0,\"AppliedMax\":0},{\"EntityType\":\"Character\",\"Category\":1,\"Source\":3,\"CalculatedSum\":229367,\"AppliedSum\":12546,\"Count\":16,\"CriticalMultiplierMax\":19624,\"CriticalCount\":6,\"CalculatedMin\":9808,\"CalculatedMax\":20496,\"AppliedMin\":0,\"AppliedMax\":3711},{\"EntityType\":\"Character\",\"Category\":1,\"Source\":2,\"CalculatedSum\":450638,\"AppliedSum\":67764,\"Count\":32,\"CriticalMultiplierMax\":19624,\"CriticalCount\":5,\"CalculatedMin\":9926,\"CalculatedMax\":20251,\"AppliedMin\":825,\"AppliedMax\":3711}],\"TakenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":1,\"CalculatedSum\":264,\"AppliedSum\":167,\"Count\":6,\"CriticalMultiplierMax\":10000,\"CriticalCount\":0,\"CalculatedMin\":22,\"CalculatedMax\":86,\"AppliedMin\":13,\"AppliedMax\":81}],\"Equipments\":[{\"ServerId\":1592147985,\"UniqueId\":1001,\"Level\":20,\"Tier\":2},{\"ServerId\":1592251648,\"UniqueId\":6001,\"Level\":20,\"Tier\":2},{\"ServerId\":1694587612,\"UniqueId\":8000,\"Level\":10,\"Tier\":1}],\"CharacterWeapon\":{\"UniqueId\":10036,\"StarGrade\":1,\"Level\":1},\"SkillCount\":{\"PublicSkill01\":7,\"ExSkill01\":4},\"KillLog\":{\"16777224\":311,\"16777226\":537,\"16777227\":602,\"16777231\":682,\"16777236\":1051,\"16777237\":1051,\"16777239\":1041,\"16777240\":1187,\"16777243\":1058,\"16777245\":1066,\"16777247\":1041,\"16777248\":1041,\"16777249\":1066,\"16777250\":1066,\"16777256\":1599,\"16777259\":1970,\"16777260\":1970,\"16777262\":1970,\"16777264\":1970,\"16777268\":1834,\"16777271\":2550,\"16777275\":2365,\"16777279\":2430,\"16777290\":3127,\"16777291\":3152,\"16777292\":3137,\"16777293\":3152,\"16777296\":3127,\"16777297\":3039,\"16777298\":3152,\"16777299\":3127,\"16777300\":3152,\"16777307\":3398,\"16777310\":3718,\"16777312\":3924,\"16777314\":4191,\"16777317\":4071,\"16777319\":3846,\"16777322\":4479,\"16777324\":4485,\"16777325\":4494,\"16777326\":4499,\"16777328\":4469,\"16777329\":4469,\"16777330\":4870,\"16777331\":4740,\"16777332\":4631}},{\"ServerId\":1697599534,\"OwnerAccountId\":50868960,\"BattleEntityId\":{\"uniqueId\":16777218},\"CharacterId\":10014,\"CostumeId\":0,\"Grade\":3,\"Level\":51,\"PotentialStatLevel\":{\"MaxHP\":0,\"AttackPower\":0,\"HealPower\":0},\"ExSkillLevel\":1,\"PublicSkillLevel\":1,\"PassiveSkillLevel\":1,\"ExtraPassiveSkillLevel\":1,\"FavorRank\":1,\"StatSnapshotCollection\":[{\"Stat\":1,\"Start\":24420,\"End\":24420},{\"Stat\":2,\"Start\":1740,\"End\":1740},{\"Stat\":3,\"Start\":110,\"End\":110},{\"Stat\":4,\"Start\":3751,\"End\":3751},{\"Stat\":5,\"Start\":108,\"End\":108},{\"Stat\":7,\"Start\":1066,\"End\":1066},{\"Stat\":9,\"Start\":246,\"End\":246},{\"Stat\":12,\"Start\":20000,\"End\":24624},{\"Stat\":30,\"Start\":10000,\"End\":10000},{\"Stat\":34,\"Start\":10000,\"End\":10000},{\"Stat\":42,\"Start\":700,\"End\":775},{\"Stat\":44,\"Start\":0,\"End\":0}],\"HPRateBefore\":10000,\"HPRateAfter\":9796,\"CrowdControlCount\":0,\"CrowdControlDuration\":0,\"EvadeCount\":42,\"DamageImmuneCount\":0,\"CrowdControlImmuneCount\":0,\"MaxAttackPower\":2091,\"AverageCriticalRate\":2727,\"AverageStabilityRate\":8897,\"AverageAccuracyRate\":8000,\"DeadFrame\":-1,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":1,\"GivenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":1,\"CalculatedSum\":319804,\"AppliedSum\":57548,\"Count\":97,\"CriticalMultiplierMax\":19624,\"CriticalCount\":27,\"CalculatedMin\":2736,\"CalculatedMax\":4168,\"AppliedMin\":0,\"AppliedMax\":2177},{\"EntityType\":\"Character\",\"Category\":1,\"Source\":3,\"CalculatedSum\":46190,\"AppliedSum\":6189,\"Count\":3,\"CriticalMultiplierMax\":10000,\"CriticalCount\":0,\"CalculatedMin\":13976,\"CalculatedMax\":17912,\"AppliedMin\":1166,\"AppliedMax\":3711}],\"TakenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":1,\"CalculatedSum\":933,\"AppliedSum\":500,\"Count\":29,\"CriticalMultiplierMax\":15000,\"CriticalCount\":3,\"CalculatedMin\":22,\"CalculatedMax\":86,\"AppliedMin\":7,\"AppliedMax\":80}],\"SkillCount\":{\"PublicSkill01\":6,\"ExSkill01\":2},\"KillLog\":{\"16777221\":419,\"16777222\":323,\"16777232\":737,\"16777235\":836,\"16777242\":995,\"16777244\":1092,\"16777246\":1140,\"16777261\":1750,\"16777266\":1953,\"16777273\":2324,\"16777274\":2362,\"16777277\":2400,\"16777309\":3616,\"16777313\":3973,\"16777316\":4074,\"16777318\":3829,\"16777327\":4443}},{\"ServerId\":1715188081,\"OwnerAccountId\":50868960,\"BattleEntityId\":{\"uniqueId\":16777219},\"CharacterId\":10040,\"CostumeId\":0,\"Grade\":3,\"Level\":52,\"PotentialStatLevel\":{\"MaxHP\":0,\"AttackPower\":0,\"HealPower\":0},\"ExSkillLevel\":1,\"PublicSkillLevel\":1,\"PassiveSkillLevel\":1,\"ExtraPassiveSkillLevel\":1,\"FavorRank\":6,\"StatSnapshotCollection\":[{\"Stat\":1,\"Start\":31409,\"End\":35806},{\"Stat\":2,\"Start\":1449,\"End\":1449},{\"Stat\":3,\"Start\":127,\"End\":127},{\"Stat\":4,\"Start\":4160,\"End\":4160},{\"Stat\":5,\"Start\":109,\"End\":109},{\"Stat\":7,\"Start\":1307,\"End\":1307},{\"Stat\":9,\"Start\":218,\"End\":218},{\"Stat\":12,\"Start\":20000,\"End\":21824},{\"Stat\":30,\"Start\":10000,\"End\":10000},{\"Stat\":34,\"Start\":10000,\"End\":10000},{\"Stat\":42,\"Start\":700,\"End\":775},{\"Stat\":44,\"Start\":0,\"End\":0}],\"HPRateBefore\":10000,\"HPRateAfter\":9476,\"CrowdControlCount\":0,\"CrowdControlDuration\":0,\"EvadeCount\":319,\"DamageImmuneCount\":0,\"CrowdControlImmuneCount\":0,\"MaxAttackPower\":1449,\"AverageCriticalRate\":2542,\"AverageStabilityRate\":8862,\"AverageAccuracyRate\":7814,\"DeadFrame\":-1,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":1,\"GivenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":1,\"CalculatedSum\":240420,\"AppliedSum\":42986,\"Count\":117,\"CriticalMultiplierMax\":16824,\"CriticalCount\":30,\"CalculatedMin\":1758,\"CalculatedMax\":2313,\"AppliedMin\":0,\"AppliedMax\":946},{\"EntityType\":\"Character\",\"Category\":1,\"Source\":3,\"CalculatedSum\":7916,\"AppliedSum\":1312,\"Count\":1,\"CriticalMultiplierMax\":10000,\"CriticalCount\":0,\"CalculatedMin\":7916,\"CalculatedMax\":7916,\"AppliedMin\":1312,\"AppliedMax\":1312}],\"TakenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":1,\"CalculatedSum\":6488,\"AppliedSum\":1879,\"Count\":163,\"CriticalMultiplierMax\":15000,\"CriticalCount\":11,\"CalculatedMin\":22,\"CalculatedMax\":261,\"AppliedMin\":7,\"AppliedMax\":30}],\"Equipments\":[{\"ServerId\":1726081170,\"UniqueId\":3000,\"Level\":1,\"Tier\":1},{\"ServerId\":1726081290,\"UniqueId\":5000,\"Level\":1,\"Tier\":1},{\"ServerId\":1726081335,\"UniqueId\":7000,\"Level\":1,\"Tier\":1}],\"SkillCount\":{\"PublicSkill01\":5},\"KillLog\":{\"16777228\":655,\"16777229\":542,\"16777258\":1917,\"16777263\":1859,\"16777265\":1795,\"16777321\":4088}},{\"ServerId\":1177637528,\"OwnerAccountId\":50868960,\"BattleEntityId\":{\"uniqueId\":16777220},\"CharacterId\":10052,\"CostumeId\":0,\"Grade\":4,\"Level\":52,\"PotentialStatLevel\":{\"MaxHP\":0,\"AttackPower\":0,\"HealPower\":0},\"ExSkillLevel\":1,\"PublicSkillLevel\":1,\"PassiveSkillLevel\":1,\"ExtraPassiveSkillLevel\":1,\"FavorRank\":7,\"StatSnapshotCollection\":[{\"Stat\":1,\"Start\":20832,\"End\":23748},{\"Stat\":2,\"Start\":1365,\"End\":1365},{\"Stat\":3,\"Start\":100,\"End\":100},{\"Stat\":4,\"Start\":4198,\"End\":4198},{\"Stat\":5,\"Start\":100,\"End\":100},{\"Stat\":7,\"Start\":1090,\"End\":1090},{\"Stat\":9,\"Start\":201,\"End\":201},{\"Stat\":12,\"Start\":20000,\"End\":21824},{\"Stat\":30,\"Start\":10000,\"End\":10000},{\"Stat\":34,\"Start\":10000,\"End\":10000},{\"Stat\":42,\"Start\":700,\"End\":775},{\"Stat\":44,\"Start\":0,\"End\":0}],\"HPRateBefore\":10000,\"HPRateAfter\":9886,\"CrowdControlCount\":0,\"CrowdControlDuration\":0,\"EvadeCount\":5,\"DamageImmuneCount\":0,\"CrowdControlImmuneCount\":0,\"MaxAttackPower\":1365,\"AverageCriticalRate\":2686,\"AverageStabilityRate\":8480,\"AverageAccuracyRate\":7976,\"DeadFrame\":-1,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":1,\"GivenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":1,\"CalculatedSum\":70436,\"AppliedSum\":41004,\"Count\":31,\"CriticalMultiplierMax\":16824,\"CriticalCount\":5,\"CalculatedMin\":1912,\"CalculatedMax\":2712,\"AppliedMin\":0,\"AppliedMax\":2568},{\"EntityType\":\"Character\",\"Category\":1,\"Source\":3,\"CalculatedSum\":338036,\"AppliedSum\":5294,\"Count\":36,\"CriticalMultiplierMax\":16824,\"CriticalCount\":13,\"CalculatedMin\":7756,\"CalculatedMax\":10850,\"AppliedMin\":0,\"AppliedMax\":1627}],\"TakenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":1,\"CalculatedSum\":282,\"AppliedSum\":272,\"Count\":7,\"CriticalMultiplierMax\":15000,\"CriticalCount\":1,\"CalculatedMin\":22,\"CalculatedMax\":86,\"AppliedMin\":20,\"AppliedMax\":81}],\"Equipments\":[{\"ServerId\":1594910537,\"UniqueId\":3000,\"Level\":1,\"Tier\":1},{\"ServerId\":1592474928,\"UniqueId\":6000,\"Level\":1,\"Tier\":1},{\"ServerId\":1694588019,\"UniqueId\":7000,\"Level\":1,\"Tier\":1}],\"SkillCount\":{\"ExSkill01\":3,\"PublicSkill01\":5},\"KillLog\":{\"16777223\":361,\"16777225\":301,\"16777230\":507,\"16777233\":736,\"16777234\":797,\"16777257\":1636,\"16777267\":1913,\"16777269\":2070,\"16777272\":2226,\"16777276\":2284,\"16777280\":2345,\"16777284\":2404,\"16777303\":3435,\"16777306\":3495,\"16777311\":4098,\"16777320\":4158}}],\"Supporters\":[{\"ServerId\":2388633606,\"OwnerAccountId\":50868960,\"BattleEntityId\":{\"uniqueId\":1073741825},\"CharacterId\":20036,\"CostumeId\":0,\"Grade\":5,\"Level\":53,\"PotentialStatLevel\":{\"MaxHP\":0,\"AttackPower\":0,\"HealPower\":0},\"ExSkillLevel\":1,\"PublicSkillLevel\":1,\"PassiveSkillLevel\":1,\"ExtraPassiveSkillLevel\":1,\"FavorRank\":1,\"StatSnapshotCollection\":[{\"Stat\":1,\"Start\":11218,\"End\":11218},{\"Stat\":2,\"Start\":2779,\"End\":3168},{\"Stat\":3,\"Start\":227,\"End\":227},{\"Stat\":4,\"Start\":5035,\"End\":5035},{\"Stat\":5,\"Start\":686,\"End\":686},{\"Stat\":7,\"Start\":755,\"End\":755},{\"Stat\":9,\"Start\":263,\"End\":263},{\"Stat\":12,\"Start\":20000,\"End\":21824},{\"Stat\":30,\"Start\":10000,\"End\":10000},{\"Stat\":34,\"Start\":10000,\"End\":10000},{\"Stat\":42,\"Start\":700,\"End\":775},{\"Stat\":44,\"Start\":0,\"End\":0}],\"HPRateBefore\":0,\"HPRateAfter\":0,\"CrowdControlCount\":0,\"CrowdControlDuration\":0,\"EvadeCount\":0,\"DamageImmuneCount\":0,\"CrowdControlImmuneCount\":0,\"MaxAttackPower\":3168,\"AverageCriticalRate\":3333,\"AverageStabilityRate\":8822,\"AverageAccuracyRate\":10000,\"DeadFrame\":-1,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":1,\"GivenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":3,\"CalculatedSum\":95888,\"AppliedSum\":21788,\"Count\":17,\"CriticalMultiplierMax\":16824,\"CriticalCount\":7,\"CalculatedMin\":5180,\"CalculatedMax\":6216,\"AppliedMin\":160,\"AppliedMax\":3266},{\"EntityType\":\"Character\",\"Category\":1,\"Source\":2,\"CalculatedSum\":679362,\"AppliedSum\":96652,\"Count\":19,\"CriticalMultiplierMax\":16824,\"CriticalCount\":5,\"CalculatedMin\":32738,\"CalculatedMax\":40224,\"AppliedMin\":1312,\"AppliedMax\":36874}],\"SkillCount\":{\"PublicSkill01\":4,\"ExSkill01\":4},\"KillLog\":{\"16777238\":1123,\"16777251\":1210,\"16777252\":1210,\"16777253\":1210,\"16777254\":1210,\"16777255\":1210,\"16777270\":2267,\"16777278\":2267,\"16777281\":2422,\"16777282\":2422,\"16777283\":2422,\"16777285\":2422,\"16777286\":2422,\"16777287\":2422,\"16777288\":2422,\"16777289\":4982,\"16777294\":3231,\"16777295\":3231,\"16777301\":3511,\"16777302\":3511,\"16777304\":3511,\"16777305\":3511,\"16777308\":3511,\"16777315\":4281}},{\"ServerId\":1177644207,\"OwnerAccountId\":50868960,\"BattleEntityId\":{\"uniqueId\":1073741826},\"CharacterId\":20020,\"CostumeId\":0,\"Grade\":5,\"Level\":52,\"PotentialStatLevel\":{\"MaxHP\":0,\"AttackPower\":0,\"HealPower\":0},\"ExSkillLevel\":1,\"PublicSkillLevel\":1,\"PassiveSkillLevel\":2,\"ExtraPassiveSkillLevel\":1,\"FavorRank\":8,\"StatSnapshotCollection\":[{\"Stat\":1,\"Start\":20508,\"End\":20508},{\"Stat\":2,\"Start\":2143,\"End\":2439},{\"Stat\":3,\"Start\":390,\"End\":390},{\"Stat\":4,\"Start\":4682,\"End\":4682},{\"Stat\":5,\"Start\":714,\"End\":714},{\"Stat\":7,\"Start\":1151,\"End\":1151},{\"Stat\":9,\"Start\":318,\"End\":318},{\"Stat\":12,\"Start\":20000,\"End\":21824},{\"Stat\":30,\"Start\":10000,\"End\":10000},{\"Stat\":34,\"Start\":10000,\"End\":10000},{\"Stat\":42,\"Start\":700,\"End\":775},{\"Stat\":44,\"Start\":0,\"End\":0}],\"HPRateBefore\":0,\"HPRateAfter\":0,\"CrowdControlCount\":0,\"CrowdControlDuration\":0,\"EvadeCount\":0,\"DamageImmuneCount\":0,\"CrowdControlImmuneCount\":0,\"MaxAttackPower\":2439,\"AverageCriticalRate\":6000,\"AverageStabilityRate\":8482,\"AverageAccuracyRate\":10000,\"DeadFrame\":-1,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":1,\"GivenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":3,\"CalculatedSum\":19227,\"AppliedSum\":6650,\"Count\":5,\"CriticalMultiplierMax\":16824,\"CriticalCount\":3,\"CalculatedMin\":3464,\"CalculatedMax\":4334,\"AppliedMin\":0,\"AppliedMax\":3711}],\"Equipments\":[{\"ServerId\":1594909878,\"UniqueId\":3001,\"Level\":20,\"Tier\":2},{\"ServerId\":1594909884,\"UniqueId\":6001,\"Level\":20,\"Tier\":2},{\"ServerId\":1623780758,\"UniqueId\":8000,\"Level\":10,\"Tier\":1}],\"CharacterWeapon\":{\"UniqueId\":20020,\"StarGrade\":1,\"Level\":1},\"SkillCount\":{\"PublicSkill01\":5,\"ExSkill01\":3},\"KillLog\":{\"16777241\":959,\"16777323\":4559}}],\"UseAutoSkill\":false,\"TSSInteractionServerId\":0,\"TSSInteractionUniqueId\":0,\"AssistRelations\":{},\"SkillCostSummary\":{\"InitialCost\":0,\"CostPerFrameSnapshots\":[{\"Frame\":61,\"Regen\":0.0154999988}],\"CostAddSnapshots\":[],\"CostUseSnapshots\":[{\"Frame\":595,\"Used\":3,\"CharId\":10052,\"Level\":1},{\"Frame\":975,\"Used\":6,\"CharId\":10036,\"Level\":1},{\"Frame\":1152,\"Used\":6,\"CharId\":20036,\"Level\":1},{\"Frame\":1373,\"Used\":3,\"CharId\":10014,\"Level\":1},{\"Frame\":1640,\"Used\":3,\"CharId\":20020,\"Level\":1},{\"Frame\":1903,\"Used\":6,\"CharId\":10036,\"Level\":1},{\"Frame\":2366,\"Used\":6,\"CharId\":20036,\"Level\":1},{\"Frame\":2699,\"Used\":3,\"CharId\":10014,\"Level\":1},{\"Frame\":2925,\"Used\":3,\"CharId\":20020,\"Level\":1},{\"Frame\":3061,\"Used\":6,\"CharId\":10036,\"Level\":1},{\"Frame\":3447,\"Used\":6,\"CharId\":20036,\"Level\":1},{\"Frame\":3829,\"Used\":3,\"CharId\":10052,\"Level\":1},{\"Frame\":3888,\"Used\":3,\"CharId\":20020,\"Level\":1},{\"Frame\":4404,\"Used\":6,\"CharId\":10036,\"Level\":1},{\"Frame\":4916,\"Used\":6,\"CharId\":20036,\"Level\":1},{\"Frame\":4966,\"Used\":3,\"CharId\":10052,\"Level\":1}]}},\"Group02Summary\":{\"TeamId\":2,\"LeaderEntityId\":{\"uniqueId\":0},\"Heroes\":[{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777221},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":419,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777222},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":323,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777223},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":361,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777224},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":311,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777225},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":301,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777226},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":537,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777227},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":602,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777228},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":655,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777229},\"CharacterId\":602230106,\"CostumeId\":0,\"DeadFrame\":542,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777230},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":507,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777231},\"CharacterId\":602230106,\"CostumeId\":0,\"DeadFrame\":682,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777232},\"CharacterId\":602230106,\"CostumeId\":0,\"DeadFrame\":737,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777233},\"CharacterId\":602230106,\"CostumeId\":0,\"DeadFrame\":736,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777234},\"CharacterId\":602230106,\"CostumeId\":0,\"DeadFrame\":797,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777235},\"CharacterId\":602230106,\"CostumeId\":0,\"DeadFrame\":836,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777236},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":1051,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777237},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":1051,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777238},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":1123,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777239},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":1041,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777240},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":1187,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777241},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":959,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777242},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":995,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777243},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":1058,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777244},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":1092,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777245},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":1066,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777246},\"CharacterId\":602230106,\"CostumeId\":0,\"DeadFrame\":1140,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777247},\"CharacterId\":602230106,\"CostumeId\":0,\"DeadFrame\":1041,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777248},\"CharacterId\":602230106,\"CostumeId\":0,\"DeadFrame\":1041,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777249},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":1066,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777250},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":1066,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777251},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":1210,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777252},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":1210,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777253},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":1210,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777254},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":1210,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777255},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":1210,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777256},\"CharacterId\":602230108,\"CostumeId\":0,\"Grade\":1,\"Level\":17,\"ExSkillLevel\":-1,\"PublicSkillLevel\":-1,\"PassiveSkillLevel\":-1,\"ExtraPassiveSkillLevel\":-1,\"FavorRank\":0,\"HPRateBefore\":10000,\"HPRateAfter\":0,\"CrowdControlCount\":0,\"CrowdControlDuration\":0,\"EvadeCount\":0,\"DamageImmuneCount\":0,\"CrowdControlImmuneCount\":0,\"MaxAttackPower\":219,\"AverageCriticalRate\":0,\"AverageStabilityRate\":0,\"AverageAccuracyRate\":0,\"DeadFrame\":1599,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":4,\"TakenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":3,\"CalculatedSum\":37282,\"AppliedSum\":1909,\"Count\":3,\"CriticalMultiplierMax\":19624,\"CriticalCount\":1,\"CalculatedMin\":11380,\"CalculatedMax\":13012,\"AppliedMin\":0,\"AppliedMax\":1909}]},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777257},\"CharacterId\":602230108,\"CostumeId\":0,\"Grade\":1,\"Level\":17,\"ExSkillLevel\":-1,\"PublicSkillLevel\":-1,\"PassiveSkillLevel\":-1,\"ExtraPassiveSkillLevel\":-1,\"FavorRank\":0,\"HPRateBefore\":10000,\"HPRateAfter\":0,\"CrowdControlCount\":0,\"CrowdControlDuration\":0,\"EvadeCount\":0,\"DamageImmuneCount\":0,\"CrowdControlImmuneCount\":0,\"MaxAttackPower\":219,\"AverageCriticalRate\":0,\"AverageStabilityRate\":0,\"AverageAccuracyRate\":0,\"DeadFrame\":1636,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":4,\"TakenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":1,\"CalculatedSum\":2138,\"AppliedSum\":1909,\"Count\":1,\"CriticalMultiplierMax\":10000,\"CriticalCount\":0,\"CalculatedMin\":2138,\"CalculatedMax\":2138,\"AppliedMin\":1909,\"AppliedMax\":1909}]},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777258},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":1917,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777259},\"CharacterId\":602230106,\"CostumeId\":0,\"DeadFrame\":1970,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777260},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":1970,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777261},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":1750,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777262},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":1970,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777263},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":1859,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777264},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":1970,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777265},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":1795,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777266},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":1953,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777267},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":1913,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777268},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":1834,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777269},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":2070,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777270},\"CharacterId\":602230110,\"CostumeId\":0,\"Grade\":1,\"Level\":17,\"ExSkillLevel\":-1,\"PublicSkillLevel\":1,\"PassiveSkillLevel\":1,\"ExtraPassiveSkillLevel\":-1,\"FavorRank\":0,\"HPRateBefore\":10000,\"HPRateAfter\":0,\"CrowdControlCount\":1,\"CrowdControlDuration\":0,\"EvadeCount\":0,\"DamageImmuneCount\":0,\"CrowdControlImmuneCount\":0,\"MaxAttackPower\":660,\"AverageCriticalRate\":0,\"AverageStabilityRate\":0,\"AverageAccuracyRate\":0,\"DeadFrame\":2267,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":4,\"TakenNumericLogs\":[{\"EntityType\":\"Supporter\",\"Category\":1,\"Source\":3,\"CalculatedSum\":16488,\"AppliedSum\":8738,\"Count\":3,\"CriticalMultiplierMax\":16824,\"CriticalCount\":3,\"CalculatedMin\":5384,\"CalculatedMax\":5700,\"AppliedMin\":2658,\"AppliedMax\":3266}]},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777271},\"CharacterId\":602230108,\"CostumeId\":0,\"Grade\":1,\"Level\":17,\"ExSkillLevel\":-1,\"PublicSkillLevel\":-1,\"PassiveSkillLevel\":-1,\"ExtraPassiveSkillLevel\":-1,\"FavorRank\":0,\"HPRateBefore\":10000,\"HPRateAfter\":0,\"CrowdControlCount\":1,\"CrowdControlDuration\":92,\"EvadeCount\":2,\"DamageImmuneCount\":0,\"CrowdControlImmuneCount\":0,\"MaxAttackPower\":219,\"AverageCriticalRate\":0,\"AverageStabilityRate\":0,\"AverageAccuracyRate\":0,\"DeadFrame\":2550,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":4,\"TakenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":3,\"CalculatedSum\":26018,\"AppliedSum\":1909,\"Count\":2,\"CriticalMultiplierMax\":19624,\"CriticalCount\":1,\"CalculatedMin\":12547,\"CalculatedMax\":13471,\"AppliedMin\":0,\"AppliedMax\":1909},{\"EntityType\":\"Character\",\"Category\":1,\"Source\":1,\"CalculatedSum\":12102,\"AppliedSum\":0,\"Count\":4,\"CriticalMultiplierMax\":19624,\"CriticalCount\":3,\"CalculatedMin\":2670,\"CalculatedMax\":3332,\"AppliedMin\":0,\"AppliedMax\":0}]},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777272},\"CharacterId\":602230108,\"CostumeId\":0,\"Grade\":1,\"Level\":17,\"ExSkillLevel\":-1,\"PublicSkillLevel\":-1,\"PassiveSkillLevel\":-1,\"ExtraPassiveSkillLevel\":-1,\"FavorRank\":0,\"HPRateBefore\":10000,\"HPRateAfter\":0,\"CrowdControlCount\":0,\"CrowdControlDuration\":0,\"EvadeCount\":0,\"DamageImmuneCount\":0,\"CrowdControlImmuneCount\":0,\"MaxAttackPower\":219,\"AverageCriticalRate\":0,\"AverageStabilityRate\":0,\"AverageAccuracyRate\":0,\"DeadFrame\":2226,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":4,\"TakenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":1,\"CalculatedSum\":10910,\"AppliedSum\":1909,\"Count\":5,\"CriticalMultiplierMax\":10000,\"CriticalCount\":0,\"CalculatedMin\":2059,\"CalculatedMax\":2274,\"AppliedMin\":0,\"AppliedMax\":1909}]},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777273},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":2324,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777274},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":2362,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777275},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":2365,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777276},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":2284,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777277},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":2400,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777278},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":2267,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777279},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":2430,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777280},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":2345,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777281},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":2422,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777282},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":2422,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777283},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":2422,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777284},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":2404,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777285},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":2422,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777286},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":2422,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777287},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":2422,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777288},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":2422,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777289},\"CharacterId\":602230101,\"CostumeId\":0,\"Grade\":1,\"Level\":17,\"ExSkillLevel\":1,\"PublicSkillLevel\":-1,\"PassiveSkillLevel\":1,\"ExtraPassiveSkillLevel\":-1,\"FavorRank\":0,\"StatSnapshotCollection\":[{\"Stat\":1,\"Start\":80000,\"End\":80000},{\"Stat\":2,\"Start\":10,\"End\":10},{\"Stat\":3,\"Start\":100,\"End\":100},{\"Stat\":4,\"Start\":1,\"End\":1},{\"Stat\":5,\"Start\":100,\"End\":100},{\"Stat\":7,\"Start\":200,\"End\":200},{\"Stat\":9,\"Start\":250,\"End\":250},{\"Stat\":12,\"Start\":20000,\"End\":20000},{\"Stat\":30,\"Start\":10000,\"End\":10000},{\"Stat\":34,\"Start\":10000,\"End\":10000},{\"Stat\":42,\"Start\":0,\"End\":0},{\"Stat\":44,\"Start\":0,\"End\":0}],\"HPRateBefore\":10000,\"HPRateAfter\":0,\"CrowdControlCount\":0,\"CrowdControlDuration\":0,\"EvadeCount\":13,\"DamageImmuneCount\":0,\"CrowdControlImmuneCount\":2,\"MaxAttackPower\":10,\"AverageCriticalRate\":689,\"AverageStabilityRate\":9906,\"AverageAccuracyRate\":10000,\"DeadFrame\":4982,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":16,\"GivenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":1,\"CalculatedSum\":2715,\"AppliedSum\":1164,\"Count\":58,\"CriticalMultiplierMax\":15000,\"CriticalCount\":4,\"CalculatedMin\":22,\"CalculatedMax\":261,\"AppliedMin\":7,\"AppliedMax\":81}],\"TakenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":3,\"CalculatedSum\":178868,\"AppliedSum\":3379,\"Count\":17,\"CriticalMultiplierMax\":19624,\"CriticalCount\":5,\"CalculatedMin\":8144,\"CalculatedMax\":20496,\"AppliedMin\":76,\"AppliedMax\":1216},{\"EntityType\":\"Supporter\",\"Category\":1,\"Source\":3,\"CalculatedSum\":42055,\"AppliedSum\":2389,\"Count\":8,\"CriticalMultiplierMax\":16824,\"CriticalCount\":3,\"CalculatedMin\":3530,\"CalculatedMax\":6216,\"AppliedMin\":160,\"AppliedMax\":636},{\"EntityType\":\"Character\",\"Category\":1,\"Source\":2,\"CalculatedSum\":71654,\"AppliedSum\":8522,\"Count\":5,\"CriticalMultiplierMax\":19624,\"CriticalCount\":1,\"CalculatedMin\":11400,\"CalculatedMax\":19432,\"AppliedMin\":1075,\"AppliedMax\":3597},{\"EntityType\":\"Character\",\"Category\":1,\"Source\":1,\"CalculatedSum\":188693,\"AppliedSum\":25666,\"Count\":70,\"CriticalMultiplierMax\":19624,\"CriticalCount\":20,\"CalculatedMin\":1763,\"CalculatedMax\":5592,\"AppliedMin\":0,\"AppliedMax\":8448},{\"EntityType\":\"Supporter\",\"Category\":1,\"Source\":2,\"CalculatedSum\":66616,\"AppliedSum\":40039,\"Count\":2,\"CriticalMultiplierMax\":16824,\"CriticalCount\":1,\"CalculatedMin\":33066,\"CalculatedMax\":33550,\"AppliedMin\":3165,\"AppliedMax\":36874}],\"SkillCount\":{\"ExSkill01\":5}}],\"UseAutoSkill\":false,\"TSSInteractionServerId\":0,\"TSSInteractionUniqueId\":0,\"AssistRelations\":{},\"SkillCostSummary\":{\"InitialCost\":0,\"CostPerFrameSnapshots\":[],\"CostAddSnapshots\":[],\"CostUseSnapshots\":[]}},\"RaidSummary\":{\"RaidSeasonId\":19,\"RaidBossResults\":[{\"RaidDamage\":{\"Index\":0,\"GivenDamage\":80000,\"GivenGroggyPoint\":1000000000},\"EndHpRateRawValue\":0,\"GroggyRateRawValue\":0,\"GroggyCount\":1,\"SubPartsHPs\":null,\"AIPhase\":1}]},\"ElapsedRealtime\":144.95076},\"AssistUseInfo\":null,\"ClientUpTime\":158,\"Resendable\":true,\"Hash\":154623117623421,\"IsTest\":false,\"SessionKey\":{\"AccountServerId\":50868960,\"MxToken\":\"+w+2H3TTud1L5ml4caWAzAw0V/fYOwF/Vm3u7CO7Ky0=\"},\"AccountId\":50868960}}"; + //packetJsonStr = "{\"Protocol\":45006,\"EchelonId\":1,\"RaidServerId\":2,\"IsPractice\":true,\"Summary\":{\"IsAbort\":false,\"IsDefeatBattle\":false,\"HashKey\":0,\"IsBossBattle\":true,\"BattleType\":16384,\"StageId\":2032301,\"GroundId\":6022301,\"Winner\":\"Group01\",\"EndType\":4,\"EndFrame\":5325,\"Group01Summary\":{\"TeamId\":1,\"LeaderEntityId\":{\"uniqueId\":16777217},\"Heroes\":[{\"ServerId\":278143883,\"OwnerAccountId\":50868960,\"BattleEntityId\":{\"uniqueId\":16777217},\"CharacterId\":10036,\"CostumeId\":0,\"Grade\":5,\"Level\":52,\"PotentialStatLevel\":{\"MaxHP\":0,\"AttackPower\":0,\"HealPower\":0},\"ExSkillLevel\":1,\"PublicSkillLevel\":3,\"PassiveSkillLevel\":1,\"ExtraPassiveSkillLevel\":3,\"FavorRank\":7,\"StatSnapshotCollection\":[{\"Stat\":1,\"Start\":21369,\"End\":21369},{\"Stat\":2,\"Start\":2354,\"End\":2354},{\"Stat\":3,\"Start\":100,\"End\":100},{\"Stat\":4,\"Start\":4641,\"End\":4641},{\"Stat\":5,\"Start\":101,\"End\":101},{\"Stat\":7,\"Start\":1086,\"End\":1086},{\"Stat\":9,\"Start\":282,\"End\":282},{\"Stat\":12,\"Start\":20000,\"End\":24624},{\"Stat\":30,\"Start\":10000,\"End\":10000},{\"Stat\":34,\"Start\":10000,\"End\":10000},{\"Stat\":42,\"Start\":700,\"End\":775},{\"Stat\":44,\"Start\":0,\"End\":0}],\"HPRateBefore\":10000,\"HPRateAfter\":9858,\"CrowdControlCount\":0,\"CrowdControlDuration\":0,\"EvadeCount\":14,\"DamageImmuneCount\":0,\"CrowdControlImmuneCount\":0,\"MaxAttackPower\":3505,\"AverageCriticalRate\":3097,\"AverageStabilityRate\":8602,\"AverageAccuracyRate\":7902,\"DeadFrame\":-1,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":1,\"GivenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":1,\"CalculatedSum\":109804,\"AppliedSum\":36801,\"Count\":20,\"CriticalMultiplierMax\":19624,\"CriticalCount\":4,\"CalculatedMin\":3936,\"CalculatedMax\":8083,\"AppliedMin\":0,\"AppliedMax\":5109},{\"EntityType\":\"Character\",\"Category\":1,\"Source\":5,\"CalculatedSum\":58493,\"AppliedSum\":0,\"Count\":45,\"CriticalMultiplierMax\":19624,\"CriticalCount\":13,\"CalculatedMin\":960,\"CalculatedMax\":2018,\"AppliedMin\":0,\"AppliedMax\":0},{\"EntityType\":\"Character\",\"Category\":1,\"Source\":3,\"CalculatedSum\":229937,\"AppliedSum\":18046,\"Count\":16,\"CriticalMultiplierMax\":19624,\"CriticalCount\":6,\"CalculatedMin\":10149,\"CalculatedMax\":19756,\"AppliedMin\":0,\"AppliedMax\":3711},{\"EntityType\":\"Character\",\"Category\":1,\"Source\":2,\"CalculatedSum\":387477,\"AppliedSum\":72120,\"Count\":32,\"CriticalMultiplierMax\":19624,\"CriticalCount\":12,\"CalculatedMin\":10252,\"CalculatedMax\":14162,\"AppliedMin\":929,\"AppliedMax\":3711}],\"TakenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":1,\"CalculatedSum\":544,\"AppliedSum\":305,\"Count\":13,\"CriticalMultiplierMax\":15000,\"CriticalCount\":5,\"CalculatedMin\":33,\"CalculatedMax\":87,\"AppliedMin\":7,\"AppliedMax\":123}],\"Equipments\":[{\"ServerId\":1592147985,\"UniqueId\":1001,\"Level\":20,\"Tier\":2},{\"ServerId\":1592251648,\"UniqueId\":6001,\"Level\":20,\"Tier\":2},{\"ServerId\":1694587612,\"UniqueId\":8000,\"Level\":10,\"Tier\":1}],\"CharacterWeapon\":{\"UniqueId\":10036,\"StarGrade\":1,\"Level\":1},\"SkillCount\":{\"PublicSkill01\":8,\"ExSkill01\":4},\"KillLog\":{\"16777222\":311,\"16777224\":246,\"16777226\":540,\"16777231\":605,\"16777232\":686,\"16777239\":949,\"16777246\":938,\"16777247\":938,\"16777248\":949,\"16777249\":964,\"16777250\":964,\"16777256\":1914,\"16777259\":1924,\"16777260\":1832,\"16777262\":1924,\"16777263\":1939,\"16777264\":1914,\"16777265\":1939,\"16777268\":2079,\"16777271\":2353,\"16777274\":2763,\"16777275\":2416,\"16777277\":2494,\"16777279\":2660,\"16777290\":3475,\"16777291\":3449,\"16777294\":3475,\"16777298\":3460,\"16777299\":3460,\"16777301\":3475,\"16777303\":3460,\"16777304\":3449,\"16777308\":3911,\"16777309\":3846,\"16777313\":4023,\"16777316\":4387,\"16777318\":4406,\"16777319\":4406,\"16777320\":4406,\"16777321\":4376,\"16777322\":4387,\"16777323\":4376,\"16777327\":4810,\"16777329\":4745,\"16777331\":5115,\"16777333\":4983,\"16777335\":5196}},{\"ServerId\":1697599534,\"OwnerAccountId\":50868960,\"BattleEntityId\":{\"uniqueId\":16777218},\"CharacterId\":10014,\"CostumeId\":0,\"Grade\":3,\"Level\":51,\"PotentialStatLevel\":{\"MaxHP\":0,\"AttackPower\":0,\"HealPower\":0},\"ExSkillLevel\":1,\"PublicSkillLevel\":1,\"PassiveSkillLevel\":1,\"ExtraPassiveSkillLevel\":1,\"FavorRank\":1,\"StatSnapshotCollection\":[{\"Stat\":1,\"Start\":24420,\"End\":24420},{\"Stat\":2,\"Start\":1740,\"End\":2091},{\"Stat\":3,\"Start\":110,\"End\":110},{\"Stat\":4,\"Start\":3751,\"End\":3751},{\"Stat\":5,\"Start\":108,\"End\":108},{\"Stat\":7,\"Start\":1066,\"End\":1066},{\"Stat\":9,\"Start\":246,\"End\":246},{\"Stat\":12,\"Start\":20000,\"End\":24624},{\"Stat\":30,\"Start\":10000,\"End\":10000},{\"Stat\":34,\"Start\":10000,\"End\":12744},{\"Stat\":42,\"Start\":700,\"End\":775},{\"Stat\":44,\"Start\":0,\"End\":0}],\"HPRateBefore\":10000,\"HPRateAfter\":9788,\"CrowdControlCount\":0,\"CrowdControlDuration\":0,\"EvadeCount\":91,\"DamageImmuneCount\":0,\"CrowdControlImmuneCount\":0,\"MaxAttackPower\":2091,\"AverageCriticalRate\":2018,\"AverageStabilityRate\":8962,\"AverageAccuracyRate\":8384,\"DeadFrame\":-1,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":1,\"GivenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":1,\"CalculatedSum\":354526,\"AppliedSum\":59369,\"Count\":103,\"CriticalMultiplierMax\":19624,\"CriticalCount\":21,\"CalculatedMin\":2742,\"CalculatedMax\":4146,\"AppliedMin\":0,\"AppliedMax\":2541},{\"EntityType\":\"Character\",\"Category\":1,\"Source\":3,\"CalculatedSum\":85700,\"AppliedSum\":12465,\"Count\":6,\"CriticalMultiplierMax\":19624,\"CriticalCount\":1,\"CalculatedMin\":12378,\"CalculatedMax\":17676,\"AppliedMin\":1182,\"AppliedMax\":3711}],\"TakenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":1,\"CalculatedSum\":1494,\"AppliedSum\":520,\"Count\":40,\"CriticalMultiplierMax\":15000,\"CriticalCount\":5,\"CalculatedMin\":22,\"CalculatedMax\":85,\"AppliedMin\":7,\"AppliedMax\":118}],\"SkillCount\":{\"PublicSkill01\":6,\"ExSkill01\":3},\"KillLog\":{\"16777221\":371,\"16777227\":517,\"16777228\":566,\"16777240\":1239,\"16777241\":1102,\"16777244\":995,\"16777278\":2508,\"16777280\":2417,\"16777281\":2949,\"16777284\":2543,\"16777285\":2582,\"16777286\":2676,\"16777287\":2900,\"16777296\":3432,\"16777297\":3700,\"16777300\":3700,\"16777302\":3600,\"16777317\":4332,\"16777330\":4830}},{\"ServerId\":1715188081,\"OwnerAccountId\":50868960,\"BattleEntityId\":{\"uniqueId\":16777219},\"CharacterId\":10040,\"CostumeId\":0,\"Grade\":3,\"Level\":52,\"PotentialStatLevel\":{\"MaxHP\":0,\"AttackPower\":0,\"HealPower\":0},\"ExSkillLevel\":1,\"PublicSkillLevel\":1,\"PassiveSkillLevel\":1,\"ExtraPassiveSkillLevel\":1,\"FavorRank\":6,\"StatSnapshotCollection\":[{\"Stat\":1,\"Start\":31409,\"End\":35806},{\"Stat\":2,\"Start\":1449,\"End\":1449},{\"Stat\":3,\"Start\":127,\"End\":127},{\"Stat\":4,\"Start\":4160,\"End\":4160},{\"Stat\":5,\"Start\":109,\"End\":109},{\"Stat\":7,\"Start\":1307,\"End\":1307},{\"Stat\":9,\"Start\":218,\"End\":218},{\"Stat\":12,\"Start\":20000,\"End\":21824},{\"Stat\":30,\"Start\":10000,\"End\":10000},{\"Stat\":34,\"Start\":10000,\"End\":10000},{\"Stat\":42,\"Start\":700,\"End\":775},{\"Stat\":44,\"Start\":0,\"End\":0}],\"HPRateBefore\":10000,\"HPRateAfter\":9450,\"CrowdControlCount\":0,\"CrowdControlDuration\":0,\"EvadeCount\":269,\"DamageImmuneCount\":0,\"CrowdControlImmuneCount\":0,\"MaxAttackPower\":1449,\"AverageCriticalRate\":2809,\"AverageStabilityRate\":8766,\"AverageAccuracyRate\":7562,\"DeadFrame\":-1,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":1,\"GivenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":1,\"CalculatedSum\":241560,\"AppliedSum\":40067,\"Count\":119,\"CriticalMultiplierMax\":16824,\"CriticalCount\":34,\"CalculatedMin\":1766,\"CalculatedMax\":2305,\"AppliedMin\":0,\"AppliedMax\":928},{\"EntityType\":\"Character\",\"Category\":1,\"Source\":3,\"CalculatedSum\":17596,\"AppliedSum\":2859,\"Count\":2,\"CriticalMultiplierMax\":10000,\"CriticalCount\":0,\"CalculatedMin\":8156,\"CalculatedMax\":9440,\"AppliedMin\":1256,\"AppliedMax\":1603}],\"TakenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":1,\"CalculatedSum\":5298,\"AppliedSum\":1971,\"Count\":149,\"CriticalMultiplierMax\":15000,\"CriticalCount\":5,\"CalculatedMin\":22,\"CalculatedMax\":87,\"AppliedMin\":7,\"AppliedMax\":80}],\"Equipments\":[{\"ServerId\":1726081170,\"UniqueId\":3000,\"Level\":1,\"Tier\":1},{\"ServerId\":1726081290,\"UniqueId\":5000,\"Level\":1,\"Tier\":1},{\"ServerId\":1726081335,\"UniqueId\":7000,\"Level\":1,\"Tier\":1}],\"SkillCount\":{\"PublicSkill01\":5},\"KillLog\":{\"16777223\":393,\"16777229\":538,\"16777234\":676,\"16777235\":736,\"16777243\":946,\"16777252\":1185,\"16777261\":1911,\"16777273\":2449,\"16777282\":2813,\"16777283\":2591,\"16777289\":5324,\"16777293\":3429,\"16777314\":4229,\"16777315\":4167,\"16777326\":4581,\"16777332\":4776,\"16777336\":5209}},{\"ServerId\":1177637528,\"OwnerAccountId\":50868960,\"BattleEntityId\":{\"uniqueId\":16777220},\"CharacterId\":10052,\"CostumeId\":0,\"Grade\":4,\"Level\":52,\"PotentialStatLevel\":{\"MaxHP\":0,\"AttackPower\":0,\"HealPower\":0},\"ExSkillLevel\":1,\"PublicSkillLevel\":1,\"PassiveSkillLevel\":1,\"ExtraPassiveSkillLevel\":1,\"FavorRank\":7,\"StatSnapshotCollection\":[{\"Stat\":1,\"Start\":20832,\"End\":23748},{\"Stat\":2,\"Start\":1365,\"End\":1365},{\"Stat\":3,\"Start\":100,\"End\":100},{\"Stat\":4,\"Start\":4198,\"End\":4198},{\"Stat\":5,\"Start\":100,\"End\":100},{\"Stat\":7,\"Start\":1090,\"End\":1090},{\"Stat\":9,\"Start\":201,\"End\":201},{\"Stat\":12,\"Start\":20000,\"End\":21824},{\"Stat\":30,\"Start\":10000,\"End\":10000},{\"Stat\":34,\"Start\":10000,\"End\":10000},{\"Stat\":42,\"Start\":700,\"End\":775},{\"Stat\":44,\"Start\":0,\"End\":0}],\"HPRateBefore\":10000,\"HPRateAfter\":9901,\"CrowdControlCount\":0,\"CrowdControlDuration\":0,\"EvadeCount\":28,\"DamageImmuneCount\":0,\"CrowdControlImmuneCount\":0,\"MaxAttackPower\":1365,\"AverageCriticalRate\":2083,\"AverageStabilityRate\":8420,\"AverageAccuracyRate\":8181,\"DeadFrame\":-1,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":1,\"GivenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":1,\"CalculatedSum\":67716,\"AppliedSum\":41087,\"Count\":29,\"CriticalMultiplierMax\":16824,\"CriticalCount\":6,\"CalculatedMin\":1924,\"CalculatedMax\":2718,\"AppliedMin\":0,\"AppliedMax\":3711},{\"EntityType\":\"Character\",\"Category\":1,\"Source\":3,\"CalculatedSum\":390394,\"AppliedSum\":1231,\"Count\":43,\"CriticalMultiplierMax\":16824,\"CriticalCount\":9,\"CalculatedMin\":7610,\"CalculatedMax\":10608,\"AppliedMin\":0,\"AppliedMax\":360}],\"TakenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":1,\"CalculatedSum\":430,\"AppliedSum\":237,\"Count\":13,\"CriticalMultiplierMax\":15000,\"CriticalCount\":1,\"CalculatedMin\":22,\"CalculatedMax\":86,\"AppliedMin\":7,\"AppliedMax\":81}],\"Equipments\":[{\"ServerId\":1594910537,\"UniqueId\":3000,\"Level\":1,\"Tier\":1},{\"ServerId\":1592474928,\"UniqueId\":6000,\"Level\":1,\"Tier\":1},{\"ServerId\":1694588019,\"UniqueId\":7000,\"Level\":1,\"Tier\":1}],\"SkillCount\":{\"PublicSkill01\":5,\"ExSkill01\":3},\"KillLog\":{\"16777225\":301,\"16777230\":507,\"16777233\":649,\"16777236\":1396,\"16777237\":1336,\"16777245\":876,\"16777257\":1887,\"16777266\":2095,\"16777267\":2155,\"16777272\":2331,\"16777276\":2389,\"16777292\":3462,\"16777295\":3401,\"16777328\":4983,\"16777334\":4863}}],\"Supporters\":[{\"ServerId\":2388633606,\"OwnerAccountId\":50868960,\"BattleEntityId\":{\"uniqueId\":1073741825},\"CharacterId\":20036,\"CostumeId\":0,\"Grade\":5,\"Level\":53,\"PotentialStatLevel\":{\"MaxHP\":0,\"AttackPower\":0,\"HealPower\":0},\"ExSkillLevel\":1,\"PublicSkillLevel\":1,\"PassiveSkillLevel\":1,\"ExtraPassiveSkillLevel\":1,\"FavorRank\":1,\"StatSnapshotCollection\":[{\"Stat\":1,\"Start\":11218,\"End\":11218},{\"Stat\":2,\"Start\":2779,\"End\":3168},{\"Stat\":3,\"Start\":227,\"End\":227},{\"Stat\":4,\"Start\":5035,\"End\":5035},{\"Stat\":5,\"Start\":686,\"End\":686},{\"Stat\":7,\"Start\":755,\"End\":755},{\"Stat\":9,\"Start\":263,\"End\":263},{\"Stat\":12,\"Start\":20000,\"End\":21824},{\"Stat\":30,\"Start\":10000,\"End\":10000},{\"Stat\":34,\"Start\":10000,\"End\":10000},{\"Stat\":42,\"Start\":700,\"End\":775},{\"Stat\":44,\"Start\":0,\"End\":0}],\"HPRateBefore\":0,\"HPRateAfter\":0,\"CrowdControlCount\":0,\"CrowdControlDuration\":0,\"EvadeCount\":0,\"DamageImmuneCount\":0,\"CrowdControlImmuneCount\":0,\"MaxAttackPower\":3168,\"AverageCriticalRate\":1851,\"AverageStabilityRate\":9080,\"AverageAccuracyRate\":10000,\"DeadFrame\":-1,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":1,\"GivenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":2,\"CalculatedSum\":514066,\"AppliedSum\":88733,\"Count\":14,\"CriticalMultiplierMax\":16824,\"CriticalCount\":2,\"CalculatedMin\":32452,\"CalculatedMax\":40200,\"AppliedMin\":1312,\"AppliedMax\":37924},{\"EntityType\":\"Character\",\"Category\":1,\"Source\":3,\"CalculatedSum\":75656,\"AppliedSum\":11548,\"Count\":13,\"CriticalMultiplierMax\":16824,\"CriticalCount\":3,\"CalculatedMin\":5278,\"CalculatedMax\":6424,\"AppliedMin\":136,\"AppliedMax\":1992}],\"SkillCount\":{\"PublicSkill01\":4,\"ExSkill01\":4},\"KillLog\":{\"16777238\":1116,\"16777251\":1116,\"16777253\":1116,\"16777254\":1116,\"16777255\":1116,\"16777269\":2181,\"16777270\":2360,\"16777305\":3833,\"16777306\":3833,\"16777307\":3833,\"16777310\":3833,\"16777311\":3833,\"16777312\":3833,\"16777324\":4445,\"16777325\":4470}},{\"ServerId\":1177644207,\"OwnerAccountId\":50868960,\"BattleEntityId\":{\"uniqueId\":1073741826},\"CharacterId\":20020,\"CostumeId\":0,\"Grade\":5,\"Level\":52,\"PotentialStatLevel\":{\"MaxHP\":0,\"AttackPower\":0,\"HealPower\":0},\"ExSkillLevel\":1,\"PublicSkillLevel\":1,\"PassiveSkillLevel\":2,\"ExtraPassiveSkillLevel\":1,\"FavorRank\":8,\"StatSnapshotCollection\":[{\"Stat\":1,\"Start\":20508,\"End\":20508},{\"Stat\":2,\"Start\":2143,\"End\":2439},{\"Stat\":3,\"Start\":390,\"End\":390},{\"Stat\":4,\"Start\":4682,\"End\":4682},{\"Stat\":5,\"Start\":714,\"End\":714},{\"Stat\":7,\"Start\":1151,\"End\":1151},{\"Stat\":9,\"Start\":318,\"End\":318},{\"Stat\":12,\"Start\":20000,\"End\":21824},{\"Stat\":30,\"Start\":10000,\"End\":10000},{\"Stat\":34,\"Start\":10000,\"End\":10000},{\"Stat\":42,\"Start\":700,\"End\":775},{\"Stat\":44,\"Start\":0,\"End\":0}],\"HPRateBefore\":0,\"HPRateAfter\":0,\"CrowdControlCount\":0,\"CrowdControlDuration\":0,\"EvadeCount\":0,\"DamageImmuneCount\":0,\"CrowdControlImmuneCount\":0,\"MaxAttackPower\":2439,\"AverageCriticalRate\":2000,\"AverageStabilityRate\":9080,\"AverageAccuracyRate\":10000,\"DeadFrame\":-1,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":1,\"GivenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":3,\"CalculatedSum\":20582,\"AppliedSum\":6295,\"Count\":5,\"CriticalMultiplierMax\":16824,\"CriticalCount\":1,\"CalculatedMin\":3593,\"CalculatedMax\":4513,\"AppliedMin\":405,\"AppliedMax\":3711}],\"Equipments\":[{\"ServerId\":1594909878,\"UniqueId\":3001,\"Level\":20,\"Tier\":2},{\"ServerId\":1594909884,\"UniqueId\":6001,\"Level\":20,\"Tier\":2},{\"ServerId\":1623780758,\"UniqueId\":8000,\"Level\":10,\"Tier\":1}],\"CharacterWeapon\":{\"UniqueId\":20020,\"StarGrade\":1,\"Level\":1},\"SkillCount\":{\"ExSkill01\":3,\"PublicSkill01\":5},\"KillLog\":{\"16777242\":932,\"16777258\":1832,\"16777288\":2732}}],\"UseAutoSkill\":false,\"TSSInteractionServerId\":0,\"TSSInteractionUniqueId\":0,\"AssistRelations\":{},\"SkillCostSummary\":{\"InitialCost\":0,\"CostPerFrameSnapshots\":[{\"Frame\":61,\"Regen\":0.0154999988}],\"CostAddSnapshots\":[],\"CostUseSnapshots\":[{\"Frame\":319,\"Used\":3,\"CharId\":20020,\"Level\":1},{\"Frame\":872,\"Used\":6,\"CharId\":10036,\"Level\":1},{\"Frame\":1056,\"Used\":6,\"CharId\":20036,\"Level\":1},{\"Frame\":1664,\"Used\":3,\"CharId\":10014,\"Level\":1},{\"Frame\":1756,\"Used\":3,\"CharId\":10052,\"Level\":1},{\"Frame\":1849,\"Used\":6,\"CharId\":10036,\"Level\":1},{\"Frame\":2301,\"Used\":6,\"CharId\":20036,\"Level\":1},{\"Frame\":2449,\"Used\":3,\"CharId\":20020,\"Level\":1},{\"Frame\":2585,\"Used\":3,\"CharId\":10052,\"Level\":1},{\"Frame\":3381,\"Used\":6,\"CharId\":10036,\"Level\":1},{\"Frame\":3699,\"Used\":3,\"CharId\":10014,\"Level\":1},{\"Frame\":3782,\"Used\":6,\"CharId\":20036,\"Level\":1},{\"Frame\":3934,\"Used\":3,\"CharId\":20020,\"Level\":1},{\"Frame\":4311,\"Used\":6,\"CharId\":10036,\"Level\":1},{\"Frame\":4722,\"Used\":3,\"CharId\":10052,\"Level\":1},{\"Frame\":5006,\"Used\":3,\"CharId\":10014,\"Level\":1},{\"Frame\":5249,\"Used\":6,\"CharId\":20036,\"Level\":1}]}},\"Group02Summary\":{\"TeamId\":2,\"LeaderEntityId\":{\"uniqueId\":0},\"Heroes\":[{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777221},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":371,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777222},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":311,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777223},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":393,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777224},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":246,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777225},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":301,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777226},\"CharacterId\":602230106,\"CostumeId\":0,\"DeadFrame\":540,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777227},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":517,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777228},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":566,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777229},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":538,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777230},\"CharacterId\":602230106,\"CostumeId\":0,\"DeadFrame\":507,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777231},\"CharacterId\":602230106,\"CostumeId\":0,\"DeadFrame\":605,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777232},\"CharacterId\":602230106,\"CostumeId\":0,\"DeadFrame\":686,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777233},\"CharacterId\":602230106,\"CostumeId\":0,\"DeadFrame\":649,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777234},\"CharacterId\":602230106,\"CostumeId\":0,\"DeadFrame\":676,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777235},\"CharacterId\":602230106,\"CostumeId\":0,\"DeadFrame\":736,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777236},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":1396,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777237},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":1336,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777238},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":1116,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777239},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":949,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777240},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":1239,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777241},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":1102,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777242},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":932,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777243},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":946,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777244},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":995,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777245},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":876,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777246},\"CharacterId\":602230106,\"CostumeId\":0,\"DeadFrame\":938,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777247},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":938,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777248},\"CharacterId\":602230106,\"CostumeId\":0,\"DeadFrame\":949,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777249},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":964,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777250},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":964,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777251},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":1116,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777252},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":1185,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777253},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":1116,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777254},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":1116,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777255},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":1116,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777256},\"CharacterId\":602230108,\"CostumeId\":0,\"Grade\":1,\"Level\":17,\"ExSkillLevel\":-1,\"PublicSkillLevel\":-1,\"PassiveSkillLevel\":-1,\"ExtraPassiveSkillLevel\":-1,\"FavorRank\":0,\"HPRateBefore\":10000,\"HPRateAfter\":0,\"CrowdControlCount\":0,\"CrowdControlDuration\":0,\"EvadeCount\":0,\"DamageImmuneCount\":0,\"CrowdControlImmuneCount\":0,\"MaxAttackPower\":219,\"AverageCriticalRate\":0,\"AverageStabilityRate\":9898,\"AverageAccuracyRate\":5000,\"DeadFrame\":1914,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":4,\"GivenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":1,\"CalculatedSum\":86,\"AppliedSum\":81,\"Count\":1,\"CriticalMultiplierMax\":10000,\"CriticalCount\":0,\"CalculatedMin\":86,\"CalculatedMax\":86,\"AppliedMin\":81,\"AppliedMax\":81}],\"TakenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":2,\"CalculatedSum\":12302,\"AppliedSum\":1909,\"Count\":1,\"CriticalMultiplierMax\":10000,\"CriticalCount\":0,\"CalculatedMin\":12302,\"CalculatedMax\":12302,\"AppliedMin\":1909,\"AppliedMax\":1909}]},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777257},\"CharacterId\":602230108,\"CostumeId\":0,\"Grade\":1,\"Level\":17,\"ExSkillLevel\":-1,\"PublicSkillLevel\":-1,\"PassiveSkillLevel\":-1,\"ExtraPassiveSkillLevel\":-1,\"FavorRank\":0,\"HPRateBefore\":10000,\"HPRateAfter\":0,\"CrowdControlCount\":0,\"CrowdControlDuration\":0,\"EvadeCount\":2,\"DamageImmuneCount\":0,\"CrowdControlImmuneCount\":0,\"MaxAttackPower\":219,\"AverageCriticalRate\":0,\"AverageStabilityRate\":9946,\"AverageAccuracyRate\":5000,\"DeadFrame\":1887,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":4,\"GivenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":1,\"CalculatedSum\":86,\"AppliedSum\":81,\"Count\":1,\"CriticalMultiplierMax\":10000,\"CriticalCount\":0,\"CalculatedMin\":86,\"CalculatedMax\":86,\"AppliedMin\":81,\"AppliedMax\":81}],\"TakenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":1,\"CalculatedSum\":6242,\"AppliedSum\":1549,\"Count\":3,\"CriticalMultiplierMax\":10000,\"CriticalCount\":0,\"CalculatedMin\":1769,\"CalculatedMax\":2265,\"AppliedMin\":439,\"AppliedMax\":562},{\"EntityType\":\"Character\",\"Category\":1,\"Source\":3,\"CalculatedSum\":86186,\"AppliedSum\":360,\"Count\":9,\"CriticalMultiplierMax\":16824,\"CriticalCount\":5,\"CalculatedMin\":7610,\"CalculatedMax\":10608,\"AppliedMin\":0,\"AppliedMax\":360}]},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777258},\"CharacterId\":602230106,\"CostumeId\":0,\"DeadFrame\":1832,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777259},\"CharacterId\":602230106,\"CostumeId\":0,\"DeadFrame\":1924,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777260},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":1832,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777261},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":1911,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777262},\"CharacterId\":602230106,\"CostumeId\":0,\"DeadFrame\":1924,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777263},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":1939,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777264},\"CharacterId\":602230106,\"CostumeId\":0,\"DeadFrame\":1914,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777265},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":1939,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777266},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":2095,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777267},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":2155,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777268},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":2079,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777269},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":2181,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777270},\"CharacterId\":602230110,\"CostumeId\":0,\"Grade\":1,\"Level\":17,\"ExSkillLevel\":-1,\"PublicSkillLevel\":1,\"PassiveSkillLevel\":1,\"ExtraPassiveSkillLevel\":-1,\"FavorRank\":0,\"HPRateBefore\":10000,\"HPRateAfter\":0,\"CrowdControlCount\":1,\"CrowdControlDuration\":0,\"EvadeCount\":0,\"DamageImmuneCount\":0,\"CrowdControlImmuneCount\":0,\"MaxAttackPower\":660,\"AverageCriticalRate\":0,\"AverageStabilityRate\":0,\"AverageAccuracyRate\":0,\"DeadFrame\":2360,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":4,\"TakenNumericLogs\":[{\"EntityType\":\"Supporter\",\"Category\":1,\"Source\":2,\"CalculatedSum\":33542,\"AppliedSum\":8738,\"Count\":1,\"CriticalMultiplierMax\":10000,\"CriticalCount\":0,\"CalculatedMin\":33542,\"CalculatedMax\":33542,\"AppliedMin\":8738,\"AppliedMax\":8738}]},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777271},\"CharacterId\":602230108,\"CostumeId\":0,\"Grade\":1,\"Level\":17,\"ExSkillLevel\":-1,\"PublicSkillLevel\":-1,\"PassiveSkillLevel\":-1,\"ExtraPassiveSkillLevel\":-1,\"FavorRank\":0,\"HPRateBefore\":10000,\"HPRateAfter\":0,\"CrowdControlCount\":0,\"CrowdControlDuration\":0,\"EvadeCount\":0,\"DamageImmuneCount\":0,\"CrowdControlImmuneCount\":0,\"MaxAttackPower\":219,\"AverageCriticalRate\":0,\"AverageStabilityRate\":0,\"AverageAccuracyRate\":0,\"DeadFrame\":2353,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":4,\"TakenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":1,\"CalculatedSum\":5544,\"AppliedSum\":1909,\"Count\":1,\"CriticalMultiplierMax\":10000,\"CriticalCount\":0,\"CalculatedMin\":5544,\"CalculatedMax\":5544,\"AppliedMin\":1909,\"AppliedMax\":1909}]},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777272},\"CharacterId\":602230108,\"CostumeId\":0,\"Grade\":1,\"Level\":17,\"ExSkillLevel\":-1,\"PublicSkillLevel\":-1,\"PassiveSkillLevel\":-1,\"ExtraPassiveSkillLevel\":-1,\"FavorRank\":0,\"HPRateBefore\":10000,\"HPRateAfter\":0,\"CrowdControlCount\":0,\"CrowdControlDuration\":0,\"EvadeCount\":0,\"DamageImmuneCount\":0,\"CrowdControlImmuneCount\":0,\"MaxAttackPower\":219,\"AverageCriticalRate\":0,\"AverageStabilityRate\":0,\"AverageAccuracyRate\":0,\"DeadFrame\":2331,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":4,\"TakenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":1,\"CalculatedSum\":2104,\"AppliedSum\":1909,\"Count\":1,\"CriticalMultiplierMax\":10000,\"CriticalCount\":0,\"CalculatedMin\":2104,\"CalculatedMax\":2104,\"AppliedMin\":1909,\"AppliedMax\":1909}]},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777273},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":2449,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777274},\"CharacterId\":602230106,\"CostumeId\":0,\"DeadFrame\":2763,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777275},\"CharacterId\":602230106,\"CostumeId\":0,\"DeadFrame\":2416,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777276},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":2389,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777277},\"CharacterId\":602230106,\"CostumeId\":0,\"DeadFrame\":2494,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777278},\"CharacterId\":602230104,\"CostumeId\":0,\"DeadFrame\":2508,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777279},\"CharacterId\":602230106,\"CostumeId\":0,\"DeadFrame\":2660,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777280},\"CharacterId\":602230106,\"CostumeId\":0,\"DeadFrame\":2417,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777281},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":2949,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777282},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":2813,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777283},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":2591,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777284},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":2543,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777285},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":2582,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777286},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":2676,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777287},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":2900,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777288},\"CharacterId\":602230102,\"CostumeId\":0,\"DeadFrame\":2732,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":2},{\"ServerId\":0,\"OwnerAccountId\":0,\"BattleEntityId\":{\"uniqueId\":16777289},\"CharacterId\":602230101,\"CostumeId\":0,\"Grade\":1,\"Level\":17,\"ExSkillLevel\":1,\"PublicSkillLevel\":-1,\"PassiveSkillLevel\":1,\"ExtraPassiveSkillLevel\":-1,\"FavorRank\":0,\"StatSnapshotCollection\":[{\"Stat\":1,\"Start\":80000,\"End\":80000},{\"Stat\":2,\"Start\":10,\"End\":10},{\"Stat\":3,\"Start\":100,\"End\":100},{\"Stat\":4,\"Start\":1,\"End\":1},{\"Stat\":5,\"Start\":100,\"End\":100},{\"Stat\":7,\"Start\":200,\"End\":200},{\"Stat\":9,\"Start\":250,\"End\":250},{\"Stat\":12,\"Start\":20000,\"End\":20000},{\"Stat\":30,\"Start\":10000,\"End\":10000},{\"Stat\":34,\"Start\":10000,\"End\":10000},{\"Stat\":42,\"Start\":0,\"End\":0},{\"Stat\":44,\"Start\":0,\"End\":0}],\"HPRateBefore\":10000,\"HPRateAfter\":0,\"CrowdControlCount\":0,\"CrowdControlDuration\":0,\"EvadeCount\":7,\"DamageImmuneCount\":0,\"CrowdControlImmuneCount\":0,\"MaxAttackPower\":10,\"AverageCriticalRate\":1250,\"AverageStabilityRate\":9893,\"AverageAccuracyRate\":10000,\"DeadFrame\":5324,\"DamageGivenAbsorbedSum\":0,\"TacticEntityType\":16,\"GivenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":1,\"CalculatedSum\":1846,\"AppliedSum\":1065,\"Count\":56,\"CriticalMultiplierMax\":15000,\"CriticalCount\":7,\"CalculatedMin\":22,\"CalculatedMax\":87,\"AppliedMin\":7,\"AppliedMax\":123}],\"TakenNumericLogs\":[{\"EntityType\":\"Character\",\"Category\":1,\"Source\":3,\"CalculatedSum\":131050,\"AppliedSum\":3985,\"Count\":13,\"CriticalMultiplierMax\":19624,\"CriticalCount\":1,\"CalculatedMin\":7932,\"CalculatedMax\":13116,\"AppliedMin\":74,\"AppliedMax\":1237},{\"EntityType\":\"Supporter\",\"Category\":1,\"Source\":3,\"CalculatedSum\":43334,\"AppliedSum\":2145,\"Count\":8,\"CriticalMultiplierMax\":16824,\"CriticalCount\":2,\"CalculatedMin\":4297,\"CalculatedMax\":6414,\"AppliedMin\":149,\"AppliedMax\":425},{\"EntityType\":\"Character\",\"Category\":1,\"Source\":2,\"CalculatedSum\":59520,\"AppliedSum\":8971,\"Count\":5,\"CriticalMultiplierMax\":19624,\"CriticalCount\":3,\"CalculatedMin\":10754,\"CalculatedMax\":13116,\"AppliedMin\":1014,\"AppliedMax\":2428},{\"EntityType\":\"Character\",\"Category\":1,\"Source\":1,\"CalculatedSum\":169622,\"AppliedSum\":23321,\"Count\":52,\"CriticalMultiplierMax\":19624,\"CriticalCount\":13,\"CalculatedMin\":1766,\"CalculatedMax\":5416,\"AppliedMin\":43,\"AppliedMax\":5109},{\"EntityType\":\"Supporter\",\"Category\":1,\"Source\":2,\"CalculatedSum\":78886,\"AppliedSum\":41573,\"Count\":2,\"CriticalMultiplierMax\":10000,\"CriticalCount\":0,\"CalculatedMin\":38686,\"CalculatedMax\":40200,\"AppliedMin\":3649,\"AppliedMax\":37924}],\"SkillCount\":{\"ExSkill01\":5}}],\"UseAutoSkill\":false,\"TSSInteractionServerId\":0,\"TSSInteractionUniqueId\":0,\"AssistRelations\":{},\"SkillCostSummary\":{\"InitialCost\":0,\"CostPerFrameSnapshots\":[],\"CostAddSnapshots\":[],\"CostUseSnapshots\":[]}},\"RaidSummary\":{\"RaidSeasonId\":19,\"RaidBossResults\":[{\"RaidDamage\":{\"Index\":0,\"GivenDamage\":80000,\"GivenGroggyPoint\":1000000000},\"EndHpRateRawValue\":0,\"GroggyRateRawValue\":0,\"GroggyCount\":1,\"SubPartsHPs\":null,\"AIPhase\":1}]},\"ElapsedRealtime\":142.024963},\"AssistUseInfo\":null,\"ClientUpTime\":151,\"Resendable\":true,\"Hash\":107387067302034,\"IsTest\":false,\"SessionKey\":{\"AccountServerId\":50868960,\"MxToken\":\"+w+2H3TTud1L5ml4caWAzAw0V/fYOwF/Vm3u7CO7Ky0=\"},\"AccountId\":50868960}"; Log.Information("Sending Post Request to " + url); Log.Information($"Payload: {packetJsonStr}"); @@ -139,7 +147,7 @@ namespace SCHALE.GameServer.Services request.Headers.Add("Bundle-Version", "li3pmyogha"); var content = new MultipartFormDataContent(); - content.Add(new StreamContent(new MemoryStream(payload)), "mx", ".mx.dat"); + content.Add(new StreamContent(new MemoryStream(payload)), "mx", "mx.dat"); request.Content = content; Log.Information("Sending POST Request!"); @@ -151,6 +159,8 @@ namespace SCHALE.GameServer.Services string responseBody = await response.Content.ReadAsStringAsync(); Log.Information("Response Body:"); Log.Information(responseBody); + + return responseBody; } } } diff --git a/SCHALE.GameServer/Commands/LoadDataCommand.cs b/SCHALE.GameServer/Commands/LoadDataCommand.cs new file mode 100644 index 0000000..c0e6d1e --- /dev/null +++ b/SCHALE.GameServer/Commands/LoadDataCommand.cs @@ -0,0 +1,261 @@ +using Microsoft.EntityFrameworkCore.Metadata.Conventions; +using SCHALE.Common.Database; +using SCHALE.Common.Database.ModelExtensions; +using SCHALE.Common.Migrations.SqlServerMigrations; +using SCHALE.Common.NetworkProtocol; +using SCHALE.Common.Utils; +using SCHALE.GameServer.Services.Irc; +using SCHALE.GameServer.Utils; + +namespace SCHALE.GameServer.Commands +{ + [CommandHandler("loaddata", "s", "/loaddata ")] + internal class LoadDataCommand : Command + { + public LoadDataCommand(IrcConnection connection, string[] args, bool validate = true) : base(connection, args, validate) { } + + [Argument(0, @"^.*$", "The file name of the packet json saved or Operation", ArgumentFlags.IgnoreCase)] + public string DataFileName { get; set; } = string.Empty; + + public override void Execute() + { + switch (DataFileName.ToLower()) + { + case "list": + ListData(); + break; + default: + LoadData(); + break; + } + } + + public void LoadData() + { + var context = connection.Context; + var account = connection.Account; + + string dataFileRelativePath = $"./Resources/account_data/{DataFileName}"; + + if (!PcapUtils.Load(dataFileRelativePath)) + { + connection.SendChatMessage($"File {DataFileName} was not found! Be sure to include \".json\"."); + connection.SendChatMessage($"Usage: /loaddata "); + throw new FileNotFoundException("File not found!"); + } + + AccountAuthResponse accountInfoPacket = PcapUtils.GetPacketFromPcap(Protocol.Account_Auth, PacketType.Response); + + if (accountInfoPacket == null) + { + connection.SendChatMessage($"Your data file does not contain the AccountAuthResponse - {Protocol.Account_Auth} Packet."); + throw new InvalidDataException("Invalid Data!"); + } + + AccountLoginSyncResponse accountDataPacket = PcapUtils.GetPacketFromPcap(Protocol.Account_LoginSync, PacketType.Response); + + if (accountDataPacket == null) + { + connection.SendChatMessage($"Your data file does not contain the AccountLoginSyncResponse - {Protocol.Account_LoginSync} Packet."); + throw new InvalidDataException("Invalid Data!"); + } + + // ready to put pcap data into db + + // User Info + account.Nickname = accountInfoPacket.AccountDB.Nickname; + account.State = accountInfoPacket.AccountDB.State; + account.Level = accountInfoPacket.AccountDB.Level; + account.Exp = accountInfoPacket.AccountDB.Exp; + account.RepresentCharacterServerId = accountInfoPacket.AccountDB.RepresentCharacterServerId; + + + Dictionary oldToNewCharacterServerId = new Dictionary(); // for converting old char id to new + + foreach (var character in accountDataPacket.CharacterListResponse.CharacterDBs) + { + oldToNewCharacterServerId.Add(character.ServerId, character); + } + + // All Character Data + InventoryUtils.RemoveAllCharacters(connection); + var charactersAdded = account.AddCharacters(context, accountDataPacket.CharacterListResponse.CharacterDBs.ToArray()); + context.SaveChanges(); + + // All Weapon Data + context.Weapons.RemoveRange(context.Weapons.Where(x => x.AccountServerId == connection.AccountServerId)); + + foreach (var weapon in accountDataPacket.CharacterListResponse.WeaponDBs) + { + if (oldToNewCharacterServerId.ContainsKey(weapon.BoundCharacterServerId)) + { + weapon.BoundCharacterServerId = oldToNewCharacterServerId[weapon.BoundCharacterServerId].ServerId; + } + } + + account.AddWeapons(context, accountDataPacket.CharacterListResponse.WeaponDBs.ToArray()); + + // All Item Data + + if (accountDataPacket.ItemListResponse == null) + { + ItemListResponse seperateItemListPacket = PcapUtils.GetPacketFromPcap(Protocol.Item_List, PacketType.Response); + + if (seperateItemListPacket != null) + { + accountDataPacket.ItemListResponse = seperateItemListPacket; + } + + else + { + connection.SendChatMessage("Could not find any packet associated with item data."); + } + } + + else + { + context.Items.RemoveRange(context.Items.Where(x => x.AccountServerId == connection.AccountServerId)); + account.AddItems(context, accountDataPacket.ItemListResponse.ItemDBs.ToArray()); + } + + + + // All Gear Data + context.Gears.RemoveRange(context.Gears.Where(x => x.AccountServerId == connection.AccountServerId)); + + foreach (var gear in accountDataPacket.CharacterGearListResponse.GearDBs) + { + if (oldToNewCharacterServerId.ContainsKey(gear.BoundCharacterServerId)) + { + gear.BoundCharacterServerId = oldToNewCharacterServerId[gear.BoundCharacterServerId].ServerId; + } + } + + account.AddGears(context, accountDataPacket.CharacterGearListResponse.GearDBs.ToArray()); + + + Dictionary oldToNewEquipmentServerId = new Dictionary(); // for converting old char id to new + + // All Equipment Data + context.Equipment.RemoveRange(context.Equipment.Where(x => x.AccountServerId == connection.AccountServerId)); + + foreach (var equipment in accountDataPacket.EquipmentItemListResponse.EquipmentDBs) + { + oldToNewEquipmentServerId.Add(equipment.ServerId, equipment); + } + + account.AddEquipment(context, accountDataPacket.EquipmentItemListResponse.EquipmentDBs.ToArray()); + context.SaveChanges(); + + foreach (var character in charactersAdded) + { + for (int i = 0; i < 3; i++) + { + if (oldToNewEquipmentServerId.ContainsKey(character.EquipmentServerIds[i])) + { + character.EquipmentServerIds[i] = oldToNewEquipmentServerId[character.EquipmentServerIds[i]].ServerId; + } + } + } + + // All Memory Lobby Data + context.MemoryLobbies.RemoveRange(context.MemoryLobbies.Where(x => x.AccountServerId == connection.AccountServerId)); + account.AddMemoryLobbies(context, accountDataPacket.MemoryLobbyListResponse.MemoryLobbyDBs.ToArray()); + + Dictionary oldToNewCafeServerId = new Dictionary(); // for converting old char id to new + + // All Cafe Data + context.Cafes.RemoveRange(context.Cafes.Where(x => x.AccountServerId == connection.AccountServerId)); + + foreach (var cafe in accountDataPacket.CafeGetInfoResponse.CafeDBs) + { + oldToNewCafeServerId.Add(cafe.CafeDBId, cafe); + } + + account.AddCafes(context, accountDataPacket.CafeGetInfoResponse.CafeDBs.ToArray()); + context.SaveChanges(); + + // All Furniture Data + context.Furnitures.RemoveRange(context.Furnitures.Where(x => x.AccountServerId == connection.AccountServerId)); + + foreach (var furniture in accountDataPacket.CafeGetInfoResponse.FurnitureDBs) + { + if (oldToNewCafeServerId.ContainsKey(furniture.CafeDBId)) + { + furniture.CafeDBId = oldToNewCafeServerId[furniture.CafeDBId].CafeDBId; + } + } + + account.AddFurnitures(context, accountDataPacket.CafeGetInfoResponse.FurnitureDBs.ToArray()); + + // All Echelon Data + context.Echelons.RemoveRange(context.Echelons.Where(x => x.AccountServerId == connection.AccountServerId)); + + foreach (var echelon in accountDataPacket.EchelonListResponse.EchelonDBs) + { + if (oldToNewCharacterServerId.ContainsKey(echelon.LeaderServerId)) + { + echelon.LeaderServerId = oldToNewCharacterServerId[echelon.LeaderServerId].ServerId; + } + + for (int i = 0; i < echelon.MainSlotServerIds.Count; i++) + { + long targetId = echelon.MainSlotServerIds[i]; + + if (oldToNewCharacterServerId.ContainsKey(targetId)) + { + echelon.MainSlotServerIds[i] = oldToNewCharacterServerId[targetId].ServerId; + } + + } + + for (int i = 0; i < echelon.SupportSlotServerIds.Count; i++) + { + long targetId = echelon.SupportSlotServerIds[i]; + + if (oldToNewCharacterServerId.ContainsKey(targetId)) + { + echelon.SupportSlotServerIds[i] = oldToNewCharacterServerId[targetId].ServerId; + } + } + + for (int i = 0; i < echelon.SkillCardMulliganCharacterIds.Count; i++) + { + long targetId = echelon.SkillCardMulliganCharacterIds[i]; + + if (oldToNewCharacterServerId.ContainsKey(targetId)) + { + echelon.SkillCardMulliganCharacterIds[i] = oldToNewCharacterServerId[targetId].ServerId; + } + } + } + + account.AddEchelons(context, accountDataPacket.EchelonListResponse.EchelonDBs.ToArray()); + + context.SaveChanges(); + connection.SendChatMessage("Sucessfully Loaded All Data from the save file."); + } + + public void ListData() + { + string dataFolderRelativePath = $"./Resources/account_data/"; + string dataFolderPath = Path.Combine(Path.GetDirectoryName(AppContext.BaseDirectory), dataFolderRelativePath); + + connection.SendChatMessage("Data Files:"); + if (Directory.Exists(dataFolderPath)) + { + string[] files = Directory.GetFiles(dataFolderPath); + + foreach (string file in files) + { + connection.SendChatMessage(Path.GetFileName(file)); + } + } + + else + { + connection.SendChatMessage("That path does not exist!"); + } + } + } +} diff --git a/SCHALE.GameServer/Utils/PcapUtils.cs b/SCHALE.GameServer/Utils/PcapUtils.cs index da0fd7a..333b14f 100644 --- a/SCHALE.GameServer/Utils/PcapUtils.cs +++ b/SCHALE.GameServer/Utils/PcapUtils.cs @@ -11,17 +11,18 @@ namespace SCHALE.GameServer.Utils { public static class PcapUtils { - private static string DefaultPcapFilePath = Path.Combine(Path.GetDirectoryName(AppContext.BaseDirectory), "packets.json"); + private static readonly string DefaultPcapFileName = "packets.json"; + //private static readonly string CurrentPcapFileName = ""; - private static List RequestPackets { get; } - private static List ResponsePackets { get; } + private static List RequestPackets { get; } = null; + private static List ResponsePackets { get; } = null; static PcapUtils() { RequestPackets = new List(); ResponsePackets = new List(); - PcapUtils.Load(); + PcapUtils.Load(DefaultPcapFileName); } // gets all packets of that type @@ -43,15 +44,21 @@ namespace SCHALE.GameServer.Utils return GetPacketsFromPcap((Protocol)protocol, packetType).FirstOrDefault(); } - private static void Load() + public static bool Load(string pcapFileName) { - if (!Path.Exists(DefaultPcapFilePath)) + // clear first? not clearing can cause conflicts + RequestPackets.Clear(); + ResponsePackets.Clear(); + + string PcapFilePath = Path.Combine(Path.GetDirectoryName(AppContext.BaseDirectory), pcapFileName); + + if (!Path.Exists(PcapFilePath)) { - Log.Information("Pcap json file was not found."); - return; + Log.Error($"Pcap json file was not found at path {PcapFilePath}."); + return false; } - var json = File.ReadAllText(DefaultPcapFilePath); + var json = File.ReadAllText(PcapFilePath); var jsonPackets = System.Text.Json.JsonSerializer.Deserialize(json); foreach (JsonNode packetNode in jsonPackets) @@ -92,6 +99,9 @@ namespace SCHALE.GameServer.Utils Log.Information($"Loaded Pcap Type: {packetNode["type"]}, Protocol: {protocol}"); } + + Log.Information($"Successfully Loaded Packets from: {PcapFilePath}!"); + return true; } public static Type? GetPacketTypeByProtocol(Protocol protocol, PacketType packetType)