[Tutorial] Rotierender Ventilator mit Licht-Effekten *

yoda
Vorlage von AmishThunder auf MODSonline.com

Rotierender Ventilator mit Licht-Effekten in CoD4

Dieses Tutorial erfordert ein wenig Vertrautheit mit dem Scripting und dem Lighting (= Beleuchtung), auf geht´s machen wir uns mal die Hände ein wenig schmutzig...

Erstelle als erstes das Areal, in dem Du Deinen Ventilator platzieren möchtest.

Platziere nun einen Ventilator:
Klicke mit der rechten Maustaste in der 2D-Ansicht und wähle
-> script -> script_model

Wähle nun das Model "icbm_turbofan64" oder eine von Dir gewünschte Größe (sollte im Ordner \raw\xmodel zu finden sein).

Öffne das Entity-Fenster mit der Taste "n" und vergib diese Werte:
Key targetname
Value fan1


Als nächstes platzierst Du ein Scheinwerfer-Licht (spot light).
Erstelle Dein light entity, null und verbinde sie.
Falls Du nicht sicher bist, wie das geht, schau Dir das Tutorial "Lighting 101" an.

Wähle nun "Primary_Spot" für Dein Licht und passe den Rest an Deine Wünsche an, so dass das Licht ganz klar die Oberflächen berührt, die per Schatten getroffen werden sollen.

Das war´s schon in Deiner Map!

***

Nun machen wir uns an den Script-Teil, das ist halb so wild wie es vielleicht klingen mag.

Öffne Deine .GSC-Datei.
Solltest Du keine haben, dann öffne einfach die "mp_test.gsc" und passe sie an Deinen Map-Namen an.

Erstelle Deinen Thread.
Füge dies in den ersten main()-Bereich ein:

thread fanSpin();

Unter die letzte Klammer } im main()-Bereich setzt Du diesen Code-Teil:

fanSpin() { fan1 = getEnt( "fan1" , "targetname" );
//fan2 = getEnt( "fan2" , "targetname" );

//Code by AmishThunder
// www.kramerartanddesign.com
while (1)
{
fan1 rotateyaw( 360, 5, 0, 0 );
//fan1 rotateyaw( degrees, time in seconds, 0, 0 );

//fan2 rotateyaw( 360, 5, 0, 0 );

wait 4.9;
}
}


Du kannst so viele Ventilatoren einbauen, wie Du möchtest, aber füge dann ein neues Segment ein und erhöhe die Zahl um 1.



***

by AmishThunder
http://www.kramerartanddesign.com

---

Direkt verlinken:
https://www.opferlamm-clan.de/wbb2/thread.php?threadid=10378

***
Private Grob
Kann man als getestet ansehen. Nach der Anleitung habe ich das auch schon in meiner Map eingebaut und funktioniert.


Grüße
Private Grob
Verni@hter
Das ist super, ich habe es nähmlich auch getestet nur bei mir will der venti keinen Schatten werfen. Kannste vielleicht mal ein kleines Prefab machen wenn du mal Luft zwischen durch hast mit Venti, info null und Licht das man mal sieht wie das aussehen soll. Wenn ich des mache im Radianten wirft der Venti einen Super Schatten (an meine hintere Wand) im Spiel ist davon nix zusehen.
BadMan
@ Vernichter

Hast du auch "Primary_Spot" ausgewählt
Verni@hter
Joar mal mit mal ohne. bei beiden wird der Schatten angezeigt aber nur im Radianten nicht im Spiel selber.


Hier mal mit Primary_Spot



Und hier ohne Primary_Spot

BadMan
testmap

also bei mir geht alles habs mal hochgeladen

mp_testraum.map
mp_testraum.gsc

Hoffe das hilft


Verni@hter
Auch bei deiner Version wird mir kein Schatten angezeigt.
Private Grob
Könnte das mit deinen Grafikeinstellungen zu tun haben?

