////////////////////////////////////////
// WCS - Warcraft:Source              //
// ---------------------------------- //
//  by kRypT0n!Te                     //
//      http://wc3source.de           //
// ---------------------------------- //
// Content of this subscript          //
// - shop management                  //
////////////////////////////////////////
// say commands:
// shopmenu, shopinfo
//
// admin commands:
// wcs_shopmenu <userid>
// wcs_giveshopitem <userid> <itemid>
// wcs_showshopinfo <userid>
// wcs_deathhandle_items <userid>
//
////////////////////////////////////////

block load
{
  // Change this, if you add a new shopmenu category (also change the language file wcs_lng_shopcats)
  // Load the category index
  es_xkeygroupload WCSshop_cat |wcs/WCSshop
  es_xset wcs_numberoficats 0 "how many item categories are registered"
  alias wcs_checkcatlanguage "es_keygetvalue wcs_name WCSshop_cat server_var(wcs_key) name;if (wcs_lng_s in server_var(wcs_name)) then wcs_getlanguage wcs_name server_var(wcs_name);es_keysetvalue WCSshop_cat server_var(wcs_key) name server_var(wcs_name);es_keygetvalue wcs_descr WCSshop_cat server_var(wcs_key) descr;if (wcs_lng_s in server_var(wcs_descr)) then wcs_getlanguage wcs_descr server_var(wcs_descr);es_keysetvalue WCSshop_cat server_var(wcs_key) descr server_var(wcs_descr)"
  es_xforeachkey wcs_key in WCSshop_cat "wcs_checkcatlanguage;es wcs_debuglog shopcategory added : server_var(wcs_name);es_xmath wcs_numberoficats + 1"
  if (server_var(wcs_numberoficats) > 9) then wcs_debuglog WARNING : Too many shop categories found! Only 9 cats are supported.
  // check if popup is loaded
  es_xexists ex script popup
  if (server_var(ex) = 0) then es_xload popup
  es_xkeygroupload WCSshop |wcs/WCSshop
  alias wcs_checkshopalias "if (shopalias in server_var(wcs_val)) then es_xkeygetvalue wcs_tmp WCSshop server_var(wcs_key) server_var(wcs_val);if (shopalias in server_var(wcs_val)) then alias server_var(wcs_val) server_var(wcs_tmp)"
  alias wcs_checkshoplanguage "if (wcs_lng_s in server_var(wcs_name)) then wcs_getlanguage wcs_name server_var(wcs_name);es_keysetvalue WCSshop server_var(wcs_key) name server_var(wcs_name);es_keygetvalue wcs_descr WCSshop server_var(wcs_key) description;if (wcs_lng_s in server_var(wcs_descr)) then wcs_getlanguage wcs_descr server_var(wcs_descr);es_keysetvalue WCSshop server_var(wcs_key) description server_var(wcs_descr)"
  es_xset wcs_numberofitems 0 "how many items are loaded"
  es_xforeachkey wcs_key in "WCSshop" "es_keygetvalue wcs_name WCSshop server_var(wcs_key) name;es_foreachval wcs_val in WCSshop server_var(wcs_key) wcs_checkshopalias;wcs_checkshoplanguage;es wcs_debuglog loaded: server_var(wcs_name);es_xmath wcs_numberofitems + 1"
  es wcs_debuglog "total : " server_var(wcs_numberofitems) " items loaded"
  // create the shopinfo and shopmenu data
  es popup create shopinfo
  es popup create shopmenu
  wcs_getlanguage wcs_lng wcs_lng_choosecat
  es popup addlinef shopinfo "%1 :\n \n" wcs_lng
  es popup addlinef shopmenu "%1 :\n \n" wcs_lng
  es_xforeachkey wcs_shopcat in WCSshop_cat "es_xdoblock wcs/WCSshop/wcs_shopinfo"
  wcs_getlanguage wcs_lng wcs_lng_shopmenuhint
  es popup addlinef shopinfo " \n0. %1" wcs_lng_exit
  es popup addlinef shopmenu " \n%1\n \n0. %2" wcs_lng wcs_lng_exit
  es_xexists ex command wcs_shopmenu
  if (server_var(ex) = 0) then es_xregcmd wcs_shopmenu wcs/WCSshop/wcs_shopmenu "wcs_shopmenu - usage: wcs_shop_menu <userid>"
  es_xexists ex command wcs_giveshopitem
	if (server_var(ex) = 0) then es_xregcmd wcs_giveshopitem wcs/WCSshop/wcs_giveshopitem "wcs_giveshopitem - usage: wcs_giveshopitem <userid> <itemid>"
  es_xexists ex command wcs_showshopinfo
  if (server_var(ex) = 0) then es_xregcmd wcs_showshopinfo wcs/WCSshop/wcs_showshopinfo "Shows detail info about the shop items"
  es_xexists ex saycommand shopmenu
  if (server_var(ex) = 0) then es_xregsaycmd shopmenu wcs/WCSshop/wcs_shopmenu "Opens the shopmenu"
  es_xexists ex saycommand shopinfo
  if (server_var(ex) = 0) then es_xregsaycmd shopinfo wcs/WCSshop/wcs_showshopinfo "Shows detail info about the shop items"
  es_xexists ex command wcs_deathhandle_items
  if (server_var(ex) = 0) then es_xregcmd wcs_deathhandle_items wcs/WCSshop/wcs_deathhandle_items "Cleanup item events"
  es_xkeygroupcreate WCSpha
  es_xkeygroupcreate WCSphv
  es_xkeygroupcreate WCSpd
  es_xkeygroupcreate WCSpk
  es_xkeygroupcreate WCSps
  es_xkeygroupcreate WCSpsay
}

