internal static void SpawnItemToSpawn(Locker.ItemToSpawn toSpawn, Locker locker, bool locked) { for (int i = 0; i <= toSpawn._amount; i++) { var item = new Synapse.Api.Items.SynapseItem(toSpawn._id, 0f, 0, 0, 0); item.Drop(toSpawn._pos); item.pickup.SetupPickup(item.ItemType, item.Durabillity, item.pickup.ownerPlayer, item.pickup.weaponMods, item.pickup.position, toSpawn._rot); item.pickup.RefreshDurability(true, true); item.pickup.Locked = locked; item.pickup.Chamber = toSpawn.chamberId; locker.AssignPickup(item.pickup); var rb = item.pickup.GetComponent <Rigidbody>(); rb.velocity = Vector3.zero; if (locker.enableSorting && locker.sortingTarget != null) { rb.useGravity = false; var normalized = (item.Position - locker.sortingTarget.transform.position).normalized; rb.velocity = normalized * locker.sortingForce; rb.angularVelocity = locker.sortingTorque; Timing.CallDelayed(0.5f, () => rb.useGravity = true); return; } rb.useGravity = true; } }
private static bool Prefix(Locker __instance, Locker.ItemToSpawn item) { try { if (!__instance.Spawned) { return(false); } if (__instance.SpawnOnOpen || __instance.TriggeredByDoor) { if (__instance._itemsToSpawn == null) { __instance._itemsToSpawn = new System.Collections.Generic.List <Locker.ItemToSpawn>(); } __instance._itemsToSpawn.Add(item); return(false); } SpawnItemPatch.SpawnItemToSpawn(item, __instance, true); } catch (Exception e) { Logger.Get.Error($"Synapse-Item: SpawnItem failed!!\n{e}\nStackTrace:\n{e.StackTrace}"); } return(false); }