示例#1
0
        private void EditNovaBomb()
        {
            GameObject novaProj = Resources.Load <GameObject>("Prefabs/Projectiles/MageLightningBombProjectile");

            ProjectileSimple novaSimp = novaProj.GetComponent <ProjectileSimple>();

            novaSimp.velocity *= 1.25f;

            Rigidbody rb = novaProj.GetComponent <Rigidbody>();

            rb.useGravity = true;
            rb.drag       = 1f;
            novaProj.GetComponent <Rigidbody>().useGravity = true;

            ProjectileImpactExplosion novaImpact = novaProj.GetComponent <ProjectileImpactExplosion>();

            novaImpact.blastDamageCoefficient = 1.0f;
            novaImpact.falloffModel           = RoR2.BlastAttack.FalloffModel.None;
            novaImpact.blastRadius            = 15f;

            ProjectileProximityBeamController novaBeams = novaProj.GetComponent <ProjectileProximityBeamController>();

            novaBeams.attackRange    *= 1.25f;
            novaBeams.attackInterval *= 0.9f;
            novaBeams.bounces        += 1;
        }
 private void ResetNearbyThermite()
 {
     Collider[] array = Physics.OverlapSphere(this.transform.position, 40f, LayerIndex.projectile.mask);
     for (int i = 0; i < array.Length; i++)
     {
         ProjectileController pc = array[i].GetComponentInParent <ProjectileController>();
         if (pc && pc.gameObject != this.gameObject)
         {
             BootlegThermiteOverlapAttack bt = pc.gameObject.GetComponent <BootlegThermiteOverlapAttack>();
             if (bt && bt.stuckObject == this.stuckObject)
             {
                 //bt.detonated = true;
                 bt.detonationStopwatch = -0.13f * (i + 1);
                 ProjectileSimple ps = pc.gameObject.GetComponent <ProjectileSimple>();
                 if (ps)
                 {
                     ps.stopwatch = 0f;
                 }
                 if (bt.projectileImpactExplosion)
                 {
                     bt.projectileImpactExplosion.stopwatch = 0f;
                 }
                 if (bt.stuckObject && bt.stuckObjectHealthComponent && bt.stuckObjectHealthComponent.body)
                 {
                     bt.cachedThermiteCount = bt.stuckObjectHealthComponent.body.GetBuffCount(ModContentPack.thermiteBuff);
                 }
             }
         }
     }
 }
示例#3
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);
        }
示例#4
0
        private static void CreateFireSpellRing()
        {
            fireSpellRingPrefab = CloneProjectilePrefab("Fireball", "ManipulatorFireRing");

            UnityEngine.GameObject.Destroy(fireSpellRingPrefab.GetComponent <ProjectileSingleTargetImpact>());
            ManipulatorProjectileAttachOnImpact manipulatorAttach = fireSpellRingPrefab.AddComponent <ManipulatorProjectileAttachOnImpact>();
            ProjectileDamage manipulatorDamage = fireSpellRingPrefab.GetComponent <ProjectileDamage>();

            manipulatorAttach.destroyOnWorld          = true;
            manipulatorAttach.destroyWhenNotAlive     = false;
            manipulatorAttach.attachTickMax           = fireSpellTickMax;
            manipulatorAttach.attachDuration          = fireSpellAttachDuration;
            manipulatorAttach.attachDamageCoefficient = fireSpellAttachCoefficient;
            manipulatorAttach.attachPrefab            = CreateAttachRing();
            manipulatorAttach.ownerController         = fireSpellRingPrefab.GetComponent <ProjectileController>();
            manipulatorAttach.attachPrefab.transform.SetParent(fireSpellRingPrefab.transform);
            //Debug.LogWarning("Manipulator Attach Prefab: " + manipulatorAttach.attachPrefab);

            ProjectileController ringController = fireSpellRingPrefab.GetComponent <ProjectileController>();

            ringController.procCoefficient = StatValues.fireSpellCoefficient;

            ProjectileSimple fireRingSimple = fireSpellRingPrefab.GetComponent <ProjectileSimple>();

            //fireRingSimple.velocity = fireSpellRingVelocity;
            fireRingSimple.desiredForwardSpeed = fireSpellRingVelocity;
            fireRingSimple.lifetime            = 3f;
        }
