Im Wasser Energieleiste (script+trigger)

Animus
also ich fang mal einfach an mein problem zu beschreiben:

iIn der MAP:

- hab ne insel als map und wollte das wasser begehbar machen (wenn der spieler unterwasser ist sollte energieleiste kommen funktioniert auch)
- hab aber ein trigger multi. problem (zuviele aneinander) läuft der spieler durch einen in den anderen wird das script neu gestartet das ist aber nicht unbedingt das problem hab schon eine lösung mir überlegt(denk ich)! nun hab ich damit ein problem das wenn ich öffter durch den trigger in einen anderen gehe irgendwann die energieleiste im wasser nicht mehr angezeigt wird und man nur noch stirbt wenn die zeit gekommen ist.

das script(verlinkt in der mp_mapname.gsc als seperate datei):

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:
main()
{ drownage = getentarray("drown","targetname"); 
if (isDefined("drownage")) 
{ 
precacheShader("black"); 
precacheShader("white"); level.barsize = 288; 
level.drowntime = 8; 
level.hurttime = 6; 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) 
{ 
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, .38, .5); 
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 = 320; 
self.progressbackground.y = 385; 
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 = (320 - (level.barsize / 2.0)); 
self.progressbar.y = 385; 
} 
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) && (self.progresstime < level.drowntime)) 
{ 
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.progresstime >= level.drowntime)) 
{ 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; 
} 
}



der code ist von MODSONLINE Forum!

im radianten:



meine frage:

wieso zeigt es mir nach einer weile kein energieleiste mehr an?
hängt sich das script auf oder hab ich was falsch gemacht!

danke schon mal an jeden der sich damit beschäftigt(mein geschriebenes zu lesen ich schreib manchmal bisl unverständlich)!
Nightwing

Zitat:

Original von Animus
mein geschriebenes zu lesen ich schreib manchmal bisl unverständlich!


Da iss was dran Augenzwinkern

Okay, hab bei Wildcard vor längerer Zeit mal was gelesen, das er das _drown Script der Map mp_pval korrigieren musste, logischerweise hat er es in die Mapfix IWD reingetan. Benutz also mal dieses Script und lass Deine Map so, wie sie ist und teste noch einmal:

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:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
// Multiplayer drown script for CoD
//
// written by [D]delica
// based on _noprone.gsc by r0ger and the stock IW S&D scripts ;)
// Modifed by Spikenaylor for COD2 using the tintscreen script from//[Nip] Drowning Water Script v1
//[Nip] by BionicNipple (bionic.nipple@gmail.com)
// To use this script, you'll need two trigger_multiples, set up pretty much the same
// way as r0gers' _noprone script. One should fill the area where you have water, so as
// long as the player is in the water they will be in contact with it. Open entity
// properties and give it the targetname 'drown'. Create another trigger_multiple above it,
// and connect it to the 'drown' trig as a target. (select 'drown' trig, then the target trig,
// and press W.) The base of this trigger should be at the same level as the surface of
// your water, or a little above, depending on how soon you want people to start drowning.
// This is all you need to do in radiant. Save, close and compile.
//
// In your yourmap.gsc, call _drown with "maps/mp_drown::main();" (no quotes ;) ), and make
// sure you place _drown.gsc in the maps/mp folder of your iwd. For compatibility's sake,
// please rename _drown.gsc if you use it (viz "mp_mymapname_drown.gsc", so ppl can customise
// it to their taste without creating problems with other mods/maps ;).
//
// N.B: the sounds and fx used in this script are all custom. If you want the same sounds,
// I suggest you rip them from Hamlet.pk3. Ditto the fx ^_^
//
// delicauk@gmail.com

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, .38, .5);
			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 = 320;
			self.progressbackground.y = 385;
			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 = (320 - (level.barsize / 2.0));
			self.progressbar.y = 385;
		}

		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) && (self.progresstime < level.drowntime))
		{
			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.progresstime >= level.drowntime))
		{ 
			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;
	}
}






ToM
Animus
der fehler tritt bei mir immernoch auf wenn man mehrere trigger durchläuft wenn die energieanzeige da ist werd wohl auch für das problem ne andere lösung finden müssen!

