private static void ItemInLevel__Setup__Postfix(ItemInLevel __instance) { __instance.GetSyncComponent().add_OnSyncStateChange( (Il2CppSystem.Action <ePickupItemStatus, pPickupPlacement, PlayerAgent, bool>)( (status, placement, _, _) => ItemInLevel__OnSyncStateChange(__instance, status, placement) ) ); }
private static void ItemInLevel__OnSyncStateChange(ItemInLevel __instance, ePickupItemStatus status, pPickupPlacement placement) { if (status != ePickupItemStatus.PlacedInLevel) { return; } var resourceContainer = GTFOUtils.GetParentResourceContainer(placement.position); if (resourceContainer == null) { return; } // Abort if the item was already reparented if (__instance.GetComponentInParent <LG_WeakResourceContainer>() != null) { return; } Instance.LogDebug($"Reparenting {__instance.name} {__instance.PublicName}"); __instance.gameObject.transform.SetParent(resourceContainer.gameObject.transform); __instance.gameObject.transform.SetPositionAndRotation(placement.position, placement.rotation); }