AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Voteban Need Help (https://forums.alliedmods.net/showthread.php?t=87576)

YKH =] 03-13-2009 23:03

Voteban Need Help
 
I want to edit this plguin that player can't voteban has ADMIN_RESERVATION

player. I don't know how to check if the player has this flag(b).

Here are the code that can't work on my server. Would someone like to help me?

PHP Code:

#include <amxmodx>
#include <amxmisc>

#define MAX_players 32
#define MAX_menudata 1024

new ga_PlayerName[MAX_players][32]
new 
ga_PlayerAuthID[MAX_players][35]
new 
ga_PlayerID[MAX_players]
new 
ga_PlayerIP[MAX_players][16]
new 
ga_MenuData[MAX_menudata]
new 
ga_Choice[2]
new 
gi_VoteStarter
new gi_MenuPosition
new gi_Sellection
new gi_TotalPlayers
new gi_SysTimeOffset 0
new i
//pcvars
new gi_LastTime
new gi_DelayTime
new gf_Ratio
new gf_MinVoters
new gf_BF_Ratio
new gi_BanTime
new gi_Disable
new gi_BanType


public plugin_init()
{
  
register_plugin("voteban menu","1.2","hjvl")
  
register_clcmd("say /voteban","SayIt" )
  
register_menucmd(register_menuid("ChoosePlayer"), 1023"ChooseMenu")
  
register_menucmd(register_menuid("VoteMenu"), 1023"CountVotes")

  
gi_LastTime=register_cvar("amx_voteban_lasttime","0")
  
gi_DelayTime=register_cvar("amxx_voteban_delaytime","600")
  
gf_Ratio=register_cvar("amxx_voteban_ratio","0.50")
  
gf_MinVoters=register_cvar("amxx_voteban_minvoters","0.0")
  
gf_BF_Ratio=register_cvar("amxx_voteban_bf_ratio","0.0")
  
gi_BanTime=register_cvar("amxx_voteban_bantime","5")
  
gi_Disable=register_cvar("amxx_voteban_disable","0")
  
gi_BanType=register_cvar("amxx_voteban_type","0")
}

public 
SayIt(id)
{
  if(
get_pcvar_num(gi_Disable))
  {
    
client_print(id,print_chat,"[AMXX]amx_votaban disabled")
    return 
0
  
}

  new 
Elapsed=get_systime(gi_SysTimeOffset) - get_pcvar_num(gi_LastTime)
  new 
Delay=get_pcvar_num(gi_DelayTime)

  if((
Delay Elapsed) && get_user_flags(id) != ADMIN_IMMUNITY)
  {
    new 
seconds Delay Elapsed
    client_print
(id,print_chat,"[AMXX] You have to wait %d seconds before a new voteban can be started"seconds)
    return 
0
  
}

  
get_players(ga_PlayerIDgi_TotalPlayers)
  for(
i=0i<gi_TotalPlayersi++)
  {
    new 
TempID ga_PlayerID[i]
    if(
get_user_flags(TempID) & ADMIN_IMMUNITY)
    {
      if(
get_user_flags(id) & ADMIN_IMMUNITY)
      {
        if(
TempID == id)
        {
          
gi_VoteStarter=i
          get_user_name
TempIDga_PlayerName[i], 31 )
      
get_user_authidTempIDga_PlayerAuthID[i], 34 )
      
get_user_ipTempIDga_PlayerIP[i], 15)
      }
      }
      else
      {
      
client_print(id,print_chat,"有管理員在線,功能關閉。")
      return 
0
      
}
    }
    else
    {
      if(
TempID == id)
        
gi_VoteStarter=i
      get_user_name
TempIDga_PlayerName[i], 31 )
      
get_user_authidTempIDga_PlayerAuthID[i], 34 )
      
get_user_ipTempIDga_PlayerIP[i], 15)
    }
  }
  
gi_MenuPosition 0
  ShowPlayerMenu
(id)
  return 
0
}

