AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Plugin function doesn't work... (https://forums.alliedmods.net/showthread.php?t=223045)

AtomicServers 08-09-2013 09:37

Plugin function doesn't work...
 
So thanks to everyone that helped me with making this plugin and reworking it how I wanted. But there is a function in the code that doesn't work and I need help to make it work. When someone posts IP or Website in my server the plugin should give this message: "[ChatGuardian] Detected [IP] or [Website] advertising! [1/3] - Kick!" and on 3 spam messages to kick the player. The problem is that it doesn't show on first message "[1/3] - Kick!", on second message "[2/3] - Kick!" and on third message "[3/3] -Kick!" and after showing the message 2 seconds later it should kick the player but it doesn't.
The full messages should look like:
[ChatGuardian] Detected [IP] or [Website] advertising! [1/3] - Kick!
[ChatGuardian] Detected [IP] or [Website] advertising! [2/3] - Kick!
[ChatGuardian] Detected [IP] or [Website] advertising! [3/3] - Kick!
Here is the code of the plugin please help me to fix this function:
PHP Code:

#include <amxmodx>
#include <amxmisc>
#include <colorchat>

#define PLUGIN "advert_block"
#define VERSION "1.3"
#define AUTHOR "Alka"

#define USE_COLORCHAT

#define MAX_WARNINGS 3
#define MAX_LOGS 50

#define BYPASS_FLAG ADMIN_RCON

#define IsValidBlock(%0) (0 <= str_to_num(%0) <= 255)

#define Timeinsek 60.0

enum (<<=1) {
    
    
ADV_BLOCK 1,
    
ADV_WARN,
    
ADV_KICK,
    
ADV_LOG,
    
ADV_BYPASS
};

enum {
    
    
ADDR_VALID 1,
    
ADDR_NOT_FOUND = -1
};

new 
g_pCvarMode;

new 
Trie:g_tCharsTrie:g_tBlocks;
new Array:
g_aDomains, Array:g_aWhitelist;

new 
g_iWarnings[33];

new 
g_szLogsFile[64];

public 
plugin_init() {
    
    
register_plugin(PLUGINVERSIONAUTHOR);
    
    
register_clcmd("say""clcmd_HandleChat");
    
register_clcmd("say_team""clcmd_HandleChat");
    
    
set_task(Timeinsek"showmessage"___"b"
    
    
g_pCvarMode register_cvar("amx_advblock""abd");
    
    
g_tChars TrieCreate();
    
g_tBlocks TrieCreate();
    
    
g_aDomains ArrayCreate(6);
    
g_aWhitelist ArrayCreate(32);
}

public 
showmessage() 

    
ColorChat(0RED"^4[^3ChatGuardian^4] ^1This server is protected against ^3[^4IP^3] ^1and ^3[^4Website^3] ^1advertising!"); 
}  

public 
plugin_cfg()
{
    
get_basedir(g_szLogsFilecharsmax(g_szLogsFile));
    
add(g_szLogsFilecharsmax(g_szLogsFile), "/logs/advblock_logs.log");
    
    if(
file_size(g_szLogsFile1) / MAX_LOGS)
        
fclose(fopen(g_szLogsFile"w"));
    else
        
fclose(fopen(g_szLogsFile"a"));
    
    
LoadConfigs();
}

public 
plugin_end()
{
    
TrieDestroy(g_tChars);
    
TrieDestroy(g_tBlocks);
    
ArrayDestroy(g_aDomains);
    
ArrayDestroy(g_aWhitelist);
}

public 
client_disconnect(id)
{
    if(
g_iWarnings[id] > 0)
        
g_iWarnings[id] = 0;
}

