block load
{
  // Init variables used by realism
  es_xsetinfo real_exists 0
  es_xsetinfo real_ang1 0
  es_xsetinfo real_ang2 0
  es_xsetinfo real_ang3 0
  es_xsetinfo real_dmg 0
  es_xsetinfo real_health 0
  es_xsetinfo real_weight 0
  es_xsetinfo real_vector 0
  es_xsetinfo real_bandage 0
  es_xsetinfo real_userid 0
  es_xsetinfo real_format 0
  es_xsetinfo real_looping 0
  es_xsetinfo real_speed 0
  es_xsetinfo real_hitgroup 0
  es_xsetinfo real_temp 0
  es_xsetinfo real_temp2 0
  // Define config variables
  es_xsetinfo real_dizziness "1"
  es_xsetinfo real_fadeonhit "1"
  es_xsetinfo real_fadeonstab "1"
  es_xsetinfo real_startfade "25"
  es_xsetinfo real_fadespeed "1.0"
  es_xsetinfo real_startinaccuracy "20"
  es_xsetinfo real_startbreathe "30"
  es_xsetinfo real_startheartbeat "30"
  es_xsetinfo real_startbleed "25"
  es_xsetinfo real_slowdie "1"
  es_xsetinfo real_degenamt "1"
  es_xsetinfo real_miniteration "0.7"
  es_xsetinfo real_bandages "1"
  es_xsetinfo real_bandageamt "1"
  es_xsetinfo real_pushview "1"
  es_xsetinfo real_knife_pitch "0.0"
  es_xsetinfo real_knife_yaw "7.0"
  es_xsetinfo real_knife_roll "7.0"
  es_xsetinfo real_nade_pitch "2.0"
  es_xsetinfo real_nade_yaw "0.0"
  es_xsetinfo real_nade_roll "0.0"
  es_xsetinfo real_falldmg_pitch "2.5"
  es_xsetinfo real_falldmg_yaw "0.0"
  es_xsetinfo real_falldmg_roll "5.0"
  es_xsetinfo real_head_pitch "-0.9"
  es_xsetinfo real_head_yaw "0.0"
  es_xsetinfo real_head_roll "0.0"
  es_xsetinfo real_chest_pitch "-1.0"
  es_xsetinfo real_chest_yaw "0.0"
  es_xsetinfo real_chest_roll "0.0"
  es_xsetinfo real_stomach_pitch "1.0"
  es_xsetinfo real_stomach_yaw "0.0"
  es_xsetinfo real_stomach_roll "0.0"
  es_xsetinfo real_larm_pitch "0.0"
  es_xsetinfo real_larm_yaw "1.3"
  es_xsetinfo real_larm_roll "-1.3"
  es_xsetinfo real_rarm_pitch "0.0"
  es_xsetinfo real_rarm_yaw "-1.3"
  es_xsetinfo real_rarm_roll "1.3"
  es_xsetinfo real_lleg_pitch "1.6"
  es_xsetinfo real_lleg_yaw "1.3"
  es_xsetinfo real_lleg_roll "-1.3"
  es_xsetinfo real_rleg_pitch "1.6"
  es_xsetinfo real_rleg_yaw "-1.3"
  es_xsetinfo real_rleg_roll "1.3"
  es_xsetinfo real_grenaderadius "450"
  es_xsetinfo real_grenadepower "200"
  es_xsetinfo real_dropwep "0"
  es_xsetinfo real_playerspeed "1.15"
  es_xsetinfo real_slowdown "0.15"
  es_xsetinfo real_speedratio "1"
  es_xsetinfo real_speedforce "-90"
  es_xsetinfo real_minspeed "0.1"
  es_xsetinfo real_speedmod_glock "-0.05"
  es_xsetinfo real_speedmod_usp "-0.05"
  es_xsetinfo real_speedmod_p228 "-0.05"
  es_xsetinfo real_speedmod_deagle "-0.07"
  es_xsetinfo real_speedmod_fiveseven "-0.05"
  es_xsetinfo real_speedmod_elite "-0.05"
  es_xsetinfo real_speedmod_m3 "-0.1"
  es_xsetinfo real_speedmod_xm1014 "-0.1"
  es_xsetinfo real_speedmod_tmp "-0.05"
  es_xsetinfo real_speedmod_mac10 "-0.05"
  es_xsetinfo real_speedmod_mp5navy "-0.05"
  es_xsetinfo real_speedmod_ump45 "-0.05"
  es_xsetinfo real_speedmod_p90 "-0.07"
  es_xsetinfo real_speedmod_galil "-0.08"
  es_xsetinfo real_speedmod_famas "-0.08"
  es_xsetinfo real_speedmod_ak47 "-0.08"
  es_xsetinfo real_speedmod_m4a1 "-0.08"
  es_xsetinfo real_speedmod_sg552 "-0.08"
  es_xsetinfo real_speedmod_aug "-0.08"
  es_xsetinfo real_speedmod_scout "-0.1"
  es_xsetinfo real_speedmod_sg550 "-0.25"
  es_xsetinfo real_speedmod_g3sg1 "-0.25"
  es_xsetinfo real_speedmod_awp "-0.3"
  es_xsetinfo real_speedmod_m249 "-0.4"
  es_xsetinfo real_speedmod_hegrenade "-0.01"
  es_xsetinfo real_speedmod_flashbang "-0.01"
  es_xsetinfo real_speedmod_smokegrenade "-0.01"
  es_xsetinfo real_speedmod_c4 "-0.09"
  es_xsetinfo real_speedmod_defuser "-0.03"
  es_xsetinfo real_speedmod_assaultsuit "-0.06"
  // Exec config
  exec realism_config.cfg
  // Make ES pick up 'drop'
  es_setinfo real_cmdprefixes server_var(eventscripts_cmdprefixes)
  es_format eventscripts_cmdprefixes "%1dD" server_var(eventscripts_cmdprefixes)
  // Register client command
  if (server_var(real_bandages) > 0) do
  {
    es_xregclientcmd bandage realism/bandage "Stops a player from bleeding and or black vision"
  }
  // Enable noisy
  es_xdoblock corelib/noisy_on
  // Make public
  es_xsetinfo real_version "1.0.5b"
  es_xmakepublic real_version
  // Announce
  echo [Realism] Loaded
}