public 
ShowPlayerMenu(id)
{
  new 
arrayloc 0
  
new keys = (1<<9)

  
arrayloc format(ga_MenuData,(MAX_menudata-1),"voteban menu ^n")
  for(
i=0i<8i++)
   if( 
gi_TotalPlayers>(gi_MenuPosition+i) )
   {
     
arrayloc += format(ga_MenuData[arrayloc],(MAX_menudata-1-arrayloc),"%d. %s^n"i+1ga_PlayerName[gi_MenuPosition+i])
     
keys |= (1<<i)
   }
  if( 
gi_TotalPlayers>(gi_MenuPosition+8) )
  {
    
arrayloc += format(ga_MenuData[arrayloc],(MAX_menudata-1-arrayloc),"^n9. More")
    
keys |= (1<<8)
  }
  
arrayloc += format(ga_MenuData[arrayloc],(MAX_menudata-1-arrayloc),"^n0. Back/exit")

  
show_menu(idkeysga_MenuData20"ChoosePlayer")
  return 
PLUGIN_HANDLED 
}

public 
ChooseMenu(idkey)
{
  switch(
key)
  {
    case 
8:
    {
      
gi_MenuPosition=gi_MenuPosition+8
      ShowPlayerMenu
(id)
    }
    case 
9:
    {
      if(
gi_MenuPosition>=8)
      {
        
gi_MenuPosition=gi_MenuPosition-8
        ShowPlayerMenu
(id)
      }
      else
        return 
0
    
}
    default:
    {
        
gi_Sellection=gi_MenuPosition+key
    
new Now=get_systime(gi_SysTimeOffset)
           
set_pcvar_num(gi_LastTimeNow)
      if((
get_user_flags(gi_Sellection) & ADMIN_RESERVATION))
      {
        
client_print(id,print_chat,"[TiG] You can't voteban this player")
            return 
PLUGIN_HANDLED;
      }
           
run_vote()
           return 
0
    
}
  }
  return 
PLUGIN_HANDLED
}

public 
run_vote()
{    
  
log_amx("Vote ban started by %s for %s %s"ga_PlayerName[gi_VoteStarter], ga_PlayerName[gi_Sellection], ga_PlayerAuthID[gi_Sellection])
  
format(ga_MenuData,(MAX_menudata-1),"Ban %s for %d minutes?^n1. Yes^n2. No",ga_PlayerName[gi_Sellection], get_pcvar_num(gi_BanTime))
  
ga_Choice[0] = 0
  ga_Choice
[1] = 0
  show_menu
0, (1<<0)|(1<<1), ga_MenuData15"VoteMenu" )
  
set_task(15.0,"outcom")
  return 
0
}

public 
CountVotes(idkey)
{
  ++
ga_Choice[key]
  return 
PLUGIN_HANDLED
}

public 
outcom()
{
  new 
TotalVotes ga_Choice[0] + ga_Choice[1]
  new 
Float:result = (float(ga_Choice[0]) / float(TotalVotes))

  if( 
get_pcvar_float(gf_MinVoters) >= ( float(TotalVotes) / float(gi_TotalPlayers) ) )
  {
    
client_print(0,print_chat,"[AMXX] Not enough voters to ban %s!"ga_PlayerName[gi_Sellection])
    return 
0
  
}
  else
  {
    if( 
result get_pcvar_float(gf_BF_Ratio) )
    {
      
client_print(0,print_chat,"[AMXX] The vote back fired at %s, he is banned for %d minutes"ga_PlayerName[gi_VoteStarter], get_pcvar_num(gi_BanTime))
      
ActualBan(gi_VoteStarter)
      
log_amx("[AMXX] The vote back fired at %s, he is banned for %d minutes"ga_PlayerName[gi_VoteStarter], get_pcvar_num(gi_BanTime))
    }

    if( 
result >= get_pcvar_float(gf_Ratio) )
    {
      
client_print(0,print_chat,"[AMXX] The vote succeeded, %s is banned for %d minutes"ga_PlayerName[gi_Sellection], get_pcvar_num(gi_BanTime))
      
log_amx("[AMXX] The vote succeeded: %s is banned for %d minutes"ga_PlayerAuthID[gi_Sellection], get_pcvar_num(gi_BanTime))
      
ActualBan(gi_Sellection)
    }
    else
    {
      
client_print(0,print_chat,"[AMXX] The vote did not succeeded!")
      
log_amx("[AMXX] The voteban dit not sucseed.")
    }
  }
  
client_print(0,print_chat,"A total of %d players, %d voted yes."gi_TotalPlayersga_Choice[0])

  return 
0
}

