﻿// ##############################################
// Jihad-Mod
//      for Counter-Strike: Source
//
// * Description:
//      Terrorists can buy suicide bombs. Bombs are;
//      armed after a delay. Bombs may be triggered
//      by chest damage. Random failures may occur.
//      Death by explosion triggers a chain reaction
//      if wearing a bomb. Type bind <key> boom in
//      console to use.
//
// * Install instructions:
//      1. Install Mattie's EventScripts v1.0
//          http://www.mattie.info/cs/forums/viewtopic.php?t=4844
//
//      2. Copy all of this script code into a new textfile:
//          hidden/addons/eventscripts/jihadmod/es_jihadmod.txt
//
//      3. Add the following line somewhere in autoexec.cfg:
//          es_load jihadmod
//
// * Credits:
//      Written By: Phaedrus
//      Concept By: Isolation
//      Explosion Code Ported From: RocketGuns v2.0 by Wonder
//      Buy Code Ported From: *XYZ*SaYnt
//      Shake Code Ported From: Nade Quake Version 1.0.0 by SumGuy14
//
// * Requirements:
//      EventScripts v1.2.1 or higher
//      ES_Tools (for FF disable & bomber coloring)
//      cl_restrict_server_commands 0
//
// ##############################################
//
// Features:
//  - Buy small or large bombs
//  - Small bombs upgradable if not used
//  - Configurable explosion magnitudes
//  - Configurable bomb prices
//  - Configurable arming delay
//  - Configurable random failures
//  - Random chance of detonation for chest damage
//  - Chain reactions from killing other bombers
//  - Dynamic settings for admins
//
// Version History:
// v1.8
//  - Added cash for kills
//  - Added buy frequency (in rounds) per player
//  - Added buy frequency punishment for TKs
//  - Added FF option disable TKs (requires EST)
//  - Added option to color bombers red (requires EST)
//
// v1.7
//  - Added options to allow and limit CT bombs
//  - Added options to allow and limit T bombs
//  - Added comprehensive menu system (details,settings,credits,usercmds,admincmds)
//  - Stripped bombs are now refunded.
//  - Fixed bug where dead players could buy
//  - Removed unloading of corelib and popup
//  - Removed details console display
//  - Removed directions menu and commands
//
// v1.6
//  - Added 2 second delay before showing buy menus to support cash mods like Counter-Bet
//  - Added !dir and !nodir commands for showing directions menu
//  - Added late buying option
//  - Added !buybomb command to show the buy menu to support late buying
//  - Made arming times per player from buy time to support late buying
//  - Made settings only visible to admins
//  - Fixed bombs persisting through map change
//  - Increased buy menu display time to 10 seconds
//  - Slightly decreased arming sound audible range
//  - Removed stop asking option from menu
//
// v1.5
//  - Added !ask and !noask commands, stop asking option to buy menus
//  - Fixed menus displaying incorrect prices after price change
//  - Made admin commands only visible to admins
//  - Made arming delay account for mp_freezetime
//  - Slightly decreased random detonation from chest damage
//  - Slightly decreased default explosion magnitudes
//
// v1.4
//  - Added buy menu code (Thanks *XYZ*SaYnt)
//  - Added large and small bombs
//  - Added possible detonation for damage to chest
//  - Added explosion effect (requires MAP)
//  - Fixed arming delay timer
//  - Death by explosion always triggers chain reactions
//
// v1.3
//  - Added sparks effect
//  - Added random explosion sounds
//  - Added random failures
//  - Made announcements toggle
//  - Fixed admin commands
//
// v1.2
//  - Added admin commands
//  - Added chain reactions
//  - Removed location code from explosions (wrong and unneeded)
//
// v1.1
//  - Added roundstart delay
//
// v1.0
//  - Initial release
//
// ##############################################
// This is the only block you should ever edit
// UNLESS YOU KNOW WHAT YOU ARE DOING!!
// ##############################################

block config
{
  es_xsetinfo jm_announce 1 // Enable/disable announcements
  es_xsetinfo jm_latebuying 1 // Enable/disable late buying
  es_xsetinfo jm_ff 1 // Enable/disable friendly fire from bombs
  es_xsetinfo jm_colorbomber 0 // Enable/disable coloring bombers red
  es_xsetinfo jm_delay 20 // Roundstart delay (in seconds) before active
  es_xsetinfo jm_failures 25 // Random failures (1 in X, 0 = Disabled)
  es_xsetinfo jm_sm_price 5000 // Price of a small bomb
  es_xsetinfo jm_lg_price 8000 // Price of a large bomb
  es_xsetinfo jm_up_price 3500 // Price of a bomb upgrade
  es_xsetinfo jm_sm_size 250 // Magnitude for small bomb
  es_xsetinfo jm_lg_size 400 // Magnitude for large bomb
  es_xsetinfo jm_tbombs 1 // Allow Ts to have bombs
  es_xsetinfo jm_ctbombs 1 // Allow CTs to have bombs
  es_xsetinfo jm_tbomblimit 4 // T bomb limit per round
  es_xsetinfo jm_ctbomblimit 4 // CT bomb limit per round
  es_xsetinfo jm_killcash 1000 // Cash for each kill
  es_xsetinfo jm_buyfreq 1 // How often (in rounds) a player can buy a bomb
  es_xsetinfo jm_tkpunish 1 // Prevent them from buying this many additional rounds for each TK
  
  // Admin list
  es_xsetinfo jm_admins "STEAM_0:0:0000000"
}

// ##############################################
// DO NOT EDIT ANYTHING BELOW THIS LINE!!!
// ##############################################

block load
{
  es_xsetinfo jm_version "1.8"
  es_xmakepublic jm_version

  // Get configurations
  es_xdoblock jihadmod/config

  // Register commands
  es_xdoblock jihadmod/register_cmds
  
  // Load required scripts
  es_load corelib
  es_load popup

  // Create the bomberlist
  es_xkeygroupcreate jm_bomberlist

  // Create the playerlist
  es_xkeygroupcreate jm_playerlist

  // Load current players
  es_xcreateplayerlist jm_currentlist

  // Load current players into jm_playerlist
  es_xsetinfo jm_player 0
  es_xforeachkey jm_player in jm_currentlist "es_xdoblock jihadmod/playerlist_load"

  // Delete the currentlist
  es_xkeygroupdelete jm_currentlist

  // Create menu popups
  es_xdoblock jihadmod/menu_buy_create
  es_xdoblock jihadmod/menu_details_create
  es_xdoblock jihadmod/menu_settings_create
  es_xdoblock jihadmod/menu_credits_create
  es_xdoblock jihadmod/menu_usercmds_create
  es_xdoblock jihadmod/menu_admincmds_create

  // Register client commands to detonate
  es_xregclientcmd boom jihadmod/boom "Detonates your suicide bomb"
  
  // Initialize bomb counts
  es_xsetinfo jm_ctbombcount 0
  es_xsetinfo jm_tbombcount 0
  
  // Report load finished
  es say [JihadMod] Loaded
}

