Exemplo n.º 1
0
        private void ProjectileManager_FireProjectile_FireProjectileInfo(On.RoR2.Projectile.ProjectileManager.orig_FireProjectile_FireProjectileInfo orig, RoR2.Projectile.ProjectileManager self, RoR2.Projectile.FireProjectileInfo fireProjectileInfo)
        {
            orig(self, fireProjectileInfo);
            if (ignoreMugs || !self || !fireProjectileInfo.owner || !fireProjectileInfo.projectilePrefab || fireProjectileInfo.projectilePrefab.GetComponent <Deployable>())
            {
                return;
            }
            var cpt = fireProjectileInfo.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);
            var origRot     = fireProjectileInfo.rotation;

            for (var i = 0; i < procCount; i++)
            {
                fireProjectileInfo.rotation = origRot * Quaternion.Euler(
                    (rng.nextNormalizedFloat - 0.5f) * spreadConeHalfAngleDegr,
                    (rng.nextNormalizedFloat - 0.5f) * spreadConeHalfAngleDegr,
                    (rng.nextNormalizedFloat - 0.5f) * spreadConeHalfAngleDegr);
                orig(self, fireProjectileInfo);
            }
        }
        private void ProjectileManager_FireProjectile_FireProjectileInfo(On.RoR2.Projectile.ProjectileManager.orig_FireProjectile_FireProjectileInfo orig, RoR2.Projectile.ProjectileManager self, RoR2.Projectile.FireProjectileInfo fireProjectileInfo)
        {
            var     projectileController = fireProjectileInfo.projectilePrefab.GetComponentInChildren <RoR2.Projectile.ProjectileController>();
            Vector3 oldProjectileSize    = projectileController.transform.localScale;
            Vector3 oldGhostSize         = projectileController.ghost.transform.localScale;

            if (fireProjectileInfo.owner && fireProjectileInfo.owner.GetComponent <CharacterBody>())
            {
                var itemCount = GetCount(fireProjectileInfo.owner.GetComponent <CharacterBody>());
                if (itemCount > 0)
                {
                    if (!fireProjectileInfo.useSpeedOverride)
                    {
                        fireProjectileInfo.speedOverride = fireProjectileInfo.projectilePrefab.GetComponent <RoR2.Projectile.ProjectileSimple>().desiredForwardSpeed;
                    }
                    var oldSpeed = fireProjectileInfo.speedOverride;
                    var fraction = 1f - cfgProjectileSpeedReduction.Value;
                    fireProjectileInfo.speedOverride *= Mathf.Pow(fraction, itemCount);
                    Chat.AddMessage($"Speed changed from {oldSpeed} to {fireProjectileInfo.speedOverride} ({(oldSpeed - fireProjectileInfo.speedOverride)} difference)");
                }
            }

            orig(self, fireProjectileInfo);
            projectileController.transform.localScale       = oldProjectileSize;
            projectileController.ghost.transform.localScale = oldGhostSize;
        }
Exemplo n.º 3
0
        private void ProjectileManager_FireProjectile_FireProjectileInfo(On.RoR2.Projectile.ProjectileManager.orig_FireProjectile_FireProjectileInfo orig, ProjectileManager self, FireProjectileInfo fireProjectileInfo)
        {
            var owner = fireProjectileInfo.owner;

            if (owner)
            {
                var characterBody = owner.GetComponent <CharacterBody>();
                if (characterBody)
                {
                    var inventory = characterBody.inventory;
                    if (inventory && inventory.GetItemCount(catalogIndex) > 0)
                    {
                        var component = self.gameObject.GetComponent <OrbitalBulletsComponent>();
                        if (!component)
                        {
                            component = self.gameObject.AddComponent <OrbitalBulletsComponent>();
                        }
                        component.enabled = true;
                        component.target  = owner;
                        component.projectileImpactExplosion = self.gameObject.GetComponent <ProjectileImpactExplosion>();
                        component.projectileSimple          = self.gameObject.GetComponent <ProjectileSimple>();
                        component.radius = owner.GetComponent <CharacterMotor>().capsuleRadius + 3f;
                    }
                }
            }
            orig(self, fireProjectileInfo);
        }