block unload
{
	// clean up stuff
	popup delete shopinfo
	popup delete shopmenu
  es_xkeygroupdelete WCSshop
  es_xkeygroupdelete WCSshop_cat
  es_xunregsaycmd shopmenu
  es_xunregsaycmd shopinfo
  es_xkeygroupdelete WCSpha
  es_xkeygroupdelete WCSphv
  es_xkeygroupdelete WCSpd
  es_xkeygroupdelete WCSpk
  es_xkeygroupdelete WCSps
  es_xkeygroupdelete WCSpsay
}

event player_disconnect
{
  es_exists ex key WCSpha event_var(userid)
  if (server_var(ex) = 1) then es_xkeydelete WCSpha event_var(userid)
  es_exists ex key WCSphv event_var(userid)
  if (server_var(ex) = 1) then es_xkeydelete WCSphv event_var(userid)
  es_exists ex key WCSpd event_var(userid)
  if (server_var(ex) = 1) then es_xkeydelete WCSpd event_var(userid)
  es_exists ex key WCSpk event_var(userid)
  if (server_var(ex) = 1) then es_xkeydelete WCSpk event_var(userid)
  es_exists ex key WCSps event_var(userid)
  if (server_var(ex) = 1) then es_xkeydelete WCSps event_var(userid)
  es_exists ex key WCSpsay event_var(userid)
  if (server_var(ex) = 1) then es_xkeydelete WCSpsay event_var(userid)
}

event player_activate
{
  es_keycreate WCSpha event_var(userid)
  es_keycreate WCSphv event_var(userid)
  es_keycreate WCSpd event_var(userid)
  es_keycreate WCSpk event_var(userid)
  es_keycreate WCSps event_var(userid)
  es_keycreate WCSpsay event_var(userid)
}

event server
{
  es_xkeygroupdelete WCSpha
  es_xkeygroupdelete WCSphv
  es_xkeygroupdelete WCSpd
  es_xkeygroupdelete WCSpk
  es_xkeygroupdelete WCSps
  es_xkeygroupdelete WCSpsay
  es_xkeygroupcreate WCSpha
  es_xkeygroupcreate WCSphv
  es_xkeygroupcreate WCSpd
  es_xkeygroupcreate WCSpk
  es_xkeygroupcreate WCSps
  es_xkeygroupcreate WCSpsay
}

