AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   At least a flag (https://forums.alliedmods.net/showthread.php?t=221698)

Bladell 07-25-2013 07:19

At least a flag
 
Hi, how can I check if a player have at least a flag from a group of rows?
I have this plugin
PHP Code:

#include <amxmodx>
#include <amxmisc>

#define PLUGIN            "ULTIMATE WHO"
#define VERSION            "1.1"
#define AUTHOR            "P.Of.Pw"

#define CharsMax(%1)        sizeof %1 - 1
#define time_shower        1.0

#define GROUPS_NAME        4
#define GROUPS_ACCESS        4

#define RRR            255
#define GGG            255
#define BBB            255
#define time_hud        12.0

#define motd_msg        "Admin's Online"

#define who_meniu_ad_group_msg    "\y-=[Admin's]=- \r-=[Online]=-^n"
#define who_meniu_admin_msg    "\y-=[Admin's]=- \w-=[Online]=-^n^n"

#define who_meniu_ad_group_msg_bottom    "^n\wPt a esi apasati \y0 \w sau \y5"
#define who_meniu_admin_msg_bottom    "^n\wPt a esi apasati \r0 \w sau \r5"

#define    who_console_top        "=========== Admini Online ==========="
#define    who_console_bottom     "================================"

new GroupNames[GROUPS_NAME][] = {
    
"Owners",
    
"Moderatori",
    
"Administratori",
    
"Sloturi"
}

new 
GroupFlags[GROUPS_ACCESS][] = {
    
"abcdefghijklmnopqrstu",
    
"abcdefghijklmnopqrst",
    
"bcdefijmnopqrstu",
    
"b"
}

new 
GroupFlagsValue[GROUPS_NAME]

new 
who_typewho_typemeniuwho_typtable

public plugin_init() 
{
   
    
register_plugin(PLUGINVERSIONAUTHOR)
   
    for(new 
p_of_pw p_of_pw GROUPS_NAME p_of_pw++)
        
GroupFlagsValue[p_of_pw] = read_flags(GroupFlags[p_of_pw])
   
    
register_clcmd("say""cmdSay")
    
register_clcmd("say_team""cmdSay")
    
    
who_type        register_cvar("cmd_who","1")
    
who_typemeniu    register_cvar("who_typemeniu","1")
    
who_typtable    register_cvar("who_typetable","2")
}

public 
cmdSay(id)
{
    new 
say[192]
    
read_args(say,192)
    if(( 
containi(say"who") != -|| containi(say"admin") != -|| containi(say"admins") != -1  || contain(say"/who") != -|| contain(say"/admin") != -|| contain(say"/admins") != -1))
        
set_task(time_shower,"cmdULTMWho",id)
    return 
PLUGIN_CONTINUE
}

public 
cmdULTMWho(id)
{
    switch(
get_pcvar_num(who_type))
    {
        case 
1who_meniu(id)
        
        case 
2who_motd(id)
        
        case 
3who_table(id)
        
        case 
4who_hud(id)
        
        case 
5who_console(id)
        
    }
    return 
0
}

who_meniu(id)
{
    switch(
get_pcvar_num(who_typemeniu))
    {
        case 
1who_meniu_admin_groups(id)
        
        case 
2who_meniu_admin(id)
    }
    return 
0
}
who_meniu_admin_groups(id)
{
    new 
sPlayers[32], iNumiPlayer
    
new sName[32]
    new 
szMenu[256], nLenkeys
    
    nLen 
format(szMenu[nLen], 255who_meniu_ad_group_msg)
    
get_players(sPlayersiNum"ch")
   
    for(new 
p_of_pw 0p_of_pw GROUPS_NAME p_of_pw++)
    {   
        
nLen += format(szMenu[nLen], 255-nLen,"\r%s^n"GroupNames[p_of_pw])
     
        for(new 
0iNum a++)
        {   
            
iPlayer sPlayers[a]
         
            if(
get_user_flags(iPlayer) == GroupFlagsValue[p_of_pw])
            {
                
get_user_name(iPlayersNamesizeof sName 1)
                
nLen += format(szMenu[nLen], 255-nLen,"\w%s^n"sName)
            }   
        }
    }
    
nLen += format(szMenu[nLen], 255-nLenwho_meniu_ad_group_msg_bottom)
    
keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<9)
    
show_menu(id,keys,szMenu,-1)
    return 
0
}

