Scripten = geschwindigkeit

Mapicted
moin,
Für ein Script bräuchte ich den befehl womit man die geschwindigkeit eines zu bewegneden Objektes festlegen kann.

Hiermit kann man ja nur die geschindikeit mit Strecke/Sekunden festlegen.
xxx moveTo((-200, 1480, 90),20,2,2);

Aber da ich was am scripten bin was während der bewegung die richtung änderen kann, ist die Bewegung je nach strecke unterschiedlich schnell.

Gibt es sowas in der Art wie das?:
xxx moveTo((-200, 1480, 90) mit einer geschwindikeit von 5we/sec );
OLD MAN WITH GUN
Hmm, ich weiß jetzt nicht exakt ob meine Überlegungen stimmen, aber so solltest du es hinbekommen.

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
5:
6:
start = ent.origin; //aktuelle Position des Objektes
dest = (x, y, z); // Zielpunkt des Objektes
dist = distance(start, dest); // Entfernung zwischen Start- und Zielpunkt
speed = (1 / 5) * dist; // Zeit für Enfernung bei 5 WE / Sekunde

ent moveto(dest, speed); // Objekt zur neuen Position bewegen



Nur musst du jetzt beachten, das du keine feste Zeit für Beschleunigung und Abbremsen mehr angeben kannst, das die Gesamtzeit "speed" kleiner sein kann). Da kannst du dann nur noch einen prozentualen Wert nehmen, z.B
ent move(dest, speed, (speed / 10), (speed / 10));
Mapicted
Danke, hat funktioniert.
Plattform bewegt sich jetzt per schalter hin und her, das funktioniert auch alles


Jetzt wollte ich noch einen dritten schalter einbauen womit ich die Plattforum stoppen kann.

Habs mal mit einigen Befehlen versucht aber bei allen der selbe bad syntax error.


Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
				stop()
{
cat1 = getent ("cat1","targetname"); 
trig_cat1_stop = getent ("trig_cat1_stop","targetname"); 		
while (1)
{
trig_cat1_stop waittill ("trigger");

cat1 	movedone;
//cat1 	donemove;
//cat1 	moveend;
//cat1 	endmove;
//cat1	endon;

}
}

OLD MAN WITH GUN
Ich wüsste jetzt nicht, das man nicht ohne Trick einen einmal gestarteten move Befehl stoppen kann.
Der Trick wäre, dem entity einen weiteren move Befehl geben. Dieser würde ihm als Ziel seine eigene aktuelle Position geben.

Im Sinne:

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
stop(ent) // das Entity (Plattform) der Funktion mit übergeben
{
  trig_stop = getent ("trig_stop","targetname");
  while(1)
  {
    trig_stop waittill("trigger");
    ent moveto(ent.origin, 0.1);
    wait 0.1;
  }
}


Das sollte eigentlich funktionieren.
Mapicted
wow, nicht schlecht das funktioniert Grins 1

Also jetzt funktioniert alles, bis auf einen kleinen Fehler.

Wenn die Plattform an einem äußerem Endpunkt steht und man drückt den Schalten womit er sich normal in diese richtung bewegen soll kommt die Fehlermelung:


Hier mal das ganze Script:

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
main()

