Написание плагинов

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
Всем привет, есть массив char sValues[2][128], как из него получить sValues[1]? Когда просто подставляю sValues[1], то получается пустая строка
 

Mr_panica

XenForo one 💖
Сообщения
921
Реакции
436
Всем привет.

Может кто скинуть функцию ренейма игрока если у него в нике символы, которых нет на русской и английской клавиатуры, то есть, что с таким игроком можно было взаимодействовать через консоль по его полному нику.

Ну, или хотя бы скиньте регулярное выражение для SP.
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
А не проще по id с ним взаимодействовать или меню приделать?
 

Mr_panica

XenForo one 💖
Сообщения
921
Реакции
436
А не проще по id с ним взаимодействовать или меню приделать?
Нет, админам не очень удобно это.

К тому же, на сервере такой геймплей, что нужно называть ники игрока, а это немного сложно когда там либо непонятные символы, либо иероглифы, либо вообще арабская вязь.
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
Нет, админам не очень удобно это.

К тому же, на сервере такой геймплей, что нужно называть ники игрока, а это немного сложно когда там либо непонятные символы, либо иероглифы, либо вообще арабская вязь.
А если одинаковые ники допустим у двух человек
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
админам не очень удобно это.
Неудобно на потолке спать: одеяло спадает.

Пусть эти днища учатся UserID игроков использовать (против читеров это важно уметь, если нет блокировки смены ника игроком).
нужно называть ники игрока, а это немного сложно когда там либо непонятные символы, либо иероглифы, либо вообще арабская вязь.
Был где-то плагин, который вырезал из ника символы уникода типа иероглифов и смайлов.
Вроде вот этот:
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
Всем привет.

Может кто скинуть функцию ренейма игрока если у него в нике символы, которых нет на русской и английской клавиатуры, то есть, что с таким игроком можно было взаимодействовать через консоль по его полному нику.

Ну, или хотя бы скиньте регулярное выражение для SP.
C-подобный:
#include <regex>

stock void fn(int client)
{
    if(client && IsClientInGame(client))
    {
        char name[MAX_NAME_LENGTH], err[256], sub[32];
        RegexError Regerr;
        GetClientName(client, name, sizeof(name));
  
        Regex expr = CompileRegex("[а-яА-ЯЁёа-zA-Z0-9\\W]", PCRE_NOTEMPTY, err, sizeof(err), Regerr);
        if(expr != INVALID_HANDLE)
        {
            int match = expr.Match(name, Regerr, 0);
            if(match != -1)
            {
                for(int i = 0; i < match; i++)
                {
                    expr.GetSubString(i, sub, sizeof(sub), i);
                    ReplaceString(name, sizeof(name), sub, "", true);
                }
                SetClientName(client, name);
            }
        }
        else LogMessage("%s", err);
    }
}
Но я не уверен, что правильно написал, ни разу не работал с регами
 
Последнее редактирование:

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
Подскажите пожалуйста, как получить значение с буфера который находится в другом блоке
Пример:
C-подобный:
public void BLock(int iClient)
{
    char sValues[2][128]
    PrintToChat(iClient, "sValues[1] = Тут что-то написано");
}

public void BLock2(int iClient)
{
    char sValues[2][128]
    PrintToChat(iClient, "sValues[1] = Не выводит ничего");
}

Вот как там где написано "Не выводит ничего" сделать так, чтоб выводило "Тут что-то написано"?
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
Подскажите пожалуйста, как получить значение с буфера который находится в другом блоке
Пример:
C-подобный:
public void BLock(int iClient)
{
    char sValues[2][128]
    PrintToChat(iClient, "sValues[1] = Тут что-то написано");
}

public void BLock2(int iClient)
{
    char sValues[2][128]
    PrintToChat(iClient, "sValues[1] = Не выводит ничего");
}

Вот как там где написано "Не выводит ничего" сделать так, чтоб выводило "Тут что-то написано"?
так ты заполни свои массивы и потом выводи...
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
так ты заполни свои массивы и потом выводи...
так массив заполнен в 1 блоке, и мне нужно то что он там заполнил вставить во 2 блок
Сообщения автоматически склеены:

Весь код нормально отправь


C-подобный:
public void CC_OnClientOpenCase(int iClient, int iCaseID, const char[] sTrigger, const char[] sOutCome)
{
    if (!strcmp(sTrigger, "vip"))
    {
        char sValues[2][128]
        ExplodeString(sOutCome, "|", sValues, sizeof sValues, sizeof sValues[]);
        g_iTime[iClient] = StringToInt(sOutCome);
        sGroup = sValues[1];

        if (g_iTime[iClient] != -1)
        {
            g_iTime[iClient] += GetTime();
        }
    }
}

public void CC_OnInventoryMenuItemSelected(int iClient, const char[] sItem)
{
    char sValues[2][128];
    int iTime = StringToInt(sValues[0]);
    
    if (VIP_IsClientVIP(iClient))        //Проверка на наличие вип у игрока
    {
        int iClientTime = VIP_GetClientAccessTime(iClient);

            if (iTime)
            {
                if (iClientTime > 0)
                {
                    VIP_SetClientAccessTime(iClient, iClientTime+iTime);
                }
            }

    else    //Группы нет, значит выдаем ее
    {
        VIP_GiveClientVIP(0, iClient, iTime, sValues[1]);
    }
    CC_OpenMenu(iClient, 2);
    PrintToChatAll("sGroup %s", sValues[1]);
}

Нужно чтоб в блоке CC_OnInventoryMenuItemSelected, выводились данные из массива sValues[1] которые записаны в блоке CC_OnClientOpenCase
 
Сверху Снизу