Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

сделать проверку на админа в вотебане

Статус пользователя kenZZo
сообщение 23.4.2013, 14:12
Сообщение #1
Стаж: 14 лет

Сообщений: 64
Благодарностей: 6
Полезность: 75

Помогите сделать проверку на админа в плагине вотебана, если админ онлайн - плагин блокируется

вот часть кода, по моему именно тут нужно сделать её

Код
public VoteBanMenu(id) {
    static iPlayers[32], iPlayersNum, i, iPlayer

    get_players( iPlayers, iPlayersNum, "ch" )    // skip bots and HLTV
    if ( iPlayersNum < 4 ) {
        ColorPrint( id, "^4%s %L", gszPrefix, id, "VOTEBAN_NEED3" )
        return PLUGIN_HANDLED
    }

    // create and show menu
    new szTempString[64], szName[32], szInfo[3]
    formatex( szTempString, charsmax(szTempString), "%L\y:", id, "VOTEBAN_MENU" )
    new iMenu = menu_create( szTempString, "MenuHandle", .ml = 1 )
    new iCallback = menu_makecallback( "CallbackMenu" )
    menu_setprop( iMenu, MPROP_NUMBER_COLOR, "\r" )
    menu_setprop( iMenu, MPROP_EXIT, MEXIT_ALL )
    formatex( szTempString, charsmax(szTempString), "%L", id, "VOTEBAN_EXIT" )
    menu_setprop( iMenu, MPROP_EXITNAME, szTempString )
    formatex( szTempString, charsmax(szTempString), "%L", id, "VOTEBAN_NEXT" )
    menu_setprop( iMenu, MPROP_NEXTNAME, szTempString )
    formatex( szTempString, charsmax(szTempString), "%L", id, "VOTEBAN_BACK" )
    menu_setprop( iMenu, MPROP_BACKNAME, szTempString )

    new iPercent
    for ( i = 0; i < iPlayersNum; i++ ) {
        iPlayer = iPlayers[i]
        get_user_name( iPlayer, szName, 31 )
        if ( get_user_flags(iPlayer) & IMMUNITY_FLAG ) {
            // don't set info[] if player has immunity
            menu_additem( iMenu, szName, "", .callback = iCallback )
        }
        else {
            iPercent = get_percent( giVotes[iPlayer], iPlayersNum )
            if ( giVotes[iPlayer] && CheckFlag( giVotedPlayers[id], iPlayer ) )
                formatex( szTempString, charsmax(szTempString), "%s \d(\r%d%%\d) \y%L", szName, iPercent, id, "VOTEBAN_VOTED" )
            else
                formatex( szTempString, charsmax(szTempString), "%s \d(\r%d%%\d)", szName, iPercent )
            num_to_str( iPlayer, szInfo, charsmax(szInfo) )
            menu_additem( iMenu, szTempString, szInfo, .callback = iCallback )
        }
    }

    menu_display( id, iMenu )

    return PLUGIN_CONTINUE
}


Отредактировал: kenZZo, - 23.4.2013, 14:15
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Fintok
сообщение 23.4.2013, 14:16
Сообщение #2


Стаж: 16 лет

Сообщений: 756
Благодарностей: 294
Полезность: 638

Цитата(kenZZo @ 23.4.2013, 16:12) *
вот часть кода, по моему именно тут нужно сделать её

kenZZo, Экстрасенсы все в отпуске, весь код выкладывай?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Nickk
сообщение 23.4.2013, 14:52
Сообщение #3
Стаж: 13 лет

Сообщений: 438
Благодарностей: 120
Полезность: 523