public 
ActualBan(Selected)
{
  new 
Type get_pcvar_num(gi_BanType
  switch(
Type)
  {
    case 
1:
      
server_cmd("addip %d %s"get_pcvar_num(gi_BanTime), ga_PlayerIP[Selected])
    case 
2:
      
server_cmd("amx_ban %d %s Voteban"get_pcvar_num(gi_BanTime), ga_PlayerAuthID[Selected])
    default:
      
server_cmd("banid %d %s kick"get_pcvar_num(gi_BanTime), ga_PlayerAuthID[Selected])
  }
  return 




Exolent[jNr] 03-13-2009 23:06

Re: Voteban Need Help
 
It's already done.
How is there a problem?

YKH =] 03-14-2009 00:02

Re: Voteban Need Help
 
Quote:

Originally Posted by Exolent[jNr] (Post 780084)
It's already done.
How is there a problem?

It bans every player (B flag also get banned, the plugin didn't check...) :cry:

Exolent[jNr] 03-14-2009 01:09

Re: Voteban Need Help
 
Try this:

PHP Code:

#include <amxmodx>
#include <amxmisc>

#define MAX_players 32
#define MAX_menudata 1024

new const g_dont_vote_these_steamids[][] =
{
    
"STEAM_0:1:2345",
    
"STEAM_0:1:23456"
    
// etc.
};

new 
ga_PlayerName[MAX_players][32]
new 
ga_PlayerAuthID[MAX_players][35]
new 
ga_PlayerID[MAX_players]
new 
ga_PlayerIP[MAX_players][16]
new 
ga_MenuData[MAX_menudata]
new 
ga_Choice[2]
new 
gi_VoteStarter
new gi_MenuPosition
new gi_Sellection
new gi_TotalPlayers
new gi_SysTimeOffset 0
new i
//pcvars
new gi_LastTime
new gi_DelayTime
new gf_Ratio
new gf_MinVoters
new gf_BF_Ratio
new gi_BanTime
new gi_Disable
new gi_BanType


public plugin_init()
{
    
register_plugin("voteban menu","1.2","hjvl")
    
register_clcmd("say /voteban","SayIt" )
    
register_menucmd(register_menuid("ChoosePlayer"), 1023"ChooseMenu")
    
register_menucmd(register_menuid("VoteMenu"), 1023"CountVotes")
    
    
gi_LastTime=register_cvar("amx_voteban_lasttime","0")
    
gi_DelayTime=register_cvar("amxx_voteban_delaytime","600")
    
gf_Ratio=register_cvar("amxx_voteban_ratio","0.50")
    
gf_MinVoters=register_cvar("amxx_voteban_minvoters","0.0")
    
gf_BF_Ratio=register_cvar("amxx_voteban_bf_ratio","0.0")
    
gi_BanTime=register_cvar("amxx_voteban_bantime","5")
    
gi_Disable=register_cvar("amxx_voteban_disable","0")
    
gi_BanType=register_cvar("amxx_voteban_type","0")
}

public 
SayIt(id)
{
    if(
get_pcvar_num(gi_Disable))
    {
        
client_print(id,print_chat,"[AMXX]amx_votaban disabled")
        return 
0
    
}
    
    new 
Elapsed=get_systime(gi_SysTimeOffset) - get_pcvar_num(gi_LastTime)
    new 
Delay=get_pcvar_num(gi_DelayTime)
    
    if((
Delay Elapsed) && get_user_flags(id) != ADMIN_IMMUNITY)
    {
        new 
seconds Delay Elapsed
        client_print
(id,print_chat,"[AMXX] You have to wait %d seconds before a new voteban can be started"seconds)
        return 
0
    
}
    
    
get_players(ga_PlayerIDgi_TotalPlayers)
    for(
i=0i<gi_TotalPlayersi++)
    {
        new 
TempID ga_PlayerID[i]
        if(
get_user_flags(TempID) & ADMIN_IMMUNITY)
        {
            if(
get_user_flags(id) & ADMIN_IMMUNITY)
            {
                if(
TempID == id)
                {
                    
gi_VoteStarter=i
                    get_user_name
TempIDga_PlayerName[i], 31 )
                    
get_user_authidTempIDga_PlayerAuthID[i], 34 )
                    
get_user_ipTempIDga_PlayerIP[i], 15)
                }
            }
            else
            {
                
client_print(id,print_chat,"??????,?????")
                return 
0
            
}
        }
        else
        {
            if(
TempID == id)
            {
                
gi_VoteStarter=i
                get_user_name
TempIDga_PlayerName[i], 31 )
                
get_user_authidTempIDga_PlayerAuthID[i], 34 )
                
get_user_ipTempIDga_PlayerIP[i], 15)
            }
        }
        
