private static void Prefix(bool tryThrow, SpellTelekinesis __instance) { if (__instance.catchedHandle == null) { return; } var item = __instance.catchedHandle.item; if (item != null) { var customJointItem = item.gameObject.GetComponent <CustomJointItem>(); if (customJointItem != null) { Object.Destroy(customJointItem); } BindingFlags bindFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static; FieldInfo field = __instance.GetType().GetField("joint", bindFlags); ConfigurableJoint joint = field.GetValue(__instance) as ConfigurableJoint; if (__instance.spinMode) { customJointItem = item.gameObject.AddComponent <CustomJointItem>(); customJointItem.joint = Object.Instantiate(joint); _catchedHandle = __instance.catchedHandle; } } }
private static void Postfix(SpellTelekinesis spellTelekinesis, HandleRagdoll __instance) { try { var ragdollPart = __instance.ragdollPart; if (spellTelekinesis.spellCaster.spellInstance.id == "DarkChains") { try { if (ragdollPart.ragdoll.creature.gameObject.GetComponent <FrozenCreature>() != null) { ragdollPart.characterJoint.breakForce = 20000; } } catch (Exception exception) { Debug.Log(exception.Message); } } try { Object.Destroy(ragdollPart.gameObject.GetComponent <FrozenRagdollPart>()); } catch (Exception exception) { Debug.Log(exception.Message); } } catch (Exception exception) { __instance.GetComponentInParent <Rigidbody>().isKinematic = false; Debug.Log(exception.Message); } }
private void Item_OnTelekinesisReleaseEvent(Handle handle, SpellTelekinesis teleGrabber) { vfx.DeactivateVfx(); OnFinishedEvent(); OnFinishedEvent -= ((SpellCastWaterBend)mana.casterLeft.spellInstance).SpellCastWaterBend_OnFinishedEvent; OnFinishedEvent -= ((SpellCastWaterBend)mana.casterRight.spellInstance).SpellCastWaterBend_OnFinishedEvent; isCasting = false; }
private void Item_OnTelekinesisReleaseEvent(Handle handle, SpellTelekinesis teleGrabber) { handle.item.OnTelekinesisReleaseEvent -= Item_OnTelekinesisReleaseEvent; vfx.ResetVfx(0f); if (handle.item.isPooled) { handle.item.Despawn(); } }
private static void Postfix(SpellTelekinesis __instance) { if (__instance.catchedHandle == null) { return; } var item = __instance.catchedHandle.item; if (__instance.catchedHandle.item != null) { var customJointItem = item.gameObject.GetComponent <CustomJointItem>(); if (customJointItem != null) { Object.Destroy(customJointItem); } } }
private static void Postfix(SpellTelekinesis spellTelekinesis, ref bool throwing, HandleRagdoll __instance) { try { if (!throwing && spellTelekinesis.spellCaster.spellInstance.id == "DarkChains") { var ragdollPart = __instance.ragdollPart; ragdollPart.ResetCharJointBreakForce(); if (ragdollPart.gameObject.GetComponent <FrozenRagdollPart>() == null) { var frozenRagdollPart = ragdollPart.gameObject.AddComponent <FrozenRagdollPart>(); frozenRagdollPart.Init(__instance); } try { var creature = ragdollPart.ragdoll.creature; if (creature.gameObject.GetComponent <FrozenCreature>() == null) { creature.gameObject.AddComponent <FrozenCreature>(); } } catch (Exception exception) { Debug.Log(exception.Message); } } } catch (Exception exception) { if (!throwing && spellTelekinesis.spellCaster.spellInstance.id == "DarkChains") { __instance.GetComponentInParent <Rigidbody>().isKinematic = true; } Debug.Log(exception.Message); } }
private static void Postfix(bool tryThrow, SpellTelekinesis __instance) { if (_catchedHandle != null) { foreach (CollisionHandler collisionHandler in _catchedHandle.item.collisionHandlers) { collisionHandler.SetPhysicModifier(_catchedHandle, 3, __instance.gravity ? 1f : 0.0f, 1f, __instance.drag, __instance.angularDrag); } _catchedHandle.item.rb.sleepThreshold = 0.0f; _catchedHandle.item.StopThrowing(); _catchedHandle.item.StopFlying(); _catchedHandle.item.ResetColliderCollision(); _catchedHandle.item.ResetRagdollCollision(); _catchedHandle.item.ResetObjectCollision(); _catchedHandle.item.SetColliderAndMeshLayer(GameManager.GetLayer(LayerName.MovingObject)); _catchedHandle.item.rb.collisionDetectionMode = CollisionDetectionMode.ContinuousDynamic; _catchedHandle.item.SetCenterOfMass(_catchedHandle.transform.localPosition + new Vector3(0.0f, _catchedHandle.GetDefaultAxisLocalPosition(), 0.0f)); _catchedHandle.item.isTelekinesisGrabbed = true; } }
void ValidateLevels() { Player.currentCreature.maxHealth = 16 + ((StatManager.combatHealthLvl * 1f) - 1f) * statBoosters.Values.Sum(); Player.currentCreature.mana.maxMana = 50 + ((StatManager.magicEfficiencyLvl * 2) - 2) * statBoosters.Values.Sum(); Player.currentCreature.mana.chargeSpeedMultiplier = 1 + ((StatManager.magicEfficiencyLvl * 0.1f) - 0.1f) * statBoosters.Values.Sum(); Player.currentCreature.mana.maxFocus = 20 + ((StatManager.miscFocusLvl * 2) - 2) * statBoosters.Values.Sum(); combatDamage = 1f + ((StatManager.combatStrengthLvl * 0.5f) - 0.5f) * statBoosters.Values.Sum(); magicDamage = ((StatManager.magicDamageLvl * 2) - 2) * statBoosters.Values.Sum(); float speedIncrease = Mathf.Min(0.7f + ((StatManager.physicalSpeedLvl * 0.08f) - 0.08f) * statBoosters.Values.Sum(), 3.5f); Player.local.locomotion.runSpeedMultiplier = (speedIncrease / 1.2f) * statBoosters.Values.Sum(); Player.local.locomotion.speedMultiplier = Mathf.Min(speedIncrease * 0.8f, 1f) * statBoosters.Values.Sum(); float jumpIncrease = Mathf.Min(0.5f + ((StatManager.physicalJumpLvl * 0.1f) * statBoosters.Values.Sum() - 0.1f), 1); Player.local.locomotion.jumpMaxDuration = jumpIncrease / 3.5f * statBoosters.Values.Sum(); Player.local.locomotion.jumpGroundForce = jumpIncrease / 1.7f * statBoosters.Values.Sum(); Player.local.locomotion.airSpeed = jumpIncrease; Player.local.locomotion.jumpClimbMultiplier = Mathf.Min(jumpIncrease / 2, 1); Player.currentCreature.mana.manaRegen = 4 + ((StatManager.magicEfficiencyLvl * 0.5f) - 0.5f) * statBoosters.Values.Sum(); GameManager.options.handlePositionDamperMultiplier = Mathf.RoundToInt(20 + ((StatManager.combatStrengthLvl * 1f) - 1f) * statBoosters.Values.Sum()); GameManager.options.handlePositionSpringMultiplier = Mathf.RoundToInt(20 + ((StatManager.combatStrengthLvl * 1f) - 1f) * statBoosters.Values.Sum()); GameManager.options.handleRotationDamperMultiplier = Mathf.RoundToInt(20 + ((StatManager.combatStrengthLvl * 1f) - 1f) * statBoosters.Values.Sum()); GameManager.options.handleRotationSpringMultiplier = Mathf.RoundToInt(20 + ((StatManager.combatStrengthLvl * 1f) - 1f) * statBoosters.Values.Sum()); if (StatManager.combatStrengthLvl >= 20) { GameManager.options.handleForceXYZ = true; } else { GameManager.options.handleForceXYZ = false; } GameManager.options.Apply(); CreatureData maleData = Catalog.GetData <CreatureData>("PlayerDefaultMale"); CreatureData femaleData = Catalog.GetData <CreatureData>("PlayerDefaultFemale"); maleData.forcePositionSpringDamper = new Vector2(3750 + (combatDamage * StatManager.combatStrengthLvl) * statBoosters.Values.Sum(), 100); maleData.forceRotationSpringDamper = new Vector2(750 + (combatDamage * StatManager.combatStrengthLvl) * statBoosters.Values.Sum(), 50); maleData.climbingForceMaxPosition = 1000 + (combatDamage * StatManager.combatStrengthLvl) * statBoosters.Values.Sum(); maleData.climbingForceMaxRotation = 100 + (combatDamage * StatManager.combatStrengthLvl) * statBoosters.Values.Sum(); maleData.gripForceMaxPosition = 750 + (combatDamage * StatManager.combatStrengthLvl) * statBoosters.Values.Sum(); maleData.gripForceMaxRotation = 75 + (combatDamage * StatManager.combatStrengthLvl) * statBoosters.Values.Sum(); maleData.health = Convert.ToInt16(16 + ((StatManager.combatHealthLvl * 1) - 1f) * statBoosters.Values.Sum()); maleData.focus = 20 + ((StatManager.miscFocusLvl * 2) - 2) * statBoosters.Values.Sum(); femaleData.forcePositionSpringDamper = new Vector2(3750 + (combatDamage * StatManager.combatStrengthLvl), 100) * statBoosters.Values.Sum(); femaleData.forceRotationSpringDamper = new Vector2(750 + (combatDamage * StatManager.combatStrengthLvl), 50) * statBoosters.Values.Sum(); femaleData.climbingForceMaxPosition = 1000 + (combatDamage * StatManager.combatStrengthLvl) * statBoosters.Values.Sum(); femaleData.climbingForceMaxRotation = 100 + (combatDamage * StatManager.combatStrengthLvl) * statBoosters.Values.Sum(); femaleData.gripForceMaxPosition = 750 + (combatDamage * StatManager.combatStrengthLvl) * statBoosters.Values.Sum(); femaleData.gripForceMaxRotation = 75 + (combatDamage * StatManager.combatStrengthLvl) * statBoosters.Values.Sum(); femaleData.health = Convert.ToInt16(16 + ((StatManager.combatHealthLvl * 1f) - 1f) * statBoosters.Values.Sum()); femaleData.focus = 20 + ((StatManager.miscFocusLvl * 2) - 2) * statBoosters.Values.Sum(); SpellTelekinesis tk = Catalog.GetData <SpellTelekinesis>("Telekinesis"); tk.maxAngle = 40 + ((StatManager.magicEfficiencyLvl * 1) - 1); tk.throwMultiplier = 2 + ((StatManager.magicEfficiencyLvl * .3f) - .3f); tk.manaConsumption = 5 - ((StatManager.magicEfficiencyLvl * .1f) - .1f); tk.maxVelocity = 5 + ((StatManager.magicEfficiencyLvl * 0.25f) - 0.25f); tk.pushDefaultForce = 20 + ((StatManager.magicEfficiencyLvl * 1) - 1); tk.pushRagdollForce = 30 + ((StatManager.magicEfficiencyLvl * 1) - 1); tk.maxCatchDistance = 6 + ((StatManager.magicEfficiencyLvl * .5f) - .5f); tk.pushRagdollOtherPartsForce = 8 + ((StatManager.magicEfficiencyLvl * 1f) - 1f); tk.pullAndRepelMaxSpeed = 8 + ((StatManager.magicEfficiencyLvl * .5f) - .5f); tk.repelMaxDistance = 12 + ((StatManager.magicEfficiencyLvl * .5f) - .5f); SpellCastGravity gravity = Catalog.GetData <SpellCastGravity>("Gravity"); gravity.manaConsumption = 20 - ((StatManager.magicEfficiencyLvl * 1f) - 1f); gravity.halfSphereRadius = 2 + ((StatManager.magicEfficiencyLvl * .03f) - .03f); gravity.pushMaxForce = 8 + ((StatManager.magicEfficiencyLvl * 0.2f) - 0.2f); SpellMergeGravity gravityMerge = Catalog.GetData <SpellMergeGravity>("GravityMerge"); gravityMerge.mergingLiftRadius = 5 + ((StatManager.magicEfficiencyLvl * .1f) - .1f); gravityMerge.bubbleDuration = 15 + ((StatManager.magicEfficiencyLvl * .4f) - .4f); if (Player.currentCreature.currentHealth > Player.currentCreature.maxHealth) { Player.currentCreature.currentHealth = Player.currentCreature.maxHealth; } }
public void OnTelekinesisGrabEvent(Handle handle, SpellTelekinesis teleGrabber) { telekinesis = teleGrabber; }
public void OnTelekinesisReleaseEvent(Handle handle, SpellTelekinesis teleGrabber) { telekinesis = null; }
private void Item_OnTelekinesisGrabEvent(Handle handle, SpellTelekinesis teleGrabber) { spawnTime = Time.time; }
private void ItemOnOnTelekinesisGrabEvent(Handle handle, SpellTelekinesis telegrabber) { Destroy(this); }