From 9e7d4d20e2b20499d4e806fa3775a1d68146aa70 Mon Sep 17 00:00:00 2001 From: NianGao Dev Date: Sun, 16 Aug 2026 23:23:31 +0800 Subject: [PATCH] =?UTF-8?q?feat(build):=20=E7=A8=8B=E5=BA=8F=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=E4=BD=BF=E7=94=A8=E5=8E=9F=E7=89=88=E7=B4=A0=E6=9D=90?= =?UTF-8?q?=20logo=20+=20=E5=AE=89=E8=A3=85=E5=99=A8=E8=BF=90=E8=A1=8C/?= =?UTF-8?q?=E5=BF=AB=E6=8D=B7=E6=96=B9=E5=BC=8F=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - scripts/make_icon.ps1:素材包 pack.png → go-winres 生成 icon.syso (嵌入 exe 图标与版本信息);窗口图标运行时 SetWindowIcon - 安装.bat:桌面快捷方式 [Y/n](默认 Y)、安装后立即运行 [Y/n](默认 Y) - build.ps1 在 syso 缺失时自动生成图标 --- cmd/client/icon.png | Bin 0 -> 11851 bytes cmd/client/icon.syso | Bin 0 -> 14184 bytes cmd/client/winres.json | 25 +++++++++++++++++++++++++ scripts/build.ps1 | 5 +++++ scripts/installer/安装.bat | 25 +++++++++++++++++++++---- scripts/make_icon.ps1 | 28 ++++++++++++++++++++++++++++ scripts/make_installer.ps1 | 3 ++- 文档/构建与发布.md | 3 ++- 8 files changed, 83 insertions(+), 6 deletions(-) create mode 100644 cmd/client/icon.png create mode 100644 cmd/client/icon.syso create mode 100644 cmd/client/winres.json create mode 100644 scripts/make_icon.ps1 diff --git a/cmd/client/icon.png b/cmd/client/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9715f91339caaa9b5642015618620acde9615ab1 GIT binary patch literal 11851 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 FV1kHUu`~bx literal 0 HcmV?d00001 diff --git a/cmd/client/icon.syso b/cmd/client/icon.syso new file mode 100644 index 0000000000000000000000000000000000000000..08b3f4785f37eb5d1f87d6313ac17be5daae3496 GIT binary patch literal 14184 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 H599vnul 2>&1 -echo 创建桌面快捷方式... -powershell -NoProfile -Command "$ws = New-Object -ComObject WScript.Shell; $s = $ws.CreateShortcut([Environment]::GetFolderPath('Desktop') + '\年糕历险记.lnk'); $s.TargetPath = '!INSTALL_DIR!\mc-client.exe'; $s.WorkingDirectory = '!INSTALL_DIR!'; $s.Save()" +rem 选项 1:创建桌面快捷方式(默认选中 Y) +set "MAKE_LNK=Y" +set /p "MAKE_LNK=是否创建桌面快捷方式 [Y/n](默认 Y):" +if /i "!MAKE_LNK!"=="" set "MAKE_LNK=Y" +if /i "!MAKE_LNK!"=="y" ( + echo 创建桌面快捷方式... + powershell -NoProfile -Command "$ws = New-Object -ComObject WScript.Shell; $s = $ws.CreateShortcut([Environment]::GetFolderPath('Desktop') + '\年糕历险记.lnk'); $s.TargetPath = '!INSTALL_DIR!\mc-client.exe'; $s.WorkingDirectory = '!INSTALL_DIR!'; $s.IconLocation = '!INSTALL_DIR!\mc-client.exe,0'; $s.Save()" +) echo. echo ============================================ -echo 安装完成!桌面已创建「年糕历险记」快捷方式。 +echo 安装完成! echo 游戏存档保存在安装目录 worlds\ 下。 -echo 按任意键退出... echo ============================================ + +rem 选项 2:安装完成后是否立即运行(默认选中 Y) +set "RUN_NOW=Y" +set /p "RUN_NOW=是否立即运行游戏 [Y/n](默认 Y):" +if /i "!RUN_NOW!"=="" set "RUN_NOW=Y" +if /i "!RUN_NOW!"=="y" ( + echo 正在启动游戏... + start "" /D "!INSTALL_DIR!" "!INSTALL_DIR!\mc-client.exe" +) + +echo. +echo 按任意键退出... pause >nul diff --git a/scripts/make_icon.ps1 b/scripts/make_icon.ps1 new file mode 100644 index 00000000..94065850 --- /dev/null +++ b/scripts/make_icon.ps1 @@ -0,0 +1,28 @@ +# 年糕历险记 —— 程序图标生成(构建与发布.md §8:exe/窗口使用原版素材 logo) +# 用法:pwsh -File scripts/make_icon.ps1 +# 流程:素材包 pack.png → cmd/client/icon.png → go-winres 生成 cmd/client/icon.syso +# (资源目录树格式,Go 链接器自动嵌入 exe;资源管理器/任务栏/快捷方式显示图标)。 +$ErrorActionPreference = "Stop" +$root = Split-Path $PSScriptRoot -Parent + +# 1) 定位素材包 pack.png(原版 logo,高优先级包在前)→ 复制为 icon.png +$png = $null +foreach ($dir in Get-ChildItem (Join-Path $root "resourcepacks") -Directory -ErrorAction SilentlyContinue) { + $cand = Join-Path $dir.FullName "pack.png" + if (Test-Path $cand) { $png = $cand; break } +} +if (-not $png) { throw "未找到素材包 pack.png(resourcepacks/*/pack.png)" } +Copy-Item $png (Join-Path $root "cmd\client\icon.png") -Force +Write-Host "== 图标来源:$png ==" + +# 2) go-winres 生成 .syso(多尺寸图标组 + 版本资源;winres.json 引用 icon.png) +$env:GOCACHE = Join-Path $root ".gocache" +Push-Location (Join-Path $root "cmd\client") +try { + go run github.com/tc-hib/go-winres@latest make --in winres.json --out icon --arch amd64 --no-suffix + if ($LASTEXITCODE -ne 0) { throw "go-winres 生成失败" } + Move-Item -Force (Join-Path (Get-Location) "icon") (Join-Path (Get-Location) "icon.syso") +} finally { + Pop-Location +} +Write-Host "== 图标资源已嵌入:cmd/client/icon.syso ==" \ No newline at end of file diff --git a/scripts/make_installer.ps1 b/scripts/make_installer.ps1 index 096e9c81..02db108f 100644 --- a/scripts/make_installer.ps1 +++ b/scripts/make_installer.ps1 @@ -33,7 +33,8 @@ Copy-Item (Join-Path $PSScriptRoot "installer\安装.bat") (Join-Path $stage " 年糕历险记 v$Version ==================== -安装:双击 安装.bat(选择安装目录,自动创建桌面快捷方式)。 +安装:双击 安装.bat(选择安装目录,可选创建桌面快捷方式,默认创建; +安装完成后可选立即运行游戏,默认运行)。 卸载:删除安装目录即可(存档保存在安装目录 worlds/ 下)。 素材包/光影包:解压到 mods/ 目录(原生 Minecraft 资源包格式直接支持)。 diff --git a/文档/构建与发布.md b/文档/构建与发布.md index 57312e6e..dc9b23d5 100644 --- a/文档/构建与发布.md +++ b/文档/构建与发布.md @@ -77,9 +77,10 @@ mc-v1.2.0/ - 产品名称:**年糕历险记**(安装包文件名 `年糕历险记-Setup-v<版本>`;产品、快捷方式、卸载项同名)。 - **两条交付路径**: - 1. **便携安装包(当前交付)**:`pwsh scripts/make_installer.ps1` 生成 `dist/年糕历险记-Setup-v<版本>.zip`,解压后运行 `安装.bat`——全中文交互(选择安装目录、复制文件、创建桌面快捷方式「年糕历险记」)。 + 1. **便携安装包(当前交付)**:`pwsh scripts/make_installer.ps1` 生成 `dist/年糕历险记-Setup-v<版本>.zip`,解压后运行 `安装.bat`——全中文交互(选择安装目录、复制文件、可选创建桌面快捷方式「年糕历险记」默认选中、安装完成后可选立即运行游戏默认选中)。 2. **NSIS 正式安装器(发布时)**:`scripts/installer.nsi`(简体中文界面、开始菜单、卸载器),需发布环境安装 NSIS 3:`makensis /DVERSION=<版本> scripts/installer.nsi`。 - 安装内容:`mc-client.exe`、`mc-server.exe`、`config/`、`mods/`(README)、`resourcepacks/`(默认素材包)。 +- **程序图标(exe/窗口/快捷方式)**:使用素材包原版 logo(`resourcepacks/*/pack.png`)。`scripts/make_icon.ps1` 生成 `cmd/client/icon.syso`(go-winres 资源目录树格式,Go 链接器自动嵌入 exe 图标与版本信息);窗口图标运行时读取 pack.png 经 `render.SetWindowIcon` 设置。`build.ps1` 在 syso 缺失时自动调用 make_icon.ps1。 - 中文要求:安装脚本全中文;游戏内 `lang/zh_cn.json` 随安装包提供;缺失翻译键回退 en_us。 - 存档位置:安装目录 `worlds/`(便携式;NSIS 版卸载时保留存档)。