Пример #1
0
        private static void Createprojectile()
        {
            ProjectileImpactExplosion projectileImpactExplosion = projectile.GetComponent <ProjectileImpactExplosion>();
            ProjectileDotZone         projectileDotZone         = dotZone.GetComponent <ProjectileDotZone>();

            projectileImpactExplosion.offsetForLifetimeExpiredSound = 0;
            projectileImpactExplosion.destroyOnWorld            = true;
            projectileImpactExplosion.timerAfterImpact          = true;
            projectileImpactExplosion.falloffModel              = BlastAttack.FalloffModel.None;
            projectileImpactExplosion.lifetime                  = 10;
            projectileImpactExplosion.lifetimeAfterImpact       = 0;
            projectileImpactExplosion.lifetimeRandomOffset      = 0;
            projectileImpactExplosion.blastRadius               = 10;
            projectileImpactExplosion.blastDamageCoefficient    = 6;
            projectileImpactExplosion.blastProcCoefficient      = 2;
            projectileImpactExplosion.blastAttackerFiltering    = default;
            projectileImpactExplosion.bonusBlastForce           = new Vector3(0.0f, 600.0f, 0.0f);
            projectileImpactExplosion.fireChildren              = true;
            projectileImpactExplosion.childrenProjectilePrefab  = dotZone;
            projectileImpactExplosion.childrenCount             = 1;
            projectileImpactExplosion.childrenDamageCoefficient = 1;

            projectileDotZone.overlapProcCoefficient = 0.5F;
            projectileDotZone.fireFrequency          = 15;
            projectileDotZone.resetFrequency         = 60;
            projectileDotZone.lifetime = 14;

            dotZone.transform.localScale = dotZone.transform.localScale * 3;
        }
Пример #2
0
        public void CreateProjectiles()
        {
            //needs to be declared first
            GameObject sporeGrenadeDotZonePrefab = Resources.Load <GameObject>("prefabs/projectiles/SporeGrenadeProjectileDotZone");

            MolotovDotZonePrefab = sporeGrenadeDotZonePrefab.InstantiateClone("Bulletstorm_MolotovDotZone", true);
            MolotovDotZonePrefab.GetComponent <ProjectileDamage>().damageType = DamageType.IgniteOnHit;
            ProjectileDotZone projectileDotZone = MolotovDotZonePrefab.GetComponent <ProjectileDotZone>();

            projectileDotZone.damageCoefficient = PercentDamagePerTick;
            projectileDotZone.resetFrequency    = Mathf.Clamp(FrequencyOfTicks, 0f, 60f);
            projectileDotZone.lifetime          = DurationAoE;
            //projectileDotZone.impactEffect = GlassBreakEffect;

            GameObject sporeGrenadePrefab = Resources.Load <GameObject>("prefabs/projectiles/SporeGrenadeProjectile");

            MolotovPrefab = sporeGrenadePrefab.InstantiateClone("Bulletstorm_Molotov", true);
            MolotovPrefab.GetComponent <ProjectileDamage>().damageColorIndex = DamageColorIndex.Item;

            var PIE = MolotovPrefab.GetComponent <ProjectileImpactExplosion>();

            if (DurationAoE > 0)
            {
                PIE.childrenProjectilePrefab = MolotovDotZonePrefab;
            }
            else
            {
                Object.Destroy(PIE);
            }
            MolotovPrefab.GetComponent <ProjectileSimple>().desiredForwardSpeed = 35; //50

            ApplyTorqueOnStart applyTorque = MolotovPrefab.AddComponent <ApplyTorqueOnStart>();

            applyTorque.randomize   = true;
            applyTorque.localTorque = new Vector3(400f, 10f, 400f);

            GameObject model = MainAssets.LoadAsset <GameObject>(ProjectileModelPath);

            model.AddComponent <NetworkIdentity>();
            model.AddComponent <ProjectileGhostController>();
            model.transform.localScale = new Vector3(0.25f, 0.25f, 0.25f);

            var controller = MolotovPrefab.GetComponent <ProjectileController>();

            controller.ghostPrefab = model;

            ProjectileAPI.Add(MolotovPrefab);
            ProjectileAPI.Add(MolotovDotZonePrefab);

            if (MolotovPrefab)
            {
                PrefabAPI.RegisterNetworkPrefab(MolotovPrefab);
            }
            if (MolotovDotZonePrefab)
            {
                PrefabAPI.RegisterNetworkPrefab(MolotovDotZonePrefab);
            }
        }
        public override void SetupBehavior()
        {
            base.SetupBehavior();
            GameObject sporeGrenadeDotZonePrefab = Resources.Load <GameObject>("prefabs/projectiles/SporeGrenadeProjectileDotZone");

            WaterPoolPrefab = sporeGrenadeDotZonePrefab.InstantiateClone("Bulletstorm_WaterPool");

            ProjectileDotZone projectileDotZone = WaterPoolPrefab.GetComponent <ProjectileDotZone>();

            projectileDotZone.attackerFiltering = AttackerFiltering.Default;
            projectileDotZone.lifetime          = CoolantLeak_Duration;

            ProjectileDamage projectileDamage = WaterPoolPrefab.GetComponent <ProjectileDamage>();

            projectileDamage.damageType = DamageType.Shock5s;
            projectileDamage.enabled    = false;

            GameObject sporeGrenadePrefab = Resources.Load <GameObject>("prefabs/projectiles/SporeGrenadeProjectile");

            WaterPoolPlacerPrefab = sporeGrenadePrefab.InstantiateClone("Bulletstorm_WaterPoolPlacer");
            WaterPoolPlacerPrefab.GetComponent <ProjectileDamage>().damageColorIndex = DamageColorIndex.Item;
            ProjectileImpactExplosion projectileImpactExplosion = WaterPoolPlacerPrefab.GetComponent <ProjectileImpactExplosion>();

            projectileImpactExplosion.impactEffect             = null;
            projectileImpactExplosion.childrenProjectilePrefab = WaterPoolPrefab;

            ProjectileCatalog.getAdditionalEntries += list => list.Add(WaterPoolPlacerPrefab);
            ProjectileCatalog.getAdditionalEntries += list => list.Add(WaterPoolPrefab);

            if (WaterPoolPlacerPrefab)
            {
                PrefabAPI.RegisterNetworkPrefab(WaterPoolPlacerPrefab);
            }
            if (WaterPoolPrefab)
            {
                PrefabAPI.RegisterNetworkPrefab(WaterPoolPrefab);
            }
        }