Exemplo n.º 4
0
        private void AdjustSpeedEnemyProjectile(On.RoR2.Projectile.ProjectileManager.orig_FireProjectile_FireProjectileInfo orig, ProjectileManager self, FireProjectileInfo fireProjectileInfo)
        {
            GameObject owner = fireProjectileInfo.owner;

            if (owner)
            {
                CharacterBody cb = owner.GetComponent <CharacterBody>();
                if (cb)
                {
                    var teamComponent = cb.teamComponent;
                    if (teamComponent)
                    {
                        var teamIndex = teamComponent.teamIndex;
                        if (teamIndex != TeamIndex.Player) //Enemies only
                        {
                            var prefab = fireProjectileInfo.projectilePrefab;
                            if (prefab)
                            {
                                ProjectileSimple projectileSimple = prefab.GetComponent <ProjectileSimple>();
                                if (projectileSimple)
                                {
                                    //var oldSpeed = projectileSimple.velocity;
                                    var speedMult = CalculateEnemyProjectileSpeedMultiplier();
                                    fireProjectileInfo.speedOverride    = projectileSimple.desiredForwardSpeed * (1f + speedMult);
                                    fireProjectileInfo.useSpeedOverride = true;
                                    //Debug.Log("vel " + projectileSimple.velocity + " speedoverride " + fireProjectileInfo.speedOverride);
                                }
                            }
                        }
                        //fireProjectileInfo._speedOverride = fireProjectileInfo.
                    }
                }
            }
            orig(self, fireProjectileInfo);
        }
Exemplo n.º 5
0
        private void AdjustSpreadProjectiles(On.RoR2.Projectile.ProjectileManager.orig_FireProjectile_FireProjectileInfo orig, ProjectileManager self, FireProjectileInfo fireProjectileInfo)
        {
            GameObject owner = fireProjectileInfo.owner;

            if (owner)
            {
                CharacterBody cb = owner.GetComponent <CharacterBody>();
                if (cb)
                {
                    Inventory inventory = cb.inventory;
                    if (inventory)
                    {
                        InputBankTest input = cb.inputBank;
                        if (input)
                        {
                            float      AccMult                = CalculateSpreadMultiplier(inventory, true);
                            GameObject projectilePrefab       = fireProjectileInfo.projectilePrefab;
                            Vector3    aimDirection           = input.aimDirection;
                            Quaternion aimDirectionQuaternion = Util.QuaternionSafeLookRotation(aimDirection);

                            _logger.LogMessage("Projectile Fired: " + fireProjectileInfo.projectilePrefab.name);
                            bool isProjectileAllowed = WhitelistedProjectiles.Contains(projectilePrefab);

                            if ((ShotSpread_WhitelistProjectiles && isProjectileAllowed) || !ShotSpread_WhitelistProjectiles)
                            {
                                //float BaseSpreadAngle = 15;

                                //Note Clamp Acc at 1 for 100% acc or else it overflows
                                float      CappedAccMult = Mathf.Min(AccMult, 1);
                                Quaternion UpdatedAngle;

                                if (AccMult >= 0)
                                {
                                    UpdatedAngle = Quaternion.Lerp(fireProjectileInfo.rotation, aimDirectionQuaternion, CappedAccMult);
                                }
                                else
                                {
                                    //AGONY
                                    AccMult *= -1;
                                    //CappedAccMult *= -1;
                                    //This is a random dir in cone. USED FOR INACCURACY
                                    //TODO
                                    //Quaternion bulletDir = GetRandomInsideCone(BaseSpreadAngle, aimDirection);
                                    //_logger.LogMessage(bulletDir);
                                    //UpdatedAngle = Quaternion.SlerpUnclamped(bulletDir, aimDirectionQuaternion, CappedAccMult);
                                    var minSpread = Mathf.Max(0f, 1f - AccMult);
                                    UpdatedAngle = Util.QuaternionSafeLookRotation(Util.ApplySpread(fireProjectileInfo.rotation.eulerAngles, minSpread, AccMult, 1f, 1f));
                                }
                                fireProjectileInfo.rotation = UpdatedAngle;
                                //UpdatedAngle = Quaternion.LerpUnclamped(fireProjectileInfo.rotation, aimDirectionQuaternion, CappedAccMult);
                                //fireProjectileInfo.rotation = UpdatedAngle;
                            }
                        }
                    }
                }
            }
            orig(self, fireProjectileInfo);
        }
        private void ProjectileManager_FireProjectile_FireProjectileInfo(On.RoR2.Projectile.ProjectileManager.orig_FireProjectile_FireProjectileInfo orig, RoR2.Projectile.ProjectileManager self, RoR2.Projectile.FireProjectileInfo fireProjectileInfo)
        {
            var component = fireProjectileInfo.projectilePrefab.GetComponent <ProjectileDamage>();

            if (component)
            {
                var component2 = fireProjectileInfo.projectilePrefab.GetComponent <ProjectileController>();
                var value1     = component2 ? component2.procCoefficient : 1;
                component.damageType = ShockRoll(fireProjectileInfo.owner, component.damageType, value1);
            }
            orig(self, fireProjectileInfo);
        }