block unload
{
  // Delete the bomberlist
  es_xkeygroupdelete jm_bomberlist

  // Delete the playerlist
  es_xkeygroupdelete jm_playerlist

  // Remove the menu popups
  popup unsendname jm_menu_buy1 #all
  popup unsendname jm_menu_buy2 #all
  popup unsendname jm_menu_buy3 #all
  popup unsendname jm_menu_details #all
  popup unsendname jm_menu_settings #all
  popup unsendname jm_menu_credits #all
  popup unsendname jm_menu_usercmds #all
  popup unsendname jm_menu_admincmds #all

  // Delete the menu popups
  popup delete jm_menu_buy1
  popup delete jm_menu_buy2
  popup delete jm_menu_buy3
  popup delete jm_menu_details
  popup delete jm_menu_settings
  popup delete jm_menu_credits
  popup delete jm_menu_usercmds
  popup delete jm_menu_admincmds

  // Report unload finished
  es say [JihadMod] Unloaded
}

block playerlist_load
{
  // Add player to the player list
  es_keycreate jm_playerlist server_var(jm_player)
  es_keysetvalue jm_playerlist server_var(jm_player) ask 1
  es_keysetvalue jm_playerlist server_var(jm_player) freq server_var(jm_buyfreq)
}

event player_say
{
  if (event_var(text) == "!jm") then es popup send jm_menu_details event_var(userid)

  // Show buy menu
  if (event_var(text) == "!buybomb") do
  {
    // Late buying is enabled
    if (server_var(jm_latebuying) == 1) do
    {
      // Reset their ask setting
      es_keysetvalue jm_playerlist event_var(userid) ask 1

      // Save their userid
      es_xsetinfo jm_player 0
      es_setinfo jm_player event_var(userid)
      
      // Show menu
      es_xdoblock jihadmod/menu_buy_show
    }
  }

  // Show details
  if (event_var(text) == "!jm") then es_xdoblock jihadmod/details

  // Enable asking them about bombs
  if (event_var(text) == "!ask") then es_keysetvalue jm_playerlist event_var(userid) ask 1
  
  // Disable asking them about bombs
  if (event_var(text) == "!noask") then es_keysetvalue jm_playerlist event_var(userid) ask 0
}

block register_cmds
{
  es_xregclientcmd jm_sm_magnitude jihadmod/cmd_set ""
  es_xregsaycmd jm_sm_magnitude jihadmod/cmd_set ""
  es_xregclientcmd jm_lg_magnitude jihadmod/cmd_set ""
  es_xregsaycmd jm_lg_magnitude jihadmod/cmd_set ""
  es_xregclientcmd jm_sm_price jihadmod/cmd_set ""
  es_xregsaycmd jm_sm_price jihadmod/cmd_set ""
  es_xregclientcmd jm_lg_price jihadmod/cmd_set ""
  es_xregsaycmd jm_lg_price jihadmod/cmd_set ""
  es_xregclientcmd jm_up_price jihadmod/cmd_set ""
  es_xregsaycmd jm_up_price jihadmod/cmd_set ""
  es_xregclientcmd jm_delay jihadmod/cmd_set ""
  es_xregsaycmd jm_delay jihadmod/cmd_set ""
  es_xregclientcmd jm_announce jihadmod/cmd_set ""
  es_xregsaycmd jm_announce jihadmod/cmd_set ""
  es_xregclientcmd jm_latebuying jihadmod/cmd_set ""
  es_xregsaycmd jm_latebuying jihadmod/cmd_set ""
  es_xregclientcmd jm_failures jihadmod/cmd_set ""
  es_xregsaycmd jm_failures jihadmod/cmd_set ""
  es_xregclientcmd jm_tbombs jihadmod/cmd_set ""
  es_xregsaycmd jm_tbombs jihadmod/cmd_set ""
  es_xregclientcmd jm_ctbombs jihadmod/cmd_set ""
  es_xregsaycmd jm_ctbombs jihadmod/cmd_set ""
  es_xregclientcmd jm_tbomblimit jihadmod/cmd_set ""
  es_xregsaycmd jm_tbomblimit jihadmod/cmd_set ""
  es_xregclientcmd jm_ctbomblimit jihadmod/cmd_set ""
  es_xregsaycmd jm_ctbomblimit jihadmod/cmd_set ""
}

block cmd_set
{
  // Get userid
  es_xsetinfo jm_userid 0
  es_xgetcmduserid jm_userid

  // Get steamid for admin check
  es_xsetinfo jm_steamid 0
  es_getplayersteamid jm_steamid server_var(jm_userid)

  // Check if they are an admin
  if (server_var(jm_steamid) in server_var(jm_admins)) do
  {
    // Get arg count
    es_xsetinfo jm_argcount 0
    es_xgetargc jm_argcount
  
    / Check for arguments
    if (server_var(jm_argcount) > 0) do
    {
      // Get the command
      es_xsetinfo jm_cmd 0
      es_xgetargv jm_cmd 0

      // Get arg1
      es_xsetinfo jm_arg1 0
      es_xgetargv jm_arg1 1

      // Check for jm_sm_magnitude command
      if (server_var(jm_cmd) == "jm_sm_magnitude") do
      {
        // Save setting
        es_setinfo jm_sm_size server_var(jm_arg1)
      }

      // Check for jm_lg_magnitude command
      if (server_var(jm_cmd) == "jm_lg_magnitude") do
      {
        // Save setting
        es_setinfo jm_lg_size server_var(jm_arg1)
      }

      // Check for jm_sm_price command
      if (server_var(jm_cmd) == "jm_sm_price") do
      {
        // Save setting
        es_setinfo jm_sm_price server_var(jm_arg1)
      }

      // Check for jm_lg_price command
      if (server_var(jm_cmd) == "jm_lg_price") do
      {
        // Save setting
        es_setinfo jm_lg_price server_var(jm_arg1)
      }

      // Check for jm_up_price command
      if (server_var(jm_cmd) == "jm_up_price") do
      {
        // Save setting
        es_setinfo jm_up_price server_var(jm_arg1)
      }

      // Check for jm_delay command
      if (server_var(jm_cmd) == "jm_delay") do
      {
        // Save setting
        es_setinfo jm_delay server_var(jm_arg1)
      }

      // Check for jm_announce command
      if (server_var(jm_cmd) == "jm_announce") do
      {
        // Save setting
        es_setinfo jm_announce server_var(jm_arg1)
      }

      // Check for jm_latebuying command
      if (server_var(jm_cmd) == "jm_latebuying") do
      {
        // Save setting
        es_setinfo jm_latebuying server_var(jm_arg1)
      }

      // Check for jm_failures command
      if (server_var(jm_cmd) == "jm_failures") do
      {
        // Save setting
        es_setinfo jm_failures server_var(jm_arg1)
      }

      // Check for jm_tbombs command
      if (server_var(jm_cmd) == "jm_tbombs") do
      {
        // Save setting
        es_setinfo jm_tbombs server_var(jm_arg1)
      }

      // Check for jm_ctbombs command
      if (server_var(jm_cmd) == "jm_ctbombs") do
      {
        // Save setting
        es_setinfo jm_ctbombs server_var(jm_arg1)
      }

      // Check for jm_tbomblimit command
      if (server_var(jm_cmd) == "jm_tbomblimit") do
      {
        // Save setting
        es_setinfo jm_tbomblimit server_var(jm_arg1)
      }

      // Check for jm_ctbomblimit command
      if (server_var(jm_cmd) == "jm_ctbomblimit") do
      {
        // Save setting
        es_setinfo jm_ctbomblimit server_var(jm_arg1)
      }
      
      // Recreate the affected menus
      popup delete jm_menu_buy1
      popup delete jm_menu_buy2
      popup delete jm_menu_buy3
      popup delete jm_menu_settings
      es_xdoblock jihadmod/menu_buy_create
      es_xdoblock jihadmod/menu_settings_create
    }
    else do
    {
      // Tell them invalid syntax
      es_tell server_var(jm_userid) #multi #green [Jihad-Mod] #default Invalid syntax!
    }
  }
  else do
  {
    // Tell them they are not admin
    es_tell server_var(jm_userid) #multi #green [Jihad-Mod] #default You are not an admin!
  }
}