示例#5
0
        private void BuildFlareProjectile()
        {
            GameObject flareProjectile = Resources.Load <GameObject>("prefabs/projectiles/magefireboltbasic").InstantiateClone("SS2PyroFlare", true);

            ProjectileCatalog.getAdditionalEntries += delegate(List <GameObject> list)
            {
                list.Add(flareProjectile);
            };

            ProjectileSimple ps = flareProjectile.GetComponent <ProjectileSimple>();

            ps.lifetime = 18f;

            ProjectileImpactExplosion pie = flareProjectile.GetComponent <ProjectileImpactExplosion>();

            pie.blastRadius            = 8f;
            pie.blastDamageCoefficient = 1f;
            pie.blastProcCoefficient   = 1f;
            pie.timerAfterImpact       = false;
            pie.falloffModel           = BlastAttack.FalloffModel.None;
            pie.lifetime       = 18f;
            pie.destroyOnEnemy = true;
            pie.destroyOnWorld = true;

            ProjectileDamage pd = flareProjectile.GetComponent <ProjectileDamage>();

            pd.damage                       = 0f;
            pd.damageColorIndex             = DamageColorIndex.Default;
            pd.damageType                   = DamageType.IgniteOnHit;
            Flaregun.projectilePrefab       = flareProjectile;
            FireFlareBurst.projectilePrefab = flareProjectile;  //unused skill

            GameObject reflectProjectile = Resources.Load <GameObject>("prefabs/projectiles/magefireboltbasic").InstantiateClone("SS2PyroFlareReflect", true);

            ProjectileCatalog.getAdditionalEntries += delegate(List <GameObject> list)
            {
                list.Add(reflectProjectile);
            };
            ProjectileImpactExplosion pie2 = reflectProjectile.GetComponent <ProjectileImpactExplosion>();

            pie2.blastRadius            = 8f;
            pie2.blastDamageCoefficient = 1f;
            pie2.blastProcCoefficient   = 1f;
            pie2.timerAfterImpact       = false;
            pie2.falloffModel           = BlastAttack.FalloffModel.None;
            pie2.lifetime       = 18f;
            pie2.destroyOnEnemy = true;
            pie2.destroyOnWorld = true;

            ProjectileDamage pd2 = reflectProjectile.GetComponent <ProjectileDamage>();

            pd2.damage           = 0f;
            pd2.damageColorIndex = DamageColorIndex.Default;
            pd2.damageType       = DamageType.IgniteOnHit;

            HeatWave.reflectProjectilePrefab = reflectProjectile;
        }
 private void Awake()
 {
     projSimp = gameObject.GetComponent <ProjectileSimple>();
     if (!projSimp)
     {
         return;
     }
     projSimp.desiredForwardSpeed *= MortarTube.instance.velocityMultiplier;
 }
 private void Start()
 {
     if (!NetworkServer.active)
     {
         enabled = false;
         return;
     }
     transform        = gameObject.transform;
     targetComponent  = GetComponent <ProjectileTargetComponent>();
     projectileSimple = GetComponent <ProjectileSimple>();
     model            = gameObject.transform.Find("Model");
     velocity         = maxVelocity;
     velocityAsVector = Vector3.zero;
 }
        // Token: 0x0600295A RID: 10586 RVA: 0x000ADDA8 File Offset: 0x000ABFA8
        public override void OnEnter()
        {
            base.OnEnter();
            if (this.arcVisualizerPrefab)
            {
                this.arcVisualizerLineRenderer            = UnityEngine.Object.Instantiate <GameObject>(this.arcVisualizerPrefab, base.transform.position, Quaternion.identity).GetComponent <LineRenderer>();
                this.calculateArcPointsJob                = default(AimThrowableBase.CalculateArcPointsJob);
                this.completeArcPointsVisualizerJobMethod = new Action(this.CompleteArcVisualizerJob);
                RoR2Application.onLateUpdate             += this.completeArcPointsVisualizerJobMethod;
            }
            if (this.endpointVisualizerPrefab)
            {
                this.endpointVisualizerTransform = UnityEngine.Object.Instantiate <GameObject>(this.endpointVisualizerPrefab, base.transform.position, Quaternion.identity).transform;
            }
            if (base.characterBody)
            {
                base.characterBody.hideCrosshair = true;
            }
            ProjectileSimple component = this.projectilePrefab.GetComponent <ProjectileSimple>();

            if (component)
            {
                this.projectileBaseSpeed = component.velocity;
            }
            Rigidbody component2 = this.projectilePrefab.GetComponent <Rigidbody>();

            if (component2)
            {
                this.useGravity = component2.useGravity;
            }
            this.minimumDuration = this.baseMinimumDuration / this.attackSpeedStat;
            ProjectileImpactExplosion component3 = this.projectilePrefab.GetComponent <ProjectileImpactExplosion>();

            if (component3)
            {
                this.detonationRadius = component3.blastRadius;
                if (this.endpointVisualizerTransform)
                {
                    this.endpointVisualizerTransform.localScale = new Vector3(this.detonationRadius, this.detonationRadius, this.detonationRadius);
                }
            }
            this.UpdateVisualizers(this.currentTrajectoryInfo);
            SceneCamera.onSceneCameraPreRender += this.OnPreRenderSceneCam;
        }
示例#9
0
        private void CreateProjectiles()
        {
            GameObject secondaryProj = Resources.Load <GameObject>("Prefabs/Projectiles/CrocoSpit").InstantiateClone("sprayProj");

            States.Secondary.FireSpray.projectilePrefab = secondaryProj;

            ProjectileCatalog.getAdditionalEntries += (list) =>
            {
                list.Add(secondaryProj);
            };

            ProjectileSimple spraySimp = secondaryProj.GetComponent <ProjectileSimple>();

            spraySimp.lifetime = 0.3f;

            ProjectileController controller = secondaryProj.GetComponent <ProjectileController>();

            controller.procCoefficient = 0.5f * ((1f / numberOfPellets) + Mathf.Sqrt(1f / numberOfPellets));
        }
示例#10
0
    void Fragmentation()
    {
        int nombre = 360 / nbproj;

        for (float i = 0 + Random.Range(0, 0.2f); i < nbproj; i++)
        {
            // gob = (GameObject)(Instantiate(projectile,transform.position,new Quaternion()));
            gob = SimplePool.Spawn(projectile, transform.position, new Quaternion());
            ProjectileSimple proj = gob.GetComponent <ProjectileSimple>();
            proj.tag = "EnnemyBullet";
            proj.GetComponent <SpriteRenderer> ().color = Color.white;

            proj.setVitesse(0.02f);
            proj.setDirection(new Vector2(Mathf.Cos(Mathf.PI * (i * nombre) / 180), Mathf.Sin(Mathf.PI * (i * nombre) / 180)));
            proj.transform.localScale = this.gameObject.transform.localScale / 1.5f;
        }

        Destroy(this.gameObject);
    }
        private void Detonate()
        {
            ProjectileSimple ps = this.gameObject.GetComponent <ProjectileSimple>();

            if (!this.detonated)
            {
                this.detonated = true;
                if (ps)
                {
                    ps.stopwatch = 0f;
                }

                /*if (this.projectileDamage)
                 * {
                 *  this.projectileDamage.damage *= this.cachedThermiteCount;
                 * }*/

                if (projectileImpactExplosion)
                {
                    /*float radius = projectileImpactExplosion.blastRadius;
                     * for (int i = 0; i < this.cachedThermiteCount; i++)
                     * {
                     *  radius *= 0.95f;
                     *  projectileImpactExplosion.blastRadius += radius;
                     * }*/
                    //projectileImpactExplosion.blastRadius = projectileImpactExplosion.blastRadius * this.cachedThermiteCount;
                    projectileImpactExplosion.blastRadius *= 2f;
                    projectileImpactExplosion.stopwatch    = projectileImpactExplosion.lifetime;
                }
            }
            else
            {
                if (projectileImpactExplosion)
                {
                    projectileImpactExplosion.stopwatch = projectileImpactExplosion.lifetime;
                }
                if (ps)
                {
                    ps.stopwatch = ps.lifetime;
                }
            }
        }