Exemplo n.º 7
0
        private void ProjectileManager_FireProjectile_FireProjectileInfo(On.RoR2.Projectile.ProjectileManager.orig_FireProjectile_FireProjectileInfo orig, RoR2.Projectile.ProjectileManager self, RoR2.Projectile.FireProjectileInfo fireProjectileInfo)
        {
            var component = fireProjectileInfo.projectilePrefab.GetComponent <ProjectileDamage>();

            if (component)
            {
                var component2 = fireProjectileInfo.projectilePrefab.GetComponent <ProjectileController>();
                var value1     = component2 ? component2.procCoefficient : 1;
                component.damageType = ProcDamageType(fireProjectileInfo.owner, itemDef, component.damageType, damageType, value1, BatteryBullets_ProcCoefficient, BatteryBullets_ProcCoefficientStack);
            }
            orig(self, fireProjectileInfo);
        }
Exemplo n.º 8
0
        private static void ProjectileManager_FireProjectile_FireProjectileInfo(On.RoR2.Projectile.ProjectileManager.orig_FireProjectile_FireProjectileInfo orig, ProjectileManager self, FireProjectileInfo fireProjectileInfo)
        {
            if (fireProjectileInfo.owner)
            {
                var comp      = fireProjectileInfo.owner.GetComponent <CharacterBody>()?.masterObject?.GetComponent <RBSExtraStatsController>();
                var inputBank = fireProjectileInfo.owner.GetComponent <CharacterBody>()?.inputBank;
                if (comp && inputBank)
                {
                    float      accuracy = comp.projectileAccuracy;
                    Quaternion aimDirectionQuaternion = Util.QuaternionSafeLookRotation(inputBank.aimDirection);

                    //if (ShowAnnoyingDebugText) _logger.LogMessage("Projectile Fired: " + fireProjectileInfo.projectilePrefab.name);

                    // projectile check
                    if ((ShotSpread_WhitelistProjectiles && WhitelistedProjectiles.Contains(fireProjectileInfo.projectilePrefab)) || !ShotSpread_WhitelistProjectiles)
                    {
                        Quaternion UpdatedAngle;

                        if (accuracy >= 0)
                        {
                            UpdatedAngle = Quaternion.Lerp(fireProjectileInfo.rotation, aimDirectionQuaternion, accuracy);
                        }
                        else
                        {
                            accuracy *= -1;
                            //UpdatedAngle = Quaternion.LerpUnclamped(fireProjectileInfo.rotation, aimDirectionQuaternion, accuracy);

                            //CappedAccMult *= -1;
                            //This is a random dir in cone. USED FOR INACCURACY
                            //TODO
                            //Quaternion bulletDir = GetRandomInsideCone(BaseSpreadAngle, aimDirection);
                            //_logger.LogMessage(bulletDir);
                            //UpdatedAngle = Quaternion.SlerpUnclamped(bulletDir, aimDirectionQuaternion, CappedAccMult);
                            var minSpread = Mathf.Max(0f, 1f - accuracy);
                            UpdatedAngle = Util.QuaternionSafeLookRotation(Util.ApplySpread(fireProjectileInfo.rotation.eulerAngles, minSpread, accuracy, 1f, 1f));
                        }
                        fireProjectileInfo.rotation = UpdatedAngle;
                    }
                }
            }
            orig(self, fireProjectileInfo);
        }
