syncvar hook not being applied to player?!

So my scripts that control the battle and the stats are as follows.

now the issue is that the syncvar hook is being applied only on the server to npcs that have been debugeed
as being a server identity
on the other hand the client which i have double checked is a local player authority
does not recieve any updates from the hook called “hphook” and at this point im stumped as to why

Stats

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Networking;

public class Stats : NetworkBehaviour
{
    public bool hasbeenattacked;
    List<GameObject> party = new List<GameObject>();
    public List<GameObject> attackerslist = new List<GameObject>();
    public Transform head;
    [SyncVar]
    public int level;
    [SyncVar]
    public string username;
    [SyncVar(hook ="hphook")]
    public float hp;
    public bool dualwield;
    [SyncVar]
    public float temphp;
    public GameObject weapontwo;
    public float currenthp;
    public float attacklisttimer;
    public float staminacost;
    [SyncVar]
    public float maxhp;
    public float stamina;
    public float currentstamina;
    public float maxstamina;
    public float speed;
    public float currentspeed;
    public float maxspeed;
    public float strength;
    public float currentstrength;
    [SyncVar]
    public string charactername;
    public float maxstrength;
    public GameObject hpbar;
    [SyncVar]
    public float damage;
    public GameObject shield;
    public GameObject weapon;
    public Animator anim;
    public Slider externalhpbar;
    public Slider staminabar;
    public Slider externalstaminabar;
    public bool checkhp;
    public Text nametext;
    public GameObject player;
    public InputField setcharactername;
    public GameObject okbutton;
    public GameObject nameinput;
    public GameObject externalguistamina;
    public bool growstamina;
    public bool timerstart;
    public float timetillfullstamina;
    public GameObject arrow;
    public float staminagain;
    public float staminagaintime;
    public float circlevalue;
    public Image circlehp;
    public AudioClip shieldblock;
    public AudioClip gethit;
    public AudioClip death;
    public AudioClip selectobject;
    public AudioSource playeraudio;
    public GameObject targeting;
    public GameObject nameblock;
    public GameObject weaponone;
    public GameObject UIuseobject;
    [SyncVar]
    public bool noshield;
    [SyncVar]
    public int xp;
    [SyncVar]
    public int xpgain;
    private int originalCount;

    void circlehpchange()
    {
        circlevalue = 1 - currenthp;
        circlehp.CrossFadeAlpha(circlevalue, 0.5f, true);
    }






    [ClientRpc]
    void Rpc_died()
    {
        playeraudio.clip = death;
        playeraudio.Play();
        Destroy(this.gameObject);
    }










    public void setmyname()
    {

        charactername = setcharactername.text;
        nametext.text = charactername;
        Cmd_setname(charactername);
        okbutton.SetActive(false);
        nameinput.SetActive(false);

    }


    [Command]
    public void Cmd_setname(string charactername)
    {

        nametext.text = charactername;
        Rpc_setname(charactername);

    }




  [ClientRpc]
    public void Rpc_setname(string charactername)
    {

        nametext.text = charactername;

    }
    void hphook(float hp)
    {

        currenthp = hp / maxhp;
        externalhpbar.value = Mathf.Lerp(externalhpbar.value, currenthp, 15f);


        if (hp <= 0 && this.transform == this.transform.root)
        {
            playeraudio.clip = GetComponent<Stats>().death;
            playeraudio.Play();
            if (isServer && transform.tag != "player")
            {
                if (attackerslist.Count > 1)
                {
                    foreach (GameObject player in attackerslist)
                    {
                        xp += xpgain;
                    }
                }

            }
            Rpc_died();
            Destroy(this.gameObject);
        }
    }

    void staminafilling()
    {
        if (growstamina == true)
        {
            StartCoroutine(staminafiller());
            if (stamina >= maxstamina)
            {
                growstamina = false;
                timerstart = false;

            }
        }

    }



    void staminanotfull()
    {
        if (stamina != maxstamina && timerstart == false)
        {

                StartCoroutine(staminafill());

        }
    }


    IEnumerator staminafiller()
    {
        if (growstamina == true && stamina < maxstamina)
        {
            stamina += staminagain;
            yield return new WaitForSeconds(staminagaintime);
            StartCoroutine(staminafiller());
            if (stamina >= maxstamina)
            {
                growstamina = false;
                timerstart = false;
            }
            StopCoroutine(staminafiller());

           
        }


    }


