//  Matrix Mod: Reloaded Adminisration Module
//  for Counter-Strike: Source
//
// * Requirments
//   1.  Matrix Mod: Reloaded
//
// * Instructions:
//   1. Install Matrix Mod: Reloaded and ensure it is working properly
//
//   2. In the mb_admin directory, open es_admins_db.txt and follow the instructions
//      to make yourself an admin.
// *******************************************

//**********************
//Mod Load and Unload
//**********************
block load
{
  es_xset mb_deletekeys 0
  es_xset mb_adminloaded "Enabled"
  es_xmakepublic mb_adminloaded
  es_xset mb_argnum 0
  es_xset mb_arg1 0
  es_xset mb_arg2 0
  es_xset mb_arg3 0
  es_xset mb_adminid 0
  es_xset mb_adminname 0
  es_xset mb_receiverid 0
  es_xset mb_receivername 0
  es_xset mb_isnumeric 0
  keygroupremove admins
  es_xkeygroupload admins |mb_matrix/modules/mb_admin
  es_xdoblock mb_matrix/modules/mb_admin/createpopups
  es_xset mb_exists 0
  es_xexists mb_exists command !givefocus
  if (server_var(mb_exists) = 0) do
  {
    es_xregsaycmd !givefocus mb_matrix/modules/mb_admin/saygivefocus "!givefocus <player> <amount>"
  }
  es_xset mb_exists 0
  es_xexists mb_exists command !givestatpoints
  if (server_var(mb_exists) = 0) do
  {
    es_xregsaycmd !givestatpoints mb_matrix/modules/mb_admin/saystatpoints "!givestatpoints <player> <character> <amount>"
  }
  es_xset mb_exists 0
  es_xexists mb_exists command !givelevel
  if (server_var(mb_exists) = 0) do
  {
    es_xregsaycmd !givelevel mb_matrix/modules/mb_admin/saygivelevel "!givelevel <player> <character> <amount>"
  }
  es_xset mb_exists 0
  es_xexists mb_exists command mb_reloadadmin
  if (server_var(mb_exists) = 0) do
  {
    es_xregcmd mb_reloadadmin mb_matrix/modules/mb_admin/cmd_reloadadmin "Used to reload admins if changed while server still running"
  }
  es_xset mb_exists 0
  es_xexists mb_exists command mb_reloadlib
  if (server_var(mb_exists) = 0) do
  {
    es_xregcmd mb_reloadlib mb_matrix/modules/mb_admin/cmd_loadlib "Reload library file"
  }
  es_xset mb_exists 0
  es_xexists mb_exists command mb_resetdatabase
  if (server_var(mb_exists) = 0) do
  {
    es_xregcmd mb_resetdatabase mb_matrix/modules/mb_admin/cmd_resetdatabase "Clears Databases"
  }
}
block unload
{
  keygroupremove admins
}
event player_say
{
  es_setinfo mb_userid event_var(userid)
  es_getplayername mb_playername server_var(mb_userid)
  es uniqueid mb_steamid server_var(mb_userid)
  if (event_var(text) == !operator) do
  {
    es_xset mb_exists 0
    es_exists mb_exists key admins server_var(mb_steamid)
    if (server_var(mb_exists) == 1) do
    {
      es popup send adminmenu server_var(mb_userid)
    }
    else do
    {
      es_msg server_var(mb_steamid)
      es_tell server_var(mb_userid) #multi #lightgreen[Failure] #defaultYou are not an admin!!
    }
  }
}
//******************************
// Popup Creation and Handles
//******************************
block createpopups
{
  //******************
  // ** Admin Menus **
  //******************
  popup create adminmenu
  popup addline adminmenu "Administration Module"
  popup addline adminmenu "->1. Databases"
  popup addline adminmenu "->2. Mod Admin"
  popup addline adminmenu "->3. Reload Files"
  popup addline adminmenu "->4. List Commands"
  popup select adminmenu 10 mb_matrix/exitmenus
  popup submenu adminmenu 1 databasemenu
  popup submenu adminmenu 2 gameplaymenu
  popup submenu adminmenu 3 reloadmenu
  popup submenu adminmenu 4 commandmenu
  popup submenu adminmenu 5 adminmenu
  popup submenu adminmenu 6 adminmenu
  popup submenu adminmenu 7 adminmenu
  popup submenu adminmenu 8 adminmenu
  popup submenu adminmenu 9 adminmenu
  popup timeout adminmenu send 5
  popup timeout adminmenu view 30

  //****************
  // ** EXP Menus **
  //****************
  popup create databasemenu
  popup addline databasemenu "Database Adminisration"
  popup addline databasemenu "->1. Save All Databases"
  popup addline databasemenu "->2. Reset All Databases"
  popup addline databasemenu "8. Back"
  popup select databasemenu 10 mb_matrix/exitmenus
  popup menuselect databasemenu mb_matrix/modules/mb_admin/databasemenu
  popup submenu databasemenu 1 databasemenu
  popup submenu databasemenu 2 databasemenu
  popup submenu databasemenu 3 databasemenu
  popup submenu databasemenu 4 databasemenu
  popup submenu databasemenu 5 databasemenu
  popup submenu databasemenu 6 databasemenu
  popup submenu databasemenu 7 databasemenu
  popup submenu databasemenu 8 adminmenu
  popup submenu databasemenu 9 databasemenu
  popup timeout databasemenu send 5
  popup timeout databasemenu view 30

  //*********************
  // ** Gameplay Menus **
  //*********************
  popup create gameplaymenu
  popup addline gameplaymenu "Gameplay Administration"
  popup addline gameplaymenu "->1. Disable/Enable Buyzones"
  popup addline gameplaymenu "->2. Disable/Enable Objectives"
  popup addline gameplaymenu "8. Back"
  popup menuselect gameplaymenu mb_matrix/modules/mb_admin/gameplaymenu
  popup select gameplaymenu 10 mb_matrix/exitmenus
  popup submenu gameplaymenu 1 gameplaymenu
  popup submenu gameplaymenu 2 gameplaymenu
  popup submenu gameplaymenu 3 gameplaymenu
  popup submenu gameplaymenu 4 gameplaymenu
  popup submenu gameplaymenu 5 gameplaymenu
  popup submenu gameplaymenu 6 gameplaymenu
  popup submenu gameplaymenu 7 gameplaymenu
  popup submenu gameplaymenu 8 adminmenu
  popup submenu gameplaymenu 9 gameplaymenu
  popup timeout gameplaymenu send 5
  popup timeout gameplaymenu view 30

  //*******************
  // ** Reload Menus **
  //*******************
  popup create reloadmenu
  popup addline reloadmenu "File Administration"
  popup addline reloadmenu "->1. Reload admin file"
  popup addline reloadmenu "->2. Reload library file"
  popup menuselect reloadmenu mb_matrix/modules/mb_admin/reloadmenu
  popup select reloadmenu 10 mb_matrix/exitmenus
  popup submenu reloadmenu 1 reloadmenu
  popup submenu reloadmenu 2 reloadmenu
  popup submenu reloadmenu 3 reloadmenu
  popup submenu reloadmenu 4 reloadmenu
  popup submenu reloadmenu 5 reloadmenu
  popup submenu reloadmenu 6 reloadmenu
  popup submenu reloadmenu 7 reloadmenu
  popup submenu reloadmenu 8 adminmenu
  popup submenu reloadmenu 9 reloadmenu
  popup timeout reloadmenu send 5
  popup timeout reloadmenu view 30

  //*********************
  // ** Commands Menus **
  //*********************
  popup create commandmenu
  popup addline commandmenu "List of Administration Commands"
  popup addline commandmenu "To perform the following commands, use in chat."
  popup addline commandmenu "->1. !givefocus <player> <amount>"
  popup addline commandmenu "->2. !givestatpoints <player> <character> <amount>"
  popup addline commandmenu "->3. !givelevel <player> <character> <amount>"
  popup select commandmenu 10 mb_matrix/exitmenus
  popup submenu commandmenu 1 commandmenu
  popup submenu commandmenu 2 commandmenu
  popup submenu commandmenu 3 commandmenu
  popup submenu commandmenu 4 commandmenu
  popup submenu commandmenu 5 commandmenu
  popup submenu commandmenu 6 commandmenu
  popup submenu commandmenu 7 commandmenu
  popup submenu commandmenu 8 adminmenu
  popup submenu commandmenu 9 commandmenu
  popup timeout commandmenu send 5
  popup timeout commandmenu view 30

}
block databasemenu
{
  if (server_var(_popup_choice) == 1) do
  {
    es_xmsg #green Character Databases will be saved in 10 seconds.  You will notice lag when this happens.
    es_xdelayed 3 es_xmsg #green Character Databases will be saved in 7 seconds.  You will notice lag when this happens.
    es_xdelayed 5 es_xmsg #green Character Databases will be saved in 5 seconds.  You will notice lag when this happens.
    es_xdelayed 7 es_xmsg #green Character Databases will be saved in 3 seconds.  You will notice lag when this happens.
    es_xdelayed 10 es_xdoblock mb_matrix/savekeygroup
    es_xdelayed 10 es_xmsg #green Character Databases have been saved.  Thank you for your patience.
  }
  if (server_var(_popup_choice) == 2) do
  {
    es_xmsg #green Character databases are being deleted in 10 seconds.  You may noticed lag.
    es_xdelayed 3 es_xmsg #green Character databases are being deleted in 7 seconds.  You may notice lag when this happens.
    es_xdelayed 5 es_xmsg #green Character databases are being deleted in 5 seconds.  You may notice lag when this happens.
    es_xdelayed 7 es_xmsg #green Character databases are being deleted in 3 seconds.  You may notice lag when this happens.
    es_xdelayed 10 mb_resetdatabase
    es_xdelayed 10 es_xmsg #green Character databases have been deleted.  Resetarting Map.
    es_delayed 15 changelevel server_var(eventscripts_currentmap)
  }
}
block reloadmenu
{
  if (server_var(_popup_choice) == 1) do
  {
    mb_reloadadmin
  }
  if (server_var(_popup_choice) == 2) do
  {
    mb_reloadlib
  }
}
block gameplaymenu
{
  if (server_var(_popup_choice) == 1) do
  {
    if (server_var(mb_loadouts) == 1) do
    {
      es_xset mb_loadouts 0
      es_tell server_var(_popup_userid) #multi #lightgreen[Success]#default Weapon loadouts are now #greendisabled.
      getrandplayer mb_randplayer #all
      es_fire server_var(mb_randplayer) func_buyzone disable
      mp_restartgame 3
    }
    else do
    {
      es_xset mb_loadouts 1
      getrandplayer mb_randplayer #all
      es_fire server_var(mb_randplayer) func_buyzone enable
      es_tell server_var(_popup_userid) #multi #lightgreen[Success]#default Weapon loadouts are now #greenenabled.
      mp_restartgame 3
    }
  }
  if (server_var(_popup_choice) == 2) do
  {
    if (server_var(mb_objectives) == 1) do
    {
      es_xset mb_objectives 0
      es_tell server_var(_popup_userid) #multi #lightgreen[Success]#default Objectives are now #greendisabled.
      getrandplayer mb_randplayer #all
      es_fire server_var(mb_randplayer) func_bomb_target disable
      mp_restartgame 3
    }
    else do
    {
      es_xset mb_objectives 1
      getrandplayer mb_randplayer #all
      es_fire server_var(mb_randplayer) func_bomb_target enable
      es_tell server_var(_popup_userid) #multi #lightgreen[Success]#default Objectives are now #greenenabled.
      mp_restartgame 3
    }
  }
}
//******************
// Admin Commands
//******************
//s-
block cmd_loadlib
{
  es_xmsg #multi #lightgreen[Success] #defaultMatrix Mod Library file has been reloaded.
  es_xdelayed 1 es_xload mb_matrix/library
  es_xdelayed .5 es_xunload mb_matrix/library
}
block cmd_resetdatabase
{
  es_xset mb_deletekey 0
  es_xforeachkey mb_deletekey in char "es_xdoblock mb_matrix/modules/mb_admin/cmd_resetdatabase2"
  es_xset mb_deletekey 0
  es_xforeachkey mb_deletekey in matrix "es_keydelete matrix server_var(mb_deletekey)"
  echo matrix has been reset
}
block cmd_resetdatabase2
{
  es_xset mb_deletekeyid 0
  es_foreachkey mb_deletekeyid in server_var(mb_deletekey) "es_keydelete server_var(mb_deletekey) server_var(mb_deletekeyid)"
  es echo server_var(mb_deletekey) has been reset
}
block cmd_reloadadmin
{
  if (server_var(mb_adminloaded) ==1) do
  {
    es_xmsg #multi #lightgreen[Success] #defaultAdmin database has been reloaded.
    keygroupremove admins
    es_xkeygroupload admins |mb_matrix/modules/mb_admin
  }
}
block saygivelevel
{
  es_xgetargc mb_argnum
  if (server_var(mb_argnum) != 1) do
  {
    es_xgetcmduserid mb_adminid
    es_getplayersteamid mb_steamid server_var(mb_adminid)
    es_xset mb_exists 0
    es_exists mb_exists key admins server_var(mb_steamid)
    if (server_var(mb_exists) == 1) do
    {
      es_xgetargv mb_arg1 1
      es_xgetargv mb_arg2 2
      es_xgetargv mb_arg3 3
      es_getuserid mb_receiverid server_var(mb_arg1)
      es_getplayername mb_receivername server_var(mb_receiverid)
      es_getplayername mb_adminname server_var(mb_adminid)
      es_getplayersteamid mb_steamid server_var(mb_receiverid)
      es_setinfo mb_userid server_var(mb_receiverid)
      es_xset mb_exists 0
      es_exists mb_exists key char server_var(mb_arg2)
      es est_isnumeric mb_isnumeric server_var(mb_arg3)
      if (server_var(mb_receiverid) != 0) do
      {
        if (server_var(mb_exists) == 1) do
        {
          if (server_var(mb_isnumeric) == 1) do
          {
            es_keygetvalue mb_charlevel server_var(mb_arg2) server_var(mb_steamid) charlevel
            es_math mb_charlevel + server_var(mb_arg3)
            es_keysetvalue server_var(mb_arg2) server_var(mb_steamid) charlevel server_var(mb_charlevel)
            es_xdoblock mb_matrix/hudhint
            es_tell server_var(mb_userid) #multi #lightgreen[Admin]#default server_var(mb_adminname) has given you#green server_var(mb_arg3) levels for#green server_var(mb_arg2)
            es_tell server_var(mb_adminid) #multi #lightgreen[Success]#default You have given server_var(mb_receivername) #green server_var(mb_arg3) levels for server_var(mb_arg2)
          }
          else do
          {
            es_tell server_var(mb_adminid) #multi #lightgreen[Failure] #defaultPlease use numeric values for focus amount.
          }
        }
        else do
        {
          es_tell server_var(mb_adminid) #multi #lightgreen[Failure] #default That character does not exist!  Enter a valid character.  Example: Morpheus
        }
      }
      else do
      {
        es_tell server_var(mb_adminid) #multi #lightgreen[Failure] #defaultThat player does not exist.
      }
    }
    else do
    {
      es_tell server_var(mb_adminid) #multi #lightgreen[Failure] #defaultYou are not an admin!
    }
  }
  else do
  {
    es_tell server_var(mb_adminid) #multi #lightgreen[Failure] #defaultUse the syntax: !givelevel <Player> <Character> <Amount>
  }
}
block saygivefocus
{
  es_xgetargc mb_argnum
  if (server_var(mb_argnum) != 1) do
  {
    es_xgetcmduserid mb_adminid
    es_getplayersteamid mb_steamid server_var(mb_adminid)
    es_xset mb_exists 0
    es_exists mb_exists key admins server_var(mb_steamid)
    if (server_var(mb_exists) == 1) do
    {
      es_xgetargv mb_arg1 1
      es_xgetargv mb_arg2 2
      es_getuserid mb_receiverid server_var(mb_arg1)
      es_getplayername mb_receivername server_var(mb_receiverid)
      es_getplayername mb_adminname server_var(mb_adminid)
      es_getplayersteamid mb_steamid server_var(mb_receiverid)
      es_setinfo mb_userid server_var(mb_receiverid)
      es est_isnumeric mb_isnumeric server_var(mb_arg2)
      if (server_var(mb_receiverid) != 0) do
      {
        if (server_var(mb_isnumeric) == 1) do
        {
          es_keygetvalue mb_focus matrix server_var(mb_steamid) focus
          es_math mb_focus + server_var(mb_arg2)
          es_keysetvalue matrix server_var(mb_steamid) focus server_var(mb_focus)
          es_xdoblock mb_matrix/hudhint
          es_tell server_var(mb_userid) #multi #lightgreen[Architect] server_var(mb_adminname) #defaulthas given you#green server_var(mb_arg2) focus points.
          es_tell server_var(mb_adminid) #multi #lightgreen[Success]#default You have given server_var(mb_receivername) #green server_var(mb_arg2) #defaultfocus points.
        }
        else do
        {
          es_tell server_var(mb_adminid) #multi #lightgreen[Failure] #defaultPlease use numeric values for focus amount.
        }
      }
      else do
      {
        es_tell server_var(mb_adminid) #multi #lightgreen[Failure] #defaultThat user does not exist.
      }
    }
    else do
    {
      es_tell server_var(mb_adminid) #multi #lightgreen[Failure] #defaultYou are not an admin!
    }
  }
  else do
  {
    es_tell server_var(mb_adminid) #multi #lightgreen[Failure] #defaultUse the syntax: !givefocus <Player> <Amount>
  }
}
block saystatpoints
{
  es_xgetargc mb_argnum
  if (server_var(mb_argnum) != 1) do
  {
    es_xgetcmduserid mb_adminid
    es_getplayersteamid mb_steamid server_var(mb_adminid)
    es_xset mb_exists 0
    es_exists mb_exists key admins server_var(mb_steamid)
    if (server_var(mb_exists) == 1) do
    {
      es_xgetargv mb_arg1 1
      es_xgetargv mb_arg2 2
      es_xgetargv mb_arg3 3
      es_getuserid mb_receiverid server_var(mb_arg1)
      es_getplayername mb_receivername server_var(mb_receiverid)
      es_getplayername mb_adminname server_var(mb_adminid)
      es_getplayersteamid mb_steamid server_var(mb_receiverid)
      es_setinfo mb_userid server_var(mb_receiverid)
      es_xset mb_exists 0
      es_exists mb_exists key char server_var(mb_arg2)
      es est_isnumeric mb_isnumeric server_var(mb_arg3)
      if (server_var(mb_receiverid) != 0) do
      {
        if (server_var(mb_exists) == 1) do
        {
          if (server_var(mb_isnumeric) == 1) do
          {
            es_keygetvalue mb_statpoints server_var(mb_arg2) server_var(mb_steamid) statpoints
            es_math mb_statpoints + server_var(mb_arg3)
            es_keysetvalue server_var(mb_arg2) server_var(mb_steamid) statpoints server_var(mb_statpoints)
            es_xdoblock mb_matrix/hudhint
            es_tell server_var(mb_userid) #multi #lightgreen[Admin]#default server_var(mb_adminname) has given you#green server_var(mb_arg3) levels for#green server_var(mb_arg2)
            es_tell server_var(mb_adminid) #multi #lightgreen[Success]#default You have given server_var(mb_receivername) #green server_var(mb_arg3) #defaultstat points for#green server_var(mb_arg2)
          }
          else do
          {
            es_tell server_var(mb_adminid) #multi #lightgreen[Failure] #defaultPlease use numeric values for focus amount.
          }
        }
        else do
        {
          es_tell server_var(mb_adminid) #multi #lightgreen[Failure] #default That character does not exist!  Enter a valid character.  Example: Morpheus
        }
      }
      else do
      {
        es_tell server_var(mb_adminid) #multi #lightgreen[Failure] #defaultThat player does not exist.
      }
    }
    else do
    {
      es_tell server_var(mb_adminid) #multi #lightgreen[Failure] #defaultYou are not an admin!
    }
  }
  else do
  {
    es_tell server_var(mb_adminid) #multi #lightgreen[Failure] #defaultUse the syntax: !givestatpoints <Player> <Character> <Amount>
  }
}