event es_map_start
{
  // Recreate the bomberlist
  es_xkeygroupdelete jm_bomberlist
  es_xkeygroupcreate jm_bomberlist
}

event round_start
{  
  // Reset bomb counts
  es_xsetinfo jm_ctbombcount 0
  es_xsetinfo jm_tbombcount 0

  // Rearm everyone
  es_xsetinfo jm_bomber 0
  es_xforeachkey jm_bomber in jm_bomberlist "es_xdoblock jihadmod/rearm"

  // Ask everyone to buy
  es_xsetinfo jm_player 0
  es_xdelayed 2 es_xforeachkey jm_player in jm_playerlist "es_xdoblock jihadmod/menu_buy_show"

  // Start timer
  es_xsetinfo jm_timer 1
  es_delayed server_var(mp_freezetime) es_xdoblock jihadmod/timer

  // Announce the system
  if (server_var(jm_announce) == 1) then es_xmsg #multi #green [Jihad-Mod] #default This server is running Jihad-Mod. Type !jm for details.
}

event round_end
{
  // Stop timer
  es_xsetinfo jm_timer 0
  
  // Disarm everyone
  es_xsetinfo jm_bomber 0
  es_delayed 5 es_xforeachkey jm_bomber in jm_bomberlist "es_xdoblock jihadmod/disarm"
}

block disarm
{
  // Disarm their bomb
  es_keysetvalue jm_bomberlist server_var(jm_bomber) armed 0
}

block rearm
{
  // Get player team
  es_xsetinfo jm_team 0
  es_getplayerteam jm_team server_var(jm_bomber)

  // Increment bombcount
  if (server_var(jm_team) == 2) then es_xmath jm_tbombcount + 1
  if (server_var(jm_team) == 3) then es_xmath jm_ctbombcount + 1

  // Store their armwait
  es_keysetvalue jm_bomberlist server_var(jm_bomber) armwait server_var(jm_delay)
  
  // Color them
  if (server_var(jm_colorbomber) == 1) then es est_SetPlayerColor server_var(jm_bomber) 225 50 50 255 1
}

event player_activate
{
  es_xsetinfo jm_exists 0
  es_exists jm_exists key jm_playerlist event_var(userid)

  // If they are NOT in the list
  if (server_var(jm_exists) == 0) do
  {
    // Add the player to the list
    es_keycreate jm_playerlist event_var(userid)
    es_keysetvalue jm_playerlist event_var(userid) ask 1
    es_keysetvalue jm_playerlist event_var(userid) freq server_var(jm_buyfreq)
  }
}

event player_disconnect
{
  // Remove the player from the list
  es_keydelete jm_playerlist event_var(userid)
  es_keydelete jm_bomberlist event_var(userid)
}

event player_team
{
  // Get them from the bomberlist
  es_xsetinfo jm_exists 0
  es_exists jm_exists key jm_bomberlist event_var(userid)

  // If they are in the list
  if (server_var(jm_exists) == 1) do
  {
    if (event_var(oldteam) == 2) then es_xmath jm_tbombcount - 1
    if (event_var(oldteam) == 3) then es_xmath jm_ctbombcount - 1

    // If new team is T
    if (event_var(team) == 2) do
    {
      // If Ts can have bombs
      if (server_var(jm_tbombs) == 1) do
      {
        // If Ts have NOT reached the limit
        if (server_var(jm_tbombcount) < server_var(jm_tbomblimit)) do
        {
          // Let them keep their bomb
          es_xmath jm_tbombcount + 1
        }
        else do
        {
          // Get their cash
          es_xsetinfo jm_cash 0
          es_getplayerprop jm_cash event_var(userid) "CCSPlayer.m_iAccount"

          // Get their bomb size
          es_xsetinfo jm_size 0
          es_keygetvalue jm_size jm_bomberlist event_var(userid) size

          // Refund their money
          if (server_var(jm_size) == server_var(jm_sm_size)) then es_math jm_cash + server_var(jm_lg_price)
          if (server_var(jm_size) == server_var(jm_lg_size)) then es_math jm_cash + server_var(jm_lg_price)
          es_setplayerprop event_var(userid) "CCSPlayer.m_iAccount" server_var(jm_cash)

          // Remove their bomb
          es_keydelete jm_bomberlist event_var(userid)
          
          // Tell them what happened
          es_tell event_var(userid) #multi #green [Jihad-Mod] #default Ts have too many bombers. Your bomb has been removed.
        }
      }
      else do
      {
        // Get their cash
        es_xsetinfo jm_cash 0
        es_getplayerprop jm_cash event_var(userid) "CCSPlayer.m_iAccount"

        // Get their bomb size
        es_xsetinfo jm_size 0
        es_keygetvalue jm_size jm_bomberlist event_var(userid) size

        // Refund their money
        if (server_var(jm_size) == server_var(jm_sm_size)) then es_math jm_cash + server_var(jm_lg_price)
        if (server_var(jm_size) == server_var(jm_lg_size)) then es_math jm_cash + server_var(jm_lg_price)
        es_setplayerprop event_var(userid) "CCSPlayer.m_iAccount" server_var(jm_cash)

        // Remove their bomb
        es_keydelete jm_bomberlist event_var(userid)

        // Tell them what happened
        es_tell event_var(userid) #multi #green [Jihad-Mod] #default Ts can not have suicide bombs. Your bomb has been removed.
      }
    }

    // If new team is CT
    if (event_var(team) == 3) do
    {
      // If CTs can have bombs
      if (server_var(jm_ctbombs) == 1) do
      {
        // If CTs have NOT reached the limit
        if (server_var(jm_ctbombcount) < server_var(jm_ctbomblimit)) do
        {
          // Let them keep their bomb
          es_xmath jm_ctbombcount + 1
        }
        else do
        {
          // Get their cash
          es_xsetinfo jm_cash 0
          es_getplayerprop jm_cash event_var(userid) "CCSPlayer.m_iAccount"

          // Get their bomb size
          es_xsetinfo jm_size 0
          es_keygetvalue jm_size jm_bomberlist event_var(userid) size

          // Refund their money
          if (server_var(jm_size) == server_var(jm_sm_size)) then es_math jm_cash + server_var(jm_lg_price)
          if (server_var(jm_size) == server_var(jm_lg_size)) then es_math jm_cash + server_var(jm_lg_price)
          es_setplayerprop event_var(userid) "CCSPlayer.m_iAccount" server_var(jm_cash)

          // Remove their bomb
          es_keydelete jm_bomberlist event_var(userid)
          
          // Tell them what happened
          es_tell event_var(userid) #multi #green [Jihad-Mod] #default CTs have too many bombers. Your bomb has been removed.
        }
      }
      else do
      {
        // Get their cash
        es_xsetinfo jm_cash 0
        es_getplayerprop jm_cash event_var(userid) "CCSPlayer.m_iAccount"

        // Get their bomb size
        es_xsetinfo jm_size 0
        es_keygetvalue jm_size jm_bomberlist event_var(userid) size

        // Refund their money
        if (server_var(jm_size) == server_var(jm_sm_size)) then es_math jm_cash + server_var(jm_lg_price)
        if (server_var(jm_size) == server_var(jm_lg_size)) then es_math jm_cash + server_var(jm_lg_price)
        es_setplayerprop event_var(userid) "CCSPlayer.m_iAccount" server_var(jm_cash)

        // Remove their bomb
        es_keydelete jm_bomberlist event_var(userid)

        // Tell them what happened
        es_tell event_var(userid) #multi #green [Jihad-Mod] #default CTs can not have suicide bombs. Your bomb has been removed.
      }
    }
  }
}