// >>>>>>>>>>>>>>>>> BEGIN SHOP BLOCKS >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
block wcs_shopmenu
{
if (server_var(wcs_debug) = 1) then profile begin shopmenu
  // first, is it a custom command ?
  es_xgetargv wcs_userid 1
  es_exists ex userid server_var(wcs_userid)
  ifx false(ex) do
  {
    // or a say command
    es_xgetcmduserid wcs_userid
    es_exists ex userid server_var(wcs_userid)
  }
  ifx true(ex) do
  {
    if (server_var(wcs_cfg_noshopmenu) = 1) then es_xset ex 0
    if (server_var(wcs_game) = server_var(wcs_game_dods)) then es_xif (server_var(wcs_cfg_dods_noshopmenu) = 1) then es_xset ex 0
    ifx true(ex) do
    {
      es wcs_menuzero server_var(wcs_userid)
    	if (server_var(wcs_game) = server_var(wcs_game_dods)) then wcs_showcredits server_var(wcs_userid)
    	// New popup system
    	es popup send shopmenu server_var(wcs_userid)
    }
    es_xelse do
    {
    	wcs_getlanguage wcs_lng wcs_lng_noshopmenu
      es_tell server_var(wcs_userid) #multi server_var(wcs_lng)
    }
  }
if (server_var(wcs_debug) = 1) then profile end shopmenu
}

block wcs_shop_menu
{
if (server_var(wcs_debug) = 1) then profile begin shop_menu
es wcs_debuglog choice server_var(_popup_choice) uid server_var(_popup_userid) name server_var(_popup_name)
	es_token wcs_category server_var(_popup_name) 1 _
	if (server_var(wcs_category) = "info") do
	{
		es_token wcs_category server_var(_popup_name) 2 _
	}
	else do
	{
		es_set wcs_category server_var(_popup_choice)
	}
	// check if category is valid
	es_exists ex key WCSshop_cat server_var(wcs_category)
	ifx parse("ex and (_popup_choice < 10)") do
	{
      // create the category popup
      // get the money (for DOD:S special handling)
      es_xset wcs_money 0
	  if (server_var(wcs_game) = server_var(wcs_game_css)) then es_xgetmoney wcs_money server_var(_popup_userid)
	  if (server_var(wcs_game) != server_var(wcs_game_css)) then es_xkeygetvalue wcs_money WCSuserdata server_var(_popup_userid) credits
	  // get the level
	  es_keygetvalue wcs_level WCSuserdata server_var(_popup_userid) level
	  // check dead or alive status
	  es_xset wcs_dead 1
	  es_getplayerprop wcs_dead server_var(_popup_userid) "CCSPlayer.baseclass.pl.deadflag"
	  if (server_var(wcs_dead) = 0) then es_xset wcs_deadoralive 1
	  if (server_var(wcs_dead) = 1) then es_xset wcs_deadoralive 0
	  wcs_getlanguage wcs_lng wcs_lng_chooseitem
	  es_xformatv wcs_text "%1 :\n " wcs_lng
	  es_xset wcs_counter 1
	  es_xset wcs_key 0
	  es_xformatv wcs_name "cat_%1" wcs_category
	  es popup create server_var(wcs_name)
	  es popup menuselect server_var(wcs_name) wcs/WCSshop/wcs_shop_handle
	  es_xforeachkey wcs_key in WCSshop "es_keygetvalue wcs_tmp WCSshop server_var(wcs_key) category;if (server_var(wcs_tmp) = server_var(wcs_category)) then es_xdoblock wcs/WCSshop/wcs_shop_menu_init"
	  // fill the rest with empty items!
	  ifx parse("wcs_counter <= 10") do
	  {
	  	while "server_var(wcs_counter) <= 10" "es popup menuvalue server_var(wcs_name) wcs_itemid server_var(wcs_counter) -;es_xmath wcs_counter + 1"
	  }
	  es_xformatv wcs_text "%1\n \n0. %2" wcs_text wcs_lng_back
	  es popup addline server_var(wcs_name) server_var(wcs_text)
		es_keygetvalue wcs_race WCSuserdata server_var(_popup_userid) race
	  es_keygetvalue wcs_allowed WCSraces server_var(wcs_race) restrict_shop
	  if (server_var(wcs_allowed) != "0") do
	  {
	  	wcs_getlanguage wcs_lng wcs_lng_s_restricted
			es wcs_notice server_var(_popup_userid) server_var(wcs_lng)
	  }
		alias wcs_showpopup "es popup exists server_var(wcs_name) ex;if (server_var(ex) = 1) then popup send server_var(wcs_name) server_var(_popup_userid)"
		if (server_var(_popup_name) = "shopmenu") do
		{
			wcs_showpopup
		}
		else do
		{
			// check if selection was 7 (buy)
			if (server_var(_popup_choice) = 7) then wcs_showpopup
		}
	}
if (server_var(wcs_debug) = 1) then profile end shop_menu
}

