ok when i start a -sv -cl session, the controls are fine, you move around and fire and such, but as soon as a client starts (-cl) then we have a problem, the client's camera is wrong, it will not position itself where it should be, also the client can't fire, or move. The server on the other hand is doing most of the acting, but in a wrong way; first it controls the clients moving, and firing, but it controls it's own camera movement and all. i will post camera, multiplayer, actions, and movement/firing.

Skills used:
Code:

define health , skill1;
define ammo, skill2;
define ammo1_reserve, skill9;
define ammo2_reserve, skill10;
define ammo3_reserve, skill11;
define ammo1_used, skill12;
define ammo2_used, skill13;
define ammo3_used, skill14;
define energy_weap_used, skill15;
define walk_speed, skill3;
define back_speed, skill4;
define strafe_speed, skill5;
define evade_speed, skill6;
define boost_speed, skill7;
define fall_speed, skill8;
define fast_mech, flag1;
define balanced_mech, flag2;
define heavy_mech, flag3;
define fire_time, skill16; //firing speed of weapon
define weapon_num, skill17; //number of the weapon
define animate_cgun, skill23;



The player actions:
Code:

action player_serv
{
sleep(.5);
my.heavy_mech = on;
my.scale_x = .5;
my.scale_y = .5;
my.scale_z = .5;
energy_recharge();
double_tap_key();
init_cameras();
movement_func();
my.fat = on;
my.polygon = on;
if (my.fast_mech == on)
{
my.health = 500;//health for heavy mech
my.walk_speed = 35; //walk speed for heavy mech
my.back_speed = 30; //backpedal speed for heavy mech
my.strafe_speed = 30; //strafing speed for heavy mech
my.evade_speed = 100; //evade speed for heavy mech
my.boost_speed = 90; //boosting speed for heavy mech
my.fall_speed = 25; //fall speed for heavy mech

}
if (my.balanced_mech == on)
{
my.health = 700; //health for balanced mech
my.walk_speed = 25; //walk speed for balanced mech
my.back_speed = 20; //backpedal speed for balanced mech
my.strafe_speed = 20; //strafing speed for balanced mech
my.evade_speed = 85; //evade speed for balanced mech
my.boost_speed = 75; //boosting speed for balanced mech
my.fall_speed = 35; //fall speed for balanced mech
midsaber_func();

}
if (my.heavy_mech == on)
{
my.health = 900; //health for heavy mech
my.walk_speed = 15; //walk speed for heavy mech
my.back_speed = 15; //backpedal speed for heavy mech
my.strafe_speed = 15; //strafing speed for heavy mech
my.evade_speed = 70; //evade speed for heavy mech
my.boost_speed = 60; //boosting speed for heavy mech
my.fall_speed = 45; //fall speed for heavy mech
hov_mecha_fire(); //include the heavy mech firing function
}
ent_create ("block.mdl", vector(my.x + 100, my.y, my.z + 100), dyn_light);
}

action player_client
{
sleep(.5);
my.scale_x = .5;
my.scale_y = .5;
my.scale_z = .5;
my.enable_scan = on;
my.event = miss_track_event;
energy_recharge();
double_tap_key();
init_cameras();
movement_func();
my.fat = on;
my.polygon = on;
if (my.fast_mech == on)
{
my.health = 500;//health for heavy mech
my.walk_speed = 35; //walk speed for heavy mech
my.back_speed = 30; //backpedal speed for heavy mech
my.strafe_speed = 30; //strafing speed for heavy mech
my.evade_speed = 100; //evade speed for heavy mech
my.boost_speed = 90; //boosting speed for heavy mech
my.fall_speed = 25; //fall speed for heavy mech

}
if (my.balanced_mech == on)
{
my.health = 700; //health for balanced mech
my.walk_speed = 25; //walk speed for balanced mech
my.back_speed = 20; //backpedal speed for balanced mech
my.strafe_speed = 20; //strafing speed for balanced mech
my.evade_speed = 85; //evade speed for balanced mech
my.boost_speed = 75; //boosting speed for balanced mech
my.fall_speed = 35; //fall speed for balanced mech
midsaber_func();

}
if (my.heavy_mech == on)
{
my.health = 900; //health for heavy mech
my.walk_speed = 15; //walk speed for heavy mech
my.back_speed = 15; //backpedal speed for heavy mech
my.strafe_speed = 15; //strafing speed for heavy mech
my.evade_speed = 70; //evade speed for heavy mech
my.boost_speed = 60; //boosting speed for heavy mech
my.fall_speed = 45; //fall speed for heavy mech
hov_mecha_fire(); //include the heavy mech firing function
}
ent_create ("block.mdl", vector(my.x + 100, my.y, my.z + 100), dyn_light);
}