block menu_buy_create
{
  // Create the popup menus for buying the suicide bombs
  popup create jm_menu_buy1
  popup create jm_menu_buy2
  popup create jm_menu_buy3
  popup addline jm_menu_buy1 "##### Jihad-Mod - Buy #####"
  popup addline jm_menu_buy2 "##### Jihad-Mod - Buy #####"
  popup addline jm_menu_buy3 "##### Jihad-Mod - Buy #####"
	popup addline jm_menu_buy1 "Вы хотите купить бомбу для самоубийства?"
	popup addline jm_menu_buy2 "Вы хотите купить бомбу для самоубийства?"
	popup addline jm_menu_buy3 "Вы хотите модернизировать свою бомбу для самоубийства?"
	popup addline jm_menu_buy1 " "
	popup addline jm_menu_buy2 " "
	popup addline jm_menu_buy3 " "
	popup addline jm_menu_buy1 "[0] Выход"
	popup addline jm_menu_buy2 "[0] Выход"
	popup addline jm_menu_buy3 "[0] Выход"
  es_xsetinfo jm_string 0
  es_format jm_string "[1] Маленькая Бомба: $%1" server_var(jm_sm_price)
  es popup addline jm_menu_buy1 server_var(jm_string)
  es popup addline jm_menu_buy2 server_var(jm_string)
  es_format jm_string "[2] Большая Бомба: $%1" server_var(jm_lg_price)
  es popup addline jm_menu_buy1 server_var(jm_string)
  es_format jm_string "[1] модернизация: $%1" server_var(jm_up_price)
  es popup addline jm_menu_buy3 server_var(jm_string)
	popup select jm_menu_buy1 1 jihadmod/menu_buy_sm
	popup select jm_menu_buy1 2 jihadmod/menu_buy_lg
	popup select jm_menu_buy2 1 jihadmod/menu_buy_sm
	popup select jm_menu_buy3 1 jihadmod/menu_buy_up
  es popup timeout jm_menu_buy1 time 15
  es popup timeout jm_menu_buy2 time 15
  es popup timeout jm_menu_buy3 time 15
}

block menu_details_create
{
  // Create menu
  popup create jm_menu_details
  popup addline jm_menu_details "##### Jihad-Mod - Details #####"
  popup addline jm_menu_details "Players can buy suicide bombs. After a short delay,"
  popup addline jm_menu_details "an audible beep will indicate the bomb is armed. To"
  popup addline jm_menu_details "setup your detonator, open your console using ~ and"
  popup addline jm_menu_details "type bind <any key> boom (ie. bind v boom)."
  popup addline jm_menu_details " "
  popup addline jm_menu_details "Some bombs are faulty and may not detonate. Chest"
  popup addline jm_menu_details "damage may accidentally detonate bombs. Bombs will"
  popup addline jm_menu_details "explode in a chain reaction if the player is killed"
  popup addline jm_menu_details "by another explosion."
  popup addline jm_menu_details " "
	popup addline jm_menu_details "[0] Exit"
	popup addline jm_menu_details "[1] Details"
	popup addline jm_menu_details "[2] Settings"
	popup addline jm_menu_details "[3] Credits"
	popup addline jm_menu_details "[4] User Commands"
	popup addline jm_menu_details "[5] Admin Commands"

  // Add selections
	popup select jm_menu_details 1 jihadmod/menu_details_show
	popup select jm_menu_details 2 jihadmod/menu_settings_show
	popup select jm_menu_details 3 jihadmod/menu_credits_show
	popup select jm_menu_details 4 jihadmod/menu_usercmds_show
	popup select jm_menu_details 5 jihadmod/menu_admincmds_show
}

block menu_settings_create
{
  // Create menu
  popup create jm_menu_settings
  popup addline jm_menu_settings "##### Jihad-Mod - Settings #####"
  es_xsetinfo jm_string " "
  es_format jm_string "Маленькая Величина Бомбы: %1" server_var(jm_sm_size)
  es popup addline jm_menu_settings server_var(jm_string)
  es_format jm_string "Большая Велечена Бомбы: %1" server_var(jm_lg_size)
  es popup addline jm_menu_settings server_var(jm_string)
  es_format jm_string "Маленькая Цена на Бомбу: $%1" server_var(jm_sm_price)
  es popup addline jm_menu_settings server_var(jm_string)
  es_format jm_string "Большая Цена на Бомбу: $%1" server_var(jm_lg_price)
  es popup addline jm_menu_settings server_var(jm_string)
  es_format jm_string "Цена на Модернизацию Бомбы: $%1" server_var(jm_up_price)
  es popup addline jm_menu_settings server_var(jm_string)
  es_format jm_string "Время на покупку: %1 seconds" server_var(jm_delay)
  es popup addline jm_menu_settings server_var(jm_string)
  if (server_var(jm_tbombs) == 1) then es_xsetinfo jm_string "Теры могут брать бомбу: On"
  if (server_var(jm_tbombs) == 0) then es_xsetinfo jm_string "Теры могут брать бомбу: Off"
  es popup addline jm_menu_settings server_var(jm_string)
  if (server_var(jm_ctbombs) == 1) then es_xsetinfo jm_string "Контра может брать бомбу: On"
  if (server_var(jm_ctbombs) == 0) then es_xsetinfo jm_string "Контра может брать бомбу: Off"
  es popup addline jm_menu_settings server_var(jm_string)
  es_format jm_string "Лемит бомб для теров: %1 per round" server_var(jm_tbomblimit)
  es popup addline jm_menu_settings server_var(jm_string)
  es_format jm_string "Лемит бомб для контров: %1 per round" server_var(jm_ctbomblimit)
  es popup addline jm_menu_settings server_var(jm_string)
  if (server_var(jm_announce) == 1) then es_xsetinfo jm_string "Объявление: On"
  if (server_var(jm_announce) == 0) then es_xsetinfo jm_string "Объявление: Off"
  es popup addline jm_menu_settings server_var(jm_string)
  if (server_var(jm_failures) == 0) then es_xsetinfo jm_string "Случайные Отказы: Off"
  if (server_var(jm_failures) > 0) then es_format jm_string "Случайные Отказы: 1 in %1" server_var(jm_failures)
  es popup addline jm_menu_settings server_var(jm_string)
  popup addline jm_menu_settings " "
	popup addline jm_menu_settings "[0] Выход"
	popup addline jm_menu_settings "[1] Детали"
	popup addline jm_menu_settings "[2] Настройки"
	popup addline jm_menu_settings "[3] Кредит"
	popup addline jm_menu_settings "[4] Пользовательские команды"
	popup addline jm_menu_settings "[5] Админские команды"

  // Add selections
	popup select jm_menu_settings 1 jihadmod/menu_details_show
	popup select jm_menu_settings 2 jihadmod/menu_settings_show
	popup select jm_menu_settings 3 jihadmod/menu_credits_show
	popup select jm_menu_settings 4 jihadmod/menu_usercmds_show
	popup select jm_menu_settings 5 jihadmod/menu_admincmds_show
}

