Custom Rounds Lite

Custom Rounds Lite 1.0

Anpic1

Участник
Сообщения
213
Реакции
46
@Nebraska, Привет, ну вот я с говна и палок собрал плагин с поддержкой Overlay. Проверял и у меня работает
 

Вложения

  • headshot_round.rar
    58.3 КБ · Просмотры: 15

Anpic1

Участник
Сообщения
213
Реакции
46
привет. спасибо, дружище)
Да не за что, только проверь его ещё. Я мало в этом разбираюсь, вот решил помочь. Ну и я не смог прикрепить кастомный звук, расчитываю на вашу помощь)
 

Nebraska

Участник
Сообщения
225
Реакции
293
  • Автор ресурса
  • #24
переделаю плагин на основе конфига (приложил), чтобы можно было добавить различные раунды. у каждого раунда свой оверлей и озвучка в момент начала раунда. по срокам не обещаю, очень нагружен в последнее время. но процесс уже начат, сворачивать не буду)
 

Вложения

  • 1680813513357.png
    1680813513357.png
    4.3 КБ · Просмотры: 42

SlavON

Добрая душа
Сообщения
1,582
Реакции
326
@Nebraska, коль добавил оверлеи так залей архив с соблюдением иерархии папок, не все же догадаются, что папка materials не там находится.
 

kuper

Участник
Сообщения
148
Реакции
116
как убрать раунды которые мне не нужны,например на диглах?
 

Nebraska

Участник
Сообщения
225
Реакции
293
  • Автор ресурса
  • #30
как убрать раунды которые мне не нужны,например на диглах?
просто убрать в конфиге блок с диглом)
так же, если в раунде не нужен оверлей или звук - оставьте их значение пустым
 
Последнее редактирование:

kuper

Участник
Сообщения
148
Реакции
116
просто убрать в конфиге блок с диглом)
так же, если в раунде не нужен оверлей или звук - оставьте их значение пустым
ну это первое что я попробовал,и оставил только хедшот раунд но в итоге получилось хрень,сначала запустился хедшот раунд с указанным оверлем и звуком а потом запускается такой же раунд,но у всех в руках только ножи)
 

Nebraska

Участник
Сообщения
225
Реакции
293
  • Автор ресурса
  • #32
ну это первое что я попробовал,и оставил только хедшот раунд но в итоге получилось хрень,сначала запустился хедшот раунд с указанным оверлем и звуком а потом запускается такой же раунд,но у всех в руках только ножи)
хммм, странно, проверял и ошибок не было замечено) спасибо за замечание, обязательно гляну
 

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
хммм, странно, проверял и ошибок не было замечено) спасибо за замечание, обязательно гляну
Тоже заметил проблемку,появляется редко.
После раунда гранат,или диглов,в следующем раунде нет ножа в выборе.
Потом с начала нового раунда опять нормально.
Сообщения автоматически склеены:

И еще вопрос,просто я не тестил,время не было.
Судя по конфигу<можно любые оружия ставить?
 

Anpic1

Участник
Сообщения
213
Реакции
46
Всем привет, а плагин не конфликтует с WeponRestric?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
обязательно гляну
Глянул код.
За такой код нужно бить по кривым ручёнкам:
  • как минимум утечка в хэндле g_hKeyValues при каждой смене карты (в BuildKeyValues() ты старые значения не чистишь, а просто создаёшь новые)
  • в функциях возвращающих строку у тебя с какого-то испугу возвращаемая строка создаётся с помощью decl, а не new (в старых версиях SM decl создаёт строку с мусором вместо символа '\0' в каждой ячейке и у тебя функции вернут мусор, если g_hKeyValues пустой, в новых версиях SM decl компилятор принимает за new)
  • в упомянутых выше функциях у тебя буферная переменная создаётся в каждой итерации цикла и, учитывая сказанное выше про decl в новых версиях SM (примерно с версии 1.9, емнип), это только вызовет лишнюю нагрузку (а оно вызовет, т.к. ты почти нигде не встретишь теперь сервера с SM понимающим decl как decl, а не new)
  • ты так и не исправил название квара, отвечающего за версию плагина и если поставить хотя бы пару твоих плагинов, то они будут конфликтовать между собой, т.к. у тебя везде это имя ("plugin_version") используется
    да и смысла в таком кваре нет, т.к. непонятно версия чего это (у тебя каждый последующий плагин будет перезаписывать квар со всеми значениями) 😆
  • и ещё: код ниже - говнокод
    C-подобный:
    String: GetЧтоТоТам()
    {
        decl String:буффер[ROUND_*_SIZE];
        KvRewind(g_hKeyValues);
     
        if (KvGotoFirstSubKey(g_hKeyValues))
        {
            do
            {
                decl String:buf[ROUND_NAME_SIZE];
             
                if (KvGetSectionName(g_hKeyValues, buf, sizeof(buf)))
                {
                    if (StrEqual(g_sRoundName, buf))
                    {
                        KvGetString(g_hKeyValues, "ключ", буффер, sizeof(буффер));
                        break;
                    }
                }
            }
         
            while (KvGotoNextKey(g_hKeyValues));
        }
     
        return буффер;
    }
    потому что его можно заменить на
    C-подобный:
    String: GetЧтоТоТам()
    {
        new String:буффер[ROUND_*_SIZE];
        KvRewind(g_hKeyValues);
        if(KvJumpToKey(g_hKeyValues, g_sRoundName))
            KvGetString(g_hKeyValues, "ключ", буффер, sizeof(буффер));
    
        return буффер;
    }
 

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
Заметили щас еще баг.
Если начинается раунд на гранатах,ножах,диглах.
Если игроки потом соглашаются биться 1 на 1,то у них тупо все оружие пропадает.
Ну это с плагином поединков weaponfight
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
да и все эти однотипные функции можно заменить одной
C-подобный:
String: GetKeyValue(const String:key[])
{
    new String:value[ROUND_MESSAGE_SIZE];
    KvRewind(g_hKeyValues);
    if(KvJumpToKey(g_hKeyValues, g_sRoundName))
        KvGetString(g_hKeyValues, key, value, sizeof(value));

    return value;
}
А там, где из строки получают число достаточно перенести получение числа на вызове функции:
C-подобный:
switch(GetMessageStyle())

