globalize_all_functions const string PRIVATE_MATCH_PLAYLIST = "private_match" struct { array modes = [ // default modes in vanilla "aitdm", "tdm", "cp", "at", "ctf", "lts", "ps", "speedball", "mfd", "ttdm", "fd_easy", "fd_normal", "fd_hard", "fd_master", "fd_insane" ] array maps = [ // default maps in vanilla "mp_forwardbase_kodai", "mp_grave", "mp_homestead", "mp_thaw", "mp_black_water_canal", "mp_eden", "mp_drydock", "mp_crashsite3", "mp_complex3", "mp_angel_city", "mp_colony02", "mp_glitch", "mp_relic02", "mp_wargames", "mp_rise", "mp_lf_stacks", "mp_lf_deck", "mp_lf_meadow", "mp_lf_traffic", "mp_lf_township", "mp_lf_uma" ] } file void function AddPrivateMatchMode( string mode ) { if ( !file.modes.contains( mode ) ) file.modes.append( mode ) #if CLIENT // call this on ui too so the client and ui states are the same RunUIScript( "AddPrivateMatchMode", mode ) #endif } void function AddPrivateMatchMap( string map ) { if ( !file.maps.contains( map ) ) file.maps.append( map ) #if CLIENT // call this on ui too so the client and ui states are the same RunUIScript( "AddPrivateMatchMap", map ) #endif } array function GetPrivateMatchModes() { //array modesArray // //int numModes = GetPlaylistGamemodesCount( PRIVATE_MATCH_PLAYLIST ) //for ( int modeIndex = 0; modeIndex < numModes; modeIndex++ ) //{ // modesArray.append( GetPlaylistGamemodeByIndex( PRIVATE_MATCH_PLAYLIST, modeIndex ) ) //} //return modesArray return file.modes } int function GetPrivateMatchModeIndex( string modeName ) { //int indexForName = 0 // //int numModes = GetPlaylistGamemodesCount( PRIVATE_MATCH_PLAYLIST ) //for ( int modeIndex = 0; modeIndex < numModes; modeIndex++ ) //{ // if ( GetPlaylistGamemodeByIndex( PRIVATE_MATCH_PLAYLIST, modeIndex ) != modeName ) // continue // // indexForName = modeIndex; // break //} // //return indexForName return file.modes.find( modeName ) } array function GetPrivateMatchMapsForMode( string modeName ) { //array mapsArray // //int modeIndex = GetPrivateMatchModeIndex( modeName ) //int numMaps = GetPlaylistGamemodeByIndexMapsCount( PRIVATE_MATCH_PLAYLIST, modeIndex ) //for ( int mapIndex = 0; mapIndex < numMaps; mapIndex++ ) //{ // mapsArray.append( GetPlaylistGamemodeByIndexMapByIndex( PRIVATE_MATCH_PLAYLIST, modeIndex, mapIndex ) ) //} // //return mapsArray array maps // use the private match playlist for this if the gamemode is in it already int privatePlaylistModeIndex = GetPrivateMatchModeIndex( modeName ) if ( privatePlaylistModeIndex < GetPlaylistGamemodesCount( PRIVATE_MATCH_PLAYLIST ) ) { for ( int i = 0; i < GetPlaylistGamemodeByIndexMapsCount( PRIVATE_MATCH_PLAYLIST, privatePlaylistModeIndex ); i++ ) maps.append( GetPlaylistGamemodeByIndexMapByIndex( PRIVATE_MATCH_PLAYLIST, privatePlaylistModeIndex, i ) ) } else { int numMaps = GetPlaylistGamemodeByIndexMapsCount( modeName, 0 ) for ( int i = 0; i < numMaps; i++ ) maps.append( GetPlaylistGamemodeByIndexMapByIndex( modeName, 0, i ) ) } return maps } // never called /*array function GetPrivateMatchModesForMap( string mapName ) { array modesArray int numModes = GetPlaylistGamemodesCount( PRIVATE_MATCH_PLAYLIST ) for ( int modeIndex = 0; modeIndex < numModes; modeIndex++ ) { int numMaps = GetPlaylistGamemodeByIndexMapsCount( PRIVATE_MATCH_PLAYLIST, modeIndex ) for ( int mapIndex = 0; mapIndex < numMaps; mapIndex++ ) { if ( GetPlaylistGamemodeByIndexMapByIndex( PRIVATE_MATCH_PLAYLIST, modeIndex, mapIndex ) != mapName ) continue modesArray.append( GetPlaylistGamemodeByIndex( PRIVATE_MATCH_PLAYLIST, modeIndex ) ) } } return modesArray }*/ string function GetPrivateMatchMapForIndex( int index ) { array mapsArray = GetPrivateMatchMaps() if ( index >= mapsArray.len() ) return "" return mapsArray[index] } string function GetPrivateMatchModeForIndex( int index ) { array modesArray = GetPrivateMatchModes() if ( index >= modesArray.len() ) return "" return modesArray[index] } int function GetPrivateMatchMapIndex( string mapName ) { array mapsArray = GetPrivateMatchMaps() for ( int index = 0; index < mapsArray.len(); index++ ) { if ( mapsArray[index] == mapName ) return index } return 0 } /* int function GetPrivateMatchModeIndex( string modeName ) { array modesArray = GetPrivateMatchModes() for ( int index = 0; index < modesArray.len(); index++ ) { if ( modesArray[index] == modeName ) return index } return 0 } */ array function GetPrivateMatchMaps() { //array mapsArray // //int numModes = GetPlaylistGamemodesCount( PRIVATE_MATCH_PLAYLIST ) //for ( int modeIndex = 0; modeIndex < numModes; modeIndex++ ) //{ // int numMaps = GetPlaylistGamemodeByIndexMapsCount( PRIVATE_MATCH_PLAYLIST, modeIndex ) // for ( int mapIndex = 0; mapIndex < numMaps; mapIndex++ ) // { // string mapName = GetPlaylistGamemodeByIndexMapByIndex( PRIVATE_MATCH_PLAYLIST, modeIndex, mapIndex ) // if ( mapsArray.contains( mapName ) ) // continue // // mapsArray.append( mapName ) // } //} // //return mapsArray return file.maps } array function GetPlaylistMaps( string playlistName ) { array mapsArray int numModes = GetPlaylistGamemodesCount( playlistName ) for ( int modeIndex = 0; modeIndex < numModes; modeIndex++ ) { int numMaps = GetPlaylistGamemodeByIndexMapsCount( playlistName, modeIndex ) for ( int mapIndex = 0; mapIndex < numMaps; mapIndex++ ) { string mapName = GetPlaylistGamemodeByIndexMapByIndex( playlistName, modeIndex, mapIndex ) if ( mapsArray.contains( mapName ) ) continue mapsArray.append( mapName ) } } return mapsArray } bool function MapSettings_SupportsTitans( string mapName ) { if ( mapName.find( "mp_lf_") != null ) return false if ( mapName.find( "coliseum" ) != null ) return false; return true } bool function MapSettings_SupportsAI( string mapName ) { if ( mapName.find( "mp_lf_") != null ) return false if ( mapName.find( "coliseum" ) != null ) return false; return true } bool function ModeSettings_RequiresTitans( string modeName ) { switch ( modeName ) { case "lts": return true } return false } bool function ModeSettings_RequiresAI( string modeName ) { switch ( modeName ) { case "aitdm": case "at": return true } return false } #if !CLIENT string function PrivateMatch_GetSelectedMap() { var mapIndex = level.ui.privatematch_map string mapName = GetPrivateMatchMapForIndex( expect int(mapIndex) ) return mapName } string function PrivateMatch_GetSelectedMode() { var modeIndex = level.ui.privatematch_mode string modeName = GetPrivateMatchModeForIndex( expect int(modeIndex) ) return modeName } #endif bool function PrivateMatch_IsValidMapModeCombo( string mapName, string modeName ) { array mapsForMode = GetPrivateMatchMapsForMode( modeName ) return mapsForMode.contains( mapName ) } // end private match stuff int function Player_GetMaxMatchmakingDelay( entity player ) { // return GetCurrentPlaylistVarInt( "matchmaking_delay", 0 ) return 300 } int function Player_GetRemainingMatchmakingDelay( entity player ) { int lastLeaveTime = player.GetPersistentVarAsInt( PERSISTENCE_LAST_LEAVE_TIME ) return Player_GetMaxMatchmakingDelay( player ) - (GetCurrentTimeForPersistence() - lastLeaveTime) } int function Player_NextAvailableMatchmakingTime( entity player ) { #if MP int lastLeaveTime = player.GetPersistentVarAsInt( PERSISTENCE_LAST_LEAVE_TIME ) if ( GetCurrentTimeForPersistence() - lastLeaveTime < Player_GetMaxMatchmakingDelay( player ) ) { return Player_GetRemainingMatchmakingDelay( player ) } #endif return 0 } int function GetCurrentTimeForPersistence() { // Returns the unix timestap offset to the timezone we want to use return GetUnixTimestamp() + DAILY_RESET_TIME_ZONE_OFFSET * SECONDS_PER_HOUR }