static bool Prefix(UnitAbilityResourceCollection __instance, BlueprintScriptableObject blueprint, ref int __result) { var owner = Helpers.GetField <UnitDescriptor>(__instance, "m_Owner"); var connected_resources = owner?.Get <UnitPartConnectResource>()?.getConnectedResource(blueprint as BlueprintAbilityResource); if (connected_resources == null) { return(true); } int val = 0; UnitAbilityResource resource = Harmony12.Traverse.Create(__instance).Method("GetResource", blueprint).GetValue <UnitAbilityResource>(); if (resource != null) { val = resource.Amount; } __result = 0; foreach (var cr in connected_resources) { __result += __instance.GetResourceAmount(cr); } __result = Math.Min(__result, val); return(false); }
static bool Prefix(UnitAbilityResourceCollection __instance, BlueprintScriptableObject blueprint, int amount, bool restoreFull, UnitDescriptor ___m_Owner) { UnitAbilityResource resource = Harmony12.Traverse.Create(__instance).Method("GetResource", blueprint).GetValue <UnitAbilityResource>(); if (resource == null) { return(true); } var fake_resource = resource.Blueprint?.GetComponent <FakeResourceAmountFullRestore>()?.fake_resource; if (fake_resource == null || !restoreFull) { return(true); } else { int maxAmount = fake_resource.GetMaxAmount(___m_Owner); resource.Amount = maxAmount; return(false); } }