/// <summary> /// Removes a clone from the clone area /// </summary> public static void Remove() { if (CloneManager.Instance.GetNumClones() == 0) { return; } List <MechBodyPart> bodyParts = ((List <FirstPersonMover>)Accessor.GetPrivateField(typeof(CloneArea), "_clones", CloneManager.Instance.CloneArea))[CloneManager.Instance.GetNumClones() - 1].GetAllBodyParts(); FireSpreadDefinition fireSpread = new FireSpreadDefinition { DamageSourceType = DamageSourceType.None, FireType = FireType.BanFire, MinSpreadProbability = 1000f, SpreadProbabilityDropOff = 0f, StartSpreadProbability = 100f, WaitBetweenSpreads = 0.001f }; for (int i = 0; i < bodyParts.Count; i++) { bodyParts[i].TryCutVolume( bodyParts[i].transform.position + new Vector3(2f, 0.5f, -2f), bodyParts[i].transform.position + new Vector3(-2f, 0.5f, -2f), bodyParts[i].transform.position + new Vector3(-2f, 0.5f, 2f), bodyParts[i].transform.position + new Vector3(2f, 0.5f, 2f), AttackManager.Instance.GetNextAttackID(), false, null, DamageSourceType.SpeedHackBanFire, fireSpread, false); } CloneManager.Instance.CloneArea.PutAllClonesBackToStartingPositions(); }
/// <summary> /// Creates an arrow and makes it fly in the given direction /// </summary> /// <param name="Owner">The FirstPersonMover that should be considered the owner of the arrow</param> /// <param name="StartPosition"></param> /// <param name="MoveDir"></param> /// <param name="fireSpreadDefinition"></param> /// <param name="BladeWidth"></param> /// <param name="MakeFlyBySound"></param> /// <param name="RotationZ"></param> /// <returns>The fired arrow</returns> public static ArrowProjectile CreateFlaming(FirstPersonMover Owner, Vector3 StartPosition, Vector3 MoveDir, FireSpreadDefinition fireSpreadDefinition, float BladeWidth = 1f, bool MakeFlyBySound = false, float RotationZ = 0f) { if (Owner == null) { return(null); } ArrowProjectile arrow = Create(Owner, StartPosition, MoveDir, BladeWidth, MakeFlyBySound, RotationZ); arrow.SetOnFire(fireSpreadDefinition); return(arrow); }