public 
clcmd_HandleChat(id)
{
    if((
GetModFlags() & ADV_BYPASS) && get_user_flags(id) & BYPASS_FLAG)
        return 
PLUGIN_CONTINUE;
    
    new 
szText[191];
    
read_args(szTextcharsmax(szText));
    
remove_quotes(szText);
    
    if(
strlen(szText) < 4)
        return 
PLUGIN_CONTINUE;
    
    
TrieClear(g_tBlocks);
    
    new 
szBlock[4], iLen;
    new 
iNumSeqiNumBlocksiDel;
    new 
iLastBlock;
    new 
bool:bDuplicate;
    
    for(new 
sizeof szText i++)
    {
        if(
isdigit(szText[i]) && (sizeof szText))
        {
            
iLen += formatex(szBlock[iLen], charsmax(szBlock) - iLen"%c"szText[i]);
            
            if(
isdigit(szText[1]))
                
iNumSeq++;
            else
            {
                if(
IsValidBlock(szBlock))
                {
                    if(!
TrieKeyExists(g_tBlocksszBlock))
                    {
                        
TrieSetCell(g_tBlocksszBlock1);
                        
                        new 
iTo strlen(szBlock) == : (strlen(szBlock) == i);
                        if(
FindDiffChars(szTextcharsmax(szText), iLastBlockiTo) < 8)
                            
iNumBlocks++;
                        
                        
iLastBlock i;
                    }
                    else if(
TrieKeyExists(g_tBlocksszBlock) && !bDuplicate)
                    {
                        new 
iTo strlen(szBlock) == : (strlen(szBlock) == i);
                        if(
FindDiffChars(szTextcharsmax(szText), iLastBlockiTo) < 8)
                            
iNumBlocks++;
                        
                        
iLastBlock i;
                        
bDuplicate true;
                    }
                }
                
iLen 0;
            }
        }
        else
        {
            if(
szText[i] != 0)
            {
                
iDel++;
            }
        }
    }
    
    if((
iNumSeq && iNumBlocks 3) || (iNumBlocks && iDel 5) || CheckAddr(szTextcharsmax(szText)) != ADDR_NOT_FOUND)
    {
        new 
iFlags GetModFlags();
        
        if(
iFlags ADV_WARN)
        {
            if(
iFlags ADV_KICK)
            {
                
g_iWarnings[id]++;
                
#if !defined USE_COLORCHAT
                    
client_print(idprint_chat"Warning!!! Possible IP / Website advertising! [%d/%d] - Kick"g_iWarnings[id], MAX_WARNINGS);
                
#else
                    
ColorChat(idRED"^3[^4ChatGuardian^3] ^1Detected ^4[^3IP^4] ^1or ^4[^3Website^4] ^1advertising! ^4[^3%d^4/^3%d^4]"g_iWarnings[id], MAX_WARNINGS);
                
#endif
                
                
if(g_iWarnings[id] == 3)
                {
                    
server_cmd("kick #%d ^"Advertising!^""get_user_userid(id));
                    
g_iWarnings[id] = 0;
                }
            }
            else
            {
                
#if !defined USE_COLORCHAT
                    
client_print(idprint_chat"Warning!!! Possible IP / Website advertising!");
                
#else
                    
ColorChat(idRED"^4[^3ChatGuardian^4] ^1Detected ^3[^4IP^3] ^1or ^3[^4Website^3] ^1advertising!");
                
#endif
            
}
        }
        if(
iFlags ADV_LOG)
        {
            new 
szName[32];
            
get_user_name(idszNamecharsmax(szName));
            
            new 
iFile fopen(g_szLogsFile"a");
            
fprintf(iFile"Name: %s ^nChat: %s^n---------------------------------------^n"szNameszText);
            
fclose(iFile);
        }
        if(
iFlags ADV_BLOCK)
            return 
PLUGIN_HANDLED;
        else
            return 
PLUGIN_CONTINUE;
    }
    return 
PLUGIN_CONTINUE;
}

stock FindDiffChars(szString[], iLeniFromiTo)
{
    
TrieClear(g_tChars);
    
    new 
iChars;
    for(new 
iLen i++)
    {
        if(
iFrom iTo)
        {
            new 
szChar[2];
            
formatex(szCharcharsmax(szChar), "%c"szString[i]);
            
            if(!
TrieKeyExists(g_tCharsszChar))
            {
                
TrieSetCell(g_tCharsszChar1);
                
iChars++;
            }
        }
    }
    return 
iChars;
}

