1
0
mirror of https://github.com/soarqin/DSP_Mods.git synced 2025-12-09 12:13:31 +08:00

ProtectVeinsFromExhaustion: fix #52

This commit is contained in:
2024-11-26 17:09:28 +08:00
parent d7062f3318
commit 99a6708d3f

View File

@@ -974,7 +974,7 @@ public class FactoryPatch : PatchImpl<FactoryPatch>
return false; return false;
} }
var consumeCount = 0U; var res = 0U;
int veinId; int veinId;
int times; int times;
switch (__instance.type) switch (__instance.type)
@@ -986,7 +986,7 @@ public class FactoryPatch : PatchImpl<FactoryPatch>
if (__instance.time <= __instance.period) if (__instance.time <= __instance.period)
{ {
__instance.time += (int)(power * __instance.speedDamper * __instance.speed * miningSpeed * __instance.veinCount); __instance.time += (int)(power * __instance.speedDamper * __instance.speed * miningSpeed * __instance.veinCount);
consumeCount = 1U; res = 1U;
} }
if (__instance.time < __instance.period) if (__instance.time < __instance.period)
@@ -1120,58 +1120,67 @@ public class FactoryPatch : PatchImpl<FactoryPatch>
if (__instance.time < __instance.period) if (__instance.time < __instance.period)
{ {
__instance.time += (int)(power * __instance.speedDamper * __instance.speed * miningSpeed * workCount + 0.5f); __instance.time += (int)(power * __instance.speedDamper * __instance.speed * miningSpeed * workCount + 0.5f);
consumeCount = 1U; res = 1U;
} }
if (__instance.time >= __instance.period && __instance.productCount < 50) if (__instance.time >= __instance.period && __instance.productCount < 50)
{ {
__instance.productId = veinPool[veinId].productId; __instance.productId = veinPool[veinId].productId;
times = __instance.time / __instance.period; times = __instance.time / __instance.period;
if (times <= 0) break;
var outputCount = 0; var outputCount = 0;
if (miningRate > 0f && amount > _keepOilAmount) if (miningRate > 0f)
{ {
var usedCount = 0; if (amount > _keepOilAmount)
var maxAllowed = amount - _keepOilAmount;
for (var j = 0; j < times; j++)
{ {
__instance.seed = (uint)((__instance.seed % 2147483646U + 1U) * 48271UL % 2147483647UL) - 1U; var usedCount = 0;
usedCount += __instance.seed / 2147483646.0 < miningRate ? 1 : 0; var maxAllowed = amount - _keepOilAmount;
outputCount++; for (var j = 0; j < times; j++)
{
__instance.seed = (uint)((__instance.seed % 2147483646U + 1U) * 48271UL % 2147483647UL) - 1U;
usedCount += __instance.seed / 2147483646.0 < miningRate ? 1 : 0;
outputCount++;
}
if (usedCount > 0)
{
if (usedCount > maxAllowed)
{
usedCount = maxAllowed;
}
amount = veinPool[veinId].amount -= usedCount;
var veinGroups = factory.veinGroups;
var groupIndex = veinPool[veinId].groupIndex;
veinGroups[groupIndex].amount -= usedCount;
factory.veinAnimPool[veinId].time = amount >= 25000 ? 0f : 1f - amount * VeinData.oilSpeedMultiplier;
if (amount <= 2500)
{
factory.NotifyVeinExhausted((int)veinPool[veinId].type, veinPool[veinId].pos);
}
}
} }
else if (_keepOilAmount <= 2500)
if (usedCount > 0)
{ {
if (usedCount > maxAllowed) outputCount = times;
{ }
usedCount = maxAllowed; else
} {
break;
amount = veinPool[veinId].amount -= usedCount;
var veinGroups = factory.veinGroups;
var groupIndex = veinPool[veinId].groupIndex;
veinGroups[groupIndex].amount -= usedCount;
factory.veinAnimPool[veinId].time = amount >= 25000 ? 0f : 1f - amount * VeinData.oilSpeedMultiplier;
if (amount <= 2500)
{
factory.NotifyVeinExhausted((int)veinPool[veinId].type, veinPool[veinId].pos);
}
} }
} }
else if (_keepOilAmount <= 2500) else
{ {
outputCount = times; outputCount = times;
} }
if (outputCount > 0) __instance.productCount += outputCount;
lock (productRegister)
{ {
__instance.productCount += outputCount; productRegister[__instance.productId] += outputCount;
lock (productRegister)
{
productRegister[__instance.productId] += outputCount;
}
__instance.time -= __instance.period * outputCount;
} }
__instance.time -= __instance.period * outputCount;
} }
} }
@@ -1181,7 +1190,7 @@ public class FactoryPatch : PatchImpl<FactoryPatch>
if (__instance.time < __instance.period) if (__instance.time < __instance.period)
{ {
__instance.time += (int)(power * __instance.speedDamper * __instance.speed * miningSpeed); __instance.time += (int)(power * __instance.speedDamper * __instance.speed * miningSpeed);
consumeCount = 1U; res = 1U;
} }
if (__instance.time < __instance.period) break; if (__instance.time < __instance.period) break;
@@ -1230,7 +1239,7 @@ public class FactoryPatch : PatchImpl<FactoryPatch>
} }
} }
__result = consumeCount; __result = res;
return false; return false;
} }
} }