private void onReloadStart(ModularFirearms.IModularFirearm weapon) { if (base.hasAuthority && isServerAuthoritative && !base.isServer) { CmdReload(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); } }
private void AmmoSync(ModularFirearms.IModularFirearm weapon, int amount) { if (base.isServer) { TargetAmmoSync(amount); } else { CmdAmmoSync(amount); } }
private void onMagChange(ModularFirearms.IModularFirearm weapon, int amount) { if (base.isServer && isServerAuthoritative) { TargetReload(amount); } if (base.isClientOnly && !isServerAuthoritative) { CmdReload(amount); } }
// 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); } }
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; } } } }