Marvin
Hallo zusammen,
habe mal ne Frage zu den scripts:
Habe mich vor kurzem mal mit scripts befasst und eine sich öffnen lassende Tür erstellt und es hat glücklicherweise funktioniert. Jetzt habe ich eine Frage: Gibt es irgendwo eine script und eine Anleitung für eine Platte die per knopfdruck an eine andere stelle fährt? Wenn nicht kann mir es mir bitte jemand erklären und muss ich möglicherweise das _elevator script benutzen und umschreiben?
Würde mich über Hilfe sehr freuen
Lg Marvin
steinacker
da kannst du das aufzugs script dafür verwenden und anstatt movez, movex oder movey verwenden
in meiner
mp_voyager4hab ich solche "moveplatten" und shuttles eingebaut
kannst dir die map ja mal downloaden
Marvin
Okay schon mal danke aber wenn ich jetzt die Map starte kommt ein script compielie error.
steinacker
script compile error kann mehrere gründe haben
kannst du den mal pousten
Marvin
Okay als erstes steht da:
script compiele error
unexpected end of file found
}
(see console for details)
uns in der großen konsole steht:
Error:
******* script compiele error *******
Error unexpected end of file found:
(file'maps/mp/elevator.gsc', line 40)
steinacker
so spontan gesagt, fehlt da eine klammer am ende }
kannst du dein verwendestes script noch dazu pousten
Marvin
Also mein elevator script sieht so aus:
main()
{
level.elevatorDown = true;
level.elevatorMoving = false;
thread elevator_start();
}
elevator_start()
{
elevator = getentarray ("switch","targetname";);
if ( isdefined(elevator) )
for (i = 0; i < elevator.size; i++)
elevator thread elevator_think();
}
elevator_think()
{
while (1)
{
self waittill ("trigger";);
if (!level.elevatorMoving)
thread elevator_move();
}
}
elevator_move()
{
elevatormodel = getent ("elevator", "targetname";);
level.elevatorMoving = true;
speed = 10;
height =581;
if (level.elevatorDown) {
elevatormodel playsound ("elevator";);
elevatormodel movez (height, speed);
elevatormodel waittill ("movedone";);
level.elevatorDown = false;
}
else
{
elevatormodel playsound ("elevator";);
elevatormodel movez (height - (height * 2), speed);
elevatormodel waittill ("movedone";);
level.elevatorDown = true;
}
level.elevatorMoving = false;
und um es nicht zu vergessen hier noch meine mapdaten
main()
{
maps\mp\_door::main();
maps\mp\_load::main();
ambientPlay("ambient_backlot_ext");
game["allies"] = "marines";
game["axis"] = "opfor";
game["attackers"] = "axis";
game["defenders"] = "allies";
game["allies_soldiertype"] = "desert";
game["axis_soldiertype"] = "desert";
setdvar( "r_specularcolorscale", "1" );
setdvar("r_glowbloomintensity0",".25");
setdvar("r_glowbloomintensity1",".25");
setdvar("r_glowskybleedintensity0",".3");
setdvar("compassmaxrange","1800");
thread maps\mp\_door::main();
thread maps\mp\elevator::main();
}
dazu noch meine .csv:
ignore,code_post_gfx_mp
ignore,common_mp
ignore,localized_code_post_gfx_mp
ignore,localized_common_mp
col_map_mp,maps/mp/mp_jumptest.d3dbsp
rawfile,maps/mp/mp_jumptest.gsc
impactfx,mp_jumptest
sound,common,mp_jumptest,!all_mp
sound,generic,mp_jumptest,!all_mp
sound,voiceovers,mp_jumptest,!all_mp
sound,multiplayer,mp_jumptest,!all_mp
include,mptypes_desert
xmodel,weapon_saw_mg_setup
rawfile,maps/mp/_door.gsc
rawfile,maps/mp/elevator.gsc
Ich weis nicht was ich falsch gemacht habe.
Nightwing
In Zeile 41 fehlte eine }
Ausserdem war noch ein Klammerfehler drin, das else war ausserhalb der Klammer.
Code 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:
|
main(){
level.elevatorDown = true;
level.elevatorMoving = false;
thread elevator_start();
}
elevator_start(){
elevator = getentarray ("switch","targetname";);
if ( isdefined(elevator) )
for (i = 0; i < elevator.size; i++)
elevator thread elevator_think();
}
elevator_think(){
while (1){
self waittill ("trigger";);
if (!level.elevatorMoving)
thread elevator_move();
}
}
elevator_move(){
elevatormodel = getent ("elevator", "targetname";);
level.elevatorMoving = true;
speed = 10;
height =581;
if (level.elevatorDown) {
elevatormodel playsound ("elevator";);
elevatormodel movez (height, speed);
elevatormodel waittill ("movedone";);
level.elevatorDown = false;
}
else{
elevatormodel playsound ("elevator";);
elevatormodel movez (height - (height * 2), speed);
elevatormodel waittill ("movedone";);
level.elevatorDown = true;
}
level.elevatorMoving = false;
} |
|
ToM
Marvin
Okay habs jetzt mal geändert und jetzt kommt ein anderer Fehler:
script compile error
bad syntax
elevator = getentarry ("elevator","targetame";);
(see console for details)
Konsole:
Error:
******* script compile error*******
Error: bad syntax: (file'maps/mp/elevator.gsc',line 10)
steinacker
mach bei den runden klammern die semicolons raus
;); das semicolon davor ist zuviel
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
|
elevator = getentarray ("switch","targetname"); |
|
als beispiel
Marvin
Habe schon wieder einen neuen Fehler:
script runtime error
(see console for details)
arry is nor an object
Konsole:
Error: called from:
(file'maps/mp/elevator.gsc', line 14)
elevator thread elevator_think ();
Error: called from:
(file'maps/mp/elevator.gsc', line 5)
Error: called from:
(file'maps/mp/mp_jumptst.gsc', line 23)
Error: started from:
(file'maps/mp/mp_jumptest.gsc', line 1)
main()
Ich habe keine Ahnung was diese ganzen Errors immer verursacht
steinacker
Code 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:
|
main()
{
level.elevatorDown = true;
level.elevatorMoving = false;
thread elevator_start();
}
elevator_start()
{
elevator = getentarray ("switch","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 ("elevator", "targetname");
level.elevatorMoving = true;
speed = 10;
height =581;
if (level.elevatorDown)
{
//elevatormodel playsound ("elevator");
elevatormodel movez (height, speed);
elevatormodel waittill ("movedone");
level.elevatorDown = false;
}
else
{
//elevatormodel playsound ("elevator");
elevatormodel movez (height - (height * 2), speed);
elevatormodel waittill ("movedone");
level.elevatorDown = true;
}
level.elevatorMoving = false;
} |
|
elevator thread elevator_think ();
hier ist die variable elevator fehl am platz
elevator
[i] thread elevator_think();
hier fehlt deine "zählvariable i in der eckigen klammer
und was die fehler in den beiden anderen dateien betrifft weiß ich nicht
mp_jumptst.gsc
mp_jumptest.gsc
ich würde aber an deiner stelle erst mal versuchen den aufzug zum laufen zu bekommen bevor du andere scripte noch verwendest
und wenn du damit eine platte oder so bewegen willst musst du movez in movey oder movex ändern, je nachdem, ob sich das teil in x oder in y richtung fahren soll
und die werte bei height und speed musst auch dem entsprechend ändern, wie weit (height) und wie schnell (speed) sich das teil bewegen soll - kleinerer wert bei speed = schneller
Marvin
Danke meine Map läuft wieder und die Platte bewegt sich. Allerdings bewegt sie sich nach oben also muss ich wohl noch eintragen was du gepoustet hast. Muss ich mal ausprobieren
Lg Marvin
Ps: Bei jumptst habe ich mich verschrieben das soll eigentlich auch jumptest heissen. Jumptest ist nähmlich der mapname von meiner Testmap.
Marvin
Okay habe jetzt movez in movey umgeändert. Nun bewegt sich die Platte wie gewollt in y Richtung. Allerdings gibt es nun zwei neue Probleme:
1. Die Platte fährt etwas zuweit in y Richtung. Sie fährt durch meine Wand durch. Kann man das ändern?
2. Wenn einer der Auslöser (Trigger) zum zweiten mal aktiviert wird fährt die Platte nach unten. Beim dritten mal wieder nach y. Beim vierten mal wieder nach unten etc.
Marvin
Nightwing
Original von steinacker
elevator thread elevator_think ();
hier ist die variable elevator fehl am platz
elevator[i] thread elevator_think();
hier fehlt deine "zählvariable i in der eckigen klammer
Marvin hatte das Script als Text hier reingestellt, nicht als Code.
Im Text bedeutet [i] Kursivschrift, daher hats das "verschluckt"
Ich hab mir das Script nicht sonderlich angesehn
ToM
steinacker
von mir:
und die werte bei height und speed musst auch dem entsprechend ändern, wie weit (height) und wie schnell (speed) sich das teil bewegen soll - kleinerer wert bei speed = schneller
2. du musst beide movez in movey ändern
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
2:
|
elevatormodel movey (height, speed);
elevatormodel movey (height - (height * 2), speed); |
|
Marvin
Okay das hat schon mal geklappt nur habe ich jetzt ein neues problem:
Um so weniger ich bei Height eintrage um so langsamer fährt das Teil ich habe jetzt schon 1000 eingetragen hat aber nicht geklappt
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
2:
|
speed =1000;
height =110; |
|
steinacker
wer lesen kann iss klar im vorteil...
und die werte bei height und speed musst auch dem entsprechend ändern, wie weit (height) und wie schnell (speed) sich das teil bewegen soll - kleinerer wert bei speed = schneller
height - höhe (strecke, die deine platte zurück legt)
vom aufzug her einfach belassen, du kannst die variable auch benennen wie du willst - aber lass besser mal so stehen
speed - geschwindigkeit
kleinerer wert bei speed = schneller
Marvin
Original von steinacker
wer lesen kann iss klar im vorteil...
Jo da hast du recht. Hat jetzt geklappt. Ich habs total übersehen
Danke an euch beide für die Hilfe
Lg Marvin
Ps: Ich werd noch zum scripter