#include < amxmodx >
#include < fakemeta >
#include < hamsandwich >

new const PLUGIN_NAME[  ] = "New HUD System( Show AP / HP )";
new const PLUGIN_VERSION[  ] = "1.0";
new const PLUGIN_AUTHOR[  ] = "YONTU";

#define ColorRed        127
#define ColorGreen  255
#define ColorBlue       255

#define SpecColorRed    0
#define SpecColorGreen  200
#define SpecColorBlue   200

// Thanks Aragon for this codes( director HUD )
#define clamp_byte(%1)      ( clamp( %1, 0, 255 ) )
#define pack_color(%1,%2,%3)    ( %3 + ( %2 << 8 ) + ( %1 << 16 ) )

const PEV_SPEC_TARGET = pev_iuser2;

new SyncHudMessage;

new g_cvar_show_type;

public plugin_init(  ) {

    register_plugin( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR );
    register_event( "ResetHUD", "event_ResetHud", "be" );

    RegisterHam( Ham_Spawn, "player", "Ham_PlayerSpawnedPost", 1 );

    g_cvar_show_type = register_cvar( "nhs_show", "1" );

    SyncHudMessage = CreateHudSyncObj(  );
}

public Ham_PlayerSpawnedPost( id )
    if( is_user_connected( id ) )
        set_task( 1.0, "ShowHud", id, _, _, "b" );

public event_ResetHud( id )
    ShowHud( id );

public ShowHud( id ) {

    switch( get_pcvar_num( g_cvar_show_type ) ) {

        case 0: {

            if( is_user_alive( id ) && ( get_user_team( id ) == 1 || get_user_team( id ) == 2 ) ) {

                new szMessage[ 256 ];
                formatex( szMessage, sizeof( szMessage ) - 1,"HP: %d |  Armor: %d", get_user_health( id ), get_user_armor( id ) );

                set_hudmessage( ColorRed, ColorGreen, ColorBlue, 0.02, 0.94, 0, 0.5, 15.0, 2.0, 2.0, -1 );
                ShowSyncHudMsg( id, SyncHudMessage, szMessage );

                set_pdata_int( id, 361, get_pdata_int( id, 361 ) | ( 1<<3 ) );
            }

            else {

                new idSpec;
                new szPlayerName[ 32 ];

                idSpec = pev( id, PEV_SPEC_TARGET );
                get_user_name( idSpec, szPlayerName, 31 );

                set_hudmessage( SpecColorRed, SpecColorGreen, SpecColorBlue, -1.0, 0.7, 0, 0.5, 15.0, 2.0, 2.0, -1 );
                ShowSyncHudMsg( id, SyncHudMessage, "Spectating: %s^nHealth: %d^nArmor: %d", szPlayerName, get_user_health( idSpec ), get_user_armor( idSpec ) );
            }
        }

        case 1: {

            if( is_user_connected( id ) && is_user_alive( id ) && ( get_user_team( id ) == 1 || get_user_team( id ) == 2 ) ) {

                new szMessage[ 256 ];
                formatex( szMessage, sizeof( szMessage ) - 1,"HP: %d |  Armor: %d", get_user_health( id ), get_user_armor( id ) );

                set_hudmessage(ColorRed, ColorGreen, ColorBlue, 0.02, 0.94, 0, _, 1.0);
                show_hudmessage( id, szMessage);

                set_pdata_int( id, 361, get_pdata_int( id, 361 ) | ( 1<<3 ) );
            }

            else {

                new idSpec;
                new szPlayerName[ 32 ];

                idSpec = pev( id, PEV_SPEC_TARGET );
                get_user_name( idSpec, szPlayerName, 31 );

                new szMessage[ 256 ];
                formatex( szMessage, sizeof( szMessage ) - 1,"Spectating: %s^nHealth: %d^nArmor: %d", szPlayerName, get_user_health( idSpec ), get_user_armor( idSpec ) );

                set_hudmessage(SpecColorRed, SpecColorGreen, SpecColorBlue, -1.0, 0.7, 0, _, 1.0 );
                show_hudmessage( id, szMessage);
            }
        }
    }
}