1 registered members (AndrewAMD),
1,298
guests, and 2
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
Nur einmal bewegen bitte!
#333721
07/18/10 16:56
07/18/10 16:56
|
Joined: May 2010
Posts: 48
Ich_bin_Batman
OP
Newbie
|
OP
Newbie
Joined: May 2010
Posts: 48
|
Hallo liebe 3DGS Community, Ich habe ein Script für meine Kiste geschrieben, eine ganz normale Kiste eben. Das Script sollte so funktionieren: Die kiste ist da, man schlägt einmal drauf und sie bewegt sich ein Stückchen,man schlägt noch einmal sie bewegt sich wieder ein Stückchen und beim dritten mal geht sie kaputt. So weit in der Theorie.... Jedoch wenn ich meine Kiste "angreife" bewegt sie sich(besonders bei einem längeren Angriff) 2 mal. Kurz: Es ist so als würde ich einmal angreifen die Kiste jedoch 2 mal verschieben.Ich hoffe ihr versteht es denn ich bin nicht allzu gut im schildern von Problemen. Der Code für den Player basiert auf dem KHMovement von David Lancaster. Code der Kiste:
var staerke=0;
var entfernung=20; //wie weit sie sich bewegt
var laenge = 0;
entity* target_enemy;
var boom_var;
var animdist;
action Kiste
{
my.gravity = 6;
my.polygon = ON;
your = target_enemy;
my.skill80==1;
you = player;
my.shadow = on;
my.health = 5000;
enemy_NR = 2;
my.enable_scan = on;
my.enable_entity = ON;
my.FLAG1 = on;
Lebensanzeige_verschwindet();
Kiste_Schaden();
while(animdist < 100)
{
IF (my.hit_by_player == 1)
{
my.move_x = player.move_x;
my.move_y = player.move_y;
my.move_z = player.move_z;
while(player == NULL){wait(1);}
c_move(my,nullvector,my.move_x,use_aabb | ignore_passable | glide);
IF (player.animblend == blend || player.animblend < attack_a || my.animblend > attack_f) { my.hit_by_player = 0; }
}
wait(1);
IF (player.animblend >= stand && target_enemy == my && player_lock_on == 0) && (player.animblend < attack_a || player.animblend > attack_f) { target_enemy = null; }
IF (target_enemy == my && vec_dist(my.x,player.x) > 600) { target_enemy = null; }
wait(1);
if(my.health < -150)
{
not_visiert();
my.TRANSLUCENT = on;
my.alpha = 100;
my.enable_scan = off;
my.passable = on;
while(animdist < 100)
{
animdist += 5.5 * time_step; //gewünschte geschwindigkeit
ent_cycle("explo",animdist);
if(animdist > 15)
{
my.alpha -= 8;
}
wait(1);
}
}
}
if(animdist > 100)
{
my.invisible = on;
animdist == 0;
Lade_c3();
}
}
function Kiste_Schaden
{
while(player == NULL){wait(1);}
while(1)
{
if(Player_hit_enemy == 1 && laenge < 6 )
{
if(player.animblend == attack_c)
{
my.health = -160;
}
staerke=0;
if(player.animblend == attack_a && player.animate < 40 || player.animblend == attack_b && player.animate < 45)
{
my.x+=entfernung*cos(atk_pen)*time_step;
my.y+=entfernung*sin(atk_pen)*time_step; //schiesse ihn in die Richtung in die er schaut
my.z+=staerke*time_step; //lass ihn in die Luft fliegen
laenge += 3*time_step;
atk_once = 1;
}
else
{
Player_hit_enemy = 0;
laenge = 0;
atk_once = 0;
}
}
else
{
Player_hit_enemy = 0;
laenge = 0;
atk_once = 0;
}
wait(1);
}
}
Es stehen ein paar Sachen drin die vollkommen unnötig sind dafür muss ich mich entschuldigen durch das ganze Rumprobieren herrscht dort einiges Durcheinander. MFG Batman
Last edited by Ich_bin_Batman; 07/19/10 01:12.
|
|
|
Re: Nur einmal bewegen bitte!
[Re: jane]
#333855
07/19/10 14:41
07/19/10 14:41
|
Joined: May 2010
Posts: 48
Ich_bin_Batman
OP
Newbie
|
OP
Newbie
Joined: May 2010
Posts: 48
|
Ok das hat jetzt irgendwie nicht so ganz hingehauen. Selbst bei Sleep(200) sehe ich keine Veränderung Und beim wait(8) am ende der IF anweisung passiert folgendes: Sie bewegt sie sich ca.3 mal bei jedem Angriff , nur das sie sich jetzt nur noch ein paar Pixel weit bewegt. PS: Trotzdem,Danke für die schnelle Antwort ![smile smile](/ubb7/images/graemlins/default_dark/smile.gif)
|
|
|
Re: Nur einmal bewegen bitte!
[Re: Ich_bin_Batman]
#334126
07/21/10 13:10
07/21/10 13:10
|
Joined: Nov 2008
Posts: 216
jane
Member
|
Member
Joined: Nov 2008
Posts: 216
|
Wenn Du für den Player die KHMovement nutz, kannst Du für die bewegung der Kiste doch die Vorwärtsbewegung des Players bei der attack verwenden. In der enemy.wdl wird der Gegner ja auch bei jeder Atacke so weit zurückbewegt wie der Player vorwärts geht, und das sieht doch recht flüssig aus. In der Version der KHMovement die ich zum testen habe wird das über eine c_move(... , in der Action enemy_dummy sauber erledigt. Dort wird dem Gegner (bzw. der Kiste in Deinem Falle) einfach die Bewegung des Players als Strecke und Richtung zur Bewegung gegeben.
Ich werde es im Laufe des Nachmittags mal durchtesten.
Last edited by jane; 07/21/10 13:23.
|
|
|
Re: Nur einmal bewegen bitte!
[Re: jane]
#334163
07/21/10 16:50
07/21/10 16:50
|
Joined: Nov 2008
Posts: 216
jane
Member
|
Member
Joined: Nov 2008
Posts: 216
|
Versuchs mal auf der Basis, natürlich müssen Deine Explosion usw. wieder eingefügt werden, aber die Bewegung der Kiste sollte so hinhauen. Wenn in der Kiste_Schaden nur noch Test-Variablen gesteuert werden ... ist die überflüssig.
var staerke=0;
var entfernung=20; //wie weit sie sich bewegt
var laenge = 0;
var Player_hit_enemy;
var atk_once = 0;
DEFINE health, skill20;
entity* target_enemy;
var boom_var;
var animdist;
function Kiste_Schaden;
function Kiste_gravity()
{
trace_mode = ignore_me+ignore_passable+use_box;
result = trace(vector(my.x,my.y,my.z),vector(my.x,my.y,my.z - 4000));
IF (result > 0) { my.z -= 1 * time_step; }
}
action Kiste
{
my.gravity = 6;
my.polygon = ON;
your = target_enemy;
my.skill80==1;
you = player;
my.shadow = on;
my.health = 500;
// enemy_NR = 2;
my.entity_type = 2;
my.enable_scan = on;
my.FLAG1 = on;
//Lebensanzeige_verschwindet();
Kiste_Schaden();
while(player == NULL){wait(1);}
while(1)
{
Kiste_gravity();
IF (my.hit_by_player == 1)
{
my.move_x = player.move_x;
my.move_y = player.move_y;
my.z+=2*time_step; //lass Kiste in die Luft fliegen
c_move(my,nullvector,my.move_x,use_polygon | ignore_passable | glide);
IF (player.animblend == blend || player.animblend < attack_a) { my.health-=240; my.hit_by_player = 0; }
}
IF (player.animblend >= stand && target_enemy == my && player_lock_on == 0) && (player.animblend < attack_a || player.animblend > attack_f) { target_enemy = null; }
IF (target_enemy == my && vec_dist(my.x,player.x) > 300) { target_enemy = null; }
if(my.health < 0)
{
// not_visiert();
my.TRANSLUCENT = on;
my.alpha = 100;
my.enable_scan = off;
my.passable = on;
target_enemy = null;
while(animdist < 100)
{
animdist += 5.5 * time_step; //gewünschte geschwindigkeit
ent_cycle("explo",animdist);
if(animdist > 15)
{
my.alpha -= 8;
}
wait(1);
}
}
wait(1);
}
if(animdist > 100)
{
my.invisible = on;
// animdist == 0;
//Lade_c3();
}
}
function Kiste_Schaden
{
while(1)
{
if(my.health > 0)
{
laenge += 3*time_step;
atk_once = 1;
}
else
{
Player_hit_enemy = 0;
laenge = 0;
atk_once = 0;
}
wait(1);
}
}
|
|
|
Moderated by mk_1, Perro, rayp, Realspawn, Rei_Ayanami, rvL_eXile, Spirit, Superku, Tobias, TSG_Torsten, VeT
|