block menu_credits_create
{
  // Create menu
  popup create jm_menu_credits
  popup addline jm_menu_credits "##### Jihad-Mod - Credits #####"
  popup addline jm_menu_credits "Written By: Phaedrus"
  popup addline jm_menu_credits "Concept By: Isolation"
  popup addline jm_menu_credits "Explosions Ported From: RocketGuns v2.0 by Wonder"
  popup addline jm_menu_credits "Buy Code Ported From: *XYZ*SaYnt"
  popup addline jm_menu_credits " "
	popup addline jm_menu_credits "[0] Выход"
	popup addline jm_menu_credits "[1] Детали"
	popup addline jm_menu_credits "[2] Настройки"
	popup addline jm_menu_credits "[3] Кредит"
	popup addline jm_menu_credits "[4] Пользовательские команды"
	popup addline jm_menu_credits "[5] Админские команды"

  // Add selections
	popup select jm_menu_credits 1 jihadmod/menu_details_show
	popup select jm_menu_credits 2 jihadmod/menu_settings_show
	popup select jm_menu_credits 3 jihadmod/menu_credits_show
	popup select jm_menu_credits 4 jihadmod/menu_usercmds_show
	popup select jm_menu_credits 5 jihadmod/menu_admincmds_show
}

block menu_usercmds_create
{
  // Create menu
  popup create jm_menu_usercmds
  popup addline jm_menu_usercmds "##### Jihad-Mod - User Commands #####"
  popup addline jm_menu_usercmds "!jm - Shows this menu"
  popup addline jm_menu_usercmds "!ask - Enables asking to buy (default)"
  popup addline jm_menu_usercmds "!noask - Disables asking to buy"
  popup addline jm_menu_usercmds "!buybomb - Shows buy menu (if latebuying is enabled)"
  popup addline jm_menu_usercmds " "
	popup addline jm_menu_usercmds "[0] Выход"
	popup addline jm_menu_usercmds "[1] Детали"
	popup addline jm_menu_usercmds "[2] Настройки"
	popup addline jm_menu_usercmds "[3] Кредит"
	popup addline jm_menu_usercmds "[4] Пользовательские команды"
	popup addline jm_menu_usercmds "[5] Админские команды"

  // Add selections
	popup select jm_menu_usercmds 1 jihadmod/menu_details_show
	popup select jm_menu_usercmds 2 jihadmod/menu_settings_show
	popup select jm_menu_usercmds 3 jihadmod/menu_credits_show
	popup select jm_menu_usercmds 4 jihadmod/menu_usercmds_show
	popup select jm_menu_usercmds 5 jihadmod/menu_admincmds_show
}

block menu_admincmds_create
{
  // Create menu
  popup create jm_menu_admincmds
  popup addline jm_menu_admincmds "##### Jihad-Mod - Admin Commands #####"
  popup addline jm_menu_admincmds "jm_sm_magnitude <inches> (Маленькая Величина Бомбы)"
  popup addline jm_menu_admincmds "jm_lg_magnitude <inches> (Большая Величина Бомбы)"
  popup addline jm_menu_admincmds "jm_sm_price <cash> (Маленькая Цена на Бомбу)"
  popup addline jm_menu_admincmds "jm_lg_price <cash> (Большая Цена на Бомбу)"
  popup addline jm_menu_admincmds "jm_up_price <cash> (Цена на Модернизацию)"
  popup addline jm_menu_admincmds "jm_delay <seconds> (Время на покупку)"
  popup addline jm_menu_admincmds "jm_announce <bool> (Позволить Объявления)"
  popup addline jm_menu_admincmds "jm_latebuying <bool> (Позволить покупать с запозданием)"
  popup addline jm_menu_admincmds "jm_failures <1 in X> (Random Failures)"
  popup addline jm_menu_admincmds " "
	popup addline jm_menu_admincmds "[0] Выход"
	popup addline jm_menu_admincmds "[1] Детали"
	popup addline jm_menu_admincmds "[2] Настройки"
	popup addline jm_menu_admincmds "[3] Кредит"
	popup addline jm_menu_admincmds "[4] Пользовательские команды"
	popup addline jm_menu_admincmds "[5] Админские команды"

  // Add selections
	popup select jm_menu_admincmds 1 jihadmod/menu_details_show
	popup select jm_menu_admincmds 2 jihadmod/menu_settings_show
	popup select jm_menu_admincmds 3 jihadmod/menu_credits_show
	popup select jm_menu_admincmds 4 jihadmod/menu_usercmds_show
	popup select jm_menu_admincmds 5 jihadmod/menu_admincmds_show
}

block menu_buy_show
{
  // Get player team
  es_xsetinfo jm_team 0
  es_getplayerteam jm_team server_var(jm_player)
  
  // Check buy rules
  es_xsetinfo jm_canbuy 0
  if (server_var(jm_team) == 2) then if (server_var(jm_tbombs) == 1) then es_xsetinfo jm_canbuy 1
  if (server_var(jm_team) == 3) then if (server_var(jm_ctbombs) == 1) then es_xsetinfo jm_canbuy 1
  
  // Check their frequency
  es_xsetinfo jm_freq 0
  es_keygetvalue jm_freq jm_playerlist server_var(jm_player) freq
  es_xmath jm_freq + 1
  es_keysetvalue jm_playerlist server_var(jm_player) freq server_var(jm_freq)
  if (server_var(jm_freq) < server_var(jm_buyfreq)) then es_xsetinfo jm_canbuy 0

  // Player can buy
  if (server_var(jm_canbuy) == 1) do
  {
    // Get their ask setting
    es_xsetinfo jm_ask 0
    es_keygetvalue jm_ask jm_playerlist server_var(jm_player) ask

    // Their ask is enabled
    if (server_var(jm_ask) == 1) do
    {
      // Get them from the bomberlist
      es_xsetinfo jm_exists 0
      es_exists jm_exists key jm_bomberlist server_var(jm_player)

      // If they are NOT in the list
      if (server_var(jm_exists) == 0) do
      {
        // Get their cash
        es_xsetinfo jm_cash 0
        es_getplayerprop jm_cash server_var(jm_player) "CCSPlayer.m_iAccount"

        // If they have enough for a small bomb
        if (server_var(jm_cash) >= server_var(jm_sm_price)) do
        {    
          // If they have enough for a large bomb
          if (server_var(jm_cash) >= server_var(jm_lg_price)) do
          {
            // Ask them if they want to buy a large or small bomb
            es popup send jm_menu_buy1 server_var(jm_player)
          }
          else do
          {
            // Ask them if they want to buy a small bomb
            es popup send jm_menu_buy2 server_var(jm_player)
          }
        }
        else do
        {
          // Tell them they don't have the cash
          es_tell server_var(jm_player) #multi #green [Jihad-Mod] #default You do not have enough cash to buy a bomb!
        }
      }
      else do
      {
        // Get their a bomb size
        es_xsetinfo jm_size 0
        es_keygetvalue jm_size jm_bomberlist server_var(jm_player) size

        // If they have a small bomb
        if (server_var(jm_size) < server_var(jm_lg_size)) do
        {
          // Get their cash
          es_xsetinfo jm_cash 0
          es_getplayerprop jm_cash server_var(jm_player) "CCSPlayer.m_iAccount"

          // If they have enough for an upgrade
          if (server_var(jm_cash) >= server_var(jm_up_price)) do
          {  
            // Ask them if they want to upgrade to a large bomb
            es popup send jm_menu_buy3 server_var(jm_player)
          }
          else do
          {
            // Tell them they don't have the cash
            es_tell server_var(jm_player) #multi #green [Jihad-Mod] #default У Вас нет достаточного количества наличных денег, чтобы модернизировать Вашу бомбу!
          }
        }
      }
    }
  }
}

block menu_buy_sm
{
  // Get them from the bomberlist
  es_xsetinfo jm_exists 0
  es_exists jm_exists key jm_bomberlist server_var(_popup_userid)

  // If they are NOT in the list
  if (server_var(jm_exists) == 0) do
  {
    // Get their cash
    es_xsetinfo jm_cash 0
    es_getplayerprop jm_cash server_var(_popup_userid) "CCSPlayer.m_iAccount"

    // If they have enough cash for a small bomb
    if (server_var(jm_cash) >= server_var(jm_sm_price)) do
    {
      // Get player team
      es_xsetinfo jm_team 0
      es_getplayerteam jm_team server_var(_popup_userid)

      // Check if they can buy
      es_xsetinfo jm_canbuy 0
      if (server_var(jm_team) == 2) then if (server_var(jm_tbombcount) < server_var(jm_tbomblimit)) then es_xsetinfo jm_canbuy 1
      if (server_var(jm_team) == 3) then if (server_var(jm_ctbombcount) < server_var(jm_ctbomblimit)) then es_xsetinfo jm_canbuy 1

      // If they can buy
      if (server_var(jm_canbuy) == 1) do
      {
        // Increment bombcount
        if (server_var(jm_team) == 2) then es_xmath jm_tbombcount + 1
        if (server_var(jm_team) == 3) then es_xmath jm_ctbombcount + 1

        // Subtract small bomb price
        es_math jm_cash - server_var(jm_sm_price)
        es_setplayerprop server_var(_popup_userid) "CCSPlayer.m_iAccount" server_var(jm_cash)

        // Give them a small bomb
        es_keycreate jm_bomberlist server_var(_popup_userid)
        es_keysetvalue jm_bomberlist server_var(_popup_userid) size server_var(jm_sm_size)
        es_keysetvalue jm_bomberlist server_var(_popup_userid) armed 0
        es_keysetvalue jm_bomberlist server_var(_popup_userid) armwait server_var(jm_delay)
        if (server_var(jm_colorbomber) == 1) then es est_SetPlayerColor server_var(_popup_userid) 225 50 50 255 1
        
        // Reset their frequency
        es_keysetvalue jm_playerlist event_var(userid) freq 0

        // Emit pickup sound from player
        es_emitsound player server_var(_popup_userid) items/itempickup.wav 1.0 0.75
      }
      else do
      {
        // Tell them there are too many bombs
        es_tell server_var(_popup_userid) #multi #green [Jihad-Mod] #default У Вашей команды слишком много бомб!
      }
    }
    else do
    {
      // Tell them they don't have the cash
      es_tell server_var(_popup_userid) #multi #green [Jihad-Mod] #default У Вас нет достаточного количества наличных денег!
    }
  }
  else do
  {
    // Tell them they already have a bomb
    es_tell server_var(_popup_userid) #multi #green [Jihad-Mod] #default У Вас уже есть бомба для самоубийства!
  }
}

block menu_buy_lg
{
  // Get them from the bomberlist
  es_xsetinfo jm_exists 0
  es_exists jm_exists key jm_bomberlist server_var(_popup_userid)

  // If they are NOT in the list
  if (server_var(jm_exists) == 0) do
  {
    // Get their cash
    es_xsetinfo jm_cash 0
    es_getplayerprop jm_cash server_var(_popup_userid) "CCSPlayer.m_iAccount"

    // If they have enough cash for a large bomb
    if (server_var(jm_cash) >= server_var(jm_lg_price)) do
    {
      // Get player team
      es_xsetinfo jm_team 0
      es_getplayerteam jm_team server_var(_popup_userid)

      // Check if they can buy
      es_xsetinfo jm_canbuy 0
      if (server_var(jm_team) == 2) then if (server_var(jm_tbombcount) < server_var(jm_tbomblimit)) then es_xsetinfo jm_canbuy 1
      if (server_var(jm_team) == 3) then if (server_var(jm_ctbombcount) < server_var(jm_ctbomblimit)) then es_xsetinfo jm_canbuy 1

      // If they can buy
      if (server_var(jm_canbuy) == 1) do
      {
        // Increment bombcount
        if (server_var(jm_team) == 2) then es_xmath jm_tbombcount + 1
        if (server_var(jm_team) == 3) then es_xmath jm_ctbombcount + 1

        // Subtract large bomb price
        es_math jm_cash - server_var(jm_lg_price)
        es_setplayerprop server_var(_popup_userid) "CCSPlayer.m_iAccount" server_var(jm_cash)

        // Give them a large bomb
        es_keycreate jm_bomberlist server_var(_popup_userid)
        es_keysetvalue jm_bomberlist server_var(_popup_userid) size server_var(jm_lg_size)
        es_keysetvalue jm_bomberlist server_var(_popup_userid) armed 0
        es_keysetvalue jm_bomberlist server_var(_popup_userid) armwait server_var(jm_delay)
        if (server_var(jm_colorbomber) == 1) then es est_SetPlayerColor server_var(_popup_userid) 225 50 50 255 1
        
        // Reset their frequency
        es_keysetvalue jm_playerlist event_var(userid) freq 0

        // Emit pickup sound from player
        es_emitsound player server_var(_popup_userid) items/itempickup.wav 1.0 0.75
      }
      else do
      {
        // Tell them there are too many bombs
        es_tell server_var(_popup_userid) #multi #green [Jihad-Mod] #default У Вашей команды слишком много бомб!
      }
    }
    else do
    {
      // Tell them they don't have the cash
      es_tell server_var(_popup_userid) #multi #green [Jihad-Mod] #default У Вас нет достаточного количества наличных денег!
    }
  }
  else do
  {
    // Tell them they already have a bomb
    es_tell server_var(_popup_userid) #multi #green [Jihad-Mod] #default У Вас уже есть бомба для самоубийства!
  }
}

