////////////////////////////////////////
// WCS - Warcraft:Source              //
// ---------------------------------- //
//  by kRypT0n!Te                     //
//      http://wc3source.de           //
// ---------------------------------- //
// Content of this subscript          //
// - race handling                    //
////////////////////////////////////////
// say commands:
// raceinfo, changerace
//
// admin commands:
// wcs_race_menu <userid>
// wcs_showraceinfo <userid>
//
////////////////////////////////////////

block load
{
  es_xexists ex keygroup "WCSinfo"
  if (server_var(ex) = 0) then es_xkeygroupcreate "WCSinfo"
  es_xexists ex key "WCSinfo" "raceinfo"
  if (server_var(ex) = 0) do
  {
    es_xkeycreate "WCSinfo" "raceinfo"
  }
  es_xelse do
  {
    es_xkeydelete "WCSinfo" "raceinfo"
    es_xkeycreate "WCSinfo" "raceinfo"
  }
  es_xkeygroupload "WCSraces" "|wcs/WCSraces"
  // loadup races, shop items
  es_xset wcs_numberofraces 0
  alias wcs_checkracealias "if (racealias in server_var(wcs_val)) then es_xkeygetvalue wcs_tmp WCSraces server_var(wcs_key) server_var(wcs_val);if (racealias in server_var(wcs_val)) then alias server_var(wcs_val) server_var(wcs_tmp)"
  alias wcs_checkracelanguage "if (wcs_lng_r in server_var(wcs_name)) then wcs_getlanguage wcs_name server_var(wcs_name);es_keysetvalue WCSraces server_var(wcs_key) name server_var(wcs_name);es_keygetvalue wcs_descr WCSraces server_var(wcs_key) skilldescr;if (wcs_lng_r in server_var(wcs_descr)) then wcs_getlanguage wcs_descr server_var(wcs_descr);es_keysetvalue WCSraces server_var(wcs_key) skilldescr server_var(wcs_descr);es_keygetvalue wcs_tmp WCSraces server_var(wcs_key) skillnames;if (wcs_lng_r in server_var(wcs_tmp)) then wcs_getlanguage wcs_tmp server_var(wcs_tmp);es_keysetvalue WCSraces server_var(wcs_key) skillnames server_var(wcs_tmp);wcs_checkracelanguage2"
  alias wcs_checkracelanguage2 "es_keygetvalue wcs_descr WCSraces server_var(wcs_key) shortdescription;if (wcs_lng_r in server_var(wcs_descr)) then wcs_getlanguage wcs_descr server_var(wcs_descr);es_keysetvalue WCSraces server_var(wcs_key) shortdescription server_var(wcs_descr)"
  es_xforeachkey wcs_key in "WCSraces" "es_keygetvalue wcs_cmd WCSraces server_var(wcs_key) preloadcmd;if (server_var(wcs_cmd) != 0) then alias wcs_loadcmd server_var(wcs_cmd);if (server_var(wcs_cmd) != 0) then wcs_loadcmd;es_foreachval wcs_val in WCSraces server_var(wcs_key) wcs_checkracealias;es_keygetvalue wcs_name WCSraces server_var(wcs_key) name;wcs_checkracelanguage;es echo [WCS] loaded race : server_var(wcs_name);es_xmath wcs_numberofraces + 1"
  es echo "[WCS] total : " server_var(wcs_numberofraces) " races loaded"
  // create the raceinfo data
  es_xdoblock wcs/WCSraces/wcs_raceinfo
  es_xexists ex command wcs_race_menu
  if (server_var(ex) = 0) then es_xregcmd wcs_race_menu wcs/WCSraces/wcs_race_menu "wcs_race_menu - usage: wcs_race_menu <userid>"
  es_xexists ex command wcs_showraceinfo
  if (server_var(ex) = 0) then es_xregcmd wcs_showraceinfo wcs/WCSraces/wcs_showraceinfo "Shows detail info about races"
  es_xexists ex saycommand changerace
  if (server_var(ex) = 0) then es_xregsaycmd changerace wcs/WCSraces/wcs_changerace "Change your race"
  es_xexists ex saycommand raceinfo
  if (server_var(ex) = 0) then es_xregsaycmd raceinfo wcs/WCSraces/wcs_showraceinfo "Shows detail info about the races"
}

