I cant seem to add a cooldown to this script

Hello fellow gamemakers at unity, I am not the best programmer, and I have spent an entire month trying to add a cooldown/stamina meter to this fps movement script I found but whenever I try, I always get errors or the code doesn’t really do add any cooldown. I could really use some help here.

var walkSpeed: float = 7; // regular speed
var crchSpeed: float = 3; // crouching speed
var runSpeed: float = 20; // run speed
 
private var chMotor: CharacterMotor;
private var ch: CharacterController;
private var tr: Transform;
private var height: float; // initial height
 
function Start(){
chMotor = GetComponent(CharacterMotor);
tr = transform;
ch = GetComponent(CharacterController);
height = ch.height;
}
 
function Update(){
 
var h = height;
var speed = walkSpeed;
if (ch.isGrounded && Input.GetKey("left shift") || Input.GetKey("right shift")){
speed = runSpeed;
}
if (Input.GetKey("c")){ // press C to crouch
h = 0.4 * height;
speed = crchSpeed; // slow down when crouching
}
chMotor.movement.maxForwardSpeed = speed; // set max speed
var lastHeight = ch.height; // crouch/stand up smoothly
ch.height = Mathf.Lerp(ch.height, h, 5*Time.deltaTime);
tr.position.y += (ch.height-lastHeight)/2; // fix vertical position
}

Here is some modifications to your code. I’m away from my desk, so I did not paste it into mono to veryify that I did not make any syntax mistakes. But the logic is roughed in. I’m using Invoke() to restore the stamina.

 var walkSpeed: float = 7; // regular speed
    var crchSpeed: float = 3; // crouching speed
    var runSpeed: float = 20; // run speed
    var maxStamina: float = 5.0; // Seconds of running
     
    private var chMotor: CharacterMotor;
    private var ch: CharacterController;
    private var tr: Transform;
    private var height: float; // initial height
    private var canRun = true;
    private var stamina;
    
     
    function Start(){
    chMotor = GetComponent(CharacterMotor);
    tr = transform;
    ch = GetComponent(CharacterController);
    height = ch.height;
    stamina = maxStamina;
    }
     
    function Update(){
    
     
    var h = height;
    var speed = walkSpeed;

   if (Mathf.Approximately(speed, runSpeed)) {
        stamina -= Time.deltaTime;
        if (stamina < 0.0) {
            speed = walkSpeed;
            canRun = false;
            Invoke("RestoreStamina", 0.5);
        }
    }
    
 
    if (canRun && ch.isGrounded && Input.GetKey("left shift") || Input.GetKey("right shift")){
    speed = runSpeed;
    }
    if (Input.GetKey("c")){ // press C to crouch
    h = 0.4 * height;
    speed = crchSpeed; // slow down when crouching
    }
    chMotor.movement.maxForwardSpeed = speed; // set max speed
    var lastHeight = ch.height; // crouch/stand up smoothly
    ch.height = Mathf.Lerp(ch.height, h, 5*Time.deltaTime);
    tr.position.y += (ch.height-lastHeight)/2; // fix vertical position
    }
    
    function RestoreStamina() {
        canRun = true;
        stamina = maxStamina;
    }