public void CreateShredResources() { if (currentlyShredding == null) { return; } MagnetLiftable component = currentlyShredding.GetComponent <MagnetLiftable>(); if (component == null) { return; } ItemAmount[] shredResources = component.shredResources; foreach (ItemAmount itemAmount in shredResources) { Item item = ItemManager.Create(itemAmount.itemDef, (int)itemAmount.amount, 0uL); float num = 0.5f; if (item.CreateWorldObject(resourceSpawnPoint.transform.position + new Vector3(Random.Range(0f - num, num), 1f, Random.Range(0f - num, num))) == null) { item.Remove(); } } BaseModularVehicle component2 = currentlyShredding.GetComponent <BaseModularVehicle>(); if (!component2) { return; } foreach (BaseVehicleModule attachedModuleEntity in component2.AttachedModuleEntities) { if (!attachedModuleEntity.AssociatedItemDef || !attachedModuleEntity.AssociatedItemDef.Blueprint) { continue; } foreach (ItemAmount ingredient in attachedModuleEntity.AssociatedItemDef.Blueprint.ingredients) { int num2 = Mathf.FloorToInt(ingredient.amount * 0.5f); if (num2 != 0) { Item item2 = ItemManager.Create(ingredient.itemDef, num2, 0uL); float num3 = 0.5f; if (item2.CreateWorldObject(resourceSpawnPoint.transform.position + new Vector3(Random.Range(0f - num3, num3), 1f, Random.Range(0f - num3, num3))) == null) { item2.Remove(); } } } } }
public void ServerUpdate() { if (base.isClient) { return; } SetFlag(Flags.Reserved10, isShredding); if (isShredding) { float num = Time.realtimeSinceStartup - shredStartTime; float t = num / shredDurationPosition; float t2 = num / shredDurationRotation; shredRail.transform.localPosition = Vector3.Lerp(shredRailStartPos.localPosition, shredRailEndPos.localPosition, t); shredRail.transform.rotation = Quaternion.LookRotation(Vector3.Lerp(shredRailStartRotation, shredRailEndRotation, t2)); MagnetLiftable component = currentlyShredding.GetComponent <MagnetLiftable>(); currentlyShredding.transform.position = shredRail.transform.position; Vector3 vector = base.transform.TransformDirection(component.shredDirection); if (Vector3.Dot(-vector, currentlyShredding.transform.forward) > Vector3.Dot(vector, currentlyShredding.transform.forward)) { vector = base.transform.TransformDirection(-component.shredDirection); } bool flag = Vector3.Dot(component.transform.up, Vector3.up) >= -0.95f; Quaternion b = QuaternionEx.LookRotationForcedUp(vector, flag ? (-base.transform.right) : base.transform.right); float num2 = Time.time * shredSwaySpeed; float num3 = Mathf.PerlinNoise(num2, 0f); b *= Quaternion.Euler(z: Mathf.PerlinNoise(0f, num2 + 150f) * shredSwayAmount, x: num3 * shredSwayAmount, y: 0f); currentlyShredding.transform.rotation = Quaternion.Lerp(entryRotation, b, t2); if (num > 5f) { CreateShredResources(); currentlyShredding.Kill(); currentlyShredding = null; isShredding = false; SetShredding(false); } } }