block wcs_shop_menu_init
{
  // 10 (or 0) means back to the shopmenu
  if (server_var(wcs_counter) = 1) then popup submenu server_var(wcs_name) 10 shopmenu
  // check if user can buy item
  es_keygetvalue wcs_iname WCSshop server_var(wcs_key) name
  es_keygetvalue wcs_icost WCSshop server_var(wcs_key) cost
  es_keygetvalue wcs_ilevel WCSshop server_var(wcs_key) level
  es_keygetvalue wcs_idab WCSshop server_var(wcs_key) dab
  es_keygetvalue wcs_amount "WCSshop" server_var(wcs_key) maxamount
  es_xformatv wcs_tmp1 "item_%1" wcs_key
  es_keygetvalue wcs_tmp2 "WCSuserdata" server_var(_popup_userid) server_var(wcs_tmp1)
  if (server_var(wcs_tmp2) = "0") then es_xset wcs_tmp2 "0"
  if (server_var(wcs_amount) = "0") then es_xset wcs_tmp2 "-1"
  es_xset wcs_ok 0
  es_xset wcs_allowed 1
  ifx parse("(wcs_icost <= wcs_money) and (wcs_ilevel <= wcs_level) and (wcs_amount > wcs_tmp2) and ((wcs_idab == wcs_deadoralive) or (wcs_idab == 2))") do
  {
  	es_xset wcs_ok 1
  	es_keygetvalue wcs_race WCSuserdata server_var(_popup_userid) race
  	es_keygetvalue wcs_allowed WCSraces server_var(wcs_race) restrict_shop
  	es_xformatv wcs_tmp1 "<%1>" wcs_key
  	if (server_var(wcs_tmp1) in server_var(wcs_allowed)) do
    {
      es_xset wcs_ok 0
  		if ("<cat_" notin server_var(wcs_allowed)) then es_xset wcs_allowed 0
  	}
  	// lock whole category
  	if ("<cat_" in server_var(wcs_allowed)) do
  	{
  		es_token wcs_tmp1 server_var(wcs_allowed) 2 _
  		es_xstring wcs_tmp1 replace ">" ""
  		if (server_var(wcs_tmp1) = server_var(wcs_category)) do
  		{
  			es_xset wcs_ok 0
  			es_xset wcs_allowed 0
  		}
  	}
  }
  ifx true(wcs_ok) do
  {
    es_xformatv wcs_text "%1 \n->%2. %3 ($%4)" wcs_text wcs_counter wcs_iname wcs_icost
    es popup menuvalue server_var(wcs_name) wcs_itemid server_var(wcs_counter) server_var(wcs_key)
  }
  es_xelse do
  {
    // not selectable item
    if (server_var(wcs_ilevel) > 0) then es_xformatv wcs_text "%1 \n%2. %3 ($%4) (lvl %5)" wcs_text wcs_counter wcs_iname wcs_icost wcs_ilevel
    if (server_var(wcs_ilevel) = 0) then es_xformatv wcs_text "%1 \n%2. %3 ($%4)" wcs_text wcs_counter wcs_iname wcs_icost
    wcs_getlanguage wcs_lng wcs_lng_shopoutofstock
    if (server_var(wcs_amount) != "0") then es_xif (server_var(wcs_amount) <= server_var(wcs_tmp2)) then es_xformatv wcs_text "%1 (%2)" wcs_text wcs_lng
    if (server_var(wcs_allowed) = 0) then es_xformatv wcs_text "%1 (R)" wcs_text
    es popup menuvalue server_var(wcs_name) wcs_itemid server_var(wcs_counter) "-"
  }
  // IMPORTANT !!
  es_xmath wcs_counter + 1
}

