Help/advice needed converting PlayerChat script from Javascript to C#

Scripting seems like the best place to post this, rather than the answers. I’m converting a JavaScript code, that is in charge of the whole chat system for a project of mine, to C# but I run into a few problems that I’m not experienced enough to fix. Any suggestions, advice, or solutions will be greatly appreciated! The current errors state-

Assets/Chat/Chat.cs(41,52): error CS0144: Cannot create an instance of the abstract class or interface `System.Array’

Here is what I have converted:

using UnityEngine;
using System;
using System.Collections;
using System.IO;

public class serverPlayerEntry {
	public string playname= "";
	public NetworkPlayer playerid;
}

public class EntryMsg {
	public string message= "";
	public int dispcolor= 0;
}

public class Chat : MonoBehaviour {
	public string logFile= "ChatLog.txt";
	public string blockedFile= "BlockedPlayers.txt";
	
	private string myName= "Enter Your Name";
	private bool nameEntered= false;
	private ArrayList allchat= new ArrayList();
	private ArrayList playerList= new ArrayList();
	private ArrayList playerNames= new ArrayList();
	private ArrayList groupNames= new ArrayList();
	private ArrayList blockedPlayers= new ArrayList();
	private NetworkPlayer serverSelectedChar;
	private bool serverModChar= false;
	private string addToGroup= "";
	private string textstring= "";
	private Vector2 scrollPosition= Vector2.zero;
	private Vector2 playerScrollPosition= Vector2.zero;
	private Vector2 serverChatScroll= Vector2.zero;
	private Vector2 serverPlayerScroll= Vector2.zero;
	private float maxScroll= 0.0f;
	private string selectedPlayer= "";
	private int talkTo= 0;
	private string inviter= "";
	private string serverMessage= "";
	
	private Array scrollingNotices= new Array();
	private int noticeFrequency= 60;
	private string noticeFrequencyString= "60";
	private float lastNotice= 0.0f;
	private int nextNoticeNumber= 0;
	private int totalEntries= -1;
	
	public GUIStyle privateChat;
	public GUIStyle groupChat;
	public GUIStyle noticeChat;

	
	void  Update (){
		//sends messages automatically from server
		if (Initializing.Initialized) {
			if (Time.time - lastNotice > noticeFrequency  totalEntries != -1) {
				networkView.RPC("SendEntry", RPCMode.Others, scrollingNotices[nextNoticeNumber], 3);
				if (nextNoticeNumber < totalEntries) nextNoticeNumber++;
				else nextNoticeNumber = 0;
				lastNotice = Time.time;
			}
		}
	}
	
	void  OnGUI (){
		if (Initializing.Connected  nameEntered) {
			//if we are connected to a server show the chat window
			GUI.Window(0, Rect(10,10,460,300), chat, "Chat");
			if (inviter != "") {
				//we have a group invite
				GUI.Window (1,Rect(480, 40, 230, 90), inviteWindow, "Group Invitation");
			}
		}
		else if (Initializing.Connected) {
			myName = GUI.TextField ( new Rect(10, 10, 200, 20), myName);
			if (GUI.Button( new Rect(220,10,100,20), "Enter Chat")) {
				//if character already exists return
				foreach(string entry in playerNames) {
					if (myName == entry || myName == "Enter Your Name") {
						myName = "Name In Use";
						return;
					}
				}
				networkView.RPC ("SubmitPlayerInfo", RPCMode.Server, Network.player, myName);
				nameEntered = true;
			}
		}
		else if (Initializing.Initialized) {
			//server side windows
			GUI.Window(0, Rect(250,10,350,250), serverMessagesWindow, "Messages");
			GUI.Window(1, Rect(10,10,230,250), serverWindow, "General");
			GUI.Window(2, Rect(10,270,200,250), serverPlayerList, "Players");
		}
	}
	
	void  serverPlayerList (){
		GUILayout.BeginArea( new Rect(10,30,180,210));
		serverPlayerScroll = GUILayout.BeginScrollView (serverPlayerScroll, GUILayout.Width(180), GUILayout.Height(210));
		//the code in this if will never be used since the line saying "serverModChar = true" is set as a note since Network.CloseConnection isn't working
		if (serverModChar) {
			if (GUILayout.Button("Kick From Server")) {
				serverModChar = false;
				Network.CloseConnection (serverSelectedChar, false);
			}
			if (GUILayout.Button("Block From Server")) {
				serverModChar = false;
				blockedPlayers.Add(serverSelectedChar.ipAddress);
				Network.CloseConnection (serverSelectedChar, false);
			}
		}
		else {
			foreach(var entry in playerList) {
				if (GUILayout.Button(entry.playname)) {
					serverSelectedChar = entry.playerid;
					//Network.CloseConnection doesn't seem to work
					//serverModChar = true;
				}
			}
		}
		GUILayout.EndScrollView ();
		GUILayout.EndArea();
	}
	
	void  serverWindow (){
		GUILayout.BeginArea ( new Rect(10,30,210,210));
		if (GUILayout.Button("Re-Register With Master Server")) {
			MasterServer.RegisterHost("ChatTest", Initializing.gameName);
		}
		GUILayout.EndArea ();
	}
	
	void  serverMessagesWindow (){
		GUILayout.BeginArea ( new Rect(10,30,330,210));
		serverChatScroll = GUILayout.BeginScrollView (serverChatScroll, GUILayout.Width(330), GUILayout.Height(160));		
		int currentCount= 0;
		//display textfield for each scrolling message added
		foreach(string entry in scrollingNotices) {
			GUILayout.BeginHorizontal();
			entry = GUILayout.TextField(entry);
			if (GUILayout.Button("Remove",  GUILayout.Width(70))) {
				scrollingNotices.RemoveAt(currentCount);
				return;
			}
			GUILayout.EndHorizontal();
			currentCount++;
		}
		GUILayout.EndScrollView ();
		GUILayout.BeginHorizontal();
		if (GUILayout.Button("Add Scrolling Notice")) {
			scrollingNotices.Push("");
			totalEntries++;
		}
		GUILayout.Label("Notice Frequency");
		noticeFrequencyString = GUILayout.TextField (noticeFrequencyString,  GUILayout.Width(50));
		if(GUILayout.Button("Set")) noticeFrequency = int.Parse(noticeFrequencyString);
		GUILayout.EndHorizontal();
		GUILayout.BeginHorizontal();
		//send a one time message from the server
		serverMessage = GUILayout.TextField (serverMessage,  GUILayout.Width(250));
		if (GUILayout.Button("Send")) {
			networkView.RPC("SendEntry", RPCMode.Others, serverMessage, 3);
			serverMessage = "Sent";
		}
		GUILayout.EndHorizontal();
		GUILayout.EndArea ();
	}
	
	//shows up if a player is invited to join a group
	void  inviteWindow (){
		GUI.Label( new Rect(10,30,210,20), "Group Invitation From " + inviter);
		if (GUI.Button( new Rect(45,60,55,20), "Accept")) {
			foreach(string entry in groupNames) {
				playerNames.Add(entry);
				playerNames.Sort();
				networkView.RPC("SubmitLeaveGroup", RPCMode.Server, entry, myName);
			}
			groupNames.Clear();
			networkView.RPC("SubmitAcceptInvite", RPCMode.Server, inviter, myName);
			groupNames.Add(inviter);
			groupNames.Sort();
			int currentCount= 0;
			foreach(var entry in playerNames) {
				if (entry == inviter) {
					playerNames.RemoveAt(currentCount);
					inviter = "";
					return;
				}
				currentCount++;
			}
		}
		if (GUI.Button( new Rect(130,60,55,20), "Decline")) {
			inviter = "";
		}
	}
	
	//main client side chat window
	void  chat (){
		//this is where you write your message
		textstring = GUI.TextArea ( new Rect(10, 240, 180, 50), textstring);
		
		//sends the message you wrote
		if (GUI.Button( new Rect(200, 240, 40, 50), "Send")) {
			textstring = myName + ": " + textstring;
			if (talkTo == 0) {
				networkView.RPC("SubmitEntry", RPCMode.Server, textstring, "All", 0);
			}
			else {
				if (talkTo == 1) {
					foreach(string entry in groupNames) {
						networkView.RPC("SubmitEntry", RPCMode.Server, textstring, entry, 1);
					}
				}
				else networkView.RPC("SubmitEntry", RPCMode.Server, textstring, selectedPlayer, 2);
				
				var myEntry= new EntryMsg ();
				myEntry.message = textstring;
				myEntry.dispcolor = talkTo;
				allchat.Add (myEntry);
				if (allchat.Count > 50) allchat.RemoveAt(0);
				//only pulls your view of the conversation to the new bottom if you were already looking at the bottom
				//this is so if you scroll up to read a previous post it doesn't pull you to the bottom as soon as someone else posts
				if (scrollPosition.y == maxScroll) scrollPosition.y = 1000000;
				//this will keep you at a previous post
				else if (allchat.Count == 50) scrollPosition.y -= 23;
			}
			textstring = "";
		}
		
		//displays everyones messages
		GUILayout.BeginArea ( new Rect(10,30,230,200));
		scrollPosition = GUILayout.BeginScrollView (scrollPosition, GUILayout.Width(230), GUILayout.Height(200));
		foreach(var entry in allchat) {
			if (entry.dispcolor == 0) GUILayout.Label (entry.message);
			else if (entry.dispcolor == 1) GUILayout.Label (entry.message, groupChat);
			else if (entry.dispcolor == 2) GUILayout.Label (entry.message, privateChat);
			else GUILayout.Label (entry.message, noticeChat);
		}
		GUILayout.EndScrollView();
		GUILayout.EndArea();	
		
		GUILayout.BeginArea ( new Rect(250,30,200,260));
		playerScrollPosition = GUILayout.BeginScrollView (playerScrollPosition, GUILayout.Width(200), GUILayout.Height(260));
		if (GUILayout.Button ("Everyone")) talkTo = 0;
		if (GUILayout.Button ("Group")) talkTo = 1;
		GUILayout.Label("Group Members:");
		foreach(var entry in groupNames) {
			if (GUILayout.Button(entry)) {
				selectedPlayer = entry;
				talkTo = 2;
			}
		}
		
		GUILayout.BeginHorizontal();
		addToGroup = GUILayout.TextField(addToGroup);
		if (GUILayout.Button("Invite")) {
			foreach(string entry in groupNames) {
				if (entry == addToGroup) {
					addToGroup = "Player Already In Group";
					return;
				}
			}
			foreach(string entry in playerNames) {
				if (entry == addToGroup) {
					networkView.RPC("SubmitInvite", RPCMode.Server, myName, addToGroup);
					addToGroup = "Invite Sent";
					return;
				}
			}
			addToGroup = "Name Not In Use";
		}
		GUILayout.EndHorizontal();
		
		
		if (GUILayout.Button("Leave Group")) {
			foreach(string entry in groupNames) {
				networkView.RPC("SubmitLeaveGroup", RPCMode.Server, entry, myName);
				playerNames.Add(entry);
				playerNames.Sort();
			}
			groupNames.Clear();
		}
		GUILayout.Label("Other Players:");
		foreach(var entry in playerNames) {
			if (GUILayout.Button(entry)) {
				selectedPlayer = entry;
				talkTo = 2;
			}
		}
		
		GUILayout.EndScrollView();
		GUILayout.EndArea ();
		
		
		
		//finds the maximum scroll position for use in the add entry rpc
		//can be issues if there are multiple lines in a single post... needs fix
		if (scrollPosition.y > maxScroll  scrollPosition.y != 1000000) maxScroll = scrollPosition.y;
	}
	
	void  OnPlayerDisconnected ( NetworkPlayer disconnectedPlayer  ){
		var currentCount= 0;
		foreach(var entry in playerList) {
			if (entry.playerid == disconnectedPlayer) {
				playerList.RemoveAt(currentCount);
				networkView.RPC("SendRemovePlayerName", RPCMode.Others, entry.playname);
				return;
			}
			currentCount++;
		}
	}
	
	void  OnPlayerConnected ( NetworkPlayer newConnectedPlayer  ){
		foreach(var entry in blockedPlayers) {
			if (entry == newConnectedPlayer.ipAddress) {
				Network.CloseConnection (newConnectedPlayer, false);
				return;
			}
		}
		
		foreach(var entry in playerList) {
			networkView.RPC("SendPlayerName", RPCMode.Others, entry.playname);
		}
	}
	
	void  OnDisconnectedFromServer (){
		nameEntered = false;
		Initializing.Connected = false;
		allchat.Clear();
		playerNames.Clear();
		groupNames.Clear();
	}
	
	
	
	
	
	//RPC's starting with "Submit" are sent from a client to the server and RPC's starting with "Send" are sent from the server to a client
	//since most messages/changes need to be sent from one client to another client most RPC's are in pairs, one Submit, one Send
	[RPC]
	void  SubmitEntry ( string tstring ,   string whoTo ,   int textType  ){	
		if (whoTo == "All") {
			networkView.RPC("SendEntry", RPCMode.Others, tstring, textType);
			if (File.Exists(logFile)) {
				var writeFeed= File.AppendText(logFile);
				writeFeed.WriteLine(tstring); 
				writeFeed.Close();
			}
			else {
				var createFeed= File.CreateText(logFile);
				createFeed.WriteLine(tstring); 
				createFeed.Close();
			}
		}
		else {
			foreach(serverPlayerEntry entry in playerList) {
				if (entry.playname == whoTo) {
					networkView.RPC("SendEntry", entry.playerid, tstring, textType);
					tstring = tstring + " - " + whoTo;
					if (File.Exists(logFile)) {
						var writepFeed= File.AppendText(logFile);
						writepFeed.WriteLine(tstring); 
						writepFeed.Close();
					}
					else {
						var createpFeed= File.CreateText(logFile);
						createpFeed.WriteLine(tstring); 
						createpFeed.Close();
					}
					return;
				} 
			}
		}
	}
	
	[RPC]
	void  SendEntry ( string tstring ,   int tColor  ){
		var processEntry= new EntryMsg ();
		processEntry.message = tstring;
		processEntry.dispcolor = tColor;
		allchat.Add (processEntry);	
		if (allchat.Count > 50) allchat.RemoveAt(0);
		
		//issue if there are multiple lines in a single post... needs fix
		//only pulls your view of the conversation to the new bottom if you were already looking at the bottom
		//this is so if you scroll up to read a previous post it doesn't pull you to the bottom as soon as someone else posts
		if (scrollPosition.y == maxScroll) scrollPosition.y = 1000000;
		//this will keep you at a previous post
		else if (allchat.Count == 50) scrollPosition.y -= 23;
	}
	
	[RPC]
	void  SubmitPlayerInfo ( NetworkPlayer newPlayerID ,   string newPlayerName  ){
		var fullplayer= new serverPlayerEntry ();
		fullplayer.playname = newPlayerName;
		fullplayer.playerid = newPlayerID;
		playerList.Add(fullplayer);
		networkView.RPC("SendPlayerName", RPCMode.Others, newPlayerName);
	}
	
	[RPC]
	void  SendPlayerName ( string newPlayerName  ){
		if (newPlayerName != myName) {
			playerNames.Add(newPlayerName);
			playerNames.Sort();
		}
	}
	
	[RPC]
	void  SendRemovePlayerName ( string disconnectedPlayerName  ){
		var currentCount= 0;
		foreach(var entry in groupNames) {
			if (entry == disconnectedPlayerName) {
				groupNames.RemoveAt(currentCount);
			}
			currentCount++;
		}
		currentCount = 0;
		foreach(var entry in playerNames) {
			if (entry == disconnectedPlayerName) {
				playerNames.RemoveAt(currentCount);
				return;
			}
			currentCount++;
		}
	}
	
	
	//all rpcs below are for making/managing groups
	[RPC]
	void  SubmitInvite ( string senderName ,   string invitedName  ){
		foreach(serverPlayerEntry entry in playerList) {
			if (entry.playname == invitedName) {
				networkView.RPC("SendInvite", entry.playerid, senderName);
				return;
			}
		}
	}
	
	[RPC]
	void  SendInvite ( string senderName  ){
		inviter = senderName;
	}
	
	[RPC]
	void  SubmitAcceptInvite ( string senderName ,   string accepterName  ){
		foreach(serverPlayerEntry entry in playerList) {
			if (entry.playname == senderName) {
				networkView.RPC("SendAcceptInvite", entry.playerid, accepterName);
				return;
			}
		}
	}
	
	[RPC]
	void  SendAcceptInvite ( string accepterName  ){
		foreach(string entry in groupNames) {
			networkView.RPC("SubmitNameInGroup", RPCMode.Server, entry, accepterName, 1);
		}
		groupNames.Add(accepterName);
		groupNames.Sort();
		int currentCount= 0;
		foreach(var entry in playerNames) {
			if (entry == accepterName) {
				playerNames.RemoveAt(currentCount);
				return;
			}
			currentCount++;
		}
	}
	
	[RPC]
	void  SubmitNameInGroup ( string groupMemberName ,   string whoNameTo ,   int sendingall  ){
		foreach(serverPlayerEntry entry in playerList) {
			if (entry.playname == whoNameTo) {
				networkView.RPC("SendNameInGroup", entry.playerid, groupMemberName, sendingall);
				return;
			}
		}
	}
	
	[RPC]
	void  SendNameInGroup ( string groupMemberName ,   int sendingall  ){
		groupNames.Add(groupMemberName);
		groupNames.Sort();
		if (sendingall == 1) networkView.RPC("SubmitNameInGroup", RPCMode.Server, myName, groupMemberName, 0);
		int currentCount= 0;
		foreach(var entry in playerNames) {
			if (entry == groupMemberName) {
				playerNames.RemoveAt(currentCount);
				return;
			}
			currentCount++;
		}
	}
	
	[RPC]
	void  SubmitLeaveGroup ( string whoNameTo ,   string leaverName  ){
		foreach(var entry in playerList) {
			if (entry.playname == whoNameTo) {
				networkView.RPC("SendLeaveGroup", entry.playerid, leaverName);
				return;
			}
		}
	}
	
	[RPC]
	void  SendLeaveGroup ( string leaverName  ){
		int currentCount= 0;
		playerNames.Add(leaverName);
		playerNames.Sort();
		foreach(var entry in groupNames) {
			if (entry == leaverName) {
				groupNames.RemoveAt(currentCount);
				return;
			}
			currentCount++;
		}
	}
}

And the original .js code is as follows:

import System; 
import System.IO; 

var logFile = "ChatLog.txt";
var blockedFile = "BlockedPlayers.txt";

private var myName = "Enter Your Name";
private var nameEntered = false;
private var allchat = ArrayList();
private var playerList = ArrayList();
private var playerNames = ArrayList();
private var groupNames = ArrayList();
private var blockedPlayers = ArrayList();
private var serverSelectedChar : NetworkPlayer;
private var serverModChar = false;
private var addToGroup = "";
private var textstring = "";
private var scrollPosition = Vector2.zero;
private var playerScrollPosition = Vector2.zero;
private var serverChatScroll = Vector2.zero;
private var serverPlayerScroll = Vector2.zero;
private var maxScroll = 0.0;
private var selectedPlayer = "";
private var talkTo = 0;
private var inviter = "";
private var serverMessage = "";

private var scrollingNotices = new Array();
private var noticeFrequency = 60;
private var noticeFrequencyString = "60";
private var lastNotice = 0.0;
private var nextNoticeNumber = 0;
private var totalEntries = -1;

var privateChat : GUIStyle;
var groupChat : GUIStyle;
var noticeChat : GUIStyle;

class serverPlayerEntry {
	var playname = "";
	var playerid : NetworkPlayer;
}

class EntryMsg {
	var message = "";
	var dispcolor = 0;
}

function Update () {
	//sends messages automatically from server
	if (Initializing.Initialized) {
		if (Time.time - lastNotice > noticeFrequency  totalEntries != -1) {
			networkView.RPC("SendEntry", RPCMode.Others, scrollingNotices[nextNoticeNumber], 3);
			if (nextNoticeNumber < totalEntries) nextNoticeNumber++;
			else nextNoticeNumber = 0;
			lastNotice = Time.time;
		}
	}
}

function OnGUI () {
	if (Initializing.Connected  nameEntered) {
		//if we are connected to a server show the chat window
		GUI.Window(0, Rect(10,10,460,300), chat, "Chat");
		if (inviter != "") {
			//we have a group invite
			GUI.Window (1,Rect(480, 40, 230, 90), inviteWindow, "Group Invitation");
		}
	}
	else if (Initializing.Connected) {
		myName = GUI.TextField (Rect (10, 10, 200, 20), myName);
		if (GUI.Button(Rect(220,10,100,20), "Enter Chat")) {
			//if character already exists return
			for (var entry : String in playerNames) {
				if (myName == entry || myName == "Enter Your Name") {
					myName = "Name In Use";
					return;
				}
			}
			networkView.RPC ("SubmitPlayerInfo", RPCMode.Server, Network.player, myName);
			nameEntered = true;
		}
	}
	else if (Initializing.Initialized) {
		//server side windows
		GUI.Window(0, Rect(250,10,350,250), serverMessagesWindow, "Messages");
		GUI.Window(1, Rect(10,10,230,250), serverWindow, "General");
		GUI.Window(2, Rect(10,270,200,250), serverPlayerList, "Players");
	}
}

function serverPlayerList () {
	GUILayout.BeginArea(Rect(10,30,180,210));
	serverPlayerScroll = GUILayout.BeginScrollView (serverPlayerScroll, GUILayout.Width(180), GUILayout.Height(210));
	//the code in this if will never be used since the line saying "serverModChar = true" is set as a note since Network.CloseConnection isn't working
	if (serverModChar) {
		if (GUILayout.Button("Kick From Server")) {
			serverModChar = false;
			Network.CloseConnection (serverSelectedChar, false);
		}
		if (GUILayout.Button("Block From Server")) {
			serverModChar = false;
			blockedPlayers.Add(serverSelectedChar.ipAddress);
			Network.CloseConnection (serverSelectedChar, false);
		}
	}
	else {
		for (var entry in playerList) {
			if (GUILayout.Button(entry.playname)) {
				serverSelectedChar = entry.playerid;
				//Network.CloseConnection doesn't seem to work
				//serverModChar = true;
			}
		}
	}
	GUILayout.EndScrollView ();
	GUILayout.EndArea();
}

function serverWindow () {
	GUILayout.BeginArea (Rect (10,30,210,210));
	if (GUILayout.Button("Re-Register With Master Server")) {
		MasterServer.RegisterHost("ChatTest", Initializing.gameName);
	}
	GUILayout.EndArea ();
}

function serverMessagesWindow () {
	GUILayout.BeginArea (Rect (10,30,330,210));
	serverChatScroll = GUILayout.BeginScrollView (serverChatScroll, GUILayout.Width(330), GUILayout.Height(160));		
	var currentCount = 0;
	//display textfield for each scrolling message added
	for (var entry : String in scrollingNotices) {
		GUILayout.BeginHorizontal();
		entry = GUILayout.TextField(entry);
		if (GUILayout.Button("Remove",  GUILayout.Width(70))) {
			scrollingNotices.RemoveAt(currentCount);
			return;
		}
		GUILayout.EndHorizontal();
		currentCount++;
	}
	GUILayout.EndScrollView ();
	GUILayout.BeginHorizontal();
	if (GUILayout.Button("Add Scrolling Notice")) {
		scrollingNotices.Push("");
		totalEntries++;
	}
	GUILayout.Label("Notice Frequency");
	noticeFrequencyString = GUILayout.TextField (noticeFrequencyString,  GUILayout.Width(50));
	if(GUILayout.Button("Set")) noticeFrequency = int.Parse(noticeFrequencyString);
	GUILayout.EndHorizontal();
	GUILayout.BeginHorizontal();
	//send a one time message from the server
	serverMessage = GUILayout.TextField (serverMessage,  GUILayout.Width(250));
	if (GUILayout.Button("Send")) {
		networkView.RPC("SendEntry", RPCMode.Others, serverMessage, 3);
		serverMessage = "Sent";
	}
	GUILayout.EndHorizontal();
	GUILayout.EndArea ();
}

//shows up if a player is invited to join a group
function inviteWindow () {
	GUI.Label(Rect(10,30,210,20), "Group Invitation From " + inviter);
	if (GUI.Button(Rect(45,60,55,20), "Accept")) {
		for (var entry : String in groupNames) {
			playerNames.Add(entry);
			playerNames.Sort();
			networkView.RPC("SubmitLeaveGroup", RPCMode.Server, entry, myName);
		}
		groupNames.Clear();
		networkView.RPC("SubmitAcceptInvite", RPCMode.Server, inviter, myName);
		groupNames.Add(inviter);
		groupNames.Sort();
		var currentCount = 0;
		for (var entry in playerNames) {
			if (entry == inviter) {
				playerNames.RemoveAt(currentCount);
				inviter = "";
				return;
			}
			currentCount++;
		}
	}
	if (GUI.Button(Rect(130,60,55,20), "Decline")) {
		inviter = "";
	}
}

//main client side chat window
function chat () {
	//this is where you write your message
	textstring = GUI.TextArea (Rect (10, 240, 180, 50), textstring);
	
	//sends the message you wrote
	if (GUI.Button(Rect (200, 240, 40, 50), "Send")) {
		textstring = myName + ": " + textstring;
		if (talkTo == 0) {
			networkView.RPC("SubmitEntry", RPCMode.Server, textstring, "All", 0);
		}
		else {
			if (talkTo == 1) {
				for (var entry : String in groupNames) {
				networkView.RPC("SubmitEntry", RPCMode.Server, textstring, entry, 1);
				}
			}
			else networkView.RPC("SubmitEntry", RPCMode.Server, textstring, selectedPlayer, 2);
			
			var myEntry = new EntryMsg ();
			myEntry.message = textstring;
			myEntry.dispcolor = talkTo;
			allchat.Add (myEntry);
			if (allchat.Count > 50) allchat.RemoveAt(0);
			//only pulls your view of the conversation to the new bottom if you were already looking at the bottom
			//this is so if you scroll up to read a previous post it doesn't pull you to the bottom as soon as someone else posts
			if (scrollPosition.y == maxScroll) scrollPosition.y = 1000000;
			//this will keep you at a previous post
			else if (allchat.Count == 50) scrollPosition.y -= 23;
		}
		textstring = "";
	}
	
	//displays everyones messages
	GUILayout.BeginArea (Rect (10,30,230,200));
	scrollPosition = GUILayout.BeginScrollView (scrollPosition, GUILayout.Width(230), GUILayout.Height(200));
	for (var entry in allchat) {
		if (entry.dispcolor == 0) GUILayout.Label (entry.message);
		else if (entry.dispcolor == 1) GUILayout.Label (entry.message, groupChat);
		else if (entry.dispcolor == 2) GUILayout.Label (entry.message, privateChat);
		else GUILayout.Label (entry.message, noticeChat);
	}
	GUILayout.EndScrollView();
	GUILayout.EndArea();	
	
	GUILayout.BeginArea (Rect(250,30,200,260));
	playerScrollPosition = GUILayout.BeginScrollView (playerScrollPosition, GUILayout.Width(200), GUILayout.Height(260));
	if (GUILayout.Button ("Everyone")) talkTo = 0;
	if (GUILayout.Button ("Group")) talkTo = 1;
	GUILayout.Label("Group Members:");
	for (var entry in groupNames) {
		if (GUILayout.Button(entry)) {
			selectedPlayer = entry;
			talkTo = 2;
		}
	}
	
	GUILayout.BeginHorizontal();
	addToGroup = GUILayout.TextField(addToGroup);
	if (GUILayout.Button("Invite")) {
		for (var entry : String in groupNames) {
			if (entry == addToGroup) {
				addToGroup = "Player Already In Group";
				return;
			}
		}
		for (var entry : String in playerNames) {
			if (entry == addToGroup) {
				networkView.RPC("SubmitInvite", RPCMode.Server, myName, addToGroup);
				addToGroup = "Invite Sent";
				return;
			}
		}
		addToGroup = "Name Not In Use";
	}
	GUILayout.EndHorizontal();
	
	
	if (GUILayout.Button("Leave Group")) {
			for (var entry : String in groupNames) {
				networkView.RPC("SubmitLeaveGroup", RPCMode.Server, entry, myName);
				playerNames.Add(entry);
				playerNames.Sort();
			}
			groupNames.Clear();
	}
	GUILayout.Label("Other Players:");
	for (var entry in playerNames) {
		if (GUILayout.Button(entry)) {
			selectedPlayer = entry;
			talkTo = 2;
		}
	}
	
	GUILayout.EndScrollView();
	GUILayout.EndArea ();
	
	
	
	//finds the maximum scroll position for use in the add entry rpc
	//can be issues if there are multiple lines in a single post... needs fix
	if (scrollPosition.y > maxScroll  scrollPosition.y != 1000000) maxScroll = scrollPosition.y;
}

function OnPlayerDisconnected (disconnectedPlayer : NetworkPlayer) {
	var currentCount = 0;
	for (var entry in playerList) {
		if (entry.playerid == disconnectedPlayer) {
			playerList.RemoveAt(currentCount);
			networkView.RPC("SendRemovePlayerName", RPCMode.Others, entry.playname);
			return;
		}
		currentCount++;
	}
}

function OnPlayerConnected (newConnectedPlayer : NetworkPlayer) {
	for (var entry in blockedPlayers) {
		if (entry == newConnectedPlayer.ipAddress) {
			Network.CloseConnection (newConnectedPlayer, false);
			return;
		}
	}
	
	for (var entry in playerList) {
		networkView.RPC("SendPlayerName", RPCMode.Others, entry.playname);
	}
}

function OnDisconnectedFromServer () {
	nameEntered = false;
	Initializing.Connected = false;
	allchat.Clear();
	playerNames.Clear();
	groupNames.Clear();
}





//RPC's starting with "Submit" are sent from a client to the server and RPC's starting with "Send" are sent from the server to a client
//since most messages/changes need to be sent from one client to another client most RPC's are in pairs, one Submit, one Send
@RPC
function SubmitEntry (tstring : String, whoTo : String, textType : int) {	
	if (whoTo == "All") {
		networkView.RPC("SendEntry", RPCMode.Others, tstring, textType);
		if (File.Exists(logFile)) {
			var writeFeed = File.AppendText(logFile);
			writeFeed.WriteLine(tstring); 
			writeFeed.Close();
		}
		else {
			var createFeed = File.CreateText(logFile);
			createFeed.WriteLine(tstring); 
			createFeed.Close();
		}
	}
	else {
		for (var entry : serverPlayerEntry in playerList) {
			if (entry.playname == whoTo) {
				networkView.RPC("SendEntry", entry.playerid, tstring, textType);
				tstring = tstring + " - " + whoTo;
				if (File.Exists(logFile)) {
					var writepFeed = File.AppendText(logFile);
					writepFeed.WriteLine(tstring); 
					writepFeed.Close();
				}
				else {
					var createpFeed = File.CreateText(logFile);
					createpFeed.WriteLine(tstring); 
					createpFeed.Close();
				}
				return;
			} 
		}
	}
}

@RPC
function SendEntry (tstring : String, tColor : int) {
	var processEntry = new EntryMsg ();
	processEntry.message = tstring;
	processEntry.dispcolor = tColor;
	allchat.Add (processEntry);	
	if (allchat.Count > 50) allchat.RemoveAt(0);
	
	//issue if there are multiple lines in a single post... needs fix
	//only pulls your view of the conversation to the new bottom if you were already looking at the bottom
	//this is so if you scroll up to read a previous post it doesn't pull you to the bottom as soon as someone else posts
	if (scrollPosition.y == maxScroll) scrollPosition.y = 1000000;
	//this will keep you at a previous post
	else if (allchat.Count == 50) scrollPosition.y -= 23;
}

@RPC
function SubmitPlayerInfo (newPlayerID : NetworkPlayer, newPlayerName : String) {
	var fullplayer = new serverPlayerEntry ();
	fullplayer.playname = newPlayerName;
	fullplayer.playerid = newPlayerID;
	playerList.Add(fullplayer);
	networkView.RPC("SendPlayerName", RPCMode.Others, newPlayerName);
}

@RPC
function SendPlayerName (newPlayerName : String) {
	if (newPlayerName != myName) {
		playerNames.Add(newPlayerName);
		playerNames.Sort();
	}
}

@RPC
function SendRemovePlayerName (disconnectedPlayerName : String) {
	var currentCount = 0;
	for (var entry in groupNames) {
		if (entry == disconnectedPlayerName) {
			groupNames.RemoveAt(currentCount);
		}
		currentCount++;
	}
	currentCount = 0;
	for (var entry in playerNames) {
		if (entry == disconnectedPlayerName) {
			playerNames.RemoveAt(currentCount);
			return;
		}
		currentCount++;
	}
}


//all rpcs below are for making/managing groups
@RPC
function SubmitInvite (senderName : String, invitedName : String) {
	for (var entry : serverPlayerEntry in playerList) {
		if (entry.playname == invitedName) {
			networkView.RPC("SendInvite", entry.playerid, senderName);
			return;
		}
	}
}

@RPC
function SendInvite (senderName : String) {
	inviter = senderName;
}

@RPC
function SubmitAcceptInvite (senderName : String, accepterName : String) {
	for (var entry : serverPlayerEntry in playerList) {
		if (entry.playname == senderName) {
			networkView.RPC("SendAcceptInvite", entry.playerid, accepterName);
			return;
		}
	}
}

@RPC
function SendAcceptInvite (accepterName : String) {
	for (var entry : String in groupNames) {
		networkView.RPC("SubmitNameInGroup", RPCMode.Server, entry, accepterName, 1);
	}
	groupNames.Add(accepterName);
	groupNames.Sort();
	var currentCount = 0;
	for (var entry in playerNames) {
		if (entry == accepterName) {
			playerNames.RemoveAt(currentCount);
			return;
		}
		currentCount++;
	}
}

@RPC
function SubmitNameInGroup (groupMemberName : String, whoNameTo : String, sendingall : int) {
	for (var entry : serverPlayerEntry in playerList) {
		if (entry.playname == whoNameTo) {
			networkView.RPC("SendNameInGroup", entry.playerid, groupMemberName, sendingall);
			return;
		}
	}
}

@RPC
function SendNameInGroup (groupMemberName : String, sendingall : int) {
	groupNames.Add(groupMemberName);
	groupNames.Sort();
	if (sendingall == 1) networkView.RPC("SubmitNameInGroup", RPCMode.Server, myName, groupMemberName, 0);
	var currentCount = 0;
	for (var entry in playerNames) {
		if (entry == groupMemberName) {
			playerNames.RemoveAt(currentCount);
			return;
		}
		currentCount++;
	}
}

@RPC
function SubmitLeaveGroup (whoNameTo : String, leaverName : String) {
	for (var entry in playerList) {
		if (entry.playname == whoNameTo) {
			networkView.RPC("SendLeaveGroup", entry.playerid, leaverName);
			return;
		}
	}
}

@RPC
function SendLeaveGroup (leaverName : String) {
	var currentCount = 0;
	playerNames.Add(leaverName);
	playerNames.Sort();
	for (var entry in groupNames) {
		if (entry == leaverName) {
			groupNames.RemoveAt(currentCount);
			return;
		}
		currentCount++;
	}
}
    public File logFile= "ChatLog.txt";
    public File blockedFile= "BlockedPlayers.txt";

Looks like these should be strings

    public string logFile= "ChatLog.txt";
    public string blockedFile= "BlockedPlayers.txt";

Changed those variables to strings, thanks.