who_meniu_admin(id)
{
    new 
sPlayers[32], iNumiPlayer
    
new sName[32]
    new 
szMenu[256], nLenkeys
   
    nLen 
format(szMenu[nLen], 255who_meniu_admin_msg)
  
    
get_players(sPlayersiNum"ch")
    for(new 
p_of_pw 0p_of_pw GROUPS_NAME p_of_pw++)
    {
        for(new 
0iNum a++)
        {   
            
iPlayer sPlayers[a]
         
            if(
get_user_flags(iPlayer) == GroupFlagsValue[p_of_pw])
            {
                
get_user_name(iPlayersNamesizeof sName 1)
                
nLen += format(szMenu[nLen], 255-nLen,"\r%s^n"sName)
            }   
        }
    }
    
nLen += format(szMenu[nLen], 255-nLenwho_meniu_admin_msg_bottom)
    
keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<9)
    
show_menu(id,keys,szMenu,-1)
    return 
0
}

who_motd(id)
{
    new 
sPlayers[32], iNumiPlayer
    
new sName[32], sBuffer[1024]
    new 
iLen
    
    iLen 
formatex(sBuffersizeof sBuffer 1"<body bgcolor=#000000><font color=#7b68ee><pre>")
   
    
get_players(sPlayersiNum"ch")
   
    for(new 
p_of_pw 0p_of_pw GROUPS_NAME p_of_pw++)
    {   
        
iLen += formatex(sBuffer[iLen], CharsMax(sBuffer) - iLen"<center><h5><font color=^"red^">%s^n</font></h5></center>"GroupNames[p_of_pw])
     
        for(new 
0iNum a++)
        {   
            
iPlayer sPlayers[a]
         
            if(
get_user_flags(iPlayer) == GroupFlagsValue[p_of_pw])
            {
                
get_user_name(iPlayersNamesizeof sName 1)
                
iLen += formatex(sBuffer[iLen], CharsMax(sBuffer) - iLen"<center>%s^n</center>"sName)
            }
        }        
    }
    
show_motd(idsBuffermotd_msg)
    return 
0

}

who_table(id)
{
    switch(
get_pcvar_num(who_typtable))
    {
        case 
1table_style_one(id)
        
        case 
2table_style_two(id)
    }
    return 
0
}
table_style_one(id)
{
    new 
sPlayers[32], iNumiPlayer
    
new sName[32], sBuffer[1024]
    new 
iLen
    
    iLen 
formatex(sBuffersizeof sBuffer 1"<body bgcolor=#000000><font color=#7b68ee><pre>")
    
iLen += formatex(sBuffer[iLen], CharsMax(sBuffer) - iLen"<center><h3><b><font color=^"red^">NUME            -    ACCES</font></h3></b></center>")
    
    
get_players(sPlayersiNum"ch")
   
    for(new 
p_of_pw 0p_of_pw GROUPS_NAME p_of_pw++)
    {
        for(new 
0iNum a++)
        {   
            
iPlayer sPlayers[a]
        
            if(
get_user_flags(iPlayer) == GroupFlagsValue[p_of_pw])
            {
                
get_user_name(iPlayersNamesizeof sName 1)
                
iLen += formatex(sBuffer[iLen], CharsMax(sBuffer) - iLen"<center><h4><font color=^"white^">%s        %s^n</font></h4></center>"sNameGroupNames[p_of_pw])
            }
        }        
    }
    
show_motd(idsBuffermotd_msg)
    return 
0
}
table_style_two(id)
{
    new 
sPlayers[32], iNumiPlayer
    
new sName[32], sBuffer[1024]
    new 
iLen
    
    iLen 
formatex(sBuffersizeof sBuffer 1"<body bgcolor=#000000><font color=#7b68ee><pre>")
    
    
iLen += formatex(sBuffer[iLen], CharsMax(sBuffer) - iLen"<html><head><title>a</title></head>")
    
iLen += formatex(sBuffer[iLen], CharsMax(sBuffer) - iLen"<br><br><center><body><table border>")
    
iLen += formatex(sBuffer[iLen], CharsMax(sBuffer) - iLen"<tr><td><h3><b><font color=^"red^">NUME</td><td></h3></b> <h3><b><font color=^"red^">ACCES</td></h3></font></b></center>")
    
    
get_players(sPlayersiNum"ch")
   
    for(new 
p_of_pw 0p_of_pw GROUPS_NAME p_of_pw++)
    {
        for(new 
0iNum a++)
        {   
            
iPlayer sPlayers[a]
        
            if(
get_user_flags(iPlayer) == GroupFlagsValue[p_of_pw])
            {
                
get_user_name(iPlayersNamesizeof sName 1)
                
iLen += formatex(sBuffer[iLen], CharsMax(sBuffer) - iLen"<center><tr><td><h4><b><font color=^"white^">%s<td></b></h4> <h4><b><font color=^"white^">%s </td></h4></font></b></center>"sNameGroupNames[p_of_pw])
            }
        }        
    }
    
iLen += formatex(sBuffer[iLen], CharsMax(sBuffer) - iLen"</table></body></html>")
    
show_motd(idsBuffermotd_msg)
    return 
0
}

