Schneller Kriechen bei Trigger |
|
|
| Schneller Kriechen bei Trigger |
 |
Hallo, habe ein kleines Problem:
Ich möchte, das Player an einem Rohr, wo sie hindurchkriechen müssen, schneller Kriechen können. Das Rohr ist von trigger_multiple umgeben, hier ein Screen:

Man möge mir verzeihen, das ich crouch für Kriechen hielt, die Uhrzeit machts möglich
Ich weiss noch nicht, wie ich das Kriechen abfragen soll, um überhaupt mal einen Ansatz zu haben, hab ich es mit der Abfrage if(self getstance() == "crouch") versucht. Logisch, das ich da diese Fehlermeldung bekomme:
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
2:
3:
|
******* script runtime error *******
GetStance is only defined for players.: (file 'maps/mp/_fastcrouch.gsc', line 20)
|
|
Ich weiss nicht, ob ich die Funktion setspeed da richtig verwende, es gibt recht viele Funktionen in den Rawfiles...
Und hier das, was evtl mal ein Script werden könnte:
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:
|
main(){
areas = getentarray ("fastcrouch","targetname");
if(isdefined(areas)){
for(i=0;i<areas.size;i++){
areas[i] thread Player_fastcrouch();
}
}
level.player_fastcrouch = false;
}
Player_fastcrouch(){
while(1){
if(self getstance() == "prone"){
if(isDefined(level.player_fastcrouch))
return;
level.player_fastcrouch = true;
self waittill ("trigger");
self setSpeed(2, 200);
// iprintln("^2fast active");
wait 0.1;
level.player_fastcrouch = false;
// iprintln("^1fast inactive");
}
}
} |
|
Danke
ToM
__________________

Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von Nightwing: 10.04.2008 05:19.
|
|
|
|
|
yoda
Böser Admin
Dabei seit: 21.01.2004
Beiträge: 12.269

|
|
Könnte man das evt. mit dem Script vom JumpPad lösen? Da kann man ja auch die Geschwindigkeit vorgeben, vielleicht ginge es ja so, daß die Bewegung nicht nach oben sondern eben nach vorne ausgelöst würde?
__________________ "Fürs Internet sollte das Baumhaus-Prinzip gelten:
Wer zu alt ist, um ohne Hilfe reinzukommen, soll uns darin auch keine Vorschriften machen."
Diskutiere nie mit einem Idioten - zuerst zwingt er Dich auf sein Niveau herab und dann schlägt er Dich mit Erfahrung...
|
|
|
|
|
|
|
Das werd ich die Woche über mal testen, klingt interessant.
ToM
__________________

