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

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
C-подобный:
char sText[5][32] = {"Слово 1", "Слово 2", "Слово 3", "Слово 4", "Слово 5"};
char sName[32] = "Слово 4";

public void OnMapStart()
{
    for(int i = 0; i < sizeof(sText); ++i)
    {
        if(strcmp(sText[i], sName, false) == 0)
        {
            PrintToChatAll("Строка %s равна %s", sText[i], sName);
        }
    }
}
Так тоже пробовал, проверка прекращается после первого же false (К примеру если Слово 1 != Слово 4, то проверка прекращается)
 

KiKiEEKi

🏆 🥇
Сообщения
653
Реакции
513
Так тоже пробовал, проверка прекращается после первого же false (К примеру если Слово 1 != Слово 4, то проверка прекращается)
Точно так пробовал? потому что как она прекратится если проверка идет до конца массива!
и вообще какая задача у тебя в целом?
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
Точно так пробовал? потому что как она прекратится если проверка идет до конца массива!
и вообще какая задача у тебя в целом?
Нашел проблему, ваше решение помогло, спасибо
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
выдает ошибку: error 048: array (s do not match
...
проверка прекращается после первого же false
Вообще проверка должна выглядеть примерно вот так:
C-подобный:
char
    sText[][]    = {"Слово 1", "Слово 2", "Слово 3", "Слово 4", "Слово 5"},
    sName[]        = "Слово 4";

public void OnMapStart()
{
    for(int i; i < sizeof(sText); ++i) if(!strcmp(sText[i], sName, false))
    {
        PrintToChatAll("Строка \"%s\" равна \"%s\"", sText[i], sName);
        return;    // совпадение найдено, завершаем цикл проверок и выходим из функции
    }

    PrintToChatAll("Совпадений со строкой \"%s\" не найдено", sName);
}
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
Вообще проверка должна выглядеть примерно вот так:
C-подобный:
char
    sText[][]    = {"Слово 1", "Слово 2", "Слово 3", "Слово 4", "Слово 5"},
    sName[]        = "Слово 4";

public void OnMapStart()
{
    for(int i; i < sizeof(sText); ++i) if(!strcmp(sText[i], sName, false))
    {
        PrintToChatAll("Строка \"%s\" равна \"%s\"", sText[i], sName);
        return;    // совпадение найдено, завершаем цикл проверок и выходим из функции
    }

    PrintToChatAll("Совпадений со строкой \"%s\" не найдено", sName);
}
Спасибо, у меня почти тоже самое получилось, главное что работает.
Подскажите пожалуйста почему выдает пустую строку:

Код:
FormatEx(szBuffer2, sizeof(szBuffer2), "Добавить новое время [ %s ] к текущей VIP", NumToName(30, 2));
PrintToChatAll("%s", szBuffer2);

static const char sName[][][] =
{
    {"день",    "дня",       "дней"},
    {"час",     "часа",      "часов"},
    {"минута",  "минуты",    "минут"},
    {"секунда", "секунды",   "секунд"}
};
// 3 - сек, 2 - мин, 1 - часы, 0 - дни

stock char NumToName(int num, const int type)
{
    static char buffer[PLATFORM_MAX_PATH];
    buffer[0] = 0;

    int form;
    switch(num)
    {
        case 0:        return buffer;
        case 1:        form = 0;
        case 2,3,4:    form = 1;
        default:
        {
            if(num < 21)    form = 2;
            else switch(num%10)
            {
                case 1:        form = 0;
                case 2,3,4:    form = 1;
                default:    form = 2;
            }
        }
    }
    FormatEx(buffer, sizeof(buffer), " %i %s", num, sName[type][form]);
    return buffer;
}

Проблема проявлется с минутами (с часами все нормально)
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
тут разными entity спамит, но во всех ошибка 271
Странно: должно одной и той же спамить - predicted_viewmodel.
Как эта энтити может перед спавном класс сменить?

Проблема проявлется с минутами
Минут - 0?
Во всех остальных случаях функция возвращает какой-либо текст.

@7pElllHuK, ну и ещё: емнип в новом синтаксисе (вроде начиная со SM1.11, не помню точно) должно быть stock char[] NumToName(int num, const int type) вместо stock char NumToName(int num, const int type) (после типа должны быть квадратные скобки, обозначающие, что выводится массив).
Сообщения автоматически склеены:

@lesha, причесал код =)
SM1.6.3:
//// AKC 2.0.2.sp
// Header size:           4764 bytes
// Code size:            26992 bytes
// Data size:             9336 bytes
// Stack/heap size:      16384 bytes; Total requirements:   57476 bytes
//
// Compilation Time: 0,33 sec
// ----------------------------------------