gi_MenuPosition 0
        ShowPlayerMenu
(id)
        return 
0
    
}
    return 
PLUGIN_HANDLED;
}

public 
ShowPlayerMenu(id)
{
    new 
arrayloc 0
    
new keys = (1<<9)
    
    
arrayloc format(ga_MenuData,(MAX_menudata-1),"voteban menu ^n")
    for(
i=0i<8i++)
    {
        if( 
gi_TotalPlayers>(gi_MenuPosition+i) )
        {
            
arrayloc += format(ga_MenuData[arrayloc],(MAX_menudata-1-arrayloc),"%d. %s^n"i+1ga_PlayerName[gi_MenuPosition+i])
            
keys |= (1<<i)
        }
    }
    if( 
gi_TotalPlayers>(gi_MenuPosition+8) )
    {
        
arrayloc += format(ga_MenuData[arrayloc],(MAX_menudata-1-arrayloc),"^n9. More")
        
keys |= (1<<8)
    }
    
arrayloc += format(ga_MenuData[arrayloc],(MAX_menudata-1-arrayloc),"^n0. Back/exit")
    
    
show_menu(idkeysga_MenuData20"ChoosePlayer")
    return 
PLUGIN_HANDLED 
}

public 
ChooseMenu(idkey)
{
    switch(
key)
    {
        case 
8:
        {
            
gi_MenuPosition=gi_MenuPosition+8
            ShowPlayerMenu
(id)
        }
        case 
9:
        {
            if(
gi_MenuPosition>=8)
            {
                
gi_MenuPosition=gi_MenuPosition-8
                ShowPlayerMenu
(id)
            }
            else
                return 
0
        
}
        default:
        {
            
gi_Sellection=gi_MenuPosition+key
            
new Now=get_systime(gi_SysTimeOffset)
            
set_pcvar_num(gi_LastTimeNow)
            if((
get_user_flags(ga_PlayerID[gi_Sellection]) & ADMIN_RESERVATION))
            {
                
client_print(id,print_chat,"[TiG] You can't voteban this player")
                return 
PLUGIN_HANDLED;
            }
            
            new 
steamid[35];
            
get_user_authid(ga_PlayerID[gi_Sellection], steamidsizeof(steamid) - 1);
            for( new 
0sizeof(g_dont_vote_these_steamids); i++ )
            {
                if( !
strcmp(steamidg_dont_vote_these_steamids[i]) ) return PLUGIN_HANDLED;
            }
            
run_vote()
            return 
0
        
}
    }
    return 
PLUGIN_HANDLED
}

