Here you go!
Save it to a file, include it and adjust the values, tps_controller is your action
WASD + Shift + Space are the controls, mouse to rotate

Code:
var mouse_speed = 4;
var walking_speed = 6;
var running_speed = 10;
var gravity_force = 2;
var jump_strength = 10;
var feet_height = 40;
var anim_walk_speed = 5;
var anim_stand_speed = 5;

action tps_controller()
{
	wait(1);
	c_updatehull(me, 1);
	var gravity = 0;
	var lks = 0;
	while(me)
	{
		my.pan += mouse_speed * mouse_force.x;
		
		VECTOR mov;
		mov.x = key_w - key_s;
		mov.y = key_a - key_d;
		mov.z = 0;
		if(key_shift)
			vec_normalize(mov, running_speed * time_step);
		else
			vec_normalize(mov, walking_speed * time_step);
	
		if(vec_length(mov) > 0)
		{
			ent_animate(me, "walk", total_ticks * anim_walk_speed, ANM_CYCLE);	// Adopt animation speed and name
		}
		else
		{
			ent_animate(me, "stand", total_ticks * anim_stand_speed, ANM_CYCLE);	// Adopt animation speed and name
		}
	
		if(key_space != lks)
		{
			if(key_space)
				gravity = jump_strength;
			lks = key_space;
		}
		gravity -= gravity_force * time_step;
		move_friction = 0;
		c_move(me, mov, vector(0, 0, gravity * time_step), GLIDE | IGNORE_PASSABLE | IGNORE_PASSENTS);
		if(c_trace(my.x, vector(my.x, my.y, my.z - feet_height), IGNORE_ME | IGNORE_PASSABLE | IGNORE_PASSENTS | USE_POLYGON))
		{
			my.z = target.z + feet_height;
			gravity = 0;
		}
		
		vec_set(camera.x, vector(-150, 0, 50));		// Camera offset
		vec_rotate(camera.x, my.pan);
		vec_add(camera.x, my.x);
		camera.pan = my.pan;
		camera.tilt = -15;							// Adjust this
		wait(1);
	}
}



Visit my site: www.masterq32.de