    IEnumerator staminafill()
    {
        timerstart = true;
        yield return new WaitForSeconds(timetillfullstamina);
        growstamina = true;


    }



    void strengthdamage()
    {

    }


    void staminacalculate()
    {
        currentstamina = stamina / maxstamina;


        staminabar.value = Mathf.Lerp(staminabar.value, currentstamina, 15f);
        externalstaminabar.value = Mathf.Lerp(externalstaminabar.value, currentstamina, 15f);

    }



    [Command]
    void Cmd_addtoparty(GameObject player)
    {
        party.Add(player);
    }


    public void addtoattackers(GameObject player)
    {
        attackerslist.Add(player);
        hasbeenattacked = true;
        if(isLocalPlayer)
        {
            Cmd_addtoattackers(player);
            Cmd_attacked(hasbeenattacked);
        }
        if(isServer)
        {
            Rpc_addtoattackers(player);
            Rpc_attacked(hasbeenattacked);
        }
       if(hasbeenattacked == true)
        {
            StartCoroutine(attacklisttime());
            hasbeenattacked = false;
            if (isLocalPlayer)
            {
                Cmd_attacked(hasbeenattacked);
            }
            if (isServer)
            {
                Rpc_attacked(hasbeenattacked);
            }


        }
    }



    public IEnumerator attacklisttime()
    {
        yield return new WaitForSeconds(attacklisttimer * Time.deltaTime);
        if(isLocalPlayer)
        {
            attackerslist.Clear();
        }

        if(isServer && transform.tag == "enemy")
        {
            attackerslist.Clear();
        }
    }


    [Command]
    void Cmd_removefromattackers(GameObject player)
    {
        attackerslist.Remove(player);
        Rpc_removefromattackers(player);
    }

    [ClientRpc]
    void Rpc_removefromattackers(GameObject player)
    {
        {
            attackerslist.Remove(player);
        }
    }


    public void restarttime()
    {
        StopCoroutine(attacklisttime());
        StartCoroutine(attacklisttime());
        if(isLocalPlayer)
        {
            Cmd_restarttime();
        }
        if(isServer)
        {
            Rpc_restarttime();
        }
    }

    internal void takingthethedamage(float damage)
    {
        throw new NotImplementedException();
    }

    [Command(channel = 3)]
    void Cmd_restarttime()
    {
        StopCoroutine(attacklisttime());
        StartCoroutine(attacklisttime());
        Rpc_restarttime();
    }


    [ClientRpc(channel = 3)]
    void Rpc_restarttime()
    {
        StopCoroutine(attacklisttime());
        StartCoroutine(attacklisttime());

    }


    [ClientRpc]
    void Rpc_attacked(bool attacked)
    {
        hasbeenattacked = attacked;
    }

    [Command]
    void Cmd_attacked (bool attacked)
    {
        hasbeenattacked = attacked;
        Rpc_attacked(attacked);
    }


    [ClientRpc(channel = 3)]
    void Rpc_addtoattackers(GameObject player)
    {

            attackerslist.Add(player);
       
    }

    [Command(channel = 3)]
    void Cmd_addtoattackers(GameObject player)
    {
        attackerslist.Add(player);
        Rpc_addtoattackers(player);
    }



    public void sethp()
    {
        hp = temphp;
    }
    // Use this for initialization
    void Start()
    {
        anim =GetComponent<Animator>();
        if (GetComponent<Charactersize>() != null)
        {
            if (GetComponent<Charactersize>().weight > 200 && transform.tag != "player")
            {
                GetComponent<AItargeting>().playertoofar *= 4;
            }
        }
        if (transform.tag == "player")
        {
            party.Add(gameObject);
            if (isLocalPlayer)
            {
                Cmd_addtoparty(gameObject);
            }
            circlehp.canvasRenderer.SetAlpha(0.0f);
        }
        if (isLocalPlayer)
        {
            hpbar.SetActive(false);
            externalguistamina.SetActive(false);
            nameblock.SetActive(false);
        }

        if (!isLocalPlayer)
        {
            if (transform.tag == "player")
            {
                okbutton.SetActive(false);
                nameinput.SetActive(false);
            }

        }
    }