|
|
|
|
|
|
|
So, BadMan hat mir ne schnelle Testmap gebaut, Danke!
Darin ist der Jump vom Boden auf ne Plattform, funzt feini. Und das ominöse Rohr, jeweils ein Jumppad an der Öffnung.
Problem: Der Player geht durchs erste Rohrjumppad und wird bewegt, kommt zum zweiten und wird zurückbewegt oder bleibt stecken. Wie könnte ich dem Script sagen, das nur das erste Jumppad zählt?
Hier mal das Script:
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:
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:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
|
main(){
thread jumper();
thread jumper1();
thread jumper2();
maps\mp\_load::main();
maps\mp\_compass::setupMiniMap("compass_map_mp_jumppad");
setExpFog(300, 1400, 0.5, 0.5, 0.5, 0);
VisionSetNaked("mp_jumppad");
game["allies"] = "marines";
game["axis"] = "opfor";
game["attackers"] = "allies";
game["defenders"] = "axis";
game["allies_soldiertype"] = "desert";
game["axis_soldiertype"] = "desert";
setdvar( "r_specularcolorscale", "3" );
setdvar("compassmaxrange","1800");
}
jumper(){
jumpx = getent ("jump","targetname");
glow = getent ("glow","targetname");
air1 = getent ("air1","targetname");
air2 = getent ("air2","targetname");
air3 = getent ("air3","targetname");
air4 = getent ("air4","targetname");
level._effect[ "beacon_glow" ] = loadfx( "misc/ui_pickup_available" );
maps\mp\_fx::loopfx("beacon_glow", (glow.origin), 3, (glow.origin) + (0, 0, 90));
while (1){
jumpx waittill ("trigger",user);
if (user istouching(jumpx)){
//throw = user.origin + (100, 100, 0);
air = spawn ("script_model",(0,0,0));
air.origin = user.origin;
air.angles = user.angles;
user linkto (air);
time = 1;
air moveto (air1.origin, 1);
wait 1;
air moveto (air2.origin, 1);
wait .5;
air moveto (air3.origin, 1);
wait .5;
air moveto (air4.origin, 1);
//air moveto (throw, time, 0.5,0.5);
//air moveto (throw, time, 0.5,0.5);
wait 1;
user unlink();
wait 1;
}
}
}
jumper1(){
jumpx = getent ("jump1","targetname");
glow = getent ("glow1","targetname");
air11 = getent ("air11","targetname");
air12 = getent ("air12","targetname");
air13 = getent ("air13","targetname");
air14 = getent ("air14","targetname");
level._effect[ "beacon_glow" ] = loadfx( "misc/ui_pickup_available" );
maps\mp\_fx::loopfx("beacon_glow", (glow.origin), 3, (glow.origin) + (0, 0, 90));
while (1){
jumpx waittill ("trigger",user);
if (user istouching(jumpx)){
//throw = user.origin + (100, 100, 0);
air = spawn ("script_model",(0,0,0));
air.origin = user.origin;
air.angles = user.angles;
user linkto (air);
time = 1;
air moveto (air11.origin, 1);
wait 1;
air moveto (air12.origin, 1);
wait .5;
air moveto (air13.origin, 1);
wait .5;
air moveto (air14.origin, 1);
//air moveto (throw, time, 0.5,0.5);
//air moveto (throw, time, 0.5,0.5);
wait 1;
user unlink();
wait 1;
}
}
}
jumper2(){
jumpx = getent ("jump2","targetname");
glow = getent ("glow2","targetname");
air21 = getent ("air21","targetname");
air22 = getent ("air22","targetname");
air23 = getent ("air23","targetname");
air24 = getent ("air24","targetname");
level._effect[ "beacon_glow" ] = loadfx( "misc/ui_pickup_available" );
maps\mp\_fx::loopfx("beacon_glow", (glow.origin), 3, (glow.origin) + (0, 0, 90));
while (1){
jumpx waittill ("trigger",user);
if (user istouching(jumpx)){
//throw = user.origin + (100, 100, 0);
air = spawn ("script_model",(0,0,0));
air.origin = user.origin;
air.angles = user.angles;
user linkto (air);
time = 1;
air moveto (air21.origin, 1);
wait 1;
air moveto (air22.origin, 1);
wait .5;
air moveto (air23.origin, 1);
wait .5;
air moveto (air24.origin, 1);
//air moveto (throw, time, 0.5,0.5);
//air moveto (throw, time, 0.5,0.5);
wait 1;
user unlink();
wait 1;
}
}
}
|
|
Schonmal vielen Dank im vorraus, OMWG
ToM
__________________