示例#12
0
    // Update is called once per frame
    void Update()
    {
        transform.position += new Vector3(0, -0.01f * vitesse, 0);
        if (Time.fixedTime - temps >= ecart)
        {
            temps = Time.fixedTime;
            //gob = (GameObject)(Instantiate (obj, transform.position, new Quaternion ()));
            gob = SimplePool.Spawn(obj, transform.position, new Quaternion());
            gob.transform.localScale = new Vector3(0.6f, 0.6f, 1);

            ProjectileSimple proj = gob.GetComponent <ProjectileSimple> ();
            proj.setVitesse(vitesseProj);

            try{
                proj.setDirection(new Vector2(GameObject.Find("Joueur").transform.position.x - transform.position.x, GameObject.Find("Joueur").transform.position.y - transform.position.y));
            }

            catch { proj.setDirection(new Vector2(Random.Range(0, 5), Random.Range(0, 5))); }
        }
    }
示例#13
0
    // Update is called once per frame
    void Update()
    {
        transform.position += new Vector3(vitesse, 0, 0);
        if (Time.fixedTime - temps >= ecart)
        {
            temps = Time.fixedTime;

            //On tire dans les 4 directions
            //gob = (GameObject)(Instantiate(obj,transform.position,new Quaternion()));
            gob = SimplePool.Spawn(obj, transform.position, new Quaternion());
            gob.transform.localScale = new Vector3(0.6f, 0.6f, 1);
            ProjectileSimple proj = gob.GetComponent <ProjectileSimple>();
            proj.setVitesse(0.02f);
            proj.setDirection(new Vector2(0, -1));
            proj.setDegat(1);

            //gob = (GameObject)(Instantiate(obj,transform.position,new Quaternion()));
            gob = SimplePool.Spawn(obj, transform.position, new Quaternion());
            gob.transform.localScale = new Vector3(0.6f, 0.6f, 1);
            proj = gob.GetComponent <ProjectileSimple>();
            proj.setVitesse(0.02f);
            proj.setDirection(new Vector2(0, 1));
            proj.setDegat(1);

            //gob = (GameObject)(Instantiate(obj,transform.position,new Quaternion()));
            gob = SimplePool.Spawn(obj, transform.position, new Quaternion());
            gob.transform.localScale = new Vector3(0.6f, 0.6f, 1);
            proj = gob.GetComponent <ProjectileSimple>();
            proj.setVitesse(0.02f);
            proj.setDirection(new Vector2(1, 0));
            proj.setDegat(1);

            //gob = (GameObject)(Instantiate(obj,transform.position,new Quaternion()));
            gob = SimplePool.Spawn(obj, transform.position, new Quaternion());
            gob.transform.localScale = new Vector3(0.6f, 0.6f, 1);
            proj = gob.GetComponent <ProjectileSimple>();
            proj.setVitesse(0.02f);
            proj.setDirection(new Vector2(-1, 0));
            proj.setDegat(1);
        }
    }
