Wie erstelle ich betauchbares Wasser? (langsamer gehen, rauschen, weniger Schwerkraft)

Oi!mel
Hallo,
Ich möchte auf meiner Map eine Stelle mit Wasser, die man betauchen kann. Das soll heißen, man bewegt sich unter Wasser langsamer, sieht wie durch Glas durch die Oberfläche, und hat ein dumpfes Rauschen im Ohr. Am besten wäre noch dass man nicht schießen kann.

Ich hab mir die Lösung so vorgestellt. Also an die Oberfläche kommt eine nicht geclippte Glasplatte, und das dumpfe Rauschen mit einem Trigger und nem Sound. Probiert hab ichs schon, geschafft noch nicht. Wie ich ess machen soll dass man sich langsamer bewegt, und weniger Schwerkraft hat, hab ich leider überhaupt keinen Plan.

Kann mir jemand bitte bei der Umsetzung helfen?
Dankeschön
Oi!mel
Könnte man nicht zum Beispiel mit einem Trigger einen Bereich markieren, bei dem einfach eine andere gravity herscht? Leider weis ich auch nicht wie ich das bewerkstelligen könnte. Hat jemand ein paar Tipps für mich?
Danke
Oi!mel
So. ich hab jetzt zumindest schonmal trübes Wasser. Den entscheidenden Anstoss hat mir Banana gegeben. Ich habe das drown Script umgeschrieben.

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:
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:
main()
{
drownage = getentarray("drown","targetname");
if (isDefined("drownage"))
{
precacheShader("black");
precacheShader("white");

level.barsize = 288;
level.drowntime = 0.20;
level.hurttime = 0.20;

for(d = 0; d < drownage.size; d++)
{
drownage[d] thread water();
}
}
}

Water()
{
while (1)
{
self waittill("trigger", other);

if(isPlayer(other) && other istouching(self))
other thread drown(self);
}
}

drown(trigger)
{
self endon("disconnect");

dceiling = getent(trigger.target,"targetname");
water_vision = undefined;
while (self istouching(trigger) && !self istouching(dceiling))
{
wait .125;

if(isDefined(self.drowning))
return;

self.drowning = true;


if(!isDefined(water_vision))
{
water_vision = newClientHudElem(self);
water_vision.x = 0;
water_vision.y = 0;
water_vision setshader ("white", 640, 480);
water_vision.alignX = "left";
water_vision.alignY = "top";
water_vision.horzAlign = "fullscreen";
water_vision.vertAlign = "fullscreen";
water_vision.color = (.16, .28, .38);
water_vision.alpha = .75;
}
level.barincrement = (level.barsize / (20.0 * level.drowntime));
// level.player allowProne(false);

if(!isDefined(self.progressbackground))
{
self.progressbackground = newClientHudElem(self);
self.progressbackground.alignX = "center";
self.progressbackground.alignY = "middle";
self.progressbackground.x = 8000;
self.progressbackground.y = 8000;
self.progressbackground.alpha = 0.5;
}

self.progressbackground setShader("black", (level.barsize + 4), 14);

if(!isDefined(self.progressbar))
{
self.progressbar = newClientHudElem(self);
self.progressbar.alignX = "left";
self.progressbar.alignY = "middle";
self.progressbar.x = (8000 - (level.barsize / 2.0));
self.progressbar.y = 8000;
}

self.progressbar setShader("white", 0, 8);
self.progressbar scaleOverTime(level.drowntime, level.barsize, 8);
self.progresstime = 0;
d = 0;
f = 0;
while(isalive(self) && self istouching(trigger) && !self istouching(dceiling))
{
d ++;
f ++;

wait 0.05;
self.progresstime += 0.05;

if(self.progresstime >= level.hurttime)
{
if(f >= 4)
{
radiusDamage(self.origin,9, 1, 1);
f = 0;
}
}
}

if(isalive(self) && self istouching(trigger) && !self istouching(dceiling))
{
self.progressbackground destroy();
self.progressbar destroy();
wait 0.025;
radiusDamage(self.origin,22, 3000, 3000);
self.drowning = undefined;
self.sounder = undefined;
randb = randomInt(4);
deathmethod1 = " made a hole in the water and lay down quietly to rest forever.";
deathmethod2 = " paid a long lasting visit to Davy Jones's Locker.";
deathmethod3 = " went diving without breathing apparatus.";
deathmethod4 = " swam like a brick.";

if (randb == 0)
iPrintLn( self.name, deathmethod1);

if (randb == 1)
iPrintLn( self.name, deathmethod2);

if (randb == 2)
iPrintLn( self.name, deathmethod3);

if (randb == 3)
iPrintLn( self.name, deathmethod4);

wait .05;

water_vision destroy();
}
else
{
water_vision.alpha = .5;
water_vision fadeOverTime(3);
water_vision.alpha = 0;
wait 0.05;
self.progressbackground destroy();
self.progressbar destroy();
self.drowning = undefined;
self.sounder = undefined;

}
wait .05;
}
}



