5 Commits

Author SHA1 Message Date
wangdage12
0c775a5d3d Revise README for injection features and dependencies
Updated README to clarify injection functionality and added links to required repositories.
2026-01-29 11:54:32 +08:00
wangdage12
00cd5a8c07 Revise README for installation and server status
Updated installation instructions and server status information.
2026-01-27 14:00:53 +08:00
wangdage12
d93ae2bb83 Update README.md 2026-01-20 11:40:34 +08:00
fanbook-wangdage
2f148488f4 修复工具异步加载问题、添加武器和角色id、提示版本号 2026-01-16 12:33:26 +08:00
fanbook-wangdage
df92894307 支持公告中的发行版字段 2026-01-16 11:39:28 +08:00
8 changed files with 87 additions and 30 deletions

View File

@@ -4,7 +4,7 @@
**中文**
胡桃工具箱是一款以 MIT 协议开源的原神工具箱,专为现代化 Windows 平台设计,旨在改善桌面端玩家的游戏体验。
该版本注入功能暂不可用,并且由于缺失资源和开发能力,不建议长期使用
自带的注入功能只有FPS调整只保证FPS调整长期可用你可以使用`注入选项`下方的第三方工具来使用更多功能,本项目提供的所有注入功能都不会影响游戏的公平性。
有条件的话可以加入discord服务器https://discord.gg/ucH3mgeWpQ
@@ -15,8 +15,6 @@ Snap Hutao is an open-source Genshin Impact toolkit under MIT license, designed
## 🚀 安装 / Installation
> 如果你的设备不支持ipv6请下载末尾带有`ipv4`的压缩包,正常情况下请尽量下载普通包(服务器速度快)
目前 Sanp.Hutao.Rev 更新了打包方式,并采用了标准现代的 msi 安装,方便程序获取管理员权限和更多的功能设置,不再需要原 Depolyment
只有`.msi`安装包安装的可以和之前的版本共存,如果通过`.msix`安装包安装则可能出现`0x80073CF3`,备份旧版本数据文件夹后卸载旧版本即可继续安装,将旧版本数据文件夹里面的文件复制到该版本的数据文件夹中即可恢复数据
@@ -34,7 +32,7 @@ Snap Hutao is an open-source Genshin Impact toolkit under MIT license, designed
**目前元数据的编写进度:**
| 项目V6.2 | 是否完成 |
| 项目V6.3 | 是否完成 |
| ----------- | ----------- |
| 总体数据 | ✔️ |
@@ -52,40 +50,55 @@ Snap Hutao is an open-source Genshin Impact toolkit under MIT license, designed
https://deepwiki.com/DGP-Studio/Snap.Hutao
https://deepwiki.com/DGP-Studio/Snap.Hutao.Server
**该项目所需的其他仓库,欢迎贡献或者自部署**
- 元数据:[Snap.Metadata](https://github.com/wangdage12/Snap.Metadata)
- 服务端:[Snap.Server](https://github.com/wangdage12/Snap.Server)
- Web管理后台和官网[Snap.Server.Web](https://github.com/wangdage12/Snap.Server.Web)
## 打包测试
由于采用了 wix 进行打包程序VS 需要安装 **HeatWave for VS2022**2026兼容。需要 msi 安装包时,右键选中 Snap.Hutao.Installer 生成后即可在目标目录找到。默认目录Snap.Hutao.Installer\bin\x64\Release\en-US\Snap.Hutao.Installer.msi
### 资源
## 资源和服务器状态
> 注意普通包的资源服务器只能使用ipv6连接也就是说你的电脑必须有ipv6并且建议你手动配置DNS为`223.5.5.5`
> 如果你的设备不支持ipv6请下载末尾带有`ipv4`的压缩包
> 由于数据文件夹中有元数据的仓库和图片缓存,才得以恢复资源文件
> 如果你发现之前版本可以显示的图片不能显示了,请查找旧数据文件夹
> `C:\Users\<用户名>\AppData\Local\Packages\xxxDGPStudio.SnapHutao_xxx\LocalCache\ImageCache`
> 并将`ImageCache`文件夹提供给我,我会尽力恢复资源
[服务器状态页面](http://serverjp.wdg.cloudns.ch:3001/status/hts)
<a href="https://uptimerobot.com" target="_blank" rel="noopener">
<picture>
<source media="(prefers-color-scheme: dark)"
srcset="https://raw.githubusercontent.com/wangdage12/wangdage12/main/assets/uptimerobot-logo.svg">
<img alt="logo"
src="https://raw.githubusercontent.com/wangdage12/wangdage12/main/assets/uptimerobot-logo-dark.svg" width="300">
</picture>
</a>
我们将使用[UptimeRobot](https://uptimerobot.com)赞助的监控服务作为新的服务器状态页面,它有更多的功能
[新服务器状态页面](https://stats.uptimerobot.com/fHxWxdxK61)
[旧服务器状态页面](http://serverjp.wdg.cloudns.ch:3001/status/hts)
---
**元数据仓库:**
https://github.com/wangdage12/Snap.Metadata
镜像:
仓库镜像:
![http://serverjp.wdg.cloudns.ch:3001/api/badge/11/status?style=flat-square](http://serverjp.wdg.cloudns.ch:3001/api/badge/11/status?style=flat-square)
http://htgit.wdg.cloudns.ch/wdg1122/Snap.Metadata
---
**临时API**
**API**
![http://serverjp.wdg.cloudns.ch:3001/api/badge/10/status?style=flat-square](http://serverjp.wdg.cloudns.ch:3001/api/badge/10/status?style=flat-square)
https://htserver.wdg.cloudns.ch/api/
---
**临时资源站:**
**图片资源站:**
https://htserver.wdg.cloudns.ch/

View File

@@ -2,7 +2,7 @@
<Package
Name="Snap.Hutao"
Manufacturer="Millennium Science Technology R-D Inst"
Version="1.18.1.0"
Version="1.18.2.0"
UpgradeCode="121203be-60cb-408f-92cc-7080f6598e68"
Scope="perMachine">

View File

@@ -126,6 +126,9 @@ internal static class AvatarIds
public static readonly AvatarId Nefer = 10000122;
public static readonly AvatarId Durin = 10000123;
public static readonly AvatarId Jahoda = 10000124;
public static readonly AvatarId Columbina = 10000125;
public static readonly AvatarId Zibai = 10000126;
public static readonly AvatarId Illuga = 10000127;
private static readonly FrozenSet<AvatarId> StandardWishIds =
[

View File

@@ -22,9 +22,8 @@ internal static class WeaponIds
11401U, 11402U, 11403U, 11405U,
12401U, 12402U, 12403U, 12405U,
13401U, 13407U,
14401U, 14402U, 14403U, 14409U,
15401U, 15402U, 15403U, 15405U,
15434U
14401U, 14402U, 14403U, 14409U, 14433U, 14434U,
15401U, 15402U, 15403U, 15405U, 15434U
];
public static readonly FrozenSet<WeaponId> OrangeStandardWishIds =
@@ -34,7 +33,8 @@ internal static class WeaponIds
13502U, 13505U,
14501U, 14502U,
15501U, 15502U,
15515U, 11518U
15515U, 11518U,
14522U, 11519U
];
public static bool IsOrangeStandardWish(in WeaponId weaponId)

View File

@@ -47,6 +47,9 @@ internal sealed partial class HutaoAsAService : IHutaoAsAService
}
}
// Filter announcements by Distribution
array = [.. array.Where(a => string.IsNullOrEmpty(a.Distribution) || a.Distribution == "Snap Hutao")]; // 请自行修改发行版名称
foreach (HutaoAnnouncement item in array)
{
item.DismissCommand = dismissCommand;

View File

@@ -11,7 +11,7 @@
<UseWinUI>true</UseWinUI>
<UseWPF>False</UseWPF>
<!-- 配置版本号 -->
<Version>1.18.1.0</Version>
<Version>1.18.2.0</Version>
<UseWindowsForms>False</UseWindowsForms>
<ImplicitUsings>False</ImplicitUsings>

View File

@@ -1,4 +1,5 @@
// Copyright (c) DGP Studio. All rights reserved.
// Copyright (c) Millennium-Science-Technology-R-D-Inst. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Core.ExceptionService;
@@ -129,12 +130,39 @@ internal sealed partial class LaunchGameViewModel : Abstraction.ViewModel, IView
await HandleGamePathEntryChangeAsync().ConfigureAwait(false);
Shared.ResumeLaunchExecutionAsync(this).SafeForget();
// 初始化第三方工具列表
// 初始化第三方工具列表(不阻塞页面加载)
_ = InitializeThirdPartyToolsInBackgroundAsync(token);
return true;
}
private async Task InitializeThirdPartyToolsInBackgroundAsync(CancellationToken token)
{
try
{
ImmutableArray<ToolInfo> tools = await InitializeThirdPartyToolsAsync().ConfigureAwait(false);
SentrySdk.AddBreadcrumb($"Initialized {tools.Length} third party tools", category: "ThirdPartyTool");
thirdPartyToolsField.Value = tools;
// Yield to let navigation/UI finish first.
await Task.Yield();
if (token.IsCancellationRequested || IsViewUnloaded.Value)
{
return;
}
ImmutableArray<ToolInfo> tools = await InitializeThirdPartyToolsAsync(token).ConfigureAwait(false);
if (token.IsCancellationRequested || IsViewUnloaded.Value)
{
return;
}
await taskContext.SwitchToMainThreadAsync();
if (!token.IsCancellationRequested && !IsViewUnloaded.Value)
{
thirdPartyToolsField.Value = tools;
}
}
catch (OperationCanceledException)
{
}
catch (Exception ex)
{
@@ -142,7 +170,8 @@ internal sealed partial class LaunchGameViewModel : Abstraction.ViewModel, IView
SentrySdk.CaptureException(ex);
}
return true;
}
[Command("IdentifyMonitorsCommand")]
@@ -337,7 +366,7 @@ internal sealed partial class LaunchGameViewModel : Abstraction.ViewModel, IView
}
}
private async ValueTask<ImmutableArray<ToolInfo>> InitializeThirdPartyToolsAsync()
private async ValueTask<ImmutableArray<ToolInfo>> InitializeThirdPartyToolsAsync(CancellationToken token)
{
try
{
@@ -345,11 +374,18 @@ internal sealed partial class LaunchGameViewModel : Abstraction.ViewModel, IView
IThirdPartyToolService thirdPartyToolService = serviceProvider.GetRequiredService<IThirdPartyToolService>();
SentrySdk.AddBreadcrumb("Got IThirdPartyToolService instance", category: "ThirdPartyTool");
// Note: service API is not cancellable; we only honor cancellation before/after the call.
token.ThrowIfCancellationRequested();
ImmutableArray<ToolInfo> tools = await thirdPartyToolService.GetToolsAsync().ConfigureAwait(false);
SentrySdk.AddBreadcrumb($"Got {tools.Length} tools from service", category: "ThirdPartyTool");
token.ThrowIfCancellationRequested();
SentrySdk.AddBreadcrumb($"Got {tools.Length} tools from service", category: "ThirdPartyTool");
return tools;
}
catch (OperationCanceledException)
{
return ImmutableArray<ToolInfo>.Empty;
}
catch (Exception ex)
{
SentrySdk.AddBreadcrumb($"Failed to initialize third party tools: {ex.Message}", category: "ThirdPartyTool");

View File

@@ -16,4 +16,6 @@ internal class UploadAnnouncement
public string Link { get; set; } = default!;
public string? MaxPresentVersion { get; set; }
public string? Distribution { get; set; }
}