Add new MOD: Dustbin

This commit is contained in:
2022-09-10 23:19:47 +08:00
parent c629218e46
commit 78e5ba4266
9 changed files with 148 additions and 2 deletions
+1 -1
View File
@@ -24,6 +24,6 @@
</ItemGroup> </ItemGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent"> <Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="del package\$(ProjectName)-$(Version).zip&#xA;zip -9 -j package/$(ProjectName)-$(Version).zip $(TargetPath) package/icon.png package/manifest.json package/README.md" /> <Exec Command="del /F /Q package\$(ProjectName)-$(Version).zip&#xA;zip -9 -j package/$(ProjectName)-$(Version).zip $(TargetPath) package/icon.png package/manifest.json package/README.md" />
</Target> </Target>
</Project> </Project>
+6
View File
@@ -6,6 +6,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LogisticMiner", "LogisticMi
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HideTips", "HideTips\HideTips.csproj", "{4EABD71D-477F-448B-801B-48F8745A3FA7}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HideTips", "HideTips\HideTips.csproj", "{4EABD71D-477F-448B-801B-48F8745A3FA7}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dustbin", "Dustbin\Dustbin.csproj", "{931F0230-5941-4E49-AB19-66921AF14096}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@@ -24,5 +26,9 @@ Global
{4EABD71D-477F-448B-801B-48F8745A3FA7}.Debug|Any CPU.Build.0 = Debug|Any CPU {4EABD71D-477F-448B-801B-48F8745A3FA7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4EABD71D-477F-448B-801B-48F8745A3FA7}.Release|Any CPU.ActiveCfg = Release|Any CPU {4EABD71D-477F-448B-801B-48F8745A3FA7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4EABD71D-477F-448B-801B-48F8745A3FA7}.Release|Any CPU.Build.0 = Release|Any CPU {4EABD71D-477F-448B-801B-48F8745A3FA7}.Release|Any CPU.Build.0 = Release|Any CPU
{931F0230-5941-4E49-AB19-66921AF14096}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{931F0230-5941-4E49-AB19-66921AF14096}.Debug|Any CPU.Build.0 = Debug|Any CPU
{931F0230-5941-4E49-AB19-66921AF14096}.Release|Any CPU.ActiveCfg = Release|Any CPU
{931F0230-5941-4E49-AB19-66921AF14096}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
EndGlobal EndGlobal
+77
View File
@@ -0,0 +1,77 @@
using BepInEx;
using HarmonyLib;
namespace Dustbin;
[BepInPlugin(PluginInfo.PLUGIN_GUID, PluginInfo.PLUGIN_NAME, PluginInfo.PLUGIN_VERSION)]
public class Dustbin : BaseUnityPlugin
{
private new static readonly BepInEx.Logging.ManualLogSource Logger =
BepInEx.Logging.Logger.CreateLogSource(PluginInfo.PLUGIN_NAME);
private bool _cfgEnabled = true;
private static readonly int[] SandsFactors = { 0, 1, 5, 10, 100 };
private static readonly bool[] IsFluid = new bool[2000];
private void Awake()
{
_cfgEnabled = Config.Bind("General", "Enabled", _cfgEnabled, "enable/disable this plugin").Value;
SandsFactors[1] = Config.Bind("General", "SandsPerItem", SandsFactors[1], "Sands gathered from normal items").Value;
SandsFactors[0] = Config.Bind("General", "SandsPerFluid", SandsFactors[0], "Sands gathered from fluids").Value;
SandsFactors[2] = Config.Bind("General", "SandsPerStone", SandsFactors[2], "Sands gathered from stones").Value;
SandsFactors[3] = Config.Bind("General", "SandsPerSilicon", SandsFactors[3], "Sands gathered from silicon ores").Value;
SandsFactors[4] = Config.Bind("General", "SandsPerFractal", SandsFactors[4], "Sands gathered from fractal silicon ores").Value;
Harmony.CreateAndPatchAll(typeof(Dustbin));
}
[HarmonyPostfix]
[HarmonyPatch(typeof(DSPGame), "StartGame", typeof(GameDesc))]
[HarmonyPatch(typeof(DSPGame), "StartGame", typeof(string))]
private static void OnGameStart()
{
foreach (var data in LDB.items.dataArray)
{
if (data.ID < 2000 && data.IsFluid)
{
IsFluid[data.ID] = true;
}
}
}
[HarmonyPrefix]
[HarmonyPatch(typeof(StorageComponent), "AddItem",
new[] { typeof(int), typeof(int), typeof(int), typeof(int), typeof(bool) },
new[]
{
ArgumentType.Normal, ArgumentType.Normal, ArgumentType.Normal, ArgumentType.Out, ArgumentType.Normal
})]
public static bool AbandonItems(ref int __result, StorageComponent __instance, int itemId, int count, int inc,
out int remainInc, bool useBan = false)
{
remainInc = inc;
Logger.LogInfo($"${__instance.id} ${__instance.top}");
if (!useBan || count == 0 || __instance.id != __instance.top) return true;
var size = __instance.size;
if (size == 0 || size != __instance.bans || __instance.grids[0].count > 0) return true;
__result = count;
var isFluid = itemId < 2000 && IsFluid[itemId];
var sandsPerItem = SandsFactors[isFluid
? 0
: itemId switch
{
1005 => 2,
1003 => 3,
1013 => 4,
_ => 1,
}];
if (sandsPerItem <= 0) return false;
var player = GameMain.mainPlayer;
var addCount = count * sandsPerItem;
player.sandCount += addCount;
GameMain.history.OnSandCountChange(player.sandCount, addCount);
/* Following line crashes game, seems that it should not be called in this working thread:
* UIRoot.instance.uiGame.OnSandCountChanged(player.sandCount, addCount);
*/
return false;
}
}
+29
View File
@@ -0,0 +1,29 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<BepInExPluginGuid>org.soardev.dustbin</BepInExPluginGuid>
<Description>DSP MOD - Dustbin</Description>
<Version>1.0.0</Version>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<LangVersion>latest</LangVersion>
<PackageId>Dustbin</PackageId>
<RootNamespace>Dustbin</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="BepInEx.Analyzers" Version="1.*" PrivateAssets="all" />
<PackageReference Include="BepInEx.Core" Version="5.*" />
<PackageReference Include="BepInEx.PluginInfoProps" Version="1.*" />
<PackageReference Include="DysonSphereProgram.GameLibs" Version="0.9.26.13026-r.0" />
<PackageReference Include="UnityEngine.Modules" Version="2018.4.12" IncludeAssets="compile" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework.TrimEnd(`0123456789`))' == 'net'">
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.2" PrivateAssets="all" />
</ItemGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="del /F /Q package\$(ProjectName)-$(Version).zip&#xA;zip -9 -j package/$(ProjectName)-$(Version).zip $(TargetPath) package/icon.png package/manifest.json package/README.md" />
</Target>
</Project>
+12
View File
@@ -0,0 +1,12 @@
## Dustbin
### Storages with capacity limited to zero act like dustbins(abandon incoming items)
* Conditions to become dustbin: Storages with capacity limited to zero at top of storage stacks with nothing in 1st cell.
* Items sent into dustbin are removed immediately.
* Can get sands from abandoned items (with factors configurable):
* Get 100 sands from each fractal silicon ore
* Get 10 sands from each silicon ore
* Get nothing from fluids
* Get 1 sand from any other normal item
* Known bug: stack 1 more storage up on a zero limited one and remove it will cause dustbin stop working. Just put somethings in and take them out to make the dustbin working again.
Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