block unload
{
  es_xkeygroupdelete "WCSraces"
  es_xkeydelete "WCSinfo" "raceinfo"
}

event dod_round_start
{
  // checks the roundstartcmd for all races
  es_xforeachkey wcs_key in "WCSraces" "es_keygetvalue wcs_cmd WCSraces server_var(wcs_key) round_start_cmd;es_strlen wcs_strlen server_var(wcs_cmd);if (server_var(wcs_strlen) > 1) then alias wcs_runcmd server_var(wcs_cmd);if (server_var(wcs_strlen) > 1) then wcs_runcmd"
}

event round_start
{
  // checks the roundstartcmd for all races
  es_xforeachkey wcs_key in "WCSraces" "es_keygetvalue wcs_cmd WCSraces server_var(wcs_key) round_start_cmd;es_strlen wcs_strlen server_var(wcs_cmd);if (server_var(wcs_strlen) > 1) then alias wcs_runcmd server_var(wcs_cmd);if (server_var(wcs_strlen) > 1) then wcs_runcmd"
}
event round_end
{
  // checks the roundendcmd for all races, and reset race counter
  es_xforeachkey wcs_key in "WCSraces" "es_keygetvalue wcs_cmd WCSraces server_var(wcs_key) round_end_cmd;es_strlen wcs_strlen server_var(wcs_cmd);if (server_var(wcs_strlen) > 1) then alias wcs_runcmd server_var(wcs_cmd);if (server_var(wcs_strlen) > 1) then wcs_runcmd;es_keysetvalue WCSraces server_var(wcs_key) 2 0;es_keysetvalue WCSraces server_var(wcs_key) 3 0"
  if (server_var(wcs_cfg_enableraceteamlimit) = "1") do
  {
    // check the player's races
    es_xforeachkey wcs_key in "WCSuserdata" "es_getplayerteam wcs_team server_var(wcs_key);es_keygetvalue wcs_race WCSuserdata server_var(wcs_key) race;es_keygetvalue wcs_tmp WCSraces server_var(wcs_race) server_var(wcs_team);es_xmath wcs_tmp + 1;if (server_var(wcs_team) >= 2) then es_xif (server_var(wcs_team) <= 3) then es_xkeysetvalue WCSraces server_var(wcs_race) server_var(wcs_team) server_var(wcs_tmp)"
    // check again, if one player is over the race limit/team
    es_xforeachkey wcs_key in "WCSuserdata" "es_getplayerteam wcs_team server_var(wcs_key);es_keygetvalue wcs_race WCSuserdata server_var(wcs_key) race;es_keygetvalue wcs_tmp WCSraces server_var(wcs_race) server_var(wcs_team);es_keygetvalue wcs_limit WCSraces server_var(wcs_race) teamlimit;if (server_var(wcs_limit) != 0) then es_xif (server_var(wcs_limit) < server_var(wcs_tmp)) then es_xdoblock wcs/WCSraces/wcs_checkplayerrace"
  }
}

event player_team
{
  es_exists ex key WCSuserdata event_var(userid)
  if (server_var(wcs_cfg_enableraceteamlimit) != "1") then es_xset ex "0"
  if (server_var(ex) = "1") do
  {
    es_keygetvalue wcs_limit WCSuserdata event_var(userid) "limitedrace"
    if (server_var(wcs_limit) = "1") do
    {
      ifx true(wcs_cfg_limitedraceforcespec) do
      {
        if (server_var(wcs_game) = server_var(wcs_game_css)) then wcs_moneysavenow
        es est_Team event_var(userid) 1 1
      }
      es_tell event_var(userid) #multi #greenPlease change your race -> #lightgreen'changerace'
    }
  }
}

block wcs_checkplayerrace
{
  // wcs_key=userid wcs_race=race wcs_tmp=status wcs_limit=limit
  es_keysetvalue WCSuserdata server_var(wcs_key) "limitedrace" "1"
  if (server_var(wcs_cfg_limitedraceforcespec) = "1") then est_Team server_var(wcs_key) "1" "1"
  es_keygetvalue wcs_racename "WCSraces" server_var(wcs_race) "name"
  wcs_getlanguage "wcs_lng" "wcs_lng_limitedrace"
  es_format wcs_lng server_var(wcs_lng) server_var(wcs_race) server_var(wcs_racename) server_var(wcs_limit) server_var(wcs_tmp)
  es_menu 10 server_var(wcs_key) server_var(wcs_lng)
}

