Jump to content
Sign in to follow this  
Matrix

InGame Radio

Recommended Posts

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

Share this post


Link to post
Share on other sites

 

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

 

 

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

 

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

Share this post


Link to post
Share on other sites

 

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

 

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

#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

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

 

a77516d703.jpg

 

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

if(HIBYTE(GetKeyState(VK_LCONTROL)) && HIBYTE(GetKeyState('R')) < 0 && !isPressed)
Edited by Akumu

Share this post


Link to post
Share on other sites

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

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 by Matrix

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

  • Upvote 1

Share this post


Link to post
Share on other sites

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

Edited by Matrix

Share this post


Link to post
Share on other sites

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

 

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

 

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

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

Edited by Flayter

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

  • Upvote 2

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...