示例#14
0
        private static GameObject CreateBlinkExplosion(string newExplosionName, float newExplosionDelay, float newBlastRadius, float newBlastDamage, DamageType damageType, bool iceBuff)
        {
            GameObject newBlinkPrefab = CloneProjectilePrefab("CommandoGrenadeProjectile", newExplosionName);

            UnityEngine.GameObject.Destroy(newBlinkPrefab.GetComponent <ProjectileImpactExplosion>());
            ProjectileBlinkExplosion newBlinkExplosion  = newBlinkPrefab.AddComponent <ProjectileBlinkExplosion>();
            ProjectileController     newBlinkController = newBlinkPrefab.GetComponent <ProjectileController>();
            Rigidbody        newBlinkBody       = newBlinkPrefab.GetComponent <Rigidbody>();
            ProjectileSimple newBlinkProjectile = newBlinkPrefab.GetComponent <ProjectileSimple>();

            newBlinkPrefab.GetComponent <ProjectileDamage>().damageType = damageType;
            newBlinkBody.useGravity = false;
            newBlinkProjectile.desiredForwardSpeed   = 0f;
            newBlinkExplosion.lifetime               = newExplosionDelay;
            newBlinkExplosion.timerAfterImpact       = false;
            newBlinkExplosion.blastRadius            = newBlastRadius;
            newBlinkExplosion.blastDamageCoefficient = newBlastDamage;
            newBlinkExplosion.useIceDebuff           = iceBuff;

            return(newBlinkPrefab);
        }
        public void Awake()
        {
            Chat.AddMessage("Loaded ImprovedCommando!");
            SurvivorAPI.SurvivorCatalogReady += delegate(object s, EventArgs e)
            {
                //get commando body
                GameObject gameObject = BodyCatalog.FindBodyPrefab("CommandoBody");
                //replace the utiltiy
                GenericSkill utility = gameObject.GetComponent <SkillLocator>().utility;
                utility.activationState = new EntityStates.SerializableEntityStateType(typeof(EntityStates.Commando.CommandoWeapon.Dodgestateimproved));
                object box2   = utility.activationState;
                var    field2 = typeof(EntityStates.SerializableEntityStateType)?.GetField("_typeName", BindingFlags.NonPublic | BindingFlags.Instance);
                field2?.SetValue(box2, typeof(EntityStates.Commando.CommandoWeapon.Dodgestateimproved)?.AssemblyQualifiedName);
                utility.activationState      = (EntityStates.SerializableEntityStateType)box2;
                utility.baseRechargeInterval = 5f;
                utility.baseMaxStock         = 2;
                //edit utility descriptions
                utility.skillNameToken        = "Reposition";
                utility.skillDescriptionToken = "<i>Rolls</i> a short distance, with a short speed boost after. Holds 2 charges.";
                //load the FMJ
                GameObject       fmjprefab           = Resources.Load <GameObject>("prefabs/projectiles/fmj");
                ProjectileSimple fmjprojectilesimple = fmjprefab.GetComponentInChildren <ProjectileSimple>();
                fmjprojectilesimple.velocity = 200f;

                /*
                 * //load secondary
                 * GenericSkill secondary = gameObject.GetComponent<SkillLocator>().secondary;
                 * secondary.baseMaxStock = 2;
                 * GenericSkill special = gameObject.GetComponent<SkillLocator>().special;
                 * special.skillDescriptionToken = "Fire rapidly, stunning enemies for 6x100% damage and reload all Phase Rounds.";
                 * On.EntityStates.Commando.CommandoWeapon.FireBarrage.OnExit += (orig, self) =>
                 * {
                 *  orig(self);
                 *  GenericSkill secondaryskill = self.outer.commonComponents.characterBody.GetComponent<SkillLocator>().secondary;
                 *  secondaryskill.Reset();
                 * };*/
            };
        }
        // Token: 0x06002DA8 RID: 11688 RVA: 0x000C1E10 File Offset: 0x000C0010
        private void FireGauntlet()
        {
            if (hasFiredGauntlet)
            {
                return;
            }
            base.characterBody.AddSpreadBloom(EntityStates.Mage.Weapon.FireFireBolt.bloom);
            hasFiredGauntlet = true;
            Ray aimRay = base.GetAimRay();

            if (childLocator)
            {
                muzzleTransform = childLocator.FindChild(muzzleString);
            }

            if (base.isAuthority)
            {
                if (!projectilePrefab)
                {
                    projectilePrefab = Resources.Load <GameObject>("prefabs/projectiles/magefireboltbasic").InstantiateClone("magefireboltcopy");
                }

                if (!filter)
                {
                    filter = projectilePrefab.AddComponent <TeamFilter>();
                }

                if (!targeter)
                {
                    targeter = projectilePrefab.AddComponent <ProjectileTargetComponent>();
                }

                if (!targetfinder)
                {
                    targetfinder                      = projectilePrefab.AddComponent <ProjectileSphereTargetFinder>();
                    targetfinder.lookRange            = 12;
                    targetfinder.allowTargetLoss      = true;
                    targetfinder.onlySearchIfNoTarget = true;
                    targetfinder.testLoS              = true;
                    targetfinder.targetSearchInterval = 0.15f;
                }

                if (!steertoward)
                {
                    steertoward = projectilePrefab.AddComponent <ProjectileSteerTowardTarget>();
                    steertoward.rotationSpeed = 360f;
                }

                if (!projectile)
                {
                    projectile                   = projectilePrefab.AddComponent <ProjectileSimple>();
                    projectile.velocity          = 50f;
                    projectile.updateAfterFiring = true;
                }

                for (int i = 0; i < 2; i++)
                {
                    ProjectileManager.instance.FireProjectile(projectilePrefab, aimRay.origin, Util.QuaternionSafeLookRotation(aimRay.direction + (new Vector3(Random.Range(-36f, 36f), Random.Range(-36f, 36f), Random.Range(-36f, 36f)) / 360f)), base.gameObject, 1f * damageStat, 0f, base.characterBody.RollCrit());
                }
            }
        }
        // Token: 0x06002DA8 RID: 11688 RVA: 0x000C1E10 File Offset: 0x000C0010
        private void FireGauntlet()
        {
            if (hasFiredGauntlet)
            {
                return;
            }
            base.characterBody.AddSpreadBloom(EntityStates.Mage.Weapon.FireFireBolt.bloom);
            hasFiredGauntlet = true;
            Ray aimRay = base.GetAimRay();

            if (childLocator)
            {
                muzzleTransform = childLocator.FindChild(muzzleString);
            }

            if (NetworkServer.active)
            {
                if (!projectilePrefab)
                {
                    projectilePrefab = Resources.Load <GameObject>("prefabs/projectiles/magefireboltbasic").InstantiateClone("magefireboltcopy");
                }

                if (!filter)
                {
                    filter = projectilePrefab.AddComponent <TeamFilter>();
                }

                if (!targeter)
                {
                    targeter = projectilePrefab.AddComponent <ProjectileTargetComponent>();
                }



                if (!steertoward)
                {
                    steertoward = projectilePrefab.AddComponent <ProjectileSteerTowardTarget>();
                    steertoward.rotationSpeed = 360f;
                }

                if (!targetfinder)
                {
                    targetfinder                      = projectilePrefab.AddComponent <ProjectileSphereTargetFinder>();
                    targetfinder.lookRange            = 16;
                    targetfinder.allowTargetLoss      = false;
                    targetfinder.onlySearchIfNoTarget = true;
                    targetfinder.testLoS              = true;
                    targetfinder.targetSearchInterval = 0.15f;
                }

                if (!projectile)
                {
                    projectile                   = projectilePrefab.AddComponent <ProjectileSimple>();
                    projectile.velocity          = 50f;
                    projectile.updateAfterFiring = true;
                }

                BullseyeSearch bullseyeSearch = new BullseyeSearch();
                bullseyeSearch.searchOrigin      = aimRay.origin;
                bullseyeSearch.searchDirection   = aimRay.direction;
                bullseyeSearch.maxDistanceFilter = 100f;
                bullseyeSearch.maxAngleFilter    = 60f;
                bullseyeSearch.teamMaskFilter    = TeamMask.allButNeutral;
                bullseyeSearch.teamMaskFilter.RemoveTeam(base.teamComponent.teamIndex);
                bullseyeSearch.sortMode = BullseyeSearch.SortMode.Angle;
                bullseyeSearch.RefreshCandidates();
                List <HurtBox> list    = bullseyeSearch.GetResults().ToList <HurtBox>();
                HurtBox        hurtBox = (list.Count > 0) ? list[0] : null;
                if (hurtBox)
                {
                    targeter.target = hurtBox.transform;
                }
                for (int i = 0; i < 2; i++)
                {
                    Quaternion direction = Util.QuaternionSafeLookRotation(aimRay.direction + (new Vector3(Random.Range(-36f, 36f), Random.Range(-36f, 36f), Random.Range(-36f, 36f)) / 360f));

                    ProjectileManager.instance.FireProjectile(projectilePrefab, aimRay.origin, direction, base.gameObject, 0.8f * damageStat, 0f, base.characterBody.RollCrit(), DamageColorIndex.Default, hurtBox ? hurtBox.gameObject : null);
                }
            }
        }