So, wie kann man den jetzt aus dieser Basis einen Sound einfügen?
Oder wie kann ich in diesem Bereich gravity verändern, oder timescale ?
Und wie kann ich den Spieler daran hindern in diesem Bereich zu schießen?
Dankeschön.
Oi!mel
Ein Problem weniger. Das mit dem sound hab ich hingekriegt.
Das ist das aktuelle 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:
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:
main()
{
level.scr_sound["underwater"] = "underwater";
drownage = getentarray("drown","targetname");
if (isDefined("drownage"))
{
precacheShader("black");
precacheShader("white");

level.barsize = 288;
level.drowntime = 5;
level.hurttime = 0.0;

for(d = 0; d < drownage.size; d++)
{
drownage[d] thread water();
}
}
}

Water()
{
while (1)
{
self waittill("trigger", other);

if(isPlayer(other) && other istouching(self))
other thread drown(self);
other playsound("underwater");

}
}

drown(trigger)
{
self endon("disconnect");

dceiling = getent(trigger.target,"targetname");
water_vision = undefined;
while (self istouching(trigger) && !self istouching(dceiling))
{
wait .125;

if(isDefined(self.drowning))
return;

self.drowning = true;


if(!isDefined(water_vision))
{
water_vision = newClientHudElem(self);
water_vision.x = 0;
water_vision.y = 0;
water_vision setshader ("white", 640, 480);
water_vision.alignX = "left";
water_vision.alignY = "top";
water_vision.horzAlign = "fullscreen";
water_vision.vertAlign = "fullscreen";
water_vision.color = (.16, .28, .38);
water_vision.alpha = .75;
}
level.barincrement = (level.barsize / (20.0 * level.drowntime));
//level.player allowProne(false);


if(!isDefined(self.progressbackground))
{
self.progressbackground = newClientHudElem(self);
self.progressbackground.alignX = "center";
self.progressbackground.alignY = "middle";
self.progressbackground.x = 8000;
self.progressbackground.y = 8000;
self.progressbackground.alpha = 0.5;
}

self.progressbackground setShader("black", (level.barsize + 4), 14);

if(!isDefined(self.progressbar))
{
self.progressbar = newClientHudElem(self);
self.progressbar.alignX = "left";
self.progressbar.alignY = "middle";
self.progressbar.x = (8000 - (level.barsize / 2.0));
self.progressbar.y = 8000;
}

self.progressbar setShader("white", 0, 8);
self.progressbar scaleOverTime(level.drowntime, level.barsize, 8);
self.progresstime = 0;
d = 0;
f = 0;
while(isalive(self) && self istouching(trigger) && !self istouching(dceiling))
{
d ++;
f ++;

wait 0.05;
self.progresstime += 0.05;

if(self.progresstime >= level.hurttime)
{
if(f >= 4)
{
radiusDamage(self.origin,0, 0, 0);
f = 0;
}
}
}

if(isalive(self) && self istouching(trigger) && !self istouching(dceiling))
{
self.progressbackground destroy();
self.progressbar destroy();
wait 0.025;
radiusDamage(self.origin,22, 3000, 3000);
self.drowning = undefined;
self.sounder = undefined;
randb = randomInt(4);
deathmethod1 = " made a hole in the water and lay down quietly to rest forever.";
deathmethod2 = " paid a long lasting visit to Davy Jones's Locker.";
deathmethod3 = " went diving without breathing apparatus.";
deathmethod4 = " swam like a brick.";

if (randb == 0)
iPrintLn( self.name, deathmethod1);

if (randb == 1)
iPrintLn( self.name, deathmethod2);

if (randb == 2)
iPrintLn( self.name, deathmethod3);

if (randb == 3)
iPrintLn( self.name, deathmethod4);

wait .05;

water_vision destroy();
}
else
{
water_vision.alpha = .5;
water_vision fadeOverTime(3);
water_vision.alpha = 0;
wait 0.05;
self.progressbackground destroy();
self.progressbar destroy();
self.drowning = undefined;
self.sounder = undefined;

}
wait .05;
}
}



Wie kann ich das mit der Schwerkraft oder mit dem "Nicht-Schießen" noch hinkriegen?
Danke
Oi!mel
So, ich glaub ich bekomm das ganze eh hin. Jetzt hab ich das mit dem Waffen abschalten hinbekommen.

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:
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:
main()
{
level.scr_sound["underwater"] = "underwater";
drownage = getentarray("drown","targetname");
if (isDefined("drownage"))
{
precacheShader("black");
precacheShader("white");

level.barsize = 288;
level.drowntime = 5;
level.hurttime = 0.0;

for(d = 0; d < drownage.size; d++)
{
drownage[d] thread water();
}
}
}

