[Tutorial] Tür öffnen mit Sound & Adminfunktion

Verni@hter
Was macht/kann diese Tür?

  • sie lässt sich öffnen und schließen
  • hat beim öffnen und schließen einen Sound
  • Trigger der Tür bewegt sich beim öffnen und schließen mit
  • ist die Tür offen wird ein Text + Icon angezeigt, ist sie vom Admin deaktiviert wird ein anderer Text eingeblendet und das Icon verschwindet
  • Serveradmins können selbst per server.cfg entscheiden bei welchem Spielmodus man die Tür öffnen kann oder wo sie lieber geschlossen bleibt

    Das Script stammt von OLD MAN WITH GUN, im Diskussionsthread dvars für Admins einbauen haben weiter geholfen Nightwing & BadMan

    folgende Threads wurden genutzt:

    dvars für Admins einbauen
    [Tutorial] Öffnende Tür erstellen *
    [Tutorial] Aufzug oder Tür mit Sound belegen

  • Als erstes erstellen wir eine Tür wie in diesem Tutorial [Tutorial] Öffnende Tür erstellen *
    ich hab das ganze schon vorbereitet Download, fertige Tür bei dem dort im Thread angegebene Script bewegt sich der Trigger nicht mit und es wird auch bei öffnen und schließen kein Sound abgespielt dies wurde dann nach und nach im Thread oder in neuen Threads weiter entwickelt. Wo wir dann schon bei der _door.gsc wären ->
  • erstelle ein neues Textdokument und benenne es von Neues Textdokument.txt in _door.gsc um, speicher die gsc im Ordner map/mp ab

  • Script Trigger bewegt sich mit und hat beim öffnen und schließen einen Sound

    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:
    
    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 ("dein_soundaliases_name"); //oeffnen
    self.doormodel rotateyaw(-90,1,0.5,0.5);
    self.doormodel waittill("rotatedone");
    self.doorclosed = false;
    }
    else
    {
    self.doormodel playsound ("dein_soundaliases_name"); //schließen
    self.doormodel rotateyaw(90,1,0.5,0.5);
    self.doormodel waittill("rotatedone");
    self.doorclosed = true;
    }
    self.doormoving = false;
    }



    kopiere das Script und füge es in deine _door.gsc ein
    ändere bitte im Code folgendes ab -> 2x dein_soundaliases_name (kann individuell vergeben werden)
    WICHTIG!! Hast du für das öffnen und schließen jeweils einen extra Sound müssen hier 2 verschiedene soundaliases namen angegeben werden ansonsten 2 gleiche
    WICHITG!! Wenn du Spieleigene Sounds benutzt dann solltest du auch deren soundaliases namen nutzen

  • erstellt einen Ordner sound auf eurem Desktop, erstellt im Ordner sound einen Ordner music (kann auch einen anderen Namen haben. Im Tutorial nutze ich music)
  • in den Ordner music kommen nun eure Custom Sounds schicke Seite für Sounds
  • Das Musikstück sollte das Format Wave haben
  • rechtsklick auf den Ordner sound -> Zum Archiv hinzufügen -> Archivformat ZIP wählen, dann das ganze von sound.zip in mp_dein_mapname.iwd umbenennen

  • erstelle ein neues Textdokument und benenne es um von Neues Textdokument.txt in mp_dein_mapname.csv und füge folgendes ein

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

    code:
    1:
    2:
    3:
    4:
    5:
    
    name,sequence,file,vol_min,vol_max,vol_mod,pitch_min,pitch_max,dist_min,dist_max,channel,type,probability,loop,masterslave,loadspec,subtitle,compression,secondaryaliasname,volumefalloffcurve,startdelay,speakermap,reverb,lfe percentage,center percentage,platform,envelop_min,envelop_max,envelop percentage
    
    #tuer
    dein_soundaliases_name,1,music/deinsoundfile.wav,0.8,0.85,,0.95,1.05,7,1500,auto,streamed,,,,mp_dein_mapname,,,,,,,,,,,,,
    dein_soundaliases_name,1,music/deinsoundfile.wav,0.8,0.85,,0.95,1.05,7,1500,auto,streamed,,,,mp_dein_mapname,,,,,,,,,,,,,



    ändere bitte im Code folgendes ab -> mp_dein_mapname & dein_soundaliases_name & deinsoundfile.wav

  • was wir nicht tun ist dies hier -> maps\mp\_door::main(); in unsere map.gsc zu schreiben
  • kopiere dies -> rawfile,maps/mp/_door.gsc in dein zonefile
  • kopiere dies -> sound,mp_dein_mapname,mp_dein_mapname,all_mp in dein zonefile
  • nun kommen die dvars für den Admin ins Spiel

    kopiere folgenden Code in den main Block deiner map.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:
    
    level.gtdoor = false;
        tmp = getDvar("mp_dein_mapname");
        if( isDefined( tmp ) )
        {
            gtarray = StrTok( toLower( 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_NOICON" );
                    doortriggers[i] SetHintString( "Door is locked!" );
                }
            }
    
        }
        else
            thread maps\mp\_door::main();
    }



    das ganze sieht dann so aus:

    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:
    
    main()
    {
    	
    	maps\mp\_load::main();
    
    
    	game["allies"] = "sas";
    	game["axis"] = "russian";
    	game["attackers"] = "axis";
    	game["defenders"] = "allies";
    	game["allies_soldiertype"] = "woodland";
    	game["axis_soldiertype"] = "woodland";
    
    	level.gtdoor = false;
        tmp = getDvar("mp_dein_mapname");
        if( isDefined( tmp ) )
        {
            gtarray = StrTok( toLower( 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_NOICON" );
                    doortriggers[i] SetHintString( "Door is locked!" );
                }
            }
    
        }
        else
            thread maps\mp\_door::main();
    }



    ändere bitte im Code folgendes ab -> mp_dein_mapname das steht nacher so auch in der Server.cfg des Admins drin. Damit das dann einheitlich ausschaut würd ich das mit dem Consolennamen deiner Map machen

  • der Admin hat nun die Möglichkeit per dvar zu entscheiden ob man auf seinem Server die Türen öffnen kann oder nicht, das ganze kann er nun auch noch für jeden einzelnen Gametype einstellen
  • mit diesem Befehl set mp_dein_mapname_door_open "sd" welcher dann in die server.cfg geschrieben wird kann man die Tür in sd öffnen jeder weiter Gametype wird mit einem Komma getrennt hinzugefügt
  • wird dieser Befehl nicht in die server.cfg geschrieben oder bleibt es zwischen den beiden "Anführungszeichen" leer bleiben die Türen geschlossen

  • das ganze sollte man dann auch dem Admin per ReadMe.txt schreiben

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

    code:
    1:
    2:
    3:
    4:
    5:
    6:
    
    set mp_dein_mapname_door_open "sd" //Tür in Search & Destroy öffnen
    set mp_dein_mapname_door_open "sab" //Tür in Sabotage öffnen
    set mp_dein_mapname_door_open "sd,sab" //Tür in Search & Destroy und Sabotage öffnen, Gametypes mit einem Komma getrennt hinzufügen
    set mp_dein_mapname_door_open "" //Tür bleibt zu
    set mp_dein_mapname_door_open "dm,war,koth,sd,dom,sab,ctf,re,ctfb,ch,vip,htf" //Tür öffnen in allen Gametypes
    wenn du nicht möchtest das man auf der Map Türen öffnen kann dann schreibe diesen Befehl nicht in deine server.cfg! //Tür bleibt zu



    ändere bitte im Code folgendes ab -> mp_dein_mapname



