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

Сообщения
17
Реакции
5
Предупреждения
8
Доброго времени суток, Господа скриптеры.
У меня дилемма. Написал плагин для контроля наличия 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);
        }
    }   
}
 
Сообщения
816
Реакции
657
Помог
8 раз(а)
Код:
#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) );
    }
}
 
Сообщения
17
Реакции
5
Предупреждения
8
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
 
Сообщения
17
Реакции
5
Предупреждения
8
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));
        }
    }
}
 
Сообщения
816
Реакции
657
Помог
8 раз(а)
Код:
#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 ) );
    }
}
 
Сообщения
17
Реакции
5
Предупреждения
8
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
 
Сообщения
17
Реакции
5
Предупреждения
8
XyLiGaN, спасибо. Данным ресурсом пользуюсь давно. Перед созданием темы проверил все существующие способы. Всё они работают с одним результатом: первый игрок с gsclient заходит на сервер, остальных игроков с gsclient кикает с просьбой скачать gsclient, хотя он у них есть. Надеюсь, что разработчик откликнется на обращение в теме с authemu.
 
Сообщения
816
Реакции
657
Помог
8 раз(а)
Anton123, отключи молуль authemu и юзай мой второй вариант пробуй
 
Сообщения
17
Реакции
5
Предупреждения
8
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;
                        }
                }
        }
}
 
Сообщения
143
Реакции
4
Предупреждения
1
Помог
1 раз(а)
Anton123, Модуль authemu - это как точка общения между клиентом, а в плагин идет из модуля т.е. чисто информация тупо технического характера, ну а еще гсклиент иногда рапортует в модуль возможные детекты т.е он у себя обнаружил какие-то подозрительные действия, отправил на сервере, модуль его обработал, а плагин для тебя, чтобы мог видеть что там пишется.
И да, на счёт аватарок, модуль работает в качестве хаба для аватарок - поэтому кому они нахрен сдались если гс в друзья не добавить в стиме? Ответ очевиден.
 
Сообщения
85
Реакции
-3
Предупреждения
1
Помог
1 раз(а)
Anton123, так ты временно снеси, пока не исправят модуль
читер проверить не знаю как будет.
Adidas скажет все, что нужно
Суббота в 17:33
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
 
Последнее редактирование:
Сообщения
17
Реакции
5
Предупреждения
8
Код:
#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-"метку" и плагин перестанет работать корректно.
 
Сообщения
816
Реакции
657
Помог
8 раз(а)
Anton123, похоже сама gsc_user не вызывается при смене карты, только при ручном дисконнекте-коннекте, возможно и is_user_authemu, поговорю с адидасом, думаю решим вопрос.
 
Сообщения
17
Реакции
5
Предупреждения
8
Javekson, в любом случае я безумно рад. Аж на форуме зарегался :Dd обычно Гугол помогал с настройкой сервера. Но тут без профессионалов никак. Спасибо)))) а то на стим читов больше, чем на пиратку. А на гс они не ставятся (есть пару способов, о которых знает 2,3 человека из миллиарда). Но в целом при успешной реализации можно отказаться от Whblocker, Soft blocker, так как из-за них модельки пропадают, хотя ставил antinoflash 0, decalfix (чем 1 от 2 отличается хз) включал, отключал и т.д...
Воскресенье в 13:21
Nordic Warrior, статус мой не позволяет лишний раз отвлекать его. Лучше топик на форуме оставлю. Буду ждать.
Воскресенье в 13:29
Javekson, судя по твоему коду, по-моему gsc_user на сервер запрашивает, а gs при коннекте посылает эту команду скрытно на сервер, далее плагин присваивает логическое тру клиенту и проверка продолжит мимо условия отсутствия тру статуса. А что мешает gs при changelevel повторно послать команду gsc_user (по идёт это такой же коннекте, а и при первом подключении). Потому что плагин при смене карты сбрасывает все логические метки на 0 (false) и начинает проверку заново. Но почему то её проходит только первый гс. Хотя authemu тут не причём (его нет). Значит вопрос к самому gs.
Воскресенье в 13:37
@Javekson,глупый т9:dD
судя по твоему коду, по-моему, gsc_user плагин запрашивает, а gs при коннекте посылает эту команду скрытно на сервер, далее плагин присваивает логическое тру клиенту и проверка проходит мимо условия отсутствия тру статуса. А что мешает gs при changelevel повторно послать команду gsc_user (по идеи это такой же коннект, как и при первом подключении). Потому что плагин при смене карты сбрасывает все логические метки на 0 (false) и начинает проверку заново. Но почему-то её проходит только первый гс. Хотя authemu тут не причём (его нет). Значит вопрос к самому gs.
Типа gs как-то определяет наличие других gs на сервере без authemu и не отправляет gsc_user при смене карты. А когда приходится после кика заходить, он уже типа не знает, что на сервере есть другие gs и отправляет команду gsc_user, как в первый раз и проходит успешно проверку.
 
Сообщения
17
Реакции
5
Предупреждения
8
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, Господа, проблему решил. Дело было в совместимости продуктов. Чуть позднее напишу подробный гайд решения вопроса.
 
Сообщения
816
Реакции
657
Помог
8 раз(а)
Anton123, ответ адидаса
Александр, [17.01.2022 0:09]
как обнову доделаю, наверно сделаю чтоб всегда вызывалось

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

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

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