Water()
{
while (1)
{
self waittill("trigger", other);

if(isPlayer(other) && other istouching(self))
other thread drown(self);
other playsound("underwater");
other DisableWeapons();
}
}

drown(trigger)
{
self endon("disconnect");

dceiling = getent(trigger.target,"targetname");
water_vision = undefined;
while (self istouching(trigger) && !self istouching(dceiling))
{
wait .125;

if(isDefined(self.drowning))
return;

self.drowning = true;


if(!isDefined(water_vision))
{
water_vision = newClientHudElem(self);
water_vision.x = 0;
water_vision.y = 0;
water_vision setshader ("white", 640, 480);
water_vision.alignX = "left";
water_vision.alignY = "top";
water_vision.horzAlign = "fullscreen";
water_vision.vertAlign = "fullscreen";
water_vision.color = (.16, .28, .38);
water_vision.alpha = .75;
}
level.barincrement = (level.barsize / (20.0 * level.drowntime));
//level.player allowProne(false);


if(!isDefined(self.progressbackground))
{
self.progressbackground = newClientHudElem(self);
self.progressbackground.alignX = "center";
self.progressbackground.alignY = "middle";
self.progressbackground.x = 8000;
self.progressbackground.y = 8000;
self.progressbackground.alpha = 0.5;
}

self.progressbackground setShader("black", (level.barsize + 4), 14);

if(!isDefined(self.progressbar))
{
self.progressbar = newClientHudElem(self);
self.progressbar.alignX = "left";
self.progressbar.alignY = "middle";
self.progressbar.x = (8000 - (level.barsize / 2.0));
self.progressbar.y = 8000;
}

self.progressbar setShader("white", 0, 8);
self.progressbar scaleOverTime(level.drowntime, level.barsize, 8);
self.progresstime = 0;
d = 0;
f = 0;
while(isalive(self) && self istouching(trigger) && !self istouching(dceiling))
{
d ++;
f ++;

wait 0.05;
self.progresstime += 0.05;

if(self.progresstime >= level.hurttime)
{
if(f >= 4)
{
radiusDamage(self.origin,0, 0, 0);
f = 0;
}
}
}

if(isalive(self) && self istouching(trigger) && !self istouching(dceiling))
{
self.progressbackground destroy();
self.progressbar destroy();
wait 0.025;
radiusDamage(self.origin,22, 3000, 3000);
self.drowning = undefined;
self.sounder = undefined;
randb = randomInt(4);
deathmethod1 = " made a hole in the water and lay down quietly to rest forever.";
deathmethod2 = " paid a long lasting visit to Davy Jones's Locker.";
deathmethod3 = " went diving without breathing apparatus.";
deathmethod4 = " swam like a brick.";

if (randb == 0)
iPrintLn( self.name, deathmethod1);

if (randb == 1)
iPrintLn( self.name, deathmethod2);

if (randb == 2)
iPrintLn( self.name, deathmethod3);

if (randb == 3)
iPrintLn( self.name, deathmethod4);

wait .05;

water_vision destroy();
}
else
{
water_vision.alpha = .5;
water_vision fadeOverTime(3);
water_vision.alpha = 0;
wait 0.05;
self.progressbackground destroy();
self.progressbar destroy();
self.drowning = undefined;
self.sounder = undefined;

}
wait 1;
self EnableWeapons();
wait .5;

}
}



Jetzt brauch ich nur noch das mit der Schwerkraft. Kann mir da einer helfen?
Dankeschön
Oi!mel
Habs nun entgültig hinbekommen, fast so wie ich wollte.

Wie kann ich es machen, dass ein Spieler keinen Schaden nimmt, wenn er auf einem bestimmten Brush landet?
Banana2077
Jetzt kann ich auch mal was dazu beitragen xD

Sonst führst du hier ja einen Monolog grosses Grinsen

Naja also der Player nimmt keinen Schaden wenn er auf einem Brush aufkommt der mit Caulk belegt ist..Also einfach ein unit höher über der eigentlichen textur einen caulk brush legen....


Könnest du das Script veröffentlichen?
Würde mich auch interessieren...

Danke


Banana
Oi!mel
Danke dir.

Das Script kann ich im Moment noch nicht veröffentlichen, weil ich in der Arbeit bin.
Banana2077
Kein problem..
Augenzwinkern
Oi!mel
Ich habe diese Frage zwar schonmal gestellt und keine Antwort erhalten, aber ich probiers trotzdem nochmal.
Weiß jemand wie man rutschigen Boden machen kann (Eis)?
xfckup
custom material/textur? einfach die "slick"-option im assetmanager anklicken...
Oi!mel
Vielen Dank