#include <amxmodx>
#include <fakemeta>
#include <engine>
#include <reapi>

new g_eff_spr_lightning_CT, g_eff_spr_lightning_T
new g_eff_spr_smoke
new g_ThunderSoundPath[] = "ambience/thunder_clap.wav"

public plugin_precache()
{
    g_eff_spr_lightning_CT = precache_model("sprites/lgtning.spr")
    g_eff_spr_lightning_T = precache_model("sprites/lgtningred.spr")
    g_eff_spr_smoke = precache_model("sprites/black_smoke3.spr")
    
    precache_sound(g_ThunderSoundPath)
}

public plugin_init()
{
    register_plugin("Thunder on HS Death", "1.0", "Bhaxx")
    register_event("DeathMsg", "event_death", "a")
}

public event_death()
{
    new victim = read_data(2)
    new attacker = read_data(1)
    new hs = read_data(3)
    
    if (hs != 1)
        return
    
    if (!attacker || !is_user_connected(attacker) || attacker == victim)
        return
    
    new attacker_team = get_user_team(attacker)
    
    new lightning_spr
    new r, g, b
    
    if (attacker_team == 1)
    {
        lightning_spr = g_eff_spr_lightning_T
        r = 255
        g = 50
        b = 50
    }
    else if (attacker_team == 2)
    {
        lightning_spr = g_eff_spr_lightning_CT
        r = 50
        g = 50
        b = 255
    }
    else
    {
        return
    }
    
    new Float:origin[3], Float:endUp[3], Float:endDown[3], trace
    pev(victim, pev_origin, origin)
    
    endUp[0] = origin[0]
    endUp[1] = origin[1]
    endUp[2] = origin[2] + 8192.0
    engfunc(EngFunc_TraceLine, origin, endUp, IGNORE_MONSTERS, victim, trace)
    get_tr2(trace, TR_vecEndPos, endUp)
    
    endDown[0] = origin[0]
    endDown[1] = origin[1]
    endDown[2] = origin[2] - 8192.0
    engfunc(EngFunc_TraceLine, origin, endDown, IGNORE_MONSTERS, victim, trace)
    get_tr2(trace, TR_vecEndPos, endDown)
    
    rg_play_user_sound(attacker, g_ThunderSoundPath, true)
    
    engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origin, 0)
    write_byte(TE_BEAMPOINTS)
    engfunc(EngFunc_WriteCoord, origin[0])
    engfunc(EngFunc_WriteCoord, origin[1])
    engfunc(EngFunc_WriteCoord, origin[2])
    engfunc(EngFunc_WriteCoord, endUp[0])
    engfunc(EngFunc_WriteCoord, endUp[1])
    engfunc(EngFunc_WriteCoord, endUp[2])
    write_short(lightning_spr)
    write_byte(0)
    write_byte(0)
    write_byte(6)
    write_byte(30)
    write_byte(10)
    write_byte(0)
    write_byte(r)
    write_byte(g)
    write_byte(b)
    write_byte(0)
    message_end()
    
    engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origin, 0)
    write_byte(TE_BEAMCYLINDER)
    engfunc(EngFunc_WriteCoord, origin[0])
    engfunc(EngFunc_WriteCoord, origin[1])
    engfunc(EngFunc_WriteCoord, origin[2] - 16.0)
    engfunc(EngFunc_WriteCoord, origin[0])
    engfunc(EngFunc_WriteCoord, origin[1])
    engfunc(EngFunc_WriteCoord, origin[2] + 32.0)
    write_short(lightning_spr)
    write_byte(0)
    write_byte(0)
    write_byte(5)
    write_byte(32)
    write_byte(0)
    write_byte(0)
    write_byte(r)
    write_byte(g)
    write_byte(b)
    write_byte(0)
    message_end()
    
    engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origin, 0)
    write_byte(TE_SMOKE)
    engfunc(EngFunc_WriteCoord, origin[0])
    engfunc(EngFunc_WriteCoord, origin[1])
    engfunc(EngFunc_WriteCoord, origin[2] - 16.0)
    write_short(g_eff_spr_smoke)
    write_byte(7)
    write_byte(30)
    message_end()
    
    engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origin, 0)
    write_byte(TE_WORLDDECAL)
    engfunc(EngFunc_WriteCoord, endDown[0])
    engfunc(EngFunc_WriteCoord, endDown[1])
    engfunc(EngFunc_WriteCoord, endDown[2])
    write_byte(46)
    message_end()
}
