decl String:path[152];
ReadDirEntry(dir, filename, 75, type)
Format(path, 150, "music_welcome/%s", filename);
GetTrieString(g_Trie, str_num, path, 150, 0)
GetTrieString(g_Trie, str_num, g_SoundString, 125, 0)
Так сколько в итоге символов на путь к звуку выделяется? 152, 75, 150, 125? А правильный ответ - PLATFORM_MAX_PATH.
Отдельно можно рассмотреть следующий кусок кода:
decl String:path[152];
decl String:filename[76];
while (ReadDirEntry(dir, filename, 75, type))
Format(path, 150, "music_welcome/%s", filename);
На путь выделено 152 символа, текущий файл считывается в 75 символов, а дальше это присоединяется к пути в 150 символов, где music_welcome/ занимает 14 символов. Математика получается следующей 14+75=152.
ClientCommand(client, "playgamesound \"%s\"", g_SoundString);
Если клиент выключит звук в настройках клиента, то он не услышит музыку при входе. Лучше для этих целей использовать EmitSound*
decl String:str_num[8];
IntToString(g_Count, str_num, 7);
если массив из 8 символов, то и передавать надо как maxlength 8 символов, sourcemod сам возьмёт последний символ для '\0' (если будет номер из восьми цифр, то сурсмод запишет лишь 7, а на восьмой поставит символ конца строки. сейчас же сурсмод в случае для 8 цифр запишет на 7 позицию конец строки, таким образом два символа будут потеряны).
Исходя из написанного выше, максимальное число треков равняется 6 символам, т.е. 999 999, если исправите ошибку, то будет 9 999 999.
bool:tt_IsSound(String:sound[])
{
new var2;
return StrContains(sound, ".ztmp", true) == -1 && (StrContains(sound, ".mp3", true) > 0 || StrContains(sound, ".wav", true) > 0);
}
StrContains() делает для данного случая в лучшем случае 2*(strlen()-4) проверок, а в худшем случае 3*(strlen()-4). Поэтому данную проверку нужно заменить на следующую:
bool:IsValidSound(const String:sSound[])
{
new iLen = strlen(sSound);
return ( StrEqual(sSound[iLen-4], ".wav", false) || StrEqual(sSound[iLen-4], ".mp3", false) );
}
поскольку предложенный код выполняет лишь 2 проверки в худшем случае, а в лучшем одну.
Ну и информация для размышления:
Оффтоп
Fehler | VK (явная перепродажа плагинов, т.к. многие названия он даже не удосужился изменить).
По его ссылке в подписи (
https://vk.com/exart_studio) можно найти пост, где он от лица группы выкладывает свою переписку со своей же неадекватной реакцией на вполне нормальный вопрос, используя ненормативную лексику, и ставит лайк на эту же запись. При этом можно найти еще одно веселое противоречие в его действиях, но это надо поискать в его группе.
Получается следующее: делает веб сайты, изображения, плагины. Как гласит один из законов Мерфи, ни одно приспособление универсального кухонного комбайна не будет работать нормально.