stock CheckAddr(szString[], iLen)
{
    new 
szText[128], iLen2;
    new 
i;
    for(
iLen i++)
    {
        if(!
isalpha(szString[i]) && !ValidAddrSeparator(szString[i]))
            continue;
        
        
iLen2 += formatex(szText[iLen2], charsmax(szText) - iLen2"%c"szString[i]);
    }
    
    new 
szTemp[6], szTemp1[32];
    for(
ArraySize(g_aWhitelist) ; i++)
    {
        
ArrayGetString(g_aWhitelistiszTemp1charsmax(szTemp1));
        if(
containi(szTextszTemp1) != -1)
        {
            
replace(szTextcharsmax(szText), szTemp1"");
            
i--;
        }
    }
    for(
ArraySize(g_aDomains) ; i++)
    {
        
ArrayGetString(g_aDomainsiszTempcharsmax(szTemp));
        
        if(
containi(szTextszTemp) > 0)
            return 
ADDR_VALID;
    }    
    return 
ADDR_NOT_FOUND;
}

stock bool:ValidAddrSeparator(iChar)
{
    new 
iChars[] = { ':''/''.' };
    for(new 
sizeof iChars i++)
    {
        if(
iChar == iChars[i])
            return 
true;
    }
    return 
false;
}

stock GetModFlags()
{
    new 
szVal[6];
    
get_pcvar_string(g_pCvarModeszValcharsmax(szVal));
    
    return 
read_flags(szVal);
}

stock LoadConfigs()
{
    new 
szFile[64];
    
get_configsdir(szFilecharsmax(szFile));
    
add(szFilecharsmax(szFile), "/advblock_config.ini");
    
    new 
iFile fopen(szFile"r");
    if(!
iFile)
        
set_fail_state("Error loading configuration file!");
    
    new 
szBuffer[32];
    new 
iConfig;
    while(!
feof(iFile))
    {
        
fgets(iFileszBuffercharsmax(szBuffer));
        
trim(szBuffer);
        
        if(!
szBuffer[0] || szBuffer[0] == ';')
            continue;
        
        if(
equal(szBuffer"#domains"))
        {
            
iConfig 1;
            continue;
        }
        else if(
equal(szBuffer"#whitelist"))
        {
            
iConfig 2;
            continue;
        }
        else
        {
            if(
szBuffer[0] != '{' || szBuffer[0] != '}')
            {
                switch(
iConfig)
                {
                    case 
1ArrayPushString(g_aDomainsszBuffer);
                    case 
2ArrayPushString(g_aWhitelistszBuffer);
                }
            }
        }
    }
    
fclose(iFile);



red_bull2oo6 08-09-2013 12:24

Re: Plugin function doesn't work...
 
take a look at this:
Code:

g_pCvarMode = register_cvar("amx_advblock", "abd");
it should be

Code:

g_pCvarMode = register_cvar("amx_advblock", "abcd");
'c' is for kick.. also i`m not sure but i think that is 'c' because of:

Code:

enum (<<=1) {
   
   
ADV_BLOCK = 1,
   
ADV_WARN,
   
ADV_KICK,
   
ADV_LOG,
   
ADV_BYPASS
}


AtomicServers 08-09-2013 12:59

Re: Plugin function doesn't work...
 
After I changed this "g_pCvarMode = register_cvar("amx_advblock", "abcd");" the plugin stopped working... now it doesn't even block the spam messages. Please help guys!

red_bull2oo6 08-10-2013 08:10

Re: Plugin function doesn't work...
 
well Alka said:

Quote:

Originally Posted by Alka (Post 1810529)

○Cvar amx_advblock (Default: "abd") - Plugin mod flags

Flags

Code:

    a - Block chat lines that have been detected as advert
    b - Warn player that he made an advert
    c - Kick player if he make more than MAX_WARNINGS adverts (per session)
    d - Log chat lines that have been detected as advert ( Name and Chat line )
    e - Bypass advertise check for admins with BYPASS_FLAG


and it's exactly what i supposed to be.

AtomicServers 08-10-2013 11:22

Re: Plugin function doesn't work...
 
Yes, but try to compile the plugin that I posted here with the flags you said and put it in a server. You will see that it doesn't block the messages.


All times are GMT -4. The time now is 15:49.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.