dvars für Admins einbauen |
Verni@hter
*bM.Verni@hter~
Dabei seit: 24.01.2006
Beiträge: 1.461
|
|
|
|
|
|
|
Du meinst in der server.cfg? Für FX oder Sound auf jeden Fall (Beispiel http://modsonline.com/Forums-top-96471.html) - bei Türen k.A.
Da fällt mir gerade ein, dass es für CoD 2 die Map Chelm gab, wo Durchgänge bei bestimmten Spieltypen gesperrt wurden bzw. nach dem Zufallsprinzip ausgesucht wurden. Kannst Dir ja mal die Scripts anschauen; große Unterschiede zu CoD4 sollte es nicht geben.
Hier gibt's auch eine Map mit vielen Custom-Dvars http://www.filefront.com/thankyou.php?f=15859233
__________________
|
|
|
|
|
|
Custom DVAR's in die Map einzubauen ist kein Problem.
Ich hab Dir hier mal die einfache Variante ohne Levelvariablen.
In der map.gsc kannst Du das einfach anstelle dem normalen Aufruf der _doors.gsc einbauen:
Code angehängt. Klicke hier zum Ein-/Ausblenden
code: |
1:
2:
3:
4:
5:
6:
|
// Custom DVAR's
if( getdvar( "mp_xyz_dvar" ) == "" )
setdvar( "mp_xyz_dvar", "0" );
if( getdvar( "mp_xyz_dvar" ) == "1" )
thread maps\mp\_doors::main();
|
|
Für jede DVAR musst Du den gesamten Block einfügen.
Bin grad auf Arbeit und kann Dir nix schöneres basteln, funktionieren tut es aber.
ToM
__________________
|
|
|
|
|
|
Wochenende ohne Party? Wasn das?
Dein Versuch ist leider falsch, Du darfst nur den Namen der Var ändern, mehr nicht.
Hier mal ein Beispiel für SD und KOTH, grad mal am Beispiel Deiner mp_dv:
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:
|
main(){
maps\mp\mp_dv_windrad::main(); //NEU
maps\mp\mp_dv_fx::main();
maps\createfx\mp_dv_fx::main();
maps\mp\_explosive_barrels::main();
maps\mp\_explosive_models::main(); //NEU
maps\mp\mp_dv_sound_fx::main();
maps\mp\_load::main();
thread siren();
thread fanSpin();
thread screenchanger();
maps\mp\_compass::setupMiniMap("compass_map_mp_dv");
setExpFog(150, 5000, 0.4, 0.425, 0.44, 0.0);
ambientPlay("mp_dv");
level.airstrikeHeightScale = 2.1;
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");
// Custom DVAR's für SD
if( getdvar( "mp_dv_dvar_sd" ) == "" )
setdvar( "mp_dv_dvar_sd", "0" );
if( getdvar( "mp_dv_dvar_sd" ) == "1" )
thread maps\mp\_doors::main();
// Custom DVAR's für KOTH
if( getdvar( "mp_dv_dvar_koth" ) == "" )
setdvar( "mp_dv_dvar_koth", "0" );
if( getdvar( "mp_dv_dvar_koth" ) == "1" )
thread maps\mp\_doors::main();
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;
}
siren(){
//Trigger
trig = getent("sirenen_trigger","targetname");
trig waittill ("trigger");
musicplay ("sirene");
}
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;
}
}
screenchanger(){
screen = [];
for( i = 1; i < 7; i++ ){
screen[i] = getent( "Buchstabe_" + i, "targetname" );
screen[i] hide();
}
time = 5;
while( 1 ){
for( i = 1; i < 7; i++ ){
if( i == 1 )
screen[6] hide();
else
screen[i-1] hide();
screen[i] show();
wait time;
}
wait .1;
}
}
|
|
Die Abfrage bedeutet: Sieh nach, was in der cfg bei der var angegeben ist. Wenn nichts ("") oder Null ("0"), dann setze 0.
Wenn 1 ("1"), dann führe das danach angegebene Script aus ( thread maps\mp\_doors::main(); ).
Dein Türscript muss logischerweise dann _doors.gsc heissen und im Ordner maps\mp liegen.
Zwar unschön, aber mir fällt grad nix besseres ein, mag sicher an der Uhrzeit liegen.
ToM
__________________
|
|
|
|
|
Verni@hter
*bM.Verni@hter~
Dabei seit: 24.01.2006
Beiträge: 1.461
|
|
Mhhhhhhhhhhhhhhh...
So schaut jetzt meine map.gsc aus:
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:
|
main()
{
maps\mp\_door::main();
maps\mp\_load::main();
maps\mp\fan_rotate::main();
maps\mp\_dynamic_foliage::initdfs();
trigger_init();
game["allies"] = "marines";
game["axis"] = "opfor";
game["attackers"] = "axis";
game["defenders"] = "allies";
game["allies_soldiertype"] = "desert";
game["axis_soldiertype"] = "desert";
setdvar("compassmaxrange","1800");
setExpFog(150, 2000, 0.4, 0.425, 0.44, 0.0);
// Custom DVAR's für SD
if( getdvar( "mp_soundtest_1_dvar_sd" ) == "" )
setdvar( "mp_soundtest_1_dvar_sd", "0" );
if( getdvar( "mp_soundtest_1_dvar_sd" ) == "1" )
thread maps\mp\_door::main();
}
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;
} |
|
Es wird bei mir die _door.gsc aufgerufen! In der Ser.cfg hab ich des so reingeschrieben.
set mp_soundtest_1_dvar_sd "0" passieren tut aber nix.!?
__________________
Frauen sind wie Signaturen, haste keine willste eine, haste eine willste ne andere.
My Facebook
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Verni@hter: 19.10.2010 12:18.
|
|
|
|
|
|
Wunderbar.
Zu Problem 2: Dazu musst Du mir Dein Doorscript mal hier reinstellen. Die Lösung wird aber spät, ich muss jetzt los zum schaffen. Ich schau mal in der Pause rein.
ToM
__________________
|
|
|
|
|
Verni@hter
*bM.Verni@hter~
Dabei seit: 24.01.2006
Beiträge: 1.461
|
|
Hier das door script. Ist bisher für eine Tür.
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:
|
main()
{
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");
self enableLinkTo();
self linkto(self.doormodel);
while (1)
{
self waittill("trigger");
if(!self.doormoving)
self thread door_move();
}
}
door_move()
{
self.doormoving = true;
if(self.doorclosed)
{
self.doormodel playsound ("door_wood_slow_open");
self.doormodel rotateyaw(-90,3,0.5,0.5);
self.doormodel waittill("rotatedone");
self.doorclosed = false;
}
else
{
self.doormodel playsound ("door_wood_slow_open");
self.doormodel rotateyaw(90,3,0.5,0.5);
self.doormodel waittill("rotatedone");
self.doorclosed = true;
}
self.doormoving = false;
} |
|
__________________
Frauen sind wie Signaturen, haste keine willste eine, haste eine willste ne andere.
My Facebook
|
|
|
|
|
Verni@hter
*bM.Verni@hter~
Dabei seit: 24.01.2006
Beiträge: 1.461
|
|
Ich muss mich leider selber berichtigen. Die Tür geht nicht mehr auf mit dem Script aber bei 0 und 1 also egal was ich schreibe.
__________________
Frauen sind wie Signaturen, haste keine willste eine, haste eine willste ne andere.
My Facebook
|
|
|
|
|
|
Ich hätte da noch ne andere Lösung anzubieten. Da würde man mit einer einzigen dvar auskommen, egal bei wieviel verschiedenen gametypes man die Türen offen haben möchte. Den script hab ich jetzt aber nur auf reiner Vermutung geschrieben (es ist nichts getestet)
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:
|
level.gtdoor = false;
tmp = getDvar("mp_soundtest_1_door_open");
if( isDefined( tmp ) )
{
gtarray = StrTok( tmp, "_" );
for (i = 0; i < gtarray.size; i++)
{
if ( gtarray[i] == level.gametype )
level.gtdoor = true;
}
if( level.gtdoor )
thread maps\mp\_door::main();
else
{
doortriggers = getentarray( "doortrig", "targetname" );
for ( i = 0; i < doortriggers.size; i++ )
{
doortriggers[i] SetCursorHint( "HINT_DOOR_LOCKED" );
doortriggers[i] SetHintString( &"Door is locked!" );
}
}
}
else
thread maps\mp\_door::main();
|
|
Man gibt in der serverconfig dann einfach alle gametypes mit Unterstrich getrennt als parameter an, da, wo die Tür offen sein soll.
Also bei z.B.
set mp_soundtest_1_door_open "dm_war_sab_dom"
würde sich die Tür nur bei Free for all, Team Deathmatch, Sabotage und Domination öffnen lassen.
Ich hab auch mal reingebastelt, dass das Icon und der Text an den Triggern getauscht wird, wenn die Türen verschlossen sind (sollte eigentlich auch funktionieren).
Ist die dvar in der config nicht definiert, sollten sich die türen ebenfalls öffnen lassen.
Aber wie gesagt, keine Garantie, dass das funktioniert, das ist nur mal so eben schnell hingekritzelt.
__________________
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 3 mal editiert, zum letzten Mal von OLD MAN WITH GUN: 20.10.2010 18:26.
|
|
|
|
|
Verni@hter
*bM.Verni@hter~
Dabei seit: 24.01.2006
Beiträge: 1.461
|
|
Ich muss dich leider fragen an welcher Stelle ich denn das Script in meiner map.gsc einfügen muss. Ich bekomm immer bad syntax Fehlermeldung.
__________________
Frauen sind wie Signaturen, haste keine willste eine, haste eine willste ne andere.
My Facebook
|
|
|
|
|
|
Original von Verni@hter
Ich muss dich leider fragen an welcher Stelle ich denn das Script in meiner map.gsc einfügen muss. Ich bekomm immer bad syntax Fehlermeldung.
Irgendein böser Klammeraffe hat wohl in Zeile 7 die Klammer getauscht, es sollte eine { anstelle der ( sein (Hab es in OMWG's Post korrigiert).
So sieht die fertige map.gsc dann aus:
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:
|
main()
{
maps\mp\_load::main();
maps\mp\fan_rotate::main();
maps\mp\_dynamic_foliage::initdfs();
trigger_init();
game["allies"] = "marines";
game["axis"] = "opfor";
game["attackers"] = "axis";
game["defenders"] = "allies";
game["allies_soldiertype"] = "desert";
game["axis_soldiertype"] = "desert";
setdvar("compassmaxrange","1800");
setExpFog(150, 2000, 0.4, 0.425, 0.44, 0.0);
level.gtdoor = false;
tmp = getDvar("mp_soundtest_1_door_open");
if( isDefined( tmp ) )
{
gtarray = StrTok( tmp, "_" );
for (i = 0; i < gtarray.size; i++)
{
if ( gtarray[i] == level.gametype )
level.gtdoor = true;
}
if( level.gtdoor )
thread maps\mp\_door::main();
else
{
doortriggers = getentarray( "doortrig", "targetname" );
for ( i = 0; i < doortriggers.size; i++ )
{
doortriggers[i] SetCursorHint( "HINT_DOOR_LOCKED" );
doortriggers[i] SetHintString( &"Door is locked!" );
}
}
}
else
thread maps\mp\_door::main();
}
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;
} |
|
Cooles Script vom Old Man, gleich mal abspeichern.
ToM
__________________
|
|
|
|
|
Verni@hter
*bM.Verni@hter~
Dabei seit: 24.01.2006
Beiträge: 1.461
|
|
Jetzt kommt diese Meldung:
Code angehängt. Klicke hier zum Ein-/Ausblenden
code: |
1:
2:
3:
4:
|
******* script runtime error *******
HINT_DOOR_LOCKED is not a valid hint type. See above for list of valid hint types
: (file 'maps/mp/mp_soundtest_1.gsc', line 39)
doortriggers[i] SetCursorHint( "HINT_DOOR_LOCKED" ); |
|
__________________
Frauen sind wie Signaturen, haste keine willste eine, haste eine willste ne andere.
My Facebook
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Verni@hter: 20.10.2010 10:24.
|
|
|
|
|
|
Hint types sind:
"HINT_NOICON", "HINT_ACTIVATE", "HINT_HEALTH", "HINT_FRIENDLY"
__________________
|
|
|
|
|
Verni@hter
*bM.Verni@hter~
Dabei seit: 24.01.2006
Beiträge: 1.461
|
|
|
|
|
|
|
Fehler passieren halt, wenn man schnell was hinkritzelt
Hatte auch gedacht, das er das Hint-Icon HINT_DOOR_LOCKED zulässt (da man es auch im Radianten setzen kann). Und beim String hab ich das vergessen, das bei vorangestelltem & der string ein localized string sein muss (ohne Leerzeichen). Aber dann müsste man noch ein passendes localized stringfile haben (was unnötig wäre).
Und bei Team Deathmatch war ich wohl irgendwie bei WaW (wegen dem Parameter). Habs korrigiert.
@Verni@hter: setz das Icon mal auf "HINT_NOICON". Die anderen würden eh nicht passen.
Im script sollte man die Zeile
gtarray = StrTok( tmp, "_" );
noch verfeinern in
gtarray = StrTok( toLower( tmp ), "_" );
Dadurch wird der Parameter in Kleinbuchstaben gewandelt (Ich glaube, das bei Stringvergleichen auch auf Groß- und Kleinschreibung geachtet wird). Es könnte sonst passieren, das die Türen bei gesetztem Parameter nie aufgehen (da der aktuelle Gametype keinem der Gametypes im Parameter entsprechen würde).
__________________
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 6 mal editiert, zum letzten Mal von OLD MAN WITH GUN: 20.10.2010 18:26.
|
|
|
|
|
|
|
|
Impressum ||Datenschutzerklärung
|