示例#18
0
        private void CreateLightningSword(Int32 meshInd)
        {
            GameObject ghost = this.CreateLightningSwordGhost(meshInd);
            GameObject proj  = Resources.Load <GameObject>("Prefabs/Projectiles/LunarNeedleProjectile").InstantiateClone("LightningSwordProjectile" + meshInd.ToString());

            ProjectileCatalog.getAdditionalEntries += (list) => list.Add(proj);

            AltArtiPassive.lightningProjectile[meshInd] = proj;

            ProjectileController projController = proj.GetComponent <ProjectileController>();

            projController.ghostPrefab     = ghost;
            projController.procCoefficient = 0.2f;

            ProjectileSimple projSimple = proj.GetComponent <ProjectileSimple>();

            projSimple.enabled = true;
            projSimple.enableVelocityOverLifetime = false;
            projSimple.velocity = 60f;


            ProjectileDirectionalTargetFinder projTargetFind = proj.GetComponent <ProjectileDirectionalTargetFinder>();

            projTargetFind.enabled = false;

            ProjectileSteerTowardTarget projSteering = proj.GetComponent <ProjectileSteerTowardTarget>();

            projSteering.enabled       = true;
            projSteering.rotationSpeed = 140f;

            ProjectileStickOnImpact projStick = proj.GetComponent <ProjectileStickOnImpact>();

            //projStick.ignoreCharacters = false;
            //projStick.ignoreWorld = false;
            projStick.alignNormals = false;

            ProjectileImpactExplosion projExpl = proj.GetComponent <ProjectileImpactExplosion>();

            projExpl.impactEffect                  = Resources.Load <GameObject>("Prefabs/Effects/LightningStakeNova");
            projExpl.explosionSoundString          = "Play_item_lunar_primaryReplace_impact";
            projExpl.lifetimeExpiredSoundString    = "";
            projExpl.offsetForLifetimeExpiredSound = 0f;
            projExpl.destroyOnEnemy                = false;
            projExpl.destroyOnWorld                = false;
            projExpl.timerAfterImpact              = true;
            projExpl.falloffModel                  = BlastAttack.FalloffModel.None;
            projExpl.lifetime                  = 10f;
            projExpl.lifetimeAfterImpact       = 1f;
            projExpl.lifetimeRandomOffset      = 0f;
            projExpl.blastRadius               = 1f;
            projExpl.blastDamageCoefficient    = 1f;
            projExpl.blastProcCoefficient      = 0.2f;
            projExpl.bonusBlastForce           = Vector3.zero;
            projExpl.fireChildren              = false;
            projExpl.childrenProjectilePrefab  = null;
            projExpl.childrenCount             = 0;
            projExpl.childrenDamageCoefficient = 0f;
            projExpl.minAngleOffset            = Vector3.zero;
            projExpl.maxAngleOffset            = Vector3.zero;
            projExpl.transformSpace            = ProjectileImpactExplosion.TransformSpace.World;
            projExpl.projectileHealthComponent = null;

            ProjectileSingleTargetImpact projStimp = proj.GetComponent <ProjectileSingleTargetImpact>();

            projStimp.destroyOnWorld      = false;
            projStimp.hitSoundString      = "Play_item_proc_dagger_impact";
            projStimp.enemyHitSoundString = "Play_item_proc_dagger_impact";


            proj.AddComponent <Components.SoundOnAwake>().sound = "Play_item_proc_dagger_spawn";

            //UnityEngine.Object.DestroyImmediate( proj.GetComponent<ProjectileSingleTargetImpact>() );
            UnityEngine.Object.Destroy(proj.GetComponent <AwakeEvent>());
            UnityEngine.Object.Destroy(proj.GetComponent <DelayedEvent>());
        }
示例#19
0
文件: Joueur.cs 项目: SeverinM/Space
    // Update is called once per frame
    void Update()
    {
        if (suivre && (Input.GetAxis("Mouse X") != 0) || (Input.GetAxis("Mouse Y") != 0))           //Le joueur ne suit la souris que si un mouvement est detecté
        {
            LerpPosition       = 0;
            Cursor.visible     = true;
            transform.position = new Vector3(transform.position.x, transform.position.y, 0);
        }

        if (Cursor.visible)
        {
            LerpPosition      += Time.fixedDeltaTime * 4;
            transform.position = Vector3.Lerp(transform.position, Camera.main.ScreenToWorldPoint(Input.mousePosition), LerpPosition);
            transform.position = new Vector3(transform.position.x, transform.position.y, 0);
        }

        if (Input.GetKey(KeyCode.LeftArrow))
        {
            transform.position += new Vector3(-Variables.sensiX, 0, 0);
            Cursor.visible      = false;
        }

        if (Input.GetKey(KeyCode.RightArrow))
        {
            transform.position += new Vector3(Variables.sensiX, 0, 0);
            Cursor.visible      = false;
        }

        if (Input.GetKey(KeyCode.UpArrow))
        {
            transform.position += new Vector3(0, Variables.sensiY, 0);
            Cursor.visible      = false;
        }

        if (Input.GetKey(KeyCode.DownArrow))
        {
            transform.position += new Vector3(0, -Variables.sensiY, 0);
            Cursor.visible      = false;
        }

        if ((Input.GetMouseButton(0) || Input.GetKey(KeyCode.Space) || Variables.autoFire) && Time.fixedTime - temps >= ecart)
        {
            GameObject.Find("Son").GetComponent <AudioSource> ().clip = sontir;
            GameObject.Find("Son").GetComponent <AudioSource> ().Play();

            temps = Time.fixedTime;

            //instance = (GameObject)(Instantiate (gob, transform.position , new Quaternion ()));
            instance     = SimplePool.Spawn(gob, transform.position, new Quaternion());
            instance.tag = "AllyBullet";
            instance.GetComponent <SpriteRenderer> ().color = Color.white;

            instance.transform.Rotate(Vector3.forward * -270);
            ProjectileSimple proj = instance.GetComponent <ProjectileSimple> ();
            proj.setVitesse(0.07f);
            proj.setDirection(new Vector2(0, 0.1f));
            proj.setPosition(transform.position);
            proj.setDegat(degat);
            if (boost2)
            {
                proj.setPerforant(true);
            }
            else
            {
                proj.setPerforant(false);
                proj.setDegat(degat);
            }

            if (boost)
            {
                //instance = (GameObject)(Instantiate (gob, transform.position , new Quaternion ()));
                instance = SimplePool.Spawn(gob, transform.position, new Quaternion());
                instance.transform.Rotate(Vector3.forward * -300);
                instance.tag = "AllyBullet";
                instance.GetComponent <SpriteRenderer> ().color = Color.white;

                proj = instance.GetComponent <ProjectileSimple> ();
                proj.setVitesse(0.07f);
                proj.setDirection(new Vector2(0.05f, 0.1f));
                proj.setPosition(transform.position);
                proj.setDegat(degat);
                if (boost2)
                {
                    proj.setPerforant(true);
                }
                else
                {
                    proj.setPerforant(false);
                    proj.setDegat(degat);
                }

                //instance = (GameObject)(Instantiate (gob, transform.position , new Quaternion ()));
                instance     = SimplePool.Spawn(gob, transform.position, new Quaternion());
                instance.tag = "AllyBullet";
                instance.GetComponent <SpriteRenderer> ().color = Color.white;

                instance.transform.Rotate(Vector3.forward * -240);
                proj = instance.GetComponent <ProjectileSimple> ();
                proj.setVitesse(0.07f);
                proj.setDirection(new Vector2(-0.05f, 0.1f));
                proj.setPosition(transform.position);
                proj.setDegat(degat);
                if (boost2)
                {
                    proj.setPerforant(true);
                }
                else
                {
                    proj.setPerforant(false);
                    proj.setDegat(degat);
                }
            }
        }

        if (Time.fixedTime > temps2 + retard && invincible)
        {
            ChangerEtat();
        }

        if (temps3 < Time.fixedTime)           //A chaque frame on verifie que le bonus est terminé
        {
            boost = false;
            ecart = 0.2f;
        }

        if (temps5 < Time.fixedTime && boost2)
        {
            degat  = 1;
            boost2 = false;
        }
    }