block wcs_shop_handle
{
if (server_var(wcs_debug) = 1) then profile begin shop_handle
es wcs_debuglog SHOP_HANDLE choice server_var(_popup_choice) uid server_var(_popup_userid) name server_var(_popup_name) MENU ITEM server_var(wcs_itemid)
	es_exists ex key WCSshop server_var(wcs_itemid)
	ifx true(ex) do
	{
		// get the money (for DOD:S special handling)
    es_xset wcs_money 0
    if (server_var(wcs_game) = server_var(wcs_game_css)) then es_xgetmoney wcs_money server_var(_popup_userid)
    if (server_var(wcs_game) != server_var(wcs_game_css)) then es_xkeygetvalue wcs_money WCSuserdata server_var(_popup_userid) credits
    // get the level
    es_keygetvalue wcs_level WCSuserdata server_var(_popup_userid) level
    // check dead or alive status
    es_xset wcs_dead 1
    es_getplayerprop wcs_dead server_var(_popup_userid) "CCSPlayer.baseclass.pl.deadflag"
    if (server_var(wcs_dead) = "0") then es_xset wcs_deadoralive "1"
    if (server_var(wcs_dead) = "1") then es_xset wcs_deadoralive "0"
    es_keygetvalue wcs_iname "WCSshop" server_var(wcs_itemid) "name"
    es_keygetvalue wcs_icost "WCSshop" server_var(wcs_itemid) "cost"
    es_keygetvalue wcs_ilevel "WCSshop" server_var(wcs_itemid) "level"
    es_keygetvalue wcs_idab "WCSshop" server_var(wcs_itemid) "dab"
    es_keygetvalue wcs_amount "WCSshop" server_var(wcs_itemid) "maxamount"
    es_xformatv wcs_tmp1 "item_%1" wcs_itemid
    es_keygetvalue wcs_tmp2 "WCSuserdata" server_var(_popup_userid) server_var(wcs_tmp1)
    if (server_var(wcs_tmp2) = "0") then es_xset wcs_tmp2 "0"
    if (server_var(wcs_amount) = "0") then es_xset wcs_tmp2 "-1"
    ifx parse("(wcs_icost <= wcs_money) and (wcs_ilevel <= wcs_level) and (wcs_amount > wcs_tmp2) and ((wcs_idab == wcs_deadoralive) or (wcs_idab == 2))") do
    {
      es_xformatv wcs_text "%1 \n->%2. %3 ($%4)" wcs_text wcs_counter wcs_iname wcs_icost
      wcs_getlanguage wcs_lng wcs_lng_purchased
      es_xformatv wcs_text "#lightgreen%1: #green%2" wcs_lng wcs_iname
      es_tell server_var(_popup_userid) #multi server_var(wcs_text)
      // first pay, then give item :)
      if (server_var(wcs_game) = server_var(wcs_game_css)) do
      {
        es est_Cash server_var(_popup_userid) - server_var(wcs_icost)
      }
      es_xelse do
      {
        es_math wcs_money - server_var(wcs_icost)
        es_keysetvalue WCSuserdata server_var(_popup_userid) credits server_var(wcs_money)
      }
      es wcs_giveshopitem server_var(_popup_userid) server_var(wcs_itemid)
    }
    // fixed bug in DOD:S not removing credits
  }
  es_xelse do
  {
  	// print error message when item is not found ("-" is un-buyable item for that user)
  	if (server_var(wcs_itemid) != "-") then wcs_debuglog WARNING: trying to buy invalid shopitem server_var(wcs_itemid)
  }
if (server_var(wcs_debug) = 1) then profile end shop_handle
}

