Я пытался понять, как взаимодействуют DLL и интерфейс. Для этого я создал интернет-радио, которое, как я считаю, никому не нужно. Однако я решил сохранить его на память. Возможно, кто-то захочет его использовать.
Исходный код для интерлюдия, который вы можете адаптировать для любой хроники выше HF. Для этого вам потребуется подключить файл interface.dll к l2.exe с помощью CFF_Explorer.
Если у вас Interlude или HF, просто переместите все файлы из архива, которые находятся в папке system, в свою системную папку игры с заменой.
Этот скрипт поможет вам разобраться в основах работы с интернет-радио. Вы можете адаптировать его под свой стиль и проект!
Исходный код для интерлюдия, который вы можете адаптировать для любой хроники выше HF. Для этого вам потребуется подключить файл interface.dll к l2.exe с помощью CFF_Explorer.
Если у вас Interlude или HF, просто переместите все файлы из архива, которые находятся в папке system, в свою системную папку игры с заменой.
Этот скрипт поможет вам разобраться в основах работы с интернет-радио. Вы можете адаптировать его под свой стиль и проект!
C++:
/******************************************
Дата 25.10.2024 23:18
Разработчик: BITHACK
Copyright (c) Ваша компания
Описание скрипта:
Интерфейс интернет-радиоплеера с базовыми
функциями управления воспроизведением из DLL.
*******************************************/
class aaIT_RadioDLL extends UICommonAPI;
var int count; // Переменная для хранения индекса текущей станции
// Нативные функции, реализованные в Interface.dll
native(1246) final function bool PlayStop(); // Останавливает или запускает воспроизведение
native(1249) final function string GetStreamURL(); // воспроизведение URL
// Импортируем текстуры для кнопок из папки interface/RadioIMG
#exec Texture Import File=RadioIMG/Back.tga Name=Back Mips=Off MASKED=1
#exec Texture Import File=RadioIMG/Next.tga Name=Next Mips=Off MASKED=1
#exec Texture Import File=RadioIMG/Stop.tga Name=Stop Mips=Off MASKED=1
#exec Texture Import File=RadioIMG/Play.tga Name=Play Mips=Off MASKED=1
// Импортируем текстуры для кнопок в нажатом состоянии из папки interface/RadioIMG
#exec Texture Import File=RadioIMG/Back_down.tga Name=Back_down Mips=Off MASKED=1
#exec Texture Import File=RadioIMG/Next_down.tga Name=Next_down Mips=Off MASKED=1
#exec Texture Import File=RadioIMG/Stop_down.tga Name=Stop_down Mips=Off MASKED=1
#exec Texture Import File=RadioIMG/Play_down.tga Name=Play_down Mips=Off MASKED=1
// Функция обработки нажатия на кнопку
function OnClickButton( String strID ) {
switch( strID ){
case "PlayStop":
// Проверяем, запущено ли воспроизведение
if ( PlayStop() ){
ButtonHandle(GetHandle("aaIT_RadioDLL.PlayStop")).SetTexture( "interface.Stop", "interface.Stop_down", "Interface.Stop_down"); // Меняем текстуру кнопки на "Stop"
}else{
ButtonHandle(GetHandle("aaIT_RadioDLL.PlayStop")).SetTexture( "interface.Play", "interface.Play_down", "Interface.Play_down"); // Меняем текстуру кнопки на "Play"
}
break;
case "PlayBack": //Назад
count--; // Уменьшаем индекс текущей станции
if (count == -1) {
count = 5; // Если индекс выходит за пределы массива, устанавливаем его в 5
}
SteamPlay(count); // Переключаемся на предыдущую станцию
break;
case "PlayNext"://Вперед
count++; // Увеличиваем индекс текущей станции
if (count == 6) {
count = 0; // Если индекс выходит за пределы массива, устанавливаем его в 0
}
SteamPlay(count); // Переключаемся на следующую станцию
break;
}
}
function SteamPlay(int PlayCount){ // Функция для переключения станции
local array<String> UrlName; //Массив с ID разрешенных банок
Split(RadioName(PlayCount), "," ,UrlName); // Разделяем строку с адресом и названием на две части
PlayStreamURL(UrlName[0]); // Запускаем воспроизведение по полученному адресу
TextBoxHandle(GetHandle("aaIT_RadioDLL.RadioNameTxt")).SetText(UrlName[1]); // Устанавливаем название станции в текстовое поле
ButtonHandle(GetHandle("aaIT_RadioDLL.PlayStop")).SetTexture( "interface.Stop", "interface.Stop_down", "");
}
function PlayStreamURL(string URL){ // Функция для запуска воспроизведения по адресу DLL
URL = GetStreamURL(); // Получаем адрес станции из DLL
}
function string RadioName(int Radio){ // Функция для получения адреса и названия станции по индексу
switch( Radio ){
case 0:
return "https://hfm.amgradio.ru/HypeFM , Хайп ФМ" ;
break;
case 1:
return "http://paris.discovertrance.com:8006/;stream.nsv , Discover Trance" ;
break;
case 2:
return "http://listen1.myradio24.com:9000/5967 , 90's Eurodance" ;
break;
case 3:
return "https://radiorecord.hostingradio.ru/rr_main96.aacp , Radio Record «Record»" ;
break;
case 4:
return "https://radiorecord.hostingradio.ru/rus96.aacp , Radio Record «Russian Mix»" ;
break;
case 5:
return "https://radiorecord.hostingradio.ru/hype96.aacp, Radio Record «На Хайпе»" ;
break;
}
}
defaultproperties{}