Пример #1
0
        private void BulletAttack_Fire(On.RoR2.BulletAttack.orig_Fire orig, BulletAttack self)
        {
            orig(self);
            if (ignoreMugs || !self.owner)
            {
                return;
            }
            var cpt = self.owner.GetComponent <CharacterBody>();

            if (!cpt)
            {
                return;
            }
            var count = GetCount(cpt);

            if (count <= 0)
            {
                return;
            }
            var totalChance = count * procChance;
            int procCount   = (Util.CheckRoll(Wrap(totalChance * 100f, 0f, 100f), cpt.master) ? 1 : 0) + (int)Mathf.Floor(totalChance);

            if (procCount <= 0)
            {
                return;
            }
            self.bulletCount      = (uint)procCount;
            self.maxSpread       += spreadConeHalfAngleDegr;
            self.spreadPitchScale = 1f;
            self.spreadYawScale   = 1f;
            orig(self);
        }
Пример #2
0
        private static void AdjustSpreadBullets(On.RoR2.BulletAttack.orig_Fire orig, BulletAttack self)
        {
            if (self.owner)
            {
                var body = self.owner.gameObject.GetComponent <CharacterBody>();
                if (body)
                {
                    var comp = body.masterObject.GetComponent <RBSExtraStatsController>();
                    if (comp)
                    {
                        var accuracy = comp.bulletAccuracy;

                        body.SetSpreadBloom(Mathf.Min(0, body.spreadBloomAngle * accuracy), false);

                        self.maxSpread = SimpleSpread(self.maxSpread, 1.15f);

                        self.minSpread = SimpleSpread(accuracy, self.minSpread);

                        if (body.inputBank)
                        {
                            self.aimVector = Vector3.Lerp(self.aimVector, body.inputBank.aimDirection, 1 - accuracy);
                        }

                        self.spreadPitchScale *= SimpleSpread(accuracy, self.spreadPitchScale);
                        self.spreadYawScale   *= SimpleSpread(accuracy, self.spreadYawScale);
                    }
                }
            }
            orig(self);
        }
Пример #3
0
        private void AdjustSpreadBullets(On.RoR2.BulletAttack.orig_Fire orig, BulletAttack self)
        {
            //doesn't work on MULT?????
            CharacterBody characterBody = self.owner.gameObject.GetComponent <CharacterBody>();

            if (characterBody)
            {
                var inventory = characterBody.inventory;
                if (inventory)
                {
                    var ResultMult = CalculateSpreadMultiplier(inventory, false);

                    characterBody.SetSpreadBloom(Mathf.Min(0, characterBody.spreadBloomAngle * ResultMult), false);

                    //Debug.Log("Bulletscope: maxspread: "+self.maxSpread+" multiplier: "+ResultMult+" result: "+ Mathf.Max(self.maxSpread * ResultMult, 0));

                    //if (self.radius == 0) //(maybe?)
                    //self.radius = ResultMult;

                    self.maxSpread = SimpleSpread(self.maxSpread, 1.15f);

                    self.minSpread = SimpleSpread(ResultMult, self.minSpread);

                    self.spreadPitchScale *= SimpleSpread(ResultMult, self.spreadPitchScale);
                    self.spreadYawScale   *= SimpleSpread(ResultMult, self.spreadYawScale);

                    //self.owner.GetComponent<CharacterBody>().SetSpreadBloom(ResultMult, false);
                }
            }
            orig(self);
        }
Пример #4
0
        private void FireTheSwordOnBulletAttack(On.RoR2.BulletAttack.orig_Fire orig, RoR2.BulletAttack self)
        {
            var projectileOwner = self.owner;

            if (projectileOwner)
            {
                var projectileBody = projectileOwner.GetComponent <CharacterBody>();
                if (projectileBody)
                {
                    var InventoryCount = GetCount(projectileBody);
                    if (InventoryCount > 0)
                    {
                        if (projectileBody.healthComponent.combinedHealthFraction >= 1)
                        {
                            var newProjectileInfo = new FireProjectileInfo();
                            newProjectileInfo.owner              = projectileOwner;
                            newProjectileInfo.projectilePrefab   = SwordProjectile;
                            newProjectileInfo.speedOverride      = 100.0f;
                            newProjectileInfo.damage             = projectileBody.damage * baseSwordDamageMultiplier + (projectileBody.damage * additionalSwordDamageMultiplier * (InventoryCount - 1));
                            newProjectileInfo.damageTypeOverride = null;
                            newProjectileInfo.damageColorIndex   = DamageColorIndex.Default;
                            newProjectileInfo.procChainMask      = default(RoR2.ProcChainMask);

                            Vector3 MuzzleTransform = self.origin;
                            var     weapon          = self.weapon;
                            if (weapon)
                            {
                                var weaponModelLocator = weapon.GetComponent <ModelLocator>();
                                if (weaponModelLocator && weaponModelLocator.transform)
                                {
                                    ChildLocator childLocator = weaponModelLocator.modelTransform.GetComponent <ChildLocator>();
                                    if (childLocator)
                                    {
                                        if (self.muzzleName != null)
                                        {
                                            MuzzleTransform = childLocator.FindChild(self.muzzleName).position;
                                        }
                                    }
                                }
                            }
                            newProjectileInfo.position = MuzzleTransform;
                            newProjectileInfo.rotation = RoR2.Util.QuaternionSafeLookRotation(self.aimVector);

                            try
                            {
                                RecursionPrevention = true;
                                RoR2.Projectile.ProjectileManager.instance.FireProjectile(newProjectileInfo);
                            }
                            finally
                            {
                                RecursionPrevention = false;
                            }
                        }
                    }
                }
            }
            orig(self);
        }
Пример #5
0
 private void BulletAttack_Fire(On.RoR2.BulletAttack.orig_Fire orig, BulletAttack self)
 {
     bulletAttackDidHit = false;
     orig(self);
     if (!bulletAttackDidHit && self.owner == this.localUser.cachedBodyObject)
     {
         userProfile.statSheet.PushStatValue(Mug.instance.whiffsStatDef, 1UL);
         if (ProgressForAchievement() >= 1.0f)
         {
             Grant();
         }
     }
 }
 private void BulletAttack_Fire(On.RoR2.BulletAttack.orig_Fire orig, BulletAttack self)
 {
     self.damageType = ShockRoll(self.owner, self.damageType, self.procCoefficient);
     orig(self);
 }
Пример #7
0
 private void BulletAttack_Fire(On.RoR2.BulletAttack.orig_Fire orig, BulletAttack self)
 {
     self.damageType = ProcDamageType(self.owner, itemDef, self.damageType, damageType, self.procCoefficient, BatteryBullets_ProcCoefficient, BatteryBullets_ProcCoefficientStack);
     orig(self);
 }