mirror of
https://github.com/soarqin/DSP_Mods.git
synced 2026-03-22 07:13:24 +08:00
Add UpdateGameDlls target to auto-refresh publicized game DLLs
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -4,6 +4,9 @@
|
||||
# Rider project files
|
||||
/.idea/
|
||||
|
||||
# VS Code project files
|
||||
/.vscode/
|
||||
|
||||
# C# generated folders
|
||||
bin/
|
||||
obj/
|
||||
|
||||
131
AGENTS.md
Normal file
131
AGENTS.md
Normal file
@@ -0,0 +1,131 @@
|
||||
# Agent Guidelines
|
||||
|
||||
## Rules
|
||||
|
||||
- Update `AGENTS.md` after completing every task.
|
||||
- Do not record a changelog in `AGENTS.md`; modify the document content directly instead.
|
||||
- All documentation and code comments must be written in English.
|
||||
|
||||
## Project Overview
|
||||
|
||||
This repository is a collection of **BepInEx mods** for the game **Dyson Sphere Program (DSP)**, a factory/automation game on Steam. Each subdirectory is an independent mod plugin loaded by the BepInEx framework at game startup. Mods use **HarmonyLib** to patch the game's compiled C# methods at runtime (prefix, postfix, and transpiler patches).
|
||||
|
||||
## Tech Stack
|
||||
|
||||
- **Language:** C# (`net472` / `netstandard2.1`, latest LangVersion)
|
||||
- **Modding Framework:** BepInEx 5.x
|
||||
- **Patching Library:** HarmonyLib (runtime IL patching via `[HarmonyPatch]` attributes)
|
||||
- **Build System:** Visual Studio solution (`DSP_Mods.sln`), SDK-style `.csproj` per mod
|
||||
- **Package Manager:** NuGet (standard feed + BepInEx dev feed)
|
||||
- **Packaging:** PowerShell `Compress-Archive` in post-build produces Thunderstore-ready `.zip` files
|
||||
- **Game DLL references:** `AssemblyFromGame/Assembly-CSharp.dll` and `UnityEngine.UI.dll`
|
||||
- **Notable dependencies:** DSPModSave, NebulaMultiplayer API, CommonAPI, NLua, obs-websocket-dotnet, Mono.Cecil
|
||||
|
||||
## Repository Structure
|
||||
|
||||
```
|
||||
DSP_Mods/
|
||||
├── DSP_Mods.sln # Visual Studio solution
|
||||
├── AssemblyFromGame/ # Game DLLs used as compile-time references
|
||||
├── UXAssist/ # Core UX mod + shared library (largest mod)
|
||||
├── CheatEnabler/ # Cheat functions mod (depends on UXAssist)
|
||||
├── Dustbin/ # Storage/tank dustbin mod
|
||||
├── DustbinPreloader/ # BepInEx preloader for Dustbin
|
||||
├── HideTips/ # Hides tutorial/tip popups
|
||||
├── LabOpt/ # Lab performance optimizations
|
||||
├── LabOptPreloader/ # BepInEx preloader for LabOpt
|
||||
├── LogisticMiner/ # Logistic stations auto-mine ores
|
||||
├── LuaScriptEngine/ # Lua scripting support for the game
|
||||
├── MechaDronesTweaks/ # Mecha drone speed/energy tweaks
|
||||
├── OverclockEverything/ # Speed/power multipliers for all buildings
|
||||
├── PoolOpt/ # Memory pool optimization on save loading
|
||||
├── UniverseGenTweaks/ # Universe generator parameter tweaks
|
||||
├── UserCloak/ # Hides/fakes Steam account info
|
||||
└── CompressSave/ # Stub only (moved to external repo)
|
||||
```
|
||||
|
||||
## Mods Summary
|
||||
|
||||
| Mod | GUID | Description |
|
||||
|-----|------|-------------|
|
||||
| **UXAssist** | `org.soardev.uxassist` | Core QoL mod and shared library. Window resize, profile-based saves, FPS control, factory/logistics/navigation/Dyson Sphere tweaks, UI improvements, config panel UI, and `Common/` + `UI/` widget library shared by other mods. |
|
||||
| **CheatEnabler** | `org.soardev.cheatenabler` | Cheat pack (depends on UXAssist). Instant build, architect mode, infinite resources, power boosts, Dyson Sphere cheats, mecha invincibility, and more. |
|
||||
| **LogisticMiner** | — | Makes logistic stations automatically mine ores and water from the current planet. |
|
||||
| **HideTips** | — | Suppresses all tutorial popups, random tips, achievement/milestone cards, and skips the prologue cutscene. |
|
||||
| **MechaDronesTweaks** | — | Configurable drone speed multiplier, skip stage-1 animation, reduce energy consumption. Successor to FastDrones. |
|
||||
| **OverclockEverything** | — | Multiplies speed and power consumption of belts, sorters, assemblers, labs, miners, generators, ejectors, and silos. |
|
||||
| **PoolOpt** | — | Shrinks all object pool arrays to actual used size on save load, then forces GC to reduce memory footprint. |
|
||||
| **UniverseGenTweaks** | — | Adds Epic difficulty, expands max star count to 1024, allows rare veins and flat terrain on birth planet. |
|
||||
| **UserCloak** | — | Prevents Steam leaderboard/achievement uploads; can fake or block Steam user identity. |
|
||||
| **Dustbin** | — | Turns storage boxes and tanks into item-destroying dustbins. Supports Nebula multiplayer and DSPModSave. Requires DustbinPreloader. |
|
||||
| **DustbinPreloader** | — | Mono.Cecil preloader that injects `bool IsDustbin` into `StorageComponent` and `TankComponent` before game load. |
|
||||
| **LabOpt** | — | Optimizes stacked Matrix Lab updates via a `rootLabId` concept. Temporarily marked obsolete. Requires LabOptPreloader. |
|
||||
| **LabOptPreloader** | — | Mono.Cecil preloader that injects `int rootLabId` into `LabComponent` before game load. |
|
||||
| **LuaScriptEngine** | `org.soardev.luascriptengine` | Embeds NLua runtime; loads `.lua` files from `scripts/`; exposes game lifecycle hooks and OBS WebSocket integration. |
|
||||
| **CompressSave** | — | Stub only; functionality moved to external repository `soarqin/DSP_Mods_TO`. |
|
||||
|
||||
## Build System
|
||||
|
||||
### Shared MSBuild Configuration
|
||||
|
||||
Common properties and references are factored into two root-level files that MSBuild automatically imports for every project:
|
||||
|
||||
- **`Directory.Build.props`** — shared `PropertyGroup` defaults (`TargetFramework`, `AllowUnsafeBlocks`, `LangVersion`, `RestoreAdditionalProjectSources`) and shared `ItemGroup`s (BepInEx packages, game DLL references, `Microsoft.NETFramework.ReferenceAssemblies`).
|
||||
- **`Directory.Build.targets`** — defines the `UpdateGameDlls`, `Pack`, and `CopyToParentPackage` targets (see below).
|
||||
- **`UpdateGameDlls.ps1`** — PowerShell script invoked by the `UpdateGameDlls` target; locates the DSP installation via Steam registry and `libraryfolders.vdf`, compares DLL timestamps, and re-publicizes stale DLLs using `assembly-publicizer`.
|
||||
|
||||
Individual `.csproj` files only declare what is unique to that project (GUID, version, extra packages, embedded resources).
|
||||
|
||||
### Automatic Game DLL Update
|
||||
|
||||
`AssemblyFromGame/` holds publicized copies of two game DLLs used as compile-time references. They are refreshed automatically **before every build** by the `UpdateGameDlls` MSBuild target, which calls `UpdateGameDlls.ps1`.
|
||||
|
||||
The script:
|
||||
1. Reads the Steam installation path from the Windows registry (`HKCU\Software\Valve\Steam`).
|
||||
2. Parses `steamapps/libraryfolders.vdf` to find the library that contains DSP (AppID `1366540`).
|
||||
3. Locates `<game_root>/DSPGAME_Data/Managed/`.
|
||||
4. For each DLL (`Assembly-CSharp.dll`, `UnityEngine.UI.dll`): if the game copy is newer than the local copy, runs `assembly-publicizer … --strip --overwrite` to regenerate the local file and stamps it with the source timestamp.
|
||||
|
||||
The target can also be run explicitly:
|
||||
```
|
||||
dotnet build -t:UpdateGameDlls
|
||||
```
|
||||
|
||||
**Prerequisite:** `assembly-publicizer` must be installed as a .NET global tool:
|
||||
```
|
||||
dotnet tool install -g BepInEx.AssemblyPublicizer.Cli
|
||||
```
|
||||
If the tool is missing or DSP is not found, the target prints a warning and continues without failing the build.
|
||||
|
||||
### Packaging
|
||||
|
||||
Packaging is a **separate, explicit build target** — it does not run on every normal build.
|
||||
|
||||
To produce a Thunderstore-ready zip:
|
||||
```
|
||||
dotnet build -t:Pack -c Release
|
||||
```
|
||||
|
||||
The `Pack` target (defined in `Directory.Build.targets`) uses pure MSBuild tasks (`MakeDir`, `Copy`, `Delete`) plus `powershell.exe -NoProfile -Command` for `Compress-Archive`. Calling `powershell.exe` as an explicit executable path works correctly from any shell environment (cmd, PowerShell, bash/WSL).
|
||||
|
||||
**Per-project packaging properties** (set in the project's `PropertyGroup`):
|
||||
|
||||
| Property | Default | Description |
|
||||
|----------|---------|-------------|
|
||||
| `PackHasChangelog` | `false` | Include `CHANGELOG.md` in the zip |
|
||||
| `PackUsePluginsLayout` | `false` | Use `plugins/` + `patchers/` folder layout (Dustbin, LabOpt) |
|
||||
| `PackPreloaderTargetDir` | *(empty)* | Preloader projects: destination folder for `CopyToParentPackage` |
|
||||
|
||||
**Preloader projects** (DustbinPreloader, LabOptPreloader) use `CopyToParentPackage` instead of `Pack`:
|
||||
```
|
||||
dotnet build -t:CopyToParentPackage -c Release
|
||||
```
|
||||
This copies the preloader DLL into the sibling main mod's `package/patchers/` directory, ready to be zipped by the main mod's `Pack` target.
|
||||
|
||||
## Key Architectural Patterns
|
||||
|
||||
- **Shared library:** `UXAssist` acts as a common library. `CheatEnabler` and `UniverseGenTweaks` reference `UXAssist.csproj` directly to reuse `Common/`, `UI/`, and config panel infrastructure.
|
||||
- **Preloader pattern:** `DustbinPreloader` and `LabOptPreloader` use Mono.Cecil to inject new fields into game assemblies at BepInEx preload time, enabling their corresponding main mods to read/write those fields via normal C# without reflection.
|
||||
- **Internationalization:** `UXAssist/Common/I18N.cs` provides bilingual (EN + ZH) string lookup used across UXAssist and CheatEnabler.
|
||||
- **Transpiler patches:** Performance-critical mods (LabOpt, MechaDronesTweaks) use `[HarmonyTranspiler]` to rewrite IL instructions directly for maximum efficiency.
|
||||
- **Save persistence:** Mods that need to persist data use the `IModCanSave` interface from DSPModSave.
|
||||
@@ -1,44 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net472</TargetFramework>
|
||||
<BepInExPluginGuid>org.soardev.cheatenabler</BepInExPluginGuid>
|
||||
<Description>DSP MOD - CheatEnabler</Description>
|
||||
<Version>2.4.2</Version>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<PackageId>CheatEnabler</PackageId>
|
||||
<RootNamespace>CheatEnabler</RootNamespace>
|
||||
<RestoreAdditionalProjectSources>https://nuget.bepinex.dev/v3/index.json</RestoreAdditionalProjectSources>
|
||||
<PackHasChangelog>true</PackHasChangelog>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="BepInEx.Core" Version="5.*" />
|
||||
<PackageReference Include="BepInEx.PluginInfoProps" Version="1.*" />
|
||||
<PackageReference Include="UnityEngine.Modules" Version="2022.3.62" IncludeAssets="compile" />
|
||||
<!-- <PackageReference Include="DysonSphereProgram.GameLibs" Version="0.10.32.*-r.*" /> -->
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Assembly-CSharp">
|
||||
<HintPath>..\AssemblyFromGame\Assembly-CSharp.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UI">
|
||||
<HintPath>..\AssemblyFromGame\UnityEngine.UI.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TargetFramework.TrimEnd(`0123456789`))' == 'net'">
|
||||
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" PrivateAssets="all" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\UXAssist\UXAssist.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Configuration)' == 'Release'">
|
||||
<Exec Command="del /F /Q package\$(ProjectName)-$(Version).zip
|
||||
powershell Compress-Archive -Force -DestinationPath 'package/$(ProjectName)-$(Version).zip' -Path '$(TargetPath)', package/icon.png, package/manifest.json, README.md, CHANGELOG.md" />
|
||||
</Target>
|
||||
</Project>
|
||||
|
||||
36
Directory.Build.props
Normal file
36
Directory.Build.props
Normal file
@@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project>
|
||||
<!-- Common properties shared by all DSP mod projects -->
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net472</TargetFramework>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<RestoreAdditionalProjectSources>https://nuget.bepinex.dev/v3/index.json</RestoreAdditionalProjectSources>
|
||||
<!-- Set to true in projects that include a CHANGELOG.md in the package -->
|
||||
<PackHasChangelog>false</PackHasChangelog>
|
||||
<!-- Set to true in projects that use the plugins/patchers layout (Dustbin, LabOpt) -->
|
||||
<PackUsePluginsLayout>false</PackUsePluginsLayout>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Common NuGet packages for all mods -->
|
||||
<ItemGroup>
|
||||
<PackageReference Include="BepInEx.Core" Version="5.*" />
|
||||
<PackageReference Include="BepInEx.PluginInfoProps" Version="1.*" />
|
||||
<PackageReference Include="UnityEngine.Modules" Version="2022.3.62" IncludeAssets="compile" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Game DLL references (local copies in AssemblyFromGame/) -->
|
||||
<ItemGroup>
|
||||
<Reference Include="Assembly-CSharp">
|
||||
<HintPath>$(MSBuildThisFileDirectory)AssemblyFromGame\Assembly-CSharp.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UI">
|
||||
<HintPath>$(MSBuildThisFileDirectory)AssemblyFromGame\UnityEngine.UI.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<!-- .NET Framework reference assemblies (only needed when targeting net*) -->
|
||||
<ItemGroup Condition="'$(TargetFramework.TrimEnd(`0123456789`))' == 'net'">
|
||||
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" PrivateAssets="all" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
141
Directory.Build.targets
Normal file
141
Directory.Build.targets
Normal file
@@ -0,0 +1,141 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project>
|
||||
<!--
|
||||
UpdateGameDlls target: locates the Dyson Sphere Program installation via the
|
||||
Steam registry and libraryfolders.vdf, then uses assembly-publicizer to
|
||||
refresh AssemblyFromGame/ whenever the game DLLs are newer than the local copies.
|
||||
|
||||
Runs automatically before every build (BeforeTargets="BeforeBuild") and can
|
||||
also be invoked explicitly:
|
||||
dotnet build -t:UpdateGameDlls
|
||||
|
||||
Requires assembly-publicizer on PATH or in %USERPROFILE%\.dotnet\tools\:
|
||||
dotnet tool install -g BepInEx.AssemblyPublicizer.Cli
|
||||
-->
|
||||
<Target Name="UpdateGameDlls" BeforeTargets="BeforeBuild">
|
||||
<Exec
|
||||
Command="powershell.exe -NoProfile -ExecutionPolicy Bypass -File "$(MSBuildThisFileDirectory)UpdateGameDlls.ps1" -ProjectRoot "$(MSBuildThisFileDirectory.TrimEnd('\\/'))""
|
||||
ConsoleToMSBuild="true"
|
||||
IgnoreExitCode="false"
|
||||
WorkingDirectory="$(MSBuildThisFileDirectory)" />
|
||||
</Target>
|
||||
|
||||
<!--
|
||||
Pack target: assembles a Thunderstore-ready zip under package/.
|
||||
Run explicitly with: dotnet build -t:Pack -c Release
|
||||
It does NOT run automatically on every build.
|
||||
|
||||
Per-project customisation properties (set before this file is imported):
|
||||
PackHasChangelog – set to 'true' to include CHANGELOG.md in the zip
|
||||
PackUsePluginsLayout – set to 'true' for the plugins/patchers folder layout
|
||||
(used by Dustbin and LabOpt)
|
||||
-->
|
||||
|
||||
<!-- ── Simple layout ──────────────────────────────────────────────────────
|
||||
Zips: <ProjectName>.dll icon.png manifest.json README.md
|
||||
(+ CHANGELOG.md when PackHasChangelog=true)
|
||||
Output: package/<ProjectName>-<Version>.zip
|
||||
──────────────────────────────────────────────────────────────────────── -->
|
||||
<Target Name="Pack" Condition="'$(Configuration)' == 'Release' and '$(PackUsePluginsLayout)' != 'true'">
|
||||
<PropertyGroup>
|
||||
<_PackageDir>$(MSBuildProjectDirectory)\package</_PackageDir>
|
||||
<_StagingDir>$(MSBuildProjectDirectory)\obj\pack-staging</_StagingDir>
|
||||
<_ZipPath>$(_PackageDir)\$(ProjectName)-$(Version).zip</_ZipPath>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Collect files to include -->
|
||||
<ItemGroup>
|
||||
<_PackFiles Include="$(TargetPath)" />
|
||||
<_PackFiles Include="$(_PackageDir)\icon.png" />
|
||||
<_PackFiles Include="$(_PackageDir)\manifest.json" />
|
||||
<_PackFiles Include="$(MSBuildProjectDirectory)\README.md" />
|
||||
<_PackFiles Include="$(MSBuildProjectDirectory)\CHANGELOG.md" Condition="'$(PackHasChangelog)' == 'true'" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Prepare staging directory -->
|
||||
<RemoveDir Directories="$(_StagingDir)" />
|
||||
<MakeDir Directories="$(_StagingDir)" />
|
||||
<Copy SourceFiles="@(_PackFiles)" DestinationFolder="$(_StagingDir)" />
|
||||
|
||||
<!-- Delete previous zip if present -->
|
||||
<Delete Files="$(_ZipPath)" Condition="Exists('$(_ZipPath)')" />
|
||||
|
||||
<!-- Create zip using powershell.exe (explicit executable – works from any shell) -->
|
||||
<Exec Command="powershell.exe -NoProfile -Command "Compress-Archive -Path '$(_StagingDir)\*' -DestinationPath '$(_ZipPath)'"" />
|
||||
|
||||
<!-- Clean up staging directory -->
|
||||
<RemoveDir Directories="$(_StagingDir)" />
|
||||
|
||||
<Message Text="Pack: created $(_ZipPath)" Importance="high" />
|
||||
</Target>
|
||||
|
||||
<!-- ── plugins/patchers layout ───────────────────────────────────────────
|
||||
Used by mods that ship a preloader alongside the main plugin.
|
||||
The preloader project copies its DLL into package/patchers/ as part
|
||||
of its own Pack target (or a dedicated CopyToParentPackage target).
|
||||
This target zips:
|
||||
patchers/ plugins/ icon.png manifest.json README.md
|
||||
(+ CHANGELOG.md when PackHasChangelog=true)
|
||||
Output: package/<ProjectName>-<Version>.zip
|
||||
──────────────────────────────────────────────────────────────────────── -->
|
||||
<Target Name="Pack" Condition="'$(Configuration)' == 'Release' and '$(PackUsePluginsLayout)' == 'true'">
|
||||
<PropertyGroup>
|
||||
<_PackageDir>$(MSBuildProjectDirectory)\package</_PackageDir>
|
||||
<_StagingDir>$(MSBuildProjectDirectory)\obj\pack-staging</_StagingDir>
|
||||
<_ZipPath>$(_PackageDir)\$(ProjectName)-$(Version).zip</_ZipPath>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Copy main plugin DLL into package/plugins/ -->
|
||||
<MakeDir Directories="$(_PackageDir)\plugins" />
|
||||
<Copy SourceFiles="$(TargetPath)" DestinationFolder="$(_PackageDir)\plugins" />
|
||||
|
||||
<!-- Collect loose files for the staging root -->
|
||||
<ItemGroup>
|
||||
<_PackRootFiles Include="$(_PackageDir)\icon.png" />
|
||||
<_PackRootFiles Include="$(_PackageDir)\manifest.json" />
|
||||
<_PackRootFiles Include="$(MSBuildProjectDirectory)\README.md" />
|
||||
<_PackRootFiles Include="$(MSBuildProjectDirectory)\CHANGELOG.md" Condition="'$(PackHasChangelog)' == 'true'" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Prepare staging directory -->
|
||||
<RemoveDir Directories="$(_StagingDir)" />
|
||||
<MakeDir Directories="$(_StagingDir)" />
|
||||
|
||||
<!-- Copy loose root files -->
|
||||
<Copy SourceFiles="@(_PackRootFiles)" DestinationFolder="$(_StagingDir)" />
|
||||
|
||||
<!-- Copy plugins/ and patchers/ sub-folders (preserve structure) -->
|
||||
<ItemGroup>
|
||||
<_PluginFiles Include="$(_PackageDir)\plugins\**\*" />
|
||||
<_PatcherFiles Include="$(_PackageDir)\patchers\**\*" />
|
||||
</ItemGroup>
|
||||
<Copy SourceFiles="@(_PluginFiles)"
|
||||
DestinationFiles="@(_PluginFiles->'$(_StagingDir)\plugins\%(RecursiveDir)%(Filename)%(Extension)')" />
|
||||
<Copy SourceFiles="@(_PatcherFiles)"
|
||||
DestinationFiles="@(_PatcherFiles->'$(_StagingDir)\patchers\%(RecursiveDir)%(Filename)%(Extension)')" />
|
||||
|
||||
<!-- Delete previous zip if present -->
|
||||
<Delete Files="$(_ZipPath)" Condition="Exists('$(_ZipPath)')" />
|
||||
|
||||
<!-- Create zip using powershell.exe (explicit executable – works from any shell) -->
|
||||
<Exec Command="powershell.exe -NoProfile -Command "Compress-Archive -Path '$(_StagingDir)\*' -DestinationPath '$(_ZipPath)'"" />
|
||||
|
||||
<!-- Clean up staging directory -->
|
||||
<RemoveDir Directories="$(_StagingDir)" />
|
||||
|
||||
<Message Text="Pack: created $(_ZipPath)" Importance="high" />
|
||||
</Target>
|
||||
|
||||
<!-- ── Preloader helper target ────────────────────────────────────────────
|
||||
Preloader projects (DustbinPreloader, LabOptPreloader) call this to
|
||||
copy their output DLL into the sibling main mod's patchers/ folder.
|
||||
Set PackPreloaderTargetDir in the preloader's csproj, e.g.:
|
||||
<PackPreloaderTargetDir>..\Dustbin\package\patchers</PackPreloaderTargetDir>
|
||||
──────────────────────────────────────────────────────────────────────── -->
|
||||
<Target Name="CopyToParentPackage"
|
||||
Condition="'$(Configuration)' == 'Release' and '$(PackPreloaderTargetDir)' != ''">
|
||||
<MakeDir Directories="$(PackPreloaderTargetDir)" />
|
||||
<Copy SourceFiles="$(TargetPath)" DestinationFolder="$(PackPreloaderTargetDir)" />
|
||||
<Message Text="CopyToParentPackage: copied $(TargetFileName) to $(PackPreloaderTargetDir)" Importance="high" />
|
||||
</Target>
|
||||
</Project>
|
||||
@@ -1,46 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net472</TargetFramework>
|
||||
<BepInExPluginGuid>org.soardev.dustbin</BepInExPluginGuid>
|
||||
<Description>DSP MOD - Dustbin</Description>
|
||||
<Version>1.4.0</Version>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<PackageId>Dustbin</PackageId>
|
||||
<RootNamespace>Dustbin</RootNamespace>
|
||||
<RestoreAdditionalProjectSources>https://nuget.bepinex.dev/v3/index.json</RestoreAdditionalProjectSources>
|
||||
<PackHasChangelog>true</PackHasChangelog>
|
||||
<PackUsePluginsLayout>true</PackUsePluginsLayout>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="BepInEx.Core" Version="5.*" />
|
||||
<PackageReference Include="BepInEx.PluginInfoProps" Version="1.*" />
|
||||
<!-- <PackageReference Include="DysonSphereProgram.GameLibs" Version="0.10.32.*-r.*" /> -->
|
||||
<PackageReference Include="DysonSphereProgram.Modding.DSPModSave" Version="1.*" />
|
||||
<PackageReference Include="DysonSphereProgram.Modding.NebulaMultiplayerModApi" Version="2.0.0" />
|
||||
<PackageReference Include="UnityEngine.Modules" Version="2022.3.62" IncludeAssets="compile" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Assembly-CSharp">
|
||||
<HintPath>..\AssemblyFromGame\Assembly-CSharp.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UI">
|
||||
<HintPath>..\AssemblyFromGame\UnityEngine.UI.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="assets/icon/signal-410.png" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TargetFramework.TrimEnd(`0123456789`))' == 'net'">
|
||||
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" PrivateAssets="all" />
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Configuration)' == 'Release'">
|
||||
<Exec Command="del /F /Q package\$(ProjectName)-$(Version).zip
|
||||
IF NOT EXIST package\plugins (mkdir package\plugins)
copy /y $(TargetPath) package\plugins\
cd package
powershell Compress-Archive -Force -DestinationPath '$(ProjectName)-$(Version).zip' -Path patchers, plugins, icon.png, manifest.json, ../README.md, ../CHANGELOG.md" />
|
||||
</Target>
|
||||
</Project>
|
||||
|
||||
@@ -1,37 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net472</TargetFramework>
|
||||
<AssemblyName>DustbinPreloader</AssemblyName>
|
||||
<Description>DSP MOD - Prealoder for Dustbin</Description>
|
||||
<Description>DSP MOD - Preloader for Dustbin</Description>
|
||||
<Version>1.3.1</Version>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<RestoreAdditionalProjectSources>https://nuget.bepinex.dev/v3/index.json</RestoreAdditionalProjectSources>
|
||||
<PackPreloaderTargetDir>..\Dustbin\package\patchers</PackPreloaderTargetDir>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="BepInEx.Core" Version="5.*" />
|
||||
<PackageReference Include="BepInEx.PluginInfoProps" Version="1.*" />
|
||||
<!-- <PackageReference Include="DysonSphereProgram.GameLibs" Version="0.10.32.*-r.*" /> -->
|
||||
<PackageReference Include="UnityEngine.Modules" Version="2022.3.62" IncludeAssets="compile" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Assembly-CSharp">
|
||||
<HintPath>..\AssemblyFromGame\Assembly-CSharp.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UI">
|
||||
<HintPath>..\AssemblyFromGame\UnityEngine.UI.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TargetFramework.TrimEnd(`0123456789`))' == 'net'">
|
||||
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" PrivateAssets="all" />
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Configuration)' == 'Release'">
|
||||
<Exec Command="IF NOT EXIST ..\Dustbin\package\patchers (mkdir ..\Dustbin\package\patchers)
copy /y $(TargetPath) ..\Dustbin\package\patchers\" />
|
||||
</Target>
|
||||
</Project>
|
||||
|
||||
@@ -1,38 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net472</TargetFramework>
|
||||
<AssemblyName>HideTips</AssemblyName>
|
||||
<BepInExPluginGuid>org.soardev.hidetips</BepInExPluginGuid>
|
||||
<Description>DSP MOD - HideTips</Description>
|
||||
<Version>1.0.4</Version>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<RestoreAdditionalProjectSources>https://nuget.bepinex.dev/v3/index.json</RestoreAdditionalProjectSources>
|
||||
<PackHasChangelog>true</PackHasChangelog>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="BepInEx.Core" Version="5.*" />
|
||||
<PackageReference Include="BepInEx.PluginInfoProps" Version="1.*" />
|
||||
<!-- <PackageReference Include="DysonSphereProgram.GameLibs" Version="0.10.32.*-r.*" /> -->
|
||||
<PackageReference Include="UnityEngine.Modules" Version="2022.3.62" IncludeAssets="compile" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Assembly-CSharp">
|
||||
<HintPath>..\AssemblyFromGame\Assembly-CSharp.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UI">
|
||||
<HintPath>..\AssemblyFromGame\UnityEngine.UI.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TargetFramework.TrimEnd(`0123456789`))' == 'net'">
|
||||
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" PrivateAssets="all" />
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Configuration)' == 'Release'">
|
||||
<Exec Command="powershell Compress-Archive -Force -DestinationPath 'package/$(ProjectName)-$(Version).zip' -Path '$(TargetPath)', package/icon.png, package/manifest.json, README.md" />
|
||||
</Target>
|
||||
</Project>
|
||||
|
||||
@@ -1,38 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net472</TargetFramework>
|
||||
<AssemblyName>LabOpt</AssemblyName>
|
||||
<BepInExPluginGuid>org.soardev.labopt</BepInExPluginGuid>
|
||||
<Description>DSP MOD - LabOpt</Description>
|
||||
<Version>0.3.6</Version>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<RestoreAdditionalProjectSources>https://nuget.bepinex.dev/v3/index.json</RestoreAdditionalProjectSources>
|
||||
<PackUsePluginsLayout>true</PackUsePluginsLayout>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="BepInEx.Core" Version="5.*" />
|
||||
<PackageReference Include="BepInEx.PluginInfoProps" Version="1.*" />
|
||||
<!-- <PackageReference Include="DysonSphereProgram.GameLibs" Version="0.10.32.*-r.*" /> -->
|
||||
<PackageReference Include="UnityEngine.Modules" Version="2022.3.62" IncludeAssets="compile" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Assembly-CSharp">
|
||||
<HintPath>..\AssemblyFromGame\Assembly-CSharp.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UI">
|
||||
<HintPath>..\AssemblyFromGame\UnityEngine.UI.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TargetFramework.TrimEnd(`0123456789`))' == 'net'">
|
||||
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" PrivateAssets="all" />
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Configuration)' == 'Release'">
|
||||
<Exec Command="IF NOT EXIST package\plugins (mkdir package\plugins)
copy /y $(TargetPath) package\plugins\
cd package
powershell Compress-Archive -Force -DestinationPath '$(ProjectName)-$(Version).zip' -Path patchers, plugins, icon.png, manifest.json, ../README.md" />
|
||||
</Target>
|
||||
</Project>
|
||||
|
||||
@@ -1,37 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net472</TargetFramework>
|
||||
<AssemblyName>LabOptPreloader</AssemblyName>
|
||||
<Description>DSP MOD - Prealoder for LabOpt</Description>
|
||||
<Description>DSP MOD - Preloader for LabOpt</Description>
|
||||
<Version>0.2.1</Version>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<RestoreAdditionalProjectSources>https://nuget.bepinex.dev/v3/index.json</RestoreAdditionalProjectSources>
|
||||
<PackPreloaderTargetDir>..\LabOpt\package\patchers</PackPreloaderTargetDir>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="BepInEx.Core" Version="5.*" />
|
||||
<PackageReference Include="BepInEx.PluginInfoProps" Version="1.*" />
|
||||
<!-- <PackageReference Include="DysonSphereProgram.GameLibs" Version="0.10.32.*-r.*" /> -->
|
||||
<PackageReference Include="UnityEngine.Modules" Version="2022.3.62" IncludeAssets="compile" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Assembly-CSharp">
|
||||
<HintPath>..\AssemblyFromGame\Assembly-CSharp.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UI">
|
||||
<HintPath>..\AssemblyFromGame\UnityEngine.UI.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TargetFramework.TrimEnd(`0123456789`))' == 'net'">
|
||||
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" PrivateAssets="all" />
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Configuration)' == 'Release'">
|
||||
<Exec Command="IF NOT EXIST ..\LabOpt\package\patchers (mkdir ..\LabOpt\package\patchers)
copy /y $(TargetPath) ..\LabOpt\package\patchers\" />
|
||||
</Target>
|
||||
</Project>
|
||||
|
||||
@@ -1,34 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net472</TargetFramework>
|
||||
<AssemblyName>LogisticMiner</AssemblyName>
|
||||
<BepInExPluginGuid>org.soardev.logisticminer</BepInExPluginGuid>
|
||||
<Description>DSP MOD - LogisticMiner</Description>
|
||||
<Version>0.2.0</Version>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<RestoreAdditionalProjectSources>https://nuget.bepinex.dev/v3/index.json</RestoreAdditionalProjectSources>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="BepInEx.Core" Version="5.*" />
|
||||
<PackageReference Include="BepInEx.PluginInfoProps" Version="1.*" />
|
||||
<!-- <PackageReference Include="DysonSphereProgram.GameLibs" Version="0.10.32.*-r.*" /> -->
|
||||
<PackageReference Include="UnityEngine.Modules" Version="2022.3.62" IncludeAssets="compile" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Assembly-CSharp">
|
||||
<HintPath>..\AssemblyFromGame\Assembly-CSharp.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UI">
|
||||
<HintPath>..\AssemblyFromGame\UnityEngine.UI.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TargetFramework.TrimEnd(`0123456789`))' == 'net'">
|
||||
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" PrivateAssets="all" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
@@ -1,37 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<!-- Override the default net472 from Directory.Build.props -->
|
||||
<TargetFramework>netstandard2.1</TargetFramework>
|
||||
<AssemblyName>LuaScriptEngine</AssemblyName>
|
||||
<BepInExPluginGuid>org.soardev.luascriptengine</BepInExPluginGuid>
|
||||
<Description>DSP MOD - LuaScriptEngine</Description>
|
||||
<Version>1.0.0</Version>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
|
||||
<RestoreAdditionalProjectSources>https://nuget.bepinex.dev/v3/index.json</RestoreAdditionalProjectSources>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="NLua" Version="1.*" />
|
||||
<PackageReference Include="BepInEx.Core" Version="5.*" />
|
||||
<PackageReference Include="BepInEx.PluginInfoProps" Version="1.*" />
|
||||
<PackageReference Include="UnityEngine.Modules" Version="2022.3.62" IncludeAssets="compile" />
|
||||
<PackageReference Include="obs-websocket-dotnet" Version="5.*" />
|
||||
<!-- <PackageReference Include="DysonSphereProgram.GameLibs" Version="*-r.*" /> -->
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Assembly-CSharp">
|
||||
<HintPath>..\AssemblyFromGame\Assembly-CSharp.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UI">
|
||||
<HintPath>..\AssemblyFromGame\UnityEngine.UI.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TargetFramework.TrimEnd(`0123456789`))' == 'net'">
|
||||
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" PrivateAssets="all" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
@@ -1,38 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net472</TargetFramework>
|
||||
<AssemblyName>MechaDronesTweaks</AssemblyName>
|
||||
<BepInExPluginGuid>org.soardev.mechadronestweaks</BepInExPluginGuid>
|
||||
<Description>DSP MOD - MechaDronesTweaks</Description>
|
||||
<Version>1.1.4</Version>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<RestoreAdditionalProjectSources>https://nuget.bepinex.dev/v3/index.json</RestoreAdditionalProjectSources>
|
||||
<PackHasChangelog>true</PackHasChangelog>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="BepInEx.Core" Version="5.*" />
|
||||
<PackageReference Include="BepInEx.PluginInfoProps" Version="1.*" />
|
||||
<!-- <PackageReference Include="DysonSphereProgram.GameLibs" Version="0.10.32.*-r.*" /> -->
|
||||
<PackageReference Include="UnityEngine.Modules" Version="2022.3.62" IncludeAssets="compile" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Assembly-CSharp">
|
||||
<HintPath>..\AssemblyFromGame\Assembly-CSharp.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UI">
|
||||
<HintPath>..\AssemblyFromGame\UnityEngine.UI.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TargetFramework.TrimEnd(`0123456789`))' == 'net'">
|
||||
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" PrivateAssets="all" />
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Configuration)' == 'Release'">
|
||||
<Exec Command="powershell Compress-Archive -Force -DestinationPath 'package/$(ProjectName)-$(Version).zip' -Path '$(TargetPath)', package/icon.png, package/manifest.json, README.md" />
|
||||
</Target>
|
||||
</Project>
|
||||
|
||||
@@ -1,40 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net472</TargetFramework>
|
||||
<BepInExPluginGuid>org.soardev.overclockeverything</BepInExPluginGuid>
|
||||
<Description>DSP MOD - OverclockEverything</Description>
|
||||
<Version>1.0.0</Version>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<PackageId>OverclockEverything</PackageId>
|
||||
<RootNamespace>OverclockEverything</RootNamespace>
|
||||
<RestoreAdditionalProjectSources>https://nuget.bepinex.dev/v3/index.json</RestoreAdditionalProjectSources>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="BepInEx.Core" Version="5.*" />
|
||||
<PackageReference Include="BepInEx.PluginInfoProps" Version="1.*" />
|
||||
<!-- <PackageReference Include="DysonSphereProgram.GameLibs" Version="0.10.32.*-r.*" /> -->
|
||||
<PackageReference Include="DysonSphereProgram.Modding.DSPModSave" Version="1.*" />
|
||||
<PackageReference Include="UnityEngine.Modules" Version="2022.3.62" IncludeAssets="compile" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Assembly-CSharp">
|
||||
<HintPath>..\AssemblyFromGame\Assembly-CSharp.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UI">
|
||||
<HintPath>..\AssemblyFromGame\UnityEngine.UI.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TargetFramework.TrimEnd(`0123456789`))' == 'net'">
|
||||
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" PrivateAssets="all" />
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Configuration)' == 'Release'">
|
||||
<Exec Command="powershell Compress-Archive -Force -DestinationPath 'package/$(ProjectName)-$(Version).zip' -Path '$(TargetPath)', package/icon.png, package/manifest.json, README.md" />
|
||||
</Target>
|
||||
</Project>
|
||||
|
||||
@@ -1,38 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net472</TargetFramework>
|
||||
<AssemblyName>PoolOpt</AssemblyName>
|
||||
<BepInExPluginGuid>org.soardev.poolopt</BepInExPluginGuid>
|
||||
<Description>DSP MOD - PoolOpt</Description>
|
||||
<Version>0.9.3</Version>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<RestoreAdditionalProjectSources>https://nuget.bepinex.dev/v3/index.json</RestoreAdditionalProjectSources>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="BepInEx.Core" Version="5.*" />
|
||||
<PackageReference Include="BepInEx.PluginInfoProps" Version="1.*" />
|
||||
<!-- <PackageReference Include="DysonSphereProgram.GameLibs" Version="0.10.32.*-r.*" /> -->
|
||||
<PackageReference Include="UnityEngine.Modules" Version="2022.3.62" IncludeAssets="compile" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Assembly-CSharp">
|
||||
<HintPath>..\AssemblyFromGame\Assembly-CSharp.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UI">
|
||||
<HintPath>..\AssemblyFromGame\UnityEngine.UI.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TargetFramework.TrimEnd(`0123456789`))' == 'net'">
|
||||
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" PrivateAssets="all" />
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Configuration)' == 'Release'">
|
||||
<Exec Command="powershell Compress-Archive -Force -DestinationPath 'package/$(ProjectName)-$(Version).zip' -Path '$(TargetPath)', package/icon.png, package/manifest.json, README.md" />
|
||||
</Target>
|
||||
</Project>
|
||||
|
||||
@@ -1,35 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net472</TargetFramework>
|
||||
<BepInExPluginGuid>org.soardev.uxassist</BepInExPluginGuid>
|
||||
<Description>DSP MOD - UXAssist</Description>
|
||||
<Version>1.5.5</Version>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<PackageId>UXAssist</PackageId>
|
||||
<RootNamespace>UXAssist</RootNamespace>
|
||||
<RestoreAdditionalProjectSources>https://nuget.bepinex.dev/v3/index.json</RestoreAdditionalProjectSources>
|
||||
<PackHasChangelog>true</PackHasChangelog>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="BepInEx.Core" Version="5.*" />
|
||||
<PackageReference Include="BepInEx.PluginInfoProps" Version="1.*" />
|
||||
<PackageReference Include="UnityEngine.Modules" Version="2022.3.62" IncludeAssets="compile" />
|
||||
<!-- <PackageReference Include="DysonSphereProgram.GameLibs" Version="0.10.32.*-r.*" /> -->
|
||||
<PackageReference Include="DysonSphereProgram.Modding.CommonAPI" Version="1.*" />
|
||||
<PackageReference Include="DysonSphereProgram.Modding.DSPModSave" Version="1.*" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Assembly-CSharp">
|
||||
<HintPath>..\AssemblyFromGame\Assembly-CSharp.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UI">
|
||||
<HintPath>..\AssemblyFromGame\UnityEngine.UI.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="assets/signal/energy-fragment.png" />
|
||||
<EmbeddedResource Include="assets/signal/memory.png" />
|
||||
@@ -56,13 +40,4 @@
|
||||
<EmbeddedResource Include="assets/planet_icon/24.png" />
|
||||
<EmbeddedResource Include="assets/planet_icon/25.png" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TargetFramework.TrimEnd(`0123456789`))' == 'net'">
|
||||
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" PrivateAssets="all" />
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Configuration)' == 'Release'">
|
||||
<Exec Command="del /F /Q package\$(ProjectName)-$(Version).zip
|
||||
powershell Compress-Archive -Force -DestinationPath 'package/$(ProjectName)-$(Version).zip' -Path "$(TargetPath)", package/icon.png, package/manifest.json, README.md, CHANGELOG.md" />
|
||||
</Target>
|
||||
</Project>
|
||||
|
||||
@@ -1,43 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net472</TargetFramework>
|
||||
<AssemblyName>UniverseGenTweaks</AssemblyName>
|
||||
<BepInExPluginGuid>org.soardev.universegentweaks</BepInExPluginGuid>
|
||||
<Description>DSP MOD - UniverseGenTweaks</Description>
|
||||
<Version>1.2.11</Version>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<RestoreAdditionalProjectSources>https://nuget.bepinex.dev/v3/index.json</RestoreAdditionalProjectSources>
|
||||
<PackHasChangelog>true</PackHasChangelog>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="BepInEx.Core" Version="5.*" />
|
||||
<PackageReference Include="BepInEx.PluginInfoProps" Version="1.*" />
|
||||
<PackageReference Include="UnityEngine.Modules" Version="2022.3.62" IncludeAssets="compile" />
|
||||
<!-- <PackageReference Include="DysonSphereProgram.GameLibs" Version="0.10.32.*-r.*" /> -->
|
||||
<PackageReference Include="DysonSphereProgram.Modding.DSPModSave" Version="1.*" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Assembly-CSharp">
|
||||
<HintPath>..\AssemblyFromGame\Assembly-CSharp.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UI">
|
||||
<HintPath>..\AssemblyFromGame\UnityEngine.UI.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TargetFramework.TrimEnd(`0123456789`))' == 'net'">
|
||||
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" PrivateAssets="all" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\UXAssist\UXAssist.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Configuration)' == 'Release'">
|
||||
<Exec Command="powershell Compress-Archive -Force -DestinationPath 'package/$(ProjectName)-$(Version).zip' -Path '$(TargetPath)', package/icon.png, package/manifest.json, README.md, CHANGELOG.md" />
|
||||
</Target>
|
||||
</Project>
|
||||
|
||||
178
UpdateGameDlls.ps1
Normal file
178
UpdateGameDlls.ps1
Normal file
@@ -0,0 +1,178 @@
|
||||
# UpdateGameDlls.ps1
|
||||
# Finds the Dyson Sphere Program installation via Steam registry and libraryfolders.vdf,
|
||||
# then uses assembly-publicizer to refresh AssemblyFromGame/ if the game DLLs are newer.
|
||||
|
||||
param(
|
||||
[string]$ProjectRoot = $PSScriptRoot
|
||||
)
|
||||
|
||||
Set-StrictMode -Version Latest
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
$DSP_APPID = '1366540'
|
||||
$DSP_DLLS = @('Assembly-CSharp.dll', 'UnityEngine.UI.dll')
|
||||
$MANAGED_SUBPATH = 'DSPGAME_Data\Managed'
|
||||
$OUTPUT_DIR = Join-Path $ProjectRoot 'AssemblyFromGame'
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 1. Locate Steam installation via registry
|
||||
# ---------------------------------------------------------------------------
|
||||
$steamPath = $null
|
||||
foreach ($regPath in @(
|
||||
'HKCU:\Software\Valve\Steam',
|
||||
'HKLM:\Software\Valve\Steam',
|
||||
'HKLM:\Software\Wow6432Node\Valve\Steam'
|
||||
)) {
|
||||
try {
|
||||
$val = (Get-ItemProperty -LiteralPath $regPath -Name SteamPath -ErrorAction Stop).SteamPath
|
||||
if ($val -and (Test-Path $val)) {
|
||||
$steamPath = $val
|
||||
break
|
||||
}
|
||||
} catch { }
|
||||
}
|
||||
|
||||
if (-not $steamPath) {
|
||||
Write-Warning 'UpdateGameDlls: Steam installation not found in registry; skipping DLL update.'
|
||||
exit 0
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 2. Parse libraryfolders.vdf to find all Steam library paths
|
||||
# ---------------------------------------------------------------------------
|
||||
$vdfPath = Join-Path $steamPath 'steamapps\libraryfolders.vdf'
|
||||
if (-not (Test-Path $vdfPath)) {
|
||||
Write-Warning "UpdateGameDlls: $vdfPath not found; skipping DLL update."
|
||||
exit 0
|
||||
}
|
||||
|
||||
$vdfContent = Get-Content $vdfPath -Raw -Encoding UTF8
|
||||
|
||||
# Extract all library folder paths that contain the DSP app id.
|
||||
# VDF structure: "path" "<library_path>" followed (somewhere) by "<appid>"
|
||||
# Strategy: split into per-library-entry blocks, then check each block.
|
||||
$libraryPaths = @()
|
||||
|
||||
# Match each top-level numbered entry block
|
||||
$blockPattern = '"(?:\d+)"\s*\{([^{}]*(?:\{[^{}]*\}[^{}]*)*)\}'
|
||||
$pathPattern = '"path"\s+"([^"]+)"'
|
||||
$appPattern = '"' + $DSP_APPID + '"\s+"[^"]+"'
|
||||
|
||||
$blockMatches = [regex]::Matches($vdfContent, $blockPattern, [System.Text.RegularExpressions.RegexOptions]::Singleline)
|
||||
foreach ($block in $blockMatches) {
|
||||
$blockText = $block.Groups[1].Value
|
||||
if ($blockText -match $appPattern) {
|
||||
$pathMatch = [regex]::Match($blockText, $pathPattern)
|
||||
if ($pathMatch.Success) {
|
||||
# VDF uses forward slashes and may double-escape backslashes
|
||||
$libPath = $pathMatch.Groups[1].Value -replace '\\\\', '\' -replace '/', '\'
|
||||
$libraryPaths += $libPath
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($libraryPaths.Count -eq 0) {
|
||||
Write-Warning "UpdateGameDlls: DSP (AppID $DSP_APPID) not found in any Steam library; skipping DLL update."
|
||||
exit 0
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 3. Find the game's Managed directory
|
||||
# ---------------------------------------------------------------------------
|
||||
$managedDir = $null
|
||||
foreach ($lib in $libraryPaths) {
|
||||
$candidate = Join-Path $lib "steamapps\common\Dyson Sphere Program\$MANAGED_SUBPATH"
|
||||
if (Test-Path $candidate) {
|
||||
$managedDir = $candidate
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if (-not $managedDir) {
|
||||
Write-Warning 'UpdateGameDlls: Dyson Sphere Program Managed directory not found; skipping DLL update.'
|
||||
exit 0
|
||||
}
|
||||
|
||||
Write-Host "UpdateGameDlls: Game Managed directory: $managedDir"
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 4. Locate assembly-publicizer
|
||||
# ---------------------------------------------------------------------------
|
||||
$publicizer = $null
|
||||
foreach ($candidate in @(
|
||||
'assembly-publicizer', # on PATH
|
||||
"$env:USERPROFILE\.dotnet\tools\assembly-publicizer.exe",
|
||||
"$env:ProgramFiles\dotnet\tools\assembly-publicizer.exe"
|
||||
)) {
|
||||
try {
|
||||
$resolved = (Get-Command $candidate -ErrorAction Stop).Source
|
||||
$publicizer = $resolved
|
||||
break
|
||||
} catch { }
|
||||
}
|
||||
|
||||
if (-not $publicizer) {
|
||||
Write-Host 'UpdateGameDlls: assembly-publicizer not found; installing via dotnet tool install -g BepInEx.AssemblyPublicizer.Cli ...'
|
||||
dotnet tool install -g BepInEx.AssemblyPublicizer.Cli
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
Write-Warning 'UpdateGameDlls: Failed to install assembly-publicizer; skipping DLL update.'
|
||||
exit 0
|
||||
}
|
||||
# Refresh PATH for the current process so the newly installed tool is found
|
||||
$env:PATH = [System.Environment]::GetEnvironmentVariable('PATH', 'User') + ';' + $env:PATH
|
||||
try {
|
||||
$publicizer = (Get-Command 'assembly-publicizer' -ErrorAction Stop).Source
|
||||
} catch {
|
||||
Write-Warning 'UpdateGameDlls: assembly-publicizer still not found after install; skipping DLL update.'
|
||||
exit 0
|
||||
}
|
||||
Write-Host "UpdateGameDlls: assembly-publicizer installed at $publicizer"
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 5. For each DLL: compare timestamps, publicize if game copy is newer
|
||||
# ---------------------------------------------------------------------------
|
||||
$updated = 0
|
||||
foreach ($dll in $DSP_DLLS) {
|
||||
$srcFile = Join-Path $managedDir $dll
|
||||
$dstFile = Join-Path $OUTPUT_DIR $dll
|
||||
|
||||
if (-not (Test-Path $srcFile)) {
|
||||
Write-Warning "UpdateGameDlls: Source DLL not found: $srcFile"
|
||||
continue
|
||||
}
|
||||
|
||||
$srcTime = (Get-Item $srcFile).LastWriteTimeUtc
|
||||
$needsUpdate = $true
|
||||
|
||||
if (Test-Path $dstFile) {
|
||||
$dstTime = (Get-Item $dstFile).LastWriteTimeUtc
|
||||
if ($srcTime -le $dstTime) {
|
||||
Write-Host "UpdateGameDlls: $dll is up-to-date (game: $srcTime, local: $dstTime)"
|
||||
$needsUpdate = $false
|
||||
}
|
||||
}
|
||||
|
||||
if ($needsUpdate) {
|
||||
Write-Host "UpdateGameDlls: Publicizing $dll (game: $srcTime) ..."
|
||||
# --overwrite writes directly to <output>/<dll> (no -publicized postfix)
|
||||
& $publicizer $srcFile --strip --overwrite --output $OUTPUT_DIR
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
Write-Error "UpdateGameDlls: assembly-publicizer failed for $dll (exit code $LASTEXITCODE)"
|
||||
exit 1
|
||||
}
|
||||
# Preserve the source timestamp on the output so future comparisons are stable
|
||||
$outFile = Join-Path $OUTPUT_DIR $dll
|
||||
if (Test-Path $outFile) {
|
||||
(Get-Item $outFile).LastWriteTimeUtc = $srcTime
|
||||
}
|
||||
$updated++
|
||||
Write-Host "UpdateGameDlls: $dll updated."
|
||||
}
|
||||
}
|
||||
|
||||
if ($updated -gt 0) {
|
||||
Write-Host "UpdateGameDlls: $updated DLL(s) refreshed."
|
||||
} else {
|
||||
Write-Host 'UpdateGameDlls: All DLLs are up-to-date.'
|
||||
}
|
||||
@@ -1,38 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net472</TargetFramework>
|
||||
<BepInExPluginGuid>org.soardev.usercloak</BepInExPluginGuid>
|
||||
<Description>DSP MOD - UserCloak</Description>
|
||||
<Version>1.0.0</Version>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<PackageId>UserCloak</PackageId>
|
||||
<RootNamespace>UserCloak</RootNamespace>
|
||||
<RestoreAdditionalProjectSources>https://nuget.bepinex.dev/v3/index.json</RestoreAdditionalProjectSources>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="BepInEx.Core" Version="5.*" />
|
||||
<PackageReference Include="BepInEx.PluginInfoProps" Version="1.*" />
|
||||
<!-- <PackageReference Include="DysonSphereProgram.GameLibs" Version="0.10.32.*-r.*" /> -->
|
||||
<PackageReference Include="UnityEngine.Modules" Version="2022.3.62" IncludeAssets="compile" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Assembly-CSharp">
|
||||
<HintPath>..\AssemblyFromGame\Assembly-CSharp.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="UnityEngine.UI">
|
||||
<HintPath>..\AssemblyFromGame\UnityEngine.UI.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TargetFramework.TrimEnd(`0123456789`))' == 'net'">
|
||||
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" PrivateAssets="all" />
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Configuration)' == 'Release'">
|
||||
<Exec Command="powershell Compress-Archive -Force -DestinationPath 'package/$(ProjectName)-$(Version).zip' -Path '$(TargetPath)', package/icon.png, package/manifest.json, README.md" />
|
||||
</Target>
|
||||
</Project>
|
||||
|
||||
Reference in New Issue
Block a user