RoundEndSound

d4Ck

Урегулированный
Сообщения
730
Реакции
562
  • Автор ресурса
  • #41
d4Ck обновил(а) ресурс RoundEndSound новой записью:

Версия 1.0.5


Узнать больше об этом обновлении...
Сообщения автоматически склеены:

Ох, только хотел написать о проблеме с ним, утечка присутствует


res.smx CellArray 32788
res.smx CellArray 8212
res.smx CellArray 16404

как я понял, АФФТАР ФИКСИ ПЛЕЗ!
И что это? Где ты здесь утечку увидел?
 

Svoboda

Помощь по CSS v92
Сообщения
393
Реакции
56
d4Ck обновил(а) ресурс RoundEndSound новой записью:

Версия 1.0.5
Узнать больше об этом обновлении...

Сообщения автоматически склеены:


И что это? Где ты здесь утечку увидел?

L 07/26/2019 - 16:55:46: SourceMod error session started
L 07/26/2019 - 16:55:46: Info (map "surf_4fun_csgo") (file "/host/109/10023/csgo/addons/sourcemod/logs/errors_20190726.log")
L 07/26/2019 - 16:55:46: [res.smx] [RES] Файл с именем 'rus.ini' не найден в папке с плейлистами, но указан в конфиге.
L 07/26/2019 - 16:55:46: [res.smx] [RES] Файл с именем 'en.ini' не найден в папке с плейлистами, но указан в конфиге.
L 07/26/2019 - 16:55:47: [SM] Exception reported: Invalid index 0 (count: 0)
L 07/26/2019 - 16:55:47: [SM] Blaming: res.smx
L 07/26/2019 - 16:55:47: [SM] Call stack trace:
L 07/26/2019 - 16:55:47: [SM] [0] GetArrayString
L 07/26/2019 - 16:55:47: [SM] [1] Line 360, C:\Users\р؀\YandexDisk\ϫࣨ�res\Round End Sound\addons\sourcemod\scripting\res.sp::OnClientCookiesCached

// Названия файлов с плейлистами через ';'.
// -
// Default: "rus;en"
sm_res_playlists "hiphop;rock;electronics"

Вот что у меня показывает, почему он ищет эти файлы если я изменил в конфиге их название ?
 

d4Ck

Урегулированный
Сообщения
730
Реакции
562
  • Автор ресурса
  • #43
L 07/26/2019 - 16:55:46: SourceMod error session started
L 07/26/2019 - 16:55:46: Info (map "surf_4fun_csgo") (file "/host/109/10023/csgo/addons/sourcemod/logs/errors_20190726.log")
L 07/26/2019 - 16:55:46: [res.smx] [RES] Файл с именем 'rus.ini' не найден в папке с плейлистами, но указан в конфиге.
L 07/26/2019 - 16:55:46: [res.smx] [RES] Файл с именем 'en.ini' не найден в папке с плейлистами, но указан в конфиге.
L 07/26/2019 - 16:55:47: [SM] Exception reported: Invalid index 0 (count: 0)
L 07/26/2019 - 16:55:47: [SM] Blaming: res.smx
L 07/26/2019 - 16:55:47: [SM] Call stack trace:
L 07/26/2019 - 16:55:47: [SM] [0] GetArrayString
L 07/26/2019 - 16:55:47: [SM] [1] Line 360, C:\Users\р؀\YandexDisk\ϫࣨ�res\Round End Sound\addons\sourcemod\scripting\res.sp::OnClientCookiesCached

// Названия файлов с плейлистами через ';'.
// -
// Default: "rus;en"
sm_res_playlists "hiphop;rock;electronics"

Вот что у меня показывает, почему он ищет эти файлы если я изменил в конфиге их название ?
Понятия не имею, меня это уже бесит. Ща сделаю нормально.
 

d4Ck

Урегулированный
Сообщения
730
Реакции
562
  • Автор ресурса
  • #46

Svoboda

Помощь по CSS v92
Сообщения
393
Реакции
56
ещё такая проблема у меня Fastdll работает напрямую от сервера и когда плагин натыкается на bz2 формат то трек не играет и выдает ошибку в консоли ,и при загрузке музыки с сервера тоже дают ошибку загрузки файлов но сам их качает
 
Последнее редактирование:
  • Печально
Реакции: Afro

d4Ck

Урегулированный
Сообщения
730
Реакции
562
  • Автор ресурса
  • #49
ещё такая проблема у меня Fastdll работает напрямую от сервера и когда плагин натыкается на bz2 формат то он не про игрывает и дают ошибку в консоли ,и при загрузке музыки с сервера тоже дают ошибку загрузки файлов но сам их качает
Ни один плагин не проиграет тебе bz2, потому что это архив и он распаковывается, когда загружается клиенту. Прописывай в конфиге пути до файлов, а не до архивов.
 

