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)
	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)

	// 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)

	// Remove this GameObject from the scene
	if(currentHealth <= 0)



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)


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