Page 1 of 1

.INI File Cleaner or Enabler/Disabler

Posted: Tue Oct 06, 2026 12:00 am
by Archive-Poster
I searched a little and didn't find something similar to what I was looking for, and I decided to try by myself and made a code that can disable and enable a whole .ini file or a single line by a command.

Put your .ini file here

Code: Select all

new const g_szIniFileName[] =    "plugins-custom.ini"
Used an exemple when you wanna enable/disable bunnyhop plugin in the plugins-custom.ini:

Source code:

Code: Select all

#include <amxmodx>
#include <amxmisc>

#define PLUGIN ".Ini file Enabler/Disabler"
#define VERSION "1.0"
#define AUTHOR "EFFx"

new const g_szIniFileName[] =    "plugins-custom.ini"

public plugin_init() 
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    register_clcmd("amx_clean", "cmdClean", ADMIN_IMMUNITY, "<1|0 - Clean whole file>")
    register_clcmd("amx_remove", "cmdRemove", ADMIN_IMMUNITY, "<1|0 - Remove whole file>")
}

public cmdClean(id, level, cid)
{
    if(!cmd_access(id, level, cid, 2))
        return PLUGIN_HANDLED

    new szWholeFile[2], bool:bIsWholeFile
    read_argv(1, szWholeFile, charsmax(szWholeFile))
    
    bIsWholeFile = bool:str_to_num(szWholeFile)
    if(!enableLine(bIsWholeFile, bIsWholeFile ? "" : "bunnyhop.amxx"))
    {
        console_print(id, "[AMXX]: Line not found")
        return PLUGIN_HANDLED
    }
    return PLUGIN_HANDLED
}

public cmdRemove(id, level, cid)
{
    if(!cmd_access(id, level, cid, 2))
        return PLUGIN_HANDLED

    new szWholeFile[2], bool:bIsWholeFile
    read_argv(1, szWholeFile, charsmax(szWholeFile))

    bIsWholeFile = bool:str_to_num(szWholeFile)
    if(!disableLine(bIsWholeFile, bIsWholeFile ? "" : "bunnyhop.amxx"))
    {
        console_print(id, "[AMXX]: Line not found")
        return PLUGIN_HANDLED
    }
    return PLUGIN_HANDLED
}

enableLine(bool:bWholeFile, szLine[])
{
    new szFileName[64], szText[512]
    get_configsdir(szFileName, charsmax(szFileName))
    format(szFileName, charsmax(szFileName), "%s/%s", szFileName, g_szIniFileName)

    new iFile = fopen(szFileName, "rt"), i
    while(!feof(iFile))
    {
        fgets(iFile, szText, charsmax(szText))
        trim(szText)
        
        i++

        if(szText[0] == ';')
        {
            if(!bWholeFile && !equal(szText[1], szLine))
                continue
                        
            replace(szText, charsmax(szText), ";", "")
            write_file(szFileName, szText, (i - 1))
            return true
        }
    }
    fclose(iFile)
    return false
} 

disableLine(bool:bWholeFile, szLine[])
{
    new szFileName[64], szText[512]
    get_configsdir(szFileName, charsmax(szFileName))
    format(szFileName, charsmax(szFileName), "%s/%s", szFileName, g_szIniFileName)

    new iFile = fopen(szFileName, "rt"), i
    while(!feof(iFile))
    {
        fgets(iFile, szText, charsmax(szText))
        trim(szText)
        
        i++

        if(szText[0] != ';')
        {
            if(!bWholeFile && !equal(szText, szLine))
                continue

            format(szText, charsmax(szText), ";%s", szText)
            write_file(szFileName, szText, (i - 1))
            return true
        }
    }
    fclose(iFile)
    return false
} 
Used an example to completely remove the plugin instead of only add a ';' before it's name:

Source Code:

Code: Select all

#include <amxmodx>
#include <amxmisc>

#define PLUGIN ".Ini file cleaner"
#define VERSION "1.0"
#define AUTHOR "EFFx"

new const g_szIniFileName[] =    "plugins-pubg.ini"

public plugin_init() 
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    register_clcmd("amx_clean", "cmdClean", ADMIN_IMMUNITY, "<1|0 - Clean whole file>")
}

public cmdClean(id, level, cid)
{
    if(!cmd_access(id, level, cid, 2))
        return PLUGIN_HANDLED

    new szWholeFile[2], bool:bIsWholeFile
    read_argv(1, szWholeFile, charsmax(szWholeFile))
    
    bIsWholeFile = bool:str_to_num(szWholeFile)
    if(!cleanFile(bIsWholeFile, bIsWholeFile ? "" : "bunnyhop.amxx"))
    {
        console_print(id, "[AMXX]: Line not found")
        return PLUGIN_HANDLED
    }
    return PLUGIN_HANDLED
}

cleanFile(bool:bWholeFile, szLine[])
{
    new szFileName[64], szText[512]
    get_configsdir(szFileName, charsmax(szFileName))
    format(szFileName, charsmax(szFileName), "%s/%s", szFileName, g_szIniFileName)

    new iFile = fopen(szFileName, "rt"), i
    while(!feof(iFile))
    {
        fgets(iFile, szText, charsmax(szText))
        trim(szText)
        
        i++

        if((szText[0] == EOS) || !bWholeFile && !equal(szText, szLine))
            continue

        replace(szText, charsmax(szText), bWholeFile ? szText : szLine, "")
        write_file(szFileName, szText, (i - 1))
        
        if(bWholeFile)
        {
            cleanFile(bWholeFile, szLine)
        }
        return true
    }
    fclose(iFile)
    return false
} 
OBS: If you wanna disable/enable a plugin and it contains debug mode, you must add on enableLine() and disableLine() stock too, remember that it check if the line is equal, not if contains the same name.