// >>>>>>>>>>>>>>>>> RACE INFO >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
block wcs_showraceinfo
{
wcs_debuglog wcs_showraceinfo start
  // first, is it a custom command ?
  es_xgetargv wcs_userid 1
  es_exists ex userid server_var(wcs_userid)
  if (server_var(ex) = 0) do
  {
    // or a say command
    es_xgetcmduserid wcs_userid
    es_exists ex userid server_var(wcs_userid)
    es wcs_menuzero server_var(wcs_userid)
    es_keygetvalue wcs_page "WCSuserdata" server_var(wcs_userid) "race"
    es_xmath wcs_page - 1
  }
  es_xelse do
  {
    es_keygetvalue wcs_page WCSuserdata server_var(wcs_userid) page
  }
  es_keysetvalue WCSuserdata server_var(wcs_userid) menu "raceinfo"
  es_xmath wcs_page + 1
  es_keysetvalue WCSuserdata server_var(wcs_userid) page server_var(wcs_page)
  es_xset wcs_infotext 0
  es_keygetvalue wcs_infotext WCSinfo raceinfo server_var(wcs_page)
  if (server_var(wcs_infotext) != "0") do
  {
    es_strlen wcs_strlen server_var(wcs_infotext)
    if (server_var(wcs_strlen) <= 1020) then es_xmenu 0 server_var(wcs_userid) server_var(wcs_infotext)
    if (server_var(wcs_strlen) > 1020) then es_xmenu 0 server_var(wcs_userid) "WARNING:\n \n Text too long ! Report this to an admin."
  }
wcs_debuglog wcs_showraceinfo end
}

block wcs_raceinfo
{
wcs_debuglog wcs_raceinfo start
  es_xforeachkey wcs_key in WCSraces "es_keygetvalue wcs_name WCSraces server_var(wcs_key) name;es_keygetvalue wcs_numberofskills WCSraces server_var(wcs_key) numberofskills;es_keygetvalue wcs_numberoflevels WCSraces server_var(wcs_key) numberoflevels;es_xdoblock wcs/WCSraces/wcs_raceinfo_skills1"
wcs_debuglog wcs_raceinfo end
}

block wcs_raceinfo_skills1
{
  wcs_getlanguage "wcs_lng" "wcs_lng_skills"
  es_format wcs_text "\n->%1.      %2 (%3 lvls/%4 %5)\n" server_var(wcs_key) server_var(wcs_name) server_var(wcs_numberoflevels) server_var(wcs_numberofskills) server_var(wcs_lng)
  es_keygetvalue wcs_requiredlevel WCSraces server_var(wcs_key) required_level
  wcs_getlanguage "wcs_lng" "wcs_lng_required"
  wcs_getlanguage "wcs_lng2" "wcs_lng_level"
  if (server_var(wcs_cfg_requiredlevel) = 1) then es_xif (server_var(wcs_requiredlevel) > 0) then es_xformat wcs_text "%1%2 %3 : %4\n" server_var(wcs_text) server_var(wcs_lng) server_var(wcs_lng2) server_var(wcs_requiredlevel)
  es_keygetvalue wcs_maxlevel "WCSraces" server_var(wcs_key) "maximum_level"
  wcs_getlanguage "wcs_lng" "wcs_lng_maxlevel"
  if (server_var(wcs_cfg_maxracelevel) = 1) then es_xif (server_var(wcs_maxlevel) > 0) then es_xformat wcs_text server_var(wcs_lng) server_var(wcs_text) server_var(wcs_maxlevel)
  es_keygetvalue wcs_allow_only WCSraces server_var(wcs_key) allow_only
  wcs_getlanguage "wcs_lng" "wcs_lng_privaterace"
  if (server_var(wcs_cfg_restrictedrace) = 1) then es_xif (server_var(wcs_allow_only) != "0") then es_xformat wcs_text "%1< %2 > \n" server_var(wcs_text) server_var(wcs_lng)
  es_keygetvalue wcs_tmp1 WCSraces server_var(wcs_key) author
  if (server_var(wcs_tmp1) != "0") then es_xformat wcs_text "%1 credits: %2\n \n" server_var(wcs_text) server_var(wcs_tmp1)
  es_keygetvalue wcs_skillname WCSraces server_var(wcs_key) skillnames
  es_keygetvalue wcs_skilldescr WCSraces server_var(wcs_key) skilldescr
  es_xset wcs_counter 1
  while "server_var(wcs_numberofskills) >= server_var(wcs_counter)" "es_xdoblock wcs/WCSraces/wcs_raceinfo_skills2;es_xmath wcs_counter + 1"
  es_format wcs_text "%1\n \n " server_var(wcs_text)
  if (server_var(wcs_key) > 1) then es_xformat wcs_text "%1\n->8. %2" server_var(wcs_text) server_var(wcs_lng_back)
  es_set wcs_keynext server_var(wcs_key)
  es_xmath wcs_keynext + 1
  es_exists ex key WCSraces server_var(wcs_keynext)
  if (server_var(ex) = 1) then es_xformat wcs_text "%1\n->9. %2" server_var(wcs_text) server_var(wcs_lng_next)
  es_keysetvalue WCSinfo raceinfo server_var(wcs_key) server_var(wcs_text)
}

