181 lines
7.0 KiB
C++
181 lines
7.0 KiB
C++
#include "stdafx.h"
|
|
#include "Resource.h"
|
|
#include "Logger.h"
|
|
#include "GameClient.h"
|
|
|
|
extern HINSTANCE g_radardll_hinst;
|
|
extern class GameClient *g_game_client; // in main.cpp
|
|
|
|
INT_PTR CALLBACK SoundAlerts_DlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam );
|
|
|
|
HWND RadarSetupDlg_SoundAlerts_Create( HWND hWndParent )
|
|
{
|
|
return CreateDialogParam( g_radardll_hinst, MAKEINTRESOURCE(IDD_SR_SOUNDALERTS),
|
|
hWndParent, SoundAlerts_DlgProc, 0 );
|
|
}
|
|
|
|
// =========================================================
|
|
|
|
void SoundAlerts_Init( HWND hDlg );
|
|
void SoundAlerts_OnDestroy( HWND hDlg );
|
|
void SoundAlerts_OnApply( HWND hDlg );
|
|
void SoundAlerts_OnFind( HWND hDlg, int N );
|
|
void SoundAlerts_PlayFile( HWND hDlg, int N );
|
|
|
|
|
|
INT_PTR CALLBACK SoundAlerts_DlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
|
|
{
|
|
lParam;
|
|
switch( uMsg )
|
|
{
|
|
case WM_INITDIALOG: SoundAlerts_Init( hDlg ); break;
|
|
case WM_DESTROY: { SoundAlerts_OnDestroy( hDlg ); return FALSE; } break;
|
|
case WM_COMMAND:
|
|
{
|
|
switch( LOWORD(wParam) )
|
|
{
|
|
case IDC_APPLY: SoundAlerts_OnApply( hDlg ); break;
|
|
case IDC_B_FIND1: SoundAlerts_OnFind( hDlg, 1 ); break;
|
|
case IDC_B_FIND2: SoundAlerts_OnFind( hDlg, 2 ); break;
|
|
case IDC_B_FIND3: SoundAlerts_OnFind( hDlg, 3 ); break;
|
|
case IDC_B_PLAY1: SoundAlerts_PlayFile( hDlg, 1 ); break;
|
|
case IDC_B_PLAY2: SoundAlerts_PlayFile( hDlg, 2 ); break;
|
|
case IDC_B_PLAY3: SoundAlerts_PlayFile( hDlg, 3 ); break;
|
|
}
|
|
} break;
|
|
default: return FALSE; break;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
void SoundAlerts_Init( HWND hDlg )
|
|
{
|
|
// force UserAI to reload config file
|
|
g_game_client->ai.loadSoundAlertsCfgFromFile();
|
|
//
|
|
HWND hwndCB = GetDlgItem( hDlg, IDC_CB_SOUNDTYPECW );
|
|
SendMessage( hwndCB, CB_ADDSTRING, 0, (LPARAM)TEXT("Info") );
|
|
SendMessage( hwndCB, CB_ADDSTRING, 0, (LPARAM)TEXT("Warning") );
|
|
SendMessage( hwndCB, CB_ADDSTRING, 0, (LPARAM)TEXT("Critical") );
|
|
hwndCB = GetDlgItem( hDlg, IDC_CB_SOUNDTYPETARGET );
|
|
SendMessage( hwndCB, CB_ADDSTRING, 0, (LPARAM)TEXT("Info") );
|
|
SendMessage( hwndCB, CB_ADDSTRING, 0, (LPARAM)TEXT("Warning") );
|
|
SendMessage( hwndCB, CB_ADDSTRING, 0, (LPARAM)TEXT("Critical") );
|
|
hwndCB = GetDlgItem( hDlg, IDC_CB_SOUNDTYPEINVISGM );
|
|
SendMessage( hwndCB, CB_ADDSTRING, 0, (LPARAM)TEXT("Info") );
|
|
SendMessage( hwndCB, CB_ADDSTRING, 0, (LPARAM)TEXT("Warning") );
|
|
SendMessage( hwndCB, CB_ADDSTRING, 0, (LPARAM)TEXT("Critical") );
|
|
// set initial CB checks
|
|
if( g_game_client->ai.soundAlert_alertOnClanWar > 0 )
|
|
{
|
|
CheckDlgButton( hDlg, IDC_C_SOUNDENEMYENTER, g_game_client->ai.soundAlert_alertOnClanWar );
|
|
hwndCB = GetDlgItem( hDlg, IDC_CB_SOUNDTYPECW );
|
|
ComboBox_SetCurSel( hwndCB, g_game_client->ai.soundAlert_alertOnClanWar - 1 );
|
|
}
|
|
if( g_game_client->ai.soundAlert_alertOnTargeted > 0 )
|
|
{
|
|
CheckDlgButton( hDlg, IDC_C_SOUNDWHENTARGETED, g_game_client->ai.soundAlert_alertOnTargeted );
|
|
hwndCB = GetDlgItem( hDlg, IDC_CB_SOUNDTYPETARGET );
|
|
ComboBox_SetCurSel( hwndCB, g_game_client->ai.soundAlert_alertOnTargeted - 1 );
|
|
}
|
|
if( g_game_client->ai.soundAlert_alertOnInvisGM > 0 )
|
|
{
|
|
CheckDlgButton( hDlg, IDC_C_SOUNDONINVISGM, g_game_client->ai.soundAlert_alertOnTargeted );
|
|
hwndCB = GetDlgItem( hDlg, IDC_CB_SOUNDTYPEINVISGM );
|
|
ComboBox_SetCurSel( hwndCB, g_game_client->ai.soundAlert_alertOnInvisGM - 1 );
|
|
}
|
|
// no clan/party alert, screen message
|
|
CheckDlgButton( hDlg, IDC_C_NOPARTYTARGETALERT, g_game_client->ai.soundAlert_noPartyTargetAlert );
|
|
CheckDlgButton( hDlg, IDC_C_NOCLANTARGETALERT, g_game_client->ai.soundAlert_noClanTargetAlert );
|
|
CheckDlgButton( hDlg, IDC_C_TARGETALERTONSCREEN, g_game_client->ai.soundAlert_screenMessage );
|
|
// set file names
|
|
SetDlgItemTextA( hDlg, IDC_E_VERYCRITICALFILE, g_game_client->ai.soundAlert_fileNameCritical );
|
|
SetDlgItemTextA( hDlg, IDC_E_WARNINGFILE, g_game_client->ai.soundAlert_fileNameWarning );
|
|
SetDlgItemTextA( hDlg, IDC_E_INFOFILE, g_game_client->ai.soundAlert_fileNameInfo );
|
|
}
|
|
|
|
|
|
void SoundAlerts_OnDestroy( HWND hDlg )
|
|
{
|
|
hDlg;
|
|
//log_error( LOG_OK, "SoundAlerts_OnDestroy\n" );
|
|
}
|
|
|
|
void SoundAlerts_OnApply( HWND hDlg )
|
|
{
|
|
//log_error( LOG_OK, "SoundAlerts_OnApply\n" );
|
|
// apply dialog config to UserAI class
|
|
HWND hwndcb = NULL;
|
|
if( IsDlgButtonChecked( hDlg, IDC_C_SOUNDENEMYENTER ) )
|
|
{
|
|
hwndcb = GetDlgItem( hDlg, IDC_CB_SOUNDTYPECW );
|
|
g_game_client->ai.soundAlert_alertOnClanWar = 1 + ComboBox_GetCurSel( hwndcb );
|
|
}
|
|
else g_game_client->ai.soundAlert_alertOnClanWar = 0;
|
|
//
|
|
if( IsDlgButtonChecked( hDlg, IDC_C_SOUNDWHENTARGETED ) )
|
|
{
|
|
hwndcb = GetDlgItem( hDlg, IDC_CB_SOUNDTYPETARGET );
|
|
g_game_client->ai.soundAlert_alertOnTargeted = 1 + ComboBox_GetCurSel( hwndcb );
|
|
}
|
|
else g_game_client->ai.soundAlert_alertOnTargeted = 0;
|
|
//
|
|
if( IsDlgButtonChecked( hDlg, IDC_C_SOUNDONINVISGM ) )
|
|
{
|
|
hwndcb = GetDlgItem( hDlg, IDC_CB_SOUNDTYPEINVISGM );
|
|
g_game_client->ai.soundAlert_alertOnInvisGM = 1 + ComboBox_GetCurSel( hwndcb );
|
|
}
|
|
else g_game_client->ai.soundAlert_alertOnInvisGM = 0;
|
|
// no clan/party alert, screen message
|
|
g_game_client->ai.soundAlert_noPartyTargetAlert = IsDlgButtonChecked( hDlg, IDC_C_NOPARTYTARGETALERT );
|
|
g_game_client->ai.soundAlert_noClanTargetAlert = IsDlgButtonChecked( hDlg, IDC_C_NOCLANTARGETALERT );
|
|
g_game_client->ai.soundAlert_screenMessage = IsDlgButtonChecked( hDlg, IDC_C_TARGETALERTONSCREEN );
|
|
// file names
|
|
GetDlgItemTextA( hDlg, IDC_E_VERYCRITICALFILE, g_game_client->ai.soundAlert_fileNameCritical, 255 );
|
|
GetDlgItemTextA( hDlg, IDC_E_WARNINGFILE, g_game_client->ai.soundAlert_fileNameWarning, 255 );
|
|
GetDlgItemTextA( hDlg, IDC_E_INFOFILE, g_game_client->ai.soundAlert_fileNameInfo, 255 );
|
|
// save to file
|
|
g_game_client->ai.saveSoundAlertsCfgToFile();
|
|
}
|
|
|
|
void SoundAlerts_OnFind( HWND hDlg, int N )
|
|
{
|
|
TCHAR fileName[256] = {0};
|
|
OPENFILENAME ofn;
|
|
memset( &ofn, 0, sizeof(ofn) );
|
|
ofn.lStructSize = sizeof(ofn);
|
|
ofn.Flags = OFN_EXPLORER | OFN_DONTADDTORECENT | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_NOCHANGEDIR;
|
|
ofn.hInstance = g_radardll_hinst;
|
|
ofn.hwndOwner = hDlg;
|
|
ofn.lpstrFile = fileName;
|
|
ofn.lpstrTitle = TEXT("Choose sound file:");
|
|
ofn.nMaxFile = 255;
|
|
if( GetOpenFileName( &ofn ) )
|
|
{
|
|
//MessageBox( hDlg, fileName, TEXT("User choosed"), 0 );
|
|
switch( N )
|
|
{
|
|
case 1: SetDlgItemText( hDlg, IDC_E_VERYCRITICALFILE, fileName ); break;
|
|
case 2: SetDlgItemText( hDlg, IDC_E_WARNINGFILE, fileName ); break;
|
|
case 3: SetDlgItemText( hDlg, IDC_E_INFOFILE, fileName ); break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void SoundAlerts_PlayFile( HWND hDlg, int N )
|
|
{
|
|
TCHAR text[256] = {0};
|
|
if( N<1 || N>3 ) return;
|
|
switch( N )
|
|
{
|
|
case 1: GetDlgItemText( hDlg, IDC_E_VERYCRITICALFILE, text, 255 ); break;
|
|
case 2: GetDlgItemText( hDlg, IDC_E_WARNINGFILE, text, 255 ); break;
|
|
case 3: GetDlgItemText( hDlg, IDC_E_INFOFILE, text, 255 ); break;
|
|
}
|
|
if( !PlaySound( text, NULL, SND_FILENAME | SND_ASYNC ) )
|
|
{
|
|
ErrorLogger_LogLastError( "PlaySoundW", GetLastError() );
|
|
MessageBox( hDlg, TEXT("PlaySound() failed"), text, MB_ICONSTOP );
|
|
}
|
|
}
|