Иконка ресурса

Welcome Sound 1.0 v34

tt-css

Участник
Сообщения
3
Реакции
0
  • Автор ресурса
  • #1
Автор: tt-css

Описание:
Проигрывание звуков при входе на сервер


Установка:
1.Файл music_welcome.smx → в папку addons/sourcemod/plugins/
2.Папка music_welcome → в папку sound/
3.Если хотите чтобы музыка при входе на сервер проигрывался просто добавьте вашу музыку в папку music_welcome и все
4.Название треков только английские буквы
5.Число треков (8)
6.Формат mp3 и wav


Настройки: Отсутствуют

Version 1.0
 
Последнее редактирование модератором:

Danyas

Участник
Сообщения
2,173
Реакции
1,072
А исходники я буду прилаживать?

Приложил. :(
 
Последнее редактирование модератором:

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,335
C-подобный:
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.

Отдельно можно рассмотреть следующий кусок кода:
C-подобный:
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.

C-подобный:
ClientCommand(client, "playgamesound \"%s\"", g_SoundString);
Если клиент выключит звук в настройках клиента, то он не услышит музыку при входе. Лучше для этих целей использовать EmitSound*

C-подобный:
decl String:str_num[8];
IntToString(g_Count, str_num, 7);
если массив из 8 символов, то и передавать надо как maxlength 8 символов, sourcemod сам возьмёт последний символ для '\0' (если будет номер из восьми цифр, то сурсмод запишет лишь 7, а на восьмой поставит символ конца строки. сейчас же сурсмод в случае для 8 цифр запишет на 7 позицию конец строки, таким образом два символа будут потеряны).

C-подобный:
5.Число треков (8)
Исходя из написанного выше, максимальное число треков равняется 6 символам, т.е. 999 999, если исправите ошибку, то будет 9 999 999.

C-подобный:
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). Поэтому данную проверку нужно заменить на следующую:
C-подобный:
bool:IsValidSound(const String:sSound[]) 
{
	new iLen = strlen(sSound);
	return ( StrEqual(sSound[iLen-4], ".wav", false) || StrEqual(sSound[iLen-4], ".mp3", false) );
}
поскольку предложенный код выполняет лишь 2 проверки в худшем случае, а в лучшем одну.

Ну и информация для размышления: Оффтоп
 

NeXxX

Участник
Сообщения
312
Реакции
26
C-подобный:
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.

Отдельно можно рассмотреть следующий кусок кода:
C-подобный:
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.

C-подобный:
ClientCommand(client, "playgamesound \"%s\"", g_SoundString);
Если клиент выключит звук в настройках клиента, то он не услышит музыку при входе. Лучше для этих целей использовать EmitSound*

C-подобный:
decl String:str_num[8];
IntToString(g_Count, str_num, 7);
если массив из 8 символов, то и передавать надо как maxlength 8 символов, sourcemod сам возьмёт последний символ для '\0' (если будет номер из восьми цифр, то сурсмод запишет лишь 7, а на восьмой поставит символ конца строки. сейчас же сурсмод в случае для 8 цифр запишет на 7 позицию конец строки, таким образом два символа будут потеряны).

C-подобный:
5.Число треков (8)
Исходя из написанного выше, максимальное число треков равняется 6 символам, т.е. 999 999, если исправите ошибку, то будет 9 999 999.

C-подобный:
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). Поэтому данную проверку нужно заменить на следующую:
C-подобный:
bool:IsValidSound(const String:sSound[])
{
    new iLen = strlen(sSound);
    return ( StrEqual(sSound[iLen-4], ".wav", false) || StrEqual(sSound[iLen-4], ".mp3", false) );
}
поскольку предложенный код выполняет лишь 2 проверки в худшем случае, а в лучшем одну.

Ну и информация для размышления: Оффтоп

Ребят не заморачивайтесь все это ради рекламы ( еще раз повторяюсь) https://hlmod.ru/posts/217022
 
Последнее редактирование модератором:
Сверху Снизу