Call of Duty 2

Hier findest Du einige Scripte, die ich mithilfe anderer grossartiger Scripter geändert und zusammengetragen habe. Desweiteren finden sich hier diverse Anleitungen, die für Serveradmins gedacht sind.

AWE 3.0beta10b mit Camperoption, Headshotsound, Firstblood und Killingspree

Im folgenden eine kleine Anleitung, wie man dem AWE Mod AWE 3.0beta10b folgende Änderungen hinzufügt: Camperoption, Headshotsound, Firstblood und Killingspree. Zum editieren der Files rate ich dringend zu dem Programm Notepad ++,da es Syntaxhighlightning verwendet.

Man öffnet die Datei awe\_players.gsc und füge folgenden Code in der Funktion PlayerKilled() ein:

PlayerKilled()

Code eingefügt.
PlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration)
{
    if(self.sessionteam == "spectator")
        return;
 
//** Nachricht für ersten Kill - FIRST BLOOD - **//
 
    if( level.firstblood == 0 && !isDefined ( self.switching_teams ) ){
        players = getentarray("player", "classname");
         
        level.firstblood++; //** Erster Kill wurde gemacht Variable != 0 gesetzt **//
         
        if( isPlayer ( attacker ) ){    //** Wenn Spieler Spieler Schütze ist **//
 
            for( i=0;i < players.size;i++ ){    //** Variable die alle Spieler Anzahl x definiert **//
                         
                if( players[i] != self && players[i] != attacker && attacker != self ){    //** Alle Spieler ausser Schütze und Getöteter und Schütze ist kein Selbstmörder **//
                 
                    players[i] playlocalsound( "firstblood" );     //** Sound für alle Spieler mit Ausnahme des Schützen des Getöteten und des Selbstmörders**//
                     
                    players[i] iprintln( &"CUSTOM_FBALL1", attacker.name );    //** Text für alle Spieler mit Ausnahme des Schützen des Getöteten und des Selbstmörders **//
                         
                    if( level.teamplay == 0 )
                        players[i] iprintln( &"CUSTOM_FBALL2" , self.name );    //** Text wenn keine Teams vorhanden sind **//
                         
                    else if( attacker.pers["team"] != self.pers["team"] && level.teamplay == 1 )    //** Text wenn Teams vorhanden sind und Opfer nicht im gleichen Team ist **//
                        players[i] iprintln( &"CUSTOM_FBALL2" , self.name );    //** Text für Gegner Team **//
                         
                    else if( attacker.pers["team"] == self.pers["team"] && level.teamplay == 1 )    //** Text wenn Teams vorhanden sind und Opfer im gleichen Team ist **//
                        players[i] iprintln( &"CUSTOM_FBALL3" , self.name , &"CUSTOM_FBALL4" );    //** Text für Opfer Team **//
                }
            }
             
            if( attacker != self ){    //** Schütze jedoch nicht Getöteter - Nachricht an Beide **//
             
//                if( attacker.Headshot == 1 )
//                    wait 1.5;
                attacker playlocalsound( "firstblood" );     //** Sound für den Schützen mit Wartezeit beim Headshot**//
                 
                self playlocalsound( "firstblood" );     //** Sounds für den Getöteten mit Wartezeit zwischen den Sounds **//
                self playLocalSound ( "whyami" );
                     
                attacker iprintln( &"CUSTOM_FB",&"CUSTOM_FBATT" );    //** Text für den Schützen **//
                attacker iprintln( &"CUSTOM_FBALL2" , self.name );    
                 
                self iprintln( &"CUSTOM_FBSELF1" );     //** Text für den Getöteten mit Ausnahme eines Selbstmörders **//
                self iprintln( attacker.name , &"CUSTOM_FBSELF1" );
            }
             
            for( i=0;i < players.size;i++ ){    //** Variable die alle Spieler Anzahl x definiert **//
             
                if( attacker == self ){    //** Spieler ist Selbstmörder **//
                 
                    players[i] playlocalsound( "firstblood" );    //** Sound für alle Spieler **//    
                    self playLocalSound ( "hallelujah" );
                         
                    if( players[i] != self && players[i] != attacker )
                        players[i] iprintlnbold( &"CUSTOM_FBALL1" , attacker.name );    //** Text für alle Spieler mit Ausnahme des Schützen des Getöteten und des Selbstmörders **//
                         
                    self iprintln( &"CUSTOM_FB" );        //** Text für den Selbstmörder **//
                    self iprintln( &"CUSTOM_FBSELF2" );
                         
                    if( level.teamplay == 0 && players[i] != self)    
                        players[i] iprintlnbold( &"CUSTOM_FBALL5" );    //** Text wenn keine Teams vorhanden sind **//
                                                                     
                    else if( attacker.pers["team"] != self.pers["team"] && players[i] != self && level.teamplay == 1 )    //** Text wenn Teams vorhanden sind und Selbstmörder nicht im gleichen Team ist **//
                        players[i] iprintln( &"CUSTOM_FBALL5");    //** Text für Gegner Team **//
                         
                    else if( attacker.pers["team"] == self.pers["team"] && players[i] != self && level.teamplay == 1 )        //** Text wenn Teams vorhanden sind und Selbstmörder im gleichen Team ist **//
                        players[i] iprintln( &"CUSTOM_FBTEAM1" , self.name , &"CUSTOM_FBTEAM2" );    //** Text für Selbstmörder Team **//
                }    
            }    
        }
    }
     
    thread maps\mp\gametypes\_myaddon::Killingspree(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc);
  
//** ENDE **//

Desweiteren in der gleichen Datei dies in der Funktion RunOnSpawn() hinzufügen:

RunOnSpawn()

self awe\_turrets::RunOnSpawn();
    self awe\_welcomemessages::RunOnSpawn();
//*** hinzugefügt ***//
    self awe\_camping::RunOnSpawn();
//*** ENDE ***//

Nächste Datei wäre die awe\_global.gsc, in der Funktion init() kommt folgendes hinzu:

init()

awe\_tripwire::init();
    awe\_turrets::init();
    awe\_weaponlimiting::init();
    awe\_welcomemessages::init();
//** hinzugefügt  **//
    awe\_precache::init();
    awe\_camping::init();
//** Ende **//

Im gleichen Ordner erstellen wir nun 2 neue Files. Das eine nennen wir _precache.gsc, mit folgendem Inhalt:

_precache.gsc

Code eingefügt.
Init(){
 
    // Killingspree
    precachestring(&"CUSTOM_KILLINGSPREE");
    precachestring(&"CUSTOM_ULTRAKILL");
    precachestring(&"CUSTOM_RAMPAGE");
    precachestring(&"CUSTOM_DOMINATING");
    precachestring(&"CUSTOM_MONSTERKILL");
    precachestring(&"CUSTOM_HOLYSHIT");
    precachestring(&"CUSTOM_SLAUGHTER");
    precachestring(&"CUSTOM_UNSTOPABLE");
    precachestring(&"CUSTOM_GODLIKE");
    precachestring(&"CUSTOM_ENDE_KILLSPREE1");
    precachestring(&"CUSTOM_ENDE_KILLSPREE2");
}

das andere _camping.gsc, Inhalt wie folgt:

_camping.gsc

Code eingefügt.
init (){
 
    level.awe_campers = awe\_util::cvardef("awe_campers", 1, 0, 1, "int");
    awe\_util::cvardef("awe_campers_after_sec", 90, 10, 999, "int");
     
    if(level.awe_campers == 1){
     
    if(!isdefined(game["gamestarted"])){
     
    // Precache crushmodels
    for(i=0;i<level.awe_crushmodels.size;i++)
    precacheModel("xmodel/" + level.awe_crushmodels[i]);
    }
     
    level.awe_objectQ["piano"] = [];
    level.awe_objectQcurrent["piano"] = 0;
    level.awe_objectQsize["piano"] = 2;
    level._effect["awe_dustimpact"] = loadfx("fx/dust/dust_impact_med.efx");
    }
}
    RunOnSpawn(){
     
    self thread CheckCamping();
    }
     
    CheckCamping() {
     
    self notify("CheckCamping");
    self endon("CheckCamping");
     
     
    level endon("round_ended");
     
    self endon("spawned");
    self endon("killed_player");
    self endon("disconnect");
     
    campingtime = 0;
     
    while (isPlayer(self) && isAlive(self) && !isDefined(self.pers["camper"]) &&self.pers["team"] != "spectator"){
     
        position = self getorigin();
        wait 1;
        compareposition = self getorigin();
     
        // * bleibt der Spieler innerhalb der festgelegten Camping-Distanz ? *
        if (distance(position,compareposition) < 50) campingtime = campingtime + 1;
        else campingtime = 0;
         
        if (campingtime == 15){ // einstellbar in Sekunden
         
        self iprintlnbold(&"CUSTOM_CAMP1"); //Text welcher nur der Camper zu sehen bekommt.
        iprintln(self.name , &"CUSTOM_CAMP2"); //Alle sollen wissen dass einer campt
        }
         
        if (campingtime > 20){
         
        // * Kill Camper *
        self thread awe\_util::PunishMe(1, &"CUSTOM_PUNISH3");
         
        break;
        }
    }
}

Wir wechseln munter zum Ordner maps\mp\gametypes und editieren ALLE Gametyparten, hier zum Beispiel die tdm.gsc. Änderungen ganz am Ende der Funktion einfügen! Teambasierte Spielarten (wie z.B. tdm) erhalten die 1 in der Variable, Nichtteambasierte (wie z.B. dm) die 0! Um folgendes wird die Funktion Callback_StartGameType() bereichert:

Callback_StartGameType()

//** hinzugefügt  **//
    level.teamplay = 1;
//** Ende **//

oder eben bei Deathmatch, ohne Teams:

Callback_StartGameType()

//** hinzugefügt  **//
    level.teamplay = 0;
//** Ende **//

weiter unten, in der Funktion Callback_PlayerKilled() kommt folgendes hinzu:

Callback_PlayerKilled()

Code eingefügt.
Callback_PlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration)
{
    self endon("spawned");
    self notify("killed_player");
 
    if(self.sessionteam == "spectator")
        return;
 
    // If the player was killed by a head shot, let players know it was a head shot kill
    if(sHitLoc == "head" && sMeansOfDeath != "MOD_MELEE")
        sMeansOfDeath = "MOD_HEAD_SHOT";
 
    // send out an obituary message to all clients about the kill
    obituary(self, attacker, sWeapon, sMeansOfDeath);
     
    //** Kopfschuss Nachrichten und Sounds **//
    if( sMeansOfDeath == "MOD_HEAD_SHOT" ){
     
        attacker playlocalSound ( "headshot" );    //** Sound und Text für den Schützen **//
        attacker iprintln (&"CUSTOM_HEADSHOT");
    }
 
    self maps\mp\gametypes\_weapons::dropWeapon();
    self maps\mp\gametypes\_weapons::dropOffhand();
 
    self.sessionstate = "dead";
    self.statusicon = "hud_status_dead";
 
    if(!isdefined(self.switching_teams))
        self.deaths++;

weiter unten, in der Funktion startGame() folgendes hinzu:

startGame()

Code eingefügt.
startGame()
{
    //** hinzugefügt **//
    level.firstblood = 0;    //** Variable für ersten Kill -FIRST BLOOD- **//
    //** ENDE **//
    level.starttime = getTime();
    if(level.timelimit > 0)
    .
    .
    .
}

Abschliessend erstellen wir eine neue Datei im selben Ordner, namens _myaddon.gsc, mit folgendem Inhalt:

_myaddon.gsc

Code eingefügt.
//** Killingspree, Firstblood und Headshot by Markus Lechner aka LSB Squall 69, http://lsb-snipers.com **//
 
Killingspree(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc){
    self endon("disconnected");
     
    //** Grösse und Koordinaten für Text **//
    Textsize = 2.0;
    xcoord = 0;
    ycoord = 0;
     
     
     
    if(!isDefined(attacker.KillsiRow)){
        attacker.KillsiRow = 0;
        attacker.EndSpree = 0;
    }
     
    if(!isDefined(self.KillsiRow)){
        self.KillsiRow = 0;
        self.EndSpree = 0;
    }
     
    //** Setzen der Variable für Killspree wenn Player stirbt **//
    if( self.KillsiRow  <= 2 ){
        self.KillsiRow = 0;
    }    
     
     
    if(isdefined(attacker.hud_costumprint))
    attacker.hud_costumprint destroy();
     
    if(isdefined(self.hud_costumprint))
    self.hud_costumprint destroy();
     
     
    //** Setzen der Variable wenn Killspree Ende **//
    if( self.KillsiRow >= 3 )
        self.EndSpree = 1;
 
 
    //** Check ob eine Killspree zu Ende ist **//
    if( self.EndSpree == 1 ){
         
        if( self.KillsiRow >= 11 )
            iprintln ( attacker.name , &"CUSTOM_ENDE_KILLSPREE2" , self.name , &"CUSTOM_GODLIKE" );
         
        else if( self.KillsiRow >= 10 ){
            iprintln ( attacker.name , &"CUSTOM_ENDE_KILLSPREE2" , self.name , &"CUSTOM_UNSTOPABLE" );
        }
         
        else if( self.KillsiRow >= 9 ){
            iprintln ( attacker.name , &"CUSTOM_ENDE_KILLSPREE2" , self.name , &"CUSTOM_SLAUGHTER" );
        }
         
        else if( self.KillsiRow >= 8 ){
            iprintln ( attacker.name , &"CUSTOM_ENDE_KILLSPREE2" , self.name , &"CUSTOM_HOLYSHIT" );
        }
         
        else if( self.KillsiRow >= 7 ){
            iprintln ( attacker.name , &"CUSTOM_ENDE_KILLSPREE2" , self.name , &"CUSTOM_MONSTERKILL" );
        }
         
        else if( self.KillsiRow >= 6 ){
            iprintln ( attacker.name , &"CUSTOM_ENDE_KILLSPREE2" , self.name , &"CUSTOM_DOMINATING" );
        }
         
        else if( self.KillsiRow >= 5 ){
            iprintln ( attacker.name , &"CUSTOM_ENDE_KILLSPREE2" , self.name , &"CUSTOM_RAMPAGE" );
        }
         
        else if( self.KillsiRow >= 4 ){
            iprintln ( attacker.name , &"CUSTOM_ENDE_KILLSPREE2" , self.name , &"CUSTOM_ULTRAKILL" );
        }
         
        else if( self.KillsiRow >= 3 ){
            iprintln ( attacker.name , &"CUSTOM_ENDE_KILLSPREE2" , self.name , &"CUSTOM_KILLINGSPREE" );
        }
         
        self playLocalSound ( "monsterlache" );
         
        if( attacker != self ){
            attacker playLocalSound ( "wixxer" );
            self iprintln ( attacker.name , &"CUSTOM_ENDE_KILLSPREE1" );
        }
         
        //** Killingspree ist vorbei setze Variablen neu **//
        self.EndSpree = 0;
        self.KillsiRow = 0;
    }
     
    //** Check ob Killspree im Gange ist **//
    if( attacker != self ){    //** ohh für einen Selbstmord gibt es schon gar nix **//
         
        attacker.KillsiRow++;
         
        if( !isdefined ( attacker.hud_costumprint ) ){
            attacker.hud_costumprint = newClientHudElem ( attacker );
            attacker.hud_costumprint.horzAlign = "center";
            attacker.hud_costumprint.vertAlign = "top";
            attacker.hud_costumprint.Alignx = "center";
            attacker.hud_costumprint.x = xcoord;
            attacker.hud_costumprint.y = ycoord;
            attacker.hud_costumprint.font = "default";
            attacker.hud_costumprint.fontscale = Textsize;
        }
         
        if( attacker.KillsiRow == 3 ){
            iprintln ( attacker.name , &"CUSTOM_KILLINGSPREE" );
            attacker.hud_costumprint setText( &"CUSTOM_KILLINGSPREE" );
            attacker playLocalSound ("killingspree");
        }
         
        if( attacker.KillsiRow == 4 ){
            iprintln ( attacker.name  , &"CUSTOM_ULTRAKILL" );
            attacker.hud_costumprint setText( &"CUSTOM_ULTRAKILL" );
            attacker playLocalSound ("ultrakill");
        }
         
        if( attacker.KillsiRow == 5 ){
            iprintln ( attacker.name  , &"CUSTOM_RAMPAGE" );
            attacker.hud_costumprint setText( &"CUSTOM_RAMPAGE" );
            attacker playLocalSound ("rampage");
        }
         
        if( attacker.KillsiRow == 6 ){
            iprintln ( attacker , &"CUSTOM_DOMINATING" );
            attacker.hud_costumprint setText( &"CUSTOM_DOMINATING" );
            attacker playLocalSound ("dominating");
        }
         
        if( attacker.KillsiRow == 7 ){
            iprintln ( attacker.name  , &"CUSTOM_MONSTERKILL" );
            attacker.hud_costumprint setText( &"CUSTOM_MONSTERKILL" );
            attacker playLocalSound ("monsterkill");
        }
         
        if( attacker.KillsiRow == 8 ){
            iprintln ( attacker.name  , &"CUSTOM_HOLYSHIT" );
            attacker.hud_costumprint setText( &"CUSTOM_HOLYSHIT" );
            attacker playLocalSound ("holyshit");
        }
         
        if( attacker.KillsiRow == 9 ){
            iprintln ( attacker.name  , &"CUSTOM_SLAUGHTER" );
            attacker.hud_costumprint setText( &"CUSTOM_SLAUGHTER" );
            attacker playLocalSound ("slaughter");
        }
         
        if( attacker.KillsiRow == 10 ){
            iprintln ( attacker.name  , &"CUSTOM_UNSTOPABLE" );
            attacker.hud_costumprint setText( &"CUSTOM_UNSTOPABLE" );
            attacker playLocalSound ("unstoppable");
        }
         
        if( attacker.KillsiRow >= 11 ){
            iprintln ( attacker.name  , &"CUSTOM_GODLIKE" );
            attacker.hud_costumprint setText( &"CUSTOM_GODLIKE" );
            attacker playLocalSound ("godlike");
             
        }
    }
}

Nun erstellen wir noch die Datei custom.str, die in den clientseitigen Ordner localisedstrings gehört:

custom.str

Code eingefügt.
REFERENCE           KILLINGSPREE
LANG_ENGLISH        " ^1Killing Spree!^7"
 
REFERENCE           ULTRAKILL
LANG_ENGLISH        " ^1Ultra Kill!^7"
 
REFERENCE           RAMPAGE
LANG_ENGLISH        " ^1Rampage!^7"
 
REFERENCE           DOMINATING
LANG_ENGLISH        " ^1Dominating!^7"
 
REFERENCE           MONSTERKILL
LANG_ENGLISH        " ^1Monster Kill!^7"
 
REFERENCE           HOLYSHIT
LANG_ENGLISH        " ^1Holy Shit!^7"
 
REFERENCE           SLAUGHTER
LANG_ENGLISH        " ^1Slaughter!^7"
 
REFERENCE           UNSTOPABLE
LANG_ENGLISH        " ^1Unstopable!^7"
 
REFERENCE           GODLIKE
LANG_ENGLISH        " ^1Godlike!^7"
 
REFERENCE           ENDE_KILLSPREE1
LANG_ENGLISH        " ^5beendete Dein Gemetzel!^7"
 
REFERENCE           ENDE_KILLSPREE2
LANG_ENGLISH        " ^5beendete^7 "
 
REFERENCE           HEADSHOT
LANG_ENGLISH        "^1Headshot!^7 "
 
REFERENCE           FB
LANG_ENGLISH        "^1First Blood!^7"
 
REFERENCE           FBALL1
LANG_ENGLISH        " ^5wurde vergossen von:^7"
 
REFERENCE           FBALL2
LANG_ENGLISH        " ^5...und das arme Schwein war:^7 "
 
REFERENCE           FBALL3
LANG_ENGLISH        " ^5...und es hat Dein Teammitglied^7 "
 
REFERENCE           FBALL4
LANG_ENGLISH        " ^5erwischt!^7"
 
REFERENCE           FBALL5
LANG_ENGLISH        " ^5...und er leidet an Schizophrenie!^7"
 
REFERENCE           FBATT
LANG_ENGLISH        " ^5wurde von Dir vergossen!^7"
 
REFERENCE           FBSELF1
LANG_ENGLISH        " ^5hat Dein Blut als Erster vergossen!^7"
 
REFERENCE           FBSELF2
LANG_ENGLISH        " ^5...und es war Dein eigenes Blut!^7"
 
REFERENCE           FBTEAM1
LANG_ENGLISH        "^5Dein Teammitglied^7 "
 
REFERENCE           FBTEAM2
LANG_ENGLISH        " ^5leidet an Schizophrenie!^7"
 
REFERENCE           CAMP1
LANG_ENGLISH        "^5Los beweg Dich, scheiss ^1Camper!!"
 
REFERENCE           CAMP2
LANG_ENGLISH        " ^5ist hier irgendwo am Campen!!!"
 
REFERENCE           PUNISH1
LANG_ENGLISH        " ^5wird mit "
 
REFERENCE           PUNISH2
LANG_ENGLISH        " ^5bestraft für: "
 
REFERENCE           PUNISH3
LANG_ENGLISH        "^1Camping!!!"
 
REFERENCE           PUNISH4
LANG_ENGLISH        " ^5seinem Tod"
 
REFERENCE           PUNISH5
LANG_ENGLISH        "^5einer Explosion"
 
REFERENCE           PUNISH6
LANG_ENGLISH        "^5einem Klavier"
 
 
 
ENDMARKER

Die Funktion PunishMe() in der Datei awe\_util.gsc hab ich auch noch editiert, um leichter den Text ändern zu können (in der localizedstrings\custom.str):

PunishMe()

Code eingefügt.
PunishMe(iMethod, sReason)
{
    self endon("awe_killthreads");
 
    sMethodname = "";
 
    if(iMethod == 1)
        iMethod = 2 + randomInt(level.awe_punishments);
 
    switch (iMethod)
    {
        case 2:
            self suicide();
            sMethodname = &"CUSTOM_PUNISH4";
            break;
 
        case 3:
            wait 0.5;
            // explode
            playfx(level._effect["bombexplosion"], self.origin);
            wait .05;
            self suicide();
            sMethodname = &"CUSTOM_PUNISH5";
            break;
         
        case 4:
            // Drop a piano on the player
            level thread DropPiano(self);
            sMethodname = &"CUSTOM_PUNISH6";
            break;
 
        default:
            break;
    }
    if(iMethod)
        iprintln(self.name , &"CUSTOM_PUNISH1" , sMethodname , &"CUSTOM_PUNISH2" , sReason);
}

Das war der scriptseitige Teil, nun müssen wir noch die Sounds anlegen.

Wir nehmen die .iwd Datei, und entpacken diese in einen temporären Ordner, am besten mit dem Tool Totalcommander. Wir öffnen im Ordner soundaliases die Datei awe_sound.csv und fügen ganz unten folgendes hinzu:

awe_sound.csv

Code eingefügt.
# MySounds
 
# Headshot
headshot,,mysounds/headshot.mp3,1,1,,,,1000000,,auto,streamed
 
# FirstBlood
firstblood,,mysounds/firstblood.mp3,1,1,,,,1000000,,auto,streamed
 
# Killingspree
killingspree,,mysounds/killingspree.mp3,1,1,,,,1000000,,auto,streamed
ultrakill,,mysounds/ultrakill.mp3,1,1,,,,1000000,,auto,streamed
rampage,,mysounds/rampage.mp3,1,1,,,,1000000,,auto,streamed
dominating,,mysounds/dominating.mp3,1,1,,,,1000000,,auto,streamed
monsterkill,,mysounds/monsterkill.mp3,1,1,,,,1000000,,auto,streamed
holyshit,,mysounds/holyshit.mp3,1,1,,,,1000000,,auto,streamed
slaughter,,mysounds/slaughter.mp3,1,1,,,,1000000,,auto,streamed
unstoppable,,mysounds/unstoppable.mp3,1,1,,,,1000000,,auto,streamed
godlike,,mysounds/godlike.mp3,1,1,,,,1000000,,auto,streamed
 
# More then one place
hallelujah,,mysounds/hallelujah.mp3,1,1,,,,1000000,,music,streamed
whyami,,mysounds/whyami.mp3,1,1,,,,1000000,,auto,streamed
monsterlache,,mysounds/monsterlache.wav,1,1,,,,1000000,,auto,streamed
wixxer,,mysounds/wixxer.wav,1,1,,,,1000000,,auto,streamed

Abschliessend erstellen wir im temporären Ordner einen neuen Ordner sound, mit Unterordner mysounds, in den wir die Sounds hineintun. Nun packen wir alle Ordner innerhalb des temporären Ordners mit dem Total Commander wieder zusammen, und nennen es z.iwd. Diese kommt nun auch in den Modordner hinein, und los geht das Gemetzel.

Das Script für die Camperoption habe ich aus dem [OL] Forum entnommen, die Firstblood, Headshot und Killingspreescripts stammen von {LSB} Squall 69, ebenfalls aus dem [OL] Forum.

Herzlichen Dank, Kellerkind & Markus!

 

Direkt verlinken: http://opferlamm-clan.de/wbb2/thread.php?postid=80098#post80098/

Zurück