Firing and movement:
Code:

function hov_mecha_fire()
{
while (my != null)
{
ammo_func();
my.fire_time += 0.1 *time;
rotate_cgun();
if (my.weapon_num == 0)
{
if (fire_key && my.ammo > 0)
{
speed_up = 1;
slow_down = 0;
if (my.fire_time > .2 && my.animate_cgun > 15)
{
spawn_bullet_chaingun();
my.ammo1_used += 1;
my.fire_time = 0;
}
}
else
{
slow_down = 1;
speed_up = 0;
}
}
if (my.weapon_num != 0)
{
slow_down = 1;
speed_up = 0;
}

if (my.weapon_num == 1)
{
if (fire_key && my.ammo > 20)
{
if (my.fire_time > 1)
{
my.energy_weap_used = on;
spawn_laser();
my.ammo2_used += 20;
my.fire_time = 0;
}
}
if (fire_key == off)
{
my.energy_weap_used = off;
}
}

if (my.weapon_num == 2)
{
if (fire_key && my.ammo > 0)
{
if (my.fire_time > 0.7)
{
spawn_missle_1();
spawn_missle_2();
my.ammo3_used += 2;
my.fire_time = 0;
}
}
if (alt_fire_key && my.ammo > 0)
{
if (my.fire_time > 2)
{
//spawn_3miss_right();
//spawn_3miss_left();
my.ammo2_used -= 6;
my.fire_time = 0;
}
}
}
wait(1);
}
}

function movement_func()
{
while (player != null)
{
ent_cycle ("idle", my.idle_percent);
move_mode = ignore_passents;

if (my.evade_fwd == off || my.evade_back == off || my.evade_left == off || my.evade_right == off)
{
my.cut_off_evade = 0;
}
if (walk_key == on) //walk forward
{
ent_cycle ("walk", my.walk_percent);
my.walk_percent += 3 *time;
ent_move (vector (my.walk_speed *time,0,0),nullvector);
}

if (my.evade_fwd) //if it's double tapped, evade
{
my.use_energy = 1;
while (my.cut_off_evade < 6 && my.energy > 0)
{
my.cut_off_evade += 1 *time;
my.energy -= 8 *time;
ent_move (vector (my.evade_speed *time,0,0),nullvector);
wait(1);
}
}

if (backpedal_key == on) //walk backward
{
ent_move (vector (- my.back_speed *time,0,0),nullvector);
}

if (my.evade_back == on) //if it's double tapped, evade
{
my.use_energy = 1;
while (my.cut_off_evade < 6 && my.energy > 0)
{
my.cut_off_evade += 1 *time;
my.energy -= 8 *time;
ent_move (vector (- my.evade_speed *time,0,0),nullvector);
wait(1);
}
}


if (lstrafe_key == on) //strafe left
{
ent_move (vector (0,my.strafe_speed *time,0),nullvector);
/*my.strafe_percent += 3 *time;
ent_animate (my, "s_left" , my.strafe_percent, 0);*/
}


if (my.evade_left == on) //if it's double tapped, evade
{
my.use_energy = 1;
while (my.cut_off_evade < 6 && my.energy > 0)
{
my.cut_off_evade += 1 *time;
my.energy -= 8 *time;
ent_move (vector (0,my.evade_speed *time,0),nullvector);
wait(1);
}
}


if (rstrafe_key == on) //strafe right
{
move_mode = ignore_passents;
ent_move (vector (0,- my.strafe_speed *time,0),nullvector);
/*my.strafe_percent += 3 *time;
ent_animate (my, "s_right" , my.strafe_percent, 0);*/
}


if (my.evade_right == on) //if it's double tapped, evade
{
my.use_energy = 1;
while (my.cut_off_evade < 6 && my.energy > 0)
{
my.cut_off_evade += 1 *time;
my.energy -= 8 *time;
ent_move (vector (0,- my.evade_speed *time,0),nullvector);
wait(1);
}
}

else
{
my.tilt = 0;
my.roll = 0;
}

if (jump_key == on) //boost and drain energy
{
if (my.energy > 0)
{
my.use_energy = 1;
my.energy -= 5 *time;
c_move (my, vector (0,0, my.boost_speed *time), nullvector, glide + ignore_passable);
}
}

else
{
my.use_energy = 0;
}

ent_move (vector (0,0, -my.fall_speed *time), nullvector);
c_trace(my.x, vector(my.x, my.y, my.z -500),ignore_me|ignore_passable|ignore_sprites);
if((normal.x != 0) || (normal.y != 0))
{
temp.tilt = 0;
temp.roll = 0;
temp.pan = -my.pan;
vec_rotate(normal, temp);
temp.tilt = -asin(normal.x);
temp.roll = -asin(normal.y);
my.tilt += 0.2*ang(temp.tilt - my.tilt);
my.roll += 0.2*ang(temp.roll - my.roll);
}
wait(1);
}
}



