block load
{
    es_xset dan_dayduration 3    //Length of time that server is in day-time mode, in minutes
    es_xset dan_nightduration 2  //Length of time that server is in night-time mode, in minutes
    es_xset dan_sunsetrate 0.4   //Rate of time that sunset takes; must be > 0, low numbers make the transition quick, higher numbers makes the transition slow
    es_xset dan_sunriserate 0.2  //Rate of time that sunrise takes; must be > 0, low numbers make the transition quick, higher numbers makes the transition slow
    es_xset dan_nightdarkness 70 //Percentage of black to use as night-time darkness    

    es_xset dan_darkness 0
    es_xset dan_user 0
    es_xset dan_usery 0
    es_xset dan_isday 1
    es_set dan_minleft server_var(dan_dayduration)
    
    repeat create dan_remindtime "es_xdoblock dayandnight/remind"
    repeat start dan_remindtime 60
    
    repeat create dan_fadeup "es_xdoblock dayandnight/fadeup"
    repeat create dan_fadedown "es_xdoblock dayandnight/fadedown"

    foreach player dan_usery #all "es_xdoblock dayandnight/startup"
    
    es_xmsg #green Day & Night Script Loaded   
}

block startup
{
    if(server_var(dan_user) equalto 0) do
    {
        es_set dan_user server_var(dan_usery)
        es_give server_var(dan_user) env_fog_controller
        es_xdoblock dayandnight/foggy
    }
}

block unload
{
    repeat delete dan_remindtime
    repeat delete dan_fadeup
    repeat delete dan_fadedown
}

event round_start
{
    sv_skyname sky_borealis01
}

event es_map_start
{
    es_xsetinfo skyboxname ""
    es_set skyboxname server_var(sv_skyname)  
    es_set dan_minleft server_var(dan_dayduration)
    es_xset dan_isday 1
    es_xset dan_darkness 0
    es_xdoblock dayandnight/foggy
    repeat start dan_remindtime 60
}

event player_activate
{
    es_give event_var(userid) env_fog_controller
    es_set dan_user event_var(userid)  
    es_xdoblock dayandnight/foggy
}

block switch 
{
    repeat stop dan_remindtime
    if (server_var(dan_isday) equalto 1) do
    {
        es_xset dan_isday 0
        es_set dan_minleft server_var(dan_nightduration)
        es repeat start dan_fadedown server_var(dan_sunsetrate) server_var(dan_nightdarkness)
        es_xmsg #multi #green [Day & Night] #lightgreen **Sunset** Night-time approaching...
    }
    else do
    {
        es_xset dan_isday 1
        es_set dan_minleft server_var(dan_dayduration)
        es repeat start dan_fadeup server_var(dan_sunriserate) server_var(dan_nightdarkness)
        es_xmsg #multi #green [Day & Night] #lightgreen **Sunrise** Day-time approaching...
    }
}

block fadedown
{
    sv_skyname sky_borealis01  
    es_xmath dan_darkness + 1
    es_xdoblock dayandnight/foggy
    if (server_var(dan_darkness) > server_var(dan_nightdarkness)) do
    {
        es_set dan_darkness server_var(dan_nightdarkness)
    }
    if (server_var(dan_darkness) equalto server_var(dan_nightdarkness)) do
    {
        es_delayed 1 repeat start dan_remindtime 60
    }
}

block fadeup
{
    es_set server_var(sv_skyname) skyboxname
    es_xmath dan_darkness - 1    
    es_xdoblock dayandnight/foggy
    sv_skyname sky_borealis01
    if (server_var(dan_darkness) < 0) do
    {
        es_xset dan_darkness 0
    }
    if (server_var(dan_darkness) equalto 0) do
    {
        es_delayed 1 repeat start dan_remindtime 60
    }
}

block remind
{
    es_xmath dan_minleft - 1
    es_xset dan_mode ""
    if (server_var(dan_isday) equalto 1) do
    {
        es_xset dan_mode "sunset..."
    }
    else do
    {
        es_xset dan_mode "sunrise..."
    }
    if (server_var(dan_minleft) > 0) do
    {
        if (server_var(dan_minleft) notequalto 1) do
        {
            es_msg #multi #green [Day & Night] #lightgreen server_var(dan_minleft) minutes until server_var(dan_mode)
        }
        else do
        {
            es_msg #multi #green [Day & Night] #lightgreen 1 minute until server_var(dan_mode)
        }
    }
    else do
    {
        es_xdoblock dayandnight/switch
    }
}

block foggy
{
    es_fire server_var(dan_user) env_fog_controller TurnOff
    es_fire server_var(dan_user) env_fog_controller addoutput "fogcolor 0 0 0,-1,0"   
    es_set dan_fs server_var(dan_darkness)    
    es_xmath dan_fs * -100    
    es_set dan_fe server_var(dan_fs)
    es_xmath dan_fe + 10000    
    es_xset dan_str ""    
    es_xformatv dan_str "fogstart %1,-1,0" dan_fs    
    es_fire server_var(dan_user) env_fog_controller addoutput server_var(dan_str)     
    es_xformatv dan_str "fogend %1,-1,0" dan_fe
    es_fire server_var(dan_user) env_fog_controller addoutput server_var(dan_str)      
    es_fire server_var(dan_user) env_fog_controller TurnOn
}