|
|
|
|
|
|
|
Eine Möglichkeit wäre, wenn sich der Player am script_origin air13 bzw. air23 befindet, den Trigger am Ausgang abzuschalten, und wenn er dann am script_origin air14 bzw. air24 ist, wieder einzuschalten. Dabei muss man natürlich noch darauf achten, dass die script_origins air14 und air24 weiter draußen befinden als die Trigger, damit man nicht direkt in die Trigger am Ausgang kriecht und zurückgeschickt wird.
Also so: (Beide Wege mal übereinander dargestellt)
T = trigger, o = script_origin
_To--o--o--o--o
o--o--o--o--oT
Nun zum eigentlichen Ein- und Ausschalten eines Triggers:
Füge zuerst diese Zeile ganz oben als erste Zeile in deine gsc Datei ein.
#include maps\mp\utility;
nun kannst du einen Trigger folgendermaßen ausschalten (am Beispiel von jump2):
jump2 TriggerOff();
und so wieder einschalten:
jump2 TriggerOn();
__________________
Da die Lichtgeschwindigkeit höher ist als die Schallgeschwindigkeit,
hält man so manchen für einen hellen Kopf, bis man ihn reden hört.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von OLD MAN WITH GUN: 14.04.2008 23:39.
|
|
|
|
|
|
|
Was mich grade etwas verunsichert: Wo genau kommen die beiden von Dir genannten Aufrufe rein? Bitte korrigieren, wenn falsch (wovon ich ausgehe)
Hier? :
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:
55:
|
jumper2(){
jumpx = getent ("jump2","targetname");
glow = getent ("glow2","targetname");
air21 = getent ("air21","targetname");
air22 = getent ("air22","targetname");
air23 = getent ("air23","targetname");
air24 = getent ("air24","targetname");
level._effect[ "beacon_glow" ] = loadfx( "misc/ui_pickup_available" );
maps\mp\_fx::loopfx("beacon_glow", (glow.origin), 3, (glow.origin) + (0, 0, 90));
while (1){
jumpx waittill ("trigger",user);
if (user istouching(jumpx)){
//throw = user.origin + (100, 100, 0);
air = spawn ("script_model",(0,0,0));
air.origin = user.origin;
air.angles = user.angles;
user linkto (air);
jump2 TriggerOff();
time = 1;
air moveto (air21.origin, 1);
wait 1;
air moveto (air22.origin, 1);
wait .5;
air moveto (air23.origin, 1);
wait .5;
air moveto (air24.origin, 1);
//air moveto (throw, time, 0.5,0.5);
//air moveto (throw, time, 0.5,0.5);
wait 1;
user unlink();
jump2 TriggerOn();
wait 1;
}
}
}
|
|
ToM
Nachtrag: Wird getestet, sobald ich ne neue Testmap habe.
__________________

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Nightwing: 16.04.2008 00:01.
|
|
|
|
|
|
|
jump2 TriggerOn(); ist schon gut platziert.
jump2 TriggerOff(); kannst du da auch lassen. Wenn du den Triiger allerdings kürzer abschalten willst, schreibst du das jump2 TriggerOff(); einfach zwischen die Zeilen air moveto (air24.origin, 1); und dem nachfolgenden wait 1; (also dann, wenn sich der Player auf dem Weg zum letzten script_origin macht).
Sähe dann so aus:
...
air moveto (air24.origin, 1);
jump2 TriggerOff();
wait 1;
user unlink();
jump2 TriggerOn();
...
__________________
Da die Lichtgeschwindigkeit höher ist als die Schallgeschwindigkeit,
hält man so manchen für einen hellen Kopf, bis man ihn reden hört.
|
|
|
|
|
|
|
Dann lag ich ja doch net so falsch und habs richtig verstanden
Danke OMWG!
Sag mal, was bedeutet das #include? Heisst das soviel, das das dort angegebene File wie soll ich sagen berücksichtigt wird bei Ausführung des Scripts?
ToM
__________________

|
|
|
|
|
|
|
Original von Nightwing
Sag mal, was bedeutet das #include? Heisst das soviel, das das dort angegebene File wie soll ich sagen berücksichtigt wird bei Ausführung des Scripts?
So kann man das in etwa ausdrücken. Bei gsc-Dateien, die per #include eingebunden werden hat man den Vorteil, das man die darin enthaltenen Funktionen direkt aufrufen kann (ohne jedes Mal den ganzen Pfad davor zu schreiben).
Im Grunde genommen ist das:
jump2 maps\mp\_utility::TriggerOn();
und das:
#include maps\mp\_utility; //ganz am Anfang der gsc-Datei
jump2 TriggerOn();
das Gleiche:
Wenn man #include verwendet, benutzt man die Funktionen also so, als ob die Funktion direkt in der eigenen gsc-Datei wäre.
Diese Vorgehensweise macht aber nur bei solchen gsc-Dateien Sinn, in denen zahlreiche Funktionen vorhanden sind (wie eben der _utility.gsc). Bei eigenen gsc-Dateien (z.B. dem Türscript) den man als eigenständige gsc-Datei erstellt, der dann aber nur eine Funktion enthält die man von extern aufruft, macht das wenig Sinn.
__________________
Da die Lichtgeschwindigkeit höher ist als die Schallgeschwindigkeit,
hält man so manchen für einen hellen Kopf, bis man ihn reden hört.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von OLD MAN WITH GUN: 16.04.2008 16:26.
|
|
|
|
|
|
|
Sehr schön erklärt, dank Dir!
__________________

|
|
|
|
|
BadMan
Turnbeutelvergesser
 
Dabei seit: 31.01.2008
Beiträge: 278