Exemplo n.º 9
0
        private void FireTheSwordOnProjectiles(On.RoR2.Projectile.ProjectileManager.orig_FireProjectile_FireProjectileInfo orig, RoR2.Projectile.ProjectileManager self, FireProjectileInfo fireProjectileInfo)
        {
            if (!RecursionPrevention && !BlacklistedProjectiles.Contains(fireProjectileInfo.projectilePrefab.name))
            {
                var projectileOwner = fireProjectileInfo.owner;
                if (projectileOwner)
                {
                    var body = projectileOwner.GetComponent <RoR2.CharacterBody>();
                    if (body)
                    {
                        var InventoryCount = GetCount(body);
                        if (InventoryCount > 0)
                        {
                            if (body.healthComponent.combinedHealthFraction >= 1)
                            {
                                var newProjectileInfo = fireProjectileInfo;
                                newProjectileInfo.owner              = projectileOwner;
                                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(RoR2.ProcChainMask);

                                try
                                {
                                    RecursionPrevention = true;
                                    RoR2.Projectile.ProjectileManager.instance.FireProjectile(newProjectileInfo);
                                }
                                finally
                                {
                                    RecursionPrevention = false;
                                }
                            }
                        }
                    }
                }
            }
            orig(self, fireProjectileInfo);
        }
        private void ProjectileManager_FireProjectile_FireProjectileInfo(On.RoR2.Projectile.ProjectileManager.orig_FireProjectile_FireProjectileInfo orig, ProjectileManager self, FireProjectileInfo fireProjectileInfo)
        {
            int InventoryCount = fireProjectileInfo.owner.GetComponent <CharacterBody>().inventory.GetItemCount(catalogIndex);

            //ProjectileSimple projectileSimple = self.gameObject.GetComponent<ProjectileSimple>();
            if (InventoryCount > 0)
            {
                //if (fireProjectileInfo.projectilePrefab != RollBomb.BombPrefab) { return; }
                var ProjMultFinal = 1 + (ProjSpeedMult + ProjSpeedMultStack * (InventoryCount - 1));
                if (fireProjectileInfo.useSpeedOverride)
                {
                    fireProjectileInfo.speedOverride = Math.Abs(ProjMultFinal * fireProjectileInfo.speedOverride);
                    Chat.AddMessage("Resulting RPB speed: " + fireProjectileInfo.speedOverride);
                }
                else
                {
                    fireProjectileInfo.useSpeedOverride = true;
                    fireProjectileInfo.speedOverride    = Math.Abs(ProjMultFinal * 1);
                    Chat.AddMessage("Resulting RPB speed: " + fireProjectileInfo.speedOverride);
                }
            }
            orig(self, fireProjectileInfo);
        }
 private void PM_FireProj(On.RoR2.Projectile.ProjectileManager.orig_FireProjectile_FireProjectileInfo orig, RoR2.Projectile.ProjectileManager self, RoR2.Projectile.FireProjectileInfo fireProjectileInfo)
 {
     //fireProjectileInfo.
     orig(self, fireProjectileInfo);
 }
Exemplo n.º 12
0
 private void ProjectileManager_FireProjectile_FireProjectileInfo(On.RoR2.Projectile.ProjectileManager.orig_FireProjectile_FireProjectileInfo orig, RoR2.Projectile.ProjectileManager self, RoR2.Projectile.FireProjectileInfo fireProjectileInfo)
 {
     fireProjectileInfo.damageColorIndex = (DamageColorIndex)damageColorOverride;
     orig(self, fireProjectileInfo);
 }