Svoboda

Помощь по CSS v92
Сообщения
393
Реакции
56
Ни один плагин не проиграет тебе bz2, потому что это архив и он распаковывается, когда загружается клиенту. Прописывай в конфиге пути до файлов, а не до архивов.
я пробовал полностью прописать пути так он качает только первые треки то есть из каждого листа по одному треку
 

Svoboda

Помощь по CSS v92
Сообщения
393
Реакции
56

Вложения

  • settings.ini
    1.1 КБ · Просмотры: 33
  • electronics.ini
    888 байт · Просмотры: 41
  • hiphop.ini
    729 байт · Просмотры: 12
  • rock.ini
    683 байт · Просмотры: 11

zeepcore

Участник
Сообщения
140
Реакции
21
Крутой плагин ;)
Сделай ещё, чтобы можно было настраивать первоначальную громкость музыки и будет гуд
 

Svoboda

Помощь по CSS v92
Сообщения
393
Реакции
56
Попробуй прописать папку с файлами.
C-подобный:
Электроника
free_cs/music/electronics1/
я так делал тогда он некоторые треки не играет в консоли показывает что он пытается воспроизвести bz2 файл
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #56
Этот плагин порвал рекорды по кол-ву говнокода. Полное отсутствие комментариев, непонимание значения переменных для непросвящённых по имени... Это клиника.

