Избежание большого кол-во циклов

KiKiEEKi

🏆 🥇
Сообщения
653
Реакции
513
Здравствуйте, можно ли как то избежать/сократить большое кол-во циклов?
C-подобный:
char rootadmin[][] = {"kikieeki", "KiKiEEKi"};
char admin[][] = {"admin123", "admin456"};
char vip[][] = {"vip123", "vip456"};
public void OnPluginStart()
{
    HookEvent("player_spawn", ps);
}

public Action ps(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(GetEventInt(event, "userid"));
    char ChekName[32];
    GetClientName(client, ChekName, sizeof(ChekName));
    for (int i; i < sizeof(rootadmin); i++)
    {
        if (!strcmp(ChekName, rootadmin[i], true))
        {
            PrintToChatAll("На сервере гл админ");
            break;
        }
    }
    for (int i; i < sizeof(admin); i++)
    {
        if (!strcmp(ChekName, admin[i], true))
        {
            PrintToChatAll("На сервере админ");
            break;
        }
    }
    for (int i; i < sizeof(vip); i++)
    {
        if (!strcmp(ChekName, vip[i], true))
        {
            PrintToChatAll("На сервере вип");
            break;
        }
    }
}
 

Madness aka null138

Участник
Сообщения
713
Реакции
734
Здравствуйте, можно ли как то избежать/сократить большое кол-во циклов?
C-подобный:
char rootadmin[][] = {"kikieeki", "KiKiEEKi"};
char admin[][] = {"admin123", "admin456"};
char vip[][] = {"vip123", "vip456"};
public void OnPluginStart()
{
    HookEvent("player_spawn", ps);
}

public Action ps(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(GetEventInt(event, "userid"));
    char ChekName[32];
    GetClientName(client, ChekName, sizeof(ChekName));
    for (int i; i < sizeof(rootadmin); i++)
    {
        if (!strcmp(ChekName, rootadmin[i], true))
        {
            PrintToChatAll("На сервере гл админ");
            break;
        }
    }
    for (int i; i < sizeof(admin); i++)
    {
        if (!strcmp(ChekName, admin[i], true))
        {
            PrintToChatAll("На сервере админ");
            break;
        }
    }
    for (int i; i < sizeof(vip); i++)
    {
        if (!strcmp(ChekName, vip[i], true))
        {
            PrintToChatAll("На сервере вип");
            break;
        }
    }
}
попробуй что то типа этого.
C-подобный:
int increment = 0;
bool keepRunning = true;
    
while(keepRunning)
{
    keepRunning = false;
    if (increment < sizeof(rootadmin) && strcmp(ChekName, rootadmin[increment], true) == 0)
    {
        PrintToChatAll("На сервере гл админ");
        keepRunning = true;
    }

    if (increment < sizeof(admin) && strcmp(ChekName, admin[increment], true) == 0)
    {
        PrintToChatAll("На сервере админ");
        keepRunning = true;
    }

    if (increment < sizeof(vip) && strcmp(ChekName, vip[increment], true) == 0)
    {
        PrintToChatAll("На сервере вип");
        keepRunning = true;
    }
    increment++;
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
Вот так:
C-подобный:
#pragma semicolon 1
#pragma newdecls required

enum    // индексы ролей
{
    R_Root,
    R_Admin,
    R_VIP
};

static const char
    NICK[][]    = {"kikieeki", "KiKiEEKi", "admin123", "admin456", "vip123", "vip456"},    //    перечень ников
    DESC[][]    = {"гл. админ", "админ", "вип"};    // названия ролей
static const int
    RIGHTS[]    = {R_Root, R_Root, R_Admin, R_Admin, R_VIP, R_VIP};                        // перечень соответствующих ролей

public void OnPluginStart()
{
    HookEvent("player_spawn", Event_Spawn);
}

public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(GetEventInt(event, "userid"));
    if(!client || IsFakeClient(client)) return;

    char buffer[MAX_NAME_LENGTH];
    GetClientName(client, buffer, sizeof(buffer));
    for(int i; i < sizeof(NICK); i++) if(!strcmp(buffer, NICK[i], true))
    {
        PrintToChatAll("На сервере %s", DESC[RIGHTS[i]]);
        break;
    }
}
Только ума не приложу для чего извещать о присутствии человека при каждом его спавне.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #4
А я бы стрингмапой сделал, через неё быстрее поиск будет происходить по нику/Стиму из-за того, что под капотом - хештаблица.
 

KiKiEEKi

🏆 🥇
Сообщения
653
Реакции
513
Только ума не приложу для чего извещать о присутствии человека при каждом его спавне.
Пример какой в голову евент пришел в голову, мне сам вопрос важен был, потому что могу только создавать по 50 циклов(for) а как обойтись без этого не знал
 
Сверху Снизу