hi,

also ich habe folgendes problem, seitdem ich in mein player script das c_trace eingebaut habe, hat mein player physikalische grundsätze obwohl das gar nich sein soll, d.h. wenn ich mich bewege und dabei eine schräge hochlaufe bewegt sich der player langsamer und wenn ich sie herunterlaufe dementsprechend schneller. und wenn ich an einer kante stehe an die eine andere kante anliegt( die sind aber schief, bzw. diagonal) bewegt sich der player kurzzitig ganz schnell ein paa quants hoch und runter und rutscht dabei die kante entlang........
kann mir jemand erklären warum der player das tut oder wie man das beheben kann, weil ich wüsste keinen ansatz zur lösung.
schon ma danke im vorraus.

hier ist noch mein playerscript
Code:
FUNCTION rotate_entity(rotate_angle,rotate_speed);

DEFINE move_x,skill22; //movement skills
DEFINE move_y,skill23;
DEFINE move_z,skill24;
DEFINE force_x,skill25;
DEFINE force_y,skill26;
DEFINE force_z,skill27;
DEFINE velocity_x,skill28;
DEFINE velocity_y,skill29;
DEFINE velocity_z,skill30;

DEFINE animate,SKILL31; //animation skills
DEFINE animate2,SKILL32;
DEFINE animblend,SKILL33;
DEFINE currentframe,SKILL34;
DEFINE blendframe,SKILL35;

DEFINE z_offset,SKILL50; //gravity and jumping skills
DEFINE jumping_mode,SKILL51;
DEFINE gravity,SKILL52;

DEFINE movement_mode,SKILL53; //for various movement mainly combat
DEFINE moving,SKILL54;

DEFINE hit_by_player,SKILL55; //enemy skills
DEFINE entity_type,SKILL56;


DEFINE nullframe,-2;
DEFINE blend,-1;
DEFINE stand,0;
DEFINE run,1;
DEFINE walk,2;
DEFINE jump,3; 
DEFINE fall,4;


var camera_distance = 250;

Action player_maedel
{
	player = my;
	my.fat= off;
	my.narrow = on;
	c_setminmax(my);
	my.shadow = on;


	while (player != null)
	{
		kamera();
		bewegungen();
		gravitation();
		kamerazentrierung();
		player_animationen(1);
		wait(1); 
	}	
}


function rotate_entity(rotate_angle,rotate_speed)
{
	if (my.pan == rotate_angle) {return;}
	result = ang(rotate_angle - my.pan);
	if (result > 0) { my.pan += rotate_speed * time; }
	if (result < 0) { my.pan -= rotate_speed * time; }
	if (ang(rotate_angle - my.pan) < 0 && result > 0) { my.pan = rotate_angle; }
	if (ang(rotate_angle - my.pan) > 0 && result < 0) { my.pan = rotate_angle; }
}


function kamera()
{
	camera.pan -= mouse_force.x * 12 * time;
	camera.tilt += mouse_force.y * 8 * time;
	camera.tilt = clamp(camera.tilt,-70,- 5);
	temp = fcos(camera.tilt,-camera_distance);
	vec_set(camera.x,vector(my.x + fcos(camera.pan,temp),my.y +	fsin(camera.pan,temp),my.z + 70 + fsin(camera.tilt,-camera_distance)));
	camera.arc -= 0.25 * mickey.z * time_step;
	camera.arc = clamp(camera.arc,20,100);	
}


function kamerazentrierung()
{
	if (mouse_middle == 1)
	{
		if (camera.pan <= player.pan)
			{camera.pan += 20 * time;}
		if (camera.pan >= player.pan)
			{camera.pan -= 20 * time;}
		if (camera.tilt <= -5)
			{camera.tilt += 20 * time;}
		if (camera.arc >= 50)
			{camera.arc -= 13 * time;}
		if (camera.arc <= 50)
			{camera.arc += 13 * time;}
	}
}


function bewegungen()
{
	temp.x = -1000;
	temp.y = 0;
	if (key_w == 1 && key_s == 0 && key_a == 0 && key_d == 0) { temp.x = camera.pan; }
	if (key_s == 1 && key_w == 0 && key_a == 0 && key_d == 0) { temp.x = camera.pan + 180; }
	if (key_a == 1 && key_s == 0 && key_w == 0 && key_d == 0) { temp.x = camera.pan + 90; }
	if (key_d == 1 && key_s == 0 && key_a == 0 && key_w == 0) { temp.x = camera.pan - 90; }
	if (key_w == 1 && key_a == 1 && key_d == 0 && key_s == 0) { temp.x = camera.pan + 45; }
	if (key_w == 1 && key_d == 1 && key_a == 0 && key_s == 0) { temp.x = camera.pan - 45; }
	if (key_s == 1 && key_a == 1 && key_d == 0 && key_w == 0) { temp.x = camera.pan + 135; }
	if (key_s == 1 && key_d == 1 && key_a == 0 && key_w == 0) { temp.x = camera.pan - 135; }
	if (temp.x != -1000) 
	{
		if (key_shift == 1) 
			{temp.y = 10 * time;}
		else
			{temp.y = 20 * time;}
	}

	my.move_x = fcos(temp.x,temp.y);
	my.move_y = fsin(temp.x,temp.y);

	c_move(my,nullvector,my.move_x, ignore_passable | glide);
	
	result = c_trace(my.x,vector(my.x,my.y,my.z - 4000),use_box|ignore_me|scan_texture);
	if (result < 0) { my.z -= result; my.velocity_z = 0; }
	
	if (temp.y > 0) {rotate_entity(temp.x,20);}
	
	if (my.move_x == 0 && my.move_y == 0)
	{
		if (my.animblend > stand && my.animblend != jump && my.animblend != fall)
			{my.blendframe = stand;}
	}
	else
	{
		if (my.animblend == stand)
		{
			if (key_shift == 1)
			{my.blendframe = walk;}
			else
			{my.blendframe = run;}
		}
		if (my.animblend == run && key_shift == 1) 
			{my.blendframe = walk;}
		if (my.animblend == walk && key_shift == 0)
			{my.blendframe = run;}
	}
	
	
	
}