    // Update is called once per frame
    void Update()
    {
        hp = temphp;
        currenthp = hp / maxhp;
        externalhpbar.value = Mathf.Lerp(externalhpbar.value, currenthp, 15f);
        if (transform.tag == "player" && isLocalPlayer)
        {
            staminacalculate();
            staminanotfull();
            staminafilling();
            circlehpchange();
        }

    }

}

this is the battle script that procceses the damage

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

public class Battle : NetworkBehaviour {
    [SyncVar]
    public int battlenumber;
    public Transform enemy;
    [SyncVar]
    public bool blocked;
    public Animator anim;
    public Animator playeranim;
    public bool noshield;
    public float weightdifference;
    [SyncVar]
    public bool canbeknockeddown;
    [SyncVar]
    public bool knockingdown;




    [Command]
     public void Cmd_getenemy()
    {
        if (GetComponent<Stats>().weaponone.GetComponent<Weaponone>().enemy != null)
        {
            enemy = GetComponent<Stats>().weaponone.GetComponent<Weaponone>().enemy;
        }
        if (GetComponent<Stats>().weapontwo.GetComponent<weapontwo>().enemy != null)
        {
            enemy = GetComponent<Stats>().weapontwo.GetComponent<weapontwo>().enemy;
        }
        anim = enemy.GetComponent<Animator>();
        weightdifference = enemy.GetComponent<Charactersize>().weight - GetComponent<Charactersize>().weight;
        noshield = GetComponent<Stats>().noshield;
        GetComponent<Battle>().noshield = noshield;



    }


    [ClientRpc]
    void Rpc_setenemyserver()
    {
        if (GetComponent<Stats>().weaponone.GetComponent<Weaponone>().enemy != null)
        {
            enemy = GetComponent<Stats>().weaponone.GetComponent<Weaponone>().enemy;
        }
        if (GetComponent<Stats>().weapontwo.GetComponent<weapontwo>().enemy != null)
        {
            enemy = GetComponent<Stats>().weapontwo.GetComponent<weapontwo>().enemy;
        }
        anim = enemy.GetComponent<Animator>();
        weightdifference = enemy.GetComponent<Charactersize>().weight - GetComponent<Charactersize>().weight;
        noshield = GetComponent<Stats>().noshield;
        GetComponent<Battle>().noshield = noshield;
    }

    public void gethit()
        {
        Debug.Log("tookdamage");
        if(isLocalPlayer)
        {
            Cmd_getenemy();
        }

        if(isServer)
        {
            if (GetComponent<Stats>().weaponone.GetComponent<Weaponone>().enemy != null)
            {
                enemy = GetComponent<Stats>().weaponone.GetComponent<Weaponone>().enemy;
            }
            if (GetComponent<Stats>().weapontwo.GetComponent<weapontwo>().enemy != null)
            {
                enemy = GetComponent<Stats>().weapontwo.GetComponent<weapontwo>().enemy;
            }
            anim = enemy.GetComponent<Animator>();
            weightdifference = enemy.GetComponent<Charactersize>().weight - GetComponent<Charactersize>().weight;
            noshield = GetComponent<Stats>().noshield;
            GetComponent<Battle>().noshield = noshield;
            Rpc_setenemyserver();
        }
        if(battlenumber != enemy.GetComponent<Battle>().battlenumber || noshield == true)
        {




            if (weightdifference < -100)
            {
                if (canbeknockeddown == false)
                {
                    StartCoroutine(knockeddown());

                    anim.SetTrigger("knockeddown");
                    if (isServer)
                    {
                        Rpc_hit("knockeddown");
                    }
                    if (!isServer)
                    {
                        Cmd_hit("knockeddown");
                    }

                }
            }

        }

        if (!isLocalPlayer)
        {

            enemy.GetComponent<Stats>().temphp -= GetComponent<Stats>().damage;
        }

        if(isLocalPlayer)
        {
            Cmd_takedamage(GetComponent<Stats>().damage);
        }
        anim.SetTrigger("gethit");
        enemy.GetComponent<Stats>().playeraudio.clip = enemy.GetComponent<Stats>().gethit;
        enemy.GetComponent<Stats>().playeraudio.Play();
        if (isLocalPlayer)
        {
            Cmd_gethit();
        }

        if(isServer)
        {
            Rpc_gethit();
        }

        playeranim.GetComponent<Stats>().weapontwo.GetComponent<weapontwo>().startattack = false;
        if (isLocalPlayer)
        {
            Cmd_endatt(playeranim.GetComponent<Stats>().weapontwo.GetComponent<weapontwo>().startattack = false);
        }
        if (isServer)
        {
            Rpc_endatt(playeranim.GetComponent<Stats>().weapontwo.GetComponent<weapontwo>().startattack = false);
        }
        if (isLocalPlayer)
        {
            Cmd_endatt(playeranim.GetComponent<Stats>().weaponone.GetComponent<Weaponone>().startattack = false);
        }
        if (isServer)
        {
            Rpc_endatt(playeranim.GetComponent<Stats>().weaponone.GetComponent<Weaponone>().startattack = false);
        }

    }