Camera:
Code:

// needed functions ///////////////////////////
function init_cameras()
{
camera.size_x = screen_size.x;
camera.size_y = screen_size.y; //make the 1st person camera the size of the screen
camera.genius = player; //the 1st person camera follows the player
camera.visible = on; //make first person the default camera
while (1)
{
update_views();
wait (1);
} //contiually update the views
}

function camera_trace()
{
my.skill42 = camera_distance;
trace_mode = ignore_me + ignore_passable;
vec_set(temporary_distance.x, camera.x);
temporary_distance.z -= 50 * time;
distance_traced = c_trace(my.x, temporary_distance.x, use_box);
if (distance_traced == 0) // Nothing in the way?
{
if (camera_distance < my.skill42)
{
camera_distance += 1 * time;
}
}
else
{
distance_traced -= 5 * time;
camera.x = my.x - distance_traced * cos(camera.pan); // place the camera behind the player
camera.y = my.y - distance_traced * sin(camera.pan); // at the new distance given by distance_traced
}
}

function update_views()
{
my.pan -= mouse_force.x * mouse_speed_x * time; //change the players pan with the mouse
//first person cam values
if (cam_mode == 0)
{
hud.alpha = 25;
hud.overlay = on;
hud.visible = on;
chaingun.visible = on;
laz_gun.visible = on;
camera.x = my.x;
camera.y = my.y;
camera.z = my.z + eye_height;
camera.pan = my.pan;
camera.roll = my.roll;
my.visible = off;
if (invert_mouse == 0)
{
camera.tilt = clamp ((camera.tilt + mouse_force.y *mouse_speed_y), -23, 45);
}
else
{
camera.tilt = clamp ((camera.tilt - mouse_force.y *mouse_speed_y), -23, 45);
}
}

//3rd person cam values
else
{
camera_trace();
hud.visible = off;
chaingun.visible = off;
laz_gun.visible = off; //make guns invisible
cam_dist = cos (tilt_3rd) * cam_dist_total;
camera.x = my.x - cos (my.pan) * cam_dist;
camera.y = my.y - sin (my.pan) * cam_dist;
camera.z = my.z + cam_3rd_height - cos (cam_dist_total);
camera.pan = my.pan; //camera only follows the player
camera.roll = my.roll; //do not include camera rolling
my.visible = on;
if (invert_mouse == 0)
{ //do not invert the camera tilt and clamp it to a certain angle
camera.tilt = clamp ((camera.tilt + mouse_force.y *mouse_speed_y), -23, 45) - tilt_3rd;
}
else
{ //invert the camera tilt and clamp it to a certain angle
camera.tilt = clamp ((camera.tilt - mouse_force.y *mouse_speed_y), -23, 45) - tilt_3rd;
}
}
}






- aka Manslayer101