Объяснение кода в плагине

nuPAT

Участник
Сообщения
163
Реакции
25
Всем привет. Извиняюсь, если создал не там тему. Хочу понять код в этом плагине (не надо писать, что тут все легко - я не разбираюсь практически никак.) Хочу понять какой флаг нужен, чтобы работал иммунитет. По описанию понял, что плагин работает, если у игрока есть уровень иммунитета (99:z к примеру). Хочу понять как выдать иммунитет игроку не наделяя его админ правами. Можно ли выдать игроку например уровень 5 но не выдавая ему флаги a,b и т.д?

C-подобный:
#pragma semicolon 1

#include <sourcemod>

public Plugin:myinfo =
{
    name = "Basic Kickvote Immunity",
    author = "psychoninc",
    description = "Causes player kick votes to obey SM immunity levels",
    version = "1.2",
    url = "http://nicholashastings.com"
};

stock min(a, b) { return (((a) < (b)) ? (a) : (b)); }

public OnPluginStart()
{
    AddCommandListener(callvote, "callvote");
}

public Action:callvote(client, const String:cmd[], argc)
{
    // kick vote from client, "callvote %s \"%d %s\"\n;"
    if (argc < 2)
        return Plugin_Handled;

    decl String:votereason[16];
    GetCmdArg(1, votereason, sizeof(votereason));

    if (!!strcmp(votereason, "kick", false))
        return Plugin_Handled;

    decl String:therest[256];
    GetCmdArg(2, therest, sizeof(therest));

    new userid = 0;
    new spacepos = FindCharInString(therest, ' ');
    if (spacepos > -1)
    {
        decl String:temp[12];
        strcopy(temp, min(spacepos+1, sizeof(temp)), therest);
        userid = StringToInt(temp);
    }
    else
    {
        userid = StringToInt(therest);
    }

    new target = GetClientOfUserId(userid);
    if (target < 1)
        return Plugin_Continue;

    new AdminId:clientAdmin = GetUserAdmin(client);
    new AdminId:targetAdmin = GetUserAdmin(target);

    if (clientAdmin == INVALID_ADMIN_ID && targetAdmin == INVALID_ADMIN_ID)
        return Plugin_Continue;

    if (CanAdminTarget(clientAdmin, targetAdmin))
        return Plugin_Continue;

    PrintToChat(client, "\x07ERROR\x01: Вы не можете забанить - \x04\"%N\"", target);

    return Plugin_Handled;
}
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,924
  • Команда форума
  • #2
Хочу понять какой флаг нужен, чтобы работал иммунитет.
Никакой. Плагин просто проверяет наличие идентификатора админа.

Хочу понять как выдать иммунитет игроку не наделяя его админ правами. Можно ли выдать игроку например уровень 5 но не выдавая ему флаги a,b и т.д?
Можно.

Пример с admins_simple.ini:
C-подобный:
"STEAM_0:0:55665612"    "5"
Или с admins.cfg:
PHP:
"Admins"
{
    "Крузефаг"
    {
        "auth"            "steam"
        "identity"        "STEAM_0:0:55665612"
        "immunity"        "5"
    }
}
 

nuPAT

Участник
Сообщения
163
Реакции
25
Подскажи еще одно: могут ли игроки с иммунитетом банить друг друга? Сработает ли защита в этом случае? Я говорю о бане через стандартное голосование из меню игры (от которого и призван защитить этот плагин)
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,924
  • Команда форума
  • #4
@nuPAT, если иммунитет инициатора голосования за "бан" равен или меньше иммунитета тому, которому он пытается прописать "бан", то вполне да, начнётся голосование.
 

nuPAT

Участник
Сообщения
163
Реакции
25
@nuPAT, если иммунитет инициатора голосования за "бан" равен или меньше иммунитета тому, которому он пытается прописать "бан", то вполне да, начнётся голосование.
Вот фигня. А можешь доделать плагин, если знания позволяют, чтобы они тоже не могли банить друг друга (при равном иммунитете)?

От этого будет зависеть? Не знаешь?

// Sets how SourceMod should check immunity levels when administrators target
// each other.
// 0: Ignore immunity levels (except for specific group immunities).
// 1: Protect from admins of lower access only.
// 2: Protect from admins of equal to or lower access.
// 3: Same as 2, except admins with no immunity can affect each other.
// --
// Default: 1
sm_immunity_mode 1
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,924
  • Команда форума
  • #7
@nuPAT, будет. Поменяй значение переменной sm_immunity_mode на 2, и два админа с равными иммунитетами не смогут "накинуться" друг на друга с голосованиями за кик\бан.
 
Сверху Снизу