    [Command]
    void Cmd_takedamage(float damage)

    {
        enemy.GetComponent<Stats>().temphp -= damage;
        Rpc_takedamage(damage);
    }

    [ClientRpc]
    void Rpc_takedamage(float damage)

    {
        enemy.GetComponent<Stats>().temphp -= damage;
    }
    [ClientRpc]
    void Rpc_gethit()
    {
        if (!isLocalPlayer)
        {
            anim.SetTrigger("gethit");
            enemy.GetComponent<Stats>().playeraudio.clip = enemy.GetComponent<Stats>().gethit;
            enemy.GetComponent<Stats>().playeraudio.Play();
        }
    }

    [Command]
    void Cmd_gethit()
    {
        anim.SetTrigger("gethit");
        enemy.GetComponent<Stats>().playeraudio.clip = enemy.GetComponent<Stats>().gethit;
        enemy.GetComponent<Stats>().playeraudio.Play();
        Rpc_gethit();
    }

    public void blocking()
    {
        if (battlenumber == enemy.GetComponent<Battle>().battlenumber)
        {
            enemy.GetComponent<Stats>().playeraudio.clip = enemy.GetComponent<Stats>().shieldblock;

            enemy.GetComponent<Stats>().playeraudio.Play();
            if (isLocalPlayer)
            {
                Cmd_playeraudioed();
            }


            if (weightdifference > -100)
            {
                if (battlenumber == 1)
                {
                    anim.SetTrigger("blockedleft");
                    playeranim.SetTrigger("parriedleft");
                    if (isLocalPlayer)
                    {
                        Cmd_playeranimation("parriedleft");

                    }
                    if(isServer)
                    {
                        Rpc_playeranimation("parriedleft");
                    }
                }
                if (battlenumber == 2)
                {
                    anim.SetTrigger("blockedup");
                    playeranim.SetTrigger("parriedup");
                    if (isLocalPlayer)
                    {
                        Cmd_playeranimation("parriedup");

                    }
                    if (isServer)
                    {
                        Cmd_playeranimation("parriedup");
                    }
                }
                if (battlenumber == 3)
                {
                    anim.SetTrigger("blockedright");
                    playeranim.SetTrigger("parriedright");
                    if (isLocalPlayer)
                    {
                        Cmd_playeranimation("parriedright");

                    }
                    if (isServer)
                    {
                        Rpc_playeranimation("parriedright");
                    }
                }
                if (battlenumber == 4)
                {
                    anim.SetTrigger("blockeddown");
                    playeranim.SetTrigger("parrieddown");
                    if (isLocalPlayer)
                    {
                        Cmd_playeranimation("parrieddown");

                    }
                    if (isServer)
                    {
                        Rpc_playeranimation("parrieddown");
                    };
                }
            }

            if (weightdifference < -100)
            {
                if (canbeknockeddown == false)
                {
                    StartCoroutine(knockeddown());

                    anim.SetTrigger("knockeddown");
                    if (isLocalPlayer)
                    {
                        Cmd_hit("knockeddown");
                    }
                    if(!isServer)
                    {
                        Rpc_hit("knockeddown");
                    }
                }
            }

        }
        playeranim.GetComponent<Stats>().weaponone.GetComponent<Weaponone>().startattack = false;
        playeranim.GetComponent<Stats>().weapontwo.GetComponent<weapontwo>().startattack = false;
        if (isLocalPlayer)
        {
            Cmd_endatt(playeranim.GetComponent<Stats>().weapontwo.GetComponent<weapontwo>().startattack = false);
        }
        if (isServer)
        {
            Rpc_endatt(playeranim.GetComponent<Stats>().weapontwo.GetComponent<weapontwo>().startattack = false);
        }
        if (isLocalPlayer)
        {
            Cmd_endatt(playeranim.GetComponent<Stats>().weaponone.GetComponent<Weaponone>().startattack = false);
        }
        if(isServer)
        {
            Rpc_endatt(playeranim.GetComponent<Stats>().weaponone.GetComponent<Weaponone>().startattack = false);
        }
    }




