.INI File Cleaner or Enabler/Disabler

For scripting examples for learning how to use AMXX.
User avatar
Archive-Poster
Posts: 1189
Gender:
United States of America

.INI File Cleaner or Enabler/Disabler

Post 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.

Who is online

Users browsing this forum: No registered users and 0 guests