block unload
{
  // Return prefixes to how it was before
  es_xcopy eventscripts_cmdprefixes real_cmdprefixes
  // Disable noisy
  es_xdoblock corelib/noisy_off
  // Announce
  echo [Realism] Unloaded
}

event player_activate
{
  es playervar set event_var(userid) real_weight server_var(real_playerspeed)
}

event player_spawn
{
  es playervar set event_var(userid) real_fadeloop 0
  es playervar set event_var(userid) real_bleedloop 0
  es playervar set event_var(userid) real_bandage server_var(real_bandageamt)
  if (server_var(real_heartbeatsound) = 1) do
  {
    es_stopsound event_var(userid) player/heartbeat1.wav
  }
  if (server_var(real_breathesound) = 1) do
  {
    es_stopsound event_var(userid) player/breathe1.wav
  }
  // Set custom speed
  es playervar exists real_exists event_var(userid) real_weight
  if (server_var(real_exists) = 1) do
  {
    es playervar get real_weight event_var(userid) real_weight
    es_setplayerprop event_var(userid) CCSPlayer.baseclass.localdata.m_flLaggedMovementValue server_var(real_weight)
  }
}

event player_hurt
{
  if (event_var(attacker) != 0) do
  {
    if (event_var(health) > 0) do
    {
      if (server_var(real_fadeonhit) = 1) do
      {
        if (event_var(weapon) != knife) do
        {
          // Create fade
          es_xusermsg create real_fade Fade
          es_xusermsg write short real_fade 1000
          es_xusermsg write short real_fade 5
          es_xusermsg write short real_fade 1
          es_xusermsg write byte real_fade 30
          es_xusermsg write byte real_fade 0
          es_xusermsg write byte real_fade 0
          es_xusermsg write byte real_fade 255
          es_usermsg send real_fade event_var(userid) 0
          es_xusermsg delete real_fade
        }
      }
      if (server_var(real_fadeonstab) = 1) do
      {
        if (event_var(weapon) = knife) do
        {
          if (event_var(dmg_health) > 50) do
          {
            // Create fade and play sound
            es_delayed 1 es_xemitsound player event_var(userid) ambient/voices/citizen_beaten3.wav 1.0 0.90
            es_xusermsg create real_fade Fade
            es_xusermsg write short real_fade 1000
            es_xusermsg write short real_fade 500
            es_xusermsg write short real_fade 1
            es_xusermsg write byte real_fade 30
            es_xusermsg write byte real_fade 0
            es_xusermsg write byte real_fade 0
            es_xusermsg write byte real_fade 255
            es_usermsg send real_fade event_var(userid) 0
            es_xusermsg delete real_fade
          }
        }
      }
      if (event_var(health) <= server_var(real_startheartbeat)) do
      {
        es_stopsound event_var(userid) player/heartbeat1.wav
        es_emitsound player event_var(userid) player/heartbeat1.wav 1.0 10
      }
      if (event_var(health) <= server_var(real_startbreathe)) do
      {
        es_stopsound event_var(userid) player/breathe1.wav
        es_emitsound player event_var(userid) player/breathe1.wav 0.8 0.95
      }
      if (event_var(health) <= server_var(real_startfade)) do
      {
        es playervar get real_looping event_var(userid) real_fadeloop
        if (server_var(real_looping) = 0) do
        {
          es playervar get real_bandage event_var(userid) real_bandage
          if (server_var(real_bandage) > 0) do
          {
            if (server_var(real_bandages) = 2) do
            {
              es_tell event_var(userid) By typing 'bandage' in console, you can stop the black vision
            }
            else do
            {
              if (server_var(real_bandages) = 3) do
              {
                es playervar get real_looping event_var(userid) real_bleedloop
                if (server_var(real_looping) = 0) do
                {
                  es_tell event_var(userid) By typing 'bandage' in console, you can stop bleeding and black vision
                }
              }
            }
          }
          es playervar set event_var(userid) real_fadeloop 1
          es_setinfo real_userid event_var(userid)
          es_xdoblock realism/fade
        }
      }
      if (event_var(health) <= server_var(real_startbleed)) do
      {
        es playervar get real_looping event_var(userid) real_bleedloop
        if (server_var(real_looping) = 0) do
        {
          es playervar get real_bandage event_var(userid) real_bandage
          if (server_var(real_bandage) > 0) do
          {
            if (server_var(real_bandages) = 1) do
            {
              es_tell event_var(userid) By typing 'bandage' in console, you can stop the bleeding
            }
            else do
            {
              if (server_var(real_bandages) = 3) do
              {
                es playervar get real_looping event_var(userid) real_fadeloop
                if (server_var(real_looping) = 0) do
                {
                  es_tell event_var(userid) By typing 'bandage' in console, you can stop bleeding and black vision
                }
              }
            }
          }
          es playervar set event_var(userid) real_bleedloop 1
          es_setinfo real_userid event_var(userid)
          es_xdoblock realism/bleed
        }
      }
      if (event_var(health) <= server_var(real_startinaccuracy)) do
      {
        es_setplayerprop event_var(userid) CBasePlayer.m_fFlags 0
      }
      // Hitgroups
      // 1 = Head
      // 2 = Upper Chest
      // 3 = Lower Chest
      // 4 = Left arm
      // 5 = Right arm
      // 6 = Left leg
      // 7 = Right Leg
      if (server_var(real_pushview) = 1) do
      {
        es_getplayerprop real_vector event_var(userid) CCSPlayer.baseclass.localdata.m_Local.m_vecPunchAngle
        es_splitvectorstring real_ang1 real_ang2 real_ang3 server_var(real_vector)
        es_xmath real_ang1 abs
        es_xmath real_ang2 abs
        es_xmath real_ang3 abs
        es_math real_ang1 + server_var(real_ang2)
        es_math real_ang1 + server_var(real_ang3)
        es_token real_ang1 server_var(real_ang1) 1 "."
        if (server_var(real_ang1) < 6) do
        {
          es_setinfo real_hitgroup event_var(hitgroup)
          if (event_var(weapon) = knife) do
          {
            es_setinfo real_hitgroup "knife"
          }
          if (event_var(weapon) = hegrenade) do
          {
            es_setinfo real_hitgroup "nade"
          }
          es_xstring real_hitgroup replace "1" "head"
          es_xstring real_hitgroup replace "2" "chest"
          es_xstring real_hitgroup replace "3" "stomach"
          es_xstring real_hitgroup replace "4" "larm"
          es_xstring real_hitgroup replace "5" "rarm"
          es_xstring real_hitgroup replace "6" "lleg"
          es_xstring real_hitgroup replace "7" "rleg"
          es_format real_ang1 "real_%1_pitch" server_var(real_hitgroup)
          es_format real_ang2 "real_%1_yaw" server_var(real_hitgroup)
          es_format real_ang3 "real_%1_roll" server_var(real_hitgroup)
          es_copy real_ang1 server_var(real_ang1)
          es_copy real_ang2 server_var(real_ang2)
          es_copy real_ang3 server_var(real_ang3)
          es_math real_ang1 * event_var(dmg_health)
          es_math real_ang2 * event_var(dmg_health)
          es_math real_ang3 * event_var(dmg_health)
          if (server_var(real_hitgroup) = head) do
          {
            if (server_var(real_dizziness) = 1) do
            {
              es_xmath real_ang2 + 400
            }
          }
          if (server_var(real_hitgroup) in llegrleg) do
          {
            es_getplayerprop real_speed event_var(userid) CCSPlayer.baseclass.localdata.m_flLaggedMovementValue
            es_math real_speed - server_var(real_slowdown)
            if (server_var(real_speed) <= server_var(real_minspeed)) do
            {
              es_xcopy real_speed real_minspeed
            }
            es_setplayerprop event_var(userid) CCSPlayer.baseclass.localdata.m_flLaggedMovementValue server_var(real_speed)
          }
          if (server_var(real_hitgroup) in larmrarm) do
          {
            if (server_var(real_dropwep) = 1) do
            {
              es_sexec event_var(userid) drop
            }
          }
          es_createvectorstring real_vector server_var(real_ang1) server_var(real_ang2) server_var(real_ang3)
          es_setplayerprop event_var(userid) CCSPlayer.baseclass.localdata.m_Local.m_vecPunchAngle server_var(real_vector)
        }
      }
    }
  }
  else do
  {
    if (server_var(real_pushview) = 1) do
    {
      es_copy real_ang1 real_falldmg_pitch
      es_copy real_ang2 real_falldmg_yaw
      es_copy real_ang3 real_falldmg_roll
      es_math real_ang1 * event_var(dmg_health)
      es_math real_ang2 * event_var(dmg_health)
      es_math real_ang3 * event_var(dmg_health)
      es_createvectorstring real_vector server_var(real_ang1) server_var(real_ang2) server_var(real_ang3)
      es_setplayerprop event_var(userid) CCSPlayer.baseclass.localdata.m_Local.m_vecPunchAngle server_var(real_vector)
    }
    es_getplayerprop real_speed event_var(userid) CCSPlayer.baseclass.localdata.m_flLaggedMovementValue
    es_math real_speed - server_var(real_slowdown)
    if (server_var(real_speed) <= server_var(real_minspeed)) do
    {
      es_xcopy real_speed real_minspeed
    }
    es_setplayerprop event_var(userid) CCSPlayer.baseclass.localdata.m_flLaggedMovementValue server_var(real_speed)
  }
}