who_hud(id)
{
    new 
sPlayers[32], iNumiPlayer
    
new sName[32], sBuffer[1024]
    new 
iLen
    
    get_players
(sPlayersiNum"ch")
   
    for(new 
p_of_pw 0p_of_pw GROUPS_NAME p_of_pw++)
    {   
        
iLen += formatex(sBuffer[iLen], CharsMax(sBuffer) - iLen"=== %s ===^n"GroupNames[p_of_pw])
     
        for(new 
0iNum a++)
        {   
            
iPlayer sPlayers[a]
         
            if(
get_user_flags(iPlayer) == GroupFlagsValue[p_of_pw])
            {
                
get_user_name(iPlayersNamesizeof sName 1)
                
iLen += formatex(sBuffer[iLen], CharsMax(sBuffer) - iLen"%s^n"sName)
            }
        }        
    }
    
set_hudmessage(RRRGGGBBB0.020.2406.0time_hud)
    
show_hudmessage(idsBuffer)
    return 
0
}

who_console(id)
{
    new 
sPlayers[32], iNumiPlayer
    
new sName[32]

    
get_players(sPlayersiNum)
    
console_print(idwho_console_top)
    for(new 
p_of_pw 0p_of_pw GROUPS_NAMEp_of_pw++) 
    {
        for(new 
0iNum a++)
        {
            
            
iPlayer sPlayers[a]
            
get_user_name(iPlayersNamesizeof sName 1)
            if(
get_user_flags(iPlayer) == GroupFlagsValue[p_of_pw]) 
                
console_print(id"= %d = %s : %s"p_of_pw+1GroupNames[p_of_pw], sName)
            
            
        }
    }
    
console_print(idwho_console_bottom)
    return 
0


This plugin show a player into a group if he have the same flag with the group.
Eg:If group Helper have flags "abi" and the player have the flag "abi" too he will be shown in that group.
I want to make this plugin to show the player in group of Helpers even if he has just flag a,b,i,ai or,ab.

Bugsy 07-25-2013 09:41

Re: At least a flag
 
Instead of only returning true if the player has EXACT flags as GroupFlagsValue[], using & would return true if the player has any of the flags or combo of flags found in GroupFlagsValue[] (a,b,i,ai,ab,bi)

If you're not familiar with bit-wise operators, read this: https://forums.alliedmods.net/showthread.php?t=139916

PHP Code:

//Instead of 

if(get_user_flags(iPlayer) == GroupFlagsValue[p_of_pw]) 

//try

if(get_user_flags(iPlayer) & GroupFlagsValue[p_of_pw]) 


Bladell 07-25-2013 11:07

Re: At least a flag
 
Thanks man, work ! :)
Very interesting article about bit-wise operators, I am familiar with this but there was a some things that I didn't know.
Thanks again :)

r3p 07-26-2013 14:23

Re: At least a flag
 
search before posting :)

ConnorMcLeod 07-26-2013 15:00

Re: At least a flag
 
Just include amxmisc in your plugin, then :

1 or more flags :

PHP Code:

has_flag(id"abcd"

All flags :

PHP Code:

has_all_flags(id"abcd"



All times are GMT -4. The time now is 06:29.

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