mirror of
https://github.com/HolographicHat/Yae.git
synced 2025-12-14 18:38:13 +08:00
5.0
This commit is contained in:
@@ -32,7 +32,7 @@ namespace Hook {
|
|||||||
|
|
||||||
uint16_t BitConverter_ToUInt16(ByteArray* val, const int startIndex) {
|
uint16_t BitConverter_ToUInt16(ByteArray* val, const int startIndex) {
|
||||||
const auto ret = CALL_ORIGIN(BitConverter_ToUInt16, val, startIndex);
|
const auto ret = CALL_ORIGIN(BitConverter_ToUInt16, val, startIndex);
|
||||||
if (ret == 0xAB89 && ReadMapped<UINT16>(val->vector, 2) == 3199) {
|
if (ret == 0xAB89 && ReadMapped<UINT16>(val->vector, 2) == 259) {
|
||||||
const auto headLength = ReadMapped<UINT16>(val->vector, 4);
|
const auto headLength = ReadMapped<UINT16>(val->vector, 4);
|
||||||
const auto dataLength = ReadMapped<UINT32>(val->vector, 6);
|
const auto dataLength = ReadMapped<UINT32>(val->vector, 6);
|
||||||
const auto cStr = base64_encode(val->vector + 10 + headLength, dataLength) + "\n";
|
const auto cStr = base64_encode(val->vector + 10 + headLength, dataLength) + "\n";
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ using namespace Genshin;
|
|||||||
|
|
||||||
// DO_APP_FUNC(CN_OFFSET, OS_OFFSET, RETURN, FUNC_NAME, (ARGS...));
|
// DO_APP_FUNC(CN_OFFSET, OS_OFFSET, RETURN, FUNC_NAME, (ARGS...));
|
||||||
|
|
||||||
DO_APP_FUNC(0x0052A510, 0x0052ED10, ByteArray*, il2cpp_array_new_specific, (void* arrayTypeInfo, uint64_t length));
|
DO_APP_FUNC(0x00572860, 0x0056DB70, ByteArray*, il2cpp_array_new_specific, (void* arrayTypeInfo, uint64_t length));
|
||||||
|
|
||||||
DO_APP_FUNC(0x01688250, 0x0168CB50, ByteArray*, RecordUserData, (int32_t nType));
|
DO_APP_FUNC(0x01663180, 0x0165E180, ByteArray*, RecordUserData, (int32_t nType));
|
||||||
|
|
||||||
DO_APP_FUNC(0x0FC7D610, 0x0FCA7240, uint16_t, BitConverter_ToUInt16, (ByteArray* val, int startIndex));
|
DO_APP_FUNC(0x10986650, 0x10981A40, uint16_t, BitConverter_ToUInt16, (ByteArray* val, int startIndex));
|
||||||
|
|||||||
90
res/App.Designer.cs
generated
90
res/App.Designer.cs
generated
@@ -9,8 +9,8 @@
|
|||||||
|
|
||||||
namespace YaeAchievement.res {
|
namespace YaeAchievement.res {
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A strongly-typed resource class, for looking up localized strings, etc.
|
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -22,15 +22,15 @@ namespace YaeAchievement.res {
|
|||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
internal class App {
|
internal class App {
|
||||||
|
|
||||||
private static global::System.Resources.ResourceManager resourceMan;
|
private static global::System.Resources.ResourceManager resourceMan;
|
||||||
|
|
||||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||||
|
|
||||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||||
internal App() {
|
internal App() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns the cached ResourceManager instance used by this class.
|
/// Returns the cached ResourceManager instance used by this class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -44,7 +44,7 @@ namespace YaeAchievement.res {
|
|||||||
return resourceMan;
|
return resourceMan;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Overrides the current thread's CurrentUICulture property for all
|
/// Overrides the current thread's CurrentUICulture property for all
|
||||||
/// resource lookups using this strongly typed resource class.
|
/// resource lookups using this strongly typed resource class.
|
||||||
@@ -58,7 +58,7 @@ namespace YaeAchievement.res {
|
|||||||
resourceCulture = value;
|
resourceCulture = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to all achievement.
|
/// Looks up a localized string similar to all achievement.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -67,7 +67,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("AllAchievement", resourceCulture);
|
return ResourceManager.GetString("AllAchievement", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Please close another instance..
|
/// Looks up a localized string similar to Please close another instance..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -76,7 +76,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("AnotherInstance", resourceCulture);
|
return ResourceManager.GetString("AnotherInstance", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to YaeAchievement ({0}).
|
/// Looks up a localized string similar to YaeAchievement ({0}).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -85,7 +85,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("AppBanner", resourceCulture);
|
return ResourceManager.GetString("AppBanner", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to You need to login genshin impact before exporting..
|
/// Looks up a localized string similar to You need to login genshin impact before exporting..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -94,7 +94,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("ConfigNeedStartGenshin", resourceCulture);
|
return ResourceManager.GetString("ConfigNeedStartGenshin", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Download: {0}.
|
/// Looks up a localized string similar to Download: {0}.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -103,7 +103,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("DownloadLink", resourceCulture);
|
return ResourceManager.GetString("DownloadLink", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Network error ({0}: {1}).
|
/// Looks up a localized string similar to Network error ({0}: {1}).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -112,9 +112,9 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("ExceptionNetwork", resourceCulture);
|
return ResourceManager.GetString("ExceptionNetwork", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Export to:
|
/// Looks up a localized string similar to Export to:
|
||||||
///[0] Cocogoat (https://cocogoat.work/achievement, Default)
|
///[0] Cocogoat (https://cocogoat.work/achievement, Default)
|
||||||
///[1] Snap.HuTao
|
///[1] Snap.HuTao
|
||||||
///[2] Paimon.moe
|
///[2] Paimon.moe
|
||||||
@@ -130,7 +130,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("ExportChoose", resourceCulture);
|
return ResourceManager.GetString("ExportChoose", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Fail, please contact developer to get help information.
|
/// Looks up a localized string similar to Fail, please contact developer to get help information.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -139,7 +139,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("ExportToCocogoatFail", resourceCulture);
|
return ResourceManager.GetString("ExportToCocogoatFail", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Successfully exported to cocogoat..
|
/// Looks up a localized string similar to Successfully exported to cocogoat..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -148,7 +148,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("ExportToCocogoatSuccess", resourceCulture);
|
return ResourceManager.GetString("ExportToCocogoatSuccess", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Successfully exported to {0}.
|
/// Looks up a localized string similar to Successfully exported to {0}.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -157,7 +157,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("ExportToFileSuccess", resourceCulture);
|
return ResourceManager.GetString("ExportToFileSuccess", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Please update Snap Hutao and retry..
|
/// Looks up a localized string similar to Please update Snap Hutao and retry..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -166,7 +166,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("ExportToSnapGenshinNeedUpdate", resourceCulture);
|
return ResourceManager.GetString("ExportToSnapGenshinNeedUpdate", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Successfully exported to Snap Hutao..
|
/// Looks up a localized string similar to Successfully exported to Snap Hutao..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -175,7 +175,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("ExportToSnapGenshinSuccess", resourceCulture);
|
return ResourceManager.GetString("ExportToSnapGenshinSuccess", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Please launch/update Teyvat Guide and retry..
|
/// Looks up a localized string similar to Please launch/update Teyvat Guide and retry..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -184,7 +184,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("ExportToTauriFail", resourceCulture);
|
return ResourceManager.GetString("ExportToTauriFail", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Successfully exported to Teyvat Guide..
|
/// Looks up a localized string similar to Successfully exported to Teyvat Guide..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -193,7 +193,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("ExportToTauriSuccess", resourceCulture);
|
return ResourceManager.GetString("ExportToTauriSuccess", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to {0}.
|
/// Looks up a localized string similar to {0}.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -202,7 +202,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("ExportToWxApp1Success", resourceCulture);
|
return ResourceManager.GetString("ExportToWxApp1Success", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Please update xunkong and retry..
|
/// Looks up a localized string similar to Please update xunkong and retry..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -211,7 +211,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("ExportToXunkongNeedUpdate", resourceCulture);
|
return ResourceManager.GetString("ExportToXunkongNeedUpdate", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Successfully exported to xunkong..
|
/// Looks up a localized string similar to Successfully exported to xunkong..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -220,7 +220,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("ExportToXunkongSuccess", resourceCulture);
|
return ResourceManager.GetString("ExportToXunkongSuccess", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Game process start ({0}).
|
/// Looks up a localized string similar to Game process start ({0}).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -229,7 +229,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("GameLoading", resourceCulture);
|
return ResourceManager.GetString("GameLoading", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Game exited..
|
/// Looks up a localized string similar to Game exited..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -238,7 +238,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("GameProcessExit", resourceCulture);
|
return ResourceManager.GetString("GameProcessExit", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Please update genshin and retry..
|
/// Looks up a localized string similar to Please update genshin and retry..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -247,7 +247,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("GenshinHashError", resourceCulture);
|
return ResourceManager.GetString("GenshinHashError", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Please close game before run this application. ({0}).
|
/// Looks up a localized string similar to Please close game before run this application. ({0}).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -256,7 +256,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("GenshinIsRunning", resourceCulture);
|
return ResourceManager.GetString("GenshinIsRunning", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Network error:.
|
/// Looks up a localized string similar to Network error:.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -265,7 +265,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("NetworkError", resourceCulture);
|
return ResourceManager.GetString("NetworkError", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to No write permission on {0}..
|
/// Looks up a localized string similar to No write permission on {0}..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -274,7 +274,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("NoWritePermission", resourceCulture);
|
return ResourceManager.GetString("NoWritePermission", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Press any key to exit..
|
/// Looks up a localized string similar to Press any key to exit..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -283,7 +283,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("PressKeyToExit", resourceCulture);
|
return ResourceManager.GetString("PressKeyToExit", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Reward not taken.
|
/// Looks up a localized string similar to Reward not taken.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -292,7 +292,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("StatusFinished", resourceCulture);
|
return ResourceManager.GetString("StatusFinished", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Invalid.
|
/// Looks up a localized string similar to Invalid.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -301,7 +301,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("StatusInvalid", resourceCulture);
|
return ResourceManager.GetString("StatusInvalid", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Finished.
|
/// Looks up a localized string similar to Finished.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -310,7 +310,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("StatusRewardTaken", resourceCulture);
|
return ResourceManager.GetString("StatusRewardTaken", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Unfinished.
|
/// Looks up a localized string similar to Unfinished.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -319,9 +319,9 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("StatusUnfinished", resourceCulture);
|
return ResourceManager.GetString("StatusUnfinished", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Description:
|
/// Looks up a localized string similar to Description:
|
||||||
///{0}.
|
///{0}.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal static string UpdateDescription {
|
internal static string UpdateDescription {
|
||||||
@@ -329,7 +329,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("UpdateDescription", resourceCulture);
|
return ResourceManager.GetString("UpdateDescription", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Downloading update package....
|
/// Looks up a localized string similar to Downloading update package....
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -338,7 +338,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("UpdateDownloading", resourceCulture);
|
return ResourceManager.GetString("UpdateDownloading", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Has update: {0} => {1}.
|
/// Looks up a localized string similar to Has update: {0} => {1}.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -347,7 +347,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("UpdateNewVersion", resourceCulture);
|
return ResourceManager.GetString("UpdateNewVersion", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized resource of type System.Byte[].
|
/// Looks up a localized resource of type System.Byte[].
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -357,7 +357,7 @@ namespace YaeAchievement.res {
|
|||||||
return ((byte[])(obj));
|
return ((byte[])(obj));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Upload error to appcenter....
|
/// Looks up a localized string similar to Upload error to appcenter....
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -366,7 +366,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("UploadError", resourceCulture);
|
return ResourceManager.GetString("UploadError", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Use previous fetched data? (yes|no).
|
/// Looks up a localized string similar to Use previous fetched data? (yes|no).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -375,7 +375,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("UsePreviousData", resourceCulture);
|
return ResourceManager.GetString("UsePreviousData", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Downloading Visual C++ Redistributable....
|
/// Looks up a localized string similar to Downloading Visual C++ Redistributable....
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -384,7 +384,7 @@ namespace YaeAchievement.res {
|
|||||||
return ResourceManager.GetString("VcRuntimeDownload", resourceCulture);
|
return ResourceManager.GetString("VcRuntimeDownload", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Installing Visual C++ Redistributable....
|
/// Looks up a localized string similar to Installing Visual C++ Redistributable....
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<root>
|
<root>
|
||||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
<xsd:element name="root" msdata:IsDataSet="true">
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
|
||||||
</xsd:element>
|
</xsd:element>
|
||||||
</xsd:schema>
|
</xsd:schema>
|
||||||
<resheader name="resmimetype">
|
<resheader name="resmimetype">
|
||||||
|
|||||||
@@ -49,7 +49,7 @@
|
|||||||
自动缩放。Windows Presentation Foundation (WPF)应用程序自动感知 DPI,无需
|
自动缩放。Windows Presentation Foundation (WPF)应用程序自动感知 DPI,无需
|
||||||
选择加入。选择加入此设置的 Windows 窗体应用程序(面向 .NET Framework 4.6)还应
|
选择加入。选择加入此设置的 Windows 窗体应用程序(面向 .NET Framework 4.6)还应
|
||||||
在其 app.config 中将 "EnableWindowsFormsHighDpiAutoResizing" 设置设置为 "true"。
|
在其 app.config 中将 "EnableWindowsFormsHighDpiAutoResizing" 设置设置为 "true"。
|
||||||
|
|
||||||
将应用程序设为感知长路径。请参阅 https://docs.microsoft.com/windows/win32/fileio/maximum-file-path-limitation -->
|
将应用程序设为感知长路径。请参阅 https://docs.microsoft.com/windows/win32/fileio/maximum-file-path-limitation -->
|
||||||
|
|
||||||
<application xmlns="urn:schemas-microsoft-com:asm.v3">
|
<application xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||||
|
|||||||
@@ -9,13 +9,13 @@ message Achievement {
|
|||||||
FINISHED = 2;
|
FINISHED = 2;
|
||||||
REWARD_TAKEN = 3;
|
REWARD_TAKEN = 3;
|
||||||
}
|
}
|
||||||
uint32 timestamp = 7;
|
uint32 timestamp = 8;
|
||||||
uint32 current = 12;
|
uint32 current = 3;
|
||||||
uint32 total = 5;
|
uint32 total = 4;
|
||||||
uint32 id = 15;
|
uint32 id = 15;
|
||||||
Status status = 8;
|
Status status = 9;
|
||||||
}
|
}
|
||||||
|
|
||||||
message AchievementAllDataNotify {
|
message AchievementAllDataNotify {
|
||||||
repeated Achievement list = 11;
|
repeated Achievement list = 8;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using YaeAchievement.res;
|
using YaeAchievement.res;
|
||||||
|
|
||||||
namespace YaeAchievement;
|
namespace YaeAchievement;
|
||||||
|
|
||||||
public static partial class AppConfig {
|
public static partial class AppConfig {
|
||||||
|
|
||||||
public static string GamePath { get; private set; } = null!;
|
public static string GamePath { get; private set; } = null!;
|
||||||
|
|
||||||
internal static void Load(string argumentPath) {
|
internal static void Load(string argumentPath) {
|
||||||
@@ -36,8 +36,8 @@ public static partial class AppConfig {
|
|||||||
var osLastWriteTime = File.GetLastWriteTime(osLogPath);
|
var osLastWriteTime = File.GetLastWriteTime(osLogPath);
|
||||||
finalLogPath = cnLastWriteTime > osLastWriteTime ? cnLogPath : osLogPath;
|
finalLogPath = cnLastWriteTime > osLastWriteTime ? cnLogPath : osLogPath;
|
||||||
}
|
}
|
||||||
GamePath = GetGamePathFromLogFile(finalLogPath)
|
GamePath = GetGamePathFromLogFile(finalLogPath)
|
||||||
?? GetGamePathFromLogFile($"{finalLogPath}.last")
|
?? GetGamePathFromLogFile($"{finalLogPath}.last")
|
||||||
?? throw new ApplicationException(App.ConfigNeedStartGenshin);
|
?? throw new ApplicationException(App.ConfigNeedStartGenshin);
|
||||||
pathCacheFile.Write(GamePath);
|
pathCacheFile.Write(GamePath);
|
||||||
}
|
}
|
||||||
@@ -62,5 +62,5 @@ public static partial class AppConfig {
|
|||||||
|
|
||||||
[GeneratedRegex(@"(?m).:/.+(GenshinImpact_Data|YuanShen_Data)", RegexOptions.IgnoreCase)]
|
[GeneratedRegex(@"(?m).:/.+(GenshinImpact_Data|YuanShen_Data)", RegexOptions.IgnoreCase)]
|
||||||
private static partial Regex GamePathRegex();
|
private static partial Regex GamePathRegex();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,13 +2,13 @@
|
|||||||
using Google.Protobuf;
|
using Google.Protobuf;
|
||||||
using Proto;
|
using Proto;
|
||||||
|
|
||||||
namespace YaeAchievement;
|
namespace YaeAchievement;
|
||||||
|
|
||||||
public class CacheFile(string identifier) {
|
public class CacheFile(string identifier) {
|
||||||
|
|
||||||
private readonly string _cacheName = Path.Combine(GlobalVars.CachePath, $"{identifier.MD5Hash()[..16]}.miko");
|
private readonly string _cacheName = Path.Combine(GlobalVars.CachePath, $"{identifier.MD5Hash()[..16]}.miko");
|
||||||
private CacheItem? _content;
|
private CacheItem? _content;
|
||||||
|
|
||||||
public DateTime LastWriteTime => Exists() ? File.GetLastWriteTimeUtc(_cacheName) : DateTime.UnixEpoch;
|
public DateTime LastWriteTime => Exists() ? File.GetLastWriteTimeUtc(_cacheName) : DateTime.UnixEpoch;
|
||||||
|
|
||||||
public bool Exists() => File.Exists(_cacheName);
|
public bool Exists() => File.Exists(_cacheName);
|
||||||
@@ -25,7 +25,7 @@ public class CacheFile(string identifier) {
|
|||||||
public void Write(string data, string? etag = null) => Write(ByteString.CopyFromUtf8(data), data.MD5Hash(), etag);
|
public void Write(string data, string? etag = null) => Write(ByteString.CopyFromUtf8(data), data.MD5Hash(), etag);
|
||||||
|
|
||||||
public void Write(byte[] data, string? etag = null) => Write(ByteString.CopyFrom(data), data.MD5Hash(), etag);
|
public void Write(byte[] data, string? etag = null) => Write(ByteString.CopyFrom(data), data.MD5Hash(), etag);
|
||||||
|
|
||||||
private void Write(ByteString data, string hash, string? etag) {
|
private void Write(ByteString data, string hash, string? etag) {
|
||||||
using var fOut = File.OpenWrite(_cacheName);
|
using var fOut = File.OpenWrite(_cacheName);
|
||||||
using var cOut = new GZipStream(fOut, CompressionLevel.SmallestSize);
|
using var cOut = new GZipStream(fOut, CompressionLevel.SmallestSize);
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ using Proto;
|
|||||||
using YaeAchievement.res;
|
using YaeAchievement.res;
|
||||||
using static Proto.Achievement.Types;
|
using static Proto.Achievement.Types;
|
||||||
|
|
||||||
namespace YaeAchievement;
|
namespace YaeAchievement;
|
||||||
|
|
||||||
public static class Export {
|
public static class Export {
|
||||||
|
|
||||||
@@ -45,7 +45,7 @@ public static class Export {
|
|||||||
private class CocogoatResponse {
|
private class CocogoatResponse {
|
||||||
[JsonPropertyName("key")] public string Code { get; init; } = null!;
|
[JsonPropertyName("key")] public string Code { get; init; } = null!;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void ToCocogoat(AchievementAllDataNotify data) {
|
private static void ToCocogoat(AchievementAllDataNotify data) {
|
||||||
var result = JsonSerializer.Serialize(ExportToUIAFApp(data));
|
var result = JsonSerializer.Serialize(ExportToUIAFApp(data));
|
||||||
using var request = new HttpRequestMessage();
|
using var request = new HttpRequestMessage();
|
||||||
@@ -63,7 +63,7 @@ public static class Export {
|
|||||||
? App.ExportToCocogoatSuccess
|
? App.ExportToCocogoatSuccess
|
||||||
: $"https://cocogoat.work/achievement?memo={responseJson.Code}");
|
: $"https://cocogoat.work/achievement?memo={responseJson.Code}");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void ToWxApp1(AchievementAllDataNotify data) {
|
private static void ToWxApp1(AchievementAllDataNotify data) {
|
||||||
var id = Guid.NewGuid().ToString("N").Substring(20, 8);
|
var id = Guid.NewGuid().ToString("N").Substring(20, 8);
|
||||||
var result = JsonSerializer.Serialize(new Dictionary<string, object> {
|
var result = JsonSerializer.Serialize(new Dictionary<string, object> {
|
||||||
@@ -88,7 +88,7 @@ public static class Export {
|
|||||||
Utils.ShellOpen("ms-windows-store://pdp/?productid=9PH4NXJ2JN52");
|
Utils.ShellOpen("ms-windows-store://pdp/?productid=9PH4NXJ2JN52");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void ToXunkong(AchievementAllDataNotify data) {
|
private static void ToXunkong(AchievementAllDataNotify data) {
|
||||||
if (CheckWinUIAppScheme("xunkong")) {
|
if (CheckWinUIAppScheme("xunkong")) {
|
||||||
Utils.CopyToClipboard(JsonSerializer.Serialize(ExportToUIAFApp(data)));
|
Utils.CopyToClipboard(JsonSerializer.Serialize(ExportToUIAFApp(data)));
|
||||||
@@ -139,7 +139,7 @@ public static class Export {
|
|||||||
Console.WriteLine(App.ExportToFileSuccess, path);
|
Console.WriteLine(App.ExportToFileSuccess, path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void ToSeelie(AchievementAllDataNotify data) {
|
private static void ToSeelie(AchievementAllDataNotify data) {
|
||||||
var output = new Dictionary<uint, Dictionary<string, bool>>();
|
var output = new Dictionary<uint, Dictionary<string, bool>>();
|
||||||
foreach (var ach in data.List.Where(a => a.Status is Status.Finished or Status.RewardTaken)) {
|
foreach (var ach in data.List.Where(a => a.Status is Status.Finished or Status.RewardTaken)) {
|
||||||
@@ -227,7 +227,7 @@ public static class Export {
|
|||||||
private static string JoinToString(this IEnumerable<object> list, string separator) {
|
private static string JoinToString(this IEnumerable<object> list, string separator) {
|
||||||
return string.Join(separator, list);
|
return string.Join(separator, list);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static readonly List<uint> UnusedAchievement = [ 84517 ];
|
private static readonly List<uint> UnusedAchievement = [ 84517 ];
|
||||||
|
|
||||||
private static string ToDesc(this Status status) {
|
private static string ToDesc(this Status status) {
|
||||||
|
|||||||
@@ -10,21 +10,21 @@ public static class Extensions {
|
|||||||
private static readonly Lazy<MD5> md5 = new (MD5.Create);
|
private static readonly Lazy<MD5> md5 = new (MD5.Create);
|
||||||
// ReSharper disable once InconsistentNaming
|
// ReSharper disable once InconsistentNaming
|
||||||
private static readonly Lazy<SHA1> sha1 = new (SHA1.Create);
|
private static readonly Lazy<SHA1> sha1 = new (SHA1.Create);
|
||||||
|
|
||||||
public static byte[] ToBytes(this string text) {
|
public static byte[] ToBytes(this string text) {
|
||||||
return Encoding.UTF8.GetBytes(text);
|
return Encoding.UTF8.GetBytes(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReSharper disable once InconsistentNaming
|
// ReSharper disable once InconsistentNaming
|
||||||
public static string MD5Hash(this string text) {
|
public static string MD5Hash(this string text) {
|
||||||
return text.ToBytes().MD5Hash();
|
return text.ToBytes().MD5Hash();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReSharper disable once InconsistentNaming
|
// ReSharper disable once InconsistentNaming
|
||||||
public static string MD5Hash(this byte[] data) {
|
public static string MD5Hash(this byte[] data) {
|
||||||
return md5.Value.ComputeHash(data).ToHex().ToLower();
|
return md5.Value.ComputeHash(data).ToHex().ToLower();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReSharper disable once InconsistentNaming
|
// ReSharper disable once InconsistentNaming
|
||||||
public static string SHA1Hash(this string text, bool base64 = true) {
|
public static string SHA1Hash(this string text, bool base64 = true) {
|
||||||
var bytes = sha1.Value.ComputeHash(text.ToBytes());
|
var bytes = sha1.Value.ComputeHash(text.ToBytes());
|
||||||
@@ -34,7 +34,7 @@ public static class Extensions {
|
|||||||
public static string ToHex(this byte[] bytes) {
|
public static string ToHex(this byte[] bytes) {
|
||||||
return Convert.ToHexString(bytes);
|
return Convert.ToHexString(bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string ToBase64(this byte[] bytes) {
|
public static string ToBase64(this byte[] bytes) {
|
||||||
return Convert.ToBase64String(bytes);
|
return Convert.ToBase64String(bytes);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
namespace YaeAchievement;
|
namespace YaeAchievement;
|
||||||
|
|
||||||
// ReSharper disable InconsistentNaming
|
// ReSharper disable InconsistentNaming
|
||||||
// ReSharper disable ConvertToConstant.Global
|
// ReSharper disable ConvertToConstant.Global
|
||||||
@@ -8,21 +8,21 @@ namespace YaeAchievement;
|
|||||||
// ReSharper disable once MemberCanBePrivate.Global
|
// ReSharper disable once MemberCanBePrivate.Global
|
||||||
|
|
||||||
public static class GlobalVars {
|
public static class GlobalVars {
|
||||||
|
|
||||||
public static bool DebugProxy => false;
|
public static bool DebugProxy => false;
|
||||||
public static bool UnexpectedExit { get; set; } = true;
|
public static bool UnexpectedExit { get; set; } = true;
|
||||||
public static bool PauseOnExit { get; set; } = true;
|
public static bool PauseOnExit { get; set; } = true;
|
||||||
public static Version AppVersion { get; } = Assembly.GetEntryAssembly()!.GetName().Version!;
|
public static Version AppVersion { get; } = Assembly.GetEntryAssembly()!.GetName().Version!;
|
||||||
|
|
||||||
public static readonly string AppPath = AppDomain.CurrentDomain.BaseDirectory;
|
public static readonly string AppPath = AppDomain.CurrentDomain.BaseDirectory;
|
||||||
private static readonly string CommonData = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
|
private static readonly string CommonData = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
|
||||||
public static readonly string DataPath = Path.Combine(CommonData, "Yae");
|
public static readonly string DataPath = Path.Combine(CommonData, "Yae");
|
||||||
public static readonly string CachePath = Path.Combine(DataPath, "cache");
|
public static readonly string CachePath = Path.Combine(DataPath, "cache");
|
||||||
public static readonly string LibFilePath = Path.Combine(DataPath, "YaeAchievement.dll");
|
public static readonly string LibFilePath = Path.Combine(DataPath, "YaeAchievement.dll");
|
||||||
|
|
||||||
public const uint AppVersionCode = 48;
|
public const uint AppVersionCode = 50;
|
||||||
public const string AppVersionName = "3.8";
|
public const string AppVersionName = "4.0";
|
||||||
|
|
||||||
public const string PipeName = "YaeAchievementPipe";
|
public const string PipeName = "YaeAchievementPipe";
|
||||||
public const string BucketHost = "https://cn-cd-1259389942.file.myqcloud.com";
|
public const string BucketHost = "https://cn-cd-1259389942.file.myqcloud.com";
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ using Windows.Win32.System.Threading;
|
|||||||
namespace YaeAchievement;
|
namespace YaeAchievement;
|
||||||
|
|
||||||
public static class Injector {
|
public static class Injector {
|
||||||
|
|
||||||
public static unsafe bool CreateProcess(string path, out HANDLE hProc, out HANDLE hThread, out uint pid) {
|
public static unsafe bool CreateProcess(string path, out HANDLE hProc, out HANDLE hThread, out uint pid) {
|
||||||
Span<char> cmdLines = stackalloc char[1]; // "\0"
|
Span<char> cmdLines = stackalloc char[1]; // "\0"
|
||||||
var si = new STARTUPINFOW {
|
var si = new STARTUPINFOW {
|
||||||
|
|||||||
14
src/Utils.cs
14
src/Utils.cs
@@ -62,7 +62,7 @@ public static class Utils {
|
|||||||
public static uint? ToUIntOrNull(string? value) {
|
public static uint? ToUIntOrNull(string? value) {
|
||||||
return value != null ? uint.TryParse(value, out var result) ? result : null : null;
|
return value != null ? uint.TryParse(value, out var result) ? result : null : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool ToBooleanOrFalse(string? value) {
|
public static bool ToBooleanOrFalse(string? value) {
|
||||||
return value != null && bool.TryParse(value, out var result) && result;
|
return value != null && bool.TryParse(value, out var result) && result;
|
||||||
}
|
}
|
||||||
@@ -87,7 +87,7 @@ public static class Utils {
|
|||||||
|
|
||||||
// ReSharper disable once NotAccessedField.Local
|
// ReSharper disable once NotAccessedField.Local
|
||||||
private static UpdateInfo _updateInfo = null!;
|
private static UpdateInfo _updateInfo = null!;
|
||||||
|
|
||||||
public static void CheckUpdate(bool useLocalLib) {
|
public static void CheckUpdate(bool useLocalLib) {
|
||||||
var info = UpdateInfo.Parser.ParseFrom(GetBucketFileAsByteArray("schicksal/version"))!;
|
var info = UpdateInfo.Parser.ParseFrom(GetBucketFileAsByteArray("schicksal/version"))!;
|
||||||
if (GlobalVars.AppVersionCode < info.VersionCode) {
|
if (GlobalVars.AppVersionCode < info.VersionCode) {
|
||||||
@@ -160,8 +160,8 @@ public static class Utils {
|
|||||||
public static void CheckGenshinIsRunning() {
|
public static void CheckGenshinIsRunning() {
|
||||||
Process.EnterDebugMode();
|
Process.EnterDebugMode();
|
||||||
foreach (var process in Process.GetProcesses()) {
|
foreach (var process in Process.GetProcesses()) {
|
||||||
if (process.ProcessName is "GenshinImpact" or "YuanShen"
|
if (process.ProcessName is "GenshinImpact" or "YuanShen"
|
||||||
&& !process.HasExited
|
&& !process.HasExited
|
||||||
&& process.MainWindowHandle != nint.Zero
|
&& process.MainWindowHandle != nint.Zero
|
||||||
) {
|
) {
|
||||||
Console.WriteLine(App.GenshinIsRunning, process.Id);
|
Console.WriteLine(App.GenshinIsRunning, process.Id);
|
||||||
@@ -170,10 +170,10 @@ public static class Utils {
|
|||||||
}
|
}
|
||||||
Process.LeaveDebugMode();
|
Process.LeaveDebugMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReSharper disable once InconsistentNaming
|
// ReSharper disable once InconsistentNaming
|
||||||
private static Process? proc;
|
private static Process? proc;
|
||||||
|
|
||||||
public static void InstallExitHook() {
|
public static void InstallExitHook() {
|
||||||
AppDomain.CurrentDomain.ProcessExit += (_, _) => {
|
AppDomain.CurrentDomain.ProcessExit += (_, _) => {
|
||||||
proc?.Kill();
|
proc?.Kill();
|
||||||
@@ -222,7 +222,7 @@ public static class Utils {
|
|||||||
Environment.Exit(0);
|
Environment.Exit(0);
|
||||||
}
|
}
|
||||||
AppDomain.CurrentDomain.ProcessExit += (_, _) => {
|
AppDomain.CurrentDomain.ProcessExit += (_, _) => {
|
||||||
try {
|
try {
|
||||||
File.Delete(GlobalVars.LibFilePath);
|
File.Delete(GlobalVars.LibFilePath);
|
||||||
} catch (Exception) { /* ignored */ }
|
} catch (Exception) { /* ignored */ }
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user