|
|

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:
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:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
|
#include maps\mp\_utility;
main(){
thread jumper();
thread jumper1();
thread jumper2();
maps\mp\_load::main();
maps\mp\_compass::setupMiniMap("compass_map_mp_jumppad");
setExpFog(300, 1400, 0.5, 0.5, 0.5, 0);
VisionSetNaked("mp_jumppad");
game["allies"] = "marines";
game["axis"] = "opfor";
game["attackers"] = "allies";
game["defenders"] = "axis";
game["allies_soldiertype"] = "desert";
game["axis_soldiertype"] = "desert";
setdvar( "r_specularcolorscale", "3" );
setdvar("compassmaxrange","1800");
}
jumper(){
jumpx = getent ("jump","targetname");
glow = getent ("glow","targetname");
air1 = getent ("air1","targetname");
air2 = getent ("air2","targetname");
air3 = getent ("air3","targetname");
air4 = getent ("air4","targetname");
level._effect[ "beacon_glow" ] = loadfx( "misc/ui_pickup_available" );
maps\mp\_fx::loopfx("beacon_glow", (glow.origin), 3, (glow.origin) + (0, 0, 90));
while (1){
jumpx waittill ("trigger",user);
if (user istouching(jumpx)){
//throw = user.origin + (100, 100, 0);
air = spawn ("script_model",(0,0,0));
air.origin = user.origin;
air.angles = user.angles;
user linkto (air);
time = 1;
air moveto (air1.origin, 1);
wait 1;
air moveto (air2.origin, 1);
wait .5;
air moveto (air3.origin, 1);
wait .5;
air moveto (air4.origin, 1);
//air moveto (throw, time, 0.5,0.5);
//air moveto (throw, time, 0.5,0.5);
wait 1;
user unlink();
wait 1;
}
}
}
jumper1(){
jumpx = getent ("jump1","targetname");
glow = getent ("glow1","targetname");
air11 = getent ("air11","targetname");
air12 = getent ("air12","targetname");
air13 = getent ("air13","targetname");
air14 = getent ("air14","targetname");
level._effect[ "beacon_glow" ] = loadfx( "misc/ui_pickup_available" );
maps\mp\_fx::loopfx("beacon_glow", (glow.origin), 3, (glow.origin) + (0, 0, 90));
while (1){
jumpx waittill ("trigger",user);
if (user istouching(jumpx)){
//throw = user.origin + (100, 100, 0);
air = spawn ("script_model",(0,0,0));
air.origin = user.origin;
air.angles = user.angles;
user linkto (air);
time = 1;
air moveto (air11.origin, 1);
wait 1;
air moveto (air12.origin, 1);
wait .5;
air moveto (air13.origin, 1);
wait .5;
air moveto (air14.origin, 1);
jump1 TriggerOff();
//air moveto (throw, time, 0.5,0.5);
//air moveto (throw, time, 0.5,0.5);
wait 1;
user unlink();
jump1 TriggerOn();
wait 1;
}
}
}
jumper2(){
jumpx = getent ("jump2","targetname");
glow = getent ("glow2","targetname");
air21 = getent ("air21","targetname");
air22 = getent ("air22","targetname");
air23 = getent ("air23","targetname");
air24 = getent ("air24","targetname");
level._effect[ "beacon_glow" ] = loadfx( "misc/ui_pickup_available" );
maps\mp\_fx::loopfx("beacon_glow", (glow.origin), 3, (glow.origin) + (0, 0, 90));
while (1){
jumpx waittill ("trigger",user);
if (user istouching(jumpx)){
//throw = user.origin + (100, 100, 0);
air = spawn ("script_model",(0,0,0));
air.origin = user.origin;
air.angles = user.angles;
user linkto (air);
time = 1;
air moveto (air21.origin, 1);
wait 1;
air moveto (air22.origin, 1);
wait .5;
air moveto (air23.origin, 1);
wait .5;
air moveto (air24.origin, 1);
jump2 TriggerOff();
//air moveto (throw, time, 0.5,0.5);
//air moveto (throw, time, 0.5,0.5);
wait 1;
user unlink();
jump2 TriggerOn();
wait 1;
}
}
}
|
|
so sind jetzt die datein
und das der fehler
Code angehängt. Klicke hier zum Ein-/Ausblenden
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
|
******* script compile error *******
Error: uninitialised variable 'jump1': (file 'maps/mp/mp_jumppad.gsc', line 123)
******* script compile error *******
Error: uninitialised variable 'jump1': (file 'maps/mp/mp_jumppad.gsc', line 123)
jump1 TriggerOff();
*
************************************
********************
ERROR: script compile error
uninitialised variable 'jump1'
jump1 TriggerOff();
(see console for details)
|
|
|
|
|
|
|
|
|
|
 |
Impressum ||Datenschutzerklärung
|