示例#20
0
        public override void OnEnter()
        {
            base.OnEnter();

            ProjectileTargetComponent projTarget = projPrefab.GetComponent <ProjectileTargetComponent>();

            if (!projTarget)
            {
                projTarget = projPrefab.AddComponent <ProjectileTargetComponent>();
            }
            ProjectileDirectionalTargetFinder projFinder = projPrefab.GetComponent <ProjectileDirectionalTargetFinder>();

            if (!projFinder)
            {
                projFinder = projPrefab.AddComponent <ProjectileDirectionalTargetFinder>();
            }
            projFinder.lookCone             = 6.5f;
            projFinder.lookRange            = 60.0f;
            projFinder.targetSearchInterval = 0.15f;
            projFinder.onlySearchIfNoTarget = false;
            projFinder.allowTargetLoss      = true;
            projFinder.testLoS   = true;
            projFinder.ignoreAir = false;
            ProjectileSteerTowardTarget projSteer = projPrefab.GetComponent <ProjectileSteerTowardTarget>();

            if (!projSteer)
            {
                projSteer = projPrefab.AddComponent <ProjectileSteerTowardTarget>();
            }
            projSteer.rotationSpeed = 45.0f;
            ProjectileSimple projSimp = projPrefab.GetComponent <ProjectileSimple>();

            if (!projSimp)
            {
                Debug.Log("Dafuq you done?");
            }
            projSimp.updateAfterFiring = true;

            duration     = baseDuration;
            arrowFireEnd = duration * spacingFrac;
            arrowTime    = (duration - arrowFireEnd) / baseArrowsToFire / attackSpeedStat;

            this.projPrefab.GetComponent <ProjectileController>().procCoefficient = 0.4f;

            Transform modelTrans = base.GetModelTransform();

            PlayCrossfade("Gesture, Override", "FireSeekingShot", "FireSeekingShot.playbackRate", arrowTime, arrowTime * 0.2f / attackSpeedStat);
            PlayCrossfade("Gesture, Additive", "FireSeekingShot", "FireSeekingShot.playbackRate", arrowTime, arrowTime * 0.2f / attackSpeedStat);

            if (modelTrans)
            {
                childLoc = modelTrans.GetComponent <ChildLocator>();
                anim     = modelTrans.GetComponent <Animator>();
            }
            if (characterBody)
            {
                characterBody.SetAimTimer(duration + 1.0f);
            }
            timer        = 0.0f;
            arrowTimer   = 0.0f;
            arrowCounter = 0;
            fireArrow();
        }
示例#21
0
        private static GameObject CreateNewWave(string waveName, DamageType damageType, string ghostPrefabName, Vector3 waveCoreSize, Vector3 waveOuterSize, Vector3 rotation, bool useIceDebuff)
        {
            //clone fire projectile, fix size (original size is 0.05, 0.05, 1)
            GameObject newWavePrefab = CloneProjectilePrefab("Fireball", waveName);

            newWavePrefab.transform.localScale    = new Vector3(1f, 1f, 1f);
            newWavePrefab.transform.localRotation = Quaternion.Euler(StatValues.waveRotation1);

            //create 'container' to enable local rotation of the wave
            GameObject transformBox = new GameObject("TransformBox");

            transformBox.transform.parent = newWavePrefab.transform;
            transformBox.layer            = 14;

            //set ghost, damage and owner
            ProjectileController newWaveController = newWavePrefab.GetComponent <ProjectileController>();

            newWaveController.ghostPrefab = CreateGhostPrefab(ghostPrefabName);
            newWaveController.GetComponent <ProjectileDamage>().damageType = damageType;
            newWaveController.owner           = Survivors.Manipulator.characterPrefab;
            newWaveController.procCoefficient = StatValues.waveProcCoefficient;

            TeamFilter newWaveTeam = newWavePrefab.GetComponent <TeamFilter>();

            newWaveTeam.defaultTeam = TeamIndex.Player;

            //replace single target impact with custom impact script
            UnityEngine.Object.Destroy(newWavePrefab.GetComponent <ProjectileSingleTargetImpact>());
            ManipulatorProjectileWaveImpact newWaveImpact = newWavePrefab.AddComponent <ManipulatorProjectileWaveImpact>();

            newWaveImpact.destroyOnWorld      = true;
            newWaveImpact.destroyWhenNotAlive = true;
            newWaveImpact.useIceDebuff        = useIceDebuff;

            ProjectileSimple newWaveSimple = newWavePrefab.GetComponent <ProjectileSimple>();

            newWaveSimple.lifetime = StatValues.waveLifetime;
            //newWaveSimple.velocity = waveVelocity;
            newWaveSimple.desiredForwardSpeed = StatValues.waveSpeed;

            //replace sphere with core box (smaller middle, collides with both terrain and enemies)
            //UnityEngine.Object.Destroy(newWavePrefab.GetComponent<SphereCollider>());
            BoxCollider newWaveBox = newWavePrefab.AddComponent <BoxCollider>();

            newWaveBox.transform.parent = transformBox.transform;
            newWaveBox.size             = waveCoreSize;

            //add outer box collider (collides with enemies only)
            GameObject childObject = new GameObject("OuterBox");

            childObject.layer            = 14;
            childObject.transform.parent = transformBox.transform;
            ManipulatorProjectileChildCollisionDetection childScript = childObject.AddComponent <ManipulatorProjectileChildCollisionDetection>();

            childScript.AddBoxCollider(waveOuterSize, childObject);

            //set local rotation
            Quaternion quaternion = Quaternion.Euler(rotation);

            transformBox.transform.localRotation = quaternion;

            //return result
            return(newWavePrefab);
        }