block wcs_raceinfo_skills2
{
  es_token wcs_skill server_var(wcs_skillname) server_var(wcs_counter) |
  es_token wcs_skilld server_var(wcs_skilldescr) server_var(wcs_counter) |
  if (server_var(wcs_skilld) != "0") then es_xformatv wcs_text "%1\n->%2. %3\n%4" wcs_text wcs_counter wcs_skill wcs_skilld
  if (server_var(wcs_skilld) = "0") then es_xformatv wcs_text "%1\n->%2. %3" wcs_text wcs_counter wcs_skill
}
// <<<<<<<<<<<<<<<<< END RACE INFO <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

// >>>>>>>>>>>>>>>>> START RACE MENU >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
block wcs_changerace
{
wcs_debuglog wcs_changerace start
  es_xset wcs_userid 0
  // if its a say command
  es_xgetcmduserid wcs_userid
  es_exists ex userid server_var(wcs_userid)
  if (server_var(ex) = 1) do
  {
    es_exists ex key WCSuserdata server_var(wcs_userid)
    if (server_var(ex) = 1) do
    {
      ifx false(wcs_cfg_changeracenextround) do
      {
      	wcs_getlanguage "wcs_lng" "wcs_lng_changerace"
      	es_tell server_var(wcs_userid) #multi server_var(wcs_lng)
      }
      es wcs_menuzero server_var(wcs_userid)
      es wcs_race_menu server_var(wcs_userid)
    }
  }
wcs_debuglog wcs_changerace end
}

