////////////////////////////////////////
// WCS - Warcraft:Source              //
// ---------------------------------- //
//  by kRypT0n!Te                     //
//      http://wc3source.de           //
// ---------------------------------- //
// Content of this subscript          //
// - weapon restriction system        //
////////////////////////////////////////
//
// Thanks to Phat_Wizard
//
// console commands:
// - wcs_restrict_purge <userid>
// - wcs_restrict <userid> restrict <weapon>
// - wcs_restrict <userid> allow <weapon> <give> <knife>
// - wcs_restrict <userid> addallow <weapon>
// - wcs_restrict <userid> knife
// - wcs_restrict <userid> knifeonly
////////////////////////////////////////
// Note: currently only CSS support!!

block load
{
  es_xset wcs_res_ui 0 "user id"
  es_xset wcs_res_type 0 "type of restriction - restrict/allow/knife/knifeonly"
  es_xset wcs_res_wep 0 "weapon to be restricted"
  es_xset wcs_res_give 0 "give weapon flag"
  es_xset wcs_res_knife 0 "allow knife flag"
  es_xset wcs_res_wep_wep 0 "weapon id like weapon_NAME"
  es_xset wcs_res_check 0 "bool value"
  es_xexists ex command wcs_restrict
  if (server_var(ex) = 0) then es_xregcmd wcs_restrict wcs/WCSfunctions/WCSrestrict/wcs_restrict "Restriction Command."
  es_xexists ex command wcs_restrict_purge
  if (server_var(ex) = 0) then es_xregcmd wcs_restrict_purge wcs/WCSfunctions/WCSrestrict/wcs_res_keyreset_all "Restriction Purge Command."
  es_xset wcs_res_css_list "<weapon_glock>|<weapon_usp>|<weapon_p228>|<weapon_deagle>|<weapon_elite>|<weapon_fiveseven>|<weapon_m3>|<weapon_xm1014>|<weapon_tmp>|<weapon_mac10>|<weapon_mp5navy>|<weapon_ump45>|<weapon_p90>|<weapon_famas>|<weapon_galil>|<weapon_aug>|<weapon_sg552>|<weapon_m4a1>|<weapon_ak47>|<weapon_scout>|<weapon_awp>|<weapon_sg550>|<weapon_g3sg1>|<weapon_m249>|<weapon_knife>|<weapon_hegrenade>|<weapon_flashbang>|<weapon_smokegrenade>"
  es_xkeygroupcreate WCSrestrict
  if (server_var(wcs_game) = server_var(wcs_game_css)) do
  {
    // 28 weapons!
    es_xset wcs_counter 1
    while "server_var(wcs_counter) <= 28" "es_token wcs_tmp server_var(wcs_res_css_list) server_var(wcs_counter) |;es_keycreate WCSrestrict server_var(wcs_tmp);es_xmath wcs_counter + 1"
  }
}

event player_activate
{
  // create empty values
  es wcs_restrict_purge event_var(userid)
}

block wcs_restrict
{
  es_xgetargv wcs_res_ui 1
  es_xgetargv wcs_res_type 2
  es_xgetargv wcs_res_wep 3
  es_xgetargv wcs_res_give 4
  es_xgetargv wcs_res_knife 5
  es_xformatv wcs_res_wep_wep "weapon_%1" wcs_res_wep
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------

//SYNTAX: wcs_restrict <userid> restrict <weapon>
  if (server_var(wcs_res_type) == restrict) do
  {
    if (server_var(wcs_game) == server_var(wcs_game_css)) do
    {
      es_xformatv wcs_res_check "<weapon_%1>" wcs_res_wep
      if (server_var(wcs_res_check) in server_var(wcs_res_css_list)) do
      {
        es est_removeweapon server_var(wcs_res_ui) server_var(wcs_res_wep_wep)
        es est_restrict server_var(wcs_res_ui) server_var(wcs_res_wep)
        es_keysetvalue WCSrestrict server_var(wcs_res_check) server_var(wcs_res_ui) 1
      }
    }    
  }
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------

//SYNTAX: wcs_restrict <userid> allow <weapon> <give> <knife>
  if (server_var(wcs_res_type) == allow) do
  {
    if (server_var(wcs_game) = server_var(wcs_game_css)) do
    {
      es_xformatv wcs_res_check "<weapon_%1>" wcs_res_wep
      if (server_var(wcs_res_check) in server_var(wcs_res_css_list)) do
      {
        es est_removeweapon server_var(wcs_res_ui) 1
        es est_removeweapon server_var(wcs_res_ui) 2
        es_xdoblock wcs/WCSfunctions/WCSrestrict/wcs_res_keyset_all
        es_xdoblock wcs/WCSfunctions/WCSrestrict/wcs_res_nades_allow
        es est_unrestrict server_var(wcs_res_ui) server_var(wcs_res_wep)
        es_keysetvalue WCSrestrict server_var(wcs_res_check) server_var(wcs_res_ui) 0
        ifx true(wcs_res_knife) do
        {
          es est_unrestrict server_var(wcs_res_ui) knife
          es_keysetvalue WCSrestrict <weapon_knife> server_var(wcs_res_ui) 0
          es_give server_var(wcs_res_ui) weapon_knife
        }
        if (server_var(wcs_res_give) = 1) then es_xgive server_var(wcs_res_ui) server_var(wcs_res_wep_wep)
      }
    }
  }
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------

//SYNTAX: wcs_restrict <userid> addallow <weapon>
  if (server_var(wcs_res_type) == addallow) do
  {
    if (server_var(wcs_game) = server_var(wcs_game_css)) do
    {
      es_xformatv wcs_res_check "<weapon_%1>" wcs_res_wep
      if (server_var(wcs_res_check) in server_var(wcs_res_css_list)) do
      {
        es est_unrestrict server_var(wcs_res_ui) server_var(wcs_res_wep)
        es_keysetvalue WCSrestrict server_var(wcs_res_check) server_var(wcs_res_ui) 0
      }
    }
  }
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------

//SYNTAX: wcs_restrict <userid> knife
  if (server_var(wcs_res_type) == knife) do
  {
    if (server_var(wcs_game) = server_var(wcs_game_css)) do
    {
      es_xset wcs_res_check "<weapon_knife>"
      if (server_var(wcs_res_check) in server_var(wcs_res_css_list)) do
      {
        es est_removeweapon server_var(wcs_res_ui) 1
        es est_removeweapon server_var(wcs_res_ui) 2
        es_xdoblock wcs/WCSfunctions/WCSrestrict/wcs_res_keyset_all
        es_xdoblock wcs/WCSfunctions/WCSrestrict/wcs_res_nades_allow
        es_give server_var(wcs_res_ui) weapon_knife
      }
    }
  }
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------

//SYNTAX: wcs_restrict <userid> knifeonly
  if (server_var(wcs_res_type) == knifeonly) do
  {
    if (server_var(wcs_game) = server_var(wcs_game_css)) do
    {
      es_xset wcs_res_check "<weapon_knife>"
      if (server_var(wcs_res_check) in server_var(wcs_res_css_list)) do
      {
        es est_removeweapon server_var(wcs_res_ui) 1
        es est_removeweapon server_var(wcs_res_ui) 2
        es_xdoblock wcs/WCSfunctions/WCSrestrict/wcs_res_keyset_all
        es_give server_var(wcs_res_ui) weapon_knife
      }
    }
  }
}

event item_pickup
{
  es_set wcs_res_wep event_var(item)
  es_xformatv wcs_res_wep_wep "weapon_%1" wcs_res_wep
  if (server_var(wcs_game) = server_var(wcs_game_css)) do
  {
    es_xformatv wcs_res_check "<weapon_%1>" wcs_res_wep
    if (server_var(wcs_res_check) in server_var(wcs_res_css_list)) do
    {
      es_xset wcs_check 0
      es_keygetvalue wcs_check WCSrestrict server_var(wcs_res_check) event_var(userid)
      ifx true(wcs_check) do
      {
        es est_dropweapon event_var(userid) server_var(wcs_res_wep)
        wcs_getlanguage wcs_lng wcs_lng_restricted
        es_tell event_var(userid) #multi server_var(wcs_lng)
      }
    }
  }
}

block wcs_res_keyset_all
{
  if (server_var(wcs_game) = server_var(wcs_game_css)) do
  {
    es_xforeachkey wcs_key in WCSrestrict "es_keysetvalue WCSrestrict server_var(wcs_key) server_var(wcs_res_ui) 1"
    es est_restrictall server_var(wcs_res_ui)
    // unrestrict knife and C4!!
    es_keysetvalue WCSrestrict <weapon_knife> server_var(wcs_res_ui) 0
    es est_unrestrict server_var(wcs_res_ui) knife
    es est_unrestrict server_var(wcs_res_ui) c4
  }
}

block wcs_res_nades_allow
{
  if (server_var(wcs_game) = server_var(wcs_game_css)) do
  {
    es_keysetvalue WCSrestrict <weapon_hegrenade> server_var(wcs_res_ui) 0
    es_keysetvalue WCSrestrict <weapon_flashbang> server_var(wcs_res_ui) 0
    es_keysetvalue WCSrestrict <weapon_smokegrenade> server_var(wcs_res_ui) 0
    es est_unrestrict server_var(wcs_res_ui) hegrenade
    es est_unrestrict server_var(wcs_res_ui) smokegrenade
    es est_unrestrict server_var(wcs_res_ui) flashbang
  }
}

block wcs_res_nades_unallow
{
  if (server_var(wcs_game) = server_var(wcs_game_css)) do
  {
    es_keysetvalue WCSrestrict <weapon_hegrenade> server_var(wcs_res_ui) 1
    es_keysetvalue WCSrestrict <weapon_flashbang> server_var(wcs_res_ui) 1
    es_keysetvalue WCSrestrict <weapon_smokegrenade> server_var(wcs_res_ui) 1
    es est_restrict server_var(wcs_res_ui) hegrenade
    es est_restrict server_var(wcs_res_ui) smokegrenade
    es est_restrict server_var(wcs_res_ui) flashbang
  }
}

block wcs_res_keyreset_all
{
  es_xgetargv wcs_res_ui 1
  es_exists ex userid server_var(wcs_res_ui)
  ifx true(ex) do
  {
    es est_unrestrictall server_var(wcs_res_ui)
    if (server_var(wcs_game) = server_var(wcs_game_css)) then es_xforeachkey wcs_key in WCSrestrict "es_keysetvalue WCSrestrict server_var(wcs_key) server_var(wcs_res_ui) 0"
  }
}