//// AKC 2.0.2_fix.sp
// Header size:           4760 bytes
// Code size:            24332 bytes
// Data size:             8892 bytes
// Stack/heap size:      16384 bytes; Total requirements:   54368 bytes
//
// Compilation Time: 0,3 sec
// ----------------------------------------
Но боюсь проблема в используемом SM, наверное.
Ну не может энтити predicted_viewmodel менять класс перед спавном, тем более на те, что в логе.
 

Вложения

  • AKC 2.0.2_fix.sp
    30.2 КБ · Просмотры: 12
Последнее редактирование:

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
Странно: должно одной и той же спамить - predicted_viewmodel.
Как эта энтити может перед спавном класс сменить?


Минут - 0?
Во всех остальных случаях функция возвращает какой-либо текст.

@7pElllHuK, ну и ещё: емнип в новом синтаксисе (вроде начиная со SM1.11, не помню точно) должно быть stock char[] NumToName(int num, const int type) вместо stock char NumToName(int num, const int type) (после типа должны быть квадратные скобки, обозначающие, что выводится массив).
Сообщения автоматически склеены:

@lesha, причесал код =)
SM1.6.3:
//// AKC 2.0.2.sp
// Header size:           4764 bytes
// Code size:            26992 bytes
// Data size:             9336 bytes
// Stack/heap size:      16384 bytes; Total requirements:   57476 bytes
//
// Compilation Time: 0,33 sec
// ----------------------------------------

//// AKC 2.0.2_fix.sp
// Header size:           4760 bytes
// Code size:            24332 bytes
// Data size:             8892 bytes
// Stack/heap size:      16384 bytes; Total requirements:   54368 bytes
//
// Compilation Time: 0,3 sec
// ----------------------------------------
Но боюсь проблема в используемом SM, наверное.
Ну не может энтити predicted_viewmodel менять класс перед спавном, тем более на те, что в логе.
Просто пустоту выводит, вписано 30 минут, но не выводит ничего, если вписать часы то все выводится корректно
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
вписано 30 минут, но не выводит ничего
C-подобный:
public void OnPluginStart()
{
    PrintToServer("Добавить новое время [ %s ] к текущей VIP", NumToName(30, 2));
}

static const char sName[][][] =
{
    {"день",    "дня",        "дней"},
    {"час",        "часа",        "часов"},
    {"минута",    "минуты",    "минут"},
    {"секунда",    "секунды",    "секунд"}
};
// 3 - сек, 2 - мин, 1 - часы, 0 - дни

stock char[] NumToName(int num, const int type)
{
    static char buffer[PLATFORM_MAX_PATH];
    buffer[0] = 0;

    int form;
    switch(num)
    {
        case 0:        return buffer;
        case 1:        form = 0;
        case 2,3,4:    form = 1;
        default:
        {
            if(num < 21)    form = 2;
            else switch(num%10)
            {
                case 1:        form = 0;
                case 2,3,4:    form = 1;
                default:    form = 2;
            }
        }
    }
    FormatEx(buffer, sizeof(buffer), " %i %s", num, sName[type][form]);
    return buffer;
}
1705424723713.png
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
C-подобный:
public void OnPluginStart()
{
    PrintToServer("Добавить новое время [ %s ] к текущей VIP", NumToName(30, 2));
}

