Перейти к содержанию
Авторизация  
Matrix

InGame Radio

Рекомендуемые сообщения

index.php?app=downloads&module=display&section=screenshot&id=1116

 

Название: 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.

 

 

Нажмите здесь, чтобы скачать файл

  • Upvote 6

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

Для гуру: Надо допиливать управление (например сделать перехват клавишь в активном окне). Сейчас если включить 10 окон ладвы - все 10 начнут играть, со смещением изза буфферизации - звук превратится в кашу.

 

 

а мутексы на что?

 

у bass нету библиотеки для статической линковки?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

а мутексы на что?

 

у bass нету библиотеки для статической линковки?

Можно и мутексами, но мне кажется лучше ловить нажатия в активном окне, нежели проверять текущее состояние клавиш!

Про статическую линковку ничего не скажу, маны особо не читал, да и уже очень давно это делал. Этот код так, накидал побыстрому, когда наткнулся на темку про радио, здесь на форуме!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно и мутексами, но мне кажется лучше ловить нажатия в активном окне, нежели проверять текущее состояние клавиш!

Про статическую линковку ничего не скажу, маны особо не читал, да и уже очень давно это делал. Этот код так, накидал побыстрому, когда наткнулся на темку про радио, здесь на форуме!

HWND h = GetForegroundWindow();

if(h)
{
	DWORD pId(0);
	if(GetWindowThreadProcessId(h, &pId))
		return pId == PPID;
}

Проверяем ID процесса рабочего окна (активного) и сравниваем с текущим.  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хаха, а про такой вариант я даже и не думал)

#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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Документацию по GetKeyState еще почитайте

 

a77516d703.jpg

 

Вообщем вот так делайте:

if(HIBYTE(GetKeyState(VK_LCONTROL)) && HIBYTE(GetKeyState('R')) < 0 && !isPressed)
Изменено пользователем Akumu

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну тогда уж вероятней будет вот так:

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.

Изменено пользователем Matrix

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну тогда уж вероятней будет вот так:

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.

 

Разницы нету в том что написал я и в том что написал ты :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вроде же есть радио в клиент. там еше и управление чатом есть...

Ну а так спасибо, и удачи в разработке

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На самом деле если время будет - можно сделать в смарте бесплатных модуль радио :)

С интерфейсом, выбором радиостанции и всякими настройками

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Одно время морочился с отрисовкой окон, прям в игре, на дальше пустого окна дела не сдвинулось) А так былобы неплохо: Тыкнул Ctrl+R - открылось окошко с выбором радиостанции, с громкостью + плейлист свой чтоб можно было делать)

Изменено пользователем Matrix

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Одно время морочился с отрисовкой окон, прям в игре, на дальше пустого окна дела не сдвинулось) А так былобы неплохо: Тыкнул Ctrl+R - открылось окошко с выбором радиостанции, с громкостью + плейлист свой чтоб можно было делать)

 

Мы с Респектом одно время общались насчет интеграции нативного кода и UI окна в самой игре, но дальше разговоров и планов дело не пошло :)

Можно сделать обычное "всплывающее" окно по комбинации клавиш, для плюсов есть хороший фреймворк Win32++

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

новое окно в игре не проблема, проблема залить в него функционал

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А если попробовать простое немодальное диалоговое окно, координаты ограничить рабочим окном ладвы, замутить дизайн под ладву и на момент открытия окна, запрещать снижение нагрузку окна в фоне (чтоб не лагало)???

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А если попробовать простое немодальное диалоговое окно, координаты ограничить рабочим окном ладвы, замутить дизайн под ладву и на момент открытия окна, запрещать снижение нагрузку окна в фоне (чтоб не лагало)???

 

Можно, но этот вариант не будет работать при игре на весь экран.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

новое окно в игре не проблема, проблема залить в него функционал

Предложи вариант отрисовки окна в ладве, а как залить начинку помозгуем вместе :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно, но этот вариант не будет работать при игре на весь экран.

Ахаха, я и забыл что ладву в полный экран играть можно :))))) Обычно или окном делаю или псевдополноэкранку))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ахаха, я и забыл что ладву в полный экран играть можно :))))) Обычно или окном делаю или псевдополноэкранку))

За то время что мы занимаемся смартом, я всяких вариантов таких насмотрелся что скоро сниться будут.

 

Что-то вспомнилось как по TeamViewer у игрока проблему анализировали, а он чтобы окна л2 не группировались на панели сделал 10 копий всего клиента, я долго улыбался :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Предложи вариант отрисовки окна в ладве, а как залить начинку помозгуем вместе :)

я могу сделать окно в клиенте при комбинации клавиш, но функционала у него кроме как открыть его и закрыть не будет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я могу сделать окно в клиенте при комбинации клавиш, но функционала у него кроме как открыть его и закрыть не будет

Это я и с первого сообщения понял) Поделись примером кода! Или это "военная тайна"?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это я и с первого сообщения понял) Поделись примером кода! Или это "военная тайна"?

да нет не тайна, всё в открытом доступе, как нибудь на досуге

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Был где то скрипт на произведение музыки за итем, ставился нпц "магнитофон", и было все ок... но музыка вся  в патче лежала, и размер патча на много больше был, вот это самый минусный минус был.

А радио такое - актуально будет лишь в том случае если будет бесплатное, аналогично с установкой.

Если только руку набить :)

Изменено пользователем Flayter

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да нет не тайна, всё в открытом доступе, как нибудь на досуге

И всётаки это походу так и останется тайной :))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пример реализации радио, на основе данного исходного кода: (ТЫК)
Проверять только на чистом патче, клиент High Five!
post-7534-0-40729600-1428940907_thumb.jpg

После включения клиента надо тыкнуть Ctrl+R

  • Upvote 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...