namespace CAMMenu { final class BuyableItem { private string m_szDescription; private string m_szEntityName; private uint m_uiCost = 0; private bool m_bAllPlayers = true; string Description { get const { return m_szDescription; } set { m_szDescription = value; } } string EntityName { get const { return m_szEntityName; } set { m_szEntityName = value; } } uint Cost { get const { return m_uiCost; } set { m_uiCost = value; } } bool AllPlayers { get const { return m_bAllPlayers; } set { m_bAllPlayers = value; } } BuyableItem( const string& in szDescription, const string& in szEntityName, const uint uiCost, const bool bAllPlayers = true ) { m_szDescription = szDescription; m_szEntityName = szEntityName; m_uiCost = uiCost; m_bAllPlayers = bAllPlayers; } void Buy( CBasePlayer@ pPlayer = null ) { if( !m_bAllPlayers && pPlayer is null ) return; if( m_bAllPlayers ) { for( int iPlayer = 1; iPlayer <= g_Engine.maxClients; ++iPlayer ) { CBasePlayer@ pPl = g_PlayerFuncs.FindPlayerByIndex( iPlayer ); if( pPl !is null ) { GiveItem( pPl ); } } } else { GiveItem( pPlayer ); } } private void GiveItem( CBasePlayer@ pPlayer ) const { const uint uiMoney = uint( pPlayer.pev.frags ); g_Game.AlertMessage( at_console, "frags: %1, money: %2\n", pPlayer.pev.frags, uiMoney ); if( pPlayer.pev.frags <= -1 ) { g_PlayerFuncs.ClientPrint(pPlayer,HUD_PRINTTALK,"Not enough money(frags) - Cost: " + m_uiCost + "\n"); return; } if( uiMoney >= m_uiCost ) { const uint uiLeft = uiMoney - m_uiCost; pPlayer.pev.frags -= m_uiCost; pPlayer.GiveNamedItem( m_szEntityName ); } else { g_PlayerFuncs.ClientPrint(pPlayer,HUD_PRINTTALK,"Not enough money(frags) - Cost: " + m_uiCost + "\n"); return; } } } final class CAMMenu { float m_flNextSoundCAM = 0.0; array m_Items; private CTextMenu@ m_pCAMMenu = null; private CTextMenu@ m_pCAMReportMenu = null; private CTextMenu@ m_pCAMTacticalMenu = null; private CTextMenu@ m_pCAMSocialMenu = null; void RemoveItems() { if( m_Items !is null ) { m_Items.removeRange( 0, m_Items.length() ); } } void AddItem( BuyableItem@ pItem ) { if( pItem is null ) return; if( m_Items.findByRef( @pItem ) != -1 ) return; m_Items.insertLast( pItem ); if( m_pCAMMenu !is null ) @m_pCAMMenu = null; } void Show( CBasePlayer@ pPlayer = null ) { if( m_pCAMMenu is null ) CreateMenu(); if( pPlayer !is null ) m_pCAMMenu.Open( 0, 0, pPlayer ); else m_pCAMMenu.Open( 0, 0 ); } private void CreateMenu() { @m_pCAMMenu = CTextMenu( TextMenuPlayerSlotCallback( this.CAMCallback ) ); m_pCAMMenu.SetTitle( "CA Male Responses" ); m_pCAMMenu.AddItem( "Report", null ); m_pCAMMenu.AddItem( "Tactical", null ); m_pCAMMenu.AddItem( "Social", null ); m_pCAMMenu.Register(); @m_pCAMReportMenu = CTextMenu( TextMenuPlayerSlotCallback( this.CAMReportCallback ) ); m_pCAMReportMenu.SetTitle( "CA Male Report" ); m_pCAMReportMenu.AddItem( "Roger that", null ); m_pCAMReportMenu.AddItem( "Negative", null ); m_pCAMReportMenu.AddItem( "No way", null ); m_pCAMReportMenu.AddItem( "In position", null ); //m_pCAMReportMenu.AddItem( "A site", null ); //m_pCAMReportMenu.AddItem( "B site", null ); m_pCAMReportMenu.AddItem( "Covering fire", null ); m_pCAMReportMenu.AddItem( "Heading to your position", null ); m_pCAMReportMenu.AddItem( "Sector clear", null ); m_pCAMReportMenu.AddItem( "Enemy down", null ); m_pCAMReportMenu.Register(); @m_pCAMTacticalMenu = CTextMenu( TextMenuPlayerSlotCallback( this.CAMTacticalCallback ) ); m_pCAMTacticalMenu.SetTitle( "CA Male Tactical" ); m_pCAMTacticalMenu.AddItem( "Go, go, go", null ); m_pCAMTacticalMenu.AddItem( "Follow me", null ); m_pCAMTacticalMenu.AddItem( "Regroup", null ); m_pCAMTacticalMenu.AddItem( "Hold your positions", null ); m_pCAMTacticalMenu.AddItem( "Take cover", null ); m_pCAMTacticalMenu.AddItem( "Report in", null ); m_pCAMTacticalMenu.AddItem( "Open fire", null ); m_pCAMTacticalMenu.AddItem( "Cease fire", null ); m_pCAMTacticalMenu.AddItem( "Fall back", null ); m_pCAMTacticalMenu.AddItem( "Fire in the hole", null ); m_pCAMTacticalMenu.AddItem( "Planting mine", null ); m_pCAMTacticalMenu.AddItem( "No ammo", null ); m_pCAMTacticalMenu.AddItem( "I am hit", null ); m_pCAMTacticalMenu.Register(); @m_pCAMSocialMenu = CTextMenu( TextMenuPlayerSlotCallback( this.CAMSocialCallback ) ); m_pCAMSocialMenu.SetTitle( "CA Male Social" ); m_pCAMSocialMenu.AddItem( "I'm on it", null ); m_pCAMSocialMenu.AddItem( "Thank you", null ); m_pCAMSocialMenu.AddItem( "Sorry", null ); m_pCAMSocialMenu.AddItem( "Careful", null ); m_pCAMSocialMenu.AddItem( "Nice shot", null ); m_pCAMSocialMenu.AddItem( "Good job", null ); m_pCAMSocialMenu.AddItem( "Hoo-ah!", null ); m_pCAMSocialMenu.AddItem( "Coward!", null ); m_pCAMSocialMenu.AddItem( "I don't wanna die!", null ); m_pCAMSocialMenu.AddItem( "Don't shoot me", null ); m_pCAMSocialMenu.Register(); } private void CAMCallback( CTextMenu@ menu, CBasePlayer@ pPlayer, int iSlot, const CTextMenuItem@ pItem ) { if ( !pPlayer.IsAlive() ) { g_PlayerFuncs.SayText( pPlayer, "[CAM] You must be alive\n" ); return; } if ( (pPlayer.pev.effects & EF_NODRAW) == EF_NODRAW ) { g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[CAM] You can't use the voice menu while controlling an NPC\n" ); return; } if( pItem !is null ) { string sChoice = pItem.m_szName; if( sChoice == "Report" ) m_pCAMReportMenu.Open( 0, 0, pPlayer ); if( sChoice == "Tactical" ) m_pCAMTacticalMenu.Open( 0, 0, pPlayer ); if( sChoice == "Social" ) m_pCAMSocialMenu.Open( 0, 0, pPlayer ); } } private void CAMReportCallback( CTextMenu@ menu, CBasePlayer@ pPlayer, int iSlot, const CTextMenuItem@ pItem ) { if( pItem !is null && m_flNextSoundCAM < g_Engine.time ) { string sChoice = pItem.m_szName; if( sChoice == "Roger that" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_rogerthat_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Negative" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_negative_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "No way" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_noway_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "In position" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_inposition_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "A site" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_alphasite_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "B site" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_bravosite_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Covering fire" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_coveringfire_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Heading to your position" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_headingtoyourposition_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Sector clear" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_sectorclear_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Enemy down" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_enemydown_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } m_flNextSoundCAM = g_Engine.time + 2.0; } } private void CAMTacticalCallback( CTextMenu@ menu, CBasePlayer@ pPlayer, int iSlot, const CTextMenuItem@ pItem ) { if( pItem !is null && m_flNextSoundCAM < g_Engine.time ) { string sChoice = pItem.m_szName; if( sChoice == "Go, go, go" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_gogogo_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Follow me" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_followme_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Regroup" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_regroup_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Hold your positions" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_holdyourpositions_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Take cover" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_takecover_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Report in" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_reportin_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Open fire" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_openfire_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Cease fire" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_ceasefire_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Fall back" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_fallback_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Fire in the hole" ) { switch ( Math.RandomLong( 1, 3 ) ) { case 1: g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_fireinthehole_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); break; case 2: g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_fragout_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); break; case 3: g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_grenade_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); break; } } if( sChoice == "Planting mine" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_plantingamine_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "No ammo" ) { switch ( Math.RandomLong( 1, 2 ) ) { case 1: g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_emptyammo_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); break; case 2: g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_outofammo_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); break; } } if( sChoice == "I am hit" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_imhit_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } m_flNextSoundCAM = g_Engine.time + 2.0; } } private void CAMSocialCallback( CTextMenu@ menu, CBasePlayer@ pPlayer, int iSlot, const CTextMenuItem@ pItem ) { if( pItem !is null && m_flNextSoundCAM < g_Engine.time ) { string sChoice = pItem.m_szName; if( sChoice == "I'm on it" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_imonit_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Thank you" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_thankyou_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Sorry" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_sorry_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Careful" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_careful_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Nice shot" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_niceshot_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Good job" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_goodjob_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Hoo-ah!" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_hoorah_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Coward!" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_coward_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "I don't wanna die!" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_idontwannadie_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Don't shoot me" ) { switch ( Math.RandomLong( 1, 2 ) ) { case 1: g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_watchurshot_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); break; case 2: g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_heysameteam_ma.ogg", 0.75, 0.6, 0, PITCH_NORM ); break; } } m_flNextSoundCAM = g_Engine.time + 2.0; } } } }