namespace CAFMenu { 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 CAFMenu { float m_flNextSoundCAF = 0.0; array m_Items; private CTextMenu@ m_pCAFMenu = null; private CTextMenu@ m_pCAFReportMenu = null; private CTextMenu@ m_pCAFTacticalMenu = null; private CTextMenu@ m_pCAFSocialMenu = 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_pCAFMenu !is null ) @m_pCAFMenu = null; } void Show( CBasePlayer@ pPlayer = null ) { if( m_pCAFMenu is null ) CreateMenu(); if( pPlayer !is null ) m_pCAFMenu.Open( 0, 0, pPlayer ); else m_pCAFMenu.Open( 0, 0 ); } private void CreateMenu() { @m_pCAFMenu = CTextMenu( TextMenuPlayerSlotCallback( this.CAFCallback ) ); m_pCAFMenu.SetTitle( "CA Female Responses" ); m_pCAFMenu.AddItem( "Report", null ); m_pCAFMenu.AddItem( "Tactical", null ); m_pCAFMenu.AddItem( "Social", null ); m_pCAFMenu.Register(); @m_pCAFReportMenu = CTextMenu( TextMenuPlayerSlotCallback( this.CAFReportCallback ) ); m_pCAFReportMenu.SetTitle( "CA Female Report" ); m_pCAFReportMenu.AddItem( "Roger that", null ); m_pCAFReportMenu.AddItem( "Negative", null ); m_pCAFReportMenu.AddItem( "No way", null ); m_pCAFReportMenu.AddItem( "In position", null ); //m_pCAFReportMenu.AddItem( "A site", null ); //m_pCAFReportMenu.AddItem( "B site", null ); m_pCAFReportMenu.AddItem( "Covering fire", null ); m_pCAFReportMenu.AddItem( "Heading to your position", null ); m_pCAFReportMenu.AddItem( "Sector clear", null ); m_pCAFReportMenu.AddItem( "Enemy down", null ); m_pCAFReportMenu.Register(); @m_pCAFTacticalMenu = CTextMenu( TextMenuPlayerSlotCallback( this.CAFTacticalCallback ) ); m_pCAFTacticalMenu.SetTitle( "CA Female Tactical" ); m_pCAFTacticalMenu.AddItem( "Go, go, go", null ); m_pCAFTacticalMenu.AddItem( "Follow me", null ); m_pCAFTacticalMenu.AddItem( "Regroup", null ); m_pCAFTacticalMenu.AddItem( "Hold your positions", null ); m_pCAFTacticalMenu.AddItem( "Take cover", null ); m_pCAFTacticalMenu.AddItem( "Report in", null ); m_pCAFTacticalMenu.AddItem( "Open fire", null ); m_pCAFTacticalMenu.AddItem( "Cease fire", null ); m_pCAFTacticalMenu.AddItem( "Fall back", null ); m_pCAFTacticalMenu.AddItem( "Fire in the hole", null ); m_pCAFTacticalMenu.AddItem( "Planting mine", null ); m_pCAFTacticalMenu.AddItem( "No ammo", null ); m_pCAFTacticalMenu.AddItem( "I am hit", null ); m_pCAFTacticalMenu.Register(); @m_pCAFSocialMenu = CTextMenu( TextMenuPlayerSlotCallback( this.CAFSocialCallback ) ); m_pCAFSocialMenu.SetTitle( "CA Female Social" ); m_pCAFSocialMenu.AddItem( "I'm on it", null ); m_pCAFSocialMenu.AddItem( "Thank you", null ); m_pCAFSocialMenu.AddItem( "Sorry", null ); m_pCAFSocialMenu.AddItem( "Careful", null ); m_pCAFSocialMenu.AddItem( "Nice shot", null ); m_pCAFSocialMenu.AddItem( "Good job", null ); m_pCAFSocialMenu.AddItem( "Hoo-ah!", null ); m_pCAFSocialMenu.AddItem( "Coward!", null ); m_pCAFSocialMenu.AddItem( "I don't wanna die!", null ); m_pCAFSocialMenu.AddItem( "Don't shoot me", null ); m_pCAFSocialMenu.Register(); } private void CAFCallback( CTextMenu@ menu, CBasePlayer@ pPlayer, int iSlot, const CTextMenuItem@ pItem ) { if ( !pPlayer.IsAlive() ) { g_PlayerFuncs.SayText( pPlayer, "[CAF] You must be alive\n" ); return; } if ( (pPlayer.pev.effects & EF_NODRAW) == EF_NODRAW ) { g_PlayerFuncs.ClientPrint( pPlayer, HUD_PRINTTALK, "[CAF] 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_pCAFReportMenu.Open( 0, 0, pPlayer ); if( sChoice == "Tactical" ) m_pCAFTacticalMenu.Open( 0, 0, pPlayer ); if( sChoice == "Social" ) m_pCAFSocialMenu.Open( 0, 0, pPlayer ); } } private void CAFReportCallback( CTextMenu@ menu, CBasePlayer@ pPlayer, int iSlot, const CTextMenuItem@ pItem ) { if( pItem !is null && m_flNextSoundCAF < g_Engine.time ) { string sChoice = pItem.m_szName; if( sChoice == "Roger that" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_rogerthat_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Negative" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_negative_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "No way" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_noway_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "In position" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_inposition_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "A site" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_alphasite_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "B site" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_bravosite_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Covering fire" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_coveringfire_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Heading to your position" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_headingtoyourposition_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Sector clear" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_sectorclear_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Enemy down" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_enemydown_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); } m_flNextSoundCAF = g_Engine.time + 2.0; } } private void CAFTacticalCallback( CTextMenu@ menu, CBasePlayer@ pPlayer, int iSlot, const CTextMenuItem@ pItem ) { if( pItem !is null && m_flNextSoundCAF < g_Engine.time ) { string sChoice = pItem.m_szName; if( sChoice == "Go, go, go" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_gogogo_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Follow me" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_followme_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Regroup" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_regroup_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Hold your positions" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_holdyourpositions_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Take cover" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_takecover_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Report in" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_reportin_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Open fire" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_openfire_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Cease fire" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_ceasefire_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Fall back" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_fallback_fa.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_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); break; case 2: g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_fragout_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); break; case 3: g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_grenade_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); break; } } if( sChoice == "Planting mine" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_plantingamine_fa.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_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); break; case 2: g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_outofammo_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); break; } } if( sChoice == "I am hit" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_imhit_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); } m_flNextSoundCAF = g_Engine.time + 2.0; } } private void CAFSocialCallback( CTextMenu@ menu, CBasePlayer@ pPlayer, int iSlot, const CTextMenuItem@ pItem ) { if( pItem !is null & m_flNextSoundCAF < g_Engine.time ) { string sChoice = pItem.m_szName; if( sChoice == "I'm on it" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_imonit_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Thank you" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_thankyou_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Sorry" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_sorry_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Careful" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_careful_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Nice shot" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_niceshot_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Good job" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_goodjob_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Hoo-ah!" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_hoorah_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); } if( sChoice == "Coward!" ) { g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_coward_fa.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_fa.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_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); break; case 2: g_SoundSystem.EmitSoundDyn( pPlayer.edict(), CHAN_VOICE, "combatarms/vma_heysameteam_fa.ogg", 0.75, 0.6, 0, PITCH_NORM ); break; } } m_flNextSoundCAF = g_Engine.time + 2.0; } } } }