block wcs_race_menu
{
wcs_debuglog wcs_race_menu start
  // a custom command
  es_xgetargv wcs_userid 1
  wcs_getlanguage "wcs_lng" "wcs_lng_chooserace"
  es_format wcs_text "%1:\n " server_var(wcs_lng)
  es_xset wcs_counter 0
  // get ID
  es_keygetvalue wcs_id WCSuserdata server_var(wcs_userid) id
  es_getplayerteam wcs_team server_var(wcs_userid)
  // get race level
  es_keygetvalue wcs_race "WCSuserdata" server_var(wcs_userid) "race"
  // variables
  es_xset wcs_racename 0
  es_keygetvalue wcs_page WCSuserdata server_var(wcs_userid) page
  es_xmath wcs_page + 1
  es_keysetvalue WCSuserdata server_var(wcs_userid) page server_var(wcs_page)
  es_xset wcs_racenumber 0
  es_xset wcs_raceid 0
  es_xset wcs_addnum 7
  es_math wcs_addnum * server_var(wcs_page)
  es_xmath wcs_addnum - 7
  // how many races ?
  es_xset wcs_racecount 0
  es_xforeachkey wcs_key in WCSraces "es_xmath wcs_racecount + 1"
  // get id
  es_math wcs_raceid + server_var(wcs_addnum)
  // start is at 1
  es_xset wcs_counter 1
  // buildin menu 1..7
  es_xmath wcs_raceid + 1
  es_xdoblock wcs/WCSraces/wcs_race_menu_init
  es_xmath wcs_raceid + 1
  es_xdoblock wcs/WCSraces/wcs_race_menu_init
  es_xmath wcs_raceid + 1
  es_xdoblock wcs/WCSraces/wcs_race_menu_init
  es_xmath wcs_raceid + 1
  es_xdoblock wcs/WCSraces/wcs_race_menu_init
  es_xmath wcs_raceid + 1
  es_xdoblock wcs/WCSraces/wcs_race_menu_init
  es_xmath wcs_raceid + 1
  es_xdoblock wcs/WCSraces/wcs_race_menu_init
  es_xmath wcs_raceid + 1
  es_xdoblock wcs/WCSraces/wcs_race_menu_init
  es_xmath wcs_raceid + 1
  // check if we need next page
  es_format wcs_text "%1 %2\n %3\n \n " server_var(wcs_lng_page) server_var(wcs_page) server_var(wcs_text)
  if (server_var(wcs_raceid) > server_var(wcs_racecount)) then es_xif (server_var(wcs_page) = 1) then es_xformat wcs_text "%1 0. %2" server_var(wcs_text) server_var(wcs_lng_exit)
  if (server_var(wcs_raceid) <= server_var(wcs_racecount)) then es_xif (server_var(wcs_page) = 1) then es_xformat wcs_text "%1 9. %2\n 0. %3" server_var(wcs_text) server_var(wcs_lng_next) server_var(wcs_lng_exit)
  if (server_var(wcs_raceid) > server_var(wcs_racecount)) then es_xif (server_var(wcs_page) > 1) then es_xformat wcs_text "%1 8. %2\n 0. %3" server_var(wcs_text) server_var(wcs_lng_back) server_var(wcs_lng_exit)
  if (server_var(wcs_raceid) <= server_var(wcs_racecount)) then es_xif (server_var(wcs_page) > 1) then es_xformat wcs_text "%1 8. %2\n 9. %3\n 0. %4" server_var(wcs_text) server_var(wcs_lng_back) server_var(wcs_lng_next) server_var(wcs_lng_exit)
  es_menu 0 server_var(wcs_userid) server_var(wcs_text)
  es_keysetvalue WCSuserdata server_var(wcs_userid) menu race
wcs_debuglog wcs_race_menu end
}