function gravitation()
{
	result = c_trace(my.x,vector(my.x,my.y,my.z - 4000),use_box|ignore_me|scan_texture);
	
	if (result < 3)
	{
		if (my.jumping_mode == 0)
		{
			my.force_z = -1 * result;
			if (key_space == 1 && my.animblend >= stand && my.animblend != jump && my.animblend != fall)
			{
				my.jumping_mode = 1;
				my.force_z = 32;
				my.blendframe = jump;
				my.animate2 = 0;
				my.animblend = blend;
			}		
		}
		if (my.jumping_mode == 2 || my.jumping_mode == 3) 
		{my.jumping_mode = 0;}
	}
	else
	{
		if (my.jumping_mode == 2)
		{
			if(result > 120)
			{
				my.animate = 60;
				my.jumping_mode = 3;
			}
			else
			{my.jumping_mode = 0;}
		}
		if (my.jumping_mode == 3 && result <= 120) { my.jumping_mode = 0;}
		if (my.jumping_mode == 0)
		{
			if (result > 120 && my.animblend >= stand && my.animblend != jump && my.animblend != fall)
			{
				my.jumping_mode = 3;
				my.blendframe = fall;
				my.animate2 = 0;
				my.animblend = blend;
			}
		}
		
		my.force_z -= 6 * time;
		my.force_z  = max(-30,my.force_z);
	}
	my.velocity_z += (time * my.force_z) - (min(time * 0.7,1) * (my.velocity_z));
	my.move_z = my.velocity_z * time;
	
}


function player_animationen(animation_speed)
{
	if (animation_speed <= 0) {animation_speed = 1;}
	if (my.animblend != blend && my.blendframe != nullframe)
	{
		my.animate2 = 0;
		my.animblend = blend;
	}
	if (my.animblend == blend)
	{
		if (my.currentframe == stand)	{ent_animate(my,"stand",my.animate,anm_cycle);}
		if (my.currentframe == run) {ent_animate(my,"run",my.animate,anm_cycle);}
		if (my.currentframe == walk) {ent_animate(my,"walk",my.animate,anm_cycle);}
		if (my.currentframe == jump) {ent_animate(my,"jumpnew",my.animate,0);}
		
		if (my.blendframe == stand) {ent_blend("stand",0,my.animate2);}
		if (my.blendframe == run) {ent_blend("run",0,my.animate2);}
		if (my.blendframe == walk) {ent_blend("walk",0,my.animate2);}
		if (my.blendframe == jump) {ent_blend("jumpnew",0,my.animate2);}
		if (my.blendframe == fall) {ent_blend("jumpnew",60,my.animate2);}
		
		
		my.animate2 += 45 * time;
		if (my.animate2 >= 100)
		{
			my.animate = 0;
			my.animblend = my.blendframe;
			my.blendframe = nullframe;
		}
	}
	if (my.animblend == stand) 
	{
		ent_animate(my,"stand",my.animate,anm_cycle);
		my.animate += 2 * animation_speed * time;
		my.animate %= 100;
		my.currentframe = stand;
	}
	if (my.animblend == run) 
	{	
		ent_animate(my,"run",my.animate,anm_cycle);
		my.animate += 6.8 * animation_speed * time;
		my.animate %= 100;
		my.currentframe = run;
	}
	if (my.animblend == walk) 
	{
		ent_animate(my,"walk",my.animate,anm_cycle);
		my.animate += 6 * animation_speed * time;
		my.animate %= 100;
		my.currentframe = walk;
	}
	if (my.animblend == jump || my.animblend == fall)
	{
		if (my.jumping_mode == 3) {my.animate = 80;}
		ent_animate(my,"jumpnew",my.animate,0);
		my.animate += 7 * animation_speed * time;
		my.currentframe = jump;
		if (my.animate >= 60 && my.jumping_mode == 1) {my.jumping_mode = 2;}
		if (my.animate >= 100)
		{
			ent_animate(my,"jumpnew",100,0);
			my.animate = 100;
			my.blendframe = stand;
			if (my.move_x != 0 || my.move_y != 0)
			{
				if (key_shift == 1) {my.blendframe = walk;}
				else {my.blendframe = run;}
			}
		}
	}
	
	
}