==>

switch(StringToInt((GetKeyValue("style")))
как-то так примерно
 

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
да и все эти однотипные функции можно заменить одной
C-подобный:
String: GetKeyValue(const String:key[])
{
    new String:value[ROUND_MESSAGE_SIZE];
    KvRewind(g_hKeyValues);
    if(KvJumpToKey(g_hKeyValues, g_sRoundName))
        KvGetString(g_hKeyValues, key, value, sizeof(value));

    return value;
}
А там, где из строки получают число достаточно перенести получение числа на вызове функции:
C-подобный:
switch(GetMessageStyle())

==>

switch(StringToInt((GetKeyValue("style")))
как-то так примерно

Grey83

Подправь пожалуйста его исходник,если время есть.
 

Nebraska

Участник
Сообщения
225
Реакции
293
  • Автор ресурса
  • #39
Глянул код.
За такой код нужно бить по кривым ручёнкам:
  • как минимум утечка в хэндле g_hKeyValues при каждой смене карты (в BuildKeyValues() ты старые значения не чистишь, а просто создаёшь новые)
  • в функциях возвращающих строку у тебя с какого-то испугу возвращаемая строка создаётся с помощью decl, а не new (в старых версиях SM decl создаёт строку с мусором вместо символа '\0' в каждой ячейке и у тебя функции вернут мусор, если g_hKeyValues пустой, в новых версиях SM decl компилятор принимает за new)
  • в упомянутых выше функциях у тебя буферная переменная создаётся в каждой итерации цикла и, учитывая сказанное выше про decl в новых версиях SM (примерно с версии 1.9, емнип), это только вызовет лишнюю нагрузку (а оно вызовет, т.к. ты почти нигде не встретишь теперь сервера с SM понимающим decl как decl, а не new)
  • ты так и не исправил название квара, отвечающего за версию плагина и если поставить хотя бы пару твоих плагинов, то они будут конфликтовать между собой, т.к. у тебя везде это имя ("plugin_version") используется
    да и смысла в таком кваре нет, т.к. непонятно версия чего это (у тебя каждый последующий плагин будет перезаписывать квар со всеми значениями) 😆
  • и ещё: код ниже - говнокод
    C-подобный:
    String: GetЧтоТоТам()
    {
        decl String:буффер[ROUND_*_SIZE];
        KvRewind(g_hKeyValues);
    
        if (KvGotoFirstSubKey(g_hKeyValues))
        {
            do
            {
                decl String:buf[ROUND_NAME_SIZE];
    
                if (KvGetSectionName(g_hKeyValues, buf, sizeof(buf)))
                {
                    if (StrEqual(g_sRoundName, buf))
                    {
                        KvGetString(g_hKeyValues, "ключ", буффер, sizeof(буффер));
                        break;
                    }
                }
            }
    
            while (KvGotoNextKey(g_hKeyValues));
        }
    
        return буффер;
    }
    потому что его можно заменить на
    C-подобный:
    String: GetЧтоТоТам()
    {
        new String:буффер[ROUND_*_SIZE];
        KvRewind(g_hKeyValues);
        if(KvJumpToKey(g_hKeyValues, g_sRoundName))
            KvGetString(g_hKeyValues, "ключ", буффер, sizeof(буффер));
    
        return буффер;
    }
- утечку памяти исправлю, делал на скорую руку, как освободился, опять же человеческий фактор.
- в упомянутых выше функциях у тебя буферная переменная создаётся в каждой итерации цикла и, учитывая сказанное выше про decl в новых версиях SM (примерно с версии 1.9, емнип), это только вызовет лишнюю нагрузку (а оно вызовет, т.к. ты почти нигде не встретишь теперь сервера с SM понимающим decl как decl, а не new) - это как еще посмотреть на эту ситуацию. прочитайте, пожалуйста, про "область видимости переменной". возможно в sourcepawn иначе. но, например, в Java придерживаются именно такой позиции.
 
Последнее редактирование:

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212

Nebraska

Подправишь код как время будет?
Потому что есть баги не большие<так все четко работает.
Ну некоторые моменты бы исправить.
Заранее благодарю!
 
Сверху Снизу