event player_death
{
  es playervar set event_var(userid) real_fadeloop 0
  es playervar set event_var(userid) real_bleedloop 0
  es playervar set event_var(userid) real_weight server_var(real_playerspeed)
  if (server_var(real_startheartbeat) > 0) do
  {
    es_stopsound event_var(userid) player/heartbeat1.wav
  }
  if (server_var(real_startbreathe) > 0) do
  {
    es_stopsound event_var(userid) player/breathe1.wav
  }
}

event es_client_command
{
  if (event_var(command) = drop) do
  {
    es_xdoblock realism/drop
  }
}
    
event player_jump
{
  if (server_var(real_speedratio) = 1) do
  {
    es_getplayerprop real_speed event_var(userid) CCSPlayer.baseclass.localdata.m_flLaggedMovementValue
    es_xsetinfo real_temp 1
    es_math real_temp - server_var(real_speed)
    es_math real_temp * server_var(real_speedforce)
    es_createvectorstring real_vector 0 0 server_var(real_temp)
    es_setplayerprop event_var(userid) "CCSPlayer.baseclass.localdata.m_vecBaseVelocity" server_var(real_vector)
  }
}

event weapon_fire
{
  if (event_var(weapon) = "hegrenade") do
  {
    es_xdelayed 0.1 es_xdoblock realism/grenade
  }
}