block wcs_giveshopitem
{
if (server_var(wcs_debug) = 1) then profile begin giveshopitem
  es_xset wcs_userid 0
  es_xset wcs_itemid 0
  es_xgetargv wcs_userid 1
  es_xgetargv wcs_itemid 2
  es_exists ex userid server_var(wcs_userid)
  ifx true(ex) do
  {
    es_exists ex key WCSshop server_var(wcs_itemid)
    ifx true(ex) do
    {
      // get user id
      es_xset wcs_id 0
      es_keygetvalue wcs_id WCSuserdata server_var(wcs_userid) id
      es_xset wcs_itype 0
      es_keygetvalue wcs_itype WCSshop server_var(wcs_itemid) itemconfig
      if (server_var(wcs_itype) in server_var(wcs_validtypes)) do
      {
        // get item details
        es_xset wcs_iduration 0
        es_keygetvalue wcs_iduration WCSshop server_var(wcs_itemid) duration
        es_xset wcs_ibuy 0
        es_keygetvalue wcs_ibuy WCSshop server_var(wcs_itemid) cmdbuy
        es_xset wcs_iactivate 0
        es_keygetvalue wcs_iactivate WCSshop server_var(wcs_itemid) cmdactivate
        // launch buy command
        if (server_var(wcs_ibuy) != "0") do
        {
          es alias wcs_cmd server_var(wcs_ibuy)
          wcs_cmd
        }
        // add the item to the player record
        es_keygetvalue wcs_amount "WCSshop" server_var(wcs_itemid) "maxamount"
        if (server_var(wcs_amount) != "0") do
        {
          es_xformatv wcs_tmp1 "item_%1" wcs_itemid
          es_keygetvalue wcs_tmp2 "WCSuserdata" server_var(wcs_userid) server_var(wcs_tmp1)
          if (server_var(wcs_tmp2) = "0") then es_xset wcs_tmp2 "0"
          es_xmath wcs_tmp2 + 1
          es_keysetvalue "WCSuserdata" server_var(wcs_userid) server_var(wcs_tmp1) server_var(wcs_tmp2)
        }
        // dont allow buy items to be activated
        if (server_var(wcs_itype) = "player_buy") then es_xset wcs_iactivate 0
        if (server_var(wcs_iduration) = "0") then es_xset wcs_iactivate 0
        // insert item in the launch keygroup
        if (server_var(wcs_iactivate) != "0") do
        {
          es_xset wcs_icat 0
          if (server_var(wcs_itype) = "player_death") then es_xset wcs_icat WCSpd
          if (server_var(wcs_itype) = "player_kill") then es_xset wcs_icat WCSpk
          if (server_var(wcs_itype) = "player_attacker") then es_xset wcs_icat WCSpha
          if (server_var(wcs_itype) = "player_victim") then es_xset wcs_icat WCSphv
          if (server_var(wcs_itype) = "player_spawn") then es_xset wcs_icat WCSps
          if (server_var(wcs_itype) = "player_say") then es_xset wcs_icat WCSpsay
          es_xset wcs_icmd1 0
          es_xset wcs_icmd2 0
          es_xset wcs_icmd 0
          es_xset wcs_idescr 0
          es_xset wcs_islot "0"
          // refresh the steamid/ip
          es_keycreate server_var(wcs_icat) server_var(wcs_userid)
          es_keysetvalue server_var(wcs_icat) server_var(wcs_userid) id server_var(wcs_id)
          alias wcs_shopcheckfreeslot "es_keygetvalue wcs_icmd server_var(wcs_icat) server_var(wcs_userid) server_var(wcs_val);es_strlen wcs_strlen server_var(wcs_icmd);if (server_var(wcs_strlen) <= 1) then es_xset wcs_islot server_var(wcs_val);if (server_var(wcs_strlen) <= 1) then es_xset wcs_ok 1;if (server_var(wcs_strlen) > 1) then es_xmath wcs_counter + 1"
          es_xset wcs_ok 0
          es_xset wcs_counter 1
          es_foreachval wcs_val in server_var(wcs_icat) server_var(wcs_userid) "if (icmd_ in server_var(wcs_val)) then es_xif (server_var(wcs_ok) = 0) then wcs_shopcheckfreeslot"
          // check if second is free
          //es_keygetvalue wcs_icmd2 server_var(wcs_icat) server_var(wcs_userid) icmd2
          //es_strlen wcs_strlen server_var(wcs_icmd2)
          //if (server_var(wcs_strlen) <= 1) then es_xset wcs_islot "2"
          // check if first is free
          //es_keygetvalue wcs_icmd1 server_var(wcs_icat) server_var(wcs_userid) icmd1
          //es_strlen wcs_strlen server_var(wcs_icmd1)
          //if (server_var(wcs_strlen) <= 1) then es_xset wcs_islot "1"
          if (server_var(wcs_islot) = "0") then es_xif (server_var(wcs_counter) <= 3) then es_xformatv wcs_islot "icmd_%1" wcs_counter
          if (server_var(wcs_islot) = "0") do
          {
            // payback....
            wcs_getlanguage wcs_lng wcs_lng_bagfull
            es_tell server_var(wcs_userid) #multi server_var(wcs_lng)
            es_xset wcs_icost 0
            es_keygetvalue wcs_icost WCSshop server_var(wcs_itemid) cost
            if (server_var(wcs_ibuy) = 0) then es_xdelayed 1 est_Cash server_var(wcs_userid) + server_var(wcs_icost)
          }
          es_xelse do
          {
            wcs_getlanguage "wcs_lng" "wcs_lng_bagusage"
            es_token wcs_number server_var(wcs_islot) 1 icmd_
            es_formatv wcs_lng server_var(wcs_lng) wcs_number
            es_tell server_var(wcs_userid) #multi server_var(wcs_lng)
            // insert
            //es_format wcs_tmp "icmd%1" server_var(wcs_islot)
            es_keysetvalue server_var(wcs_icat) server_var(wcs_userid) server_var(wcs_islot) server_var(wcs_iactivate)
            // but dont notice on player_hurt event (too much spam)
            if (server_var(wcs_icat) != "player_attacker") do
            {
              if (server_var(wcs_icat) != "player_victim") do
              {
                es_xset wcs_iname 0
                es_keygetvalue wcs_iname WCSshop server_var(wcs_itemid) name
                wcs_getlanguage "wcs_lng" "wcs_lng_activated"
                es_xformatv wcs_text "#lightgreen%1 #green%2" wcs_lng wcs_iname
                es_xformatv wcs_text "es_tell %1 #multi %2" wcs_userid wcs_text
                es_format wcs_tmp "idescr_%1" server_var(wcs_number)
                es_keysetvalue server_var(wcs_icat) server_var(wcs_userid) server_var(wcs_tmp) server_var(wcs_text)
              }
            }
          }
          // refresh skills
          es wcs_skillcheck server_var(wcs_userid)
        }
      }
    }
  }
if (server_var(wcs_debug) = 1) then profile end giveshopitem
}
// <<<<<<<<<<<<<<<<< END SHOP BLOCKS >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

