Hi,
ich bastel momentan an einem code für's klettern rum. jetzt möchte ich dass der spieler automatisch beim hangeln erkennt wenn über ihm nicht mehr ist und er (wie auf dem Bild) hochklettern muss.

der spieler hangelt und klettet einwandfrei(abgesehen von den fehlenden animationen^^).
jetzt zum problem: nach dem übergang klettert der spieler nur einen frame danach schießt er in die höhe(da die schwerkraft variable positiv wird, ist aber nicht schlimm/wichtig) und fällt dann wieder ganz normal. Was ich daran nicht verstehe: Jede variable, die ich irgendwie beim übergang veändere wird beim klettern neugesetzt/nicht gebracht. Hier der code:
Code:
if(MoveState == 1)//klettern
{
	vec_set(temp9, vector(0 , -120, my.max_z));
	vec_rotate(temp9,vector(my.pan,my.tilt,my.roll));
	vec_add(temp9,my.x);
			
	vec_set(temp10, vector(0 , -120, my.min_z));
	vec_rotate(temp10,vector(my.pan,my.tilt,my.roll));
	vec_add(temp10,my.x);// wird wie temp12 exakt so wie unten(if(MoveState == 3)) gesetzt
			
	vec_set(temp11, vector(0 , 0, my.max_z));
	vec_rotate(temp11,vector(my.pan,my.tilt,my.roll));
	vec_add(temp11,my.x);
			
	vec_set(temp12, vector(0 , 0, my.min_z));
	vec_rotate(temp12,vector(my.pan,my.tilt,my.roll));
	vec_add(temp12,my.x);
	draw_point3d(temp9,vector(0,0,0),50,25);
	draw_point3d(temp11,vector(0,0,0),50,25);
	draw_point3d(temp10,vector(0,0,0),50,25);
	draw_point3d(temp12,vector(0,0,0),50,25);
			
	DividateFactor = 0;//ich weiß mathematiker würden mich für den namen köpfen^^
	fall_down = 0;
	vec_set(Normale2,nullvector);//wird neu gesetzt
			
	fall_down += c_trace(temp11,temp9,IGNORE_PASSABLE|IGNORE_ME);
	if(HIT_TARGET)
	{
		DividateFactor += 1;
		vec_add(Normale2,hit.nx);
	}
			
	fall_down += c_trace(temp12, temp10,IGNORE_PASSABLE|IGNORE_ME);
	if(HIT_TARGET)
	{
		DividateFactor += 1;
		vec_add(Normale2,hit.nx);
	}
	DividateFactor_Show = DividateFactor;
	if(DividateFactor)
	{
		fall_down /= DividateFactor;
		vec_mul(Normale2,vector(1/DividateFactor,1/DividateFactor,1/DividateFactor));
		vec_to_angle(temp4,Normale2);//temp4 auch neu gestetz
		vec_set(temp5,temp4);
		temp5.x -= 90;//ausrichtung genau so wie unten
		temp5.z = temp5.y;
		temp5.y = 0;
		MoveStateC = 1;
		if(Normale2.z > 0.5)
		{
			MoveStateC = 0;
		}
		if(Normale2.z < -0.5)
		{
			MoveStateC = 2;
		}
	}
	else
	{
		MoveStateC = 0;
	}
...
}

if(MoveState == 2)//Hangeln
{...
if(HIT_TARGET)
{
	vec_set(Normale2, hit.nx);
					
	stop = 1;//sorgt dafür das der rest der vom hangeln nicht mehr ausgeführt wird
	hight = hit.z;
	vec_to_angle(temp4,Normale2);
	vec_set(temp5,temp4);
	temp5.x -= 90;//temp5 wird so gebraucht -> ausrichtung des spielers
	temp5.z = temp5.y;
	temp5.y = 0;
	vec_set(temp15,temp5);
	MoveStateC = 3;
}
else
{
	MoveStateC = 0;
}
...
...}
if(MoveState == 3)
{
	pXent_move(me,nullvector,vector(0,0,10*time_step));
	vec_set(temp5,temp15);
			
	vec_set(temp10, vector(0 , -120, my.min_z));
	vec_rotate(temp10,vector(my.pan,my.tilt,my.roll));
	vec_add(temp10,my.x);
			
	vec_set(temp12, vector(0 , 0, my.min_z));
	vec_rotate(temp12,vector(my.pan,my.tilt,my.roll));
	vec_add(temp12,my.x);
	c_trace(temp12,temp10,IGNORE_ME|IGNORE_PASSABLE);
	if(HIT_TARGET)
	{
		vec_set(Normale2,hit.nx);
	}
	if(my.z-abs(my.min_z) > hight+10&&HIT_TARGET)
	{
		pXent_move(me, nullvector, vector(0,0,my.z-hight+abs(my.min_z)));
		MoveStateC = 1;
		pXent_move(me, vector(0,3*time_step,0),nullvector);
	}
}


MoveState wird immer am ende der schleife(in der sich das ganze übringens befindet) gleich MoveStateC gesetzt, die ganzen temp's sind hilfsvectoren und so bring ich meinen Charakter sonst zum klettern.
Code:
vec_to_angle(temp4,Normale2);
vec_set(temp5,temp4);
temp5.x -= 90;
temp5.z = temp5.y;
temp5.y = 0;
							
MoveStateC = 1;



ich hab echt keine ahnung mehr frown
Danke für alle hilfen schon mal im voraus!
xxxxxxx


Es ist immer wieder erstaunlich, dass Leute die riesen Scripte schreiben die einfachsten sachen nicht können zb. mich mit SIEBEN x zu schreiben! tongue