ent_create

Posted By: Thomas

ent_create - 09/19/08 11:28

Hallo hab eine Frage zu ent_create
Hier ist der Script dazu
aber wie kann ich es machen das es aufhört? z. B. ab einer bestimmten Entfernung zum Player wird alles entfernt.

Hoffe jemand kann helfen

Gruss Thomas



while (1)
{
temp.x = 5000 - random(10000);
temp.y = 5000 - random(10000);
temp.z = 100 - random(200);

temp_var = random(100);
if (temp_var < 0.13)
{
ent_create (asteroid1_mdl, temp,move_asteroid);
}
if ((temp_var >= 0.13) && (temp_var < 0.16))
{
ent_create (asteroid2_mdl, temp,move_asteroid);
}
if (temp_var > 0.16)
{
ent_create (asteroid3_mdl, temp,move_asteroid);
}
wait (2);
}
Posted By: Pappenheimer

Re: ent_create - 09/19/08 14:25

Das klingt nach 3 verschiedenen ineinander vermischte Fragen!

Wie ist Dein Konzept?

Sollen die Asteroiden nur in der Nähe des Players erstellt werden und in einer bestimmten Distanz wieder entfernt werden?

Dann müßtest Du die Erschaffung der Asteroiden in eine if-Abfrage einbetten:
(in pseudo-code:)
if(vec_dist(player.x, temp.x) KLEINER Höchstabstand) --> dann erschaffe!

und in die move_asteroid
schreibst du eine while abfrage:

while((vec_dist(player.x, temp.x) KLEINER Höchstabstand) --> dann bewege mich wie einen Asteroiden

und dahinter ausserhalb der Klammer schreibst

ent_remove(me);

Wie gesagt, ist nur als Pseudocode geschrieben.
Posted By: Thomas

Re: ent_create - 09/19/08 15:59

Es soll ein Asteroidenfeld werden.
Also es wird ein Modell ins Level gesetzt von der aus das Feld erzeugt wird. In angegebenen xyz Richtungen.
In diesem Bereich werden die Asteroiden erzeugt.
Mein Prob ist jetzt das ganze zu Steuern also wenn der Player garnicht im Feld ist sollen natürlich auch keine erzeugt werden.
Und wenn der Player im Feld ist sollen Sie erzeugt werden zufällig und unterschiedliche Grössen aber auch nur um denn Player herum nicht das ganze Feld.

MFG Thomas
Hier nochmal der Code


string asteroid1_mdl = <asteroid1.mdl>;
string asteroid2_mdl = <asteroid2.mdl>;
string asteroid3_mdl = <asteroid3.mdl>;



function move_asteroid()
{
var meteor_angle;
var meteor_speed;
my.enable_impact = on;
my.enable_entity = on;
//my.event = destroy_asteroid;
my.scale_x = 1 + random(0.5);
my.scale_y = my.scale_x;
my.scale_z = my.scale_x;
my.skill10 = my.scale_x; // store the scale in skill10 - we will use it to adjust the size of the explosion later
meteor_angle.x = 3 - random(6); // random pan speed
meteor_angle.y = 3 - random(6); // random tilt speed
meteor_angle.z = 3 - random(6); // random roll speed
meteor_speed.x = 0;
meteor_speed.y = 0;
meteor_speed.z = 0;
while (my.x+my.y+my.z > -1000)
{
my.pan += meteor_angle.x * time;
my.tilt += meteor_angle.y * time;
my.roll += meteor_angle.z * time;
move_mode = ignore_you + ignore_passable;
ent_move (nullvector, meteor_speed);
wait (1);
}
sleep (1);
ent_remove (my);
}

material mat_Asteroid
{
//effect="NormalShader.fx";
flags=TRANSLUCENT;
ambient_red=30;
ambient_green=30;
ambient_blue=30;
diffuse_red=155;
diffuse_green=155;
diffuse_blue=155;
specular_red=155;
specular_green=155;
specular_blue=155;
}


action asteroid_maker
{
my.material=mat_Asteroid;
var temp_var;
my.passable = on;
my.invisible = off;
while (1)
{
temp.x = 5000 - random(5200);
temp.y = 5000 - random(5200); // -5,000 to 5,000
temp.z = 1000 - random(1200);

temp_var = random(100);
if (temp_var < 0.33)
{
ent_create (asteroid1_mdl, temp, move_asteroid);
}
if ((temp_var >= 0.33) && (temp_var < 0.16))
{
ent_create (asteroid2_mdl, temp, move_asteroid);
}
if (temp_var > 0.66)
{
ent_create (asteroid3_mdl, temp, move_asteroid);
}
wait (2);
}
}
Posted By: Pappenheimer

Re: ent_create - 09/19/08 17:20

Dann könntest du ein Zentrum des Asteroidenfelds angeben, und eine bestimmte Distanz zu diesem Zentrum als 2.Bedingung für die Erschaffung der Asteroiden angeben.
Posted By: Thomas

Re: ent_create - 09/19/08 19:23

Das Zentrum ist ja das Model die die Action asteroid_maker bekommt davon je 5000 in jede Richtung das klappt ja schon.

Aber es werden zu viele generiert wie beschränge ich das auf einen maximal Wert (siehe Script )
Posted By: Thomas

Re: ent_create - 09/19/08 19:25

Originally Posted By: Thomas
Das Zentrum ist ja das Model die die Action asteroid_maker bekommt davon je 5000 in jede Richtung das klappt ja schon.

Aber es werden zu viele generiert wie beschränge ich das auf einen maximal Wert (siehe Script )


Bzw. das die Asteroiden erst geladen und wieder verschwinden wenn der Player in der Nähe ist und wenn er weit weg ist keine Asteroiden mehr da sind ?
Posted By: Pappenheimer

Re: ent_create - 09/19/08 20:58

Ja, entschuldige, Deinen Code hatte ich mir nicht näher angeschaut.

Du setzt eine Variable zum Zählen und eine Variable für die Höchstmenge ein.

Die Variable für die Höchstmenge legst bei der Deklarierung fest. Du kannst sie über die Console im Spiel dan passen und später im Skript entsprechend korrigieren.

Die Zählvariable setzt Du vor der while-Schleife des Asteroidenmachers auf 0 und zählst sie nach jedem ent_create in der Schleife um einen hoch.

In die While-Schleife fügst Du eine if-Bedingung "Falls der Zählwert kleiner dem Höchstwert ist" ein, innerhalb derer dann die Asteroiden erschaffen werden.
© 2024 lite-C Forums