// >>>>>>>>>>>>>>>>> SHOP INFO >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
block wcs_showshopinfo
{
if (server_var(wcs_debug) = 1) then profile begin showshopinfo
  // first, is it a custom command ?
  es_xgetargv wcs_userid 1
  es_exists ex userid server_var(wcs_userid)
  ifx false(ex) do
  {
    // or a say command
    es_xgetcmduserid wcs_userid
    es wcs_menuzero server_var(wcs_userid)
  }
  // new popup system!
  es popup send shopinfo server_var(wcs_userid)
if (server_var(wcs_debug) = 1) then profile end showshopinfo
}

block wcs_shopinfo
{
es wcs_debuglog shopinfo cat server_var(wcs_shopcat) start
	es_xset wcs_counter 1
	es_xset wcs_popuplastid 0
  es_xforeachkey wcs_key in WCSshop "es_keygetvalue wcs_category WCSshop server_var(wcs_key) category;if (server_var(wcs_category) = server_var(wcs_shopcat)) then es_xdoblock wcs/WCSshop/wcs_shopinfo_items;if (server_var(wcs_category) = server_var(wcs_shopcat)) then es_xmath wcs_counter + 1"
es wcs_debuglog shopinfo cat server_var(wcs_shopcat) end
}

block wcs_shopinfo_items
{
	// get data and pretty print it
  es_keygetvalue wcs_name WCSshop server_var(wcs_key) name
  es_keygetvalue wcs_descr WCSshop server_var(wcs_key) description
  es_keygetvalue wcs_cost WCSshop server_var(wcs_key) cost
  es_keygetvalue wcs_level WCSshop server_var(wcs_key) level
  es_keygetvalue wcs_dab WCSshop server_var(wcs_key) dab
  es_keygetvalue wcs_duration WCSshop server_var(wcs_key) duration
  es_keygetvalue wcs_amount WCSshop server_var(wcs_key) maxamount
  // create the popup named info_CATEGORY_NAME
  es_xformatv wcs_popupid "info_%1_%2" wcs_category wcs_counter
  es popup create server_var(wcs_popupid)
  es popup addlinef server_var(wcs_popupid) "->%1.     %2 \n ( $%3 | min. level %4 )" wcs_counter wcs_name wcs_cost wcs_level
  wcs_getlanguage wcs_lng wcs_lng_buywhen
  es_xformatv wcs_text "%1 <" wcs_lng
  wcs_getlanguage wcs_lng wcs_lng_dab0
  if (server_var(wcs_dab) = 0) then es_xformatv wcs_text "%1%2>" wcs_text wcs_lng
  wcs_getlanguage wcs_lng wcs_lng_dab1
  if (server_var(wcs_dab) = 1) then es_xformatv wcs_text "%1%2>" wcs_text wcs_lng
  wcs_getlanguage wcs_lng wcs_lng_dab2
  if (server_var(wcs_dab) = 2) then es_xformatv wcs_text "%1%2>" wcs_text wcs_lng
  wcs_getlanguage wcs_lng wcs_lng_duration
  es_xformatv wcs_text "%1 %2 <" wcs_text wcs_lng
  wcs_getlanguage wcs_lng wcs_lng_thisround
  if (server_var(wcs_duration) = 0) then es_xformatv wcs_text "%1%2>" wcs_text wcs_lng
  wcs_getlanguage wcs_lng wcs_lng_untildeath
  if (server_var(wcs_duration) = 1) then es_xformatv wcs_text "%1%2>" wcs_text wcs_lng
  es popup addline server_var(wcs_popupid) server_var(wcs_text)
  ifx parse("wcs_amount > 0") do
  {
    wcs_getlanguage wcs_lng wcs_lng_itemstock
    es popup addlinef server_var(wcs_popupid) server_var(wcs_lng) wcs_amount
  }
  wcs_getlanguage wcs_lng wcs_lng_buy
  es popup addlinef server_var(wcs_popupid) "\n \n%1\n \n->7. %2" wcs_descr wcs_lng
  // we can always go back
  es popup addlinef server_var(wcs_popupid) "8. %1" wcs_lng_back
  es popup submenu server_var(wcs_popupid) 10 shopinfo
  ifx parse ("wcs_counter > 1") do
  {
  	// not the first popup, so insert next in the last one and link them
  	es popup addlinef server_var(wcs_popuplastid) "9. %1" wcs_lng_next
  	es popup submenu server_var(wcs_popupid) 8 server_var(wcs_popuplastid)
  	es popup submenu server_var(wcs_popuplastid) 9 server_var(wcs_popupid)
  }
  ifx parse("wcs_counter == 1") do
	{
		// first popup, create entry in shopmenu/info list and link it
		es_keygetvalue wcs_name WCSshop_cat server_var(wcs_shopcat) name
		es_keygetvalue wcs_descr WCSshop_cat server_var(wcs_shopcat) descr
		es popup addlinef shopinfo "->%1. %2\n %3" wcs_shopcat wcs_name wcs_descr
		es popup addlinef shopmenu "->%1. %2\n" wcs_shopcat wcs_name
		es popup submenu shopinfo server_var(wcs_shopcat) server_var(wcs_popupid)
		es popup menuselect shopmenu wcs/WCSshop/wcs_shop_menu
		es popup submenu server_var(wcs_popupid) 8 shopinfo
	}
	// the buy button link
  es popup menuselect server_var(wcs_popupid) wcs/WCSshop/wcs_shop_menu
  es_set wcs_popuplastid server_var(wcs_popupid)
}

