Effekte bewegen (erledigt)

BadMan
So hab auch ma wieder ne frage und zwar hab ich einen Effekt mit einem „script_origin“ „targetname– fx1“ und folgendem Skript eingebunden

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:
movelight1(){


	lamp = getent("lampmove2","targetname");
	trig = getent ("lightswitch1", "targetname");
	glow = getent ("fx1","targetname");
	
	
	level._effect[ "beacon_glow" ] = loadfx( "misc/aircraft_light_wingtip_green" );
	maps\mp\_fx::loopfx("beacon_glow", (glow.origin), 3, (glow.origin) + (0, 0, 90));
	
	
	while(1){
	
		trig waittill("trigger");
		

		
		lamp movez(20,2);
		glow movez(20,2);
		lamp rotateyaw(270,2,0,0);
		glow rotateyaw(270,2,0,0);
		lamp waittill("movedone");

		
		
		trig waittill("trigger");
		lamp movez(-20,2);
		glow movez(-20,2);
		lamp rotateyaw(-270,2,0,0);
		glow rotateyaw(-270,2,0,0);
		lamp waittill("movedone");

	}
}


Klappt auch soweit alles nur bewegt sich der script origin nicht hat da jemand ne Lösung wie ich den script origin alleine bewegen oder wie hier irgendwie an die Lampe binden kann oder is das gar nicht möglich
steinacker
also irgendwie kapier ich das nich
ich hab heute schonmal was dazu gepoustet und nu fehlt das verwirrt
oder war da der böse admin am werk Teufel
noja jedenfalls könntest du mal versuchen mit dem befehl linkto deinen script_origin an deine lampe zu hängen, so wie das nightwing bei der schnellbahn das mal gepoustet hat

elevator2 linkto (elevatormodel2);
BadMan
Das hab ich auch schon mal probiert hab’s aber nochma getestet was mich wundert is das bei oben dem Skript keine Fehlermeldung kommt allerdings bewegt sich trotzdem nur die Lampe

Wenn ich ein anderes Skript nehme

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:
fan_spin(){

	rotate_obj = getentarray("lampmove2","targetname");
	glow = getent("fx1","targetname");

	
	
	level._effect[ "beacon_glow" ] = loadfx( "misc/aircraft_light_wingtip_green" );
	maps\mp\_fx::loopfx("beacon_glow", (glow.origin), 3, (glow.origin) + (0, 0, 90));	
	
	
	if(isdefined(rotate_obj)){
	
		for(i=0;i<rotate_obj.size;i++){
		
			rotate_obj[i] thread ra_rotate();
		}
	}
	
	glow linkto(rotate_obj);
	}


ra_rotate(){

	if (!isdefined(self.speed) || self.speed == 0)
		self.speed = 5;
		
	if (!isdefined(self.script_noteworthy))
		self.script_noteworthy = "y";

	while(1){
	
		
		if (self.script_noteworthy == "y")
			self rotateYaw(360,self.speed);
			
		else if (self.script_noteworthy == "x")
			self rotateRoll(360,self.speed);
			
		else if (self.script_noteworthy == "z")
			self rotatePitch(360,self.speed);
			
		wait ((self.speed)-0.1); 
	}
}



Bekomme ich die Fehlermeldung

„Not an entity“ in der Zeile „glow linkto (rotate_obj);“
OLD MAN WITH GUN
Das script_origin wird sich schon bewegen, nur der Effekt nicht, da Effekte nicht bewegt werden können. Der wird da abgespielt, wo sich das script_origin befand, als der Effekt aufgerufen wurde (egal, wo sich das script_origin danach hinbewegt).

Um eine Bewegung eines Effektes zu simulieren bedarf es da schon ein wenig mehr.
Zuerst sollte man den Effekt so abspielen, das er nicht eigenständig als Schleife abgespielt wird (die muss man in diesem Fall scripten).

Dann nimmt man statt eines script_origin das xmodel tag_origin (ist ein unscheinbares kleines Dreieck, welches einen TAG besitzt, an dem man einen Effekt per playfxontag abspielen lassen kann).