event item_pickup
{
  es_format real_format "real_speedmod_%1" event_var(item)
  es_exists real_exists variable server_var(real_format)
  if (server_var(real_exists) = 1) do
  {
    es playervar get real_speed event_var(userid) real_weight
    es_math real_speed + server_var(server_var(real_format))
    if (server_var(real_speed) < server_var(real_minspeed)) do
    {
      es_xcopy real_speed real_minspeed
    }
    es playervar set event_var(userid) real_weight server_var(real_speed)
    es_setplayerprop event_var(userid) CCSPlayer.baseclass.localdata.m_flLaggedMovementValue server_var(real_speed)
  }
}

block drop
{
  es_format real_format "real_speedmod_%1" event_var(es_userweapon)
  es_xstring real_format replace weapon_
  es_xstring real_format replace item_
  es_exists real_exists variable server_var(real_format)
  if (server_var(real_exists) = 1) do
  {
    es playervar get real_speed event_var(userid) real_weight
    es_math real_speed - server_var(server_var(real_format))
    if (server_var(real_speed) < server_var(real_minspeed)) do
    {
      es_xcopy real_speed real_minspeed
    }
    es playervar set event_var(userid) real_weight server_var(real_speed)
    es_setplayerprop event_var(userid) CCSPlayer.baseclass.localdata.m_flLaggedMovementValue server_var(real_speed)
  }
}

