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

MAGNAT2645

Участник
Сообщения
63
Реакции
7
Здравствуйте, можете мне, пожалуйста, помочь?

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

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

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
проверку на наличие клан-тега, т.е. если у игрока перед ником стоит определённый клан-тег
PHP:
#include <cstrike>

#define ACCESS_CLANTAG    "TEST"

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

MAGNAT2645

Участник
Сообщения
63
Реакции
7
PHP:
#include <cstrike>

#define ACCESS_CLANTAG    "TEST"

public OnClientPostAdminCheck(client)
{
    decl String:buffer[10];
    CS_GetClientClanTag(client, buffer, sizeof(buffer));
    if (strcmp(buffer, ACCESS_CLANTAG) == 0)
    {
        //Клан-тег при входе игрока совпал.
    }
}
Вот только, как тогда выйдет сделать:При таких знаниях.
А это в TF2 будет работать или там нужно использовать другие нативы?
 

MAGNAT2645

Участник
Сообщения
63
Реакции
7
Ладно с этим потом разберусь, осталось ещё два вопроса:

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

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:plugin, numParams)
{
    new client = GetNativeCell(1);
    new newSign = GetNativeCell(2);
    if (0 < client <= MaxClients && IsClientInGame(client))
    {
        PlayerSign[client] = newSign;
    }
    return Plugin_Continue;
}
--- Добавлено позже ---
С error 033 я разобрался, надо было просто убрать [MAXPLAYERS + 1] в шапке плагина.
--- Добавлено позже ---
Уже исправил, но много предупреждений в компиляторе, надеюсь они не помешают.
 

Monomizer

Держу JDW в бане.
Сообщения
1,947
  • Команда форума
  • #6
@MAGNAT2645,
Если клантеги нужны

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

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

bool:IsLegitSteam(const String:authID[]) 
{ 
 decl String:toks[3][16]; 
 ExplodeString(authID, ":", toks, sizeof(toks), sizeof(toks[])); 

 if(StringToInt(toks[2]) < 80000000) 
 return true; 
 
 return false; 
}
 

MAGNAT2645

Участник
Сообщения
63
Реакции
7
@MAGNAT2645,
Если клантеги нужны

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

public OnClientSettingsChanged(client)
{
if(IsClientInGame(client))
{
decl String:auth[32];
GetClientAuthString(client, auth, sizeof(auth));

if(!IsLegitSteam)
CS_SetClientClanTag(client, "Here insert the line clan tag");
}
}

bool:IsLegitSteam(const String:authID[])
{
decl String:toks[3][16];
ExplodeString(authID, ":", toks, sizeof(toks), sizeof(toks[]));

if(StringToInt(toks[2]) < 80000000)
return true;

return false;
}
Мне нужно что-то похожее, но для 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(iClient, buffer[iClient], sizeof(buffer[]));
    Format(CLANTAG[iClient], sizeof(CLANTAG[]), "%s %s", NICKTAG, buffer[iClient]);
    if (strcmp(buffer[iClient], CLANTAG[iClient]) == 0)
    {
        PlayerCanDoubleBonus[iClient] = true;
    }
    if (strcmp(buffer[iClient], CLANTAG[iClient]) != 0)
    {
        PlayerCanDoubleBonus[iClient] = false;
    }
}
 
Последнее редактирование:

MAGNAT2645

Участник
Сообщения
63
Реакции
7
Если только клантег - просто приставка в нике игрока.
Ну это подойдёт для проверки клантега в нике?

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

AlmazON

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

MAGNAT2645

Участник
Сообщения
63
Реакции
7
То огрызок какой-то, но основа верна. С другой стороны, как определить, что клан-тег закончил и идёт просто ник? Пробелом? Тогда слова не должны разделяться... Потому, такую имитацию обычно ограничивают скобками, вроде: [Клан-тег] Ник. Таким образом, понятно, где что и есть ли вообще что-то, кроме самого никнейма.
А если я попробую использовать StrEqual вместо strcmp, это имеет смысл?

PHP:
#define NICKTAG "[CLANTAG]"

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

MAGNAT2645

Участник
Сообщения
63
Реакции
7
Хотя врятли, он ведь выявляет true, если две строки одинаковы, а у меня NICKTAG "[CLANTAG]".

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

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Оффтоп Хоть бы написал, переменная твоя или вытянута откуда... Должна быть true/false для какого случая.
 

MAGNAT2645

Участник
Сообщения
63
Реакции
7
@MAGNAT2645, Оффтоп
Ты про StrEqual? Ладно... попробую.
--- Добавлено позже ---
PHP:
#define NICKTAG "[CLANTAG]" // Нужный клантег (в коде у меня другой)

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


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

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Тогда уж так:
PHP:
new const String:sClanTag[] = "[CLANTAG]"; // Нужный клантег (в коде у меня другой)

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

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

MAGNAT2645

Участник
Сообщения
63
Реакции
7
Тогда уж так:
PHP:
new const String:sClanTag[] = "[CLANTAG]"; // Нужный клантег (в коде у меня другой)

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

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

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

MAGNAT2645

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

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

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
во время игры я вставил клантег в ник
Пример был написан только для активации при входе на сервер. В игре он ловить смену ника не будет, это уже твои изменения если только.
 
Сверху Снизу