Multiplayer Freezes Up

Options
Hi. My problem is that when someone of the two people presses the attack button in the game, instead of giving 2 new buttons as an option to click on, it just freezes up. I noticed that when you are the only person in the game, the attack button works fine, so Im assuming this is a multiplayer issue. How can I fix this? I'll post my whole code just in case some of it has something to do with the problem and I'll comment out the part of the attack button, and what it should be doing. Also, is there a way for a photon view to observe two scripts (besides for making them into one script)? Thanks in advance! Also, this script is attached to each player.
[code2=csharp]using UnityEngine;
using System.Collections;

public class Battle : Photon.MonoBehaviour {

public Texture2D clockBG;
public Texture2D healthExcellent;
public Texture2D healthGood;
public Texture2D healthOkay;
public Texture2D healthBad;
public Texture2D healthTerrible;
Texture2D clock;
Texture2D clock2;
GUIStyle style2 = new GUIStyle();
float clockFGMaxWidth;
float currentHealth;
float enemyHealth;
float enemyDamageDone;
float playerDamageDone;
float playerHealthAmount;
float enemyHealthAmount;
float playerHealthAmount2;
float enemyHealthAmount2;
float damageDone;
float damageDone2;
bool waiting = false;
bool damageFinished = true;
bool enemyReady = false;
bool playerReady = false;
string whichAttackUsing;
float letterPause = 0.03f;
string currentWord = "";
string word = "Test";
string attackName;
string buttonMessage;
string whatsHappening;
int justStarting;
GUIStyle style = new GUIStyle();
float playerDamage;
float attackDamage;
int attack;
int attackButton;

void Start ()
{
clockFGMaxWidth = 13200;
currentHealth = 3.21f;
enemyHealth = 3.21f;
playerHealthAmount = 15;
enemyHealthAmount = 15;
playerHealthAmount2 = playerHealthAmount;
enemyHealthAmount2 = enemyHealthAmount;
attack = 0;
}

void Update ()
{
if(Application.loadedLevel == 1)
{
enemyDamageDone = (2.21f/playerHealthAmount) * attackDamage;
playerDamageDone = (2.21f/enemyHealthAmount) * playerDamage;
if (currentHealth > 2.6)
{
clock = healthExcellent;
}
else if (currentHealth <= 2.6 && currentHealth > 2)
{
clock = healthGood;
}
else if (currentHealth <= 2 && currentHealth > 1.5)
{
clock = healthOkay;
}
else if (currentHealth <= 1.5 && currentHealth > 1.2)
{
clock = healthBad;
}
else if (currentHealth <= 1.2 && currentHealth > 1)
{
clock = healthTerrible;
}
else if (currentHealth < 1)
{
clock = clockBG;
}
if (enemyHealth > 2.6)
{
clock2 = healthExcellent;
}
else if (enemyHealth <= 2.6 && enemyHealth > 2)
{
clock2 = healthGood;
}
else if (enemyHealth <= 2 && enemyHealth > 1.5)
{
clock2 = healthOkay;
}
else if (enemyHealth <= 1.5 && enemyHealth > 1.2)
{
clock2 = healthBad;
}
else if (enemyHealth <= 1.2)
{
clock2 = healthTerrible;
}
}
}

void DoMyWindow (int windowID) {

if(Application.loadedLevel == 1)
{
style.fontSize = 15;
GUI.Label (new Rect (10,20,200,100), currentWord, style);
if(attack == 0)
{
//This is the attack button
if(GUI.Button(new Rect(200,50,100,20), buttonMessage))
{
attackButton++;
justStarting = 0;
}
}
switch(attackButton)
{
case 0:
if(justStarting == 0)
{
whatsHappening = "What would you like to do?";
StartCoroutine(TypeText(whatsHappening));
justStarting = 1;
}
buttonMessage = "Attack";
break;
case 1:
//What should happen after you press the attack button
if(justStarting == 1)
{
currentWord = "";
whatsHappening = "Which attack would you like to use?";
StartCoroutine(TypeText(whatsHappening));
justStarting = 2;
}
if(GUI.Button(new Rect(200,75,100,20), "Tackle"))
{
attackButton = attackButton + 2;
}
buttonMessage = "Ember";
print("Attack!");
break;
case 2:
whichAttackUsing = "ember";
attackName = "Ember";
playerDamage = Random.Range(3,6);
photonView.RPC ("ReadyUp", PhotonTargets.Others);
StartCoroutine(Attack());
break;
case 3:
whichAttackUsing = "tackle";
attackName = "Tackle";
playerDamage = Random.Range(3,6);
photonView.RPC ("ReadyUp", PhotonTargets.Others);
StartCoroutine(Attack());
break;
}
}
}
void OnGUI() {

if(Application.loadedLevel == 1)
{
GUILayout.Label(justStarting.ToString() + attackButton.ToString());
Rect theRect = new Rect(Screen.width - 1000, Screen.height - 200, 300, 300);
GUI.Window (0, theRect,DoMyWindow, "");
float newBarWidth = (currentHealth / 100) * clockFGMaxWidth;
float newBarWidth2 = (enemyHealth / 100) * clockFGMaxWidth;

GUI.DrawTexture(new Rect (0,0, 550, 225), clockBG);

GUI.BeginGroup(new Rect(5,6, newBarWidth, healthExcellent.height));
GUI.DrawTexture(new Rect(3,-4, 550, 225), clock);
GUI.EndGroup();
GUI.DrawTexture(new Rect (1000,0, 550, 225), clockBG);

GUI.BeginGroup(new Rect(1005,6, newBarWidth2, healthExcellent.height));
GUI.DrawTexture(new Rect(3,-4, 550, 225), clock2);
GUI.EndGroup();
GUI.BeginGroup(new Rect(240,97,100,100), playerHealthAmount2 + "/" + playerHealthAmount, style2);
style2.fontSize = 30;
GUI.EndGroup();
GUI.BeginGroup(new Rect(1240,97,100,100), enemyHealthAmount2 + "/" + enemyHealthAmount, style2);
GUI.EndGroup();
}

}
IEnumerator Attack()
{
while(enemyReady == false && playerReady == false)
{
if(waiting == false)
{
whatsHappening = "Waiting for enemy to pick attack";
TypeText(whatsHappening);
waiting = true;
}
}
currentWord = "";
damageFinished = true;
StartCoroutine(Damage());
animation.CrossFade(whichAttackUsing);
animation.PlayQueued("idle", QueueMode.CompleteOthers);
attackButton = 0;
whatsHappening = "Your Monster used " + attackName + "!";
StartCoroutine(TypeText(whatsHappening));
yield return new WaitForSeconds (2);
currentWord = "";
attack = 1;
currentWord = "";
}

void AddText(string newText)
{
word = newText;
StartCoroutine(TypeText(whatsHappening));
}
IEnumerator TypeText (string compareWord)
{
foreach (char letter in whatsHappening.ToCharArray())
{
if (whatsHappening != compareWord)
break;
currentWord += letter;
yield return new WaitForSeconds (letterPause);
}
}
IEnumerator Damage()
{
if(damageFinished)
{
damageDone = currentHealth - enemyDamageDone;
damageDone2 = enemyHealth - playerDamageDone;
playerHealthAmount2 -= attackDamage;
enemyHealthAmount2 -= playerDamage;
damageFinished = false;
}
while(currentHealth > damageDone)
{
currentHealth -= 0.001f;
yield return new WaitForSeconds (0);
}
while(enemyHealth > damageDone2)
{
enemyHealth -= 0.001f;
yield return new WaitForSeconds (0);
}
enemyDamageDone = 0;
playerDamageDone = 0;
attackDamage = 0;
playerDamage = 0;
}
[RPC]
void ReadyUp()
{
enemyReady = true;
}

}[/code2]