public override void OnEnter() { base.OnEnter(); PyroHeatController phc = base.GetComponent <PyroHeatController>(); float currentHeat = phc.GetHeat(); //float currentHeat = 1f; if (currentHeat >= Jetpack.heatCost) { heatMult = 1f; phc.ConsumeHeat(Jetpack.heatCost); } else { heatMult = currentHeat / Jetpack.heatCost; phc.ConsumeHeat(currentHeat); } if (base.characterBody && base.characterMotor) { Ray aimRay = base.GetAimRay(); if (base.characterMotor.velocity.y < 0f) { base.characterMotor.velocity.y = 0f; } if (base.characterMotor.isGrounded) { base.characterMotor.rootMotion.y += 1; } Vector3 direction = new Vector3(aimRay.direction.x, aimRay.direction.y > 0 ? aimRay.direction.y * Mathf.Lerp(Jetpack.verticalForceMin, Jetpack.verticalForceMax, heatMult) : aimRay.direction.y, aimRay.direction.z); base.characterMotor.ApplyForce(direction * Jetpack.selfForce, true, false); } Util.PlaySound(Jetpack.startJetpackSoundString, base.gameObject); }
public void Awake() { Setup(); On.RoR2.HealthComponent.TakeDamage += (orig, self, damageInfo) => { bool isPyro = false; if (damageInfo.attacker != null) { CharacterBody cb = damageInfo.attacker.GetComponent <CharacterBody>(); if (cb && cb.baseNameToken == "PYRO_BODY_NAME") { isPyro = true; } } //This could be done less hackily once official custom damagetype support is in. bool isScorch = false; bool isBlazeborne = false; bool isFlaregun = false; if (isPyro) { if (damageInfo.procCoefficient == Scorch.procCoefficient && damageInfo.damageColorIndex == DamageColorIndex.Default && damageInfo.damageType == DamageType.IgniteOnHit) { isScorch = true; damageInfo.damageType = DamageType.Generic; //Overwrite scorch attempting to ignite. } else if (damageInfo.damageColorIndex == DamageColorIndex.Default && damageInfo.procCoefficient == 1f) { if (damageInfo.damageType == (DamageType.IgniteOnHit | DamageType.SlowOnHit)) { isBlazeborne = true; damageInfo.damageType = DamageType.IgniteOnHit; //The SlowOnHit damagetype is purely for identification purposes. } else if (damageInfo.damageType == (DamageType.IgniteOnHit | DamageType.AOE)) { isFlaregun = true; } } } if (isBlazeborne) //Handle Blazeborne reheating. { int burnCount = self.body.GetBuffCount(BuffIndex.OnFire); if (self.body && burnCount > 0) { damageInfo.damage *= 1 + burnCount * Blazeborne.ignitedDirectHitMult; PyroHeatController phc = damageInfo.attacker.GetComponent <PyroHeatController>(); if (phc) { phc.RpcAddHeatServer(Blazeborne.ignitedHeatPercentRestore); } } } else if (isFlaregun) { int burnCount = self.body.GetBuffCount(BuffIndex.OnFire); if (self.body && burnCount > 0) { damageInfo.damage *= 1 + burnCount * Flaregun.ignitedDirectHitMult; PyroHeatController phc = damageInfo.attacker.GetComponent <PyroHeatController>(); if (phc) { phc.RpcAddHeatServer(Flaregun.ignitedHeatPercentRestore); } } } orig(self, damageInfo); //For Scorch, manually apply a burn DoT so that it will last longer, because Scorch has a low proc coefficient. if (isScorch) { DotController.InflictDot(self.gameObject, damageInfo.attacker, DotController.DotIndex.Burn, 4.5f, 1f); } }; }