Lichtschalter

SN!P3R
Wie der eine oder andere vielleicht weis gibt es schon ein Tutorial davon, nur gibt es blöderweise das Script dazu nicht mehr, wenn man auf "HIER" klickt unglücklich

Tuturial: [Tutorial] Lichtschalter Anleitung (getestet & funktioniert)

habe eig schon alles gemacht, fehlt nur noch das script, und wäre toll wenn ich das script gleich in meine mapname.gsc datei einfügen kann. smile
Denn habe meine Türen auch da drinnen denn als _door.gsc-datei hatte ich ein paar fehler im script und kenne mich nicht so gut mit script-gehler-beheben aus. unglücklich
Marvin
Entweder guckst du diesen Thread

Oder hier diereckt das 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:
main()
{
	thread movelight1();
}

movelight1()
{
	lamp = getent("lampmove1","targetname");
	trig = getent ("lightschwitch1", "targetname");

	while(1)
	{
		trig waittill("trigger");
		lamp movez(500,0.05);		// der lamp movez(500,0.05); befehl bestimmt wie viele einheiten das licht bewegt wird!!! 
		lamp waittill("movedone");
		trig waittill("trigger");
		lamp movez(-500,0.05);
		lamp waittill("movedone");
	}
}



Damit sollte das geklärt sein, oder. Augenzwinkern

mfg Marvin

Ps: Vorischt wenn du den Link benutzt. Steinacker hat höchst wahrscheinlich einen anderen targetname benutzt. Augenzwinkern
SN!P3R
naja, fast aber nicht ganz unglücklich

habe hier mein script:

main()
{

maps\mp\_load::main();
ambientPlay("ambient_backlot_ext");

game["allies"] = "sas";
game["axis"] = "opfor";
game["attackers"] = "axis";
game["defenders"] = "allies";
game["allies_soldiertype"] = "woodland";
game["axis_soldiertype"] = "woodland";

setdvar( "r_specularcolorscale", "1" );

setdvar("r_glowbloomintensity0",".25");
setdvar("r_glowbloomintensity1",".25");
setdvar("r_glowskybleedintensity0",".3");
setdvar("compassmaxrange","1800");


//*Dein eigener Map-Kram an dieser Stelle*

doortriggers = getentarray("doortrig","targetname");
for(i = 0; i < doortriggers.size; i++)

thread movelight1();
doortriggers[i] thread door_think();
}

door_think()
{
self.doormoving = false;
self.doorclosed = true;
self.doormodel = getent(self.target, "targetname");

while (1)
{
self waittill("trigger");
if(!self.doormoving)
self thread door_move();
}
}

door_move()
{
self.doormoving = true;

speed= 3;
height= 54;


if(self.doorclosed)
{
self.doormodel movex (height,speed);
self.doormodel waittill("movedone");
self.doorclosed = false;
}
else
{
self.doormodel movex(height - (height *2),speed);
self.doormodel waittill("movedone");
self.doorclosed = true;
}

self.doormoving = false;
}

//////////////////////////////////////////////////////////

ohne diesen grünen teil geht das script.

movelight1()


{
lamp = getent("lampmove1","targetname");
trig = getent ("lightschwitch1", "targetname");

while(1)
{

height= 50;
speed = 0.5;

trig waittill("trigger");
lamp movez(height,speed);
lamp waittill("movedone");

trig waittill("trigger");
lamp movez(height-(height*2),speed);
lamp waittill("movedone");
}
}



hier mein fehler traurig


voll komisch eig, denn wie kann ein main() einen fehler verursachen? brauche HIIIIIIIIIILFE unglücklich
Marvin
Also ich würde ein neues script für beides basteln also so:

_light_move.gsc
_door.gsc

Diese Datein in den Ordner raw/maps/mp

Nun musst du in diese Datein deine scripts einfügen und abspeichern.

Einträge in der Mapname.gsc

maps\mp\_light_move::main();
maps\mp\_door::main();

Das sollte dann in etwa so aussehen:

