[TF2] Проверка на наличие клан-тега в нике

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

  1. MAGNAT2645

    MAGNAT2645

    Сообщения:
    33
    Симпатии:
    0
    Здравствуйте, можете мне, пожалуйста, помочь?

    Я хочу создать проверку на наличие клан-тега, т.е. если у игрока перед ником стоит определённый клан-тег, у него будет например возможность получать двойной опыт за игру.

    P.S. В SourcePawn я слаб.
     
  2. AlmazON

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

    Сообщения:
    4.590
    Симпатии:
    1.995
    PHP:
    #include <cstrike>

    #define ACCESS_CLANTAG    "TEST"

    public OnClientPostAdminCheck(client)
    {
        
    decl String:buffer[10];
        
    CS_GetClientClanTag(clientbuffersizeof(buffer));
        if (
    strcmp(bufferACCESS_CLANTAG) == 0)
        {
            
    //Клан-тег при входе игрока совпал.
        
    }
    }
    Вот только, как тогда выйдет сделать:
    При таких знаниях.
     
  3. MAGNAT2645

    MAGNAT2645

    Сообщения:
    33
    Симпатии:
    0
    А это в TF2 будет работать или там нужно использовать другие нативы?
     
  4. AlmazON

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

    Сообщения:
    4.590
    Симпатии:
    1.995
    Оффсет клан-тега нужно искать, "подцепить" из конфигов. Оффтоп
     
  5. MAGNAT2645

    MAGNAT2645

    Сообщения:
    33
    Симпатии:
    0
    Ладно с этим потом разберусь, осталось ещё два вопроса:

    Как можно исправить эти ошибки ?:

    error 100: function prototypes do not match
    PHP:
    RegConsoleCmd("sm_removelvl"CMD_RemoveLVL);
    error 033: array must be indexed (variable "PlayerSign")
    PHP:
    public PlayerSetSign(Handle:pluginnumParams)
    {
        new 
    client GetNativeCell(1);
        new 
    newSign GetNativeCell(2);
        if (
    client <= MaxClients && IsClientInGame(client))
        {
            
    PlayerSign[client] = newSign;
        }
        return 
    Plugin_Continue;
    }
    --- Добавлено позже ---
    С error 033 я разобрался, надо было просто убрать [MAXPLAYERS + 1] в шапке плагина.
    --- Добавлено позже ---
    Уже исправил, но много предупреждений в компиляторе, надеюсь они не помешают.
     
  6. Monomizer

    Monomizer Мимо пробегал Супер-модератор

    Сообщения:
    1.527
    Симпатии:
    201
    @MAGNAT2645,
    Если клантеги нужны

    PHP:
    #include <sourcemod> 
    #include <cstrike> 

    public OnClientSettingsChanged(client

     if(
    IsClientInGame(client)) 
     { 
     
    decl String:auth[32]; 
     
    GetClientAuthString(clientauthsizeof(auth)); 
     
     if(!
    IsLegitSteam
     
    CS_SetClientClanTag(client"Here insert the line clan tag"); 
     } 


    bool:IsLegitSteam(const String:authID[]) 

     
    decl String:toks[3][16]; 
     
    ExplodeString(authID":"tokssizeof(toks), sizeof(toks[])); 

     if(
    StringToInt(toks[2]) < 80000000
     return 
    true
     
     return 
    false
    }
     
  7. MAGNAT2645

    MAGNAT2645

    Сообщения:
    33
    Симпатии:
    0
    Мне нужно что-то похожее, но для TF2.
    CS_GetClientClanTag в TF2 не работает, плагин просто выключается при использовании этих нативов.
    --- Добавлено позже ---
    Мне нужно, чтобы была проверка на наличие клан-тега в нике и чтобы это работало в TF2.
    А там уже если совпадает ник и клан-тег, то срабатывает какая нибудь консольная команда например.
    --- Добавлено позже ---
    Всё ещё не могу с этим смириться.

    Может это пойдёт?

    PHP:
    #define NICKTAG "[CLANTAG]"

    public void OnClientSettingsChanged(iClient)
    {
        
    decl String:CLANTAG[MAX_NAME_LENGTH];
        
    decl String:buffer[MAX_NAME_LENGTH];
        
    GetClientName(iClientbuffer[iClient], sizeof(buffer[]));
        
    Format(CLANTAG[iClient], sizeof(CLANTAG[]), "%s %s"NICKTAGbuffer[iClient]);
        if (
    strcmp(buffer[iClient], CLANTAG[iClient]) == 0)
        {
            
    PlayerCanDoubleBonus[iClient] = true;
        }
        if (
    strcmp(buffer[iClient], CLANTAG[iClient]) != 0)
        {
            
    PlayerCanDoubleBonus[iClient] = false;
        }
    }
     
    Последнее редактирование: 4 мар 2016
  8. AlmazON

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

    Сообщения:
    4.590
    Симпатии:
    1.995
    Если только клантег - просто приставка в нике игрока.
     
  9. MAGNAT2645

    MAGNAT2645

    Сообщения:
    33
    Симпатии:
    0
    Ну это подойдёт для проверки клантега в нике?

    Я пытаюсь сравнить две строки, одну (buffer) - сам ник и вторую (CLANTAG) - тот же ник игрока, но с тегом. Вроде в игре себе клантег ставлю в ник и всё равно получается не то, что мне нужно. (Функция срабатывает даже если у меня нету клантега в нике)
     
  10. AlmazON

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

    Сообщения:
    4.590
    Симпатии:
    1.995
    То огрызок какой-то, но основа верна. С другой стороны, как определить, что клан-тег закончил и идёт просто ник? Пробелом? Тогда слова не должны разделяться... Потому, такую имитацию обычно ограничивают скобками, вроде: [Клан-тег] Ник. Таким образом, понятно, где что и есть ли вообще что-то, кроме самого никнейма.
     
  11. MAGNAT2645

    MAGNAT2645

    Сообщения:
    33
    Симпатии:
    0
    А если я попробую использовать StrEqual вместо strcmp, это имеет смысл?

    PHP:
    #define NICKTAG "[CLANTAG]"

    if (StrEqual(buffer[iClient], NICKTAG))
    {
        
    PlayerCanDoubleBonus[iClient] = true;
    }
    if (!
    StrEqual(buffer[iClient], NICKTAG))
    {
        
    PlayerCanDoubleBonus[iClient] = false;
    }
     
  12. AlmazON

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

    Сообщения:
    4.590
    Симпатии:
    1.995
    PHP:
    PlayerCanDoubleBonus[iClient] = StrEqual(buffer[iClient], NICKTAG);
    Так его определённо больше.
     
    MAGNAT2645 нравится это.
  13. MAGNAT2645

    MAGNAT2645

    Сообщения:
    33
    Симпатии:
    0
    Хотя врятли, он ведь выявляет true, если две строки одинаковы, а у меня NICKTAG "[CLANTAG]".

    Получается, что будет true, если ник будет такой же как и NICKTAG. :ac:
     
    Последнее редактирование: 4 мар 2016
  14. AlmazON

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

    Сообщения:
    4.590
    Симпатии:
    1.995
    Оффтоп Хоть бы написал, переменная твоя или вытянута откуда... Должна быть true/false для какого случая.
     
  15. MAGNAT2645

    MAGNAT2645

    Сообщения:
    33
    Симпатии:
    0
    Ты про StrEqual? Ладно... попробую.
    --- Добавлено позже ---
    PHP:
    #define NICKTAG "[CLANTAG]" // Нужный клантег (в коде у меня другой)

    new bool:PlayerCanDoubleBonus[MAXPLAYERS 1]; // Может ли игрок использовать двойной бонус


    public void OnClientSettingsChanged(iClient)
    {
        
    decl String:buffer[MAXPLAYERS 1][MAX_NAME_LENGTH]; // Ник игрока
        
    GetClientName(iClientbuffer[iClient], sizeof(buffer[])); // Получаем ник в буфер
        
    decl String:CLANTAG[MAXPLAYERS 1][MAX_NAME_LENGTH]; // Нужный ник с тегом для проверки
        
    Format(CLANTAG[iClient], sizeof(CLANTAG[]), "%s %s"NICKTAGbuffer[iClient]); // Формат нужного нам ника
        
    PlayerCanDoubleBonus[iClient] = StrEqual(buffer[iClient], CLANTAG[iClient]); // Не знаю, поможет ли эта строчка, дальше если PlayerCanDoubleBonus = true, двойной бонус активен, т.е. например игрок сможет получать на 2 очка опыта больше при захвате КТ
    }
     
    Последнее редактирование: 4 мар 2016
  16. AlmazON

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

    Сообщения:
    4.590
    Симпатии:
    1.995
    Тогда уж так:
    PHP:
    new const String:sClanTag[] = "[CLANTAG]"// Нужный клантег (в коде у меня другой)

    new bool:PlayerCanDoubleBonus[MAXPLAYERS 1]; // Может ли игрок использовать двойной бонус

    public OnClientPostAdminCheck(iClient// Начинаем проверку при "стабильном" подключении игрока к серверу
    {
        
    decl String:buffer[MAX_NAME_LENGTH]; // Ник игрока
        
    GetClientName(iClientbuffersizeof(buffer)); // Получаем ник в буфер
        
    PlayerCanDoubleBonus[iClient] = !strncmp(buffersClanTagsizeof(sClanTag)-1); // Если PlayerCanDoubleBonus = true, двойной бонус активен
    }
     
  17. MAGNAT2645

    MAGNAT2645

    Сообщения:
    33
    Симпатии:
    0
    А чем отличается strncmp от strcmp ?

    Уже понял:
    Эта функция отличается от strcmp() тем, что сравнивает начала строк, а точнее первые len байтов. Если len меньше длины наименьшей из строк, то строки сравниваются целиком.
     
  18. AlmazON

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

    Сообщения:
    4.590
    Симпатии:
    1.995
    Так можно достаточно точно отличить/"разделить" ник от ника с клан-тегом. И не важно, чем они разделены между собой.
     
  19. MAGNAT2645

    MAGNAT2645

    Сообщения:
    33
    Симпатии:
    0
    Спасибо огромное, помогло! Я проверил активность двойного бонуса таким путём:
    Если он включен, ShowHudText показывает индиговый текст, а если выключен - лаймовый.

    Так вот, во время игры я вставил клантег в ник и цвет текста поменялся и вместо +1 в чате отображалось сразу +3.
     
  20. AlmazON

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

    Сообщения:
    4.590
    Симпатии:
    1.995
    Пример был написан только для активации при входе на сервер. В игре он ловить смену ника не будет, это уже твои изменения если только.