Hilfe beim Sound Trigger

Verni@hter
Moin,

ich bräuchte mal Hilfe bei einem Script.

Das ganze soll folgendes machen:

Ich laufe über einen Trigger -> es wird ein Sound ausgelöst/abgespielt (wo ich per Koordinaten) angeben kann wo dieser zu hören ist, wie laut dieser ist (er soll nämlich nur in einem bestimmten Radius zu hören sein)

Wenn ich also diesen Trigger ausgelöst habe soll dieser erst in einer von mir bestimmten Zeit wieder aktivierbar sein (einfach nur durch berühren reicht schon) damit hier kein Soundcaos entsteht.

Ich möchte einfach das wenn man durch ne Stadt läuft man 1km weit entfernt ein Polizeiauto hört was natürlich nicht ständig an der selben Stelle fährt deshalb der Trigger.

Sound an einer bestimmten Stelle abspielen zu lassen ist nicht so das Problem sondern wie ich diesen durch ein Trigger auslösen kann.

Jemand ne Idee wie des funktioniert?
OLD MAN WITH GUN

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:
triggerd_sound()
{
	level.wait_for_retrigger = false;
	soundtrigger = getent( "the_sound_trigger", "targetname" ); // trigger_multiple
	soundpos = getent( "position_of_sound", "targetname" );

	while( 1 )
	{
		if( !level.wait_for_retrigger )
		{
			soundtrigger waittill( "trigger" );
			level.wait_for_retrigger = true;
			soundpos thread play_the_sound();
		}
		wait 0.1;
	}
}

play_the_sound()
{
		self playsound( "sirene" );
		wait 30;
		level.wait_for_retrigger = false;
}


Nur mal das Grundlegende.
Den Rest kannst du dann selber ausbauen.
Banana2077
also ich bräuchte ja mal wirklich ein ganzes tutorial mit sound einfügen, trigger, scripts, iwds usw..

vielleicht ist jmd so nett und macht da mal ein tutorial die anderen kapier ich einfach nicht O_o Wie unser Mickey immer...


achja Fussball 9
Verni@hter
Also hier erstmal des wie ich das nun eingeben habe.

meine .gsc:

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:
main()
{
	maps\createfx\mp_bfmap_fx::main();
    maps\mp\mp_bfmap_fx::main();
	maps\mp\_load::main();
	triggerd_sound();
	thread fanSpin();

    maps\mp\_destructables_obj::main();

	//maps\mp\_compass::setupMiniMap("compass_map_mp_bfmap");


	ambientPlay("ambient_overgrown_day");

     setExpFog(150, 5000, 0.4, 0.425, 0.44, 0.0);

	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");


	if(getDvar("g_gametype") == "ctf" || getDvar("g_gametype") == "ctfb"){

		addobj("allied_flag", (3695.22, 3538.54, 194), (0, 0, 0));
		addobj("axis_flag", (-992.571, -276.212, 93.9724), (0, 0, 0));
	}

	if(getDvar("g_gametype") == "re"){

		level.objective_vcr = [];
		level.objective_vcr[0] = spawn("script_model", (1561.5, 2633.5, 239.468));
		level.objective_vcr[0].angles = (0, 0, 0);
		level.objective_vcr[1] = spawn("script_model", (-1016, 1328, 253));
		level.objective_vcr[1].angles = (0, 0, 0);
		level.objective_vcr[2] = spawn("script_model", (3652.5, -625, 399.5));
		level.objective_vcr[2].angles = (0, 0, 0);

		level.objective_vcrcase = [];
		level.objective_vcrcase[0] = spawn("script_model", (331.5, -870, 218.416));
		level.objective_vcrcase[0].angles = (0, 0, 0);
		level.objective_vcrcase[1] = spawn("script_model", (3695.22, 3538.54, 194));
		level.objective_vcrcase[1].angles = (0, 0, 0);
		level.objective_vcrcase[2] = spawn("script_model", (2833, 1478.5, 338.241));
		level.objective_vcrcase[2].angles = (0, 0, 0);

		addobj_base("objective_base", (1452, 908.5, 447), (0, 0, 0));
	}
}

addobj(name, origin, angles){

	ent = spawn("trigger_radius", origin, 0, 48, 148);
	ent.targetname = name;
	ent.angles = angles;
}

addobj_base(name, origin, angles){

	ent = spawn("trigger_radius", origin, 0, 40, 48);
	ent.targetname = name;
	ent.angles = angles;
}

triggerd_sound()
{
	level.wait_for_retrigger = false;
	soundtrigger = getent( "sirenen_trigger", "targetname" ); // trigger_multiple
	soundpos = getent( "position_of_sound", "targetname" );

	while( 1 )
	{
		if( !level.wait_for_retrigger )
		{
			soundtrigger waittill( "sirenen_trigger" );
			level.wait_for_retrigger = true;
			soundpos thread play_the_sound();
		}
		wait 0.1;
	}
}

play_the_sound()
{
		self playsound( "sirene" );
		wait 30;
		level.wait_for_retrigger = false;
}

fanSpin(){

/*Code by AmishThunder
 www.kramerartanddesign.com*/

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

	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;
	}
}



folgendes hab ich nun geändert:

1.)

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
soundtrigger = getent( "sirenen_trigger", "targetname" ); // trigger_multiple


hier hab ich also den Namen meines Triggers angegeben

2.)

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
soundtrigger waittill( "sirenen_trigger" );



hier hab ich wieder den Namen meines Triggers eingegeben

3.)

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
self playsound( "sirene" );



hab ich so gelassen.
Und so schaut meine .csv aus:

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
#Music,,,,,,,,,,,,,,,,,,,,,,,,,
sirene,,music/sirene.mp3,0.85,,,,,,,music,streamed,,,nonlooping

