my game isnt taking damage when a raycast hits?

Here is my Gun Script,
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;

public class Gun : NetworkBehaviour
{

    public float damage = 10f;
    public float range = 100f;
    public float impactForce = 30f;
    public float firerate = 15f;

    public int MaxAmmo = 10;
    private int currentAmmo;
    public float reloadTime = 5f;
    private bool isReloading = false;


    public Camera fpsCam;
    public ParticleSystem HitAnime;
    public GameObject ImpactEffect;
    public Animator animator;
    private float nextTimeToFire = 0f;
    // Update is called once per frame
    private void Start()
    {
        currentAmmo = MaxAmmo;
    }
    private void OnEnable()
    {
        isReloading = false;
        animator.SetBool("Reloading", false);
    }
    void Update()
    {
        if (isReloading)
            return;

        if (currentAmmo <= 0)
        {
            StartCoroutine(Reload());
            return;
        }
        if (Input.GetButton("Fire1") && Time.time >= nextTimeToFire)
        {
            nextTimeToFire = Time.time + 1f / firerate;
            Shoot();
        }
    }
    IEnumerator Reload ()
    {
        isReloading = true;
        Debug.Log("Reloading...");
        animator.SetBool("Reloading", true);
        yield return new WaitForSeconds(reloadTime);
            currentAmmo = MaxAmmo;
        isReloading = false;
        animator.SetBool("Reloading", false);
    }

    void Shoot()
    {
        currentAmmo--;
        RaycastHit hit;

        if (Physics.Raycast(fpsCam.transform.position, fpsCam.transform.forward, out hit, range))
        {
            Debug.Log(hit.transform.name);

            Target target = hit.transform.GetComponent<Target>();
            if (target != null)
            {
                target.TakeDamage(damage);
                HitAnime.Play();
            }

            {
                var hitPlayer = hit.collider.gameObject;
                CmdDoShotSomeone(gameObject, hitPlayer);
            }
        }
    

            
            if (hit.rigidbody != null)
            {
                hit.rigidbody.AddForce(hit.normal * impactForce);
            }
            GameObject ImpactGO = Instantiate(ImpactEffect, hit.point, Quaternion.LookRotation(hit.normal));
            Destroy(ImpactGO, 2f);
        }

    [Command]
    void CmdDoShotSomeone(GameObject fromPlayer, GameObject hitPlayer)
    {
        hitPlayer.GetComponent<Health>().TakeDamage(fromPlayer);
        Debug.Log("hit player");
    }
}

Here is my health script `using UnityEngine;

using System.Collections;
using UnityEngine.Networking;

public class Health : NetworkBehaviour
{
[SyncVar(hook = “OnHealthChanged”)]
public int health;
[SyncVar]
Vector3 respawnPos;

public override void OnStartLocalPlayer()
{
    CmdSetHealth(100);
}

[Command]
void CmdSetHealth(int newHealth)
{
    health = newHealth;
}

[Server]
public void TakeDamage(GameObject fromPlayer)
{
    health = Mathf.Max(health - 10, 0);

    if (health <= 0)
    {
        DoDeath();
    }
}

[Server]
void DoDeath()
{
    respawnPos = GetRandomSpawnPoint();
    RpcHandlePlayerDeath();
}

[Server]
Vector3 GetRandomSpawnPoint()
{
    var spawnPoints = NetworkManager.singleton.startPositions;
    return spawnPoints[Random.Range(0, spawnPoints.Count)].position;
}

[ClientRpc]
void RpcHandlePlayerDeath()
{
    if (isLocalPlayer)
    {
        transform.position = respawnPos;
        CmdSetHealth(100);
    }
}

void OnHealthChanged(int newHealth)
{
    health = newHealth;

    if (isLocalPlayer)
    {
        HUD.instance.DisplayHealth(health);
    }
}

}`

Any help is greatly appreciated knowing that I am a noob :slight_smile:

The debug shows the raycat hitting something. But it never takes damage or kills the player from the server.
@bobisgod234