Да не за что, только проверь его ещё. Я мало в этом разбираюсь, вот решил помочь. Ну и я не смог прикрепить кастомный звук, расчитываю на вашу помощь)привет. спасибо, дружище)
Практически полностью переписан плагин
Долгожданный выпуск)Nebraska обновил(а) ресурс Custom Rounds Lite новой записью:
Custom Rounds Lite
Узнать больше об этом обновлении...
Обновил просто архив
ну это первое что я попробовал,и оставил только хедшот раунд но в итоге получилось хрень,сначала запустился хедшот раунд с указанным оверлем и звуком а потом запускается такой же раунд,но у всех в руках только ножи)просто убрать в конфиге блок с диглом)
так же, если в раунде не нужен оверлей или звук - оставьте их значение пустым
хммм, странно, проверял и ошибок не было замечено) спасибо за замечание, обязательно глянуну это первое что я попробовал,и оставил только хедшот раунд но в итоге получилось хрень,сначала запустился хедшот раунд с указанным оверлем и звуком а потом запускается такой же раунд,но у всех в руках только ножи)
Тоже заметил проблемку,появляется редко.хммм, странно, проверял и ошибок не было замечено) спасибо за замечание, обязательно гляну
Глянул код.обязательно гляну
'\0'
в каждой ячейке и у тебя функции вернут мусор, если g_hKeyValues пустой, в новых версиях SM decl компилятор принимает за new)"plugin_version"
) используется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 буффер;
}
String: GetЧтоТоТам()
{
new String:буффер[ROUND_*_SIZE];
KvRewind(g_hKeyValues);
if(KvJumpToKey(g_hKeyValues, g_sRoundName))
KvGetString(g_hKeyValues, "ключ", буффер, sizeof(буффер));
return буффер;
}
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;
}
switch(GetMessageStyle())
==>
switch(StringToInt((GetKeyValue("style")))
да и все эти однотипные функции можно заменить однойА там, где из строки получают число достаточно перенести получение числа на вызове функции: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")))
- утечку памяти исправлю, делал на скорую руку, как освободился, опять же человеческий фактор.Глянул код.
За такой код нужно бить по кривым ручёнкам:
- как минимум утечка в хэндле 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 буффер; }