{
thread link();
thread cat1_move_1();
thread cat1_move_2();
stop();
}



				link()
{
trig_cat1_1 = getent ("trig_cat1_1","targetname"); 		
trig_cat1_2 = getent ("trig_cat1_2","targetname"); 
trig_cat1_stop = getent ("trig_cat1_stop","targetname");
trig_cat1_1 enablelinkto(); 
trig_cat1_2 enablelinkto(); 
trig_cat1_stop enablelinkto(); 
}



				cat1_move_1()
{
cat1 = getent ("cat1","targetname"); 			// Plattform
trig_cat1_1 = getent ("trig_cat1_1","targetname"); 		// richtung -200, 1480, 90
trig_cat1_2 = getent ("trig_cat1_2","targetname");  		// richtung 1072, 1480, 90
trig_cat1_stop = getent ("trig_cat1_stop","targetname");
//mg_1 = getent ("mg_1","targetname");
while (1)
{
trig_cat1_2 waittill ("trigger");
trig_cat1_1 linkto(cat1);
trig_cat1_2 linkto(cat1);
trig_cat1_stop linkto(cat1);
//mg_1 linkto (cat1);

start = cat1.origin; //aktuelle Position des Objektes
dest = (1072, 1480, 90); // Zielpunkt des Objektes
dist = distance(start, dest); // Entfernung zwischen Start- und Zielpunkt
speed = (1 / 35) * dist; // Sekund / WE

cat1 moveto(dest, speed); // Objekt zur neuen Position bewegen
}
}



				cat1_move_2()
{
cat1 = getent ("cat1","targetname"); 
trig_cat1_1 = getent ("trig_cat1_1","targetname"); 		
trig_cat1_2 = getent ("trig_cat1_2","targetname");  		
trig_cat1_stop = getent ("trig_cat1_stop","targetname");
//mg_1 = getent ("mg_1","targetname");
while (1)
{
trig_cat1_1 waittill ("trigger");
trig_cat1_1 linkto(cat1);
trig_cat1_2 linkto(cat1);
trig_cat1_stop linkto(cat1);
//mg_1 linkto (cat1);

start = cat1.origin; //aktuelle Position des Objektes
dest = (-200, 1480, 90); // Zielpunkt des Objektes
dist = distance(start, dest); // Entfernung zwischen Start- und Zielpunkt
speed = (1 / 35) * dist; // Sekund / WE

cat1 moveto(dest, speed); // Objekt zur neuen Position bewegen

}
}

stop()
{
cat1 = getent ("cat1","targetname"); 
trig_cat1_stop = getent ("trig_cat1_stop","targetname");
  while(1)
  {
    trig_cat1_stop waittill("trigger");
    cat1 moveto(cat1.origin, 0.1);
    wait 0.1;
  }
}




Ich weiss nicht wie ich den entsprechenden Trigger deaktivieren kann sobald die Plattform an einem der Edpunkte angelangt ist oder wie ich sonst den Fehler beheben kann.
OLD MAN WITH GUN
Hab deinen script mal ein "wenig" umbeschrieben. Ich hoffe mal, es ist alles einigermaßen zu verstehen (manches ist für einige nicht direkt nachzuvollziehen).

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
main()
{
  level.cat1_stand 	= true;
  cat1_start = (-200, 1480, 90);
  cat1_dest = (1072, 1480, 90);
  cat1 = getent ("cat1","targetname"); 
  trig_cat1_1 = getent ("trig_cat1_1","targetname"); 		
  trig_cat1_2 = getent ("trig_cat1_2","targetname"); 
  trig_cat1_stop = getent ("trig_cat1_stop","targetname");
  trig_cat1_1 enablelinkto(); 
  trig_cat1_2 enablelinkto(); 
  trig_cat1_stop enablelinkto();
  trig_cat1_1 linkto(cat1);
  trig_cat1_2 linkto(cat1);
  trig_cat1_stop linkto(cat1);

  trig_cat1_1 thread cat1_move_2(cat1, cat1_start, cat1_dest);
  trig_cat1_2 thread cat1_move_1(cat1, cat1_start, cat1_dest);
  trig_cat1_stop thread stop(cat1);
}


cat1_move_1(cat1,cat1_start, cat1_dest)
{
  while (1)
  {
    self waittill ("trigger");
    cat1 move_me(cat1_start, cat1_dest);
  }
}

cat1_move_2(cat1, cat1_start, cat1_dest)
{
  while(1)
  {
    self waittill("trigger");
    cat1 move_me(cat1_dest, cat1_start);
  }
}

move_me(cat1_start, cat1_dest)
{
  if(level.cat1_stand && (self.origin != cat1_dest))
  {	
    dist = distance(self.origin, cat1_dest);
    speed = (1 / 35) * dist;
    level.cat1_stand = false;
    self moveto(cat1_dest, speed);
    self waittill("movedone");
    level.cat1_stand = true;
  }
  wait 0.1;
}

stop(cat1)
{
  while(1)
  {
    self waittill("trigger");
    if (!level.cat1_stand)
      cat1 moveto(cat1.origin, 0.1);
    wait 0.1;
  }
}


Wenn die Plattform jetzt an einem Ende angekommen ist und du betätigst noch einmal den schalter für die Fahrt in diese Richtung, passiert nichts mehr. Ich habe es auch so gemacht, das du immer nur über den Schalter "stop" die Richtung ändern kannst. Die Richtungsschalter sind während der Bewegung inaktiv.
Mapicted
danke, funktioniert einwandfrei so.