block wcs_deathhandle_items
{
  es_xset wcs_userid 0
  es_xgetargv wcs_userid 1
  // remove custom item events
  es_exists ex key WCSpha server_var(wcs_userid)
  if (server_var(ex) = 1) then es_xkeydelete WCSpha server_var(wcs_userid)
  es_exists ex key WCSphv server_var(wcs_userid)
  if (server_var(ex) = 1) then es_xkeydelete WCSphv server_var(wcs_userid)
  es_exists ex key WCSpd server_var(wcs_userid)
  if (server_var(ex) = 1) then es_xkeydelete WCSpd server_var(wcs_userid)
  es_exists ex key WCSpk server_var(wcs_userid)
  if (server_var(ex) = 1) then es_xkeydelete WCSpk server_var(wcs_userid)
  es_exists ex key WCSps server_var(wcs_userid)
  if (server_var(ex) = 1) then es_xkeydelete WCSps server_var(wcs_userid)
  es_exists ex key WCSpsayserver_var(wcs_userid)
  if (server_var(ex) = 1) then es_xkeydelete WCSpsay server_var(wcs_userid)
  es_keycreate WCSpha server_var(wcs_userid)
  es_keycreate WCSphv server_var(wcs_userid)
  es_keycreate WCSpd server_var(wcs_userid)
  es_keycreate WCSpk server_var(wcs_userid)
  es_keycreate WCSps server_var(wcs_userid)
  es_keycreate WCSpsay server_var(wcs_userid)
  // clear item amount
  es_foreachval wcs_val in WCSuserdata server_var(wcs_userid) "if (item_ in server_var(wcs_val)) then es_xkeysetvalue WCSuserdata server_var(wcs_userid) server_var(wcs_val) 0"
}
