private void AddEliteMaterials(On.RoR2.CharacterBody.orig_FixedUpdate orig, RoR2.CharacterBody self) { if (self.HasBuff(EliteBuffIndex) && !self.GetComponent <HyperchargedBuffTracker>()) { var modelLocator = self.modelLocator; if (modelLocator) { var modelTransform = self.modelLocator.modelTransform; if (modelTransform) { var model = self.modelLocator.modelTransform.GetComponent <RoR2.CharacterModel>(); if (model) { var hyperchargedBuffTracker = self.gameObject.AddComponent <HyperchargedBuffTracker>(); hyperchargedBuffTracker.Body = self; RoR2.TemporaryOverlay overlay = self.modelLocator.modelTransform.gameObject.AddComponent <RoR2.TemporaryOverlay>(); overlay.duration = float.PositiveInfinity; overlay.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f); overlay.animateShaderAlpha = true; overlay.destroyComponentOnEnd = true; overlay.originalMaterial = EliteMaterial; overlay.AddToCharacerModel(model); hyperchargedBuffTracker.Overlay = overlay; } } } } orig(self); }
private void CheckFrenzyBuff(On.RoR2.CharacterBody.orig_FixedUpdate orig, RoR2.CharacterBody self) { var frenzyPotionTracker = self.GetComponent <FrenzyPotionTracker>(); if (frenzyPotionTracker) { self.teamComponent.teamIndex = TeamIndex.None; self.master.teamIndex = TeamIndex.None; } }
private void ManageLightningStrikes(On.RoR2.CharacterBody.orig_FixedUpdate orig, RoR2.CharacterBody self) { if (self.HasBuff(LightningStormBuffIndex)) { var lightningTracker = self.GetComponent <LightningTracker>(); if (!lightningTracker) { lightningTracker = self.gameObject.AddComponent <LightningTracker>(); } if (lightningTracker.LightningCooldown > 0) { lightningTracker.LightningCooldown -= Time.fixedDeltaTime; } if (lightningTracker.LightningCooldown <= 0) { for (int i = 1; i <= AmountOfLightningStrikesPerBarrage; i++) { var newProjectileInfo = new FireProjectileInfo { owner = self.gameObject, projectilePrefab = HyperchargedProjectile, speedOverride = 150.0f, damage = self.damage, damageTypeOverride = null, damageColorIndex = DamageColorIndex.Default, procChainMask = default }; var theta = (Math.PI * 2) / AmountOfLightningStrikesPerBarrage; var angle = theta * i; var radius = 20 + random.RangeFloat(-15, 15); var positionChosen = new Vector3((float)(radius * Math.Cos(angle) + self.corePosition.x), self.corePosition.y + 1, (float)(radius * Math.Sin(angle) + self.corePosition.z)); var raycastedChosen = MiscUtils.RaycastToFloor(positionChosen, 1000f); if (raycastedChosen != null) { positionChosen = raycastedChosen.Value + new Vector3(0, 0.5f, 0); } newProjectileInfo.position = positionChosen; newProjectileInfo.rotation = RoR2.Util.QuaternionSafeLookRotation(positionChosen + Vector3.down); ProjectileManager.instance.FireProjectile(newProjectileInfo); } lightningTracker.LightningCooldown = LightningStrikeCooldown; } } orig(self); }
private void TickDamage(On.RoR2.CharacterBody.orig_FixedUpdate orig, RoR2.CharacterBody self) { orig(self); var bleedComponent = self.GetComponent <BleedTrackerComponent>(); if (!bleedComponent) { bleedComponent = self.gameObject.AddComponent <BleedTrackerComponent>(); } foreach (BleedStack stack in bleedComponent.BleedStacks) { stack.FixedUpdate(self); } bleedComponent.BleedStacks.RemoveAll(x => x.TicksLeft <= 0); }
private void AddTrackerToBodies(On.RoR2.CharacterBody.orig_FixedUpdate orig, RoR2.CharacterBody self) { var slot = self.equipmentSlot; if (slot) { if (slot.equipmentIndex == equipmentDef.equipmentIndex) { var bulletTracker = self.GetComponent <JarBulletTracker>(); if (!bulletTracker) { bulletTracker = self.gameObject.AddComponent <JarBulletTracker>(); bulletTracker.body = self; } } } orig(self); }
private void VoidheartOverlayManager(On.RoR2.CharacterBody.orig_FixedUpdate orig, RoR2.CharacterBody self) { if (self.modelLocator && self.modelLocator.modelTransform && self.HasBuff(VoidInstabilityDebuff) && !self.GetComponent <VoidheartCooldown>()) { var Meshes = Voidheart.ItemBodyModelPrefab.GetComponentsInChildren <MeshRenderer>(); RoR2.TemporaryOverlay overlay = self.modelLocator.modelTransform.gameObject.AddComponent <RoR2.TemporaryOverlay>(); overlay.duration = voidHeartCooldownDebuffDuration; overlay.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f); overlay.animateShaderAlpha = true; overlay.destroyComponentOnEnd = true; overlay.originalMaterial = Meshes[0].material; overlay.AddToCharacerModel(self.modelLocator.modelTransform.GetComponent <RoR2.CharacterModel>()); var VoidheartCooldownTracker = self.gameObject.AddComponent <Voidheart.VoidheartCooldown>(); VoidheartCooldownTracker.Overlay = overlay; VoidheartCooldownTracker.Body = self; } orig(self); }
private void BloodBookBleedManager(On.RoR2.CharacterBody.orig_FixedUpdate orig, RoR2.CharacterBody self) { if (self.modelLocator && self.modelLocator.modelTransform && self.HasBuff(InsaneBloodBuff) && !self.GetComponent <InsaneBleed>()) { var Meshes = BloodBook.ItemBodyModelPrefab.GetComponentsInChildren <MeshRenderer>(); Meshes[0].gameObject.AddComponent <InsaneBleed>(); } }