Matrix 48 Опубликовано 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 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Akumu 1117 Опубликовано 24 марта, 2015 Для гуру: Надо допиливать управление (например сделать перехват клавишь в активном окне). Сейчас если включить 10 окон ладвы - все 10 начнут играть, со смещением изза буфферизации - звук превратится в кашу. а мутексы на что? у bass нету библиотеки для статической линковки? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Matrix 48 Опубликовано 24 марта, 2015 а мутексы на что? у bass нету библиотеки для статической линковки? Можно и мутексами, но мне кажется лучше ловить нажатия в активном окне, нежели проверять текущее состояние клавиш! Про статическую линковку ничего не скажу, маны особо не читал, да и уже очень давно это делал. Этот код так, накидал побыстрому, когда наткнулся на темку про радио, здесь на форуме! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Akumu 1117 Опубликовано 24 марта, 2015 Можно и мутексами, но мне кажется лучше ловить нажатия в активном окне, нежели проверять текущее состояние клавиш! Про статическую линковку ничего не скажу, маны особо не читал, да и уже очень давно это делал. Этот код так, накидал побыстрому, когда наткнулся на темку про радио, здесь на форуме! HWND h = GetForegroundWindow(); if(h) { DWORD pId(0); if(GetWindowThreadProcessId(h, &pId)) return pId == PPID; } Проверяем ID процесса рабочего окна (активного) и сравниваем с текущим. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Matrix 48 Опубликовано 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 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Akumu 1117 Опубликовано 24 марта, 2015 (изменено) Документацию по GetKeyState еще почитайте Вообщем вот так делайте: if(HIBYTE(GetKeyState(VK_LCONTROL)) && HIBYTE(GetKeyState('R')) < 0 && !isPressed) Изменено 24 марта, 2015 пользователем Akumu Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Matrix 48 Опубликовано 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. Изменено 24 марта, 2015 пользователем Matrix Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Akumu 1117 Опубликовано 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. Разницы нету в том что написал я и в том что написал ты Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Desquire 451 Опубликовано 24 марта, 2015 Вроде же есть радио в клиент. там еше и управление чатом есть... Ну а так спасибо, и удачи в разработке Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Akumu 1117 Опубликовано 24 марта, 2015 На самом деле если время будет - можно сделать в смарте бесплатных модуль радио С интерфейсом, выбором радиостанции и всякими настройками 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Matrix 48 Опубликовано 24 марта, 2015 (изменено) Одно время морочился с отрисовкой окон, прям в игре, на дальше пустого окна дела не сдвинулось) А так былобы неплохо: Тыкнул Ctrl+R - открылось окошко с выбором радиостанции, с громкостью + плейлист свой чтоб можно было делать) Изменено 24 марта, 2015 пользователем Matrix Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Akumu 1117 Опубликовано 24 марта, 2015 Одно время морочился с отрисовкой окон, прям в игре, на дальше пустого окна дела не сдвинулось) А так былобы неплохо: Тыкнул Ctrl+R - открылось окошко с выбором радиостанции, с громкостью + плейлист свой чтоб можно было делать) Мы с Респектом одно время общались насчет интеграции нативного кода и UI окна в самой игре, но дальше разговоров и планов дело не пошло Можно сделать обычное "всплывающее" окно по комбинации клавиш, для плюсов есть хороший фреймворк Win32++ Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
SteelSeries 1 Опубликовано 24 марта, 2015 новое окно в игре не проблема, проблема залить в него функционал Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Matrix 48 Опубликовано 24 марта, 2015 А если попробовать простое немодальное диалоговое окно, координаты ограничить рабочим окном ладвы, замутить дизайн под ладву и на момент открытия окна, запрещать снижение нагрузку окна в фоне (чтоб не лагало)??? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Akumu 1117 Опубликовано 24 марта, 2015 А если попробовать простое немодальное диалоговое окно, координаты ограничить рабочим окном ладвы, замутить дизайн под ладву и на момент открытия окна, запрещать снижение нагрузку окна в фоне (чтоб не лагало)??? Можно, но этот вариант не будет работать при игре на весь экран. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Matrix 48 Опубликовано 24 марта, 2015 новое окно в игре не проблема, проблема залить в него функционал Предложи вариант отрисовки окна в ладве, а как залить начинку помозгуем вместе Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Matrix 48 Опубликовано 24 марта, 2015 Можно, но этот вариант не будет работать при игре на весь экран. Ахаха, я и забыл что ладву в полный экран играть можно )))) Обычно или окном делаю или псевдополноэкранку)) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Akumu 1117 Опубликовано 24 марта, 2015 Ахаха, я и забыл что ладву в полный экран играть можно )))) Обычно или окном делаю или псевдополноэкранку)) За то время что мы занимаемся смартом, я всяких вариантов таких насмотрелся что скоро сниться будут. Что-то вспомнилось как по TeamViewer у игрока проблему анализировали, а он чтобы окна л2 не группировались на панели сделал 10 копий всего клиента, я долго улыбался Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
SteelSeries 1 Опубликовано 24 марта, 2015 Предложи вариант отрисовки окна в ладве, а как залить начинку помозгуем вместе я могу сделать окно в клиенте при комбинации клавиш, но функционала у него кроме как открыть его и закрыть не будет Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Matrix 48 Опубликовано 24 марта, 2015 я могу сделать окно в клиенте при комбинации клавиш, но функционала у него кроме как открыть его и закрыть не будет Это я и с первого сообщения понял) Поделись примером кода! Или это "военная тайна"? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
SteelSeries 1 Опубликовано 24 марта, 2015 Это я и с первого сообщения понял) Поделись примером кода! Или это "военная тайна"? да нет не тайна, всё в открытом доступе, как нибудь на досуге Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Парламентер 24 Опубликовано 24 марта, 2015 А если сделать радио конкретно для определенного сервера и раскрутить эту идею Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Detect 618 Опубликовано 25 марта, 2015 (изменено) Был где то скрипт на произведение музыки за итем, ставился нпц "магнитофон", и было все ок... но музыка вся в патче лежала, и размер патча на много больше был, вот это самый минусный минус был. А радио такое - актуально будет лишь в том случае если будет бесплатное, аналогично с установкой. Если только руку набить Изменено 25 марта, 2015 пользователем Flayter Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Matrix 48 Опубликовано 3 апреля, 2015 да нет не тайна, всё в открытом доступе, как нибудь на досуге И всётаки это походу так и останется тайной ) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Matrix 48 Опубликовано 13 апреля, 2015 Пример реализации радио, на основе данного исходного кода: (ТЫК)Проверять только на чистом патче, клиент High Five!После включения клиента надо тыкнуть Ctrl+R 2 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты