private static void Postfix(RagdollHandle __instance) { if (Instance.IsTimeFrozen) { foreach (var part in __instance.ragdollPart.ragdoll.parts) { Instance.UnFreezeRigidbody(part.rb); Instance.UnFreezeRigidbody(part.targetRb); } } }
private static void Postfix(RagdollHandle __instance) { if (Instance.IsTimeFrozen && __instance.ragdollPart.ragdoll.grabbedHandleL == null && __instance.ragdollPart.ragdoll.grabbedHandleR == null) { foreach (var part in __instance.ragdollPart.ragdoll.parts) { Instance.FreezeRigidbody(part.rb); Instance.FreezeRigidbody(part.targetRb); } } }
public static void DarkChainDestroy(Item chain, RagdollPart ragdollPart, RagdollHandle ragdollHandle, Telekinesis telekinesis, bool neck) { telekinesis.TryRelease(); DestroySelf.Destroy(chain.gameObject); if (ragdollPart.ragdoll.parts.Count > 0) { foreach (RagdollPart part in ragdollPart.ragdoll.parts) { part.rb.isKinematic = false; } } if (ragdollHandle.ragdollPart.ragdoll.parts.Count > 0) { foreach (RagdollPart part in ragdollHandle.ragdollPart.ragdoll.parts) { part.rb.isKinematic = false; } } ragdollPart.ragdoll.SetState(BS.Ragdoll.State.Fallen); if (ragdollPart.ragdoll.creature.health.currentHealth <= 0) { ragdollPart.ragdoll.SetState(BS.Ragdoll.State.Dead); } if (ragdollHandle.name == "NPC(neck)(chained)") { ragdollHandle.name = "NPC(neck)"; } else if (ragdollHandle.name == "NPC(chained)") { ragdollHandle.name = "NPC"; } else { Debug.Log("The ragdollHandle was neither the neck nor a default part"); } //ragdollPart.ragdoll.RefreshFall(); ragdollPart.ragdoll.allowStandUp = true; ragdollHandle.tag = "Untagged"; }
internal static void Postfix(RagdollHandle __instance, Interactor interactor) { var caster = interactor.bodyHand.caster; if (caster.currentSpell && caster.currentSpell is SpellLightning && PlayerControl.GetHand(interactor.bodyHand.side).indexCurl > 0.5f) { float manaCost = Electrical.RagdollChargeSettings.launchManaCost; if (caster.caster.currentMana > manaCost) { caster.caster.currentMana -= manaCost; // Do a final burst of spell damage var spell = interactor.bodyHand.caster.currentSpell as SpellLightning; var ragdoll = __instance.ragdollPart.ragdoll; DamageStruct shockDamage = spell.damageStruct; shockDamage.damage = Electrical.RagdollChargeSettings.damagePerSec; shockDamage.hitRagdollPart = __instance.ragdollPart; shockDamage.knockOutDuration = 2f; CollisionStruct spellCollision = new CollisionStruct(shockDamage); ragdoll.creature.health.Damage(ref spellCollision); // Aim the ragdoll launch Vector3 dir = (__instance.transform.position - interactor.bodyHand.body.creature.transform.position); dir.Set(dir.x, 0.0f, dir.z); dir.Normalize(); dir.Set(dir.x, 0.7f, dir.z); // Apply the force to each part with a chance of a visual lightning bolt spell.PlayClipAt(spell.startLowClip, spell.transform.position); foreach (RagdollPart ragdollPart in __instance.ragdollPart.ragdoll.creature.ragdoll.parts) { Vector3 force = dir * 30f; ragdollPart.rb.AddForce(force, ForceMode.Impulse); if (Random.Range(0, 3) == 0) { LightningBolt.QueueLightningBolt(ragdollPart.gameObject, spell, Random.Range(0.1f, 0.5f)); } } } } }
public static void DarkChainDestroy(Item chain, RagdollPart ragdollPart, RagdollHandle ragdollHandle, bool neck) { DestroySelf.Destroy(chain.gameObject); if (ragdollPart.ragdoll.parts.Count > 0) { foreach (RagdollPart part in ragdollPart.ragdoll.parts) { part.rb.isKinematic = false; } } if (ragdollHandle.ragdollPart.ragdoll.parts.Count > 0) { foreach (RagdollPart part in ragdollHandle.ragdollPart.ragdoll.parts) { part.rb.isKinematic = false; } } if (ragdollHandle.name == "NPC(neck)(chained)") { ragdollHandle.name = "NPC(neck)"; } else if (ragdollHandle.name == "NPC(chained)") { ragdollHandle.name = "NPC"; } else { Debug.Log("The ragdollHandle was neither the neck nor a default part"); } //ragdollPart.ragdoll.RefreshFall(); ragdollPart.ragdoll.allowStandUp = true; ragdollHandle.tag = "Untagged"; }
public void CheckTeleNPC(Telekinesis telekinesis) { if (telekinesis.catchedHandle != null) { if (telekinesis.catchedHandle.tag == "Untagged") { if (telekinesis.catchedHandle.name == "NPC" || telekinesis.catchedHandle.name == "NPC(neck)") { RagdollHandle rdHandle = telekinesis.catchedHandle as RagdollHandle; if (rdHandle.ragdollPart != null) { Item chain = Catalog.current.GetData <ItemData>("DarkChain", true).Spawn(true); rdHandle.ragdollPart.ragdoll.allowStandUp = false; chainedParts.Add(rdHandle); darkChains.Add(chain); chain.transform.position = rdHandle.ragdollPart.transf.position; chain.transform.rotation = rdHandle.ragdollPart.transf.rotation; if (chain.gameObject != null) { if (chain.gameObject.GetComponent <ItemDarkChain>() != null) { chain.gameObject.GetComponent <ItemDarkChain>().myRagdollPart = rdHandle.ragdollPart; chain.gameObject.GetComponent <ItemDarkChain>().ragdollHandle = rdHandle; } } if (telekinesis.catchedHandle.name == "NPC(neck)") { chain.gameObject.GetComponent <ItemDarkChain>().sliceable = false; chain.gameObject.GetComponent <ItemDarkChain>().neck = true; telekinesis.catchedHandle.name = "NPC(neck)(chained)"; } else { chain.gameObject.GetComponent <ItemDarkChain>().sliceable = true; chain.gameObject.GetComponent <ItemDarkChain>().neck = false; telekinesis.catchedHandle.name = "NPC(chained)"; } if (rdHandle.ragdollPart.ragdoll.state != BS.Ragdoll.State.Dead) { rdHandle.ragdollPart.ragdoll.SetState(BS.Ragdoll.State.Fallen); } chain.gameObject.GetComponent <ItemDarkChain>().Initialize(); Debug.Log("Catched handle name: " + telekinesis.catchedHandle.name); telekinesis.catchedHandle.tag = "IgnoreTK"; telekinesis.TryRelease(); telekinesis.targetHandle = chain.mainHandleRight; telekinesis.TryCatch(); } } } } }