Создание плагина "Вход только для GSClient"

Сообщения
19
Реакции
5
Доброго времени суток, Господа скриптеры.
У меня дилемма. Написал плагин для контроля наличия GSClient у игрока.
Но есть один нюанс при выполнении команд: плагин работает только для одного игрока.
Если на сервере есть один игрок и он с GSclient, то последующих не пускает на сервер, даже если у них есть GSClient.

Вопрос: как сделать, чтобы была проверка на GSClient для всех игроков, а не только для первого?

Код:
#include <amxmodx>
#include <amxmisc>
#include <authemu>

public plugin_init()
{
    register_plugin("gsclientcheck", "0.1", "Anton123");
}

public client_putinserver(id)
{
    new Players[32];
    new Count, i, player
    get_players(Players, Count, "ch")
    for (i=0; i<Count; i++)
    {
    player = Players[i];
    if(!is_user_authemu(id))
        {
                    player = get_user_userid(id);
                    server_cmd("kick #%d ^"Allowed only GSclient, https://dev-ms.ru/GSClient_Setup.exe^"", player);
        }
    }   
}
 
Сообщения
1,031
Реакции
827
Помог
10 раз(а)
Код:
#include < amxmodx >
#include < authemu >

public plugin_init( )
{
    register_plugin( "gsclientcheck", "0.1", "Anton123" );
}

public client_putinserver( id )
{
    if( !is_user_authemu( id ) )
    {
        server_cmd( "kick #%d ^"Allowed only GSclient, https://dev-ms.ru/GSClient_Setup.exe^"", get_user_userid(id) );
    }
}
 
Сообщения
19
Реакции
5
Javekson, благодарю. Но по-прежнему работает только для одного GS-игрока. Если заходит второй игрок с GS, то кикает.
Тестил с проверенным человеком. Исключений быть не может.
P.S. Я Player (с GS) - первый зашедший игрок c GS. 3aichik<3<3><> - второй игрок с GS.
Код:
L 01/14/2022 - 19:33:29: "Player<1><>" connected, address "85.174.206.85:7164"
L 01/14/2022 - 19:33:29: [admin.amxx] Login: "Player<1><>" became an admin (account "STEAM_0:1:38260444") (access "abcdef") (address "85.174.206.85")
L 01/14/2022 - 19:33:29: "Player<1><>" STEAM USERID validated
85.174.206.85:7164:reconnect
L 01/14/2022 - 19:33:30: "Player<2><>" connected, address "85.174.206.85:7164"
L 01/14/2022 - 19:33:30: [admin.amxx] Login: "Player<2><>" became an admin (account "STEAM_0:1:38260444") (access "abcdef") (address "85.174.206.85")
L 01/14/2022 - 19:33:30: "Player<2><>" STEAM USERID validated
L 01/14/2022 - 19:33:31: Server cvar "mp_winlimit" = "0"
L 01/14/2022 - 19:33:33: "Player<2><>" entered the game
L 01/14/2022 - 19:33:33: [VTC] Client Player with new codec connected
L 01/14/2022 - 19:33:34: "Player<2><>" joined team "TERRORIST"
L 01/14/2022 - 19:33:50: "3aichik<3<3><>" connected, address "95.31.186.163:59899"
L 01/14/2022 - 19:33:50: [admin.amxx] Login: "3aichik<3<3><>" became an admin (account "STEAM_0:1:440996343") (access "abcdef") (address "95.31.186.163")
L 01/14/2022 - 19:33:50: "3aichik<3<3><>" STEAM USERID validated
95.31.186.163:59899:reconnect
L 01/14/2022 - 19:33:51: "3aichik<3<4><>" connected, address "95.31.186.163:59899"
L 01/14/2022 - 19:33:51: [admin.amxx] Login: "3aichik<3<4><>" became an admin (account "STEAM_0:1:440996343") (access "abcdef") (address "95.31.186.163")
L 01/14/2022 - 19:33:52: "3aichik<3<4><>" STEAM USERID validated
L 01/14/2022 - 19:33:55: Kick: "3aichik<3<4><>" was kicked by "Console" (message ""Allowed only GSclient, https://dev-ms.ru/GSClient_Setup.exe"")
L 01/14/2022 - 19:33:55: "3aichik<3<4>" triggered "time" (time "0:00")
L 01/14/2022 - 19:33:55: "3aichik<3<4>" triggered "latency" (ping "0")
L 01/14/2022 - 19:33:55: "3aichik<3<4><>" disconnected
L 01/14/2022 - 19:33:55: "3aichik<3<4><>" entered the game
 
Сообщения
19
Реакции
5
Nordic Warrior,
Понял. Я еще пробовал реализацию проверки путем сравнения UID (при отсутствии GS, по идеи, должен выдавать нулевое значение).
Вот мои тщетные попытки:
Код:
#include <amxmodx>
#include <authemu>

public plugin_init()
{
    register_plugin("gsclientcheck", "0.1", "Anton123");
}

public client_putinserver(id)
{
if (!is_user_bot(id) || !is_user_hltv(id))
   {
    new PlayerUID
    aemu_get_clientinfo(id, aci_unique_id, PlayerUID, 64);
    if(PlayerUID == (0))
        {            
                    server_cmd("kick #%d ^"Allowed only GSclient, https://dev-ms.ru/GSClient_Setup.exe^"", get_user_userid(id));
        }
    }
}
 
Сообщения
1,031
Реакции
827
Помог
10 раз(а)
Код:
#include < amxmodx >

new bool: g_bGSClient[ MAX_PLAYERS + 1];

public plugin_init( )
{
    register_plugin( "gsclientcheck", "0.1", "Anton123" );
    
    register_clcmd( "gsc_user", "clcmd_gsc_user" );
}

public client_disconnected( id )
{
    g_bGSClient[ id ] = false;
    
    remove_task( id );
}

public client_putinserver( id )
{
    set_task( 2.0, "task_gsc_check", id );
}

public clcmd_gsc_user( const id )
{
    g_bGSClient[ id ] = true;
}

public task_gsc_check( const id )
{
    if( !g_bGSClient[ id ] )
    {
        server_cmd( "kick #%d ^"Allowed only GSclient, https://dev-ms.ru/GSClient_Setup.exe^"", get_user_userid( id ) );
    }
}
 
Сообщения
19
Реакции
5
Javekson, видимо проблема с authemu.
Спасибо за участие. Твои версии работают, но для одного игрока.
P.S. у меня AMX 1.9.0 authemu, reunion, rehlds последней версии.
Код:
85.174.206.85:7157:reconnect
L 01/14/2022 - 20:32:16: "Player<9><>" connected, address "85.174.206.85:7157"
L 01/14/2022 - 20:32:16: [admin.amxx] Login: "Player<9><>" became an admin (account "STEAM_0:1:38260444") (access "abcdef") (address "85.174.206.85")
L 01/14/2022 - 20:32:17: "Player<9><>" STEAM USERID validated
L 01/14/2022 - 20:32:19: "Player<9><>" entered the game
L 01/14/2022 - 20:32:20: [VTC] Client Player with new codec connected
L 01/14/2022 - 20:32:21: "Player<9><>" joined team "TERRORIST"
L 01/14/2022 - 20:32:37: "kejsi<10><>" connected, address "46.39.54.131:30927"
L 01/14/2022 - 20:32:37: [admin.amxx] Login: "kejsi<10><>" became an admin (account "STEAM_0:0:39679491") (access "abcdef") (address "46.39.54.131")
L 01/14/2022 - 20:32:37: "kejsi<10><>" STEAM USERID validated
46.39.54.131:30927:reconnect
L 01/14/2022 - 20:32:38: "kejsi<11><>" connected, address "46.39.54.131:30927"
L 01/14/2022 - 20:32:38: [admin.amxx] Login: "kejsi<11><>" became an admin (account "STEAM_0:0:39679491") (access "abcdef") (address "46.39.54.131")
L 01/14/2022 - 20:32:38: "kejsi<11><>" STEAM USERID validated
L 01/14/2022 - 20:32:41: "kejsi<11><>" entered the game
L 01/14/2022 - 20:32:41: [VTC] Client kejsi with new codec connected
L 01/14/2022 - 20:32:42: "kejsi<11><>" joined team "CT"
L 01/14/2022 - 20:32:43: Kick: "kejsi<11><>" was kicked by "Console" (message ""Allowed only GSclient, https://dev-ms.ru/GSClient_Setup.exe"")
L 01/14/2022 - 20:32:43: "kejsi<11>" triggered "time" (time "0:02")
L 01/14/2022 - 20:32:43: "kejsi<11>" triggered "latency" (ping "0")
L 01/14/2022 - 20:32:43: "kejsi<11>" disconnected
14 Янв 2022
Nordic Warrior,
Понял. Я еще пробовал реализацию проверки путем сравнения UID (при отсутствии GS, по идеи, должен выдавать нулевое значение).
Вот мои тщетные попытки:
Код:
#include <amxmodx>
#include <authemu>

public plugin_init()
{
    register_plugin("gsclientcheck", "0.1", "Anton123");
}

public client_putinserver(id)
{
if (!is_user_bot(id) || !is_user_hltv(id))
   {
    new PlayerUID
    aemu_get_clientinfo(id, aci_unique_id, PlayerUID, 64);
    if(PlayerUID == (0))
        {           
                    server_cmd("kick #%d ^"Allowed only GSclient, https://dev-ms.ru/GSClient_Setup.exe^"", get_user_userid(id));
        }
    }
}
Код:
85.174.206.85:7157:reconnect
L 01/14/2022 - 20:39:31: "Player<5><>" connected, address "85.174.206.85:7157"
L 01/14/2022 - 20:39:31: [admin.amxx] Login: "Player<5><>" became an admin (account "STEAM_0:1:38260444") (access "abcdef") (address "85.174.206.85")
L 01/14/2022 - 20:39:31: "Player<5><>" STEAM USERID validated
L 01/14/2022 - 20:39:31: World triggered "Restart_Round_(1_second)"
L 01/14/2022 - 20:39:31: Team "CT" scored "0" with "0" players
L 01/14/2022 - 20:39:31: Team "TERRORIST" scored "0" with "0" players
L 01/14/2022 - 20:39:31: Server cvar "sv_restart" = "0"
L 01/14/2022 - 20:39:31: Server cvar "sv_restart" = "1"
L 01/14/2022 - 20:39:32: World triggered "Restart_Round_(1_second)"
L 01/14/2022 - 20:39:32: Team "CT" scored "0" with "0" players
L 01/14/2022 - 20:39:32: Team "TERRORIST" scored "0" with "0" players
L 01/14/2022 - 20:39:32: Server cvar "sv_restart" = "0"
L 01/14/2022 - 20:39:34: "Player<5><>" entered the game
L 01/14/2022 - 20:39:34: [VTC] Client Player with new codec connected
L 01/14/2022 - 20:39:35: "Player<5><>" joined team "TERRORIST"
L 01/14/2022 - 20:39:38: World triggered "Round_Start"
L 01/14/2022 - 20:40:08: "kejsi<6><>" connected, address "46.39.54.131:33275"
L 01/14/2022 - 20:40:08: [admin.amxx] Login: "kejsi<6><>" became an admin (account "STEAM_0:0:39679491") (access "abcdef") (address "46.39.54.131")
L 01/14/2022 - 20:40:08: "kejsi<6><>" STEAM USERID validated
L 01/14/2022 - 20:40:10: Kick: "kejsi<6><>" was kicked by "Console" (message ""Allowed only GSclient, https://dev-ms.ru/GSClient_Setup.exe"")
L 01/14/2022 - 20:40:10: "kejsi<6>" triggered "time" (time "0:00")
L 01/14/2022 - 20:40:10: "kejsi<6>" triggered "latency" (ping "0")
L 01/14/2022 - 20:40:10: "kejsi<6><>" disconnected
 
Сообщения
678
Реакции
56
Помог
16 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Сообщения
19
Реакции
5
XyLiGaN, спасибо. Данным ресурсом пользуюсь давно. Перед созданием темы проверил все существующие способы. Всё они работают с одним результатом: первый игрок с gsclient заходит на сервер, остальных игроков с gsclient кикает с просьбой скачать gsclient, хотя он у них есть. Надеюсь, что разработчик откликнется на обращение в теме с authemu.
 
Сообщения
1,031
Реакции
827
Помог
10 раз(а)
Anton123, отключи молуль authemu и юзай мой второй вариант пробуй
 
Сообщения
19
Реакции
5
Javekson, снёс полностью authemu. Оставил reunion (так как на сервер GS подключается по RevEmu). Думаю, что твой второй способ претендует на авторство :) Если заработает - отпишусь. Завтра буду проверять логи подключившихся.
Однако... прикол authemu в том, что Steam и Gs игроки между собой видят аватарки. При отсутствии authemu Gs подключается в non-steam режиме "пиратки", где аватарки нет.
Есть еще одна мысль у меня: оставить всё как было, только вместо модуля authemu снести плагин authemu.amxx (дополнение к нему), либо плагин проверки поставить в plugins.ini выше в списке, чем authemu.amxx, так как в authemu очень много команд return PLUGIN_HANDLED, что по-моему влияет на работу плагина проверки косвенно.
Мой конечный вариант при условии работы модуля authemu (буду проверять ещё):
Код:
#include <amxmodx>
#include <authemu>

public plugin_init()
{
    register_plugin("gsclientcheck", "0.1", "Anton123");
}

public client_putinserver(id)
{
    if ( !is_user_hltv(id) )
        {
            if( !is_user_bot(id) )
                   {
                    if( !is_user_authemu(id) )
                        {           
                    server_cmd("kick #%d ^"Allowed only GSclient, https://dev-ms.ru/GSClient_Setup.exe^"", get_user_userid(id));
                    return;
                        }
                }
        }
}
 
Сообщения
678
Реакции
56
Помог
16 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Anton123, Модуль authemu - это как точка общения между клиентом, а в плагин идет из модуля т.е. чисто информация тупо технического характера, ну а еще гсклиент иногда рапортует в модуль возможные детекты т.е он у себя обнаружил какие-то подозрительные действия, отправил на сервере, модуль его обработал, а плагин для тебя, чтобы мог видеть что там пишется.
И да, на счёт аватарок, модуль работает в качестве хаба для аватарок - поэтому кому они нахрен сдались если гс в друзья не добавить в стиме? Ответ очевиден.
 
Сообщения
1,031
Реакции
827
Помог
10 раз(а)
Anton123, так ты временно снеси, пока не исправят модуль
 
Сообщения
366
Реакции
5
Предупреждения
5
Помог
1 раз(а)
Anton123, так ты временно снеси, пока не исправят модуль
читер проверить не знаю как будет.
Adidas скажет все, что нужно
15 Янв 2022
Javekson, снёс полностью authemu. Оставил reunion (так как на сервер GS подключается по RevEmu). Думаю, что твой второй способ претендует на авторство :) Если заработает - отпишусь. Завтра буду проверять логи подключившихся.
Однако... прикол authemu в том, что Steam и Gs игроки между собой видят аватарки. При отсутствии authemu Gs подключается в non-steam режиме "пиратки", где аватарки нет.
Есть еще одна мысль у меня: оставить всё как было, только вместо модуля authemu снести плагин authemu.amxx (дополнение к нему), либо плагин проверки поставить в plugins.ini выше в списке, чем authemu.amxx, так как в authemu очень много команд return PLUGIN_HANDLED, что по-моему влияет на работу плагина проверки косвенно.
Мой конечный вариант при условии работы модуля authemu (буду проверять ещё):
Код:
#include <amxmodx>
#include <authemu>

public plugin_init()
{
    register_plugin("gsclientcheck", "0.1", "Anton123");
}

public client_putinserver(id)
{
    if ( !is_user_hltv(id) )
        {
            if( !is_user_bot(id) )
                   {
                    if( !is_user_authemu(id) )
                        {      
                    server_cmd("kick #%d ^"Allowed only GSclient, https://dev-ms.ru/GSClient_Setup.exe^"", get_user_userid(id));
                    return;
                        }
                }
        }
}
სა
Доброго времени суток, Господа скриптеры.
У меня дилемма. Написал плагин для контроля наличия GSClient у игрока.
Но есть один нюанс при выполнении команд: плагин работает только для одного игрока.
Если на сервере есть один игрок и он с GSclient, то последующих не пускает на сервер, даже если у них есть GSClient.

Вопрос: как сделать, чтобы была проверка на GSClient для всех игроков, а не только для первого?

Код:
#include <amxmodx>
#include <amxmisc>
#include <authemu>

public plugin_init()
{
    register_plugin("gsclientcheck", "0.1", "Anton123");
}

public client_putinserver(id)
{
    new Players[32];
    new Count, i, player
    get_players(Players, Count, "ch")
    for (i=0; i<Count; i++)
    {
    player = Players[i];
    if(!is_user_authemu(id))
        {
                    player = get_user_userid(id);
                    server_cmd("kick #%d ^"Allowed only GSclient, https://dev-ms.ru/GSClient_Setup.exe^"", player);
        }
    }
}
say me telegram https://t.me/Se_IaQe
 
Последнее редактирование:
Сообщения
19
Реакции
5
Код:
#include < amxmodx >

new bool: g_bGSClient[ MAX_PLAYERS + 1];

public plugin_init( )
{
    register_plugin( "gsclientcheck", "0.1", "Anton123" );
  
    register_clcmd( "gsc_user", "clcmd_gsc_user" );
}

public client_disconnected( id )
{
    g_bGSClient[ id ] = false;
  
    remove_task( id );
}

public client_putinserver( id )
{
    set_task( 2.0, "task_gsc_check", id );
}

public clcmd_gsc_user( const id )
{
    g_bGSClient[ id ] = true;
}

public task_gsc_check( const id )
{
    if( !g_bGSClient[ id ] )
    {
        server_cmd( "kick #%d ^"Allowed only GSclient, https://dev-ms.ru/GSClient_Setup.exe^"", get_user_userid( id ) );
    }
}
Javekson, Супер! Данный способ работает.
Единственный нюанс, который не знаю, как поправить: когда меняется карта, ГС игрок №1 заходит нормально, остальных ГС сначала кикает с причиной, а потом пускает без проблем. Как бы сделать так, чтобы при смене карты все заходили без проблем с первого раза?)))
И очень сильно меня удивило, что GSClient посылает на сервер некую clcmd команду "gsc_user". Где можно посмотреть какие команды помимо этой посылает GSClient серверу? А то мало ли разработчик изменит эту clcmd-"метку" и плагин перестанет работать корректно.
 
Сообщения
1,031
Реакции
827
Помог
10 раз(а)
Anton123, похоже сама gsc_user не вызывается при смене карты, только при ручном дисконнекте-коннекте, возможно и is_user_authemu, поговорю с адидасом, думаю решим вопрос.
 
Сообщения
19
Реакции
5
Javekson, в любом случае я безумно рад. Аж на форуме зарегался :Dd обычно Гугол помогал с настройкой сервера. Но тут без профессионалов никак. Спасибо)))) а то на стим читов больше, чем на пиратку. А на гс они не ставятся (есть пару способов, о которых знает 2,3 человека из миллиарда). Но в целом при успешной реализации можно отказаться от Whblocker, Soft blocker, так как из-за них модельки пропадают, хотя ставил antinoflash 0, decalfix (чем 1 от 2 отличается хз) включал, отключал и т.д...
16 Янв 2022
Nordic Warrior, статус мой не позволяет лишний раз отвлекать его. Лучше топик на форуме оставлю. Буду ждать.
16 Янв 2022
Javekson, судя по твоему коду, по-моему gsc_user на сервер запрашивает, а gs при коннекте посылает эту команду скрытно на сервер, далее плагин присваивает логическое тру клиенту и проверка продолжит мимо условия отсутствия тру статуса. А что мешает gs при changelevel повторно послать команду gsc_user (по идёт это такой же коннекте, а и при первом подключении). Потому что плагин при смене карты сбрасывает все логические метки на 0 (false) и начинает проверку заново. Но почему то её проходит только первый гс. Хотя authemu тут не причём (его нет). Значит вопрос к самому gs.
16 Янв 2022
@Javekson,глупый т9:dD
судя по твоему коду, по-моему, gsc_user плагин запрашивает, а gs при коннекте посылает эту команду скрытно на сервер, далее плагин присваивает логическое тру клиенту и проверка проходит мимо условия отсутствия тру статуса. А что мешает gs при changelevel повторно послать команду gsc_user (по идеи это такой же коннект, как и при первом подключении). Потому что плагин при смене карты сбрасывает все логические метки на 0 (false) и начинает проверку заново. Но почему-то её проходит только первый гс. Хотя authemu тут не причём (его нет). Значит вопрос к самому gs.
Типа gs как-то определяет наличие других gs на сервере без authemu и не отправляет gsc_user при смене карты. А когда приходится после кика заходить, он уже типа не знает, что на сервере есть другие gs и отправляет команду gsc_user, как в первый раз и проходит успешно проверку.
 
Сообщения
19
Реакции
5
Javekson, снёс полностью authemu. Оставил reunion (так как на сервер GS подключается по RevEmu). Думаю, что твой второй способ претендует на авторство :) Если заработает - отпишусь. Завтра буду проверять логи подключившихся.
Однако... прикол authemu в том, что Steam и Gs игроки между собой видят аватарки. При отсутствии authemu Gs подключается в non-steam режиме "пиратки", где аватарки нет.
Есть еще одна мысль у меня: оставить всё как было, только вместо модуля authemu снести плагин authemu.amxx (дополнение к нему), либо плагин проверки поставить в plugins.ini выше в списке, чем authemu.amxx, так как в authemu очень много команд return PLUGIN_HANDLED, что по-моему влияет на работу плагина проверки косвенно.
Мой конечный вариант при условии работы модуля authemu (буду проверять ещё):
Код:
#include <amxmodx>
#include <authemu>

public plugin_init()
{
    register_plugin("gsclientcheck", "0.1", "Anton123");
}

public client_putinserver(id)
{
    if ( !is_user_hltv(id) )
        {
            if( !is_user_bot(id) )
                   {
                    if( !is_user_authemu(id) )
                        {          
                    server_cmd("kick #%d ^"Allowed only GSclient, https://dev-ms.ru/GSClient_Setup.exe^"", get_user_userid(id));
                    return;
                        }
                }
        }
}
Nordic Warrior, Javekson, Господа, проблему решил. Дело было в совместимости продуктов. Чуть позднее напишу подробный гайд решения вопроса.
 
Сообщения
1,031
Реакции
827
Помог
10 раз(а)
Anton123, ответ адидаса
Александр, [17.01.2022 0:09]
как обнову доделаю, наверно сделаю чтоб всегда вызывалось

Александр, [17.01.2022 0:10]
так как модуль authemu отлетит после глобальной обновы, админам надо будет как то идентифицировать каждый заход игрока
Потому чекать gsc_user после обновы клиента будет самым верным способом
17 Янв 2022
Anton123, чекать квар voice_quality тоже не вариант, если клиент будет загружен как стим, то такой квар не чекнется вроде как, да и не всегда эта проверка срабатывает истинно
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу