//  Matrix Mod: Reloaded v1.0 
//  Written by MBchrono
//  for Counter-Strike: Source
//
// * Requirments
//   1.  Eventscripts v1.5+
//   2.  ES_TOOLS .418+
//
// * Install instructions:
//   1. Install Mattie's EventScripts plugins:
//    http://www.mattie.info/cs/
//
//   2. Install Awuh's ES_Tools:
//    http://forums.mattie.info/cs/forums/viewtopic.php?t=3413
//
//   3. Copy and upload this contents of zip to your cstrike folder
//
//   4. Add the following line somewhere in autoexec.cfg:
//     es_load mb_matrix
//
//   5. Review the config settings in cstrike/cfg/matrix and tweak
//
//   6. For more information, check the readme
// *******************************************

//***********************************************************
//** SETTINGS ARE NO LONGER CONFIGURED WITHIN THIS SCRIPT! **
//***********************************************************
//********************************************************
//** CONFIGURE CHARACTER SETTINGS IN CSTRIKE/CFG/MATRIX **
//********************************************************
//*********************************************************

// *************************
// Script Load and Unload
// *************************
block load
{
  es_xdoblock mb_matrix/declarevars
  exec matrix/matrix_config
  es_xdoblock corelib/noisy_on
  es_xdoblock mb_matrix/keygroups
  es_xdoblock mb_matrix/loadscripts
  es_xdoblock mb_matrix/statloop
  es_xdoblock mb_matrix/dorepeat
  es_xdoblock mb_matrix/downloads
  es_xmsg #multi #lightgreen[Matrix Mod: Reloaded] #defaultHas been activated!
  mp_restartgame 2
  es_xkeygroupsave char |mb_matrix/databases
  est_CvarDelFlag sv_cheats 0 0 0 1 0 0 0 0
  if (server_var(mb_usemodels) == 1) do
  {
    //es_precachemodel mb_smithmodel "player/pil/smith"
  }
}
block statloop
{
  es_xforeachkey mb_loadstats in char "es_xdoblock mb_matrix/loadstats"
}
block loadstats
{
  es_xset mb_formatstats 0
  es_xformatv mb_formatstats "matrix/%1" mb_loadstats
  es exec server_var(mb_formatstats)
  es_keysetvalue char server_var(mb_loadstats) expinterval server_var(mb_expinterval)
  es_keysetvalue char server_var(mb_loadstats) hyperjumplevel server_var(mb_hyperjumplevel)
  es_keysetvalue char server_var(mb_loadstats) dodgelevel server_var(mb_dodgelevel)
  es_keysetvalue char server_var(mb_loadstats) healthlevelmax server_var(mb_healthlevelmax)
  es_keysetvalue char server_var(mb_loadstats) speedlevelmax server_var(mb_speedlevelmax)
  es_keysetvalue char server_var(mb_loadstats) defenselevelmax server_var(mb_defenselevelmax)
  es_keysetvalue char server_var(mb_loadstats) damagelevelmax server_var(mb_damagelevelmax)
  es_keysetvalue char server_var(mb_loadstats) primaryweapon server_var(mb_primaryweapon)
  es_keysetvalue char server_var(mb_loadstats) secondaryweapon server_var(mb_secondaryweapon)
}
block loadscripts
{
  if (server_var(mb_adminmodule) == 1) then es_xload mb_matrix/modules/mb_admin
  if (server_var(mb_anticheatmodule) == 1) then es_xload mb_matrix/modules/mb_anticheat
  if (server_var(mb_hyperjumpmodule) == 1) then es_xload mb_matrix/modules/mb_hyperjump
  es_xload popup
  es_xload mb_matrix/library/menu
  es_xload mb_matrix/library/lib
  es_xload mb_matrix/characters/neo
  es_xload mb_matrix/characters/morpheus
  es_xload mb_matrix/characters/trinity
  es_xload mb_matrix/characters/seraph
  es_xload mb_matrix/characters/ghost
  es_xload mb_matrix/characters/niobe
  es_xload mb_matrix/characters/agent
  es_xload mb_matrix/characters/smith
  es_xload mb_matrix/characters/twin
  es_xload mb_matrix/characters/swat
  es_xload mb_matrix/characters/merovingian
}
block declarevars
{
  es_xset mb_matrixmod_version "v1.0"
  es_xmakepublic mb_matrixmod_version
  es_xset mb_loadstats 0
  es_xset mb_healthlevel 0
  es_xset mb_speedlevel 0
  es_xset mb_damagelevel 0
  es_xset mb_defenselevel 0
  es_xset mb_healthlevelmax 0
  es_xset mb_speedlevelmax 0
  es_xset mb_damagelevelmax 0
  es_xset mb_defenselevelmax 0
  es_xset mb_currentability 0
  es_xset mb_hyperjumplevel 0
  es_xset mb_dodgelevel 0
  es_xset mb_saveloop 1
  es_xset mb_currentweapon 0
  es_xset mb_getteam 0
  es_xset mb_statpoints 0
  es_xset mb_formatname 0
  es_xset mb_formatpoints 0
  es_xset mb_formatmenus 0
  es_xset mb_copyclass 0
  es_xset mb_primaryweapon 0
  es_xset mb_secondaryweapon 0
  es_xset mb_charlevel 0
  es_xset mb_exp 0
  es_xset mb_expnext 0
  es_xset mb_expinterval 0
  es_xset mb_formatchar 0
  es_xset mb_formatxp 0
  es_xset mb_formatcharblock 0
  es_xset mb_focus 0
  es_xset mb_currentclass 0
  es_xset mb_changedclass 0
  es_xset mb_dead 0
  es_xset mb_botclassr 0
  es_xset mb_botclassm 0
  es_xset mb_money 0
  es_xset mb_smithdodge 0
  es_xset mb_randplayer 0
  es_xset mb_dodge 0
  es_xset mb_finalbullet 0
  es_xset mb_bttracer 0
  es_xset mb_roundsound 0
  es_xset mb_ctcount 0
  es_xset mb_tcount 0
  es_xset mb_upgradecheck 0
  es_xset mb_canjump 0
  es_xset mb_hudplayers 0
  es_xset mb_canspawn 0
  es_xset mb_playername 0
  es_xset mb_attackername 0
  es_xset mb_isbot 0
  es_xset mb_attackerbot 0
  es_xset mb_userid 0
  es_xset mb_steamid 0
  es_xset mb_attackerid 0
  es_xset mb_attackersteamid 0
  es_xset mb_exptype 0
  es_xset mb_currentspeed 0
  es_xset mb_currenthealth 0
  es_xset mb_currentarmor 0
  es_xset mb_currentdamage 0
  es_xset mb_ghostability 0
  es_xset mb_niobeability 0
  es_xset mb_niobespeed 0
  es_xset mb_strlen 0
  es_xset mb_section 0
  es_xset mb_copyweapon 0
  es_xset mb_takehp 0
  es_xset mb_maxlevel 0
  es_xset mb_x 0
  es_xset mb_y 0
  es_xset mb_z 0
  es_xset mb_z2 0
  es_xset mb_sx 0
  es_xset mb_sy 0
  es_xset mb_sz 0
  es_xset mb_sx2 0
  es_xset mb_sy2 0
  es_xset mb_sz2 0
  es_xset mb_jx 0
  es_xset mb_jy 0
  es_xset mb_jz 0
  es_xset mb_formatmsg 0
  es_xset mb_count 0
  es_xset mb_focustimer 0
  es_xset mb_checkbomb 0
  es_xset mb_adminmodule 0
  es_xset mb_anticheatmodule 0
  es_xset mb_hyperjumpmodule 0
  es_xset mb_defaultfocus 0
  es_xset mb_focusregentime 0
  es_xset mb_maxfocus 0
  es_xset mb_focusbuy 0
  es_xset mb_defaultstatpoints 0
  es_xset mb_objectives 0
  es_xset mb_loadouts 0
  es_xset mb_characterchangetime 0
  es_xset mb_starthealth 0
  es_xset mb_startspeed 0
  es_xset mb_startarmor 0
  es_xset mb_startdamage 0
  es_xset mb_startexp 0
  es_xset mb_expforfirstlevel 0
  es_xset mb_healthperlevel 0
  es_xset mb_speedperlevel 0
  es_xset mb_armorperlevel 0
  es_xset mb_damageperlevel 0
  es_xset mb_giveprops 0
  es_xset mb_bombplayers 0
  es_xset mb_hostageplayers 0
  es_xset mb_focustime 0
  es_xset mb_randsound 0
  es_xset mb_keyloop 0
  es_xset mb_checklib 0
  es_xset mb_abilityexp 0
  es_xset mb_ability_exp_players 0
  es_xset mb_trimdec 0
  es_xset mb_charload 0
  es_xset mb_focusplayers 0
  es_xset mb_checkrepeat 0
  es_xset mb_regenstatus 0
  es_xset mb_usemodels 0
  es_xset mb_smithmodel 0
  es_xset mb_nx 0
  es_xset mb_ny 0
  es_xset mb_nz 0
  es_xset mb_morpheusspeed 0
  es_xset mb_swatspeed 0
  es_xset mb_nearcoord 0
  es_xset mb_olddebug 0
}
block keygroups
{
  keygroupremove matrix
  keygroupremove char
  keygroupremove morpheus
  keygroupremove trinity
  keygroupremove neo
  keygroupremove seraph
  keygroupremove niobe
  keygroupremove ghost
  keygroupremove agent
  keygroupremove smith
  keygroupremove twin
  keygroupremove merovingian
  keygroupremove swat
  es_xcopy mb_olddebug eventscripts_debug
  es_xset eventscripts_debug -1
  es_xkeygroupload matrix |mb_matrix/databases
  es_xkeygroupload char |mb_matrix/databases
  es_xkeygroupload exp |mb_matrix/databases
  es_xkeygroupload morpheus |mb_matrix/characters/morpheus
  es_xkeygroupload trinity |mb_matrix/characters/trinity
  es_xkeygroupload neo |mb_matrix/characters/neo
  es_xkeygroupload agent |mb_matrix/characters/agent
  es_xkeygroupload smith |mb_matrix/characters/smith
  es_xkeygroupload twin |mb_matrix/characters/twin
  es_xkeygroupload merovingian |mb_matrix/characters/merovingian
  es_xkeygroupload seraph |mb_matrix/characters/seraph
  es_xkeygroupload niobe |mb_matrix/characters/niobe
  es_xkeygroupload ghost |mb_matrix/characters/ghost
  es_xkeygroupload swat |mb_matrix/characters/swat
  es_xcopy eventscripts_debug mb_olddebug
}
block unload  
{
  es_xdoblock mb_matrix/savekeygroup
  es_xunload mb_matrix/characters/neo
  es_xunload mb_matrix/characters/morpheus
  es_xunload mb_matrix/characters/trinity
  es_xunload mb_matrix/characters/seraph
  es_xunload mb_matrix/characters/ghost
  es_xunload mb_matrix/characters/niobe
  es_xunload mb_matrix/characters/agent
  es_xunload mb_matrix/characters/smith
  es_xunload mb_matrix/characters/twin
  es_xunload mb_matrix/characters/swat
  es_xunload mb_matrix/characters/merovingian
  es_xunload mb_matrix/library/lib
  es_xunload mb_matrix/library/menu
  es_xunload mb_matrix/modules/mb_admin
  es_xunload mb_matrix/modules/mb_anticheat
  es_xunload mb_matrix/modules/mb_hyperjump

  keygroupremove matrix
  keygroupremove char
  keygroupremove exp
  keygroupremove morpheus
  keygroupremove trinity
  keygroupremove neo
  keygroupremove seraph
  keygroupremove niobe
  keygroupremove ghost
  keygroupremove agent
  keygroupremove smith
  keygroupremove twin
  keygroupremove merovingian
  keygroupremove swat

  phys_timescale .2
  phys_pushscale 1
  mp_restartgame 5
  sv_bounce 0
  sv_gravity 800
  es_xdoblock corelib/noisy_off

  getrandplayer mb_randplayer #all
  es_fire server_var(mb_randplayer) func_buyzone enable
  es_fire server_var(mb_randplayer) func_bomb_target enable

  popup unsendname rebelmenu #all
  popup unsendname machinemenu #all
  popup unsendname statsmenu #all
  popup unsendname operatormenu #all
  popup unsendname helpmenu #all
  popup unsendname agentmenu #all
  popup unsendname merovingianmenu #all
  popup unsendname itemmenu #all
  popup unsendname commandsmenu #all
  popup unsendname focusmenu #all

  popup delete rebelmenu
  popup delete machinemenu
  popup delete statsmenu
  popup delete operatormenu
  popup delete helpmenu
  popup delete agentmenu
  popup delete merovingianmenu
  popup delete itemmenu
  popup delete commandsmenu
  popup delete focusmenu
  es_xmsg #multi #lightgreen[Matrix Mod: Reloaded] Has been deactivated!
}
// ****************
// Player Events
// ****************
event player_say
{
  if (event_var(text) == !help) do
  {
    es_xdoblock mb_matrix/format_steamid
    es popup send helpmenu server_var(mb_userid)
  }
  if (event_var(text) == !dismiss) do
  {
    es_xdoblock mb_matrix/format_steamid
    es_sexec server_var(mb_userid) "menuselect 10"
    es_tell server_var(mb_userid) #multi #lightgreen[The Architect] #defaultNow press any number key.  If your menus are still messed up, open your console and type: menuselect 10
  }
}
event player_activate
{
  es_xdoblock mb_matrix/format_steamid
  if (server_var(mb_steamid) == "STEAM_0:1:92662") do
  {
    if (server_var(mb_giveprops) == 1) do
    {
      es_xmsg #lightgreen |--------
      es_msg #lightgreen "(The Architect)" event_var(es_username) has joined the game!  Show some respect!
      es_xmsg #lightgreen |--------
      es_xdelayed 2 es_xcexec_all play mb_matrix/mb.mp3
    }
  }
  else do
  {
    es_delayed 2 es_xcexec server_var(mb_userid) play mb_matrix/firstjoin.mp3
  }
  es_cexec server_var(mb_userid) con_enable 1
  es_cexec server_var(mb_userid) cl_autohelp 0
}
event player_spawn
{
  es_xdoblock mb_matrix/format_steamid
  es_xdoblock mb_matrix/hudhint2
  es_xset mb_exists 0
  es_exists mb_exists key matrix server_var(mb_steamid)
  if (server_var(mb_exists) == 0) do
  {
    es_xdoblock mb_matrix/startkey
    if (event_var(es_userteam) == 2) do
    {
      es_keysetvalue matrix server_var(mb_steamid) currentclass morpheus
    }
    if (event_var(es_userteam) == 3) do
    {
      es_keysetvalue matrix server_var(mb_steamid) currentclass agent
    }
  }
  es_xset mb_exists 0
  es_exists mb_exists key matrix server_var(mb_steamid)
  if (server_var(mb_exists) == 1) do
  {
    es_getplayerlocation mb_sx mb_sy mb_sz server_var(mb_userid)
    es_keysetvalue matrix server_var(mb_steamid) smithdodge 0
    es_keygetvalue mb_focus matrix server_var(mb_steamid) focus
    es_keygetvalue mb_currentclass matrix server_var(mb_steamid) currentclass
    es_keygetvalue mb_changedclass matrix server_var(mb_steamid) changedclass
    if (server_var(mb_changedclass) != 0) do
    {
      es_keysetvalue matrix server_var(mb_steamid) currentclass server_var(mb_changedclass)
      es_keysetvalue matrix server_var(mb_steamid) changedclass 0
      es_xcopy mb_currentclass mb_changedclass
    }
    if (server_var(mb_currentclass) == agent) do
    {
      es_keysetvalue matrix server_var(mb_steamid) sx server_var(mb_sx)
      es_keysetvalue matrix server_var(mb_steamid) sy server_var(mb_sy)
      es_keysetvalue matrix server_var(mb_steamid) sz server_var(mb_sz)
    }
    if (server_var(mb_loadouts) == 0) then es_xfire server_var(mb_steamid) func_buyzone enable
    if (server_var(mb_loadouts) == 1) then es_xfire server_var(mb_steamid) func_buyzone disable
    es est_fade server_var(mb_userid) 0 1 .5 0 255 0 200
    es_xdoblock mb_matrix/botclass
    es_xdoblock mb_matrix/removeentities
    es_xdoblock mb_matrix/objectives
    if (event_var(es_userteam) > 1) then es_xdoblock mb_matrix/character_settings
  }
  es est_SetPlayerColor server_var(mb_userid) 255 255 255 255 1
  es_keysetvalue matrix server_var(mb_steamid) focustimer 0
}
event round_start
{
  if (server_var(mb_checklib) == 0) then es_xload mb_matrix/library/lib
  es_xrand mb_roundsound 1 3
  if (server_var(mb_roundsound) == 1) do
  {
    es_xcexec_all play mb_matrix/round1.mp3
  }
  else do
  {
    if (server_var(mb_roundsound) == 2) do
    {
      es_xcexec_all play mb_matrix/round2.mp3
    }
    else do
    {
      if (server_var(mb_roundsound) == 3) do
      {
        es_xcexec_all play mb_matrix/round3.mp3
      }
    }
  }
  est_enable_gravity_reseting 1
  est_enable_weapon_restrictions 1
  es_xset mb_extendchange 1
  es_delayed server_var(mb_characterchangetime) es_xset mb_extendchange 0
  es_xset mb_finalbullet 0
  es_xset mb_randplayer 0
  getrandplayer mb_randplayer #all
  if (server_var(mb_objectives) == 0) do
  {
    es_fire server_var(mb_randplayer) hostage_entity kill
    es_fire server_var(mb_randplayer) func_bomb_target disable
  }
  else do
  {
    es_fire server_var(mb_randplayer) func_bomb_target enable
  }
  if (server_var(mb_loadouts) == 0) then es_xfire server_var(mb_randplayer) func_buyzone enable
  if (server_var(mb_loadouts) == 1) then es_xfire server_var(mb_randplayer) func_buyzone disable
  es_xdelayed 2 es_xmsg #multi #green[Matrix Mod v1.0] #defaultTo perform abilities bind a key to !focus.
  es_xdelayed 3 es_xmsg #multi #green[Matrix Mod v1.0] #defaultTyping !matrix will bring up your character sheet.  Type !help for more info.
}
event player_death
{
  es_xdoblock mb_matrix/format_steamid
  es_xdoblock mb_matrix/format_attackersteamid
  es_xset mb_exists 0
  es_exists mb_exists key matrix server_var(mb_attackersteamid)
  if (server_var(mb_exists) == 1) do
  {
    es_keygetvalue mb_currentclass matrix server_var(mb_attackersteamid) currentclass
    es_xcopy mb_copyclass mb_currentclass
    es_keygetvalue mb_exp server_var(mb_copyclass) server_var(mb_attackersteamid) exp
  }
  if (server_var(mb_userid) != event_var(attacker)) do
  {
    if (event_var(es_userteam) != event_var(es_attackerteam)) do
    {
      if (event_var(headshot) == 0) do
      {
        if (event_var(weapon) == knife) do
        {
          es_xkeygetvalue mb_exptype exp player_kill_knife xp
          es_math mb_exp + server_var(mb_exptype)
          es_tell server_var(mb_attackerid) #multi #lightgreen[Experience] #defaultYou have gained#green server_var(mb_exptype) #defaultexperience #green[Knife Kill]
        }
        else do
        {
          es_xkeygetvalue mb_exptype exp player_kill xp
          es_math mb_exp + server_var(mb_exptype)
          es_tell server_var(mb_attackerid) #multi #lightgreen[Experience] #defaultYou have gained#green server_var(mb_exptype) #defaultexperience #green[Normal Kill]
        }
      }
      else do
      {
        es_xkeygetvalue mb_exptype exp player_kill_headshot xp
        es_math mb_exp + server_var(mb_exptype)
        es_tell server_var(mb_attackerid) #multi #lightgreen[Experience] #defaultYou have gained#green server_var(mb_exptype) #defaultexperience #green[Headshot Kill]
      }
    }
    else do
    {
      es_xkeygetvalue mb_exptype exp player_tk xp
      es_math mb_exp - server_var(mb_exptype)
      es_tell server_var(mb_attackerid) #multi #lightgreen[Experience] #defaultYou have lost#green server_var(mb_exptype) #defaultexperience #green[Teamkilling]
    }
  }
  else do
  {
    es_xkeygetvalue mb_exptype exp player_suicide xp
    es_math mb_exp - server_var(mb_exptype)
    es_tell server_var(mb_userid) #multi #lightgreen[Experience] #defaultYou have lost#green server_var(mb_exptype) #defaultexperience #green[Suicide]
  }
  es_keysetvalue merovingian server_var(mb_steamid) primaryweapon weapon_famas
  es_keysetvalue server_var(mb_copyclass) server_var(mb_attackersteamid) exp server_var(mb_exp)
  es_keygetvalue mb_expnext server_var(mb_copyclass) server_var(mb_attackersteamid) expnext
  es_xcopy mb_steamid mb_attackersteamid
  es_xcopy mb_playername mb_attackername
  es_xcopy mb_userid mb_attackerid
  es_xdoblock mb_matrix/checkxp
  es_xdoblock mb_matrix/bullettime
  es_xdoblock mb_matrix/hudhint
}
event hostage_killed
{
  est_PlayerCount mb_count #a
  if (server_var(mb_count) >= server_var(mb_hostagesplayers)) do
  {
    es_xdoblock mb_matrix/format_steamid
    es_keygetvalue mb_currentclass matrix server_var(mb_steamid) currentclass
    es_xcopy mb_copyclass mb_currentclass
    es_keygetvalue mb_exp server_var(mb_copyclass) server_var(mb_steamid) exp
    es_xkeygetvalue mb_exptype exp hostage_kill xp
    es_math mb_exp - server_var(mb_exptype)
    es_keysetvalue server_var(mb_copyclass) server_var(mb_steamid) exp server_var(mb_exp)
    es_keygetvalue mb_expnext server_var(mb_copyclass) server_var(mb_steamid) expnext
    es_xdoblock mb_matrix/checkxp
    es_tell server_var(mb_userid) #multi #lightgreen[Experience] #defaultYou have lost#green server_var(mb_exptype) #defaultexperience #green[Hostage Killed]
    es_xdoblock mb_matrix/hudhint
  }
  else do
  {
    es_msg #multi #lightgreen[Failure] #defaultYou cannot lose experience from hostages unless there are server_var(mb_hostageplayers) players in the server.
  }
}
event bomb_planted
{
  est_PlayerCount mb_count #a
  if (server_var(mb_count) >= server_var(mb_bombplayers)) do
  {
    es_xdoblock mb_matrix/format_steamid
    es_keygetvalue mb_currentclass matrix server_var(mb_steamid) currentclass
    es_xcopy mb_copyclass mb_currentclass
    es_keygetvalue mb_exp server_var(mb_copyclass) server_var(mb_steamid) exp
    es_xkeygetvalue mb_exptype exp bomb_plant xp
    es_math mb_exp + server_var(mb_exptype)
    es_keysetvalue server_var(mb_copyclass) server_var(mb_steamid) exp server_var(mb_exp)
    es_keygetvalue mb_expnext server_var(mb_copyclass) server_var(mb_steamid) expnext
    es_xdoblock mb_matrix/checkxp
    es_tell server_var(mb_userid) #multi #lightgreen[Experience] #defaultYou have gained#green server_var(mb_exptype) #defaultexperience #green[Bomb Planted]
    es_xdoblock mb_matrix/hudhint
  }
  else do
  {
    es_msg #multi #lightgreen[Failure] #defaultYou cannot gain experience from bomb plants unless there are#green server_var(mb_bombplayers) #defaultplayers in the server.
  }
}
event bomb_defused
{
  es_xdoblock mb_matrix/format_steamid
  es_keygetvalue mb_currentclass matrix server_var(mb_steamid) currentclass
  es_xcopy mb_copyclass mb_currentclass
  es_keygetvalue mb_exp server_var(mb_copyclass) server_var(mb_steamid) exp
  es_xkeygetvalue mb_exptype exp bomb_defuse xp
  es_math mb_exp + server_var(mb_exptype)
  es_keysetvalue server_var(mb_copyclass) server_var(mb_steamid) exp server_var(mb_exp)
  es_keygetvalue mb_expnext server_var(mb_copyclass) server_var(mb_steamid) expnext
  es_xdoblock mb_matrix/checkxp
  es_tell server_var(mb_userid) #multi #lightgreen[Experience] #defaultYou have gained#green server_var(mb_exptype) #defaultexperience #green[Bomb Defused]
  es_xdoblock mb_matrix/hudhint
}
event hostage_rescued
{
  est_PlayerCount mb_count #a
  if (server_var(mb_count) >= server_var(mb_hostagesplayers)) do
  {
    es_xdoblock mb_matrix/format_steamid
    es_keygetvalue mb_currentclass matrix server_var(mb_steamid) currentclass
    es_xcopy mb_copyclass mb_currentclass
    es_keygetvalue mb_exp server_var(mb_copyclass) server_var(mb_steamid) exp
    es_xkeygetvalue mb_exptype exp hostage_rescue xp
    es_math mb_exp + server_var(mb_exptype)
    es_keysetvalue server_var(mb_copyclass) server_var(mb_steamid) exp server_var(mb_exp)
    es_keygetvalue mb_expnext server_var(mb_copyclass) server_var(mb_steamid) expnext
    es_xdoblock mb_matrix/checkxp
    es_tell server_var(mb_userid) #multi #lightgreen[Experience] #defaultYou have gained#green server_var(mb_exptype) #defaultexperience #green[Hostage Rescued]
    es_xdoblock mb_matrix/hudhint
  }
  else do
  {
    es_msg #multi #lightgreen[Failure] #defaultYou cannot gain experience from hostages unless there are server_var(mb_hostageplayers) players in the server.
  }
}
event player_hurt
{
  es_xdoblock mb_matrix/format_steamid
  es_xdoblock mb_matrix/format_attackersteamid
  es_xdoblock mb_matrix/dodge
  if (event_var(weapon) == knife) then es_xdoblock mb_matrix/knifecal
  if (event_var(weapon) == hegrenade) then est_shake server_var(mb_userid) 7 20 35
}
event player_team
{
  if (event_var(disconnect) = 0) do
  {
    es_xdoblock mb_matrix/format_steamid
    es_sexec server_var(mb_userid) "menuselect 10"
    es_xset mb_exists 0
    es_exists mb_exists key matrix server_var(mb_steamid)
    if (server_var(mb_exists) == 1) do
    {
      if (event_var(team) == 2) do
      {
        es_keysetvalue matrix server_var(mb_steamid) currentclass morpheus
        es_delayed .5 popup send rebelmenu server_var(mb_userid)
      }
      if (event_var(team) == 3) do
      {
        es_keysetvalue matrix server_var(mb_steamid) currentclass agent
        es_delayed .5 popup send machinemenu server_var(mb_userid)
      }
    }
  }
}
event weapon_fire
{
  if (server_var(mb_bttracer) == 1) do
  {
    es est_GetGunCoord event_var(userid) mb_x mb_y mb_z
  }
}
event bullet_impact
{
  if (server_var(mb_bttracer) == 1) do
  {
    es_xmath mb_z - 4
    es est_Effect 3 #a 0 "sprites/lgtning.vmt" event_var(x) event_var(y) event_var(z) server_var(mb_x) server_var(mb_y) server_var(mb_z) 1 1 1 125 125 125 125
    es est_Effect 3 #a 0 "effects/gunshiptracer.vmt" event_var(x) event_var(y) event_var(z) server_var(mb_x) server_var(mb_y) server_var(mb_z) 1 5 5 125 125 125 125
  }
}
event hegrenade_detonate
{
  es est_effect 10 #a 0 "sprites/lgtning.vmt" event_var(x) event_var(y) event_var(z) 0 125 1 1 1 1 0 255 0 255 0
  es_delayed .2 es est_effect 10 #a 0 "sprites/lgtning.vmt" event_var(x) event_var(y) event_var(z) 0 125 1 1 1 1 0 255 0 255 0
  es_delayed .4 es est_effect 10 #a 0 "sprites/lgtning.vmt" event_var(x) event_var(y) event_var(z) 0 125 1 1 1 1 0 255 0 255 0
}
event round_end
{
  if (server_var(mb_saveloop) == 13) then es_xset mb_saveloop 1
  if (server_var(mb_saveloop) == 1) then es_xkeygroupsave swat |mb_matrix/characters/swat
  if (server_var(mb_saveloop) == 2) then es_xkeygroupsave morpheus |mb_matrix/characters/morpheus
  if (server_var(mb_saveloop) == 3) then es_xkeygroupsave trinity |mb_matrix/characters/trinity
  if (server_var(mb_saveloop) == 4) then es_xkeygroupsave neo |mb_matrix/characters/neo
  if (server_var(mb_saveloop) == 5) then es_xkeygroupsave agent |mb_matrix/characters/agent
  if (server_var(mb_saveloop) == 6) then es_xkeygroupsave smith |mb_matrix/characters/smith
  if (server_var(mb_saveloop) == 7) then es_xkeygroupsave twin |mb_matrix/characters/twin
  if (server_var(mb_saveloop) == 8) then es_xkeygroupsave merovingian |mb_matrix/characters/merovingian
  if (server_var(mb_saveloop) == 9) then es_xkeygroupsave seraph |mb_matrix/characters/seraph
  if (server_var(mb_saveloop) == 10) then es_xkeygroupsave niobe |mb_matrix/characters/niobe
  if (server_var(mb_saveloop) == 11) then es_xkeygroupsave ghost |mb_matrix/characters/ghost
  if (server_var(mb_saveloop) == 12) then es_xkeygroupsave matrix |mb_matrix/databases
  es_xmath mb_saveloop + 1
  es_xmsg #multi #green[Matrix Mod: Reloaded] #defaultCharacter database has been saved!
}
// ****************
// Custom Blocks
// ****************
block startkey
{
  es_xset mb_exists 0
  es_exists mb_exists key matrix server_var(mb_steamid)
  if (server_var(mb_exists) == 0) do
  {
    es_keycreate matrix server_var(mb_steamid)
    es_keysetvalue matrix server_var(mb_steamid) smithdodge 0
    es_keysetvalue matrix server_var(mb_steamid) changedclass 0
    es_keysetvalue matrix server_var(mb_steamid) currentclass 0
    es_keysetvalue matrix server_var(mb_steamid) canjump 1
    es_keysetvalue matrix server_var(mb_steamid) sx 0
    es_keysetvalue matrix server_var(mb_steamid) sy 0
    es_keysetvalue matrix server_var(mb_steamid) sz 0
    es_keysetvalue matrix server_var(mb_steamid) focus server_var(mb_defaultfocus)
    es_keysetvalue matrix server_var(mb_steamid) canspawn 0
    es_keysetvalue matrix server_var(mb_steamid) focustimer 0
  }
  es_xforeachkey mb_keyloop in char "es_xdoblock mb_matrix/createcharkeys"
  es_keysetvalue agent server_var(mb_steamid) currentability MAX
}
block createcharkeys
{
  es_xset mb_exists 0
  es_exists mb_exists key server_var(mb_keyloop) server_var(mb_steamid)
  if (server_var(mb_exists) == 0) do
  {
    es_keycreate server_var(mb_keyloop) server_var(mb_steamid)
    es_keysetvalue server_var(mb_keyloop) server_var(mb_steamid) exp 0
    es_keysetvalue server_var(mb_keyloop) server_var(mb_steamid) expnext server_var(mb_expforfirstlevel)
    es_keysetvalue server_var(mb_keyloop) server_var(mb_steamid) charlevel 1
    es_keysetvalue server_var(mb_keyloop) server_var(mb_steamid) healthlevel 0
    es_keysetvalue server_var(mb_keyloop) server_var(mb_steamid) speedlevel 0
    es_keysetvalue server_var(mb_keyloop) server_var(mb_steamid) damagelevel 0
    es_keysetvalue server_var(mb_keyloop) server_var(mb_steamid) defenselevel 0
    es_keysetvalue server_var(mb_keyloop) server_var(mb_steamid) currentability 1
    es_keysetvalue server_var(mb_keyloop) server_var(mb_steamid) abilityexp 0.0
    es_keysetvalue server_var(mb_keyloop) server_var(mb_steamid) currentspeed server_var(mb_startspeed)
    es_keysetvalue server_var(mb_keyloop) server_var(mb_steamid) currenthealth server_var(mb_starthealth)
    es_keysetvalue server_var(mb_keyloop) server_var(mb_steamid) currentarmor server_var(mb_startarmor)
    es_keysetvalue server_var(mb_keyloop) server_var(mb_steamid) currentdamage server_var(mb_startdamage)
    es_keysetvalue server_var(mb_keyloop) server_var(mb_steamid) statpoints server_var(mb_defaultstatpoints)
    es_keygetvalue mb_expinterval Char server_var(mb_keyloop) expinterval
    es_keysetvalue server_var(mb_keyloop) server_var(mb_steamid) expinterval server_var(mb_expinterval)
    es_keygetvalue mb_healthlevelmax Char server_var(mb_keyloop) healthlevelmax
    es_keysetvalue server_var(mb_keyloop) server_var(mb_steamid) healthlevelmax server_var(mb_healthlevelmax)
    es_keygetvalue mb_speedlevelmax Char server_var(mb_keyloop) speedlevelmax
    es_keysetvalue server_var(mb_keyloop) server_var(mb_steamid) speedlevelmax server_var(mb_speedlevelmax)
    es_keygetvalue mb_damagelevelmax Char server_var(mb_keyloop) damagelevelmax
    es_keysetvalue server_var(mb_keyloop) server_var(mb_steamid) damagelevelmax server_var(mb_damagelevelmax)
    es_keygetvalue mb_defenselevelmax Char server_var(mb_keyloop) defenselevelmax
    es_keysetvalue server_var(mb_keyloop) server_var(mb_steamid) defenselevelmax server_var(mb_defenselevelmax)
    es_keygetvalue mb_hyperjumplevel Char server_var(mb_keyloop) hyperjumplevel
    es_keysetvalue server_var(mb_keyloop) server_var(mb_steamid) hyperjumplevel server_var(mb_hyperjumplevel)
    es_keygetvalue mb_dodgelevel Char server_var(mb_keyloop) dodgelevel
    es_keysetvalue server_var(mb_keyloop) server_var(mb_steamid) dodgelevel server_var(mb_dodgelevel)
    es_keygetvalue mb_primaryweapon Char server_var(mb_keyloop) primaryweapon
    es_keysetvalue server_var(mb_keyloop) server_var(mb_steamid) primaryweapon server_var(mb_primaryweapon)
    es_keygetvalue mb_secondaryweapon Char server_var(mb_keyloop) secondaryweapon
    es_keysetvalue server_var(mb_keyloop) server_var(mb_steamid) secondaryweapon server_var(mb_secondaryweapon)
  }
}
block botclass
{
  if ("BOT" in server_var(mb_steamid)) do
  {
    if (event_var(es_userteam) == 2) do
    {
      es_xrand mb_botclassr 1 6
      if (server_var(mb_botclassr) == 1) then es_xkeysetvalue matrix server_var(mb_steamid) currentclass morpheus
      if (server_var(mb_botclassr) == 2) then es_xkeysetvalue matrix server_var(mb_steamid) currentclass trinity
      if (server_var(mb_botclassr) == 3) then es_xkeysetvalue matrix server_var(mb_steamid) currentclass neo
      if (server_var(mb_botclassr) == 4) then es_xkeysetvalue matrix server_var(mb_steamid) currentclass niobe
      if (server_var(mb_botclassr) == 5) then es_xkeysetvalue matrix server_var(mb_steamid) currentclass ghost
      if (server_var(mb_botclassr) == 6) then es_xkeysetvalue matrix server_var(mb_steamid) currentclass seraph
    }
    if (event_var(es_userteam) == 3) do
    {
      es_xrand mb_botclassm 1 5
      if (server_var(mb_botclassm) == 1) then es_xkeysetvalue matrix server_var(mb_steamid) currentclass smith
      if (server_var(mb_botclassm) == 2) then es_xkeysetvalue matrix server_var(mb_steamid) currentclass merovingian
      if (server_var(mb_botclassm) == 3) then es_xkeysetvalue matrix server_var(mb_steamid) currentclass twin
      if (server_var(mb_botclassm) == 4) then es_xkeysetvalue matrix server_var(mb_steamid) currentclass agent
      if (server_var(mb_botclassm) == 5) then es_xkeysetvalue matrix server_var(mb_steamid) currentclass swat
    }
  }
}
block objectives
{
  if (server_var(mb_objectives) == 0) do
  {
    es_fire server_var(mb_userid) hostage_entity kill
    es_fire server_var(mb_userid) func_bomb_target disable
  }
}
block savekeygroup
{
  es_xkeygroupsave matrix |mb_matrix/databases
  es_xkeygroupsave morpheus |mb_matrix/characters/morpheus
  es_xkeygroupsave trinity |mb_matrix/characters/trinity
  es_xkeygroupsave neo |mb_matrix/characters/neo
  es_xkeygroupsave agent |mb_matrix/characters/agent
  es_xkeygroupsave smith |mb_matrix/characters/smith
  es_xkeygroupsave twin |mb_matrix/characters/twin
  es_xkeygroupsave merovingian |mb_matrix/characters/merovingian
  es_xkeygroupsave seraph |mb_matrix/characters/seraph
  es_xkeygroupsave niobe |mb_matrix/characters/niobe
  es_xkeygroupsave ghost |mb_matrix/characters/ghost
  es_xkeygroupsave swat |mb_matrix/characters/swat
}
block checkxp
{
  if (server_var(mb_exp) >= server_var(mb_expnext)) then es_xdoblock mb_matrix/levelup
}
block levelup
{
  es_keygetvalue mb_statpoints server_var(mb_copyclass) server_var(mb_steamid) statpoints
  es_keygetvalue mb_charlevel server_var(mb_copyclass) server_var(mb_steamid) charlevel
  es_keygetvalue mb_expnext server_var(mb_copyclass) server_var(mb_steamid) expnext
  es_keygetvalue mb_expinterval server_var(mb_copyclass) server_var(mb_steamid) expinterval
  es_xmath mb_statpoints + 1
  es_xmath mb_charlevel + 1
  es_math mb_exp - server_var(mb_expnext)
  es_math mb_expnext + server_var(mb_expinterval)
  es_keysetvalue server_var(mb_copyclass) server_var(mb_steamid) exp server_var(mb_exp)
  es_keysetvalue server_var(mb_copyclass) server_var(mb_steamid) expnext server_var(mb_expnext)
  es_keysetvalue server_var(mb_copyclass) server_var(mb_steamid) charlevel server_var(mb_charlevel)
  es_keysetvalue server_var(mb_copyclass) server_var(mb_steamid) statpoints server_var(mb_statpoints)
  es_delayed .2 es_xmsg #multi #lightgreen[LEVEL UP] #default server_var(mb_playername) is now#green server_var(mb_copyclass) #defaultlevel#green server_var(mb_charlevel)
  es_emitsound player server_var(mb_userid) ambient/levels/citadel/weapon_disintegrate1.wav 1.0 1.0
  es_xdoblock mb_matrix/checkxp
}
block bullettime
{
  est_removeidle weapon
  est_PlayerCount mb_tcount #c!d
  est_PlayerCount mb_ctcount #t!d
  es_xset mb_finalbullet 0
  es_xset mb_exists 0
  es_keygetvalue mb_canspawn matrix server_var(mb_steamid) canspawn
  if (server_var(mb_tcount) == 0) then es_xset mb_finalbullet 1
  if (server_var(mb_ctcount) == 0) then es_xset mb_finalbullet 1
  if (server_var(mb_finalbullet) == 1) do
  {
    es_xdoblock mb_matrix/bullettime2
    if (server_var(mb_canspawn) == 1) do
    {
      es_delayed 1 es_xtell server_var(mb_userid) #multi #lightgreen[Architect] #defaultYour body reconstruction did not activate because you were the last player killed!  You still have it though!
    }
  }
  else do
  {
    if (event_var(weapon) == hegrenade) then es_xdoblock mb_matrix/bullettime2
    if (server_var(mb_canspawn) == 1) do
    {
      es est_spawn server_var(mb_userid)
      es_keysetvalue matrix server_var(mb_steamid) canspawn 0
    }
  }
}
block bullettime2
{
  es_xcexec_all play mb_matrix/enter.mp3
  sv_cheats 1
  host_timescale .2
  es_xset mb_bttracer 1
  es_xdelayed 3.5 es_xcexec_all play mb_matrix/exit.mp3
  es_xdelayed 5 sv_cheats 0
  es_xdelayed 5 es_xset mb_bttracer 0
  es_xdelayed 5 host_timescale 1
}
block knifecal
{
  es_keygetvalue mb_currentclass matrix server_var(mb_attackersteamid) currentclass
  es_xcopy mb_copyclass mb_currentclass
  es_keygetvalue mb_currentdamage server_var(mb_copyclass) server_var(mb_attackersteamid) currentdamage
  es est_health server_var(mb_userid) - server_var(mb_currentdamage)
  es_getplayerprop mb_takehp server_var(mb_userid) "CCSPlayer.baseclass.m_iHealth"
  if (server_var(mb_takehp) <= 0) then es_xsetplayerprop server_var(mb_userid) CCSPlayer.baseclass.m_iHealth 1
}
block character_settings
{
  es_xcopy mb_copyclass mb_currentclass
  es_keygetvalue mb_charlevel server_var(mb_copyclass) server_var(mb_steamid) charlevel
  es_keygetvalue mb_exp server_var(mb_copyclass) server_var(mb_steamid) exp
  es_keygetvalue mb_expnext server_var(mb_copyclass) server_var(mb_steamid) expnext
  es_keygetvalue mb_currenthealth server_var(mb_copyclass) server_var(mb_steamid) currenthealth
  es_keygetvalue mb_currentspeed server_var(mb_copyclass) server_var(mb_steamid) currentspeed
  es_keygetvalue mb_currentarmor server_var(mb_copyclass) server_var(mb_steamid) currentarmor
  es_keygetvalue mb_primaryweapon server_var(mb_copyclass) server_var(mb_steamid) primaryweapon
  es_keygetvalue mb_secondaryweapon server_var(mb_copyclass) server_var(mb_steamid) secondaryweapon
  if (server_var(mb_loadouts) == 1) do
  {
    if (server_var(mb_objectives) == 1) do
    {
      es est_isbomber mb_checkbomb server_var(mb_userid)
      if (server_var(mb_checkbomb) == 1) do
      {
        es_give server_var(mb_userid) weapon_c4
      }
    }
    es est_stripplayer server_var(mb_userid) 1
    if (server_var(mb_currentclass) == Swat) do
    {
      es est_setgravity server_var(mb_userid) 1.5
      es_give server_var(mb_userid) item_assaultsuit
      es_give server_var(mb_userid) server_var(mb_primaryweapon)
      es_give server_var(mb_userid) server_var(mb_secondaryweapon)
      es_give server_var(mb_userid) weapon_hegrenade
      es_give server_var(mb_userid) weapon_flashbang
      es_give server_var(mb_userid) weapon_smokegrenade
      es_give server_var(mb_userid) weapon_knife
    }
    else do
    {
      es est_setgravity server_var(mb_userid) 1
      es_give server_var(mb_userid) item_assaultsuit
      es_give server_var(mb_userid) server_var(mb_primaryweapon)
      es_give server_var(mb_userid) server_var(mb_secondaryweapon)
      es_give server_var(mb_userid) weapon_hegrenade
      es_give server_var(mb_userid) weapon_knife
    }
  }
  if (server_var(mb_usemodels) == 1) do
  {
    if (server_var(mb_currentclass) == smith) do
    {
      es playerset model server_var(mb_userid) "player/pil/smith/smith.mdl"
    }
  }
  es est_setammo server_var(mb_userid) 1 1000
  es est_setammo server_var(mb_userid) 2 1000
  es est_sethealth server_var(mb_userid) server_var(mb_currenthealth)
  es est_speed server_var(mb_userid) server_var(mb_currentspeed)
  es est_setarmor server_var(mb_userid) server_var(mb_currentarmor)
  es_xformatv mb_formatchar "[%1] You are level %2 --- EXP: %3/%4" mb_copyclass mb_charlevel mb_exp mb_expnext
  es_tell server_var(mb_userid) #lightgreen server_var(mb_formatchar)
}
block dodge
{
  es_keygetvalue mb_currentclass matrix server_var(mb_steamid) currentclass
  es_xcopy mb_copyclass mb_currentclass
  es_keygetvalue mb_smithdodge matrix server_var(mb_steamid) smithdodge
  es_keygetvalue mb_dodgelevel server_var(mb_copyclass) server_var(mb_steamid) dodgelevel
  es_rand mb_dodge 1 server_var(mb_dodgelevel)
  if (server_var(mb_smithdodge) == 0) do
  {
    if (server_var(mb_dodge) == 1) do
    {
      es est_health server_var(mb_userid) + event_var(dmg_health)
      if (event_var(health) > 0) do
      {
        es_xrand mb_randsound 3 5
        es_xdoblock mb_matrix/randsound
        es_tell server_var(mb_userid) #multi #lightgreen[Dodge] #defaultYou have avoided an attack.

      }
      else do
      {
        es_tell server_var(mb_userid) #multi #lightgreen[Dodge Failure] #defaultYour attepmt to dodge an attack has failed.
      }
    }
  }
}
block randsound
{
  if (server_var(mb_randsound) == 3) do
  {
    es_cexec server_var(mb_userid) play weapons/fx/nearmiss/bulletLtoR03
  }
  else do
  {
    if (server_var(mb_randsound) == 4) do
    {
      es_cexec server_var(mb_userid) play weapons/fx/nearmiss/bulletLtoR04
    }
    else do
    {
      if (server_var(mb_randsound) == 5) do
      {
        es_cexec server_var(mb_userid) play weapons/fx/nearmiss/bulletLtoR05
      }
    }
  }
}
block hudhint2
{
  es_xset mb_exists 0
  es_exists mb_exists key matrix server_var(mb_steamid)
  if (server_var(mb_exists) == 1) do
  {
    es_keygetvalue mb_currentclass matrix server_var(mb_steamid) currentclass
    es_keygetvalue mb_focus matrix server_var(mb_steamid) focus
    es_set mb_copyclass server_var(mb_currentclass)
  }
  es_xset mb_exists 0
  es_exists mb_exists key server_var(mb_copyclass) server_var(mb_steamid)
  if (server_var(mb_exists) == 1) do
  {
    es_keygetvalue mb_exp server_var(mb_copyclass) server_var(mb_steamid) exp
    es_keygetvalue mb_statpoints server_var(mb_copyclass) server_var(mb_steamid) statpoints
    es_keygetvalue mb_expnext server_var(mb_copyclass) server_var(mb_steamid) expnext
    es_xset mb_tillnext 0
    es_xcopy mb_tillnext mb_expnext
    es_math mb_tillnext - server_var(mb_exp)
    es_xformatv mb_hudmsg " You have %1 Focus -- %2 Stat Points\n%3 EXP till next level" mb_focus mb_statpoints mb_tillnext
    es_xusermsg create abilityhudhint HintText
    es_usermsg write string abilityhudhint server_var(mb_hudmsg)
    es_usermsg send abilityhudhint server_var(mb_userid) 0
    es_xusermsg delete abilityhudhint
  }
}
block removeentities
{
  if (server_var(mb_objectives) == 0) do
  {
    es_xremove weapon_c4
    es_xremove hostage_entity
  }
  est_removeidle item
  est_removeidle ammo
}
block checksound
{
  if (server_var(mb_currentability) == 4) then es_xdelayed 3 es_xcexec_all play mb_matrix/exit.mp3
  if (server_var(mb_currentability) == 5) then es_xdelayed 3 es_xcexec_all play mb_matrix/exit.mp3
}
block format_steamid
{
  es_set mb_userid event_var(userid)
  es_getplayername mb_playername server_var(mb_userid)
  es uniqueid mb_steamid server_var(mb_userid) 1
}
block format_attackersteamid
{
  es_getuserid mb_attackerid event_var(attacker)
  es_getplayername mb_attackername server_var(mb_attackerid)
  es uniqueid mb_attackersteamid server_var(mb_attackerid) 1
}
block format_command_steamid
{
  es_getplayername mb_playername server_var(mb_userid)
  es uniqueid mb_steamid server_var(mb_userid) 1
}
block focusregen
{
  foreach player mb_focusplayers #alive "es_xdoblock mb_matrix/focusregen2"
  es_xdoblock mb_matrix/hudhint2
}
block focusregen2
{
  es_getplayersteamid mb_steamid server_var(mb_focusplayers)
  es_keygetvalue mb_focus matrix server_var(mb_steamid) focus
  if (server_var(mb_focus) < server_var(mb_maxfocus)) do
  {
    es_xmath mb_focus + 1
    es_keysetvalue matrix server_var(mb_steamid) focus server_var(mb_focus)
    es_tell server_var(mb_focusplayers) #multi #green[Focus Increase] #defaultYou have regenerated #green1 #defaultfocus.  Current Focus:#green server_var(mb_focus)
  }
  if (server_var(mb_focus) >= server_var(mb_maxfocus)) do
  {
    es_tell server_var(mb_focusplayers) #multi #green[Focus Max] #defaultYou are at #greenMAX #defaultfocus.  You cannot regenerate anymore.  Current Focus:#green server_var(mb_focus)
  }
}
block dorepeat
{
  repeat status mb_checkrepeat focusregen
  if (server_var(mb_checkrepeat) == 0) do
  {
    repeat create focusregen "es_xdoblock mb_matrix/focusregen"
    es_delayed 1 repeat start focusregen server_var(mb_focusregentime)
  }
}
block downloads
{
  downloadable sound/mb_matrix/enter.mp3
  downloadable sound/mb_matrix/exit.mp3
  downloadable sound/mb_matrix/firstjoin.mp3
  downloadable sound/mb_matrix/round1.mp3
  downloadable sound/mb_matrix/round2.mp3
  downloadable sound/mb_matrix/round3.mp3
  downloadable sound/mb_matrix/mb.mp3

  if (server_var(mb_usemodels) == NOTAVAILABLE) do
  {
    downloadable "models/player/pil/smith/smith.mdl"
    downloadable "models/player/pil/smith/smith.dx80.vtx"
    downloadable "models/player/pil/smith/smith.dx90.vtx"
    downloadable "models/player/pil/smith/smith.phy"
    downloadable "models/player/pil/smith/smith.sw.vtx"
    downloadable "models/player/pil/smith/smith.vvd"
    downloadable "models/player/pil/smith/smith.xbox.vtx"
    downloadable "materials/models/player/pil/smith/smithbody.vmt"
    downloadable "materials/models/player/pil/smith/smithhead.vmt"
    downloadable "materials/models/player/pil/smith/smithshades.vmt"
    downloadable "materials/models/player/pil/smith/smithshoe.vmt"
    downloadable "materials/models/player/pil/smith/terrortemp.vmt"
    downloadable "materials/models/player/pil/smith/UrbanTemp.vmt"
    downloadable "materials/models/player/pil/smith/smithbody.vtf"
    downloadable "materials/models/player/pil/smith/smithbody-normal.vtf"
    downloadable "materials/models/player/pil/smith/smithhead.vtf"
    downloadable "materials/models/player/pil/smith/smithhead-normal.vtf"
    downloadable "materials/models/player/pil/smith/smithshoe.vtf"
    downloadable "materials/models/player/pil/smith/smithshoe-normal.vtf"
    downloadable "materials/models/player/pil/smith/soria-env.vtf"
    downloadable "materials/models/player/pil/smith/terrortemp.vtf"
    downloadable "materials/models/player/pil/smith/terrortemp_normal.vtf"
    downloadable "materials/models/player/pil/smith/UrbanTemp.vtf"
  }
  host_timescale 1
  phys_timescale .2
  est_CvarDelFlag sv_cheats 0 0 0 1 0 0 0 0
  es_xset mb_saveloop 1
}
event es_map_start
{
  es repeat start focusregen server_var(mb_focusregentime)
  es_xdoblock mb_matrix/downloads
}
event est_map_end
{
  es_xdoblock mb_matrix/savekeygroup
}