static const char sName[][][] =
{
    {"день",    "дня",        "дней"},
    {"час",        "часа",        "часов"},
    {"минута",    "минуты",    "минут"},
    {"секунда",    "секунды",    "секунд"}
};
// 3 - сек, 2 - мин, 1 - часы, 0 - дни

stock char[] NumToName(int num, const int type)
{
    static char buffer[PLATFORM_MAX_PATH];
    buffer[0] = 0;

    int form;
    switch(num)
    {
        case 0:        return buffer;
        case 1:        form = 0;
        case 2,3,4:    form = 1;
        default:
        {
            if(num < 21)    form = 2;
            else switch(num%10)
            {
                case 1:        form = 0;
                case 2,3,4:    form = 1;
                default:    form = 2;
            }
        }
    }
    FormatEx(buffer, sizeof(buffer), " %i %s", num, sName[type][form]);
    return buffer;
}
Посмотреть вложение 116467
Странно, но у меня так не работает, видимо в плагине косяк. Буду искать. Спасибо за помощь
Сообщения автоматически склеены:

C-подобный:
public void OnPluginStart()
{
    PrintToServer("Добавить новое время [ %s ] к текущей VIP", NumToName(30, 2));
}

static const char sName[][][] =
{
    {"день",    "дня",        "дней"},
    {"час",        "часа",        "часов"},
    {"минута",    "минуты",    "минут"},
    {"секунда",    "секунды",    "секунд"}
};
// 3 - сек, 2 - мин, 1 - часы, 0 - дни

stock char[] NumToName(int num, const int type)
{
    static char buffer[PLATFORM_MAX_PATH];
    buffer[0] = 0;

    int form;
    switch(num)
    {
        case 0:        return buffer;
        case 1:        form = 0;
        case 2,3,4:    form = 1;
        default:
        {
            if(num < 21)    form = 2;
            else switch(num%10)
            {
                case 1:        form = 0;
                case 2,3,4:    form = 1;
                default:    form = 2;
            }
        }
    }
    FormatEx(buffer, sizeof(buffer), " %i %s", num, sName[type][form]);
    return buffer;
}
Посмотреть вложение 116467
Подскажите пожалуйста как так же тестировать плагины (я про скриншот), надоело на сервер заходить для того чтоб увидеть что выводит переменная
 
Последнее редактирование:

Nekro

Терра инкогнита
Сообщения
4,026
Реакции
2,260
Странно, но у меня так не работает, видимо в плагине косяк. Буду искать. Спасибо за помощь
Сообщения автоматически склеены:


Подскажите пожалуйста как так же тестировать плагины (я про скриншот), надоело на сервер заходить для того чтоб увидеть что выводит переменная
В консоль, я лично в лог вывожу
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
@7pElllHuK, запустить srcds.exe в консольном режиме.
Спасибо
Сообщения автоматически склеены:

Всем доброго времени суток, подскажите пожалуйста, как в VIP Rikko проверить корректность введенной группы. Нужен просто пример или сама функция
Вот как RIKO проверяет в самой вип корректность группы

C-подобный:
bool UTIL_CheckValidVIPGroup(const char[] szGroup)
{
    g_hGroups.Rewind();
    return g_hGroups.JumpToKey(szGroup, false);
}
Но с данной функцией мне нужно делать поверку на конфиг с группами, мб есть другой вариант?
 
Последнее редактирование:

LeXon

Участник
Сообщения
317
Реакции
29
@☠ ÄйӃи ☠, у меня в css ob в режиме gungame на карте в которой присутствует закладка бомбы и один раунд на всю игру, появляются боты, умирают и оставляют за собой item_diffuse (щипцы разминирования бомбы)
и под конец вся карта засрана ими, штук 100 валяется и сервак начинает тормозить.
 

babka68

Участник
Сообщения
2,124
Реакции
956
@☠ ÄйӃи ☠, у меня в css ob в режиме gungame на карте в которой присутствует закладка бомбы и один раунд на всю игру, появляются боты, умирают и оставляют за собой item_diffuse (щипцы разминирования бомбы)
и под конец вся карта засрана ими, штук 100 валяется и сервак начинает тормозить.
 
Сверху Снизу