Raised This Month: $ Target: $400
 0% 

At least a flag


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Bladell
Senior Member
Join Date: Jun 2012
Old 07-25-2013 , 07:19   At least a flag
Reply With Quote #1

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.
Bladell is offline
Bugsy
AMX Mod X Moderator
Join Date: Feb 2005
Location: NJ, USA
Old 07-25-2013 , 09:41   Re: At least a flag
Reply With Quote #2

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]) 
__________________

Last edited by Bugsy; 07-25-2013 at 10:01.
Bugsy is offline
Bladell
Senior Member
Join Date: Jun 2012
Old 07-25-2013 , 11:07   Re: At least a flag
Reply With Quote #3

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
Bladell is offline
r3p
BANNED
Join Date: Jul 2013
Old 07-26-2013 , 14:23   Re: At least a flag
Reply With Quote #4

search before posting
r3p is offline
ConnorMcLeod
Veteran Member
Join Date: Jul 2006
Location: France (95)
Old 07-26-2013 , 15:00   Re: At least a flag
Reply With Quote #5

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"
__________________
- tired and retired -

- my plugins -
ConnorMcLeod is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


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


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