block bandage
{
  es_getcmduserid real_userid
  es playervar get real_bandage server_var(real_userid) real_bandage
  if (server_var(real_bandage) > 0) do
  {
    es_xmath real_bandage - 1
    es playervar set server_var(real_userid) real_bandage server_var(real_bandage)
    if (server_var(real_bandages) = 1) do
    {
      es playervar set server_var(real_userid) real_bleedloop 0
      es_tell server_var(real_userid) The bandage has stopped the bleeding, but won't hold up if you're shot again
    }
    if (server_var(real_bandages) = 2) do
    {
      es playervar set server_var(real_userid) real_fadeloop 0
      es_tell server_var(real_userid) The bandage has stopped the black vision, but won't hold up if you're shot again
    }
    if (server_var(real_bandages) = 3) do
    {
      es playervar set server_var(real_userid) real_bleedloop 0
      es playervar set server_var(real_userid) real_fadeloop 0
      es_tell server_var(real_userid) The bandage has stopped the bleeding and black vision, but won't hold up if you're shot again
    }
  }
}

block grenade
{
  es_getentityindex real_userid hegrenade_projectile 
  if (server_var(real_grenaderadius) >= 0) do
  {
    es_setindexprop server_var(real_userid) "CBaseCSGrenadeProjectile.baseclass.m_DmgRadius" server_var(real_grenaderadius)
  }
  if (server_var(real_grenadepower) >= 0) do
  {
    es_setindexprop server_var(real_userid) "CBaseCSGrenadeProjectile.baseclass.m_flDamage" server_var(real_grenadepower)
  }
}

block fade
{
  es_exists real_exists userid server_var(real_userid)
  if (server_var(real_exists) = 1) do
  {
    es playervar get real_looping server_var(real_userid) real_fadeloop
    if (server_var(real_looping) = 1) do
    {
      es_delayed server_var(real_fadespeed) es_xsetinfo real_userid server_var(real_userid)
      es_xusermsg create real_fade Fade
      es_xusermsg write short real_fade 1600
      es_xusermsg write short real_fade 20
      es_xusermsg write short real_fade 1
      es_xusermsg write byte real_fade 0
      es_xusermsg write byte real_fade 0
      es_xusermsg write byte real_fade 0
      es_xusermsg write byte real_fade 255
      es_usermsg send real_fade server_var(real_userid) 0
      es_xusermsg delete real_fade
      es_delayed server_var(real_fadespeed) es_xdoblock realism/fade
    }
  }
}

block bleed
{
  es_exists real_exists userid server_var(real_userid)
  if (server_var(real_exists) = 1) do
  {
    es playervar get real_looping server_var(real_userid) real_bleedloop
    if (server_var(real_looping) = 1) do
    {
      es_getplayerprop real_health server_var(real_userid) CCSPlayer.baseclass.m_iHealth
      if (server_var(real_slowdie) = 1) do
      {
        es_math real_health - server_var(real_degenamt)
        es_setplayerprop server_var(real_userid) CCSPlayer.baseclass.m_iHealth server_var(real_health)
        if (server_var(real_health) <= 0) do
        {
          es_sexec server_var(real_userid) kill
        }
      }
      es_xcopy real_temp real_health
      es_xcopy real_temp2 real_startbleed
      es_xmath real_temp float
      es_xmath real_temp * 0.1
      if (server_var(real_temp) < server_var(real_miniteration)) do
      {
        es_xcopy real_temp real_miniteration
      }
      es_math real_temp2 - server_var(real_health)
      es_format real_temp2 "amount %1" server_var(real_temp2)
      es_delayed server_var(real_temp) es_xsetinfo real_userid server_var(real_userid)
      // Get loc
      es_getplayerlocation real_ang1 real_ang2 real_ang3 server_var(real_userid)
      es_format real_format "origin %1 %2 %3" server_var(real_ang1) server_var(real_ang2) server_var(real_ang3)
      es_xtrick entity env_blood
      es_fire server_var(real_userid) env_blood AddOutput "spawnflags 13"
      es_fire server_var(real_userid) env_blood AddOutput "color 0"
      es_fire server_var(real_userid) env_blood AddOutput server_var(real_format)
      es_fire server_var(real_userid) env_blood AddOutput server_var(real_temp2)
      es_fire server_var(real_userid) env_blood EmitBlood
      es_fire server_var(real_userid) env_blood kill
      es_delayed server_var(real_temp) es_xdoblock realism/bleed
    }
  }
}