Müsste dann in etwa so aussehen:

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:
movelight1()
{
  lamp = getent("lampmove2","targetname");
  trig = getent ("lightswitch1", "targetname");
  glow = getent ("fx1","targetname"); //das wäre dann das xmodel tag_origin als script_model
	
  //muss gegen einen Effekt getauscht werden, der nur einmal abgespielt wird und nicht selber einen Loop hat) 
  level._effect[ "beacon_glow" ] = loadfx( "misc/aircraft_light_wingtip_green" );

  glow thread let_it_glow();
	
  while(1)
  {
    trig waittill("trigger");
				
    lamp movez(20,2);
    glow movez(20,2);
    lamp rotateyaw(270,2,0,0);
    glow rotateyaw(270,2,0,0);
    lamp waittill("movedone");

    trig waittill("trigger");
    lamp movez(-20,2);
    glow movez(-20,2);
    lamp rotateyaw(-270,2,0,0);
    glow rotateyaw(-270,2,0,0);
    lamp waittill("movedone");
  }
}

let_it_glow()
{
  while(1)
  {
    playfxontag (level._effect["beacon_glow"], self , "tag_origin");
    wait 0.5; // muss dann der Effektdauer angepasst werden, damit es nach einem Loop aussieht
  }
}

BadMan
AHA hab mir so was schon gedacht so bewegt sich das ganze auch aber nur mit move nicht mit rotate und auch nur in eine Richtung also Z und X geht nicht gibt’s da noch ne Lösung oder ist mehr nicht möglich

Und natürlich den allergrößten dank an dich OMWG was würden wir nur ohne dich machen
steinacker
zum drehen kannst du auch mal diese befehle versuchen

fan1 rotateRoll( 360, 5, 0, 0 );
fan2 rotateyaw( 360, 5, 0, 0 );
fan3 rotatePitch( 360, 5, 0, 0 );

das sind die drei ringe, die ich in der mp_voyager4 um die "spawnboxen" gemacht hab

rotateRoll = x-achse
rotateyaw = y-achse
rotatePitch = z-achse

bin mir da aber grad nich so sicher, mit den achsen
OLD MAN WITH GUN
Link das tag_origin model an das Lampenmodel, dann sollte es eigentlich alle Bewegungen mitmachen. Und du sparst die die doppelten Befehle für move usw. (sollte eigentlich gehen)

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:
movelight1()
{
  lamp = getent("lampmove2","targetname");
  trig = getent ("lightswitch1", "targetname");
  glow = getent ("fx1","targetname"); //das wäre dann das xmodel tag_origin als script_model
	
  //muss gegen einen Effekt getauscht werden, der nur einmal abgespielt wird und nicht selber einen Loop hat) 
  level._effect[ "beacon_glow" ] = loadfx( "misc/aircraft_light_wingtip_green" );

  glow thread let_it_glow();
  glow linkto(lamp);
	
  while(1)
  {
    trig waittill("trigger");
				
    lamp movez(20,2);
    lamp rotateyaw(270,2,0,0);
    lamp waittill("movedone");

    trig waittill("trigger");
    lamp movez(-20,2);
    lamp rotateyaw(-270,2,0,0);
    lamp waittill("movedone");
  }
}

let_it_glow()
{
  while(1)
  {
    playfxontag (level._effect["beacon_glow"], self , "tag_origin");
    wait 0.5; // muss dann der Effektdauer angepasst werden, damit es nach einem Loop aussieht
  }
}

BadMan
Wunderbar funzt und passt so besser zur Lampe das obere Skript geht auch unterschied mit linkto ist der Mittelpunkt der dreung ist mitte Lampen model. ohne mitte Effekt was mit bei der kleinen grünen Leuchtkugel nicht gleich aufgefallen ist aber mit nachdenken und anderem Effekt doch logisch nachvollziehbar Bin doof...

Aber hab noch was gibt es noch was anderes außer playfxontag um einen loopeffekt zu spielen oder so http://www.infinityward.com/Script/ ist nicht mehr da sonst hätte ich da ja ma nachgesehen hoffe die seite ist bald wieder online

Und noch was wofür sind denn tag_laser und tag_flash modelle der flash läst sich auf jeden fall so nutzen wie origin aber da läst sich doch bestimmt was anderes mit anstellen und was ist überhaupt ein Tag verwirrt
bangingbernie
Die Skriptseite findest Du HIER.
Nightwing
oder hier: Klick
BadMan
Dank euech werde mal schauen ob ich was finde
BadMan
So neues problem hab ma nen aufzug gemacht mit 2 lichtern rot und grün nach oben leuchtet grün nach unten rot klapt auch ohne fehler

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:
88:
89:
90:
91:
92:
93:
main()
{
level._effect[ "fx_on" ] = loadfx( "test_fx/auf_on" );
level._effect[ "fx_off" ] = loadfx( "test_fx/auf_off" );
level.elevatorDown = true;
level.elevatorMoving = false;
thread elevator_start();
}

