// Token: 0x06001E70 RID: 7792 RVA: 0x0008FAA4 File Offset: 0x0008DCA4
        private void HandlePlayerFireProjectileInternal(NetworkMessage netMsg)
        {
            netMsg.ReadMessage <ProjectileManager.PlayerFireProjectileMessage>(this.fireMsg);
            GameObject gameObject = this.FindProjectilePrefabFromIndex((int)this.fireMsg.prefabIndex);

            if (gameObject == null)
            {
                this.ReleasePredictionId(netMsg.conn, this.fireMsg.predictionId);
                return;
            }
            FireProjectileInfo fireProjectileInfo = default(FireProjectileInfo);

            fireProjectileInfo.projectilePrefab = gameObject;
            fireProjectileInfo.position         = this.fireMsg.position;
            fireProjectileInfo.rotation         = this.fireMsg.rotation;
            fireProjectileInfo.owner            = this.fireMsg.owner;
            fireProjectileInfo.damage           = this.fireMsg.damage;
            fireProjectileInfo.force            = this.fireMsg.force;
            fireProjectileInfo.crit             = this.fireMsg.crit;
            GameObject gameObject2 = this.fireMsg.target.ResolveGameObject();

            fireProjectileInfo.target           = ((gameObject2 != null) ? gameObject2.gameObject : null);
            fireProjectileInfo.damageColorIndex = this.fireMsg.damageColorIndex;
            fireProjectileInfo.speedOverride    = this.fireMsg.speedOverride;
            fireProjectileInfo.fuseOverride     = this.fireMsg.fuseOverride;
            this.FireProjectileServer(fireProjectileInfo, netMsg.conn, this.fireMsg.predictionId, (double)Run.instance.time - this.fireMsg.sendTime);
        }
 // Token: 0x06001E69 RID: 7785 RVA: 0x0008F6C9 File Offset: 0x0008D8C9
 public void FireProjectile(FireProjectileInfo fireProjectileInfo)
 {
     if (NetworkServer.active)
     {
         this.FireProjectileServer(fireProjectileInfo, null, 0, 0.0);
         return;
     }
     this.FireProjectileClient(fireProjectileInfo, NetworkManager.singleton.client);
 }
        // Token: 0x06001E6C RID: 7788 RVA: 0x0008F9C8 File Offset: 0x0008DBC8
        private void FireProjectileServer(FireProjectileInfo fireProjectileInfo, NetworkConnection clientAuthorityOwner = null, ushort predictionId = 0, double fastForwardTime = 0.0)
        {
            GameObject           gameObject = UnityEngine.Object.Instantiate <GameObject>(fireProjectileInfo.projectilePrefab, fireProjectileInfo.position, fireProjectileInfo.rotation);
            ProjectileController component  = gameObject.GetComponent <ProjectileController>();

            component.NetworkpredictionId = predictionId;
            ProjectileManager.InitializeProjectile(component, fireProjectileInfo);
            if (clientAuthorityOwner != null)
            {
                NetworkServer.SpawnWithClientAuthority(gameObject, clientAuthorityOwner);
                return;
            }
            NetworkServer.Spawn(gameObject);
        }
