OnClientConnected вызывается каждый раз OnMapStart

Тема в разделе "Программирование / Скриптинг", создана пользователем SHAREN, 15 фев 2016.

Метки:
  1. SHAREN

    SHAREN Servers-Info.Ru

    Сообщения:
    204
    Симпатии:
    13
    OnClientPutInServer OnClientConnect OnClientConnected все это вызывается каждый раз в начале карты.
    и причем Hook player_activate тоже.
    Так и должно быть?
     
  2. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.523
    Симпатии:
    1.972
    Все вызываются, кроме player_connect. Оффтоп
     
  3. SHAREN

    SHAREN Servers-Info.Ru

    Сообщения:
    204
    Симпатии:
    13
    Спасибо. Проглядел его.

    player_connect
    Note: A new client connected

    Name: player_connect
    Structure:
    string name player name
    byte index player slot (entity index-1)
    short userid user ID on server (unique on server)
    string networkid player network (i.e steam) id
    string address ip:port
    short bot is a bot
    player_connect_client
    Note: A new client connected, only present in OB

    Name: player_connect_client
    Structure:
    string name player name
    byte index player slot (entity index-1)
    short userid user ID on server (unique on server)
    string networkid player network (i.e steam) id
    short bot is a bot

    Про этот прототип имеешь ввиду? Кроме как отсутствия ip:port разницы не вижу, в чем соль?
     
  4. Reiko1231

    Reiko1231 AlexTheRegent

    Сообщения:
    237
    Симпатии:
    569
    Сервер отключает игроков от себя каждый раз при смене карты, и в итоге они подключаются вновь после смены карты, поэтому эти форварды и вызываются каждую смену карты.
    Если быть более точным, то эти события вызываются при каждой смене карты для каждого игрока:

    Начало карты (вызываются примерно в таком порядке):
    OnClientConnect
    OnClientAuthorized
    OnClientConnected
    OnClientPutInServer
    OnClientPreAdminCheck
    OnClientPostAdminCheck
    OnClientPostAdminFilter

    Конец карты:
    OnClientDisconnect
    OnClientDisconnect_Post

    Нет разницы, просто добавили новое поле в событие.
     
  5. SHAREN

    SHAREN Servers-Info.Ru

    Сообщения:
    204
    Симпатии:
    13
    Спасибо
    Код:
    public void OnPluginStart()
    {
        HookEvent("player_connect", eV_player_connect);
    }
    
    
    public void eV_player_connect(Handle event, const char[] name, bool DB)
    {
        int userid = GetEventInt(event, "userid");
        int client = GetClientOfUserId(userid);
        int client2 = GetEventInt(event, "index");
        char networkid[32];
        GetEventString(event, "networkid", networkid, sizeof(networkid));
        dbgMsg("%i %i %i %s", client, client2, userid, networkid);
    }
    
    В итоге получается
    Код:
    0 0 20 STEAM_1:0:40849190
    0 1 21 BOT
    0 1 22 BOT
    0 2 23 BOT
    0 3 24 BOT
    0 4 25 BOT
    0 5 26 BOT
    0 6 27 STEAM_1:0:77465821
    GetClientOfUserId почему-то не срабатывает, а GetEventInt(event, "index") дает на 1 ниже
    Так и должно быть?
    И будет ли GetEventInt(event, "index") + 1 брать правильный индекс игрока?
     
  6. SHAREN

    SHAREN Servers-Info.Ru

    Сообщения:
    204
    Симпатии:
    13
    GetEventInt(event, "index") + 1 будет ли правильным индексом.

    В итоге мне нужно получить стимид и индекс игрока.
    По идее можно сделать и так.
    Код:
    public void OnClientAuthorized(int client, const char[] auth)
    {
        if (GetClientTime(client) < 1.0)   // пробовал меньше секунды, может не успеть сработать.
        {
            char steamid[32];
            Format(steamid, sizeof(steamid), "%s", auth);
           dbgMsg("%i  %s", client,  auth);
        }
    }
    Какой способ рациональнее использовать в плане надежности и производительности?
     
  7. Reiko1231

    Reiko1231 AlexTheRegent

    Сообщения:
    237
    Симпатии:
    569
    В плане надёжности рекомендуется получать стим вручную при помощи GetClientAuthId, поскольку OnClientAuthorized передает стим в формате, которое сделали Valve. Таким образом, при всех их сменах форматов (как это было при смене с Steam2 на Steam3) плагины продолжат работать корректно.
     
  8. SHAREN

    SHAREN Servers-Info.Ru

    Сообщения:
    204
    Симпатии:
    13
    Код:
    public void OnPluginStart()
    {
         HookEvent("player_connect", eV_player_connect);
    }
    
    public void eV_player_connect(Handle event, const char[] name, bool DB)
    {
        int client = GetEventInt(event, "index") + 1;
        char steamid[32];
        GetEventString(event, "networkid", networkid, sizeof(steamid));
        dbgMsg("%i %s", client, steamid);
    }
    
    В общем такой вариант у меня в CS:GO работает, индексы берет верные, стимид получает в виде AuthId_Steam2, ну и самое главное в начале каждой карты не вызывается.

    P.S. Правда не проверял будет ли работать GetClientAuthId на этом этапе
     
  9. Саша Шеин

    Саша Шеин

    Сообщения:
    1.259
    Симпатии:
    191
    Оффтоп
    0_о И как работает?)
     
  10. SHAREN

    SHAREN Servers-Info.Ru

    Сообщения:
    204
    Симпатии:
    13
    Работает, здесь просто набросок.