Esempio n. 1
0
            public void OnReceived()
            {
                if (NetworkServer.active)
                {
                    return;
                }
                GameObject target           = null;
                var        playerGameObject = RoR2.Util.FindNetworkObject(PlayerBody);

                if (playerGameObject)
                {
                    var playerBody = playerGameObject.GetComponent <RoR2.CharacterBody>();
                    if (playerBody)
                    {
                        var eqp = playerBody.equipmentSlot.FindActiveEquipmentDisplay();
                        target = eqp ? eqp.gameObject : playerGameObject;
                    }
                }
                else
                {
                    Debug.LogError("We don't have a jar or a playerbody. Can't do an orb!");
                    return;
                }

                if (target)
                {
                    var orb = new JarOfReshapingOrb();
                    orb.Target = target;
                    orb.origin = StartingPosition;
                    orb.Index  = -1;
                    OrbManager.instance.AddOrb(orb);
                }
            }
Esempio n. 2
0
            public void FixedUpdate()
            {
                var input = body.inputBank;

                if (SuckTime > 0)
                {
                    if (!IsSuckingProjectiles)
                    {
                        RoR2.EffectData sphere = new RoR2.EffectData
                        {
                            origin     = TargetTransform ? TargetTransform.position : body.transform.position,
                            rotation   = TargetTransform ? TargetTransform.rotation : body.transform.rotation,
                            rootObject = TargetTransform ? TargetTransform.gameObject : body.gameObject
                        };
                        RoR2.EffectManager.SpawnEffect(JarChargeSphere, sphere, false);

                        var bodyIdentity = body.gameObject.GetComponent <NetworkIdentity>();
                        if (bodyIdentity && NetworkServer.active)
                        {
                            new SyncJarSucking(SyncJarSucking.MessageType.Charging, true, projectileAbsorptionTime, bodyIdentity.netId).Send(NetworkDestination.Clients);
                        }
                        IsSuckingProjectiles = true;
                    }
                    SuckTime -= Time.fixedDeltaTime;
                    List <ProjectileController> bullets = new List <ProjectileController>();
                    new RoR2.SphereSearch
                    {
                        radius = baseRadiusGranted,
                        mask   = RoR2.LayerIndex.projectile.mask,
                        origin = body.corePosition
                    }.RefreshCandidates().FilterCandidatesByProjectileControllers().GetProjectileControllers(bullets);
                    if (bullets.Count > 0)
                    {
                        foreach (ProjectileController controller in bullets)
                        {
                            var controllerOwner = controller.owner;
                            if (controllerOwner)
                            {
                                var ownerBody = controllerOwner.GetComponent <RoR2.CharacterBody>();
                                if (ownerBody)
                                {
                                    if (ownerBody.teamComponent.teamIndex == body.teamComponent.teamIndex)
                                    {
                                        if (FriendlyFireManager.friendlyFireMode != FriendlyFireManager.FriendlyFireMode.Off && iWantToLoseFriendsInChaosMode)
                                        {
                                            if (ownerBody == body)
                                            {
                                                continue;
                                            }
                                        }
                                        else
                                        {
                                            continue;
                                        }
                                    }
                                    var projectileDamage = controller.gameObject.GetComponent <ProjectileDamage>();
                                    if (projectileDamage)
                                    {
                                        jarBullets.Add(new JarBullet(projectileDamage.damage, projectileDamage.damageColorIndex, projectileDamage.damageType));

                                        var orb = new JarOfReshapingOrb();
                                        orb.Target = TargetTransform ? TargetTransform.gameObject : body.gameObject; //Where it is going to
                                        orb.origin = controller.transform.position;                                  //Where it is coming from
                                        orb.Index  = -1;
                                        OrbManager.instance.AddOrb(orb);                                             // Fire


                                        var bodyIdentity = body.gameObject.GetComponent <NetworkIdentity>();

                                        if (bodyIdentity && NetworkServer.active)
                                        {
                                            new SyncJarOrb(SyncJarOrb.MessageType.Fired, bodyIdentity.netId, controller.transform.position).Send(NetworkDestination.Clients);
                                        }
                                        RoR2.Util.PlayScaledSound(EntityStates.Engi.EngiWeapon.ChargeGrenades.chargeStockSoundString, body.gameObject, jarBullets.Count);
                                        EntityState.Destroy(controller.gameObject);
                                    }
                                }
                            }
                        }
                    }
                }
                else
                {
                    IsSuckingProjectiles = false;
                }
                if (ChargeTime > 0)
                {
                    if (!IsCharging && NetworkServer.active)
                    {
                        var bodyIdentity = body.gameObject.GetComponent <NetworkIdentity>();
                        if (bodyIdentity)
                        {
                            new SyncJarCharging(jarBullets.Count, ChargeTime, RefireTime, bodyIdentity.netId).Send(NetworkDestination.Clients);
                        }
                        IsCharging = true;
                    }
                    ChargeTime -= Time.fixedDeltaTime;
                    if (ChargeTime <= 0)
                    {
                        if (NetworkServer.active)
                        {
                            var bullet = jarBullets.Last();
                            FireProjectileInfo projectileInfo = new FireProjectileInfo();
                            projectileInfo.projectilePrefab   = JarProjectile;
                            projectileInfo.damage             = 20 + bullet.Damage * 2;
                            projectileInfo.damageColorIndex   = bullet.DamageColorIndex;
                            projectileInfo.damageTypeOverride = bullet.DamageType;
                            projectileInfo.owner         = body.gameObject;
                            projectileInfo.procChainMask = default(RoR2.ProcChainMask);
                            projectileInfo.position      = TargetTransform ? TargetTransform.position : body.corePosition;
                            projectileInfo.rotation      = RoR2.Util.QuaternionSafeLookRotation(input ? input.aimDirection : body.transform.forward);
                            projectileInfo.speedOverride = 120;
                            ProjectileManager.instance.FireProjectile(projectileInfo);
                            jarBullets.RemoveAt(jarBullets.Count - 1);
                        }
                        RoR2.Util.PlaySound(EntityStates.ClayBoss.FireTarball.attackSoundString, body.gameObject);
                        ClientBullets--;
                        if (jarBullets.Count > 0 || ClientBullets > 0)
                        {
                            ChargeTime += RefireTime;
                        }
                    }
                }
                else
                {
                    IsCharging = false;
                }
            }