Grüße
Private Grob
Verni@hter
Ich habe alles auf superhoch und auch Schatten von Bäumen werden mir angezeigt. Finds auch komisch.
Private Grob
Hast du vielleicht in dem Raum noch ein weiteres, "normales" Licht, das so hell ist, das es den Schatten vom Primary_Spot eliminiert?

Das kann nämlich durchaus passieren.

Grüße
Private Grob
Verni@hter
Ich habe da nix weiter eingefügt, ich habe mir den testraum geladen von BadMan bei ihm sieht er schatten bei mir nicht.
BadMan
Hab alles mögliche jetzt ausprobiert mir die schatten nicht anzeigen zu lassen mit compile tool nichts zu machen

Habe es aber doch geschafft indem ich im spiel unter Grafikoptionen die schatten aus gemacht habe am besten schaust da noch ma sonst weis ich auch nichts



PS.:

COD4 über Run Selected Map starten
Karte schlissen
Optionen Grafik
Programm beenden und dann wieder Run Selected Map


Verni@hter
Ich habe da alles an. Ich verstehs auch nit. Keinen Plan?
steinacker
könnt ihr mir mal verraten, wo ihr dieses ventilator model herhabt
bei mir iss das nich vorhanden
icbm_turbofan64
bangingbernie
Ist im Ordner \raw\xmodel.
-tiger-
Gibt es eine Möglichkeit den Ventilator zerstörbar zu machen?
steinacker
wenn du das xmodel als vent nimmst, dürfte es schwierig werden
denn ich denke mal dass man ein xmodel, das nicht als zerstörbar erstellt wurde, irgendwie klein kriegt

aber wenn du dir einen vent aus bruches bastelst und dann das tut noch drauf anwendest mit der zerstörbaren tür oder fenster, dann könnte das gehen
BadMan

Zitat:

Original von steinacker
wenn du das xmodel als vent nimmst, dürfte es schwierig werden
denn ich denke mal dass man ein xmodel, das nicht als zerstörbar erstellt wurde, irgendwie klein kriegt

aber wenn du dir einen vent aus bruches bastelst und dann das tut noch drauf anwendest mit der zerstörbaren tür oder fenster, dann könnte das gehen





das könnte funktionieren must die Skripte nur irgendwie verbinden
-tiger-
Danke für den tip, habe ein script_brushmodel mit folgenden Einstellungen erstellt.

script_accumulate 40
script_threshold 20
targetname destructable (dadurch werden die funktionen der _destructables.gsc aufgerufen)

rotate skript:

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:
main()
{
rotate_obj = getentarray("destructable","targetname");
if(isdefined(rotate_obj))
{
for(i=0;i<rotate_obj.size;i++)
{
rotate_obj[i] thread ra_rotate();
}
}
}

ra_rotate()
{
if (!isdefined(self.speed) || self.speed == 0)
self.speed = 25;
if (!isdefined(self.script_noteworthy))
self.script_noteworthy = "x";

while(true)
{
// rotateYaw(float rot, float time, <float acceleration_time>, <float deceleration_time>);
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); // removes the slight hesitation that waittill("rotatedone"); gives.
}
}



Soweit funktioniert das auch aber sobald das script_brushmodel weg ist wird die map geschlossen und ich befinde mich wieder im cod4 menu. Ich vermute mal das es an der rotate funktion liegt weil die nicht im skript gestopt wird.


edit:


Scheinbar habe ich mit meiner Vermutung richtig gelegen. Ich habe das rotate skript etwas verändert und nun funktioniert es mit script_brushmodel oder script_model ohne Probleme.

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:
main()
{	
rotate = getentarray("destructable","targetname");
for(i=0;i<rotate.size;i++)
rotate[i] thread rotatefan();
}

rotatefan()
{
while(1)
{
self rotateYaw(360,10, 0, 0);
self waittill ("rotatedone");
thread rotatefan();
return;
}
}

BadMan
kannste das nicht so machen dass du nur die arme abschießt dann kann’s sich auch weiterdrehen