Пройдёмся по пунктам:
  1. В функции OnMapStart() есть блок, отвечающий за очистку массивов от старых треков. И там есть просто "подозрительный код", который рано или поздно прострелит колено обычному пользователю (ну, как мне кажется):
    C++:
    	int size = GetArraySize(g_hPlaylists[music]);
    	
    	if(size)
    	{		
    		if(!g_bOwnPlaylist && GetArraySize(g_hPlaylists[not_played]))
    		{
    			for (int i = 0; i < size; ++i) CloseHandle(GetArrayCell(g_hPlaylists[not_played], i));
    			ClearArray(g_hPlaylists[not_played]);
    		}
    		
    		for (int i = 0; i < size; ++i) CloseHandle(GetArrayCell(g_hPlaylists[music], i));
    		ClearArray(g_hPlaylists[music]);
    		ClearArray(g_hPlaylists[uniq]);
    		ClearArray(g_hPlaylists[name]);	
    	}
    Учитывая, что только для g_hPlaylists[not_played] отдельный цикл на удаление содержимого массива (да ещё и с проверкой на "наличие данных"), складывается впечатление, что потеряли запись размера массива в переменную или прямой вызов GetArraySize() в условии цикла.
  2. Разбор плейлистов из строки вообще тихий ужас. Кто так пишет в наши дни.
    Если кол-во элементов достоверно неизвестно, а неявный предел по кол-ву (в виде числа "16") не прописывается в конфиг, значит надо проходиться по строке с конца через FindCharInString() + цикл типа while () {}.
    1. Чтение из "текстовика" тоже достойно отдельной медали. Строку итоговую надо триммить (если файл редактировался на Винде, то как правило, в конце строки прячется символ "переноса каретки"; лишь одному Аллаху известно, не бомбанёт ли это рано или поздно). А ещё после тримминга неплохо проверять, не пустая ли итоговая строка.
    2. Кто-нибудь сможет мне объяснить, нахера подключать:
      C++:
      #include <emitsoundany>
      И не пользоваться встроенным в него методом на прекеш и добавление файла в список загрузок?
      C++:
      					Format(sFile, sizeof(sFile), "sound/%s", sFile);
      					AddFileToDownloadsTable(sFile);
      					Format(sFile, sizeof(sFile), "*%s", sFile[6]);
      					AddToStringTable(FindStringTable("soundprecache"), sFile);
  3. Это вообще эпик эпиков. Я на это внимание обратил случайно на середине файла.
    Абсолютно все методы помечены атрибутом public. Спрашивается, почему бы и переменные не пометить им (их тоже можно, да, только никому)?
  4. Отдельного внимания удостаивается функция LoadDir(), с которой у большинства в теме как раз проблемы. Что неудивительно.
    C++:
    		while(hDir.GetNext(sBuff, sizeof(sBuff), type))
    		{
    			if(type == FileType_File)
    			{
    				if(StrContains(sBuff, ".mp3", false) != -1)
    				{
    					Format(sBuff2, sizeof(sBuff2), "%s%s", sFull, sBuff);
    					AddFileToDownloadsTable(sBuff2);
    					PushArrayString(hArray, sBuff2[6]);
    					Format(sBuff2, sizeof(sBuff2), "*%s", sBuff2[6]);
    					AddToStringTable(FindStringTable("soundprecache"), sBuff2);
    				}
    			}
    			else if(type == FileType_Directory) 
    			{
    				Format(sFull, sizeof(sFull), "%s%s/", sDir, sBuff);
    				LoadDir(sFull, hArray);
    			}
    		}
    Этот код вызовет неожиданное поведение. Система возвращать может элементы в любом порядке. А теперь представим на секунду такую ситуацию:
    1. Система вернула файл. Полный путь к нему форматируется на основе переменных sFull и sBuff в переменную sBuff2. Он успешно обработался (sound/my_roundendsound/d4ck/1.mp3), всё ок.
    2. Система вернула папку. Полный путь к ней форматируется на основе переменных sDir и sBuff в переменную sFull (это важно!). Функция вызывает саму себя, передавая ей новый путь (sound/my_roundendsound/d4ck/AYYYY_MLYAAAA_MASLINY_POYMAL).
      Что происходит внутри функции - рассматривать не будем. Содержимое папки нам неизвестно.
      После прохода над папкой, старое значение sFull не восстанавливается; после вызова самой себя, функция будет пытаться форматировать в дальнейшем все пути с sound/my_roundendsound/d4ck/AYYYY_MLYAAAA_MASLINY_POYMAL.
    3. Система вернула файл. Полный путь к нему форматируется на основе переменных sFull и sBuff в переменную sBuff2. Он обработался "успешно" (sound/my_roundendsound/d4ck/AYYYY_MLYAAAA_MASLINY_POYMAL/2.mp3), всё ок.
    Почувствовали запашок говна? Хоть файл и лежит в sound/my_roundendsound/d4ck, из-за неправильной работы с памятью, оно думает, что файл лежит в sound/my_roundendsound/d4ck/AYYYY_MLYAAAA_MASLINY_POYMAL, и будет добавлять в прекеш именно этот файл.

    Ладно, опустим алгоритм. Проверка расширения файла - дикая. Если в имени файла попадётся .mp3 - это однозначно трек. И мы насрём на то, что файл может вообще называться d4ck.mp3.bz2.
    P.S.: А в OnRoundStart() почему-то додумался проверять только конец файла.

  5. C++:
    public Action MainMenuCmd(int client, int args) 
    { 	
    	if(client && IsClientInGame(client))
    	{
    		OpenMainMenu(client);
    	}
    Мне честно интересно, как так может произойти, что команду писал игрок, который даже не находится на сервере. Я молчу про проверку на ID клиента (вдруг в консоль сервера напишет админ), но зачем тут IsClientInGame() - непонятно.
  6. Отсутствие переводов. Ну да, зачем они.
  7. От каллбеков менюшек и, собственно, самих "построителей" меню - чуть зрение не потерял.
  8. Получение и запись чисел в куках можно было вынести в функции, чтобы не повторяться. Don't repeat yourself!
  9. Пацаны, го играть музыку ботам, я создал:
    C++:
    		for (int i = 1; i <= MaxClients; i++)
    		{
    			if(IsClientInGame(i) && !g_bDisabled[i])
    			{
  10. Потенциальный виновник пропадающей музыки от пластинок:
    C++:
    				ClientCommand(i, "playgamesound Music.StopAllMusic");
  11. Я уж молчу про стандартный канал для музыки...
  12. C++:
    				int slash = ExplodeString(sSound, "/", sBuff, 16, sizeof(sBuff[])) - 1;
    				ReplaceString(sBuff[slash], sizeof(sBuff[]), ".mp3", "", false);
    Это достойно отдельного внимания.
    Вместо того, чтобы получить последний слеш с конца строки (через тот же FindCharInString()), мы разобъём всю строку на элементы. Логично.

Обычно я ещё предлагаю, что на что менять. Но тут реально стало не по себе.
Увы, разбирайся сам. Где мог - там подсказки сделал, как можно сделать лучше.

Оффтоп
 

andrey19992

Участник
Сообщения
487
Реакции
101
Извиняюсь за оффтоп, возможно, а этот плагин продолжает проигрывать музыку в начале раунда, если та не завершилась в прошлом раунде, допустим отрывок не 7 секунд (ну по дефолту) а 10 например, будут ли эти 3 секунды проиграны в начале следующего раунда?
 

d4Ck

Урегулированный
Сообщения
730
Реакции
562
  • Автор ресурса
  • #59
Извиняюсь за оффтоп, возможно, а этот плагин продолжает проигрывать музыку в начале раунда, если та не завершилась в прошлом раунде, допустим отрывок не 7 секунд (ну по дефолту) а 10 например, будут ли эти 3 секунды проиграны в начале следующего раунда?
Нет
 

abduabuarab

Участник
Сообщения
53
Реакции
10
Я предлагаю :
1- удалить плейлисты с сервера,
и добавьте возможность для игроков создавать собственный список воспроизведения и выбирать свою музыку самостоятельно.

2- добавить меню, которое позволяет игрокам слушать треки в любое время.
это будет здорово: air_kiss:
 
Сверху Снизу