diff --git a/Common/Configuration/HotfixContainer.cs b/Common/Configuration/HotfixContainer.cs index 0e3d60d..5b7bfbe 100644 --- a/Common/Configuration/HotfixContainer.cs +++ b/Common/Configuration/HotfixContainer.cs @@ -52,7 +52,7 @@ public class AudioData public class AudioPreDownloadData { - [JsonPropertyName("enable_time")] public long EnableTime { get; set; } + [JsonPropertyName("enable_time")] public double EnableTime { get; set; } [JsonPropertyName("platform")] public Dictionary Platform { get; set; } = new(); [JsonPropertyName("revision")] public int Revision { get; set; } } @@ -64,7 +64,7 @@ public class VideoEncryptData public class PlatformInfo { - [JsonPropertyName("enable_time")] public long EnableTime { get; set; } + [JsonPropertyName("enable_time")] public double EnableTime { get; set; } [JsonPropertyName("revision")] public string Revision { get; set; } = ""; [JsonPropertyName("suffix")] public string Suffix { get; set; } = ""; } diff --git a/Common/Util/ConfigManager.cs b/Common/Util/ConfigManager.cs index b00f365..8f64404 100644 --- a/Common/Util/ConfigManager.cs +++ b/Common/Util/ConfigManager.cs @@ -2,6 +2,7 @@ using KianaBH.Internationalization; using Newtonsoft.Json; using KianaBH.Util.Extensions; +using System.Text.Json; namespace KianaBH.Util; @@ -77,6 +78,40 @@ public static class ConfigManager SaveData(Hotfix, HotfixFilePath); } + public static void SaveHotfixData(string version, string decryptedText) + { + LoadHotfixData(); + + try + { + using var doc = JsonDocument.Parse(decryptedText); + if (!doc.RootElement.TryGetProperty("manifest", out var manifestElement)) + { + Logger.Warn($"[AUTO-HOTFIX] Manifest not found in decrypted hotfix for version {version}"); + return; + } + + var manifestJson = manifestElement.GetRawText(); + var manifestData = System.Text.Json.JsonSerializer.Deserialize(manifestJson); + + if (manifestData == null) + { + Logger.Warn($"[AUTO-HOTFIX] Failed to parse manifest for version {version}"); + return; + } + + Hotfix.Hotfixes[version] = manifestData; + + SaveData(Hotfix, HotfixFilePath); + + Logger.Info($"[AUTO-HOTFIX] Saved hotfix manifest for version {version}"); + } + catch (Exception ex) + { + Logger.Error($"[AUTO-HOTFIX] Failed to save hotfix data: {ex.Message}"); + } + } + private static void SaveData(object data, string path) { var json = JsonConvert.SerializeObject(data, Formatting.Indented); diff --git a/Common/Util/Crpyto/DispatchEncryption.cs b/Common/Util/Crpyto/DispatchEncryption.cs index 23e7dda..ffb3a3b 100644 --- a/Common/Util/Crpyto/DispatchEncryption.cs +++ b/Common/Util/Crpyto/DispatchEncryption.cs @@ -32,4 +32,25 @@ public static class DispatchEncryption return Convert.ToBase64String(encryptedBytes); } + + public static string? DecryptDispatchContent(string version, string base64Data) + { + if (!ConfigManager.Hotfix.AesKeys.TryGetValue(version, out var aesKey)) + return null; + + var keyBytes = aesKey.Split(' ') + .Select(b => Convert.ToByte(b, 16)) + .ToArray(); + + using var aes = Aes.Create(); + aes.Mode = CipherMode.ECB; + aes.Padding = PaddingMode.PKCS7; + aes.Key = keyBytes; + + var decryptor = aes.CreateDecryptor(); + var dataBytes = Convert.FromBase64String(base64Data); + var decryptedBytes = decryptor.TransformFinalBlock(dataBytes, 0, dataBytes.Length); + + return Encoding.UTF8.GetString(decryptedBytes); + } } \ No newline at end of file diff --git a/Common/Util/GameConstants.cs b/Common/Util/GameConstants.cs index c3d71d9..911e90d 100644 --- a/Common/Util/GameConstants.cs +++ b/Common/Util/GameConstants.cs @@ -2,7 +2,7 @@ public static class GameConstants { - public const string GAME_VERSION = "8.2.0"; + public const string GAME_VERSION = "8.5.0"; public const int MAX_STAMINA = 300; public const int STAMINA_RECOVERY_TIME = 360; // 6 minutes public const int STAMINA_RESERVE_RECOVERY_TIME = 1080; // 18 minutes diff --git a/Config/Hotfix.json b/Config/Hotfix.json index e142f51..a57743d 100644 --- a/Config/Hotfix.json +++ b/Config/Hotfix.json @@ -1,21 +1,737 @@ { "UseLocalCache": false, "Hotfixes": { - "8.2.0_os_pc":{"Asb":{"Android":{"EnableTime":0,"Revision":"8.2.0.1","Suffix":"bd94adf56362eb867e85bec5fac2ff64"},"Iphone":{"EnableTime":0,"Revision":"8.2.0.1","Suffix":"dfc7a720fcff0a38eff5fd39dd226be3"},"Pc":{"EnableTime":0,"Revision":"8.2.0.1","Suffix":"9e126d53a77b950adf7eeab1ce4c8be3"}},"AsbPreDownload":{"Android":{"EncryptKey":"","EnableTime":0,"Revision":"8.2.0.0","Suffix":"e201402a751b93be40d8d5667eae6c57"},"Iphone":{"EncryptKey":"","EnableTime":0,"Revision":"8.2.0.0","Suffix":"b24e5746d5c3b4e89664c9dce0b54990"}},"Audio":{"Platform":{"Android":"manifest_72379c553cacdc14de7b08eacf30742b.m","Windows":"manifest_451a3477478a452ad6d9d7d4efc8a7cc.m","iOS":"manifest_44481832f8d5ddf09c37c4c7cc2896e8.m"},"Revision":750064},"AudioPreDownload":{"EnableTime":0,"Platform":{"Android":"manifest_e6bba2f4b17b0fa2b8088554c631c89a.m","Windows":"manifest_78e29a53978043c1f285dee54cb23609.m","iOS":"manifest_520e04c4be6cd2c3114a22b2cb26bdb4.m"},"Revision":749901},"VideoEncrypt":{"FileName":"product_os_video_encrypt_70f8648c65dfdcb9bc4a7272e59d0d58"}}, - "8.2.0_global_pc":{"Asb":{"android":{"enable_time":0,"revision":"8.2.0.1","suffix":"f909ea8698c9f116a31c3892c21571a8"},"iphone":{"enable_time":0,"revision":"8.2.0.1","suffix":"072d7971083a1194adfb091be4e969c5"},"pc":{"enable_time":0,"revision":"8.2.0.1","suffix":"a4f72d175b17b53a8e449cd48ffb091a"}},"AsbPreDownload":{"android":{"enable_time":1745341200,"encrypt_key":"07E47334EB583829553AAB154F8A442A","revision":"8.2.0.0","suffix":"7d8addd08dfcb809ed64a20a32f4a023"},"iphone":{"enable_time":1745341200,"encrypt_key":"07E47334EB583829553AAB154F8A442A","revision":"8.2.0.0","suffix":"c8d02fc0a8dc652ed78496e703b18a1a"}},"Audio":{"platform":{"Android":"manifest_72379c553cacdc14de7b08eacf30742b.m","Windows":"manifest_451a3477478a452ad6d9d7d4efc8a7cc.m","iOS":"manifest_44481832f8d5ddf09c37c4c7cc2896e8.m"},"revision":750064},"AudioPreDownload":{"enable_time":1745341200,"platform":{"Android":"manifest_e6bba2f4b17b0fa2b8088554c631c89a.m","Windows":"manifest_78e29a53978043c1f285dee54cb23609.m","iOS":"manifest_520e04c4be6cd2c3114a22b2cb26bdb4.m"},"revision":749901},"VideoEncrypt":{"filename":"product_west_video_encrypt_099462b4c385f4ab36c4fdcad88486f8"}}, - "8.2.0_gf_pc":{"Asb":{"android":{"enable_time":0,"revision":"8.3.0.2","suffix":"f5f1a80d8319a96bcea859d31d19c4dd"},"iphone":{"enable_time":0,"revision":"8.3.0.2","suffix":"81d684360c644612f7d8cbb815465b37"},"pc":{"enable_time":0,"revision":"8.3.0.2","suffix":"8bce638d856f677f82778a0980fef38b"}},"AsbPreDownload":{"android":{"enable_time":1748318400,"encrypt_key":"96332C2FA6AD9115CE8884747E0454A7","revision":"8.3.0.0","suffix":"bff38644dfcc28d847f4079b6b78f209"},"iphone":{"enable_time":1748318400,"encrypt_key":"96332C2FA6AD9115CE8884747E0454A7","revision":"8.3.0.0","suffix":"e0c70df3b93cc2e2dbef4efce40c694e"}},"Audio":{"platform":{"Android":"manifest_c50f0232a02c3f1cc5450e06115e67cf.m","Windows":"manifest_ab9dbe41ba6a4c9251d1e8aae0cc0c73.m","iOS":"manifest_ac0e5c5a3bc50a53a796f03287c3bb5d.m"},"revision":753506},"AudioPreDownload":{"enable_time":1748318400,"platform":{"Android":"manifest_faa7b7d2c34cdbf6c0426a979b5dff3d.m","Windows":"manifest_d21d0c0b54d0ffd725172f4d9d5220f2.m","iOS":"manifest_64ded762ca04d233ff2f0c1c56fe33a7.m"},"revision":752275},"VideoEncrypt":{"filename":"product_video_encrypt_8e2595dd6e9022cf94915d033cc0c488"}}, - "8.2.0_jp_pc":{"Asb":{"android":{"enable_time":0,"revision":"8.2.0.1","suffix":"ee4b67a962fd2f3ac1b9f576d5dbf0af"},"iphone":{"enable_time":0,"revision":"8.2.0.1","suffix":"5004342b65a0a5fbad74ee7a6e185e3b"},"pc":{"enable_time":0,"revision":"8.2.0.1","suffix":"2e222cfd4b2da4a42eec9219e6cd57b0"}},"AsbPreDownload":{"android":{"enable_time":1745290800,"encrypt_key":"07E47334EB583829553AAB154F8A442A","revision":"8.2.0.0","suffix":"0a0d9db32c08a0084e55b5b242f2f901"},"iphone":{"enable_time":1745290800,"encrypt_key":"07E47334EB583829553AAB154F8A442A","revision":"8.2.0.0","suffix":"e17d5e1769a4c72ebe575d03666640f3"}},"Audio":{"platform":{"Android":"manifest_72379c553cacdc14de7b08eacf30742b.m","Windows":"manifest_451a3477478a452ad6d9d7d4efc8a7cc.m","iOS":"manifest_44481832f8d5ddf09c37c4c7cc2896e8.m"},"revision":750064},"AudioPreDownload":{"enable_time":1745290800,"platform":{"Android":"manifest_e6bba2f4b17b0fa2b8088554c631c89a.m","Windows":"manifest_78e29a53978043c1f285dee54cb23609.m","iOS":"manifest_520e04c4be6cd2c3114a22b2cb26bdb4.m"},"revision":749901},"VideoEncrypt":{"filename":"product_jp_video_encrypt_371861cb164c2b1100e80e0611a14bf8"}}, - "8.2.0_kr_pc":{"Asb":{"android":{"enable_time":0,"revision":"8.2.0.1","suffix":"39ff39a65a48c514f375e3c70a51028b"},"iphone":{"enable_time":0,"revision":"8.2.0.1","suffix":"2471dae3368f661815b252cd8a031fc3"},"pc":{"enable_time":0,"revision":"8.2.0.1","suffix":"9c4ec7419136ffe6bfc18554d3a00264"}},"AsbPreDownload":{"android":{"enable_time":1745290800,"encrypt_key":"07E47334EB583829553AAB154F8A442A","revision":"8.2.0.0","suffix":"b8d8c127e316b9f3f1feb218572e6d8c"},"iphone":{"enable_time":1745290800,"encrypt_key":"07E47334EB583829553AAB154F8A442A","revision":"8.2.0.0","suffix":"984ce00a117c7c49a162a54d96bf7eaa"}},"Audio":{"platform":{"Android":"manifest_72379c553cacdc14de7b08eacf30742b.m","Windows":"manifest_451a3477478a452ad6d9d7d4efc8a7cc.m","iOS":"manifest_44481832f8d5ddf09c37c4c7cc2896e8.m"},"revision":750064},"AudioPreDownload":{"enable_time":1745290800,"platform":{"Android":"manifest_e6bba2f4b17b0fa2b8088554c631c89a.m","Windows":"manifest_78e29a53978043c1f285dee54cb23609.m","iOS":"manifest_520e04c4be6cd2c3114a22b2cb26bdb4.m"},"revision":749901},"VideoEncrypt":{"filename":"product_kr_video_encrypt_86ba299ea5d830e971ddef114ed0db3f"}}, - "8.2.0_tw_pc":{"Asb":{"android":{"enable_time":0,"revision":"8.2.0.1","suffix":"cad1e6f198b9ab5fca1c108bc06edd88"},"iphone":{"enable_time":0,"revision":"8.2.0.1","suffix":"6ff0ccd7bae526522ecfb8cd57918565"},"pc":{"enable_time":0,"revision":"8.2.0.1","suffix":"531972fab6501729f4a9a0b2b97786f6"}},"AsbPreDownload":{"android":{"enable_time":1745294400,"encrypt_key":"07E47334EB583829553AAB154F8A442A","revision":"8.2.0.0","suffix":"b78c9d9c0795d8b87d9d439dea099840"},"iphone":{"enable_time":1745294400,"encrypt_key":"07E47334EB583829553AAB154F8A442A","revision":"8.2.0.0","suffix":"9606642009c034873557e2923d08a25c"}},"Audio":{"platform":{"Android":"manifest_72379c553cacdc14de7b08eacf30742b.m","Windows":"manifest_451a3477478a452ad6d9d7d4efc8a7cc.m","iOS":"manifest_44481832f8d5ddf09c37c4c7cc2896e8.m"},"revision":750064},"AudioPreDownload":{"enable_time":1745294400,"platform":{"Android":"manifest_e6bba2f4b17b0fa2b8088554c631c89a.m","Windows":"manifest_78e29a53978043c1f285dee54cb23609.m","iOS":"manifest_520e04c4be6cd2c3114a22b2cb26bdb4.m"},"revision":749901},"VideoEncrypt":{"filename":"product_asia_video_encrypt_4a156c48c46752110f2a0437edb5c866"}}, - "8.3.0_gf_pc":{"Asb":{"android":{"enable_time":0,"revision":"8.3.0.8","suffix":"35badee39edb1450060c82d4d45a2d14"},"iphone":{"enable_time":0,"revision":"8.3.0.8","suffix":"5ff9ae1b2f217117a6ab5c0a1d5e0e0c"},"pc":{"enable_time":0,"revision":"8.3.0.8","suffix":"bb6665a0aa885d0f6f5f71ae11c5a625"}},"AsbPreDownload":{"android":{"enable_time":1748318400,"encrypt_key":"96332C2FA6AD9115CE8884747E0454A7","revision":"8.3.0.0","suffix":"bff38644dfcc28d847f4079b6b78f209"},"iphone":{"enable_time":1748318400,"encrypt_key":"96332C2FA6AD9115CE8884747E0454A7","revision":"8.3.0.0","suffix":"e0c70df3b93cc2e2dbef4efce40c694e"}},"Audio":{"platform":{"Android":"manifest_fbbea8fe36490219e2e57cbc2f8598b8.m","Windows":"manifest_72092f9a49a6a282084f43e93e512b15.m","iOS":"manifest_fbc4eebe6c4f5eb0a3f9f44648fab3f5.m"},"revision":754243},"AudioPreDownload":{"enable_time":1748318400,"platform":{"Android":"manifest_faa7b7d2c34cdbf6c0426a979b5dff3d.m","Windows":"manifest_d21d0c0b54d0ffd725172f4d9d5220f2.m","iOS":"manifest_64ded762ca04d233ff2f0c1c56fe33a7.m"},"revision":752275},"VideoEncrypt":{"filename":"product_video_encrypt_17f26b71f43728b94058a89bf41475be"}}, - "8.3.0_os_pc":{"Asb":{"android":{"enable_time":0,"revision":"8.3.0.0","suffix":"58dde605404394655d6b9ec2e3c6c52c"},"iphone":{"enable_time":0,"revision":"8.3.0.0","suffix":"35784b91422f118f857d4e8f2faeb250"},"pc":{"enable_time":0,"revision":"8.3.0.0","suffix":"0a10c24fef1e0b402c74f63b9272f0b0"}},"AsbPreDownload":{"android":{"enable_time":1750737600,"encrypt_key":"96332C2FA6AD9115CE8884747E0454A7","revision":"8.3.0.0","suffix":"58dde605404394655d6b9ec2e3c6c52c"},"iphone":{"enable_time":1750737600,"encrypt_key":"96332C2FA6AD9115CE8884747E0454A7","revision":"8.3.0.0","suffix":"35784b91422f118f857d4e8f2faeb250"}},"Audio":{"platform":{"Android":"manifest_4d89bb62c543ddbebd294711773748eb.m","Windows":"manifest_d3c1f0505a9d26bac3ed6fa92749b198.m","iOS":"manifest_4a755e678fcbcd82fafe7efbf7aa4374.m"},"revision":755798},"AudioPreDownload":{"enable_time":1750737600,"platform":{"Android":"manifest_4d89bb62c543ddbebd294711773748eb.m","Windows":"manifest_d3c1f0505a9d26bac3ed6fa92749b198.m","iOS":"manifest_4a755e678fcbcd82fafe7efbf7aa4374.m"},"revision":755798},"VideoEncrypt":{"filename":"product_os_video_encrypt_30348c78d7811519e3e1525d486c9e56"}}, - "8.3.0_global_pc":{"Asb":{"android":{"enable_time":0,"revision":"8.3.0.0","suffix":"11925f0eb302731f4b6b36dcfd21b527"},"iphone":{"enable_time":0,"revision":"8.3.0.0","suffix":"9f0f5212e9856607173f65620b2229f0"},"pc":{"enable_time":0,"revision":"8.3.0.0","suffix":"adadbc204f9315d28f847c85cfe10795"}},"AsbPreDownload":{"android":{"enable_time":1750784400,"encrypt_key":"96332C2FA6AD9115CE8884747E0454A7","revision":"8.3.0.0","suffix":"11925f0eb302731f4b6b36dcfd21b527"},"iphone":{"enable_time":1750784400,"encrypt_key":"96332C2FA6AD9115CE8884747E0454A7","revision":"8.3.0.0","suffix":"9f0f5212e9856607173f65620b2229f0"}},"Audio":{"platform":{"Android":"manifest_4d89bb62c543ddbebd294711773748eb.m","Windows":"manifest_d3c1f0505a9d26bac3ed6fa92749b198.m","iOS":"manifest_4a755e678fcbcd82fafe7efbf7aa4374.m"},"revision":755798},"AudioPreDownload":{"enable_time":1750784400,"platform":{"Android":"manifest_4d89bb62c543ddbebd294711773748eb.m","Windows":"manifest_d3c1f0505a9d26bac3ed6fa92749b198.m","iOS":"manifest_4a755e678fcbcd82fafe7efbf7aa4374.m"},"revision":755798},"VideoEncrypt":{"filename":"product_west_video_encrypt_1e8f6240eb4d8dec86f861919c469551"}}, - "8.3.0_jp_pc":{"Asb":{"android":{"enable_time":0,"revision":"8.3.0.0","suffix":"38f68044b48eb11781cc81bbccc44968"},"iphone":{"enable_time":0,"revision":"8.3.0.0","suffix":"24b8c0cd9a3a217bdc891f1014307c1b"},"pc":{"enable_time":0,"revision":"8.3.0.0","suffix":"499a86fcdb4a5f8d45640d572f26dc2c"}},"AsbPreDownload":{"android":{"enable_time":1750734000,"encrypt_key":"96332C2FA6AD9115CE8884747E0454A7","revision":"8.3.0.0","suffix":"38f68044b48eb11781cc81bbccc44968"},"iphone":{"enable_time":1750734000,"encrypt_key":"96332C2FA6AD9115CE8884747E0454A7","revision":"8.3.0.0","suffix":"24b8c0cd9a3a217bdc891f1014307c1b"}},"Audio":{"platform":{"Android":"manifest_4d89bb62c543ddbebd294711773748eb.m","Windows":"manifest_d3c1f0505a9d26bac3ed6fa92749b198.m","iOS":"manifest_4a755e678fcbcd82fafe7efbf7aa4374.m"},"revision":755798},"AudioPreDownload":{"enable_time":1750734000,"platform":{"Android":"manifest_4d89bb62c543ddbebd294711773748eb.m","Windows":"manifest_d3c1f0505a9d26bac3ed6fa92749b198.m","iOS":"manifest_4a755e678fcbcd82fafe7efbf7aa4374.m"},"revision":755798},"VideoEncrypt":{"filename":"product_jp_video_encrypt_61a6f2020aed085edf3979e8e38ae5da"}}, - "8.3.0_kr_pc":{"Asb":{"android":{"enable_time":0,"revision":"8.3.0.0","suffix":"e42c3bb8522240554e19169edb601c9f"},"iphone":{"enable_time":0,"revision":"8.3.0.0","suffix":"a116a80b68e3c9bde4fbb300a573e0ee"},"pc":{"enable_time":0,"revision":"8.3.0.0","suffix":"ad2013f4b77aa0de723bb37fd074751f"}},"AsbPreDownload":{"android":{"enable_time":1750734000,"encrypt_key":"96332C2FA6AD9115CE8884747E0454A7","revision":"8.3.0.0","suffix":"e42c3bb8522240554e19169edb601c9f"},"iphone":{"enable_time":1750734000,"encrypt_key":"96332C2FA6AD9115CE8884747E0454A7","revision":"8.3.0.0","suffix":"a116a80b68e3c9bde4fbb300a573e0ee"}},"Audio":{"platform":{"Android":"manifest_4d89bb62c543ddbebd294711773748eb.m","Windows":"manifest_d3c1f0505a9d26bac3ed6fa92749b198.m","iOS":"manifest_4a755e678fcbcd82fafe7efbf7aa4374.m"},"revision":755798},"AudioPreDownload":{"enable_time":1750734000,"platform":{"Android":"manifest_4d89bb62c543ddbebd294711773748eb.m","Windows":"manifest_d3c1f0505a9d26bac3ed6fa92749b198.m","iOS":"manifest_4a755e678fcbcd82fafe7efbf7aa4374.m"},"revision":755798},"VideoEncrypt":{"filename":"product_kr_video_encrypt_fe4aed33155528f56389a3c57ad6b2b8"}} + "8.2.0_os_pc": { + "Asb": { + "Android": { + "EnableTime": 0.0, + "Revision": "8.2.0.1", + "Suffix": "bd94adf56362eb867e85bec5fac2ff64" + }, + "Iphone": { + "EnableTime": 0.0, + "Revision": "8.2.0.1", + "Suffix": "dfc7a720fcff0a38eff5fd39dd226be3" + }, + "Pc": { + "EnableTime": 0.0, + "Revision": "8.2.0.1", + "Suffix": "9e126d53a77b950adf7eeab1ce4c8be3" + } + }, + "AsbPreDownload": { + "Android": { + "EncryptKey": "", + "EnableTime": 0.0, + "Revision": "8.2.0.0", + "Suffix": "e201402a751b93be40d8d5667eae6c57" + }, + "Iphone": { + "EncryptKey": "", + "EnableTime": 0.0, + "Revision": "8.2.0.0", + "Suffix": "b24e5746d5c3b4e89664c9dce0b54990" + } + }, + "Audio": { + "Platform": { + "Android": "manifest_72379c553cacdc14de7b08eacf30742b.m", + "Windows": "manifest_451a3477478a452ad6d9d7d4efc8a7cc.m", + "iOS": "manifest_44481832f8d5ddf09c37c4c7cc2896e8.m" + }, + "Revision": 750064 + }, + "AudioPreDownload": { + "EnableTime": 0.0, + "Platform": { + "Android": "manifest_e6bba2f4b17b0fa2b8088554c631c89a.m", + "Windows": "manifest_78e29a53978043c1f285dee54cb23609.m", + "iOS": "manifest_520e04c4be6cd2c3114a22b2cb26bdb4.m" + }, + "Revision": 749901 + }, + "VideoEncrypt": { + "FileName": "product_os_video_encrypt_70f8648c65dfdcb9bc4a7272e59d0d58" + } + }, + "8.2.0_global_pc": { + "Asb": { + "Android": { + "EnableTime": 0.0, + "Revision": "8.2.0.1", + "Suffix": "f909ea8698c9f116a31c3892c21571a8" + }, + "Iphone": { + "EnableTime": 0.0, + "Revision": "8.2.0.1", + "Suffix": "072d7971083a1194adfb091be4e969c5" + }, + "Pc": { + "EnableTime": 0.0, + "Revision": "8.2.0.1", + "Suffix": "a4f72d175b17b53a8e449cd48ffb091a" + } + }, + "AsbPreDownload": { + "Android": { + "EncryptKey": "", + "EnableTime": 0.0, + "Revision": "8.2.0.0", + "Suffix": "7d8addd08dfcb809ed64a20a32f4a023" + }, + "Iphone": { + "EncryptKey": "", + "EnableTime": 0.0, + "Revision": "8.2.0.0", + "Suffix": "c8d02fc0a8dc652ed78496e703b18a1a" + } + }, + "Audio": { + "Platform": { + "Android": "manifest_72379c553cacdc14de7b08eacf30742b.m", + "Windows": "manifest_451a3477478a452ad6d9d7d4efc8a7cc.m", + "iOS": "manifest_44481832f8d5ddf09c37c4c7cc2896e8.m" + }, + "Revision": 750064 + }, + "AudioPreDownload": { + "EnableTime": 0.0, + "Platform": { + "Android": "manifest_e6bba2f4b17b0fa2b8088554c631c89a.m", + "Windows": "manifest_78e29a53978043c1f285dee54cb23609.m", + "iOS": "manifest_520e04c4be6cd2c3114a22b2cb26bdb4.m" + }, + "Revision": 749901 + }, + "VideoEncrypt": { + "FileName": "product_west_video_encrypt_099462b4c385f4ab36c4fdcad88486f8" + } + }, + "8.2.0_gf_pc": { + "Asb": { + "Android": { + "EnableTime": 0.0, + "Revision": "8.3.0.2", + "Suffix": "f5f1a80d8319a96bcea859d31d19c4dd" + }, + "Iphone": { + "EnableTime": 0.0, + "Revision": "8.3.0.2", + "Suffix": "81d684360c644612f7d8cbb815465b37" + }, + "Pc": { + "EnableTime": 0.0, + "Revision": "8.3.0.2", + "Suffix": "8bce638d856f677f82778a0980fef38b" + } + }, + "AsbPreDownload": { + "Android": { + "EncryptKey": "", + "EnableTime": 0.0, + "Revision": "8.3.0.0", + "Suffix": "bff38644dfcc28d847f4079b6b78f209" + }, + "Iphone": { + "EncryptKey": "", + "EnableTime": 0.0, + "Revision": "8.3.0.0", + "Suffix": "e0c70df3b93cc2e2dbef4efce40c694e" + } + }, + "Audio": { + "Platform": { + "Android": "manifest_c50f0232a02c3f1cc5450e06115e67cf.m", + "Windows": "manifest_ab9dbe41ba6a4c9251d1e8aae0cc0c73.m", + "iOS": "manifest_ac0e5c5a3bc50a53a796f03287c3bb5d.m" + }, + "Revision": 753506 + }, + "AudioPreDownload": { + "EnableTime": 0.0, + "Platform": { + "Android": "manifest_faa7b7d2c34cdbf6c0426a979b5dff3d.m", + "Windows": "manifest_d21d0c0b54d0ffd725172f4d9d5220f2.m", + "iOS": "manifest_64ded762ca04d233ff2f0c1c56fe33a7.m" + }, + "Revision": 752275 + }, + "VideoEncrypt": { + "FileName": "product_video_encrypt_8e2595dd6e9022cf94915d033cc0c488" + } + }, + "8.2.0_jp_pc": { + "Asb": { + "Android": { + "EnableTime": 0.0, + "Revision": "8.2.0.1", + "Suffix": "ee4b67a962fd2f3ac1b9f576d5dbf0af" + }, + "Iphone": { + "EnableTime": 0.0, + "Revision": "8.2.0.1", + "Suffix": "5004342b65a0a5fbad74ee7a6e185e3b" + }, + "Pc": { + "EnableTime": 0.0, + "Revision": "8.2.0.1", + "Suffix": "2e222cfd4b2da4a42eec9219e6cd57b0" + } + }, + "AsbPreDownload": { + "Android": { + "EncryptKey": "", + "EnableTime": 0.0, + "Revision": "8.2.0.0", + "Suffix": "0a0d9db32c08a0084e55b5b242f2f901" + }, + "Iphone": { + "EncryptKey": "", + "EnableTime": 0.0, + "Revision": "8.2.0.0", + "Suffix": "e17d5e1769a4c72ebe575d03666640f3" + } + }, + "Audio": { + "Platform": { + "Android": "manifest_72379c553cacdc14de7b08eacf30742b.m", + "Windows": "manifest_451a3477478a452ad6d9d7d4efc8a7cc.m", + "iOS": "manifest_44481832f8d5ddf09c37c4c7cc2896e8.m" + }, + "Revision": 750064 + }, + "AudioPreDownload": { + "EnableTime": 0.0, + "Platform": { + "Android": "manifest_e6bba2f4b17b0fa2b8088554c631c89a.m", + "Windows": "manifest_78e29a53978043c1f285dee54cb23609.m", + "iOS": "manifest_520e04c4be6cd2c3114a22b2cb26bdb4.m" + }, + "Revision": 749901 + }, + "VideoEncrypt": { + "FileName": "product_jp_video_encrypt_371861cb164c2b1100e80e0611a14bf8" + } + }, + "8.2.0_kr_pc": { + "Asb": { + "Android": { + "EnableTime": 0.0, + "Revision": "8.2.0.1", + "Suffix": "39ff39a65a48c514f375e3c70a51028b" + }, + "Iphone": { + "EnableTime": 0.0, + "Revision": "8.2.0.1", + "Suffix": "2471dae3368f661815b252cd8a031fc3" + }, + "Pc": { + "EnableTime": 0.0, + "Revision": "8.2.0.1", + "Suffix": "9c4ec7419136ffe6bfc18554d3a00264" + } + }, + "AsbPreDownload": { + "Android": { + "EncryptKey": "", + "EnableTime": 0.0, + "Revision": "8.2.0.0", + "Suffix": "b8d8c127e316b9f3f1feb218572e6d8c" + }, + "Iphone": { + "EncryptKey": "", + "EnableTime": 0.0, + "Revision": "8.2.0.0", + "Suffix": "984ce00a117c7c49a162a54d96bf7eaa" + } + }, + "Audio": { + "Platform": { + "Android": "manifest_72379c553cacdc14de7b08eacf30742b.m", + "Windows": "manifest_451a3477478a452ad6d9d7d4efc8a7cc.m", + "iOS": "manifest_44481832f8d5ddf09c37c4c7cc2896e8.m" + }, + "Revision": 750064 + }, + "AudioPreDownload": { + "EnableTime": 0.0, + "Platform": { + "Android": "manifest_e6bba2f4b17b0fa2b8088554c631c89a.m", + "Windows": "manifest_78e29a53978043c1f285dee54cb23609.m", + "iOS": "manifest_520e04c4be6cd2c3114a22b2cb26bdb4.m" + }, + "Revision": 749901 + }, + "VideoEncrypt": { + "FileName": "product_kr_video_encrypt_86ba299ea5d830e971ddef114ed0db3f" + } + }, + "8.2.0_tw_pc": { + "Asb": { + "Android": { + "EnableTime": 0.0, + "Revision": "8.2.0.1", + "Suffix": "cad1e6f198b9ab5fca1c108bc06edd88" + }, + "Iphone": { + "EnableTime": 0.0, + "Revision": "8.2.0.1", + "Suffix": "6ff0ccd7bae526522ecfb8cd57918565" + }, + "Pc": { + "EnableTime": 0.0, + "Revision": "8.2.0.1", + "Suffix": "531972fab6501729f4a9a0b2b97786f6" + } + }, + "AsbPreDownload": { + "Android": { + "EncryptKey": "", + "EnableTime": 0.0, + "Revision": "8.2.0.0", + "Suffix": "b78c9d9c0795d8b87d9d439dea099840" + }, + "Iphone": { + "EncryptKey": "", + "EnableTime": 0.0, + "Revision": "8.2.0.0", + "Suffix": "9606642009c034873557e2923d08a25c" + } + }, + "Audio": { + "Platform": { + "Android": "manifest_72379c553cacdc14de7b08eacf30742b.m", + "Windows": "manifest_451a3477478a452ad6d9d7d4efc8a7cc.m", + "iOS": "manifest_44481832f8d5ddf09c37c4c7cc2896e8.m" + }, + "Revision": 750064 + }, + "AudioPreDownload": { + "EnableTime": 0.0, + "Platform": { + "Android": "manifest_e6bba2f4b17b0fa2b8088554c631c89a.m", + "Windows": "manifest_78e29a53978043c1f285dee54cb23609.m", + "iOS": "manifest_520e04c4be6cd2c3114a22b2cb26bdb4.m" + }, + "Revision": 749901 + }, + "VideoEncrypt": { + "FileName": "product_asia_video_encrypt_4a156c48c46752110f2a0437edb5c866" + } + }, + "8.3.0_gf_pc": { + "Asb": { + "Android": { + "EnableTime": 0.0, + "Revision": "8.3.0.8", + "Suffix": "35badee39edb1450060c82d4d45a2d14" + }, + "Iphone": { + "EnableTime": 0.0, + "Revision": "8.3.0.8", + "Suffix": "5ff9ae1b2f217117a6ab5c0a1d5e0e0c" + }, + "Pc": { + "EnableTime": 0.0, + "Revision": "8.3.0.8", + "Suffix": "bb6665a0aa885d0f6f5f71ae11c5a625" + } + }, + "AsbPreDownload": { + "Android": { + "EncryptKey": "", + "EnableTime": 0.0, + "Revision": "8.3.0.0", + "Suffix": "bff38644dfcc28d847f4079b6b78f209" + }, + "Iphone": { + "EncryptKey": "", + "EnableTime": 0.0, + "Revision": "8.3.0.0", + "Suffix": "e0c70df3b93cc2e2dbef4efce40c694e" + } + }, + "Audio": { + "Platform": { + "Android": "manifest_fbbea8fe36490219e2e57cbc2f8598b8.m", + "Windows": "manifest_72092f9a49a6a282084f43e93e512b15.m", + "iOS": "manifest_fbc4eebe6c4f5eb0a3f9f44648fab3f5.m" + }, + "Revision": 754243 + }, + "AudioPreDownload": { + "EnableTime": 0.0, + "Platform": { + "Android": "manifest_faa7b7d2c34cdbf6c0426a979b5dff3d.m", + "Windows": "manifest_d21d0c0b54d0ffd725172f4d9d5220f2.m", + "iOS": "manifest_64ded762ca04d233ff2f0c1c56fe33a7.m" + }, + "Revision": 752275 + }, + "VideoEncrypt": { + "FileName": "product_video_encrypt_17f26b71f43728b94058a89bf41475be" + } + }, + "8.3.0_os_pc": { + "Asb": { + "Android": { + "EnableTime": 0.0, + "Revision": "8.3.0.0", + "Suffix": "58dde605404394655d6b9ec2e3c6c52c" + }, + "Iphone": { + "EnableTime": 0.0, + "Revision": "8.3.0.0", + "Suffix": "35784b91422f118f857d4e8f2faeb250" + }, + "Pc": { + "EnableTime": 0.0, + "Revision": "8.3.0.0", + "Suffix": "0a10c24fef1e0b402c74f63b9272f0b0" + } + }, + "AsbPreDownload": { + "Android": { + "EncryptKey": "", + "EnableTime": 0.0, + "Revision": "8.3.0.0", + "Suffix": "58dde605404394655d6b9ec2e3c6c52c" + }, + "Iphone": { + "EncryptKey": "", + "EnableTime": 0.0, + "Revision": "8.3.0.0", + "Suffix": "35784b91422f118f857d4e8f2faeb250" + } + }, + "Audio": { + "Platform": { + "Android": "manifest_4d89bb62c543ddbebd294711773748eb.m", + "Windows": "manifest_d3c1f0505a9d26bac3ed6fa92749b198.m", + "iOS": "manifest_4a755e678fcbcd82fafe7efbf7aa4374.m" + }, + "Revision": 755798 + }, + "AudioPreDownload": { + "EnableTime": 0.0, + "Platform": { + "Android": "manifest_4d89bb62c543ddbebd294711773748eb.m", + "Windows": "manifest_d3c1f0505a9d26bac3ed6fa92749b198.m", + "iOS": "manifest_4a755e678fcbcd82fafe7efbf7aa4374.m" + }, + "Revision": 755798 + }, + "VideoEncrypt": { + "FileName": "product_os_video_encrypt_30348c78d7811519e3e1525d486c9e56" + } + }, + "8.3.0_global_pc": { + "Asb": { + "Android": { + "EnableTime": 0.0, + "Revision": "8.3.0.0", + "Suffix": "11925f0eb302731f4b6b36dcfd21b527" + }, + "Iphone": { + "EnableTime": 0.0, + "Revision": "8.3.0.0", + "Suffix": "9f0f5212e9856607173f65620b2229f0" + }, + "Pc": { + "EnableTime": 0.0, + "Revision": "8.3.0.0", + "Suffix": "adadbc204f9315d28f847c85cfe10795" + } + }, + "AsbPreDownload": { + "Android": { + "EncryptKey": "", + "EnableTime": 0.0, + "Revision": "8.3.0.0", + "Suffix": "11925f0eb302731f4b6b36dcfd21b527" + }, + "Iphone": { + "EncryptKey": "", + "EnableTime": 0.0, + "Revision": "8.3.0.0", + "Suffix": "9f0f5212e9856607173f65620b2229f0" + } + }, + "Audio": { + "Platform": { + "Android": "manifest_4d89bb62c543ddbebd294711773748eb.m", + "Windows": "manifest_d3c1f0505a9d26bac3ed6fa92749b198.m", + "iOS": "manifest_4a755e678fcbcd82fafe7efbf7aa4374.m" + }, + "Revision": 755798 + }, + "AudioPreDownload": { + "EnableTime": 0.0, + "Platform": { + "Android": "manifest_4d89bb62c543ddbebd294711773748eb.m", + "Windows": "manifest_d3c1f0505a9d26bac3ed6fa92749b198.m", + "iOS": "manifest_4a755e678fcbcd82fafe7efbf7aa4374.m" + }, + "Revision": 755798 + }, + "VideoEncrypt": { + "FileName": "product_west_video_encrypt_1e8f6240eb4d8dec86f861919c469551" + } + }, + "8.3.0_jp_pc": { + "Asb": { + "Android": { + "EnableTime": 0.0, + "Revision": "8.3.0.0", + "Suffix": "38f68044b48eb11781cc81bbccc44968" + }, + "Iphone": { + "EnableTime": 0.0, + "Revision": "8.3.0.0", + "Suffix": "24b8c0cd9a3a217bdc891f1014307c1b" + }, + "Pc": { + "EnableTime": 0.0, + "Revision": "8.3.0.0", + "Suffix": "499a86fcdb4a5f8d45640d572f26dc2c" + } + }, + "AsbPreDownload": { + "Android": { + "EncryptKey": "", + "EnableTime": 0.0, + "Revision": "8.3.0.0", + "Suffix": "38f68044b48eb11781cc81bbccc44968" + }, + "Iphone": { + "EncryptKey": "", + "EnableTime": 0.0, + "Revision": "8.3.0.0", + "Suffix": "24b8c0cd9a3a217bdc891f1014307c1b" + } + }, + "Audio": { + "Platform": { + "Android": "manifest_4d89bb62c543ddbebd294711773748eb.m", + "Windows": "manifest_d3c1f0505a9d26bac3ed6fa92749b198.m", + "iOS": "manifest_4a755e678fcbcd82fafe7efbf7aa4374.m" + }, + "Revision": 755798 + }, + "AudioPreDownload": { + "EnableTime": 0.0, + "Platform": { + "Android": "manifest_4d89bb62c543ddbebd294711773748eb.m", + "Windows": "manifest_d3c1f0505a9d26bac3ed6fa92749b198.m", + "iOS": "manifest_4a755e678fcbcd82fafe7efbf7aa4374.m" + }, + "Revision": 755798 + }, + "VideoEncrypt": { + "FileName": "product_jp_video_encrypt_61a6f2020aed085edf3979e8e38ae5da" + } + }, + "8.3.0_kr_pc": { + "Asb": { + "Android": { + "EnableTime": 0.0, + "Revision": "8.3.0.0", + "Suffix": "e42c3bb8522240554e19169edb601c9f" + }, + "Iphone": { + "EnableTime": 0.0, + "Revision": "8.3.0.0", + "Suffix": "a116a80b68e3c9bde4fbb300a573e0ee" + }, + "Pc": { + "EnableTime": 0.0, + "Revision": "8.3.0.0", + "Suffix": "ad2013f4b77aa0de723bb37fd074751f" + } + }, + "AsbPreDownload": { + "Android": { + "EncryptKey": "", + "EnableTime": 0.0, + "Revision": "8.3.0.0", + "Suffix": "e42c3bb8522240554e19169edb601c9f" + }, + "Iphone": { + "EncryptKey": "", + "EnableTime": 0.0, + "Revision": "8.3.0.0", + "Suffix": "a116a80b68e3c9bde4fbb300a573e0ee" + } + }, + "Audio": { + "Platform": { + "Android": "manifest_4d89bb62c543ddbebd294711773748eb.m", + "Windows": "manifest_d3c1f0505a9d26bac3ed6fa92749b198.m", + "iOS": "manifest_4a755e678fcbcd82fafe7efbf7aa4374.m" + }, + "Revision": 755798 + }, + "AudioPreDownload": { + "EnableTime": 0.0, + "Platform": { + "Android": "manifest_4d89bb62c543ddbebd294711773748eb.m", + "Windows": "manifest_d3c1f0505a9d26bac3ed6fa92749b198.m", + "iOS": "manifest_4a755e678fcbcd82fafe7efbf7aa4374.m" + }, + "Revision": 755798 + }, + "VideoEncrypt": { + "FileName": "product_kr_video_encrypt_fe4aed33155528f56389a3c57ad6b2b8" + } + }, + "8.2.0": { + "Asb": { + "Android": { + "EnableTime": 0.0, + "Revision": "", + "Suffix": "" + }, + "Iphone": { + "EnableTime": 0.0, + "Revision": "", + "Suffix": "" + }, + "Pc": { + "EnableTime": 0.0, + "Revision": "", + "Suffix": "" + } + }, + "AsbPreDownload": { + "Android": { + "EncryptKey": "", + "EnableTime": 0.0, + "Revision": "", + "Suffix": "" + }, + "Iphone": { + "EncryptKey": "", + "EnableTime": 0.0, + "Revision": "", + "Suffix": "" + } + }, + "Audio": { + "Platform": {}, + "Revision": 0 + }, + "AudioPreDownload": { + "EnableTime": 0.0, + "Platform": {}, + "Revision": 0 + }, + "VideoEncrypt": { + "FileName": "" + } + }, + "8.5.0_os_pc": { + "Asb": { + "Android": { + "EnableTime": 0.0, + "Revision": "8.5.0.0", + "Suffix": "e5afe91d3a54086eb65da9f0e801f5dc" + }, + "Iphone": { + "EnableTime": 0.0, + "Revision": "8.5.0.0", + "Suffix": "9083702df7869d3dad636b3992b0078c" + }, + "Pc": { + "EnableTime": 0.0, + "Revision": "8.5.0.0", + "Suffix": "3a67c019f62441dea7fe34d6e75b5e37" + } + }, + "AsbPreDownload": { + "Android": { + "EncryptKey": "194BB004413E5E24BE0BC00D30CA7504", + "EnableTime": 1761019200.0, + "Revision": "8.5.0.0", + "Suffix": "e5afe91d3a54086eb65da9f0e801f5dc" + }, + "Iphone": { + "EncryptKey": "194BB004413E5E24BE0BC00D30CA7504", + "EnableTime": 1761019200.0, + "Revision": "8.5.0.0", + "Suffix": "9083702df7869d3dad636b3992b0078c" + } + }, + "Audio": { + "Platform": { + "Android": "manifest_b1fc77a17a4f1bb15f1e7e0a27dcb9f3.m", + "Windows": "manifest_be8c39976a1cb39a3b795218d6af3ce6.m", + "iOS": "manifest_eed3a8d64377d79434127f9b939fb190.m" + }, + "Revision": 767132 + }, + "AudioPreDownload": { + "EnableTime": 1761019200.0, + "Platform": { + "Android": "manifest_b1fc77a17a4f1bb15f1e7e0a27dcb9f3.m", + "Windows": "manifest_be8c39976a1cb39a3b795218d6af3ce6.m", + "iOS": "manifest_eed3a8d64377d79434127f9b939fb190.m" + }, + "Revision": 767132 + }, + "VideoEncrypt": { + "FileName": "product_os_video_encrypt_6c9cfc2a0635fd9683ca9231363bddd1" + } + }, + "8.5.0": { + "Asb": { + "Android": { + "EnableTime": 0.0, + "Revision": "", + "Suffix": "" + }, + "Iphone": { + "EnableTime": 0.0, + "Revision": "", + "Suffix": "" + }, + "Pc": { + "EnableTime": 0.0, + "Revision": "", + "Suffix": "" + } + }, + "AsbPreDownload": { + "Android": { + "EncryptKey": "", + "EnableTime": 0.0, + "Revision": "", + "Suffix": "" + }, + "Iphone": { + "EncryptKey": "", + "EnableTime": 0.0, + "Revision": "", + "Suffix": "" + } + }, + "Audio": { + "Platform": {}, + "Revision": 0 + }, + "AudioPreDownload": { + "EnableTime": 0.0, + "Platform": {}, + "Revision": 0 + }, + "VideoEncrypt": { + "FileName": "" + } + } }, "AesKeys": { "8.2.0": "62 63 63 34 32 62 32 65 38 66 32 31 39 66 62 38 33 38 32 64 64 36 65 64 36 65 64 34 36 34 36 38", "8.3.0": "66 64 38 65 32 66 39 33 31 38 35 38 39 63 32 30 34 34 38 39 37 61 30 32 64 33 37 65 35 62 37 61", - "8.4.0": "31 38 61 39 37 37 64 37 33 62 63 64 37 65 33 61 37 32 31 32 32 35 62 30 31 37 34 64 66 31 37 39" + "8.4.0": "31 38 61 39 37 37 64 37 33 62 63 64 37 65 33 61 37 32 31 32 32 35 62 30 31 37 34 64 66 31 37 39", + "8.5.0": "33 38 34 64 38 34 31 38 64 34 64 35 66 32 34 32 38 33 61 30 30 34 32 35 61 65 62 38 30 62 34 64" } } \ No newline at end of file diff --git a/SdkServer/Handlers/Dispatch/QueryDispatchController.cs b/SdkServer/Handlers/Dispatch/QueryDispatchController.cs index 22e70a1..06ff8cc 100644 --- a/SdkServer/Handlers/Dispatch/QueryDispatchController.cs +++ b/SdkServer/Handlers/Dispatch/QueryDispatchController.cs @@ -14,11 +14,11 @@ public class QueryDispatchController : ControllerBase { var version = HotfixContainer.ExtractVersionNumber(query.Version); var hotfix_version = query.Version!; - if (!ConfigManager.Hotfix.Hotfixes.ContainsKey(hotfix_version)) - { - logger.Warn($"Client sent requesting unsupported game version: {hotfix_version}"); - return BadRequest(); - } + //if (!ConfigManager.Hotfix.Hotfixes.ContainsKey(hotfix_version)) + //{ + // logger.Warn($"Client sent requesting unsupported game version: {hotfix_version}"); + // return BadRequest(); + //} var response = new QueryDispatchResponse { diff --git a/SdkServer/Handlers/Dispatch/QueryGatewayController.cs b/SdkServer/Handlers/Dispatch/QueryGatewayController.cs index c431499..0a646f1 100644 --- a/SdkServer/Handlers/Dispatch/QueryGatewayController.cs +++ b/SdkServer/Handlers/Dispatch/QueryGatewayController.cs @@ -11,15 +11,78 @@ namespace KianaBH.SdkServer.Handlers.Dispatch; public class QueryGatewayController : ControllerBase { [HttpGet("/query_gateway")] - public IActionResult QueryGateway([FromQuery] DispatchQuery query, Logger logger) + public async Task QueryGateway([FromQuery] DispatchQuery query, Logger logger) { var version = HotfixContainer.ExtractVersionNumber(query.Version); var hotfix_version = query.Version!; if (!ConfigManager.Hotfix.Hotfixes.TryGetValue(hotfix_version, out var hotfix)) { - logger.Warn($"Client sent requesting unsupported game version: {hotfix_version}"); - return BadRequest(); + if (ConfigManager.Hotfix.AesKeys.TryGetValue(version, out var aesKey)) + { + var parts = hotfix_version.Split('_'); + var region = string.Join('_', parts.SkipWhile(p => char.IsDigit(p[0]))); + + var domainMap = new Dictionary(StringComparer.OrdinalIgnoreCase) + { + { "gf_pc_beta", "outer-dp-beta-release.bh3.com" }, + { "os_pc", "outer-dp-overseas01.honkaiimpact3.com" }, + { "global_pc", "outer-dp-usa01.honkaiimpact3.com" }, + { "gf_pc", "outer-dp-pc01.bh3.com" }, + { "jp_pc", "outer-dp-jp01.honkaiimpact3.com" }, + { "kr_pc", "outer-dp-kr01.honkaiimpact3.com" }, + { "tw_pc", "outer-dp-asia01.honkaiimpact3.com" } + }; + + if (!domainMap.TryGetValue(region, out var domain)) + { + logger.Warn($"[AUTO-HOTFIX] Unknown region '{region}' for version {hotfix_version}"); + return BadRequest(); + } + + var hotfixUrl = $"https://proxy1.neonteam.dev/{domain}/query_gameserver?version={hotfix_version}&t={query.Timestamp}&uid={query.Uid}&token={query.Token}"; + + using var http = new HttpClient(); + try + { + var httpResponse = await http.GetAsync(hotfixUrl); + if (!httpResponse.IsSuccessStatusCode) + { + logger.Warn($"[AUTO-HOTFIX] Failed to fetch hotfix from {hotfixUrl}: {httpResponse.StatusCode}"); + return BadRequest(); + } + + var base64 = (await httpResponse.Content.ReadAsStringAsync()).Trim(); + + string? decryptedText = null; + try + { + decryptedText = DispatchEncryption.DecryptDispatchContent(version, base64); + } + catch (Exception ex) + { + logger.Error($"[AUTO-HOTFIX] Decrypt error: {ex.Message}"); + } + + ConfigManager.SaveHotfixData(hotfix_version, decryptedText!); + + if (!ConfigManager.Hotfix.Hotfixes.TryGetValue(hotfix_version, out hotfix)) + { + logger.Warn($"[AUTO-HOTFIX] Failed to retrieve hotfix after saving for version {hotfix_version}"); + return BadRequest(); + } + } + catch (Exception ex) + { + logger.Error($"[AUTO-HOTFIX] Exception while fetching hotfix: {ex.Message}"); + return BadRequest(); + } + } + else + { + logger.Warn($"Client sent requesting unsupported game version: {hotfix_version}"); + return BadRequest(); + } } var serverInfo = new QueryGatewayResponse.ServerInfo @@ -93,8 +156,8 @@ public static partial class UrlProvider ], "gf" when version.Contains("beta") => [ - "https://autopatchbeta.bh3.com/asset_bundle/beta_dev/1.0", - "https://bh3rd-beta.bh3.com/asset_bundle/beta_release/1.0", + "https://autopatchbeta.bh3.com/asset_bundle/beta_release/1.0", + "https://bh3rd-beta.bh3.com/asset_bundle/beta_release/1.0" ], "gf" => [ @@ -143,7 +206,7 @@ public static partial class UrlProvider "gf" when version.Contains("beta") => [ "autopatchbeta.bh3.com/tmp/CGAudio", - "autopatchbeta.bh3.com/tmp/CGAudio", + "bh3rd-beta.bh3.com/tmp/CGAudio" ], _ => [