示例#22
0
        private static GameObject CreateKnifeProjectile()
        {
            GameObject obj = PrefabsCore.CreatePrefab("KnifeProjectile", true);

            obj.layer = LayerIndex.projectile.intVal;
            _         = obj.AddOrGetComponent <NetworkIdentity>();
            _         = obj.AddOrGetComponent <TeamFilter>();



            ProjectileController projControl = obj.AddOrGetComponent <ProjectileController>();

            projControl.allowPrediction      = false;
            projControl.catalogIndex         = -1;
            projControl.ghostPrefab          = null; // FUTURE: Knife projectile ghost
            projControl.ghostTransformAnchor = null;
            projControl.owner           = null;
            projControl.procCoefficient = 1f;
            projControl.startSound      = null; // FUTURE: Knife start sound


            Rigidbody rb = obj.AddOrGetComponent <Rigidbody>();

            rb.mass                   = 1f;
            rb.drag                   = 0.6f;
            rb.angularDrag            = 0.05f;
            rb.useGravity             = true;
            rb.isKinematic            = false;
            rb.interpolation          = RigidbodyInterpolation.Interpolate;
            rb.collisionDetectionMode = CollisionDetectionMode.Continuous;


            ProjectileNetworkTransform projNetTrans = obj.AddOrGetComponent <ProjectileNetworkTransform>();

            projNetTrans.positionTransmitInterval = 0.033333334f;
            projNetTrans.interpolationFactor      = 1f;
            projNetTrans.allowClientsideCollision = false;


            ProjectileStickOnImpact projStick = obj.AddOrGetComponent <ProjectileStickOnImpact>();

            projStick.alignNormals     = false;
            projStick.ignoreCharacters = false;
            projStick.ignoreWorld      = false;
            projStick.stickEvent       = new UnityEngine.Events.UnityEvent();


            ProjectileSingleTargetImpact projImpact = obj.AddOrGetComponent <ProjectileSingleTargetImpact>();

            projImpact.destroyOnWorld      = false;
            projImpact.destroyWhenNotAlive = false;
            projImpact.enemyHitSoundString = null; // FUTURE: Knife hit sound
            projImpact.hitSoundString      = null; // FUTURE: Knife world hit sound
            projImpact.impactEffect        = null; // FUTURE: Knife impact effect


            ProjectileSimple projSimple = obj.AddOrGetComponent <ProjectileSimple>();

            projSimple.enableVelocityOverLifetime = false;
            projSimple.lifetime             = 18f;
            projSimple.updateAfterFiring    = false;
            projSimple.velocity             = 175f;
            projSimple.velocityOverLifetime = null;


            SphereCollider col = obj.AddOrGetComponent <SphereCollider>();

            col.center        = Vector3.zero;
            col.contactOffset = 0f;
            col.isTrigger     = false;
            col.material      = null;
            col.radius        = 0.3f;


            ProjectileDamage damage = obj.AddOrGetComponent <ProjectileDamage>();

            damage.crit             = false;
            damage.damage           = 0f;
            damage.damageColorIndex = DamageColorIndex.Default;
            damage.force            = 0f;

            var debuff = obj.AddOrGetComponent <ProjectileInflictTimedBuff>();

            debuff.duration = CatalogModule.resetDuration * 2f;

            _ = obj.AddOrGetComponent <Deployable>();

            _ = obj.AddOrGetComponent <KnifeDeployableSync>();


            SphereCollider ownerDetection = obj.AddComponent <SphereCollider>();

            ownerDetection.isTrigger = true;
            ownerDetection.radius    = 10f;



            foreach (IRuntimePrefabComponent runtimePrefabComp in obj.GetComponents <IRuntimePrefabComponent>())
            {
                runtimePrefabComp.InitializePrefab();
            }
            return(obj);
        }