    [Command]
    void Cmd_endatttwo(bool go)
    {
        playeranim.GetComponent<Stats>().weapontwo.GetComponent<weapontwo>().startattack = go;
        Rpc_endatttwo(playeranim.GetComponent<Stats>().weapontwo.GetComponent<weapontwo>().startattack = false);
    }


    [ClientRpc]
    void Rpc_endatttwo(bool go)
    {
        if (!isLocalPlayer)
        {
            playeranim.GetComponent<Stats>().weapontwo.GetComponent<weapontwo>().startattack = go;
        }
    }





    [Command]
    void Cmd_endatt(bool go)
    {
        playeranim.GetComponent<Stats>().weaponone.GetComponent<Weaponone>().startattack = go;
        Rpc_endatt(playeranim.GetComponent<Stats>().weaponone.GetComponent<Weaponone>().startattack = false);
    }


    [ClientRpc]
    void Rpc_endatt(bool go)
    {
        if (!isLocalPlayer) ;
        playeranim.GetComponent<Stats>().weaponone.GetComponent<Weaponone>().startattack = go;
    }

    [Command(channel = 1)]
    void Cmd_playeraudioed()
    {
        Rpc_playeraudioed();
    }

    [ClientRpc(channel = 1)]
    void Rpc_playeraudioed()
    {
        enemy.GetComponent<Stats>().playeraudio.clip = enemy.GetComponent<Stats>().shieldblock;
        enemy.GetComponent<Stats>().playeraudio.Play();
    }





    [Command(channel = 1)]
    void Cmd_playeranimation(string trigger)
    {
        playeranim.SetTrigger(trigger);
        Rpc_playeranimation(trigger);

    }
    [ClientRpc(channel = 1)]
    void Rpc_playeranimation(string trigger)
    {
        if (!isLocalPlayer)
        {
            playeranim.SetTrigger(trigger);
        }
    }

    [Command]
    void Cmd_knockdownstart()
    {
        enemy.transform.root.GetComponent<Battle>().canbeknockeddown = true;
        enemy.transform.root.GetComponent<Battle>().knockingdown = true;

    }


    [Command]
    void Cmd_knockdownstop()
    {
        enemy.transform.root.GetComponent<Battle>().canbeknockeddown = false;
        enemy.transform.root.GetComponent<Battle>().knockingdown = false;
    }








    IEnumerator knockeddown()
    {

        enemy.transform.root.GetComponent<Battle>().canbeknockeddown = true;
        enemy.transform.root.GetComponent<Battle>().knockingdown = true;

            if(!isServer)
            {
                Cmd_knockdownstart();
            }
        yield return new WaitForSeconds(7 * Time.deltaTime);
        enemy.transform.root.GetComponent<Battle>().canbeknockeddown = false;
        enemy.transform.root.GetComponent<Battle>().knockingdown = false;
            if (!isServer)
            {
                Cmd_knockdownstop();
            }
    }



    [ClientRpc]
    void Rpc_hit(string trigger)
    {
        if (!isLocalPlayer)
        {
            anim.SetTrigger(trigger);
        }
    }
    [Command]
    void Cmd_hit(string trigger)
    {
        anim.SetTrigger(trigger);
        Rpc_hit(trigger);
    }



    // Use this for initialization
    void Start () {
        playeranim = transform.root.GetComponent<Animator>();

    }
   
    // Update is called once per frame
    void Update () {

    }
}

I’m having trouble following what you’re doing. Why are you setting the “hp” syncvar in Update on all the clients?