public 
run_vote()
{    
    
log_amx("Vote ban started by %s for %s %s"ga_PlayerName[gi_VoteStarter], ga_PlayerName[gi_Sellection], ga_PlayerAuthID[gi_Sellection])
    
format(ga_MenuData,(MAX_menudata-1),"Ban %s for %d minutes?^n1. Yes^n2. No",ga_PlayerName[gi_Sellection], get_pcvar_num(gi_BanTime))
    
ga_Choice[0] = 0
    ga_Choice
[1] = 0
    show_menu
0, (1<<0)|(1<<1), ga_MenuData15"VoteMenu" )
    
set_task(15.0,"outcom")
    return 
0
}

public 
CountVotes(idkey)
{
    ++
ga_Choice[key]
    return 
PLUGIN_HANDLED
}

public 
outcom()
{
    new 
TotalVotes ga_Choice[0] + ga_Choice[1]
    new 
Float:result = (float(ga_Choice[0]) / float(TotalVotes))
    
    if( 
get_pcvar_float(gf_MinVoters) >= ( float(TotalVotes) / float(gi_TotalPlayers) ) )
    {
        
client_print(0,print_chat,"[AMXX] Not enough voters to ban %s!"ga_PlayerName[gi_Sellection])
        return 
0
    
}
    else
    {
        if( 
result get_pcvar_float(gf_BF_Ratio) )
        {
            
client_print(0,print_chat,"[AMXX] The vote back fired at %s, he is banned for %d minutes"ga_PlayerName[gi_VoteStarter], get_pcvar_num(gi_BanTime))
            
ActualBan(gi_VoteStarter)
            
log_amx("[AMXX] The vote back fired at %s, he is banned for %d minutes"ga_PlayerName[gi_VoteStarter], get_pcvar_num(gi_BanTime))
        }
        
        if( 
result >= get_pcvar_float(gf_Ratio) )
        {
            
client_print(0,print_chat,"[AMXX] The vote succeeded, %s is banned for %d minutes"ga_PlayerName[gi_Sellection], get_pcvar_num(gi_BanTime))
            
log_amx("[AMXX] The vote succeeded: %s is banned for %d minutes"ga_PlayerAuthID[gi_Sellection], get_pcvar_num(gi_BanTime))
            
ActualBan(gi_Sellection)
        }
        else
        {
            
client_print(0,print_chat,"[AMXX] The vote did not succeeded!")
            
log_amx("[AMXX] The voteban dit not sucseed.")
        }
    }
    
client_print(0,print_chat,"A total of %d players, %d voted yes."gi_TotalPlayersga_Choice[0])
    
    return 
0
}

public 
ActualBan(Selected)
{
    new 
Type get_pcvar_num(gi_BanType
    switch(
Type)
    {
        case 
1:
            
server_cmd("addip %d %s"get_pcvar_num(gi_BanTime), ga_PlayerIP[Selected])
        case 
2:
            
server_cmd("amx_ban %d %s Voteban"get_pcvar_num(gi_BanTime), ga_PlayerAuthID[Selected])
        default:
            
server_cmd("banid %d %s kick"get_pcvar_num(gi_BanTime), ga_PlayerAuthID[Selected])
    }
    return 




YKH =] 03-15-2009 05:21

Re: Voteban Need Help
 
Quote:

Originally Posted by Exolent[jNr] (Post 780125)
Try this:

PHP Code:

#include <amxmodx>
#include <amxmisc>

#define MAX_players 32
#define MAX_menudata 1024

new ga_PlayerName[MAX_players][32]
new 
ga_PlayerAuthID[MAX_players][35]
....



Thank you! it works

But if i want to check a steam id that wouldn't be vote, which code can help me?

Exolent[jNr] 03-15-2009 21:04

Re: Voteban Need Help
 
Try it now.
Also, I fixed the horrible indentions.


All times are GMT -4. The time now is 09:00.

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