Код:
public VoteBanMenu(id) {
static iPlayers[32], iPlayersNum, i, iPlayer

get_players( iPlayers, iPlayersNum, "ch" ) // skip bots and HLTV
if ( iPlayersNum < 4 ) {
ColorPrint( id, "^4%s %L", gszPrefix, id, "VOTEBAN_NEED3" )
return PLUGIN_HANDLED
}

for(i = 1 ; i <= maxplayers ; i++)
{
if(is_user_connected(i) && is_user_admin(i)
{
client_print(id, print_chat, "Админ на сервере!")
return PLUGIN_HANDLED
}
}

// create and show menu
new szTempString[64], szName[32], szInfo[3]
formatex( szTempString, charsmax(szTempString), "%L\y:", id, "VOTEBAN_MENU" )
new iMenu = menu_create( szTempString, "MenuHandle", .ml = 1 )
new iCallback = menu_makecallback( "CallbackMenu" )
menu_setprop( iMenu, MPROP_NUMBER_COLOR, "\r" )
menu_setprop( iMenu, MPROP_EXIT, MEXIT_ALL )
formatex( szTempString, charsmax(szTempString), "%L", id, "VOTEBAN_EXIT" )
menu_setprop( iMenu, MPROP_EXITNAME, szTempString )
formatex( szTempString, charsmax(szTempString), "%L", id, "VOTEBAN_NEXT" )
menu_setprop( iMenu, MPROP_NEXTNAME, szTempString )
formatex( szTempString, charsmax(szTempString), "%L", id, "VOTEBAN_BACK" )
menu_setprop( iMenu, MPROP_BACKNAME, szTempString )

new iPercent
for ( i = 0; i < iPlayersNum; i++ ) {
iPlayer = iPlayers[i]
get_user_name( iPlayer, szName, 31 )
if ( get_user_flags(iPlayer) & IMMUNITY_FLAG ) {
// don't set info[] if player has immunity
menu_additem( iMenu, szName, "", .callback = iCallback )
}
else {
iPercent = get_percent( giVotes[iPlayer], iPlayersNum )
if ( giVotes[iPlayer] && CheckFlag( giVotedPlayers[id], iPlayer ) )
formatex( szTempString, charsmax(szTempString), "%s \d(\r%d%%\d) \y%L", szName, iPercent, id, "VOTEBAN_VOTED" )
else
formatex( szTempString, charsmax(szTempString), "%s \d(\r%d%%\d)", szName, iPercent )
num_to_str( iPlayer, szInfo, charsmax(szInfo) )
menu_additem( iMenu, szTempString, szInfo, .callback = iCallback )
}
}

menu_display( id, iMenu )

return PLUGIN_CONTINUE
}

Пробуйте.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Fintok
сообщение 23.4.2013, 15:02
Сообщение #4


Стаж: 16 лет

Сообщений: 756
Благодарностей: 294
Полезность: 638

//del

Отредактировал: Fintok, - 23.4.2013, 15:23
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя kenZZo
сообщение 23.4.2013, 15:23
Сообщение #5
Стаж: 14 лет

Сообщений: 64
Благодарностей: 6
Полезность: 75

Fintok, ошибки в строках

for(i = 1 ; i <= maxplayers ; i++)
и
if(is_user_connected(i) && is_user_admin(i)
везде - undefined symbol

вот весь код

Скрытый текст


#include <amxmodx>

#define PLUGIN "Rock to Ban"
#define VERSION "1.01"
#define AUTHOR "Safety1st"

// customizable parameters
#define MAX_PLAYERS 32
#define IMMUNITY_FLAG ( ADMIN_IMMUNITY | ADMIN_BAN ) /* flags 'a' & 'd', separate by '|' */
new gszPrefix[] = "[VOTEBAN]" // set prefix for all chat messages; for example ">"
// end of customizable parameters

new giVotedPlayers[MAX_PLAYERS + 1] // player's voteban targets
new giVotes[MAX_PLAYERS + 1] // count of votes for ban that player
new giVoted[MAX_PLAYERS + 1] // count of votes for ban by that player

// macro; %1 - variable being modified, %2 - player id
#define CheckFlag(%1,%2) ( %1 & ( 1 << (%2-1) ) )
#define AddFlag(%1,%2) ( %1 |= ( 1 << (%2-1) ) )
#define RemoveFlag(%1,%2) ( %1 &= ~( 1 << (%2-1) ) )

enum _:Labels {
CVAR_PERCENT = 0,
CVAR_BANTYPE,
CVAR_BANTIME,
CVAR_LIMIT,
CVAR_REASON,
CVAR_LOG
}
new pCvar[Labels]

enum _:Types {
AUTO = 0,
STEAMID,
IP,
AMXBAN,
AMXBANS5,
SUPERBAN
}

enum _:LogRecords {
UNVOTE = 0,
VOTE
}

new gszLogRecords[LogRecords][] = {
"Player '%s' has canceled vote for banning '%s'",
"Player '%s' has been voted for banning by '%s'"
}

public plugin_init() {
register_plugin( PLUGIN, VERSION, AUTHOR )
register_dictionary( "rock2ban.txt" )
register_cvar( "rock2ban", VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED )

register_saycmd( "voteban", "VoteBanMenu" )

pCvar[CVAR_PERCENT] = register_cvar( "voteban_percent", "60" )
pCvar[CVAR_BANTYPE] = register_cvar( "voteban_type", "0" )
pCvar[CVAR_BANTIME] = register_cvar( "voteban_time", "20" )
pCvar[CVAR_LIMIT] = register_cvar( "voteban_limit", "3" )
pCvar[CVAR_REASON] = register_cvar( "voteban_reason", " 3a6aHeH /voteban'om Ha %time% MuHyT " )
pCvar[CVAR_LOG] = register_cvar( "voteban_log", "1" )
}

register_saycmd( saycommand[], function[] ) {
new szTemp[64]
formatex( szTemp, charsmax(szTemp), "say %s", saycommand )
register_clcmd( szTemp, function )
formatex( szTemp, charsmax(szTemp), "say_team %s", saycommand )
register_clcmd( szTemp, function )
formatex( szTemp, charsmax(szTemp), "say /%s", saycommand )
register_clcmd( szTemp, function )
formatex( szTemp, charsmax(szTemp), "say .%s", saycommand )
register_clcmd( szTemp, function )
formatex( szTemp, charsmax(szTemp), "say_team /%s", saycommand )
register_clcmd( szTemp, function )
formatex( szTemp, charsmax(szTemp), "say_team .%s", saycommand )
register_clcmd( szTemp, function )
}

public client_disconnect(id) {
static iPlayers[32], iPlayersNum, i, iPlayer

// check whether there were votes for ban by that player
if ( giVoted[id] ) {
get_players( iPlayers, iPlayersNum, "ch" ) // skip bots and HLTV
for ( i = 0; i < iPlayersNum; i++ ) {
iPlayer = iPlayers[i]
if ( CheckFlag( giVotedPlayers[id], iPlayer ) )
giVotes[iPlayer]--
}
giVotedPlayers[id] = 0
giVoted[id] = 0
}

// check whether there were votes for ban that player
if ( giVotes[id] ) {
get_players( iPlayers, iPlayersNum, "ch" ) // skip bots and HLTV
for ( i = 0; i < iPlayersNum; i++ ) {
iPlayer = iPlayers[i]
if ( CheckFlag( giVotedPlayers[iPlayer], id ) ) {
RemoveFlag( giVotedPlayers[iPlayer], id )
giVotes[id]--
giVoted[iPlayer]--
}
if ( !giVotes[id] )
break
}
giVotes[id] = 0 // just in case
}
}

public VoteBanMenu(id) {
static iPlayers[32], iPlayersNum, i, iPlayer

get_players( iPlayers, iPlayersNum, "ch" ) // skip bots and HLTV
if ( iPlayersNum < 4 ) {
ColorPrint( id, "^4%s %L", gszPrefix, id, "VOTEBAN_NEED3" )
return PLUGIN_HANDLED
}

for(i = 1 ; i <= maxplayers ; i++)
{
if(is_user_connected(i) && is_user_admin(i)
{
client_print(id, print_chat, "Админ на сервере!")
return PLUGIN_HANDLED
}
}

// create and show menu
new szTempString[64], szName[32], szInfo[3]
formatex( szTempString, charsmax(szTempString), "%L\y:", id, "VOTEBAN_MENU" )
new iMenu = menu_create( szTempString, "MenuHandle", .ml = 1 )
new iCallback = menu_makecallback( "CallbackMenu" )
menu_setprop( iMenu, MPROP_NUMBER_COLOR, "\r" )
menu_setprop( iMenu, MPROP_EXIT, MEXIT_ALL )
formatex( szTempString, charsmax(szTempString), "%L", id, "VOTEBAN_EXIT" )
menu_setprop( iMenu, MPROP_EXITNAME, szTempString )
formatex( szTempString, charsmax(szTempString), "%L", id, "VOTEBAN_NEXT" )
menu_setprop( iMenu, MPROP_NEXTNAME, szTempString )
formatex( szTempString, charsmax(szTempString), "%L", id, "VOTEBAN_BACK" )
menu_setprop( iMenu, MPROP_BACKNAME, szTempString )

new iPercent
for ( i = 0; i < iPlayersNum; i++ ) {
iPlayer = iPlayers[i]
get_user_name( iPlayer, szName, 31 )
if ( get_user_flags(iPlayer) & IMMUNITY_FLAG ) {
// don't set info[] if player has immunity
menu_additem( iMenu, szName, "", .callback = iCallback )
}
else {
iPercent = get_percent( giVotes[iPlayer], iPlayersNum )
if ( giVotes[iPlayer] && CheckFlag( giVotedPlayers[id], iPlayer ) )
formatex( szTempString, charsmax(szTempString), "%s \d(\r%d%%\d) \y%L", szName, iPercent, id, "VOTEBAN_VOTED" )
else
formatex( szTempString, charsmax(szTempString), "%s \d(\r%d%%\d)", szName, iPercent )
num_to_str( iPlayer, szInfo, charsmax(szInfo) )
menu_additem( iMenu, szTempString, szInfo, .callback = iCallback )
}
}

menu_display( id, iMenu )

return PLUGIN_CONTINUE
}
public CallbackMenu( id, menu, item ) {
new access, info[3], callback, szTempString[64]
menu_item_getinfo( menu, item, access, info, charsmax(info), szTempString, charsmax(szTempString), callback )

if ( !info[0] )
// player has immunity
return ITEM_DISABLED

if ( str_to_num(info) == id )
return ITEM_DISABLED

return ITEM_ENABLED
}

public MenuHandle( id, menu, item ) {
if ( item == MENU_EXIT ) {
menu_destroy(menu)
return PLUGIN_HANDLED
}

new access, info[3], callback
menu_item_getinfo( menu, item, access, info, charsmax(info), .callback = callback )
menu_destroy(menu)

new iTarget = str_to_num(info)

if ( !is_user_connected(iTarget) ) {
VoteBanMenu(id)
return PLUGIN_HANDLED
}

if ( CheckFlag( giVotedPlayers[id], iTarget ) ) {
RemoveFlag( giVotedPlayers[id], iTarget )
giVoted[id]--
giVotes[iTarget]--

new szName[32], szTargetName[32]
get_user_name( id, szName, 31 )
get_user_name( iTarget, szTargetName, 31 )
MsgToLog( gszLogRecords[UNVOTE], szName, szTargetName )
ColorPrint( 0, "^4%s %L", gszPrefix, LANG_SERVER, "VOTEBAN_UNVOTE", szName, szTargetName )
client_print( id, print_center, "%L", id, "VOTEBAN_CLEAR" )
return PLUGIN_HANDLED
}

new iLimit = get_pcvar_num( pCvar[CVAR_LIMIT] )
if ( giVoted[id] >= iLimit ) {
// don't let vote too much ;)
client_print( id, print_center, "%L", id, "VOTEBAN_LIMIT", iLimit )
return PLUGIN_HANDLED
}

client_print( id, print_center, "%L", id, "VOTEBAN_SET" )
giVoted[id]++
giVotes[iTarget]++
AddFlag( giVotedPlayers[id], iTarget )

CheckVotes( iTarget, id )

return PLUGIN_HANDLED
}

CheckVotes( target, voter ) {
new szName[32], szTargetName[32]
get_user_name( voter, szName, 31 )
get_user_name( target, szTargetName, 31 )

MsgToLog( gszLogRecords[VOTE], szTargetName, szName )
ColorPrint( 0, "^4%s %L", gszPrefix, LANG_SERVER, "VOTEBAN_VOTE", szName, szTargetName )

new iPlayers[32], iPlayersNum
get_players( iPlayers, iPlayersNum, "ch" ) // skip bots and HLTV

if ( get_percent( giVotes[target], iPlayersNum ) < get_pcvar_num( pCvar[CVAR_PERCENT] ) )
return

new iUserid = get_user_userid(target)
new iType = get_pcvar_num( pCvar[CVAR_BANTYPE] )
new iBanTime = get_pcvar_num( pCvar[CVAR_BANTIME] )
new szAuthid[32], szReason[256]
get_pcvar_string( pCvar[CVAR_REASON], szReason, charsmax(szReason) )

switch ( iType ) {
case AMXBAN, AMXBANS5, SUPERBAN : {
// clear unused template
replace( szReason, 255, "%time%", " " )
}
default : {
static szHostname[64]
if ( !szHostname[0] )
get_cvar_string( "hostname", szHostname, 63 )
get_user_authid( target, szAuthid, charsmax(szAuthid) )
log_amx( "Ban: ^"%s<0><><>^" ban and kick ^"%s<%d><%s><>^" (minutes ^"%d^") (reason ^"Voteban^")", szHostname, szTargetName, iUserid, szAuthid, iBanTime )
ColorPrint( 0, "^4%s %L", gszPrefix, LANG_SERVER, "VOTEBAN_BAN", szTargetName, iBanTime )
// set actual ban time in the reason
if ( containi( szReason, "%time%" ) != -1 ) {
new szBanTime[4]
num_to_str( iBanTime, szBanTime, 3 )
replace( szReason, 255, "%time%", szBanTime )
}
}
}

if ( !iType ) { // AUTO
/* AMXX base plugin 'plmenu.amxx', code by MistaGee
IF AUTHID STEAM_ID_LAN OR VALVE_ID_LAN OR HLTV, BAN PER IP TO DON'T BAN EVERYONE */
if ( equal( "STEAM_ID_LAN", szAuthid ) || equal( "VALVE_ID_LAN", szAuthid ) || equal( "HLTV", szAuthid ) )
iType = IP
else
iType = STEAMID
}

switch ( iType ) {
case STEAMID :
server_cmd( "kick #%d %s;wait;wait;wait;banid %d %s", iUserid, szReason, iBanTime, szAuthid )
case IP : {
new szIp[32]
get_user_ip( target, szIp, charsmax(szIp), 1 /* without_port */ )
server_cmd( "kick #%d %s;wait;wait;wait;addip %d %s", iUserid, szReason, iBanTime, szIp )
}
case AMXBAN :
server_cmd( "amx_ban #%d %d ^"%s^"", iUserid, iBanTime, szReason )
case AMXBANS5 :
server_cmd( "amx_ban %d #%d ^"%s^"", iBanTime, iUserid, szReason )
case SUPERBAN :
server_cmd( "amx_superban #%d %d ^"%s^"", iUserid, iBanTime, szReason )
}
}

get_percent( value, tvalue ) {
return floatround( floatmul( float(value) / float(tvalue) , 100.0 ) )
}

MsgToLog( szRawMessage[], any:... ) {
if ( !get_pcvar_num( pCvar[CVAR_LOG] ) )
return

static szLogFile[192] = "", szTime[32], fp
if ( !szLogFile[0] ) {
new szLogsDir[64], szDate[16]
get_time ( "%Y%m", szDate, charsmax(szDate) )
get_localinfo( "amxx_logs", szLogsDir, 63 )
formatex( szLogFile, charsmax(szLogFile), "%s/voteban_%s.log", szLogsDir, szDate )
}

new szMessage[192]
vformat( szMessage, charsmax( szMessage ), szRawMessage, 2 )

get_time( "%m/%d/%Y - %H:%M:%S", szTime, 31 )
fp = fopen( szLogFile, "a" )
fprintf( fp, "L %s: %s^n", szTime, szMessage )
fclose(fp)
}

ColorPrint( iReceiver, const szRawMessage[ ], any:... ) {
static iMsgSayText = 0
if( !iMsgSayText )
iMsgSayText = get_user_msgid( "SayText" )

new szMessage[192], iPlayers[32], iPlayersNum = 1, iPlayer
vformat( szMessage, charsmax(szMessage), szRawMessage, 3 )
replace_all( szMessage, charsmax(szMessage), "!n", "^1" )
replace_all( szMessage, charsmax(szMessage), "!t", "^3" )
replace_all( szMessage, charsmax(szMessage), "!g", "^4" )
if ( szMessage[0] != '^1' || szMessage[0] != '^3' || szMessage[0] != '^4' )
format( szMessage, charsmax(szMessage), "^1%s", szMessage ) // we must set initial default color if it is not provided explicitly

if ( iReceiver )
iPlayers[0] = iReceiver
else {
get_players( iPlayers, iPlayersNum, "ch" ) // skip bots and HLTV
if ( !iPlayersNum )
return // don't print useless message
}

for ( new i = 0 ; i < iPlayersNum ; i++ ) {
iPlayer = iPlayers[i]
message_begin( MSG_ONE_UNRELIABLE, iMsgSayText, _, iPlayer )
write_byte(iPlayer) // use target player as sender to see colors at all (and his own team color for ^3)
write_string(szMessage)
message_end()
}
}


P.S забыл уточнить -проверку нужна сделать на флаг С - admin_kick
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Nickk
сообщение 23.4.2013, 15:24
Сообщение #6
Стаж: 13 лет

Сообщений: 438
Благодарностей: 120
Полезность: 523

Цитата(kenZZo @ 23.4.2013, 16:23) *
Fintok, ошибки в строках

P.S забыл уточнить -проверку нужна сделать на флаг С - admin_kick

Мой код пробовали?

А, все, понял.
Код
for(i = 1; i <= maxplayers; i++)

замените на
Код
for(new i = 1; i <= maxplayers; i++)


Отредактировал: Nickk, - 23.4.2013, 15:26
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Fintok
сообщение 23.4.2013, 15:35
Сообщение #7


Стаж: 16 лет

Сообщений: 756
Благодарностей: 294
Полезность: 638

Nickk, думаю вот так будет вернее.
Код:
for(new i = 0; i < iPlayersNum; i++)
{
new TempID = iPlayers[i]
if(get_user_flags(TempID) & ADMIN_KICK)
{
ColorPrint(id, "^4%s %L", gszPrefix, id, "VOTEBAN_ADMIN_ONLINE" )
return PLUGIN_HANDLED
}
}

Добавить в ланг
VOTEBAN_ADMIN_ONLINE = !n Админ на сервере! Вотебан выключен

Отредактировал: Fintok, - 23.4.2013, 15:36
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя kenZZo
сообщение 23.4.2013, 15:55
Сообщение #8
Стаж: 14 лет

Сообщений: 64
Благодарностей: 6
Полезность: 75

Спс всем, вроде работает.

P.S как вставить код как у вас, чтобы нумеровались строки, а то чет я не доганяю)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Nickk
сообщение 23.4.2013, 16:01
Сообщение #9
Стаж: 13 лет

Сообщений: 438
Благодарностей: 120
Полезность: 523

https://c-s.net.ua/forum/topic51212s0.html?#entry423741
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
  Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: