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);
         }
     }
 }
Esempio n. 3
0
        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";
        }
Esempio n. 4
0
        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));
                        }
                    }
                }
            }
        }
Esempio n. 5
0
        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";
        }
Esempio n. 6
0
        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();
                        }
                    }
                }
            }
        }