Example #1
0
 private void onReloadStart(ModularFirearms.IModularFirearm weapon)
 {
     if (base.hasAuthority && isServerAuthoritative && !base.isServer)
     {
         CmdReload(0);
     }
 }
Example #2
0
        private void OnModeChange(ModularFirearms.IModularFirearm firearm, string name)
        {
            // Note: Look as adding Current inventory slot or ID to check if its the same weapon on both Client and Server??

            if (base.hasAuthority && !isServerAuthoritative)
            {
                CmdModeChange(name);
            }
        }
Example #3
0
 private void AmmoSync(ModularFirearms.IModularFirearm weapon, int amount)
 {
     if (base.isServer)
     {
         TargetAmmoSync(amount);
     }
     else
     {
         CmdAmmoSync(amount);
     }
 }
Example #4
0
        private void onMagChange(ModularFirearms.IModularFirearm weapon, int amount)
        {
            if (base.isServer && isServerAuthoritative)
            {
                TargetReload(amount);
            }

            if (base.isClientOnly && !isServerAuthoritative)
            {
                CmdReload(amount);
            }
        }
Example #5
0
        // Cloned from ModularFirearm.cs line:480
        private void Shoot(float timeDelay, Vector3 position, Vector3 forward, ModularFirearms.IModularFirearm fireWeapon)
        {
            Debug.Log("Shoot - " + timeDelay + " - " + NetworkTime.rtt);
            // Shoot
            if (fireWeapon.shooter != null && fireWeapon.shooter is ModularFirearms.NetShooterBehaviour netShooter)
            {
                netShooter.NetShoot(fireWeapon.ammo.effect, timeDelay, position, forward);
            }

            // Play animation *Currently not needed for Net as its Trigger only?*
            //if (m_FireAnimTriggerHash != -1 && animator != null && animator.isActiveAndEnabled)
            //	animator.SetTrigger (m_FireAnimTriggerHash);

            // Handle recoil
            if (fireWeapon.recoilHandler != null)
            {
                fireWeapon.recoilHandler.Recoil();
            }

            // Show the muzzle effect & play firing sound
            if (fireWeapon.muzzleEffect != null)
            {
                fireWeapon.muzzleEffect.Fire();
            }

            // Eject shell
            if (fireWeapon.ejector != null && fireWeapon.ejector.ejectOnFire)
            {
                fireWeapon.ejector.Eject();
            }

            // Decrement ammo
            if (base.isServer)
            {
                fireWeapon.reloader.DecrementMag(1);
            }
        }
Example #6
0
        protected virtual void OnFirearmChange(ModularFirearms.IModularFirearm weapon, bool set = false)
        {
            // Review and Fix
            if (!set) // Clearing the Watchers
            {
                weapon.onModeChange -= OnModeChange;
                if (weapon.shooter is ModularFirearms.NetShooterBehaviour shooter)
                {
                    shooter.onNetShoot -= UseMainAttack;
                }

                if (weapon.ammo != null)
                {
                    if (isServerAuthoritative && base.isServer && !base.hasAuthority)
                    {
                        weapon.ammo.onCurrentAmmoChange -= AmmoSync;
                    }

                    if (base.hasAuthority && !base.isServer)
                    {
                        weapon.ammo.onCurrentAmmoChange -= AmmoSync;
                    }
                }
                // Look Over Reload again
                if (weapon.reloader != null)
                {
                    if (base.isClientOnly)
                    {
                        if (isServerAuthoritative)
                        {
                            weapon.reloader.onReloadStart -= onReloadStart;
                        }
                        else
                        {
                            weapon.reloader.onCurrentMagazineChange -= onMagChange;
                        }
                    }

                    if (base.isServer && !base.hasAuthority && isServerAuthoritative)
                    {
                        weapon.reloader.onCurrentMagazineChange -= onMagChange;
                    }
                }
            }
            else // Setting the Watchers
            {
                weapon.onModeChange += OnModeChange;
                if (weapon.shooter is ModularFirearms.NetShooterBehaviour shooter)
                {
                    shooter.onNetShoot += UseMainAttack;
                }

                if (weapon.ammo != null)
                {
                    if (isServerAuthoritative && base.isServer && !base.hasAuthority)
                    {
                        weapon.ammo.onCurrentAmmoChange += AmmoSync;
                    }

                    if (base.hasAuthority && !base.isServer)
                    {
                        weapon.ammo.onCurrentAmmoChange += AmmoSync;
                    }
                }
                // Look Over Reload again
                if (weapon.reloader != null)
                {
                    if (base.isClientOnly)
                    {
                        if (isServerAuthoritative)
                        {
                            weapon.reloader.onReloadStart += onReloadStart;
                        }
                        else
                        {
                            weapon.reloader.onCurrentMagazineChange += onMagChange;
                        }
                    }

                    if (base.isServer && !base.hasAuthority && isServerAuthoritative)
                    {
                        weapon.reloader.onCurrentMagazineChange += onMagChange;
                    }
                }
            }
        }