wer aber schön wenn ich nicht mit der ersten lösung für meine map auskommen muß wo in dmg trigger die lösung fürs wasser ist.
doof find ich daran das es nicht realistich und ausserdem die spieler genervt hat das wenn sie das wasser berühren so gut wie gleich tot sind unglücklich
Nightwing
Radianttechnisch kann ich Dir absolut nicht helfen (ich weiss wie die Anwendung aufgeht und wie man kompiliert, das wars). Das Script jedoch läuft in anderen Maps auch, offenbar problemlos. Jetzt heissts abwarten, bis sich jemand Deiner annimmt, der auch den Radianten kennt. Augenzwinkern

ToM

Nachtrag:

Das könnte evtl helfen:

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:
// Multiplayer drown script for CoD
//
// written by [D]delica
// based on _noprone.gsc by r0ger and the stock IW S&D scripts ;)
// Modifed by Spikenaylor for COD2 using the tintscreen script from//[Nip] Drowning Water Script v1
//[Nip] by BionicNipple (bionic.nipple@gmail.com)
// To use this script, you'll need two trigger_multiples, set up pretty much the same
// way as r0gers' _noprone script. One should fill the area where you have water, so as
// long as the player is in the water they will be in contact with it. Open entity
// properties and give it the targetname 'drown'. Create another trigger_multiple above it,
// and connect it to the 'drown' trig as a target. (select 'drown' trig, then the target trig,
// and press W.) The base of this trigger should be at the same level as the surface of
// your water, or a little above, depending on how soon you want people to start drowning.
// This is all you need to do in radiant. Save, close and compile.
//
// In your yourmap.gsc, call _drown with "maps/mp_drown::main();" (no quotes ;) ), and make
// sure you place _drown.gsc in the maps/mp folder of your iwd. For compatibility's sake,
// please rename _drown.gsc if you use it (viz "mp_mymapname_drown.gsc", so ppl can customise
// it to their taste without creating problems with other mods/maps ;).
//
// N.B: the sounds and fx used in this script are all custom. If you want the same sounds,
// I suggest you rip them from Hamlet.pk3. Ditto the fx ^_^
//
// delicauk@gmail.com

steinacker
du könntest mal versuchen nur einen trigger_hurt brush zu verwenden anstatt mehrere und diesem die werte im entity zuweisen:
Key: dmg
Value: 20

(oder value 0.05)
ich hab mir z.b. en paar fackeln gebastelt, und wenn der player zu nah ans feuer kommt wird er verletzt, dafür hab ich den wert 0.05

Edit:
Animus
ja das mit dem einen trigger hatte ich schon am anfang das hat mir nicht gefallen und den anderen die die beta gespielt haben auch nicht weil wenn man das wasser berührt stirbt man sehr schnell egal wie man es einstellt.

ich beschäftige mich mal weiter mit dem script vieleicht bringt es ja was vieleicht auch nicht.

thx erstmal für die schnellen antworten!!!!!!
Animus
so ich habs für alle die es auch machen wollen das script an sich ist richtig funktioniert auch, problem ist im radiant:

es gibt 2 trigger:

- der eine der im wasser ist (link zum script > wo der player schaden nimmt)
- der andere überwasser (ohne verlinkung > hebt die wirkung bei gleichzeitiger berührung des wasser triggers auf > player nimmt kein schaden mehr)

das ding ist der player darf nicht 3 trigger auf einmal berühren sonst stürzt das script am anfang ab.(....wieso benutze ich mehrere trigger ganz einfach ich kann die trigger nicht über die komplette map ziehen weil sie sonst mit anderen triggern ärger gibt)

lösung die ich in meine map einbaue nur mal als gedankengang falls es noch einen gibt der so ein problem hat baut wellenbrecher ein die der spieler nicht überwinden kann vom im wasser und vom land, so kann er einen übergang von einem zum anderen trigger nict gleichzeitig berühren.
problem gelöst (hab lange in der map 30min getestet ohne das die energieleiste verschwunden ist)