89 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
#pragma semicolon 1
 | 
						|
#define PLUGIN_AUTHOR "jenz"
 | 
						|
#define PLUGIN_VERSION "1.0"
 | 
						|
#include <sourcemod>
 | 
						|
 | 
						|
public Plugin myinfo =
 | 
						|
{
 | 
						|
    name = "plugin_loader_unloader",
 | 
						|
    author = PLUGIN_AUTHOR,
 | 
						|
    description = "prevents slow map switches by loading and unloading plugins after map switching",
 | 
						|
    version = PLUGIN_VERSION,
 | 
						|
    url = "www.unloze.com"
 | 
						|
};
 | 
						|
 | 
						|
public void OnMapStart()
 | 
						|
{
 | 
						|
    CreateTimer(10.0, init_plugins_global);
 | 
						|
    CreateTimer(17.0, init_plugins_map);
 | 
						|
}
 | 
						|
 | 
						|
public Action init_plugins_map(Handle hTimer)
 | 
						|
{
 | 
						|
    char sConfigFile[PLATFORM_MAX_PATH];
 | 
						|
    BuildPath(Path_SM, sConfigFile, sizeof(sConfigFile), "configs/plugins_loading_unloading.cfg");
 | 
						|
    if(!FileExists(sConfigFile))
 | 
						|
    {
 | 
						|
        LogMessage("Could not find config: \"%s\"", sConfigFile);
 | 
						|
        return Plugin_Handled;
 | 
						|
    }
 | 
						|
    char map[PLATFORM_MAX_PATH];
 | 
						|
    GetCurrentMap(map, PLATFORM_MAX_PATH);
 | 
						|
 | 
						|
    //for some reason keyvalues did not play along so just reading file instead.
 | 
						|
    new Handle:fileHandle = OpenFile(sConfigFile, "r" );
 | 
						|
    char lineBuffer[256];
 | 
						|
    bool found_nextmap = false;
 | 
						|
    while( !IsEndOfFile( fileHandle ) && ReadFileLine( fileHandle, lineBuffer, sizeof( lineBuffer ) ) )
 | 
						|
    {
 | 
						|
        TrimString( lineBuffer );
 | 
						|
        ReplaceString(lineBuffer, sizeof(lineBuffer), "\"", "");
 | 
						|
        if (StrEqual(lineBuffer, map))
 | 
						|
        {
 | 
						|
            found_nextmap = true;
 | 
						|
        }
 | 
						|
        if (StrContains(lineBuffer, "sm plugins") != -1 && found_nextmap)
 | 
						|
        {
 | 
						|
            ServerCommand(lineBuffer);
 | 
						|
        }
 | 
						|
        if (StrEqual(lineBuffer, "}") && found_nextmap)
 | 
						|
        {
 | 
						|
            break; //we found our specific next map and finished all plugins loading/unloading.
 | 
						|
        }
 | 
						|
    }
 | 
						|
    CloseHandle( fileHandle );
 | 
						|
    return Plugin_Handled;
 | 
						|
}
 | 
						|
 | 
						|
public Action init_plugins_global(Handle hTimer)
 | 
						|
{
 | 
						|
    char sConfigFile[PLATFORM_MAX_PATH];
 | 
						|
    BuildPath(Path_SM, sConfigFile, sizeof(sConfigFile), "configs/plugins_loading_unloading.cfg");
 | 
						|
    if(!FileExists(sConfigFile))
 | 
						|
    {
 | 
						|
        LogMessage("Could not find config: \"%s\"", sConfigFile);
 | 
						|
        return Plugin_Handled;
 | 
						|
    }
 | 
						|
    char map[PLATFORM_MAX_PATH];
 | 
						|
    GetCurrentMap(map, PLATFORM_MAX_PATH);
 | 
						|
 | 
						|
    //for some reason keyvalues did not play along so just reading file instead.
 | 
						|
    new Handle:fileHandle = OpenFile(sConfigFile, "r" );
 | 
						|
    char lineBuffer[256];
 | 
						|
    while( !IsEndOfFile( fileHandle ) && ReadFileLine( fileHandle, lineBuffer, sizeof( lineBuffer ) ) )
 | 
						|
    {
 | 
						|
        TrimString( lineBuffer );
 | 
						|
        ReplaceString(lineBuffer, sizeof(lineBuffer), "\"", "");
 | 
						|
        if (StrContains(lineBuffer, "sm plugins") != -1)
 | 
						|
        {
 | 
						|
            ServerCommand(lineBuffer);
 | 
						|
        }
 | 
						|
        if (StrEqual(lineBuffer, "}"))
 | 
						|
        {
 | 
						|
            break;
 | 
						|
        }
 | 
						|
    }
 | 
						|
    CloseHandle( fileHandle );
 | 
						|
    return Plugin_Handled;
 | 
						|
}
 |