Русское сообщество по скриптингу

BIO Voteban: совместимость с AMXBans

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

BIO Voteban: совместимость с AMXBans

Сообщение Don Corleone » 12 мар 2017, 14:48

Всем привет! Как привязать voteban к amxbans и убрать ошибки с плагина voteban

Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <colorchat>

#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
new bool
:dont[33]
new timer

public plugin_init
()
{
                                                                   
  register_plugin
("BIO Voteban","1.2","Coolzm.net")
  register_clcmd("say /voteban","SayIt" )
  register_clcmd("say /vtb","SayIt" )
  register_menucmd(register_menuid("ChoosePlayer"), 1023, "ChooseMenu")
  register_menucmd(register_menuid("VoteMenu"), 1023, "CountVotes")

  gi_DelayTime=register_cvar("bh_voteban_delaytime","10")
  gi_LastTime=register_cvar("bh_voteban_lasttime","0")
  gf_Ratio=register_cvar("bh_voteban_ratio","0.70")
  gf_MinVoters=register_cvar("bh_voteban_minvoters","0.0")   
  gi_BanTime
=register_cvar("bh_voteban_bantime","15")
  gi_Disable=register_cvar("bh_voteban_disable","0")
  gf_BF_Ratio=register_cvar("bh_voteban_bf_ratio","0.0")
  gi_BanType=register_cvar("bh_voteban_type","0")
}

public SayIt(id)
{
    if((get_user_flags(id) & ADMIN_LEVEL_C))
    {
        if(get_pcvar_num(gi_Disable))
        {
            client_printcolor(id,"[AMXX]amx_votaban disabled")
            return 0
        
}
      

        if
( dont[id] )
        {
            client_printcolor(id,"/y[ /gVote Ban /y] /ctrСледущие голосование доступно через /g%d /ctrСекунд/g.", timer)
            return 0
        
}
     
        if
(task_exists())
        {
            client_printcolor(id,"/y[ /gVote Ban /y] /ctrДождитесь завершения предыдущего голосования.")
            return 0
        
}
        
        get_players
( ga_PlayerID, gi_TotalPlayers )
        for(i=0; i<gi_TotalPlayers; i++)
        {
            new TempID = ga_PlayerID[i]

            if(TempID == id)
                gi_VoteStarter=i

            get_user_name
( TempID, ga_PlayerName[i], 31 )
            get_user_authid( TempID, ga_PlayerAuthID[i], 34 )
            get_user_ip( TempID, ga_PlayerIP[i], 15, 1 )
        }

        gi_MenuPosition = 0
        ShowPlayerMenu
(id)
    }                                                                               
    else if
(get_user_flags(id) & ADMIN_RESERVATION)
    {
        client_printcolor(id,"/y[ /gVote Ban /y] /ctrУ тебя черепок, /gВотебан /ctrвременно не доступен!")
    }
    else
        client_printcolor
(id, "/g[ /ctrONLY FOR VIP /g] /ybuy VIP account here: /ctrwww.Coolzm.net" )   
        
    return 0
}

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

  arrayloc = format(ga_MenuData,(MAX_menudata-1),"\rVIP Vote Ban Menu:\w^n")
  for(i=0; i<8; i++)
   if( gi_TotalPlayers>(gi_MenuPosition+i) )
   {
     arrayloc += format(ga_MenuData[arrayloc],(MAX_menudata-1-arrayloc),"%d. %s^n", i+1, ga_PlayerName[gi_MenuPosition+i])
     keys |= (1<<i)
   }
  if( gi_TotalPlayers>(gi_MenuPosition+8) )
  {
    arrayloc += format(ga_MenuData[arrayloc],(MAX_menudata-1-arrayloc),"^n9. Далее")
    keys |= (1<<8)
  }
  arrayloc += format(ga_MenuData[arrayloc],(MAX_menudata-1-arrayloc),"^n0. Выход")

  show_menu(id, keys, ga_MenuData, 20, "ChoosePlayer")
  return PLUGIN_HANDLED 
}

