<?php 
 
/* 
    Procedure: 
    - Stop the servers. 
    - Ensure the 'currentcycle.txt' file is up to date with the filenames of the maps we want. 
    - Modify the $myINIFile entry to the correct INI file for the server we want updated. 
    - Run the script:  php updatemapcycles.php 
    - Start the servers when done. 
*/ 
 
 
 
// Include the INI management class 
include( "../iniManager.class.php" ); 
 
// Which INI file we're working with. 
$myINIFile = "LinuxServer-KFGame.ini"; // Full path to the gameserver's LinuxServer-KFGame.ini file 
 
// The current map cycle we want. 
$currentMapCycleFile = file( "currentcycle.txt" ); 
 
// Maps we don't want map definitions for (to prevent them from showing up in the web admin) 
$deletedMapsFile = file( "deletedmaps.txt" ); 
 
// Make a backup of the INI file we're working with so we don't hose ourselves 
copy( $myINIFile, $myINIFile . "-" . date( "YmdHis" ) ); 
 
// Instantiate the INI file. 
$myKFINI = new iniManager(); 
$myKFINI->iniManager_INIFile = $myINIFile; 
$prodINIFile = $myKFINI->read_ini();  // Read in the INI file into a modifiable array 
 
// Create the new GameMapCycles value. 
$newINIMapCycle = "(Maps=("; 
foreach( $currentMapCycleFile as $key => $val ) 
{ 
        $map = trim( $val ); 
        $newINIMapList .= "\"$map\","; 
} 
$newINIMapList = substr( $newINIMapList, 0, -1 ); 
$newINIMapCycle .= $newINIMapList . "))"; 
 
// Update the GameMapCycles directive in KFGame.KFGameInfo 
foreach( $prodINIFile[ "KFGame.KFGameInfo" ] as $directiveKey=>$directiveArr) 
{ 
    if( array_key_exists( "GameMapCycles", $directiveArr ) ) 
    { 
        $prodINIFile[ "KFGame.KFGameInfo" ][ $directiveKey ][ "GameMapCycles" ] = $newINIMapCycle; 
    } 
} 
 
// Look for existing mapfile definitions.  If they don't exist, add them. 
foreach( $currentMapCycleFile as $currentMapKey => $currentMapName ) 
{ 
    $foundSection = 0; 
    $mapName = substr( trim( $currentMapName ), 0, -4 ); 
    $listSections = $myKFINI->list_sections(); 
    foreach( $listSections as $sectionKey=>$sectionName ) 
    { 
        if( $sectionName == "$mapName KFMapSummary" ) 
        { 
            ++$foundSection; 
        } 
    } 
    if( $foundSection == 0 ) 
    { 
        echo "Adding $mapName...\n"; 
        $prodINIFile[ "$mapName KFMapSummary" ][][ "MapName" ] = $mapName; 
    } 
} 
 
// Look for maps we DON'T want to be selected in the web admin. 
foreach( $deletedMapsFile as $currentMapKey => $currentMapName ) 
{ 
    $foundSection = 0; 
    $mapName = substr( trim( $currentMapName ), 0, -4 ); 
    $listSections = $myKFINI->list_sections(); 
    foreach( $listSections as $sectionKey=>$sectionName ) 
    { 
        if( $sectionName == "$mapName KFMapSummary" ) 
        { 
            ++$foundSection; 
        } 
    } 
     
    if( $foundSection > 0 ) 
    { 
        echo "Removing $mapName...\n"; 
        unset( $prodINIFile[ "$mapName KFMapSummary" ] ); 
    } 
} 
 
 
// Spit out a new INI file. 
$myKFINI->make_ini( $prodINIFile ); 
 
// Write a new INI file directly replacing the one from input. 
//$myKFINI->write_ini( $prodINIFile ); 
 
 
 |