block menu_buy_up
{
  // Get them from the bomberlist
  es_xsetinfo jm_exists 0
  es_exists jm_exists key jm_bomberlist server_var(_popup_userid)

  // If they are in the list
  if (server_var(jm_exists) == 1) do
  {
    // Get their bomb size
    es_xsetinfo jm_size 0
    es_keygetvalue jm_size jm_bomberlist server_var(_popup_userid) size

    // If they have a small bomb
    if (server_var(jm_size) < server_var(jm_lg_size)) do
    {
      // Get their cash
      es_xsetinfo jm_cash 0
      es_getplayerprop jm_cash server_var(_popup_userid) "CCSPlayer.m_iAccount"

      // If they have enough cash for a large bomb upgrade
      if (server_var(jm_cash) >= server_var(jm_up_price)) do
      {
        // Subtract large bomb upgrade price
        es_math jm_cash - server_var(jm_up_price)
        es_setplayerprop server_var(_popup_userid) "CCSPlayer.m_iAccount" server_var(jm_cash)

        // Give them a large bomb
        es_keysetvalue jm_bomberlist server_var(_popup_userid) size server_var(jm_lg_size)
        es_keysetvalue jm_bomberlist server_var(_popup_userid) armed 0
        es_keysetvalue jm_bomberlist server_var(_popup_userid) armwait server_var(jm_delay)
        if (server_var(jm_colorbomber) == 1) then es est_SetPlayerColor server_var(_popup_userid) 225 50 50 255 1

        // Emit pickup sound from player
        es_emitsound player server_var(_popup_userid) items/itempickup.wav 1.0 0.75
      }
      else do
      {
        // Tell them they don't have the cash
        es_tell server_var(_popup_userid) #multi #green [Jihad-Mod] #default У Вас нет достаточного количества наличных денег!
      }
    }
    else do
    {
      // Tell them they already have a large bomb
      es_tell server_var(_popup_userid) #multi #green [Jihad-Mod] #default У Вас уже есть большая бомба для самоубийства!
    }
  }
  else do
  {
    // Tell them they don't have a bomb
    es_tell server_var(_popup_userid) #multi #green [Jihad-Mod] #default У Вас нет бомбы для самоубийства, чтобы её модернизировать!
  }
}

block menu_details_show
{
  // Show menu
  es popup send jm_menu_details server_var(_popup_userid)
}

block menu_settings_show
{
  // Show menu
  es popup send jm_menu_settings server_var(_popup_userid)
}

block menu_credits_show
{
  // Show menu
  es popup send jm_menu_credits server_var(_popup_userid)
}

block menu_usercmds_show
{
  // Show menu
  es popup send jm_menu_usercmds server_var(_popup_userid)
}

block menu_admincmds_show
{
  // Get player team
  es_xsetinfo jm_steamid 0
  es_getplayersteamid jm_steamid server_var(_popup_userid)

  // Player can buy
  if (server_var(jm_steamid) in server_var(jm_admins)) do
  {
    // Show menu
    es popup send jm_menu_admincmds server_var(_popup_userid)
  }
  else do
  {
    // Tell them they aren't an admin
    es_tell server_var(_popup_userid) #multi #green [Jihad-Mod] #default Вы не admin!
  }
}

event player_death
{
  // Get them from the bomberlist
  es_xsetinfo jm_exists 0
  es_exists jm_exists key jm_bomberlist event_var(userid)

  // If they are NOT in the list
  if (server_var(jm_exists) == 1) do
  {
    // Get their armed status
    es_xsetinfo jm_armed 0
    es_keygetvalue jm_armed jm_bomberlist event_var(userid) armed

    // Check if bombs are armed
    if (server_var(jm_armed) == 1) do
    {
      // Check if an explosion killed them
      if (event_var(weapon) == env_explosion) do
      {
        // Get userid
        es_xsetinfo jm_userid 0
        es_setinfo jm_userid event_var(userid)

        // Blow them up
        es_xdoblock jihadmod/explode
      }
    }

    // Remove the player from the list
    es_keydelete jm_bomberlist event_var(userid)
  }

  // Remove menus
  popup unsendname jm_menu_buy1 event_var(userid)
  popup unsendname jm_menu_buy2 event_var(userid)
  popup unsendname jm_menu_buy3 event_var(userid)

  // If they were killed by explosion
  if (event_var(weapon) == env_explosion) do
  {
    // If they were on the same team
    if (event_var(es_userteam) == event_var(es_attackerteam)) do
    {
      // If they were NOT the same person
      if (event_var(userid) != event_var(attacker)) do
      {
        // Update their frequency
        es_xsetinfo jm_freq 0
        es_keygetvalue jm_freq jm_playerlist event_var(attacker) freq
        es_math jm_freq - server_var(jm_tkpunish)
        es_keysetvalue jm_playerlist event_var(attacker) freq server_var(jm_freq)
      }
    }
    else do
    {
      // Pay the attacker
      es_xsetinfo jm_pd_cash 0
      es_getplayerprop jm_pd_cash event_var(attacker) "CCSPlayer.m_iAccount"
      es_math jm_pd_cash + server_var(jm_killcash)
      if (server_var(jm_pd_cash) > 16000) then es_xsetinfo jm_pd_cash 16000
      es_setplayerprop event_var(attacker) "CCSPlayer.m_iAccount" server_var(jm_pd_cash)
    }
  }

  // If they were killed by explosion
  if (event_var(weapon) == point_hurt) do
  {
    // Pay the attacker
    es_xsetinfo jm_pd_cash 0
    es_getplayerprop jm_pd_cash event_var(attacker) "CCSPlayer.m_iAccount"
    es_math jm_pd_cash + server_var(jm_killcash)
    if (server_var(jm_pd_cash) > 16000) then es_xsetinfo jm_pd_cash 16000
    es_setplayerprop event_var(attacker) "CCSPlayer.m_iAccount" server_var(jm_pd_cash)
  }
}

block player_hurt
{
  // Get them from the bomberlist
  es_xsetinfo jm_exists 0
  es_exists jm_exists key jm_bomberlist event_var(userid)

  // If they are NOT in the list
  if (server_var(jm_exists) == 1) do
  {
    // Get their armed status
    es_xsetinfo jm_armed 0
    es_keygetvalue jm_armed jm_bomberlist event_var(userid) armed

    // Check if bombs are armed
    if (server_var(jm_armed) == 1) do
    {  
      // Check if damage was to chest
      if (event_var(hitgroup) == 2) do
      {      
        // Get random number for detonation
        es_xsetinfo jm_random 0
        es_rand jm_random 1 50

        // Check for detonation
        if (server_var(jm_random) < event_var(dmg_health)) do
        {
          // Get userid
          es_xsetinfo jm_userid 0
          es_setinfo jm_userid event_var(userid)

          // Trigger their bomb
          es_xdoblock jihadmod/explode

          // Get player name
          es_xsetinfo jm_name " "
          es_getplayername jm_name event_var(userid)

          // Get player name
          es_xsetinfo jm_attackername " "
          es_getplayername jm_attackername event_var(attacker)

          // Announce explosion
          if (server_var(jm_announce) == 1) then es_msg #multi #green [Jihad-Mod] #default server_var(jm_name)'s suicide bomb was accidentally detonated by server_var(jm_attackername)!
        }
      }
    }
  }
}