public ChooseMenu(id, key)
{
  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 player 
= get_user_index(ga_PlayerName[gi_Sellection])
      if(get_user_flags(player) & ADMIN_LEVEL_C)
      {
      client_printcolor(id,"/y[ /gVote Ban /y] /ctrYou cannot ban VIP`s & ADMIN`s /g:)")
      return 1
      
}
      else
      
{
      dont[id] = true
      timer 
= 90        
      set_task
(1.0,"cmdOffD",id,_,_,"a",100)
      run_vote()
      return 0
      
}
    }
  }
  return PLUGIN_HANDLED
}
public cmdOffD(id)
{
timer-=1
if(timer <= 0)
dont[id] = false
}

public run_vote()
{
  log_amx("Воте-бан запустил %s против %s %s", ga_PlayerName[gi_VoteStarter], ga_PlayerName[gi_Sellection], ga_PlayerAuthID[gi_Sellection])
  client_printcolor(0,"/y[ /gVote Ban /y] /ctrVoting started by /g%s /ctrfor /g%s", ga_PlayerName[gi_VoteStarter], ga_PlayerName[gi_Sellection])
  format(ga_MenuData,(MAX_menudata-1),"\rBan \y%s \rfor \w%d\r minutes?^n\r1. \wYes ^n\r2. \wNo",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_MenuData, 15, "VoteMenu" )
  set_task(15.0,"outcom")
  return 0
}

public CountVotes(id, key)
{
  ++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_printcolor(0,"/g[AMXX] /ctrNot enough voters to ban /g%s!", ga_PlayerName[gi_Sellection])
    return 0
  
}
  else
  
{
    new voted_no = gi_TotalPlayers-ga_Choice[0]
    if( ga_Choice[0] > voted_no )
    {
      ColorChat(0,RED,"^x01[^x04 Vote Ban ^x01] The vote succeeded: ^x04%s ^x01is banned for ^x03%d ^x01minutes^x04.", 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_printcolor(0,"/y[/g Vote Ban /y] /ctrThe vote did not succeeded/g!")
      log_amx("[AMXX] The voteban dit not sucseed.")
    }
  }
  client_printcolor(0,"/y[/g Vote Ban /y] /yA total of /g%d /yplayers - /ctr[ /yVoted: Yes /g%d /ctr]/y - /ctr[ /yVoted: No /g%d /ctr]", gi_TotalPlayers, ga_Choice[0],gi_TotalPlayers-ga_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 0 
}

stock client_printcolor(const id, const input[], any:...) 
{ 
    new iCount 
= 1, iPlayers[32] 
     
    static szMsg
[191] 
    vformat
(szMsg, charsmax(szMsg), input, 3) 
     
    replace_all
(szMsg, 190, "/g", "^4") // green txt 
    replace_all(szMsg, 190, "/y", "^1") // orange txt 
    replace_all(szMsg, 190, "/ctr", "^3") // team txt 
    replace_all(szMsg, 190, "/w", "^0") // team txt 
     
    if
(id) iPlayers[0] = id 
    else get_players
(iPlayers, iCount, "ch") 
         
    for 
(new i = 0; i < iCount; i++) 
    
{ 
        if 
(is_user_connected(iPlayers[i])) 
        
{ 
            message_begin
(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayers[i]) 
            write_byte
(iPlayers[i]) 
            write_string
(szMsg) 
            message_end
() 
        
} 
    
}

Название темы скорректировано // Subb98
Аватара пользователя
Don Corleone
 
Сообщения: 79
Зарегистрирован: 23 окт 2016, 16:13
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: BIO Voteban: совместимость с AMXBans

Сообщение azzik21 » 12 авг 2017, 09:05

есть скайп?.
Аватара пользователя
azzik21
 
Сообщения: 4
Зарегистрирован: 09 авг 2017, 00:22
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Опыт программирования: Меньше месяца
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20