Получение переменной сервера для вывода ее в чат.

Тема в разделе "Программирование / Скриптинг", создана пользователем 8Ahnenerbe8, 26 июн 2016.

  1. 8Ahnenerbe8

    8Ahnenerbe8

    Сообщения:
    102
    Симпатии:
    11
    Как получить переменную сервера для вывода ее в чат?
    Как пример можно взять команду sv_airaccelerate.


    И еще вот такой вопрос:
    Насколько я понял,то OnClientPutInServer вызывается всегда при заходе игрока на сервер,следовательно и при смене карты тоже будет происходить вызов.
    А мне нужно сделать так,чтобы действие срабатывало только один раз при заходе игрока на сервер,то есть при смене карты оно повторно не выполнялось.
    Что тогда вместо OnClientPutInServer использовать?
     
    Последнее редактирование: 26 июн 2016
  2. Reiko1231

    Reiko1231 AlexTheRegent

    Сообщения:
    237
    Симпатии:
    569
    1. Использовать необходимую функцию в зависимости от типа переменной конвара:
    [​IMG]GetConVarBool
    [​IMG]GetConVarInt
    [​IMG]GetConVarFloat
    [​IMG]GetConVarString

    2. Подключение игрока:
    PHP:
    HookEvent("player_connect", ...);
    и аналогичное событие при выходе игрока (вызывается только один раз):
    PHP:
    HookEvent("player_disconnect", ...);
     
    8Ahnenerbe8 нравится это.
  3. 8Ahnenerbe8

    8Ahnenerbe8

    Сообщения:
    102
    Симпатии:
    11
    @Reiko1231, благодарю
    --- Добавлено позже ---
    @Reiko1231,
    Хм,почему-то при смене карты все равно выполняется функция - вывод в чат.
    В чем проблема?
    Может потому что событие OnPluginStart вызывается всегда после смены?
    PHP:
    #include <sourcemod>

    float g_flTickRate;

    public 
    OnPluginStart()
    {
        
    HookEvent("player_connect"Event_PlayerTeamEventHookMode_Post);
     
        
    g_flTickRate GetTickInterval();
    }

    public 
    Action:Event_PlayerTeam(Handle:event, const String:name[], bool:dontBroadcast)
    {
        
    HookEvent("player_team"Event_PlayerTeam_PostEventHookMode_Post);
    }

    public 
    Action:Event_PlayerTeam_Post(Handle:event, const String:name[], bool:dontBroadcast)
    {
        new 
    client  GetClientOfUserId(GetEventInt(event"userid"));
     
        if(
    client <= MaxClients)
        {
            if(
    IsClientInGame(client))
            {
                new 
    oldteam GetEventInt(event"oldteam");
                if(
    oldteam == 0)
                { 
                    {
                        
    PrintToChat(client"Server settings: %.0ftick"g_flTickRate);
                    }
                }
            }
        }
    }
     
    Последнее редактирование: 27 июн 2016
  4. AlmazON

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

    Сообщения:
    4.563
    Симпатии:
    1.988
    Нельзя так делать, хук здесь осуществляется при каждом подключении игрока, а должен лишь 1 раз.
    Если необходимо отсылать разовое сообщение тому игроку, кто подключается, то лучше использовать:
    PHP:
    OnClientPostAdminCheck(client)
    С блокировкой повторного показа при смене карты, путём изменения значения глобальной переменной клиента из массива:
    PHP:
    new bool:g_bBlockMessage[MAXPLAYERS 1];

    public 
    OnPluginStart() HookEvent("player_connect",    Event_PlayerConnect);

    public 
    Event_PlayerConnect(Handle:eventString:name[], bool:dontBroadcastg_bBlockMessage[GetEventInt(event"index") + 1] = false;

    public 
    OnClientPostAdminCheck(client)
    {
        if (!
    g_bBlockMessage[client])
        {
            
    PrintToChat(client"Это сообщение Вы получите 1 раз при входе на сервер.")
            
    g_bBlockMessage[client] = true;
        }
    }