// ZEUS!
// Created 5/18/2003

/* CVARS - copy and paste to shconfig.cfg

//Zeus
zeus_level 9
zeus_cooldown 600                // # of seconds for zeus cooldown

*/

#include <amxmodx>
#include <superheromod>

// GLOBAL VARIABLES
new gHeroName[]="Zeus"
new gBetweenRounds
new bool:gHasZeusPowers[SH_MAXSLOTS+1]
//----------------------------------------------------------------------------------------------
public plugin_init()
{
    // Plugin Info
    register_plugin("SUPERHERO Zeus","1.17.5","{HOJ} Batman/JTP10181")

    register_dictionary("sh_zeus.txt")

    // DO NOT EDIT THIS FILE TO CHANGE CVARS, USE THE SHCONFIG.CFG
    register_cvar("zeus_level", "9" )
    register_cvar("zeus_cooldown", "600" ) // Just once!

    // FIRE THE EVENT TO CREATE THIS SUPERHERO!
    shCreateHero(gHeroName, "Raise Dead", "Will Automatically Raise One Fallen Teammate", false, "zeus_level" )

    // REGISTER EVENTS THIS HERO WILL RESPOND TO! (AND SERVER COMMANDS)
    register_event("ResetHUD","zeus_newround","b")
    register_srvcmd("zeus_init", "zeus_init")
    shRegHeroInit(gHeroName, "zeus_init")

    // DEATH
    register_event("DeathMsg", "zeus_death", "a")

    // ROUND EVENTS
    register_logevent("round_start", 2, "1=Round_Start")
    register_logevent("round_end", 2, "1=Round_End")
    register_logevent("round_end", 2, "1&Restart_Round_")
}
//----------------------------------------------------------------------------------------------
public plugin_precache()
{
    precache_sound("ambience/port_suckin1.wav")
}
//----------------------------------------------------------------------------------------------
public zeus_newround(id)
{
    if ( !hasRoundStarted() ) {
        gPlayerUltimateUsed[id] = false
    }
    else {
        gPlayerUltimateUsed[id] = true //dead zeus's loose their zeus...
    }
}
//----------------------------------------------------------------------------------------------
public zeus_init()
{
    // First Argument is an id
    new temp[6]
    read_argv(1,temp,5)
    new id = str_to_num(temp)

    // 2nd Argument is 0 or 1 depending on whether the id has wolverine skills
    read_argv(2,temp,5)
    new hasPowers = str_to_num(temp)

    gHasZeusPowers[id] = (hasPowers != 0)

}
//----------------------------------------------------------------------------------------------
public zeus_death()
{
    new id = read_data(2)

    if ( gBetweenRounds ) return
    if ( !is_user_connected(id) || is_user_alive(id) ) return

    // Look for alive players with unused Zeus Powers on the same team
    for ( new player = 1; player <= SH_MAXSLOTS; player++ ) {
        if ( player != id && is_user_alive(player) && gHasZeusPowers[player] && !gPlayerUltimateUsed[player] && get_user_team(id) == get_user_team(player) ) {
            // We got a Zeus character willing to raise the dead!
            new parm[2]
            parm[0] = id
            parm[1] = player
            set_task(1.0,"zeus_respawn", 0, parm, 2)
            break
        }
    }
}
//----------------------------------------------------------------------------------------------
public zeus_respawn(parm[])
{
    new dead = parm[0]
    new zeus = parm[1]

    if (gPlayerUltimateUsed[zeus] || gBetweenRounds) return
    if ( !is_user_connected(dead) || !is_user_connected(zeus)) return
    if ( !is_user_alive(zeus) || is_user_alive(dead) ) return
    if ( get_user_team(dead) != get_user_team(zeus) ) return

    ultimateTimer(zeus, get_cvar_float("zeus_cooldown"))
    emit_sound(zeus, CHAN_STATIC, "ambience/port_suckin1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
    new zeusName[32],deadName[32]
    get_user_name(zeus,zeusName,31)
    get_user_name(dead,deadName,31)
    client_print(0, print_chat, "%L", LANG_PLAYER, "SH_ZEUS_POWERS", zeusName, deadName )

    //Double spawn prevents the no HUD glitch (hopefully)
    emit_sound(dead, CHAN_STATIC, "ambience/port_suckin1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
    shGlow(dead,255,255,0)
    set_task(3.0, "zeus_unglow", dead+58753)
    set_task(1.0, "zeus_teamcheck", 0, parm, 2)
}
//----------------------------------------------------------------------------------------------
public zeus_unglow(id)
{
    id -= 58753
    shUnglow(id)
}
//----------------------------------------------------------------------------------------------
public zeus_teamcheck(parm[])
{
    new dead = parm[0]
    new zeus = parm[1]

    if ( get_user_team(dead) != get_user_team(zeus) ) {
        client_print(dead, print_chat, "%L", LANG_PLAYER, "SH_ZEUS_CHANGED")
        user_kill(dead,1)
        gPlayerUltimateUsed[zeus] = false
    }
}
//----------------------------------------------------------------------------------------------
public round_start()
{
    gBetweenRounds = false
}
//----------------------------------------------------------------------------------------------
public round_end()
{
    gBetweenRounds = true
}
//----------------------------------------------------------------------------------------------