Authoritative Networking JS

////////NetworkManager Script:

 var player : Transform;
var registeredName : string = "somekindofuniquename";
var refreshRequestLength : float = 3.0f;
var hostData : HostData[];
var chosenGameName : string = "";
var myPlayer : NetworkPlayer;

function StartServer(){
Network.InitializeServer (16, Random.Range(2000,2500),!Network.HavePublicAddress());
MasterServer.RegisterHost(registeredName,chosenGameName);
}

function OnServerInitialized(){
if(Network.isServer){
myPlayer = Network.player;
makePlayer(myPlayer);
}
}

function OnConnectedToServer() {
myPlayer = Network.player;
networkView.RPC("makePlayer", RPCMode.Server, myPlayer);
}

@RPC
 function makePlayer(NetworkPlayer : thisPlayer){
var newPlayer : Transform = Network.Instantiate (player, transform.position, transform.rotation, 0) as Transform;
if (thisPlayer != myPlayer) {
networkView.RPC ("enableCamera", thisPlayer, newPlayer.networkView.viewID);
}
else{
enableCamera(newPlayer.networkView.viewID);
}
}

@RPC
 function enableCamera(NetworkViewID : playerID){
var players : GameObject[];
players = GameObject.FindGameObjectsWithTag ("Player");
for(var thisPlayer : GameObject in players){
if(thisPlayer.networkView.viewID == playerID){
thisPlayer.GetComponent(Movement).haveControl = true;
var myCamera : Transform = thisPlayer.transform.Find("Camera");
myCamera.camera.enabled = true;
myCamera.camera.GetComponent(AudioListener).enabled = true;
break;
}
}
}

function RefreshHostList (){
MasterServer.RequestHostList (registeredName);
var timeEnd : float = Time.time + refreshRequestLength;
while (Time.time < timeEnd) {
hostData = MasterServer.PollHostList();
yield WaitForEndOfFrame();
}
}

function OnGUI(){
if (Network.isClient || Network.isServer) {
return;
}
if(chosenGameName == ""){
GUI.Label(new Rect(Screen.width/2 - Screen.width/10, Screen.height/2 - Screen.height/20, Screen.width/5,Screen.height/20), "Game Name");
}
chosenGameName = GUI.TextField(new Rect(Screen.width/2 - Screen.width/10, Screen.height/2 - Screen.height/20, Screen.width/5,Screen.height/20), chosenGameName, 25);
if (GUI.Button (new Rect (Screen.width/2 - Screen.width/10, Screen.height/2, Screen.width/5,Screen.height/10), "Start New Server")) {
StartServer();
}
if (GUI.Button (new Rect (Screen.width/2 - Screen.width/10, Screen.height/2 + Screen.height/10, Screen.width/5,Screen.height/10), "Find Servers")) {
RefreshHostList();
}
if (hostData != null) {
for(var i = 0; i < hostData.Length; i++){
if(GUI.Button (new Rect (Screen.width/2 - Screen.width/10, Screen.height/2 + ((Screen.height/20)*(i+4)), Screen.width/5,Screen.height/20), hostData[i].gameName)) {
Network.Connect(hostData[i]);
}
}
}
}



//////////// Movement Script

var moveSpeed : int = 8;
var horiz : float = 0;
 var vert : float = 0;
var haveControl : boolean = false;

function FixedUpdate(){
if(haveControl){
vert = Input.GetAxis("Vertical");
horiz = Input.GetAxis("Horizontal");
var  newVelocity : Vector3 = (transform.right * horiz * moveSpeed) + (transform.forward * vert * moveSpeed);
var myVelocity : Vector3 = rigidbody.velocity;
myVelocity.x = newVelocity.x;
myVelocity.z = newVelocity.z;

if(myVelocity != rigidbody.velocity){
if(Network.isServer){
movePlayer(myVelocity);
}
else{
networkView.RPC("movePlayer", RPCMode.Server, myVelocity);
}
}
}
}

@RPC
function movePlayer(Vector3 : playerVelocity){
rigidbody.velocity = playerVelocity;
networkView.RPC("updatePlayer", RPCMode.OthersBuffered, transform.position);
}
@RPC
function updatePlayer(Vector3 : playerPos){
transform.position = playerPos;
}
}