示例#23
0
        public override void OnLoad()
        {
            base.OnLoad();
            itemDef.name = "MysticsItems_DroneWires";
            SetItemTierWhenAvailable(ItemTier.Tier2);
            itemDef.tags = new ItemTag[]
            {
                ItemTag.Damage,
                ItemTag.CannotCopy
            };

            itemDef.pickupModelPrefab = PrepareModel(Main.AssetBundle.LoadAsset <GameObject>("Assets/Items/Wires/Model.prefab"));
            itemDef.pickupIconSprite  = Main.AssetBundle.LoadAsset <Sprite>("Assets/Items/Wires/Icon.png");
            itemDisplayPrefab         = PrepareItemDisplayModel(Main.AssetBundle.LoadAsset <GameObject>("Assets/Items/Wires/DisplayModel.prefab"));
            onSetupIDRS += () =>
            {
                AddDisplayRule("CommandoBody", "Chest", new Vector3(-0.0882F, 0.29957F, 0.10621F), new Vector3(24.65009F, 16.77799F, 135.6651F), new Vector3(0.07763F, 0.07608F, 0.09464F));
                AddDisplayRule("HuntressBody", "Chest", new Vector3(0.11016F, 0.19166F, 0.06043F), new Vector3(3.66903F, 357.0302F, 46.24356F), new Vector3(0.06181F, 0.06181F, 0.07285F));
                AddDisplayRule("Bandit2Body", "Chest", new Vector3(0.02937F, 0.2926F, -0.00376F), new Vector3(0F, 0F, 49.27628F), new Vector3(0.06534F, 0.07626F, 0.07902F));
                AddDisplayRule("ToolbotBody", "Chest", new Vector3(-0.44676F, 0.83563F, -0.35079F), new Vector3(0F, 255.7838F, 12.94845F), new Vector3(0.29993F, 0.29993F, 0.29993F));
                AddDisplayRule("EngiBody", "Chest", new Vector3(0.12126F, 0.34647F, 0.02248F), new Vector3(9.43959F, 353.3998F, 54.79713F), new Vector3(0.08793F, 0.10983F, 0.12737F));
                //AddDisplayRule("EngiTurretBody", "Head", new Vector3(0.035F, 0.89075F, -1.47928F), new Vector3(0F, 90F, 303.695F), new Vector3(0.07847F, 0.07847F, 0.07847F));
                //AddDisplayRule("EngiWalkerTurretBody", "Head", new Vector3(0.03562F, 1.40676F, -1.39837F), new Vector3(0F, 90F, 303.1705F), new Vector3(0.08093F, 0.09844F, 0.07912F));
                AddDisplayRule("MageBody", "Chest", new Vector3(0.04831F, 0.18725F, -0.00428F), new Vector3(0F, 0F, 60.53666F), new Vector3(0.07311F, 0.07311F, 0.06881F));
                AddDisplayRule("MercBody", "Chest", new Vector3(-0.05362F, 0.21034F, -0.00002F), new Vector3(0F, 0F, 117.922F), new Vector3(0.0773F, 0.0773F, 0.10484F));
                AddDisplayRule("TreebotBody", "FlowerBase", new Vector3(0.17759F, 1.01678F, -0.22692F), new Vector3(343.6147F, 91.47517F, 0F), new Vector3(0.12892F, 0.22446F, 0.19628F));
                AddDisplayRule("LoaderBody", "Chest", new Vector3(0.2286F, 0.17001F, -0.14346F), new Vector3(0F, 0F, 101.2838F), new Vector3(0.07407F, 0.07407F, 0.07407F));
                AddDisplayRule("CrocoBody", "Neck", new Vector3(-0.44025F, 2.13047F, -1.0941F), new Vector3(11.69976F, 267.5576F, 69.92433F), new Vector3(0.78301F, 0.82242F, 0.76275F));
                AddDisplayRule("CaptainBody", "Chest", new Vector3(0.11944F, 0.24645F, 0.02558F), new Vector3(0F, 0F, 56.89931F), new Vector3(0.11927F, 0.11927F, 0.09405F));
                AddDisplayRule("BrotherBody", "chest", BrotherInfection.green, new Vector3(-0.02217F, 0.1268F, 0.00908F), new Vector3(38.70592F, 101.3755F, 273.0802F), new Vector3(0.29321F, 0.2044F, 0.2044F));
                AddDisplayRule("ScavBody", "Chest", new Vector3(-0.60161F, 5.1633F, -0.70479F), new Vector3(8.51487F, 288.6277F, 143.041F), new Vector3(1.72129F, 2.93378F, 2.41413F));
                if (SoftDependencies.SoftDependenciesCore.itemDisplaysSniper)
                {
                    AddDisplayRule("SniperClassicBody", "Chest", new Vector3(0.04666F, 0.03688F, -0.20783F), new Vector3(20.30298F, 90F, 90F), new Vector3(0.03316F, 0.03316F, 0.03316F));
                }
                AddDisplayRule("RailgunnerBody", "Backpack", new Vector3(0.00133F, -0.09389F, 0.00001F), new Vector3(359.581F, 90F, 90F), new Vector3(0.0655F, 0.0655F, 0.0655F));
                AddDisplayRule("VoidSurvivorBody", "Stomach", new Vector3(0.01209F, -0.01038F, -0.0797F), new Vector3(0F, 90F, 0F), new Vector3(0.03917F, 0.07464F, 0.0609F));
            };

            On.RoR2.CharacterBody.OnInventoryChanged += CharacterBody_OnInventoryChanged;

            MysticsRisky2Utils.Utils.CopyChildren(Main.AssetBundle.LoadAsset <GameObject>("Assets/Items/Wires/SparkProjectile.prefab"), sparkProjectilePrefab);

            float sparkDuration = 4f;

            ProjectileController projectileController = sparkProjectilePrefab.AddComponent <ProjectileController>();

            projectileController.ghostPrefab = Main.AssetBundle.LoadAsset <GameObject>("Assets/Items/Wires/SparkProjectileGhost.prefab");
            projectileController.ghostPrefab.AddComponent <ProjectileGhostController>();
            ObjectScaleCurve objectScaleCurve = projectileController.ghostPrefab.AddComponent <ObjectScaleCurve>();

            objectScaleCurve.overallCurve        = AnimationCurve.Linear(0f, 1f, 1f, 0f);
            objectScaleCurve.useOverallCurveOnly = true;
            objectScaleCurve.timeMax             = sparkDuration;
            projectileController.allowPrediction = true;
            sparkProjectilePrefab.AddComponent <ProjectileNetworkTransform>();
            sparkProjectilePrefab.AddComponent <TeamFilter>();
            ProjectileDamage projectileDamage = sparkProjectilePrefab.AddComponent <ProjectileDamage>();
            HitBoxGroup      hitBoxGroup      = sparkProjectilePrefab.AddComponent <HitBoxGroup>();

            hitBoxGroup.groupName = "MysticsItems_DroneWiresSpark";
            hitBoxGroup.hitBoxes  = new HitBox[]
            {
                sparkProjectilePrefab.transform.Find("HitBox").gameObject.AddComponent <HitBox>()
            };
            ProjectileSimple projectileSimple = sparkProjectilePrefab.AddComponent <ProjectileSimple>();

            projectileSimple.desiredForwardSpeed = 14f;
            projectileSimple.lifetime            = sparkDuration;
            ProjectileOverlapAttack projectileOverlapAttack = sparkProjectilePrefab.AddComponent <ProjectileOverlapAttack>();

            projectileOverlapAttack.damageCoefficient      = 1f;
            projectileOverlapAttack.overlapProcCoefficient = procCoefficient;
            projectileOverlapAttack.resetInterval          = 0.5f;
            sparkProjectilePrefab.layer = LayerIndex.projectile.intVal;

            MysticsItemsContent.Resources.projectilePrefabs.Add(sparkProjectilePrefab);

            {
                hitVFX = Main.AssetBundle.LoadAsset <GameObject>("Assets/Items/Wires/SparkHitVFX.prefab");
                var effectComponent = hitVFX.AddComponent <EffectComponent>();
                effectComponent.soundName  = "MysticsItems_Play_item_proc_droneWires";
                effectComponent.applyScale = true;
                var vfxAttributes = hitVFX.AddComponent <VFXAttributes>();
                vfxAttributes.vfxIntensity = VFXAttributes.VFXIntensity.Low;
                vfxAttributes.vfxPriority  = VFXAttributes.VFXPriority.Always;
                hitVFX.AddComponent <DestroyOnTimer>().duration = 1f;

                MysticsItemsContent.Resources.effectPrefabs.Add(hitVFX);

                projectileOverlapAttack.impactEffect = hitVFX;
            }
        }