1.cm is kinda pointless, amxx already provide charsmax(), which is esentially the same thing. But for consistency you should use charsmax.
if( is_user_alive( id ) && get_pcvar_num( g_pMode ) )
Checking again get_pcvar_num it's pointless, you will reach here only if it's not 0(you do a check above this line).
set_task( 0.9, "ShowHud", id, _, _, "b" );
Don't create a task for each player, make a global one from a place like init and loop all players inside it. You could use directly 1.0. Also set the hudmessage hold time the same as the task time.But, after all, I am not sure such hud is needed, you can likely let only the message when player buy the power, this should be enough.
4.Remove the stock keyword from your functions.
5.What you do with float_to_num
is silly, look for floatround.
6.AMXX 1.8.3 has a native for colored messages, so you could check the version and decide if you will use your stock or the native.
7.Any specific reasons for defining FALL_DMG given that we already have a DMG_FALL defined in amxx ? So, remove FALL_DMG and use DMG_FALL. Also bitsDamageType == FALL_DMG
should be bitsDamageType & FALL_DMG
8.cs_get_user_team should be retrieved inside no_team_dmg, or ExecuteExplosion(but only one time, so cache this value).
you call again cs_get_user_money, but this value is cached inside CmdDeathFromAbove
10.Add ML, it's easy and make plugin more user friendly.
11.g_pMode cvar check should be done inside CBasePlayer_TakeDamage
and passing the right damage value to ExecuteExplosion. Checking inside ExecuteExplosion and only using the value if the cvar is 1 is weird. This way it will make more sense.
12.You could likely remove the debug messages and the cvar, it's of no use for the end user. Do you have a specific reason for putting them in a released plugin ?
A bunch with which you can start.