block wcs_race_menu_init
{
wcs_debuglog wcs_race_menu_init start
  if (server_var(wcs_raceid) <= server_var(wcs_racecount)) do
  {
    es_exists ex key WCSraces server_var(wcs_raceid)
    ifx true(ex) do
    {
      es_keygetvalue wcs_racename WCSraces server_var(wcs_raceid) name
      if (server_var(wcs_racename) != 0) do
      {
        es_keygetvalue wcs_limit "WCSraces" server_var(wcs_raceid) "teamlimit"
        es_xset wcs_limited "0"
        if (server_var(wcs_cfg_enableraceteamlimit) != "1") then es_xset wcs_limit "0"
        if (server_var(wcs_limit) != "0") do
        {
          es_keygetvalue wcs_tmp1 "WCSraces" server_var(wcs_raceid) "2"
          es_keygetvalue wcs_tmp2 "WCSraces" server_var(wcs_raceid) "3"
          if (server_var(wcs_team) = "1") then es_xif (server_var(wcs_tmp1) > server_var(wcs_tmp2)) then es_xcopy wcs_tmp1 wcs_tmp2
          if (server_var(wcs_team) = "1") then es_xif (server_var(wcs_tmp1) >= server_var(wcs_limit)) then es_xset wcs_limited "1"
          if (server_var(wcs_team) = "2") then es_xif (server_var(wcs_tmp1) >= server_var(wcs_limit)) then es_xset wcs_limited "1"
          if (server_var(wcs_team) = "3") then es_xif (server_var(wcs_tmp2) >= server_var(wcs_limit)) then es_xset wcs_limited "1"
        }
        // get level stuff
        es_format wcs_racef "race_%1" server_var(wcs_raceid)
        // TODOOOOOOOOO!!!!!!!
        //es_keygetvalue wcs_level "WCSusers" server_var(wcs_id) server_var(wcs_racef)
        //es_xset wcs_level 0
        es_xformatv wcs_level rl_%1 wcs_raceid
        es_keygetvalue wcs_level WCSuserdata server_var(wcs_userid) server_var(wcs_level)
        if (server_var(wcs_level) = "0") then es_xset wcs_level 0
        //es_token wcs_level server_var(wcs_level) "1" "|"
        ///////////////////
        es_keygetvalue wcs_requiredlevel WCSraces server_var(wcs_raceid) "required_level"
        es_keygetvalue wcs_allow_only WCSraces server_var(wcs_raceid) "allow_only"
        if (server_var(wcs_cfg_restrictedrace) = 0) then es_xset wcs_allow_only 0
        es_keygetvalue wcs_total_level "WCSuserdata" server_var(wcs_userid) "total_level"
        if (server_var(wcs_cfg_requiredlevel) = "0") then es_xset wcs_requiredlevel 0
        if (server_var(wcs_total_level) >= server_var(wcs_requiredlevel)) do
        {
          es_keygetvalue wcs_maxlevel "WCSraces" server_var(wcs_raceid) "maximum_level"
          if (server_var(wcs_cfg_maxracelevel) = "0") then es_xset wcs_maxlevel server_var(wcs_total_level)
          if (server_var(wcs_maxlevel) = "0") then es_xset wcs_maxlevel server_var(wcs_total_level)
          if (server_var(wcs_total_level) <= server_var(wcs_maxlevel)) do
          {
             es_xset wcs_allow 0
            if (server_var(wcs_allow_only) = 0) then es_xset wcs_allow 1
            es_format wcs_uid "<%1>" server_var(wcs_id)
            if (server_var(wcs_uid) in server_var(wcs_allow_only)) then es_xset wcs_allow 1
            if (server_var(wcs_allow_only) != "0") do
            {
              if (server_var(wcs_uid) notin server_var(wcs_allow_only)) do
              {
                // check for admin
                es_exists wcs_isadmin key "WCSadmin" server_var(wcs_id)
                if (server_var(wcs_isadmin) = "1") then es_xif ("<admins>" in server_var(wcs_allow_only)) then es_xset wcs_allow "1"
                if (server_var(wcs_allow) = 0) do
                {
                  wcs_getlanguage "wcs_lng" "wcs_lng_privaterace"
                  es_format wcs_text "%1 \n%2. %3 < %4 >" server_var(wcs_text) server_var(wcs_counter) server_var(wcs_racename) server_var(wcs_lng)
                }
              }
            }
            if (server_var(wcs_allow) = 1) do
            {
              if (server_var(wcs_limited) = "0") do
              {
                if (server_var(wcs_level) > 0) then es_xif (server_var(wcs_cfg_globallevel) = "0") then es_xformat wcs_text "%1 \n->%2. %3 (lvl %4)" server_var(wcs_text) server_var(wcs_counter) server_var(wcs_racename) server_var(wcs_level)
                if (server_var(wcs_level) > 0) then es_xif (server_var(wcs_cfg_globallevel) = "1") then es_xformat wcs_text "%1 \n->%2. %3 (lvl %4)" server_var(wcs_text) server_var(wcs_counter) server_var(wcs_racename) server_var(wcs_total_level)
                if (server_var(wcs_level) = 0) then es_xformat wcs_text "%1 \n->%2. %3" server_var(wcs_text) server_var(wcs_counter) server_var(wcs_racename)
              }
              es_xelse do
              {
                // level too high
                wcs_getlanguage "wcs_lng" "wcs_lng_limited"
                es_format wcs_text "%1 \n%2. %3 (%4 : %5)" server_var(wcs_text) server_var(wcs_counter) server_var(wcs_racename) server_var(wcs_lng) server_var(wcs_limit)
              }
            }
          }
          es_xelse do
          {
            // level too high
            wcs_getlanguage "wcs_lng" "wcs_lng_maximum"
            es_format wcs_text "%1 \n%2. %3 (%4 lvl %5)" server_var(wcs_text) server_var(wcs_counter) server_var(wcs_racename) server_var(wcs_lng) server_var(wcs_maxlevel)
          }
        }
        es_xelse do
        {
          // level too low
          wcs_getlanguage "wcs_lng" "wcs_lng_required"
          es_format wcs_text "%1 \n%2. %3 (%4 lvl %5)" server_var(wcs_text) server_var(wcs_counter) server_var(wcs_racename) server_var(wcs_lng) server_var(wcs_requiredlevel)
        }
        if (server_var(wcs_cfg_changeracedetails) = "1") do
        {
          es_keygetvalue wcs_descr "WCSraces" server_var(wcs_raceid) "shortdescription"
          if (server_var(wcs_descr) != "0") then es_xformat wcs_text "%1\n     %2" server_var(wcs_text) server_var(wcs_descr)
        }
        // IMPORTANT !!
        es_xmath wcs_counter + 1
      }
      es_xelse do
      {
      es_format wcs_text "%1\n (-)" server_var(wcs_text)
      }
    }
    es_xelse do
    {
      es_format wcs_text "%1\n (-)" server_var(wcs_text)
    }
  }
wcs_debuglog wcs_race_menu_init end
}

