private void On_FireFMJFire(On.EntityStates.GenericProjectileBaseState.orig_FireProjectile orig, EntityStates.GenericProjectileBaseState self) { var cc = self.outer.commonComponents; bool isBoosted = self is ThrowGrenade && Util.HasEffectiveAuthority(self.outer.networkIdentity) && AncientScepterItem.instance.GetCount(cc.characterBody) > 0; if (isBoosted) { self.projectilePrefab = projReplacer; } orig(self); if (isBoosted) { for (var i = 0; i < 7; i++) { Ray r; if (cc.inputBank) { r = new Ray(cc.inputBank.aimOrigin, cc.inputBank.aimDirection); } else { r = new Ray(cc.transform.position, cc.transform.forward); } r.direction = Util.ApplySpread(r.direction, self.minSpread + 7f, self.maxSpread + 15f, 1f, 1f, 0f, self.projectilePitchBonus); ProjectileManager.instance.FireProjectile( self.projectilePrefab, r.origin, Util.QuaternionSafeLookRotation(r.direction), self.outer.gameObject, self.damageStat * self.damageCoefficient, self.force, Util.CheckRoll(self.critStat, cc.characterBody.master), DamageColorIndex.Default, null, -1f); } } }
private void On_FireFMJEnter(On.EntityStates.GenericProjectileBaseState.orig_OnEnter orig, EntityStates.GenericProjectileBaseState self) { orig(self); if (!(self is EntityStates.Merc.Weapon.ThrowEvisProjectile) || Scepter.instance.GetCount(self.outer.commonComponents.characterBody) < 1) { return; } if (!self.outer.commonComponents.skillLocator?.special) { return; } var fireCount = self.outer.commonComponents.skillLocator.special.stock; self.outer.commonComponents.skillLocator.special.stock = 0; for (var i = 0; i < fireCount; i++) { self.FireProjectile(); self.DoFireEffects(); } }