cast is not valid???

i get this error InvalidCastException: Specified cast is not valid.
Health.OnPhotonSerializeView (Photon.Pun.PhotonStream stream, Photon.Pun.PhotonMessageInfo info)

and its on line 39 the error and this is what i have

///
/// Health.cs
/// Author: MutantGopher
/// This is a sample health script. If you use a different script for health,
/// make sure that it is called “Health”. If it is not, you may need to edit code
/// referencing the Health component from other scripts
///

using UnityEngine;
using System.Collections;
using Photon.Pun;
using Photon.Realtime;

public class Health : MonoBehaviourPunCallbacks, IPunObservable
{
public bool canDie = true;
public float maxHealth = 100;
public float currentHealth = 100;

public bool replaceWhenDead = false;		
public GameObject deadReplacement;			
public bool makeExplosion = false;			
public GameObject explosion;				

public bool isPlayer = false;				
public GameObject deathCam;					

private bool dead = false;					

public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{

	if (stream.IsWriting)
	{
		stream.SendNext(currentHealth);
	}
	else if (stream.IsReading)
	{
		currentHealth = (int)stream.ReceiveNext();
	}
	

}

void Start()
{
	// Initialize the currentHealth variable to the value specified by the user in startingHealth
	currentHealth = maxHealth;
}

public void ChangeHealth(float amount)
{
	// Change the health by the amount specified in the amount variable
	currentHealth += amount;

	// If the health runs out, then Die.
	if (currentHealth <= 0 && !dead && canDie)
		Die();

	// Make sure that the health never exceeds the maximum health
	else if (currentHealth > maxHealth)
		currentHealth = maxHealth;
}

IEnumerator Respawn()
{
	currentHealth = 100;
	GetComponentInChildren<Camera>().enabled = false;
	GetComponent<Movement>().enabled = false;
	GetComponentInChildren<Weapon>().enabled = false;
	transform.position = new Vector3(-3, 1, 19);
	yield return new WaitForSeconds(4);
	GetComponentInChildren<Camera>().enabled = true;
	GetComponent<Movement>().enabled = true;
	GetComponentInChildren<Weapon>().enabled = true;
	currentHealth = maxHealth;
	dead = false;

}

public void Die()
{
	

    // This GameObject is officially dead.  This is used to make sure the Die() function isn't called again
	dead = true;

	// Make death effects
	if (replaceWhenDead)
		Instantiate(deadReplacement, transform.position, transform.rotation);
	if (makeExplosion)
		Instantiate(explosion, transform.position, transform.rotation);

	if (isPlayer && deathCam != null)
		deathCam.SetActive(true);

	// Remove this GameObject from the scene
	if(currentHealth <= 0)
	{
		StartCoroutine(Respawn());
	}
		
	

}

}

and i also get this error
NullReferenceException: Object reference not set to an instance of an object
Health+d__13.MoveNext () (at Assets/Easy Weapons/Scripts/Health.cs:68)

Hey,

assuming that “line 39” is

currentHealth = (int)stream.ReceiveNext();

then the answer to your question boils down to this:

stream.ReceiveNext() returns a variable of type object which you try to cast into an integer. The will only work if that object really is an integer (or at least exactly 4 bytes in size).
→ you probably do not send integers but something else.

given that this error as well as a nullreference is an issue for you please please consider getting some more programming experience before you start creating a multiplayer game. Multiplayer games are way way way more difficult to create and bring a lot more issues.

You will feel a lot of frustration when you continue down this path with your current knowledge.

sorry i was dumb the health and max health are set as floats that 's why it happend when i looked into it a little bit more i found that out but still thanks