sirene ,1,music/fuselage_stress.wav,0.8,0.85,,0.95,1.05,7,1500,auto,streamed,,,,mp_bfmap,,,,,,,,,,,,,



Ich versteh nur nicht wirklich wo denn die Koordinaten hin sollen. Denn hier kanns doch nicht sein...

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
soundpos = getent( "position_of_sound", "targetname" );



und so kann ich des auch net machen denn sonst wird der Sound direkt abgespielt.

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
ent = maps\mp\_createfx::createLoopSound();
     	ent.v[ "origin" ] = ( -17.8488, -551.8, -166.982 );
     	ent.v[ "angles" ] = ( 0, 270, 0 );
     	ent.v[ "soundalias" ] = "sirene";



Ich bekomme keine Fehlermeldung aber es passiert auch nix.


Ich brauch mehr Input mir ist warm und der Kopf raucht. Augen rollen
OLD MAN WITH GUN

Zitat:

Original von Verni@hter
hier hab ich also den Namen meines Triggers angegeben
2.)

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
soundtrigger waittill( "sirenen_trigger" );


Falsch. Da gehört das Wort "trigger" rein und nicht der Name des triggers.
Dein triggerentity "soundtrigger" soll ja hier warten, bis es von einem Spieler ausgelöst (getriggert) wird. Sobald ein Spieler den trigger_multiple berührt wird das Event "trigger" ausgelöst und genau darauf wartet der script hier (und auf nichts anderes).

Zitat:

Original von Verni@hter
Und so schaut meine .csv aus:

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
#Music,,,,,,,,,,,,,,,,,,,,,,,,,
sirene,,music/sirene.mp3,0.85,,,,,,,music,streamed,,,nonlooping

sirene ,1,music/fuselage_stress.wav,0.8,0.85,,0.95,1.05,7,1500,auto,streamed,,,,mp_bfmap,,,,,,,,,,,,,


Nimm mal Zeile 2 raus und bei Zeile 4 das Leerzeichen hinter sirene

Zitat:

Original von Verni@hter
Ich versteh nur nicht wirklich wo denn die Koordinaten hin sollen. Denn hier kanns doch nicht sein...

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
soundpos = getent( "position_of_sound", "targetname" );



Doch genau da Augenzwinkern
Pack ein script_origin in deine Map und gib ihm den targetname "position_of_sound". genau an diesem script_origin wird dann der Sound abgespielt. Das script_origin kannst du per script dann auch an jede x-beliebige Stelle bewegen.
Verni@hter
Haha very nice! Funktioniert....

Wie mach ich des jetzt mit mehreren Triggern? Ich sach jetzt einfach mal ich bräuchte 5 Trigger der selben Art mit dem selben Sound und zusätlich 1 Trigger mit einem anderen Sound wie führt man solch ein Script weiter?

Gruß
OLD MAN WITH GUN
Keine Garantie das es klappt.
Ist nur schnell mal dahingeschrieben

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:
/*********************************************************************************************************
give every trigger_multiple the same targetname (e.g. sound_trigger)
add a script_origin for each trigger_multiple (6 triggers = 6 script_origins)
weld (key "w") every trigger with one of these script_origins, so every trigger has it's own script_origin
at least, give every script_origin the key script_noteworthy with the soundaliasname as value.
e.g. key: script_noteworthy value: sound_1 to play the sound sound_1 at this script_origin
*********************************************************************************************************/

trigger_init()
{
	soundtriggers = getentarray( "sound_trigger", "targetname" );
	
	for( i = 0; i < soundtriggers.size; i++ )
		soundtriggers[i] thread trigger_sound();
}

trigger_sound()
{
	self.wait_for_retrigger = false;
	soundpos = getent( self.target, "targetname" );
	
	while( 1 )
	{
		if( !self.wait_for_retrigger )
		{
			self waittill( "trigger" );
			self.wait_for_retrigger = true;
			soundpos thread play_the_sound( self, soundpos.script_noteworthy );
		}
		wait 0.1;
	}
}

play_the_sound( used_trigger, sound )
{
		self playsound( sound );
		wait 30;
		used_trigger.wait_for_retrigger = false;
}

Verni@hter
Super Sache das Ding!!! Freude

Funktioniert. Hab jetzt 2x mit sound_1 und 1x sound_2 drin.

Gibt es denn in diesen Script eine Entfernungsbremse grosses Grinsen

Ich hab jetzt mal versucht 2km zwischen Trigger und scrip_origin zu lassen bin dann auf den Trigger getreten und schnell zum script_origin geflogen dort war dann aber nix zu hören. Liegen 20 - 30 m dazwischen hört man es noch. Also ich meine natürlich ist klar das ich den Sound aus 2 km Entfernung nicht mehr höre (das soll auch nicht so sein) nur dacht ich wenn man hinfliegt würde man es hören. Ich weiß eben nicht wie das ist wenn man zu zweit auf einem Server ist der Mitspieler den Trigger auslöst und ich am script_origin 2km weiter weg höre den Sound oder eben nicht.

Weißte was ich meine?
OLD MAN WITH GUN
Sollte aber eigentlich zu hören sein.
Setz einen/die Trigger doch mal vor Spawnpunkte und lass dann einfach Bots spawnen (eine Mod nehmen die Bots hat, versteht sich). Wenn du dann am script_origin stehst und ein Bot in den Trigger läuft, sollte der Sound abgespielt werden und du solltest ihn hören können.
Verni@hter
Jup haste recht man hört es! smile Dank dir für das Script. Ich mach dann mal ein komplettes TUT fertig dann haben alle was von.
Verni@hter