block boom
{
  // Get userid
  es_xsetinfo jm_userid 0
  es_xgetcmduserid jm_userid

  // Get them from the bomberlist
  es_xsetinfo jm_exists 0
  es_exists jm_exists key jm_bomberlist server_var(jm_userid)

  // If they are NOT in the list
  if (server_var(jm_exists) == 1) do
  {
    // Get their armed status
    es_xsetinfo jm_armed 0
    es_keygetvalue jm_armed jm_bomberlist server_var(jm_userid) armed

    // Check if bombs are armed
    if (server_var(jm_armed) == 1) do
    {    
      // Get player name
      es_xsetinfo jm_name " "
      es_getplayername jm_name server_var(jm_userid)
  
      // Get random number for failure
      es_xsetinfo jm_random 0
      es_rand jm_random 1 server_var(jm_failures)

      // Check for failure
      if (server_var(jm_random) == server_var(jm_failures)) do
      {
        // Announce failure
        if (server_var(jm_announce) == 1) then es_msg #multi #green [Jihad-Mod] #default server_var(jm_name) detonated their suicide bomb, but nothing happened!
    
        // Remove the player from the list
        es_keydelete jm_bomberlist server_var(jm_userid)
      }
      else do
      {
        // Blow them up
        es_xdoblock jihadmod/explode
    
        // Announce explosion
        if (server_var(jm_announce) == 1) then es_msg #multi #green [Jihad-Mod] #default server_var(jm_name) detonated their suicide bomb!
      }
    }
    else do
    {
      // Tell them they aren't armed
      es_tell server_var(jm_userid) #multi #green [Jihad-Mod] #default Ваша бомба еще не готова!
    }
  }
}

block explode
{
  // Create an explosion
  es_give server_var(jm_userid) env_explosion

  // Set explosion owner
  es_xsetinfo jm_owner 0
  es_getplayerhandle jm_owner server_var(jm_userid)
  es_setindexprop server_var(eventscripts_lastgive) "CBaseEntity.m_hOwnerEntity" server_var(jm_owner)

  // Get their bomb size
  es_xsetinfo jm_size 0
  es_keygetvalue jm_size jm_bomberlist server_var(jm_userid) size

  // Remove the player from the list
  es_keydelete jm_bomberlist server_var(jm_userid)

  // Set explosion magnitude
  es_xsetinfo jm_magnitude 0
  es_format jm_magnitude "imagnitude %1" server_var(jm_size)
  es_fire server_var(jm_userid) env_explosion addoutput server_var(jm_magnitude)

  // Random explosion sound effect
  es_xsetinfo jm_sound 0
  es_xrand jm_sound 1 9
  if (server_var(jm_sound) == 6) then es_xsetinfo jm_sound 1
	es_format jm_sound "ambient/explosions/explode_%1.wav" server_var(jm_sound)
	es_emitsound entity server_var(eventscripts_lastgive) server_var(jm_sound) 1.0 0.5

  // Get player location for explosion effect
  es_xsetinfo jm_x 0
  es_xsetinfo jm_y 0
  es_xsetinfo jm_z 0
  es_getplayerlocation jm_x jm_y jm_z server_var(jm_userid)

  // Make the ground shake
  es_format jm_origin "origin %1 %2 %3" server_var(jm_x) server_var(jm_y) server_var(jm_z)
  es_give server_var(jm_userid) env_shake
  es_fire server_var(jm_userid) env_shake AddOutput "spawnflags 12"
  es_fire server_var(jm_userid) env_shake AddOutput server_var(jm_origin)
  es_fire server_var(jm_userid) env_shake AddOutput "amplitude 15"
  es_fire server_var(jm_userid) env_shake AddOutput "radius 3000"
  es_fire server_var(jm_userid) env_shake AddOutput "duration 1.5"
  es_fire server_var(jm_userid) env_shake AddOutput "frequency 50"

  // Cause the explosion with effects
  es ma_effect 12 A 0 server_var(jm_x) server_var(jm_y) server_var(jm_z) lightning 10 10 32 server_var(jm_size) server_var(jm_size)
  es_fire server_var(jm_userid) env_shake StartShake
  es_fire server_var(jm_userid) env_shake kill

  // If ff is enabled
  if (server_var(jm_ff) == 1) do
  {
    // Do normal explosion
    es_fire server_var(jm_userid) env_explosion explode
  }
  else do
  {
    // Kill them
 	  es_give server_var(jm_userid) point_hurt 
	  es_fire server_var(jm_userid) !self addoutput "targetname badboy"
    es_fire server_var(jm_userid) point_hurt addoutput "targetname bombdmg"
	  es_fire server_var(jm_userid) bombdmg addoutput "Damage 250"
	  es_fire server_var(jm_userid) bombdmg addoutput "DamageType 32"
	  es_fire server_var(jm_userid) bombdmg addoutput "DamageTarget badboy"
	  es_fire server_var(jm_userid) bombdmg TurnOn
    es_fire server_var(jm_userid) bombdmg Hurt 
	  es_fire server_var(jm_userid) bombdmg Kill
	  es_fire server_var(jm_userid) !self addoutput "targetname notbad"
    es_sexec server_var(jm_userid) kill

    // Set explosion owner
    es_xsetinfo jm_team 0
    es_getplayerteam jm_team server_var(jm_userid)

    // Kill any nearby enemies
    es_xsetinfo jm_enemy 0
    if (server_var(jm_team) == 2) then es est_near jm_enemy #c!d server_var(jm_size) server_var(jm_userid) "es_xdoblock jihadmod/kill"
    if (server_var(jm_team) == 3) then es est_near jm_enemy #t!d server_var(jm_size) server_var(jm_userid) "es_xdoblock jihadmod/kill"
  }
}

block kill
{
  // Kill them
 	es_give server_var(jm_enemy) point_hurt 
	es_fire server_var(jm_enemy) !self addoutput "targetname badboy"
  es_fire server_var(jm_enemy) point_hurt addoutput "targetname bombdmg"
	es_fire server_var(jm_enemy) bombdmg addoutput "Damage 250"
	es_fire server_var(jm_enemy) bombdmg addoutput "DamageType 32"
	es_fire server_var(jm_userid) bombdmg addoutput "DamageTarget badboy"
	es_fire server_var(jm_enemy) bombdmg TurnOn
  es_fire server_var(jm_userid) bombdmg Hurt 
	es_fire server_var(jm_enemy) bombdmg Kill
	es_fire server_var(jm_enemy) !self addoutput "targetname notbad"
}

block timer
{
  // Check if timer is running
  if (server_var(jm_timer) == 1) do
  {
    // Tell each player they are armed
    es_xsetinfo jm_bomber 0
    es_xforeachkey jm_bomber in jm_bomberlist "es_xdoblock jihadmod/check_armed"

    // Run timer again
    es_xdelayed 1 es_xdoblock jihadmod/timer
  }
}

block check_armed
{
  // Get their armed status
  es_xsetinfo jm_armed 0
  es_keygetvalue jm_armed jm_bomberlist server_var(jm_bomber) armed

  // Check if they are NOT armed
  if (server_var(jm_armed) == 0) do
  {
    // Get their armwait
    es_xsetinfo jm_armwait 0
    es_keygetvalue jm_armwait jm_bomberlist server_var(jm_bomber) armwait

    // Update their armwait
    es_xmath jm_armwait - 1
    es_keysetvalue jm_bomberlist server_var(jm_bomber) armwait server_var(jm_armwait)

    // Check if we should arm them
    if (server_var(jm_armwait) <= 0) do
    {
  
      // Arm their bomb
      es_keysetvalue jm_bomberlist server_var(jm_bomber) armed 1

      // Emit arming sound from player
      es_emitsound player server_var(jm_bomber) buttons/blip2.wav 1.0 0.85

      // Tell player they are armed
      es_tell server_var(jm_bomber) #multi #green [Jihad-Mod] #default Ваша бомба для самоубийства готова!
    }
  }
}