+9
View File
@@ -0,0 +1,9 @@
{
"name": "Dustbin",
"version_number": "1.0.0",
"website_url": "https://github.com/soarqin/DSP_Mods/tree/master/Dustbin",
"description": "Storages with capacity limited to zero act like dustbins(abandon incoming items)",
"dependencies": [
"xiaoye97-BepInEx-5.4.17"
]
}
+1 -1
View File
@@ -23,6 +23,6 @@
</ItemGroup> </ItemGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent"> <Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="del package\$(ProjectName)-$(Version).zip&#xA;zip -9 -j package/$(ProjectName)-$(Version).zip $(TargetPath) package/icon.png package/manifest.json package/README.md" /> <Exec Command="del /F /Q package\$(ProjectName)-$(Version).zip&#xA;zip -9 -j package/$(ProjectName)-$(Version).zip $(TargetPath) package/icon.png package/manifest.json package/README.md" />
</Target> </Target>
</Project> </Project>
+13
View File
@@ -68,3 +68,16 @@
* Skip prologue for new game. * Skip prologue for new game.
* Each type of tips/messages is configurable individually. * Each type of tips/messages is configurable individually.
* For sanity check warning messages, please check [CheatEnabler](CheatEnabler) * For sanity check warning messages, please check [CheatEnabler](CheatEnabler)
## [Dustbin](Dustbin)
### Storages with capacity limited to zero act like dustbins(abandon incoming items)
* Conditions to become dustbin: Storages with capacity limited to zero at top of storage stacks with nothing in 1st cell.
* Items sent into dustbin are removed immediately.
* Can get sands from abandoned items (with factors configurable):
* Get 100 sands from each fractal silicon ore
* Get 10 sands from each silicon ore
* Get nothing from fluids
* Get 1 sand from any other normal item
* Known bug: stack 1 more storage up on a zero limited one and remove it will cause dustbin stop working. Just put somethings in and take them out to make the dustbin working again.