main()
{

maps\mp\_light_move::main();
maps\mp\_door::main();
maps\mp\_load::main();
ambientPlay("ambient_backlot_ext");

game["allies"] = "sas";
game["axis"] = "opfor";
game["attackers"] = "axis";
game["defenders"] = "allies";
game["allies_soldiertype"] = "woodland";
game["axis_soldiertype"] = "woodland";

setdvar( "r_specularcolorscale", "1" );

setdvar("r_glowbloomintensity0",".25");
setdvar("r_glowbloomintensity1",".25");
setdvar("r_glowskybleedintensity0",".3");
setdvar("compassmaxrange","1800");


Ach ja und ändere mal "opfor" in "russian"

Okay nun noch die Update Zone File einträge:

rawfile,maps/mp/_light_move.gsc
rawfile,maps/mp/_door.gsc


Das sollte dann in etwa so aussehen:

ignore,code_post_gfx_mp
ignore,common_mp
ignore,localized_code_post_gfx_mp
ignore,localized_common_mp
col_map_mp,maps/mp/mp_sniper_v1.d3dbsp
rawfile,maps/mp/mp_sniper_v1.gsc
impactfx,mp_sniper_v1
sound,common,mp_sniper_v1,!all_mp
sound,generic,mp_sniper_v1,!all_mp
sound,voiceovers,mp_sniper_v1,!all_mp
sound,multiplayer,mp_sniper_v1,!all_mp
include,mptypes_woodland

rawfile,maps/mp/_door.gsc
rawfile,maps/mp/_light_move.gsc


Ich glaube manche scripts müssen eine eigene Datei sein. Hier nochmal die mapname.gsc; wie es aussehen sollte:

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:
main()
{
maps\mp\_light_move::main();
maps\mp\_door::main();
maps\mp\_load::main();
ambientPlay("ambient_backlot_ext");

game["allies"] = "sas";
game["axis"] = "russian";
game["attackers"] = "axis";
game["defenders"] = "allies";
game["allies_soldiertype"] = "woodland";
game["axis_soldiertype"] = "woodland";

setdvar( "r_specularcolorscale", "1" );

setdvar("r_glowbloomintensity0",".25");
setdvar("r_glowbloomintensity1",".25");
setdvar("r_glowskybleedintensity0",".3");
setdvar("compassmaxrange","1800");

SN!P3R
ok, danke, mache mich mal an die arbeit smile
und für eine zweite tür oder licht muss ich dann einfach eine neue _light_move.gsc machen, die dann halt zb _light_move1.gsc heißt,oder?
Marvin
Die Tür kannst du so oft einbauen wie du willst, das Licht habe ich nicht getestet. Aber du musst alles an der Tür + Trigger + Origin + eventuelle Türklinke auswählen und dann kopieren.
Werde dann mal das Licht austesten. Dann sag ich dir bescheid. smile

mfg Marvin

Edit: Okay für eine zweite Lampe musst du ein neues script basteln. Natürlich anderen targetname für trigger und licht und im neuen script anpassen.

lamp = getent("lampmove1","targetname");
trig = getent ("lightschwitch1", "targetname");

Hier anpassen. Und wieder genau so einfügen wie die anderen scripts. Augenzwinkern

mfg Marvin
SN!P3R
einen haken gibt es noch.


da ist nun das "Licht" ausgeschalten

muss ich halt noch weiter runtersetzten




aber da ist es eingeschalten und es ändert sich fast garnichts

nur der lichtstreifen reschts oben auf dem candy-automaten kommt dazu, ich hätte aber gerne ein richig starkes intensives licht, damit es dann richtig hell wird.



EDIT:

dass sind meine einstellungen von dem licht, also nicht von dem grünen kleinen brush.



und das von dem kleinen grünen brush:
Marvin
das liegt wahrscheinlich daran dass das Licht schon durch den Durchgang da links scheint. Obwohl bei mir sieht das so aus:

an:

aus:


mfg Marvin
steinacker

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:
main()
{
	maps\mp\_load::main();
	ambientPlay("ambient_backlot_ext");

	game["allies"] = "sas";
	game["axis"] = "opfor";
	game["attackers"] = "axis";
	game["defenders"] = "allies";
	game["allies_soldiertype"] = "woodland";
	game["axis_soldiertype"] = "woodland";

	setdvar( "r_specularcolorscale", "1" );

	setdvar("r_glowbloomintensity0",".25");
	setdvar("r_glowbloomintensity1",".25");
	setdvar("r_glowskybleedintensity0",".3");
	setdvar("compassmaxrange","1800");


	thread doortrig();
	thread movelight1();
}


doortrig()
{

	doortriggers = getentarray("doortrig","targetname");

	for(i = 0; i < doortriggers.size; i++)
		doortriggers[i] thread door_think();
}

door_think()
{
	self.doormoving = false;
	self.doorclosed = true;
	self.doormodel = getent(self.target, "targetname");

	while (1)
	{
		self waittill("trigger");

		if(!self.doormoving)
			self thread door_move();
	}
}

door_move()
{
	self.doormoving = true;
	speed= 3;
	height= 54;

	if(self.doorclosed)
	{
		self.doormodel movex (height,speed);
		self.doormodel waittill("movedone");
		self.doorclosed = false;
	}
	else
	{
		self.doormodel movex(height - (height *2),speed);
		self.doormodel waittill("movedone");
		self.doorclosed = true;
	}

	self.doormoving = false;
}

//////////////////////////////////////////////////////////

movelight1()
{
	lamp = getent("lampmove1","targetname");
	trig = getent ("lightschwitch1", "targetname");

	while(1)
	{
		height= 50;
		speed = 0.5;

		trig waittill("trigger");
		lamp movez(height,speed);
		lamp waittill("movedone");

		trig waittill("trigger");
		lamp movez(height-(height*2),speed);
		lamp waittill("movedone");
	}
}


so sollte das funktionieren, du hast den aufruf der funktion movelight1() an der flschen stelle platziert

wenn du noch mehrere scripts erwendest, wäre es besser jedes in eine eigene datei zu erbannen, sonst erlierst du irgendwann den überblick
SN!P3R
habe das nun als mein script.

main()
{
thread movelight1();

}

movelight1()

{
lamp = getent("lampmove1","targetname");
trig = getent ("lightschwitch1", "targetname");

while(1)
{

height= 150;
speed = 0.005;

trig waittill("trigger");
lamp movez(height,speed); // der lamp movez(500,0.05); befehl bestimmt wie viele einheiten das licht bewegt wird!!!
lamp waittill("movedone");

trig waittill("trigger");
lamp movez(height-(height*2),speed);
lamp waittill("movedone");
}
}




verglich es und da war eig kein fehler, schaute gleich aus wie deines was du ausgebessert hast.

habe nun aber die "height" von 100 bis 400 in 50er schritten ausprobiert und es kommt kein licht.

glaub mal ich hab irgendwas anderes falsch gemacht. unglücklich


1.erstellt man ein lich (rechtsklick light) mit diesen werten.

_color 1.000000 1.000000 0.909804
classname .........light
def .....................light_point_linear
exponent ............0
fov_inner ............80
fov_outer ...........110
intensity ............1.5
maxmove ...........500
origin ................0 0 0
radius ...............700
spawnflags........ 5
target ...............auto900 (link zum gruenen wuerfel ,info_null - auto900,auto901...usw)
targetname....... lampmove1 (jedes licht muss ein script haben...lightmove1,lightmove2...usw)

...und

Primary_omni
primary_scriptable


2.eine info_null. (rechtsklick-->info-->null)

Werte:
targetname .......auto900

3. sucht man sich irgendeinen lichtschalter zur demonstration, bzw zum real-life.

4.über den, bzw neben, oberhalb.... legt man einen trigger (rechtsklick-->trigger-->use)

Werte:
classname .......trigger_use
cursorhint ........HINT_ACTIVATE
intensity ..........0.6
targetname ......lightschwitch1


5. in das update zonefile diese befehle rechts reinschreiben.

Werte:

rawfile,maps/mp/_door.gsc
rawfile,maps/mp/_light_move.gsc

diese werte werden nur reingeschrieben, da man ja diese datein als eine extra .gsc datei hat.

6. mapname.gsc

in die mapname.gsc kommen auch noch zwei zeilen.

main()
{
maps\mp\_light_move::main();
maps\mp\_door::main();
maps\mp\_load::main();
ambientPlay("ambient_backlot_ext");

game["allies"] = "sas";
game["axis"] = "russian";
game["attackers"] = "axis";
game["defenders"] = "allies";
game["allies_soldiertype"] = "woodland";
game["axis_soldiertype"] = "woodland";

setdvar( "r_specularcolorscale", "1" );

setdvar("r_glowbloomintensity0",".25");
setdvar("r_glowbloomintensity1",".25");
setdvar("r_glowskybleedintensity0",".3");
setdvar("compassmaxrange","1800");
}



stimmt das nun alles so wie ich es beschrieben habe, oder nicht?

Habe es genau so gemacht.

und die höhe wie weit dass das licht rauf soll habe ich mit einem brush ausgemessen.

(obere seite =ziel
untere seite = anfang

und die höhe wird ja dann von dem brush angezeigt.



passt das nun alles?
SN!P3R
achja und wegen tür so ofteinbauen wie ich will, dann kommt aber ein script runtime error.

und im radianten ist die eine tür+trigger dann mit der tür2+trigger2 mit einem blauen strich verbunden.

darf das sein? eig ja nicht, oder?
Marvin
Das mit der blauen Linie ist absoulut notwendig. Sonst funktioniert es sowie so nicht!!!

mfg Marvin
SN!P3R
so, habe es schon hinbekommen, nur muss ein neues script schreiben, da soll nämlich die tür in y-Richtung öffnen smile
Marvin
Okay na dann. Weisst ja hoffentlich in zwischen wie man das einfügt, oder?

mfg Marvin
SN!P3R
ja, war alles ganz easy nur habe ich was lustiges entdeckt grosses Grinsen

mein zweites script lautete dann _door_y.gsc (erstes: _door.gsc)

und der zweite underline hatte ihm nicht gepasst, keine ahnung warum, er sagte mir dann, dass er die datei nicht hat finden können.

dann entschloss ich mich die _door_y.gsc in _door1.gsc umzunennen. Dann noch im mapname.gsc umgeändert und in movex in movey geändert und schon funzte es smile
Marvin
Okay. Vieleicht hast du ja die update zone file-einträge vergessen Zunge raus

mfg Marvin
SN!P3R
smile hatte ich auch, egal es geht, das ist doch die hauptsache grosses Grinsen
SN!P3R
habe das nun als mein script.

main()
{
thread movelight1();

}

movelight1()

{
lamp = getent("lampmove1","targetname");
trig = getent ("lightschwitch1", "targetname");

while(1)
{

height= 150;
speed = 0.005;

trig waittill("trigger");
lamp movez(height,speed); // der lamp movez(500,0.05); befehl bestimmt wie viele einheiten das licht bewegt wird!!!
lamp waittill("movedone");

trig waittill("trigger");
lamp movez(height-(height*2),speed);
lamp waittill("movedone");
}
}




verglich es und da war eig kein fehler, schaute gleich aus wie deines was du ausgebessert hast.

habe nun aber die "height" von 100 bis 400 in 50er schritten ausprobiert und es kommt kein licht.

glaub mal ich hab irgendwas anderes falsch gemacht. unglücklich


1.erstellt man ein lich (rechtsklick light) mit diesen werten.

_color 1.000000 1.000000 0.909804
classname .........light
def .....................light_point_linear
exponent ............0
fov_inner ............80
fov_outer ...........110
intensity ............1.5
maxmove ...........500
origin ................0 0 0
radius ...............700
spawnflags........ 5
target ...............auto900 (link zum gruenen wuerfel ,info_null - auto900,auto901...usw)
targetname....... lampmove1 (jedes licht muss ein script haben...lightmove1,lightmove2...usw)

...und

Primary_omni
primary_scriptable


2.eine info_null. (rechtsklick-->info-->null)

Werte:
targetname .......auto900

3. sucht man sich irgendeinen lichtschalter zur demonstration, bzw zum real-life.

4.über den, bzw neben, oberhalb.... legt man einen trigger (rechtsklick-->trigger-->use)

Werte:
classname .......trigger_use
cursorhint ........HINT_ACTIVATE
intensity ..........0.6
targetname ......lightschwitch1


5. in das update zonefile diese befehle rechts reinschreiben.

Werte:

rawfile,maps/mp/_door.gsc
rawfile,maps/mp/_light_move.gsc

diese werte werden nur reingeschrieben, da man ja diese datein als eine extra .gsc datei hat.

6. mapname.gsc

in die mapname.gsc kommen auch noch zwei zeilen.

main()
{
maps\mp\_light_move::main();
maps\mp\_door::main();
maps\mp\_load::main();
ambientPlay("ambient_backlot_ext");

game["allies"] = "sas";
game["axis"] = "russian";
game["attackers"] = "axis";
game["defenders"] = "allies";
game["allies_soldiertype"] = "woodland";
game["axis_soldiertype"] = "woodland";

setdvar( "r_specularcolorscale", "1" );

setdvar("r_glowbloomintensity0",".25");
setdvar("r_glowbloomintensity1",".25");
setdvar("r_glowskybleedintensity0",".3");
setdvar("compassmaxrange","1800");
}



stimmt das nun alles so wie ich es beschrieben habe, oder nicht?

Habe es genau so gemacht.

und die höhe wie weit dass das licht rauf soll habe ich mit einem brush ausgemessen.

(obere seite =ziel
untere seite = anfang

und die höhe wird ja dann von dem brush angezeigt.



passt das nun alles?
Marvin
Wenn du dein Tür-script _door.gsc und dein Licht-script _light_move.gsc genannt hast stimmt das so.

Keine Ahnung was da fehlt. Kann nur sagen:

Nicht versagen, steinacker fragen. Augenzwinkern

mfg Marvin