private bool OverlapAttack_Fire(On.RoR2.OverlapAttack.orig_Fire orig, OverlapAttack self, List <HealthComponent> hitResults) { if (self.attacker) { if (self.attacker.GetComponent <CharacterBody>() is CharacterBody characterBody && characterBody.inventory) { if (characterBody.inventory.GetItemCount(this.ItemIndex) is int count && count > 0) { for (int i = 0; i < count; i++) { orig(self, hitResults); } } } } return(orig(self, hitResults)); }
private bool OverlapAttack_Fire(On.RoR2.OverlapAttack.orig_Fire orig, OverlapAttack self, List <HealthComponent> hitResults) { if (self.attacker) { if (self.attacker.GetComponent <CharacterBody>() is CharacterBody characterBody && characterBody.inventory) { if (characterBody.inventory.GetItemCount(this.ItemIndex) is int count && count > 0) { List <OverlapAttack> attacks; if (childAttacks.TryGetValue(self, out attacks)) { foreach (var attack in attacks) { orig(attack, hitResults); } } else { attacks = new List <OverlapAttack>(); for (int i = 0; i < count; i++) { OverlapAttack overlapAttack = new OverlapAttack(); overlapAttack.attacker = self.attacker; overlapAttack.attackerFiltering = self.attackerFiltering; overlapAttack.damage = self.damage; overlapAttack.damageColorIndex = self.damageColorIndex; overlapAttack.damageType = self.damageType; overlapAttack.forceVector = self.forceVector; overlapAttack.hitBoxGroup = self.hitBoxGroup; overlapAttack.hitEffectPrefab = self.hitEffectPrefab; overlapAttack.inflictor = self.inflictor; overlapAttack.isCrit = self.isCrit; overlapAttack.procChainMask = self.procChainMask; overlapAttack.procCoefficient = self.procCoefficient; overlapAttack.teamIndex = self.teamIndex; attacks.Add(overlapAttack); orig(overlapAttack, hitResults); } childAttacks.Add(self, attacks); } } } } return(orig(self, hitResults)); }
private bool OverlapAttack_Fire(On.RoR2.OverlapAttack.orig_Fire orig, OverlapAttack self, List <HurtBox> hitResults) { bool didAHit = orig(self, hitResults); HitboxGroupRevealer hitboxGroupRevealer = _hitboxGroupRevealers.Find((revealer) => { return(revealer != null && revealer.hitboxGroup == self.hitBoxGroup); }); if (hitboxGroupRevealer == null) { hitboxGroupRevealer = self.hitBoxGroup.gameObject.AddComponent <HitboxGroupRevealer>(); _hitboxGroupRevealers.Add(hitboxGroupRevealer); hitboxGroupRevealer.init(self.hitBoxGroup, _hitboxBoxPrefab, self.attacker); } hitboxGroupRevealer.reveal(true); return(didAHit); }
private bool OverlapAttack_Fire(On.RoR2.OverlapAttack.orig_Fire orig, OverlapAttack self, List <HealthComponent> hitResults) { self.damageType = ShockRoll(self.attacker, self.damageType, self.procCoefficient); return(orig(self, hitResults)); }
private bool OverlapAttack_Fire(On.RoR2.OverlapAttack.orig_Fire orig, OverlapAttack self, System.Collections.Generic.List <HurtBox> hitResults) { self.damageType = ProcDamageType(self.attacker, itemDef, self.damageType, damageType, self.procCoefficient, BatteryBullets_ProcCoefficient, BatteryBullets_ProcCoefficientStack); return(orig(self, hitResults)); }
private bool FireSwordOnMelee(On.RoR2.OverlapAttack.orig_Fire orig, RoR2.OverlapAttack self, List <RoR2.HealthComponent> hitResults) { var owner = self.inflictor; if (owner) { var body = owner.GetComponent <RoR2.CharacterBody>(); if (body) { var InventoryCount = GetCount(body); if (InventoryCount > 0) { if (body.healthComponent.combinedHealthFraction >= 1) { Vector3 HitPositionSums = Vector3.zero; if (self.overlapList.Count > 0) { for (int i = 0; i < self.overlapList.Count; i++) { HitPositionSums += self.overlapList[i].hitPosition; } HitPositionSums /= self.overlapList.Count; } else { HitPositionSums += body.corePosition; } var inputBank = body.inputBank; var cooldownHandler = owner.GetComponent <SwordCooldownHandlerIDunno>(); if (!cooldownHandler) { cooldownHandler = owner.AddComponent <SwordCooldownHandlerIDunno>(); } if (!cooldownHandler.MeleeTracker.ContainsKey(self)) { cooldownHandler.MeleeTracker.Add(self, 0); var newProjectileInfo = new FireProjectileInfo(); newProjectileInfo.owner = self.inflictor; newProjectileInfo.projectilePrefab = SwordProjectile; newProjectileInfo.speedOverride = 100.0f; newProjectileInfo.damage = body.damage * baseSwordDamageMultiplier + (body.damage * additionalSwordDamageMultiplier * (InventoryCount - 1)); newProjectileInfo.damageTypeOverride = null; newProjectileInfo.damageColorIndex = DamageColorIndex.Default; newProjectileInfo.procChainMask = default(ProcChainMask); newProjectileInfo.position = HitPositionSums; newProjectileInfo.rotation = RoR2.Util.QuaternionSafeLookRotation(inputBank ? inputBank.aimDirection : body.transform.forward); try { RecursionPrevention = true; RoR2.Projectile.ProjectileManager.instance.FireProjectile(newProjectileInfo); } finally { RecursionPrevention = false; } } } } } } return(orig(self, hitResults)); }