block wcs_race_handle
{
wcs_debuglog wcs_race_handle start
  es_xset wcs_page 0
  es_keygetvalue wcs_page WCSuserdata event_var(userid) page
  es_keygetvalue wcs_id WCSuserdata event_var(userid) id
  es_xset wcs_racecount 0
  es_xforeachkey wcs_key in WCSraces "es_xmath wcs_racecount + 1"
  es_xset wcs_r8id 7
  es_math wcs_r8id * server_var(wcs_page)
  es_xmath wcs_r8id + 1
  // handle back
  if (event_var(commandstring) = "8") do
  {
    if (server_var(wcs_page) > 1) do
    {
      es_xmath wcs_page - 2
      es_keysetvalue WCSuserdata event_var(userid) page server_var(wcs_page)
      es wcs_race_menu event_var(userid)
    }
  }
  // handle next
  if (event_var(commandstring) = "9") then es_xif (server_var(wcs_r8id) <= server_var(wcs_racecount)) then wcs_race_menu event_var(userid)
  // race selected
  if (event_var(commandstring) < 8) do
  {
    if (event_var(commandstring) > 0) do
    {
      es_xset wcs_raceid 0
      es_xset wcs_racename 0
      es_xset wcs_addnum 7
      es_math wcs_addnum * server_var(wcs_page)
      es_xmath wcs_addnum - 7
      es_math wcs_raceid + server_var(wcs_addnum)
      es_math wcs_raceid + event_var(commandstring)
      es_exists ex key WCSraces server_var(wcs_raceid)
      if (server_var(ex) = 1) do
      {
        es_keygetvalue wcs_racename WCSraces server_var(wcs_raceid) name
        es_keygetvalue wcs_requiredlevel WCSraces server_var(wcs_raceid) required_level
        es_keygetvalue wcs_total_level WCSuserdata server_var(wcs_userid) total_level
        if (server_var(wcs_cfg_requiredlevel) = 0) then es_xset wcs_requiredlevel 0
        es_keygetvalue wcs_allow_only WCSraces server_var(wcs_raceid) allow_only
        if (server_var(wcs_cfg_restrictedrace) = 0) then es_xset wcs_allow_only 0
        if (server_var(wcs_total_level) >= server_var(wcs_requiredlevel)) do
        {
          es_keygetvalue wcs_maxlevel "WCSraces" server_var(wcs_raceid) "maximum_level"
          if (server_var(wcs_cfg_maxracelevel) = "0") then es_xset wcs_maxlevel server_var(wcs_total_level)
          if (server_var(wcs_maxlevel) = "0") then es_xset wcs_maxlevel server_var(wcs_total_level)
          if (server_var(wcs_total_level) <= server_var(wcs_maxlevel)) do
          {
            es_xset wcs_allow 0
            if (server_var(wcs_allow_only) = 0) then es_xset wcs_allow 1
            es_format wcs_uid "<%1>" server_var(wcs_id)
            if (server_var(wcs_uid) in server_var(wcs_allow_only)) then es_xset wcs_allow 1
            if (server_var(wcs_allow_only) != "0") do
            {
              if (server_var(wcs_uid) notin server_var(wcs_allow_only)) do
              {
                // check for admin
                es_exists wcs_isadmin key "WCSadmin" server_var(wcs_id)
                if (server_var(wcs_isadmin) = "1") then es_xif ("<admins>" in server_var(wcs_allow_only)) then es_xset wcs_allow "1"
                if (server_var(wcs_allow) = 0) do
                {
                  wcs_getlanguage "wcs_lng" "wcs_lng_notallowed"
                  es_format wcs_text "#lightgreen%1 : #green%2" server_var(wcs_racename) server_var(wcs_lng)
                  es_tell event_var(userid) #multi server_var(wcs_text)
                }
              }
            }
            // check team limit
            es_getplayerteam wcs_team event_var(userid)
            es_keygetvalue wcs_limit "WCSraces" server_var(wcs_raceid) "teamlimit"
            es_xset wcs_limited "0"
            if (server_var(wcs_cfg_enableraceteamlimit) != "1") then es_xset wcs_limit "0"
            if (server_var(wcs_limit) != "0") do
            {
              es_keygetvalue wcs_tmp1 "WCSraces" server_var(wcs_raceid) "2"
              es_keygetvalue wcs_tmp2 "WCSraces" server_var(wcs_raceid) "3"
              if (server_var(wcs_team) = "1") then es_xif (server_var(wcs_tmp1) > server_var(wcs_tmp2)) then es_xcopy wcs_tmp1 wcs_tmp2
              if (server_var(wcs_team) = "1") then es_xif (server_var(wcs_tmp1) >= server_var(wcs_limit)) then es_xset wcs_allow "0"
              if (server_var(wcs_team) = "2") then es_xif (server_var(wcs_tmp1) >= server_var(wcs_limit)) then es_xset wcs_allow "0"
              if (server_var(wcs_team) = "3") then es_xif (server_var(wcs_tmp2) >= server_var(wcs_limit)) then es_xset wcs_allow "0"
            }
            if (server_var(wcs_allow) = 1) do
            {
            	ifx true(wcs_cfg_changeracenextround) do
            	{
            		wcs_getlanguage wcs_lng wcs_lng_changeracenextround
            		es_tell event_var(userid) #multi server_var(wcs_lng)
            		es_keysetvalue WCSuserdata event_var(userid) forcechangerace 1
            		es_keysetvalue WCSuserdata event_var(userid) forcechangeraceid server_var(wcs_raceid)
            	}
            	es_xelse do
            	{
              	if (event_var(es_userdead) = 0) then est_Slay event_var(userid)
              	// save the old race !
              	es wcs_saveplayer event_var(userid)
              	es_keysetvalue "WCSuserdata" event_var(userid) "race" server_var(wcs_raceid)
              	es wcs_playercheck server_var(wcs_raceid)
              	es wcs_getplayer event_var(userid)
              	es_xset wcs_text 0
              	wcs_getlanguage "wcs_lng" "wcs_lng_changedrace"
              	es_format wcs_text "#lightgreen%1: #green%2" server_var(wcs_lng) server_var(wcs_racename)
              	es_tell event_var(userid) #multi server_var(wcs_text)
              	// refresh skills
              	es_keysetvalue "WCSuserdata" event_var(userid) "skillcheck" "1"
              	// unrestrict all (required for predator)
              	es est_UnrestrictAll event_var(userid)
              	// reset the limited flag
              	es_keysetvalue "WCSuserdata" event_var(userid) "limitedrace" "0"
              }
            }
          }
          es_xelse do
          {
            es_math wcs_total_level - server_var(wcs_maxlevel)
            wcs_getlanguage "wcs_lng" "wcs_lng_overmaxlevel"
            es_format wcs_text server_var(wcs_lng) server_var(wcs_racename) server_var(wcs_total_level)
            es_tell event_var(userid) #multi server_var(wcs_text)
          }
        }
        es_xelse do
        {
          es_math wcs_requiredlevel - server_var(wcs_total_level)
          wcs_getlanguage "wcs_lng" "wcs_lng_notreqlevel"
          es_format wcs_text server_var(wcs_lng) server_var(wcs_racename) server_var(wcs_requiredlevel)
          es_tell event_var(userid) #multi server_var(wcs_text)
        }
      }
    }
  }
  // set page to 0 if race selected
  if (event_var(commandstring) != "9") then es_xif (event_var(commandstring) != "8") then es_xkeysetvalue WCSuserdata event_var(userid) menu 0
wcs_debuglog wcs_race_handle end
}

// <<<<<<<<<<<<<<<<< END RACE MENU <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

block wcs_calcracestats
{
  es_xforeachkey wcs_key in WCSraces "es_keysetvalue WCSraces server_var(wcs_key) rcounter 0"
  es_xforeachkey wcs_key in WCSuserdata "es_keygetvalue wcs_raceid WCSuserdata server_var(wcs_key) race;es_keygetvalue wcs_tmp WCSraces server_var(wcs_raceid) rcounter;es_xmath wcs_tmp + 1;es_keysetvalue WCSraces server_var(wcs_raceid) server_var(wcs_tmp)"
}