Hi,

ich habe Dir einmal eine gravity und eine einfache jump Funktion geschrieben.
Ich habe nicht viel kommentiert. Sollte etwas unklar sein melde Dich noch einmal.
Es kann sein das Du die c_scan Funktion in der Höhe an Deinen Player anpassen
musst. Sollte er nicht ganz auf dem Boden sein oder im Boden stecken.
Ich habe auch alle Definitionen angegeben eventuell musst Du andere Skills angeben. Ich habe Dein player Skript bis auf ein paar kleine Veränderungen
so gelassen.
Hier einmal das Skript:

Code:
 
define anim_perc,skill21;
define jumping,skill22;
define force_x,skill23;
define force_y,skill24;
define force_z,skill25;
define velocity_x,skill26;
define velocity_y,skill27;
define velocity_z,skill28;
define rel_speed_x,skill30;
define rel_speed_y,skill31;
define rel_speed_z,skill32;
define abs_speed_x,skill33;
define abs_speed_y,skill34;
define abs_speed_z,skill35;
define gravity,skill36;

var friction = 0.7; // Reibung
var set_walk;

function handle_gravity()
{
result = c_trace(vector(my.x,my.y,my.z-15),vector(my.x,my.y,my.z - 1000),use_box | ignore_me | ignore_passable);
if (result > 10) // Abstand grösser als 10 Quants
{
my.force_z -= my.gravity * time_step;
if(result > 100)
{
my.jumping = 2;
}
}
else
{
if(my.jumping != 0 && result < 0) {my.jumping = 0;}
if(my.jumping == 0) // Kein jumping
{
my.force_z = -0.1 * result;
if(key_space == 1)
{
while (key_space == 1){wait (1);} // Solange Taste gedrückt ist kein jumping
my.jumping = 1;
my.force_z = 25; // Sprunghöhe
}
}
if(my.jumping == 2)
{
my.force_z = -0.1 * result;
if(my.jumping == 2 && result <= 0){my.jumping = 0;}
}
}
if(result >= 0 && result <= 10 && my.jumping == 2)
{
my.z -= (result); my.velocity_z = 0; my.force_z = 0;
}
my.velocity_z = time_step * my.force_z + max(1-time_step * friction,0) * my.velocity_z;
my.abs_speed_z = my.velocity_z * time_step; // Absolute Bewegung nach unten
}

action player_init()
{
my.narrow = on;
my.gravity = 6; // Anziehungskraft nach unten
player = me;
while(my != null)
{

update_views();
if(key_s == on)
{
set_walk = 16;
}
else
{
set_walk = 10;
}
my.rel_speed_x = set_walk * (key_cuu - key_cud) * time_step;
//////////////////Player geht vorwärts////////////////////////
if(key_cuu==on)
{
if(key_cuu==on && key_s==on)
{
move_forward += 12*time;
//my.force_x += 16 * time_step;
//c_move(me,vector(16*time,0,0),nullvector,GLIDE);
ent_animate(me,"run",move_forward,anm_cycle);
}
else
{
move_forward += 7*time;
//my.force_x += 10 * time_step;
//c_move(me,vector(10*time,0,0),nullvector,GLIDE);
ent_animate(me,"run",move_forward,anm_cycle);
}

}
//////////////////////////////////////////////////////////////

//////////////////Player dreht sich nach rechts///////////////
if(key_cul==on)
{
my.pan += 10 * time_step;
cam_angle += 10 * time_step;
}
//////////////////////////////////////////////////////////////

//////////////////Player dreht sich nach Links////////////////
if(key_cur==on)
{
my.pan -= 10 * time_step;
cam_angle -= 10 * time_step;
}
//////////////////////////////////////////////////////////////

//////////////////Player gehts rückwärts//////////////////////
if(key_cud==on)
{
move_backward += 3*time;
//my.force_x -= 10 * time_step;
//c_move(me,vector(10*time,0,0),nullvector,GLIDE);
ent_animate(me,"run",move_backward,anm_cycle);
}
//////////////////////////////////////////////////////////////

//////////////Player-Attacke//////////////////////////////////
if(key_w==on)
{
while(attack_mode<100)
{
attack_mode += 6*time;
ent_animate(me,"attack",attack_mode,anm_cycle);
wait(1);
}
attack_mode=0;
}
//////////////////////////////////////////////////////////////

///////////////Keine Taste ist gedrückt///////////////////////
if(key_any==off)
{
ent_blend("stand",stand_mode,100);
stand_mode += 3*time;
ent_animate(me,"stand",stand_mode,anm_cycle);
}
//////////////////////////////////////////////////////////////
my.anim_perc += 10*time;
vec_set(my.abs_speed_x,nullvector);
handle_gravity();
c_move(me,my.rel_speed_x,my.abs_speed_x,glide | use_box | ignore_me);
wait(1);
}
}



Ich hoffe Du kommst damit klar.