elevator_start()
{
elevator = getentarray ("01trig","targetname");
if ( isdefined(elevator) )
for (i = 0; i < elevator.size; i++)
elevator[i] thread elevator_think();
}

elevator_think()
{
while (1)
{
self waittill ("trigger");
if (!level.elevatorMoving)
thread elevator_move();
}
}

elevator_move()
{
elevatormodel = getent ("01", "targetname");
fx1 = getent ("01fx01","targetname");
fx2 = getent ("01fx02","targetname");
level.elevatorMoving = true;
speed = 1.1;
height =128;



fx1 linkto(elevatormodel);
fx2 linkto(elevatormodel);


if (level.elevatorDown) {

//elevatormodel playsound ("elevator");

fx1 thread fx1();
elevatormodel movez (height, speed);
elevatormodel waittill ("movedone");
level.elevatorDown = false;

}

else
{

//elevatormodel playsound ("elevator");

fx2 thread fx2();
elevatormodel movez (height - (height * 2), speed);
elevatormodel waittill ("movedone");
level.elevatorDown = true;
}
level.elevatorMoving = false;
}



fx1()
{
  while(1)
  {
  if (!level.elevatorMoving)
		return;
    playfxontag (level._effect["fx_on"], self , "tag_origin");
    wait 0.1; // muss dann der Effektdauer angepasst werden, damit es nach einem Loop aussieht

  }

}


fx2()
{
  while(1)
  {
    if (!level.elevatorMoving)
		return;
    playfxontag (level._effect["fx_off"], self , "tag_origin");
    wait 0.1; // muss dann der Effektdauer angepasst werden, damit es nach einem Loop aussieht
	
  }
}



nur wollte ich eigentlich das wenn der aufzug steht grün leuchtet und bei der fahrt rot erstma zumindest

also meine frage gibt es da ne möglichkeit ohne das ganze skript zu endern problem is halt fx1 linkto aufzug da man sonst nen dreieck in der luft hat
BadMan
so habe das problem gelöst


Zitat:

main()
{

fx2 = getent ("01fx02","targetname");

level._effect[ "fx_on" ] = loadfx( "test_fx/auf_off" );
level._effect[ "fx_off" ] = loadfx( "test_fx/auf_on" );

level.elevatorDown = true;
level.elevatorstand = true;
level.elevatorMoving = false;
thread elevator_start();

fx2 thread fx2();
}

elevator_start()
{
elevator = getentarray ("01trig","targetname");
if ( isdefined(elevator) )
for (i = 0; i < elevator.size; i++)
elevator[i] thread elevator_think();
}

elevator_think()
{
elevatormodel = getent ("01", "targetname");

while (1)
{
self waittill ("trigger");
if (!level.elevatorMoving)
thread elevator_move();
}
}

elevator_move()
{
elevatormodel = getent ("01", "targetname");
fx1 = getent ("01fx01","targetname");
fx2 = getent ("01fx02","targetname");

level.elevatorMoving = true;
speed = 5;
height =360;



fx1 linkto(elevatormodel);
fx2 linkto(elevatormodel);


if (level.elevatorDown) {

//elevatormodel playsound ("elevator");
level.elevatorstand = false;
fx1 thread fx1();
elevatormodel movez (height, speed);
elevatormodel waittill ("movedone");
level.elevatorDown = false;
level.elevatorstand = true;
fx2 thread fx2();
}

else
{

//elevatormodel playsound ("elevator");
level.elevatorstand = false;
fx1 thread fx1();
elevatormodel movez (height - (height * 2), speed);
elevatormodel waittill ("movedone");
level.elevatorDown = true;
level.elevatorstand = true;
fx2 thread fx2();
}
level.elevatorMoving = false;
}



fx1()
{
while(1)
{
if (!level.elevatorMoving)
return;

playfxontag (level._effect["fx_on"], self , "tag_origin");
wait 0.122; // muss dann der Effektdauer angepasst werden, damit es nach einem Loop aussieht

}

}


fx2()
{
while(1)
{
if (!level.elevatorstand)
return;

playfxontag (level._effect["fx_off"], self , "tag_origin");
wait 0.122; // muss dann der Effektdauer angepasst werden, damit es nach einem Loop aussieht

}
}



findet ihr übrigens auch in der testmap von hier