Ich hoffe ich hab nix vergessen. Danke an alle Mitwirkenden!
BadMan
Schönes Tutorial

Hätte da aber noch was anzubieten, und zwar hab ich das ganze mal so abgeändert das man in der mp_meine_map.gsc wie gewohnt die Zeile
maps\mp\_door::main();
einfügen muss

Das schaut dann so aus

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

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

}



Und die _door.gsc schaut dann so aus

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:
main()
{

level.gtdoor = false;
    tmp = getDvar("mp_dein_mapname_door_open");
    if( isDefined( tmp ) )
    {
        gtarray = StrTok( toLower( tmp ), "," );
        for (i = 0; i < gtarray.size; i++)
        {
            if ( gtarray[i] == level.gametype )
                level.gtdoor = true;
        }
 
        if( level.gtdoor )
            thread door_start();
        else
        {
            doortriggers = getentarray( "doortrig", "targetname" );
            for ( i = 0; i < doortriggers.size; i++ )
            {
                doortriggers[i] SetCursorHint( "HINT_NOICON" );
                doortriggers[i] SetHintString( "Door is locked!" );
            }
        }
 
    }
    else
    thread door_start();
}

door_start()
{
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 ("dein_soundaliases_name"); //oeffnen
self.doormodel rotateyaw(-90,1,0.5,0.5);
self.doormodel waittill("rotatedone");
self.doorclosed = false;
}
else
{
self.doormodel playsound ("dein_soundaliases_name"); //schließen
self.doormodel rotateyaw(90,1,0.5,0.5);
self.doormodel waittill("rotatedone");
self.doorclosed = true;
}
self.doormoving = false;
}



Der Rest bleibt wie beim Tutorial oben



edit:

Genau, was mir aufgefallen ist du hast überall mp_dein_mapname als Bezeichnung der DVAR benutzt unten steht dann aber das man mp_dein_mapname_door_open in der server.cfg verwenden soll.
Das könnte für Verwirrung sorgen Augenzwinkern
Verni@hter
2 Wege die zum Ziel führen. Freude Danke

In der ReadMe sollte man natürlich mp_dein_mapname mit dem Consolennamen seiner eigenen Map ersetzen sonst bekommt der Admin ne Kriese. Augenzwinkern
Jamie H.
Der Download ist leider tot-wäre geil, wenn du 'nen neuen machen könntest ; )
Verni@hter
Hier ein neuer Link Wenn das ganze wieder mal down sein sollte dann einfach hier hinein schreiben und ich werds neu hochladen. Bin öfter hier nur hab ich im Moment nicht wirklich Zeit um was zu posten.