Matrix 48 Posted March 24, 2015 Название: InGame Radio Добавил: Matrix Добавлен: 24 Mar 2015 Категория: Клиентские дополнения Автор: MatrixХроники: Все Патчик добавляет в клиент возможность воспроизведение аудиопотока. Адрес потока можно поменять в исходниках. Установка: закинуть файлы radio.dll, bass.dll и ogg.dll в папку system. (чтобы не менять файл ogg.dll можно добавить в l2.exe импорт Anchor из файла radio.dll). Управление: Ctrl+R - начать воспроизведение. Ctrl+S - остановить воспроизведение. Для гуру: Надо допиливать управление (например сделать перехват клавишь в активном окне). Сейчас если включить 10 окон ладвы - все 10 начнут играть, со смещением изза буфферизации - звук превратится в кашу. Курите маны и примеры по BASS.DLL. Страница библиотеки www.un4seen.com/bass.html (библиотека бесплатная!) Также реально сделать управление громкостью (читаем мануалы). Можно воспроизводить локальные MP3 файлы. (у себя на сервере делал инициацию воспроизведения серверным пакетом) P.S: Проверил на клиентах Epilogue, High Five, Ertheia. Нажмите здесь, чтобы скачать файл 6 Share this post Link to post Share on other sites
Akumu 1117 Posted March 24, 2015 Для гуру: Надо допиливать управление (например сделать перехват клавишь в активном окне). Сейчас если включить 10 окон ладвы - все 10 начнут играть, со смещением изза буфферизации - звук превратится в кашу. а мутексы на что? у bass нету библиотеки для статической линковки? Share this post Link to post Share on other sites
Matrix 48 Posted March 24, 2015 а мутексы на что? у bass нету библиотеки для статической линковки? Можно и мутексами, но мне кажется лучше ловить нажатия в активном окне, нежели проверять текущее состояние клавиш! Про статическую линковку ничего не скажу, маны особо не читал, да и уже очень давно это делал. Этот код так, накидал побыстрому, когда наткнулся на темку про радио, здесь на форуме! Share this post Link to post Share on other sites
Akumu 1117 Posted March 24, 2015 Можно и мутексами, но мне кажется лучше ловить нажатия в активном окне, нежели проверять текущее состояние клавиш! Про статическую линковку ничего не скажу, маны особо не читал, да и уже очень давно это делал. Этот код так, накидал побыстрому, когда наткнулся на темку про радио, здесь на форуме! HWND h = GetForegroundWindow(); if(h) { DWORD pId(0); if(GetWindowThreadProcessId(h, &pId)) return pId == PPID; } Проверяем ID процесса рабочего окна (активного) и сравниваем с текущим. Share this post Link to post Share on other sites
Matrix 48 Posted March 24, 2015 Хаха, а про такой вариант я даже и не думал) #include "bass.h" #pragma comment(lib, "bass.lib") const char modern_rock[] = "http://ep128.streamr.ru"; //URL аудиопотока HSTREAM stream; bool isPlaying = false; bool isPressed = false; void play() { isPlaying = true; stream = BASS_StreamCreateURL(modern_rock, 0, 0, NULL, 0); if (!stream) return; BASS_ChannelPlay(stream,TRUE); } void stop() { isPlaying = false; BASS_ChannelStop(stream); BASS_StreamFree(stream); } DWORD WINAPI RadioControl(LPVOID) { if (HIWORD(BASS_GetVersion())!=BASSVERSION) return 1; if (!BASS_Init (-1, 22050, BASS_DEVICE_3D , 0, NULL)) return 1; while(true) { if(GetKeyState(VK_LCONTROL) < 0 && GetKeyState('R') < 0 && !isPressed) { HWND h = GetForegroundWindow(); if(h) { DWORD pId(0); GetWindowThreadProcessId(h, &pId); if(pId == GetCurrentProcessId()) { if(!isPlaying) play(); else stop(); } } } isPressed = GetKeyState('R') < 0; Sleep(10); } BASS_Free(); return 0; } void Radio(void) { CreateThread (0, 0, RadioControl, 0, 0, 0); } Спойлер не нашел чтоб код свернуть. Вообщем запихал предложенный выше код + сделал чтобы включалось и выключалось радио по Ctrl+R Share this post Link to post Share on other sites
Akumu 1117 Posted March 24, 2015 (edited) Документацию по GetKeyState еще почитайте Вообщем вот так делайте: if(HIBYTE(GetKeyState(VK_LCONTROL)) && HIBYTE(GetKeyState('R')) < 0 && !isPressed) Edited March 24, 2015 by Akumu Share this post Link to post Share on other sites
Matrix 48 Posted March 24, 2015 (edited) Ну тогда уж вероятней будет вот так: if(HIBYTE(GetKeyState(VK_LCONTROL)) > 0 && HIBYTE(GetKeyState('R')) > 0 && !isPressed) >> If the high-order bit is 1, the key is down; otherwise, it is up. Edited March 24, 2015 by Matrix Share this post Link to post Share on other sites
Akumu 1117 Posted March 24, 2015 Ну тогда уж вероятней будет вот так: if(HIBYTE(GetKeyState(VK_LCONTROL)) > 0 && HIBYTE(GetKeyState('R')) > 0 && !isPressed) >> If the high-order bit is 1, the key is down; otherwise, it is up. Разницы нету в том что написал я и в том что написал ты Share this post Link to post Share on other sites
Desquire 451 Posted March 24, 2015 Вроде же есть радио в клиент. там еше и управление чатом есть... Ну а так спасибо, и удачи в разработке Share this post Link to post Share on other sites
Akumu 1117 Posted March 24, 2015 На самом деле если время будет - можно сделать в смарте бесплатных модуль радио С интерфейсом, выбором радиостанции и всякими настройками 1 Share this post Link to post Share on other sites
Matrix 48 Posted March 24, 2015 (edited) Одно время морочился с отрисовкой окон, прям в игре, на дальше пустого окна дела не сдвинулось) А так былобы неплохо: Тыкнул Ctrl+R - открылось окошко с выбором радиостанции, с громкостью + плейлист свой чтоб можно было делать) Edited March 24, 2015 by Matrix Share this post Link to post Share on other sites
Akumu 1117 Posted March 24, 2015 Одно время морочился с отрисовкой окон, прям в игре, на дальше пустого окна дела не сдвинулось) А так былобы неплохо: Тыкнул Ctrl+R - открылось окошко с выбором радиостанции, с громкостью + плейлист свой чтоб можно было делать) Мы с Респектом одно время общались насчет интеграции нативного кода и UI окна в самой игре, но дальше разговоров и планов дело не пошло Можно сделать обычное "всплывающее" окно по комбинации клавиш, для плюсов есть хороший фреймворк Win32++ Share this post Link to post Share on other sites
SteelSeries 1 Posted March 24, 2015 новое окно в игре не проблема, проблема залить в него функционал Share this post Link to post Share on other sites
Matrix 48 Posted March 24, 2015 А если попробовать простое немодальное диалоговое окно, координаты ограничить рабочим окном ладвы, замутить дизайн под ладву и на момент открытия окна, запрещать снижение нагрузку окна в фоне (чтоб не лагало)??? Share this post Link to post Share on other sites
Akumu 1117 Posted March 24, 2015 А если попробовать простое немодальное диалоговое окно, координаты ограничить рабочим окном ладвы, замутить дизайн под ладву и на момент открытия окна, запрещать снижение нагрузку окна в фоне (чтоб не лагало)??? Можно, но этот вариант не будет работать при игре на весь экран. Share this post Link to post Share on other sites
Matrix 48 Posted March 24, 2015 новое окно в игре не проблема, проблема залить в него функционал Предложи вариант отрисовки окна в ладве, а как залить начинку помозгуем вместе Share this post Link to post Share on other sites
Matrix 48 Posted March 24, 2015 Можно, но этот вариант не будет работать при игре на весь экран. Ахаха, я и забыл что ладву в полный экран играть можно )))) Обычно или окном делаю или псевдополноэкранку)) Share this post Link to post Share on other sites
Akumu 1117 Posted March 24, 2015 Ахаха, я и забыл что ладву в полный экран играть можно )))) Обычно или окном делаю или псевдополноэкранку)) За то время что мы занимаемся смартом, я всяких вариантов таких насмотрелся что скоро сниться будут. Что-то вспомнилось как по TeamViewer у игрока проблему анализировали, а он чтобы окна л2 не группировались на панели сделал 10 копий всего клиента, я долго улыбался Share this post Link to post Share on other sites
SteelSeries 1 Posted March 24, 2015 Предложи вариант отрисовки окна в ладве, а как залить начинку помозгуем вместе я могу сделать окно в клиенте при комбинации клавиш, но функционала у него кроме как открыть его и закрыть не будет Share this post Link to post Share on other sites
Matrix 48 Posted March 24, 2015 я могу сделать окно в клиенте при комбинации клавиш, но функционала у него кроме как открыть его и закрыть не будет Это я и с первого сообщения понял) Поделись примером кода! Или это "военная тайна"? Share this post Link to post Share on other sites
SteelSeries 1 Posted March 24, 2015 Это я и с первого сообщения понял) Поделись примером кода! Или это "военная тайна"? да нет не тайна, всё в открытом доступе, как нибудь на досуге Share this post Link to post Share on other sites
Парламентер 24 Posted March 24, 2015 А если сделать радио конкретно для определенного сервера и раскрутить эту идею Share this post Link to post Share on other sites
Detect 618 Posted March 25, 2015 (edited) Был где то скрипт на произведение музыки за итем, ставился нпц "магнитофон", и было все ок... но музыка вся в патче лежала, и размер патча на много больше был, вот это самый минусный минус был. А радио такое - актуально будет лишь в том случае если будет бесплатное, аналогично с установкой. Если только руку набить Edited March 25, 2015 by Flayter Share this post Link to post Share on other sites
Matrix 48 Posted April 3, 2015 да нет не тайна, всё в открытом доступе, как нибудь на досуге И всётаки это походу так и останется тайной ) Share this post Link to post Share on other sites
Matrix 48 Posted April 13, 2015 Пример реализации радио, на основе данного исходного кода: (ТЫК)Проверять только на чистом патче, клиент High Five!После включения клиента надо тыкнуть Ctrl+R 2 Share this post Link to post Share on other sites