Пример #4
0
        private static void SetupProjectiles()
        {
            SetupAcidPool();
            SetupAcidPoolDrop();
            void SetupAcidPool()
            {
                acidPool = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("prefabs/projectiles/CrocoLeapAcid"), "CrocoSpeedAcid");
                acidPool.transform.localScale *= acidPoolScale;
                var buffWard = acidPool.AddComponent <BuffWard>();

                buffWard.buffDef         = RoR2Content.Buffs.CloakSpeed;
                buffWard.buffDuration    = CausticSludgeBuffDuration;
                buffWard.expires         = false;
                buffWard.floorWard       = true;
                buffWard.radius          = CausticSludgeActualScale;
                buffWard.requireGrounded = true;
                buffWard.interval       *= 0.5f;

                var enemyBuffWard = acidPool.AddComponent <BuffWard>();

                enemyBuffWard.buffDef          = RoR2Content.Buffs.Slow60;
                enemyBuffWard.buffDuration     = CausticSludgeBuffDuration;
                enemyBuffWard.expires          = false;
                enemyBuffWard.floorWard        = true;
                enemyBuffWard.radius           = CausticSludgeActualScale;
                enemyBuffWard.requireGrounded  = true;
                enemyBuffWard.invertTeamFilter = true;

                ProjectileDotZone projectileDotZone = acidPool.GetComponent <ProjectileDotZone>();

                projectileDotZone.damageCoefficient      = CausticSludgeDamageCoefficient;
                projectileDotZone.lifetime               = CausticSludgeLifetime;
                projectileDotZone.overlapProcCoefficient = 0f;

                PoisonSplatController poisonSplatController = acidPool.AddComponent <PoisonSplatController>();

                poisonSplatController.destroyOnTimer       = acidPool.GetComponent <DestroyOnTimer>();
                poisonSplatController.projectileDotZone    = projectileDotZone;
                poisonSplatController.projectileController = acidPool.GetComponent <ProjectileController>();

                ProjectileAPI.Add(acidPool);

                LeapDropAcid.groundedAcid = acidPool;
            }

            void SetupAcidPoolDrop()
            {
                Debug.Log("Setting up AcidPoolDrop");
                acidPoolDrop = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("prefabs/projectiles/SporeGrenadeProjectile"), "CrocoSpeedAcidDrop");

                acidPoolDrop.GetComponent <ProjectileSimple>().desiredForwardSpeed = 0;

                var atos = acidPoolDrop.AddComponent <ApplyTorqueOnStart>();

                atos.localTorque = Vector3.down * 3f;
                atos.randomize   = false;

                var projectileImpactExplosion = acidPoolDrop.GetComponent <ProjectileImpactExplosion>();

                projectileImpactExplosion.blastDamageCoefficient   = 0f;
                projectileImpactExplosion.childrenProjectilePrefab = acidPool;
                projectileImpactExplosion.impactEffect             = null;
                projectileImpactExplosion.destroyOnEnemy           = false;

                acidPoolDrop.AddComponent <PoisonFallController>();

                ProjectileAPI.Add(acidPoolDrop);
            }

            LeapDropAcid.projectilePrefab = acidPoolDrop;
        }