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

Full Server Slot Reservation

Scripting help for english speaking users. While not very active, you still have a chance to get help here.
Правила форума
We cannot maintain english version version of our forum rules, but shortly (it's simple) - Don't be a dick. If you really want to know our rules you should check appropriate thread.

Re: Full Server Slot Reservation

Сообщение Ant1Lamer » 19 июн 2016, 19:08

no same maybe the problem is in plugin but where i dont know :D thans for trying to help me :)
Аватара пользователя
Ant1Lamer
 
Сообщения: 23
Зарегистрирован: 18 май 2016, 01:13
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Team Fortress II
Left 4 Dead

Re: Full Server Slot Reservation

Сообщение VenomIvanof » 02 авг 2016, 18:15

try this

Код: Выделить всё
// ================================================================================================
//
//    Plugin:  Full Server Slot Reservation
//    Version: 0.1.0
//    Authors: PomanoB & droper
//
//    Copyright © 2011
//
// ================================================================================================

#include < amxmodx >
#include < orpheu >

// ================================================================================================
//
//    Макроконстанты
//
// ================================================================================================

#define PLUGIN    "Full Server Slot Reservation"
#define VERSION    "0.1.0"
#define AUTHOR    "PomanoB & droper"

// Проверять пароль _pw или нет
#define PASSWORD_CHECK

// Причина кика
#define KICK_REASON "Slot reservation! You unluck player!"


#if defined PASSWORD_CHECK

    // Строка должна быть такой же как и в кваре amx_password_field ( но \ в начале и конце обязательны )
    
new const g_passwordField[] = "\_pw\";
#endif

// ================================================================================================
//
//    Глобальные переменные
//
// ================================================================================================

new g_maxplayers = 0;


// ================================================================================================
//
//    plugin_precache ()
//
// ================================================================================================

public plugin_precache ( )
{
    register_plugin ( PLUGIN, VERSION, AUTHOR );

    OrpheuRegisterHook ( OrpheuGetFunction ( "
SV_ConnectClient" ), "OnSV_ConnectClient" );

    g_maxplayers = get_maxplayers ( );
}

// ================================================================================================
//
//    OnSV_ConnectClient ()
//
// ================================================================================================

public OrpheuHookReturn:OnSV_ConnectClient ( )
{
    static szInfo[512], szName[ 32 ], iPos, iCount, iFlags;

    read_args ( szInfo, charsmax( szInfo ) );

    szInfo[ strlen ( szInfo ) - 1 ] = EOS;

    iPos = contain ( szInfo, "
\szName\" );

    copyc ( szName, charsmax( szName ), szInfo[ iPos + 6 ], '\' );

#if defined PASSWORD_CHECK

        static szPassword[ 64 ];

        iPos = contain ( szInfo, g_passwordField );

        if ( iPos != -1 )
        {
            copyc ( szPassword, charsmax( szPassword), szInfo[ iPos + charsmax( g_passwordField ) ], '\' );
        }
        else
        {
            szPassword[ 0 ] = EOS;
        }
#endif

    iCount = admins_num ( );

    for ( iPos = 0; iPos < iCount; iPos++ )
    {
        iFlags = admins_lookup ( iPos, AdminProp_Flags );

        admins_lookup ( iPos, AdminProp_Auth, szInfo, charsmax( szInfo ) );

        if ( iFlags & ( FLAG_AUTHID | FLAG_IP ) )
        {
            continue;
        }

        if ( iFlags & FLAG_TAG )
        {
            if ( iFlags & FLAG_CASE_SENSITIVE )
            {
                if ( contain ( szName, szInfo ) != -1 )
                {
                    break;
                }
            }
            else if ( contain ( szName, szInfo ) != -1 )
            {
                break;
            }
        }
        else
        {

            if ( iFlags & FLAG_CASE_SENSITIVE )
            {
                if ( equal ( szInfo, szName ) )
                {
                    break;
                }
            }
            else
            {
                if ( equali ( szInfo, szName ) )
                {
                    break;

                }
            }
        }

    }

    if ( iPos == iCount )
    {
        return OrpheuIgnored;
    }

#if defined PASSWORD_CHECK

        if ( !( iFlags & FLAG_NOPASS ) )
        {
            admins_lookup ( iPos, AdminProp_Password, szInfo, charsmax( szInfo ) );

            if ( !equal ( szInfo, szPassword ) )
            {
                return OrpheuIgnored;
            }
        }
#endif

    iPos = findKickedPlayer ( );

    if ( iPos )
    {
        server_cmd ( "
kick #%d ^"%s^"", get_user_userid ( iPos ), KICK_REASON );
        
server_exec ( );
    }

    return 
OrpheuIgnored;
}

// ================================================================================================
//
//    findKickedPlayer ()
//
// ================================================================================================

public findKickedPlayer()
{
    static 
iiUnluckPlayeriPlayersNum;

    
iUnluckPlayer 0;

    
iPlayersNum 0;

    for ( 
1<= g_maxplayersi++ )
    {
        if ( 
is_user_connected ) )
        {
            
iPlayersNum++

            if ( !
iUnluckPlayer && !is_user_bot ) )
            {
                
iUnluckPlayer i;
            }
        }
    }

    if ( 
iUnluckPlayer && iPlayersNum == g_maxplayers )
    {
        return 
iUnluckPlayer;
    }

    return 
0;
}
 
Аватара пользователя
VenomIvanof
 
Сообщения: 66
Зарегистрирован: 02 апр 2016, 13:26
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
Языки программирования: Counter-Strike 1.6

Пред.

Вернуться в Scripting

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

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