Beispiel #4
0
        // Token: 0x06001E27 RID: 7719 RVA: 0x00081D80 File Offset: 0x0007FF80
        public override void OnStartServer()
        {
            base.OnStartServer();
            if (this.projectileTargetComponent.target)
            {
                this.SetLinkedObject(this.projectileTargetComponent.target.gameObject);
                return;
            }
            FireProjectileInfo fireProjectileInfo = default(FireProjectileInfo);

            fireProjectileInfo.position         = base.transform.position;
            fireProjectileInfo.rotation         = base.transform.rotation;
            fireProjectileInfo.target           = base.gameObject;
            fireProjectileInfo.owner            = this.projectileController.owner;
            fireProjectileInfo.speedOverride    = 0f;
            fireProjectileInfo.projectilePrefab = Resources.Load <GameObject>("Prefabs/Projectiles/GatewayProjectile");
            ProjectileManager.instance.FireProjectile(fireProjectileInfo);
        }
        public void FireProjectile(GameObject prefab, Vector3 position, Quaternion rotation, GameObject owner, float damage, float force, bool crit, DamageColorIndex damageColorIndex = DamageColorIndex.Default, GameObject target = null, float speedOverride = -1f)
        {
            FireProjectileInfo fireProjectileInfo = new FireProjectileInfo
            {
                projectilePrefab = prefab,
                position         = position,
                rotation         = rotation,
                owner            = owner,
                damage           = damage,
                force            = force,
                crit             = crit,
                damageColorIndex = damageColorIndex,
                target           = target,
                speedOverride    = speedOverride,
                fuseOverride     = -1f
            };

            this.FireProjectile(fireProjectileInfo);
        }
        // Token: 0x06001E6A RID: 7786 RVA: 0x0008F6F8 File Offset: 0x0008D8F8
        private void FireProjectileClient(FireProjectileInfo fireProjectileInfo, NetworkClient client)
        {
            int num = this.FindProjectilePrefabIndex(fireProjectileInfo.projectilePrefab);

            if (num == -1)
            {
                Debug.LogErrorFormat(fireProjectileInfo.projectilePrefab, "Prefab {0} is not a registered projectile prefab.", new object[]
                {
                    fireProjectileInfo.projectilePrefab
                });
                return;
            }
            bool   allowPrediction = ProjectileManager.projectilePrefabProjectileControllers[num].allowPrediction;
            ushort predictionId    = 0;

            if (allowPrediction)
            {
                ProjectileController component = UnityEngine.Object.Instantiate <GameObject>(fireProjectileInfo.projectilePrefab, fireProjectileInfo.position, fireProjectileInfo.rotation).GetComponent <ProjectileController>();
                ProjectileManager.InitializeProjectile(component, fireProjectileInfo);
                this.predictionManager.RegisterPrediction(component);
                predictionId = component.predictionId;
            }
            this.fireMsg.sendTime         = (double)Run.instance.time;
            this.fireMsg.prefabIndex      = (byte)num;
            this.fireMsg.position         = fireProjectileInfo.position;
            this.fireMsg.rotation         = fireProjectileInfo.rotation;
            this.fireMsg.owner            = fireProjectileInfo.owner;
            this.fireMsg.predictionId     = predictionId;
            this.fireMsg.damage           = fireProjectileInfo.damage;
            this.fireMsg.force            = fireProjectileInfo.force;
            this.fireMsg.crit             = fireProjectileInfo.crit;
            this.fireMsg.damageColorIndex = fireProjectileInfo.damageColorIndex;
            this.fireMsg.speedOverride    = fireProjectileInfo.speedOverride;
            this.fireMsg.fuseOverride     = fireProjectileInfo.fuseOverride;
            this.fireMsg.target           = HurtBoxReference.FromRootObject(fireProjectileInfo.target);
            NetworkWriter networkWriter = new NetworkWriter();

            networkWriter.StartMessage(49);
            networkWriter.Write(this.fireMsg);
            networkWriter.FinishMessage();
            client.SendWriter(networkWriter, 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 = ShockRoll(fireProjectileInfo.owner, component.damageType, value1);
            }
            orig(self, fireProjectileInfo);
        }
Beispiel #8
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);
        }
        // Token: 0x06001E6B RID: 7787 RVA: 0x0008F888 File Offset: 0x0008DA88
        private static void InitializeProjectile(ProjectileController projectileController, FireProjectileInfo fireProjectileInfo)
        {
            GameObject                 gameObject = projectileController.gameObject;
            ProjectileDamage           component  = gameObject.GetComponent <ProjectileDamage>();
            TeamFilter                 component2 = gameObject.GetComponent <TeamFilter>();
            ProjectileNetworkTransform component3 = gameObject.GetComponent <ProjectileNetworkTransform>();
            MissileController          component4 = gameObject.GetComponent <MissileController>();
            ProjectileSimple           component5 = gameObject.GetComponent <ProjectileSimple>();

            projectileController.Networkowner  = fireProjectileInfo.owner;
            projectileController.procChainMask = fireProjectileInfo.procChainMask;
            if (component2)
            {
                component2.teamIndex = TeamComponent.GetObjectTeam(fireProjectileInfo.owner);
            }
            if (component3)
            {
                component3.SetValuesFromTransform();
            }
            if (component4)
            {
                component4.target = (fireProjectileInfo.target ? fireProjectileInfo.target.transform : null);
            }
            if (fireProjectileInfo.useSpeedOverride && component5)
            {
                component5.velocity = fireProjectileInfo.speedOverride;
            }
            if (fireProjectileInfo.useFuseOverride)
            {
                ProjectileImpactExplosion component6 = gameObject.GetComponent <ProjectileImpactExplosion>();
                if (component6)
                {
                    component6.lifetime = fireProjectileInfo.fuseOverride;
                }
                ProjectileFuse component7 = gameObject.GetComponent <ProjectileFuse>();
                if (component7)
                {
                    component7.fuse = fireProjectileInfo.fuseOverride;
                }
            }
            if (component)
            {
                component.damage           = fireProjectileInfo.damage;
                component.force            = fireProjectileInfo.force;
                component.crit             = fireProjectileInfo.crit;
                component.damageColorIndex = fireProjectileInfo.damageColorIndex;
            }
        }