// ****************************************************************************************** // Schubaal's AntiCamp // v2.2.8a // based on Blade's Anticamp v1.4.53 // // * Description: // - message will be sent when camping with any weapon // - effects will not be applied when using excluded weapons // - last player alive on a team is not punished // // - camping is allowed for CTs if the Bomb has been dropped (can be toggled off) // - camping is allowed for Terrorists on Hostage maps (can be toggled off) // - camping is allowed for Terrorists if the Bomb has been planted (can be toggled off) // // * Install instructions: // 1. Install Mattie's EventScripts plugins: // http://mattie.info/cs // // 2. Extract the file [anticamp.zip] to your /cstrike/ directory: // /addons/eventscripts/anticamp/es_anticamp.txt // /addons/eventscripts/anticamp/es_mapconfig_db.txt // /cfg/anticamp/anticamp.cfg // /sound/ql/blip1.wav // // 3. Add the following line somewhere in autoexec.cfg or server.cfg: // es_load anticamp // // ****************************************************************************************** //************************************************************** // Do not edit this file unless you really know what you're // doing! Please edit the file ./cfg/anticamp/anticamp.cfg //************************************************************** block load { // init vars es_xset x 0 es_xset y 0 es_xset z 0 es_xset fA 0 es_xset tpx 0 es_xset tpy 0 es_xset tpz 0 es_xset _str 0 es_xset slap 0 es_xset cash 0 es_xset ac_id 0 es_xset _temp 0 es_xset blind 0 es_xset strip 0 es_xset _index 0 es_xset _rand 0 es_xset beacon 0 es_xset message 0 es_xset exclude 0 es_xset ac_name 0 es_xset ac_team 0 es_xset ac_timer 0 es_xset ac_class 0 es_xset camptime 0 es_xset _tempent 0 es_xset ac_isbot 0 es_xset ac_sound 0 es_xset takecash 0 es_xset ac_mapcat 0 es_xset slap_mode 0 es_xset ac_weapon 0 es_xset ac_return 0 es_xset ac_health 0 es_xset campradius 0 es_xset ac_counter 0 es_xset minplayer 0 es_xset min_health 0 es_xset _punishment 0 es_xset health_slap 0 es_xset start_timer 0 es_xset _start_timer 0 es_xset beacon_sound 0 es_xset detect_sound 0 es_xset allow_t_camp 0 es_xset allow_ct_camp 0 es_xset anticamp_mode 0 es_xset weapon_check 0 es_xset exclude_weapons 0 es_xset lastman_t 0 es_xset lastman_ct 0 es_xset excluded_send_message 0 es_xset loop_timer 0 es_xset anticamp_beacon_red 255 es_xset anticamp_beacon_green 0 es_xset anticamp_beacon_blue 0 es_xset anticamp_beacon2_red 0 es_xset anticamp_beacon2_green 0 es_xset anticamp_beacon2_blue 255 es_xset anticamp_beacon_size 0 es_xset anticamp_beacon_type 0 es_xset anticamp_lastman 0 // version information es_xset AntiCamp2 "2.2.8a" es_xmakepublic AntiCamp2 // init punishments alias _slap "es_xdoblock anticamp/slap" alias _cash "es_xdoblock anticamp/cash" alias _blind "es_xdoblock anticamp/blind" alias _strip "es_xdoblock anticamp/strip" alias _beacon "es_xdoblock anticamp/beacon" alias _message "es_xdoblock anticamp/message" // format msg es_xset campmsg "\x01Player:\x03 %s1\x01 is camping with\x04 %s2" es_xstring campmsg replace "\x01" "" es_xstring campmsg replace "\x03" "" es_xstring campmsg replace "\x04" "" // Initialize es_xdoblock anticamp/init es_msg #multi [#greenAntiCamp#default]#lightgreen server_var(anticamp2) loaded. es_msg #multi #green Excluded weapons#lightgreen are:#green server_var(exclude_weapons) } block unload { es_xset anticamp 0 es_xexists _temp keygroup anticamp ifx true(_temp) do { es_xkeygroupdelete anticamp } es_xexists _temp keygroup mapconfig ifx true(_temp) do { es_xkeygroupdelete mapconfig } es_xmsg #multi #green [AntiCamp]#default unloaded. } block init { es_xset ac_team 0 es_token ac_mapcat server_var(eventscripts_currentmap) 1 _ // allow Terrorists to camp on hostage maps if (server_var(ac_mapcat) in server_var(allow_t_camp)) do { es_xset ac_team 2 } // allow CTs to camp on demolition maps if (server_var(ac_mapcat) in server_var(allow_ct_camp)) do { es_xset ac_team 3 } // reset main loop es_xexists _temp keygroup anticamp ifx true(_temp) do { es_xkeygroupdelete anticamp } es_xkeygroupcreate anticamp // map configs es_xexists _temp keygroup mapconfig ifx true(_temp) do { es_xkeygroupdelete mapconfig } es_xkeygroupload mapconfig |anticamp // load config es_xset anticamp_cfg 0 exec anticamp/anticamp.cfg es_xmakepublic anticamp_cfg // correct config settings // loop_timer es_set _timer server_var(loop_timer) ifx true(_timer) do { es_xset loop_timer "1" } else do { es_xset loop_timer "2" } // slap_mode es_set _slapmode server_var(slap_mode) ifx true(_slapmode) { es_xset slap_mode "1" } else do { es_xset slap_mode "0" } // non-float vars es_xmath camptime int es_xmath slap int es_xmath blind int es_xmath strip int es_xmath beacon int es_xmath message int es_xmath health_slap int es_xmath min_health int es_xmath takecash int // camptime negative for count-up ifx parse("camptime >= 1") do { es_xmathparse camptime "camptime*-1" } // beacon sound es_xset anticamp_sounds 0 es_format anticamp_sounds "sound/%1" server_var(beacon_sound) es_stringtable downloadables server_var(anticamp_sounds) es_xdoblock anticamp/round_variables // end config corrections // load punishment sequence es_xset _punishment ";_slap;_cash;_blind;_strip;_beacon;_message" if (server_var(slap) == -1) then es_xstring _punishment replace ";_slap" if (server_var(cash) == -1) then es_xstring _punishment replace ";_cash" if (server_var(blind) == -1) then es_xstring _punishment replace ";_blind" if (server_var(strip) == -1) then es_xstring _punishment replace ";_strip" if (server_var(beacon) == -1) then es_xstring _punishment replace ";_beacon" if (server_var(message) == -1) then es_xstring _punishment replace ";_message" // load map config es_xset _temp 0 es_xset anticamp_mode 1 es_exists _temp key mapconfig server_var(eventscripts_currentmap) ifx true(_temp) do { es_foreachval _temp in mapconfig server_var(eventscripts_currentmap) "es_xdoblock anticamp/map_config" } // start anticamp es alias do_punish server_var(_punishment) es_xdelayed 1 es_xdoblock anticamp/check_player } event es_map_start { es_xdoblock anticamp/init } block map_config { es_keygetvalue _str mapconfig server_var(eventscripts_currentmap) server_var(_temp) es_xformatv _str "%1 %2" _temp _str es_xcommandv _str } block weapon_checks { es_strcmp cmpvar server_var(ac_weapon) server_var(temptoken) es_set weapon_check server_var(weapon_check) ifx false(weapon_check) do { es_set cmpvar server_var(cmpvar) ifx false(cmpvar) do { es_xset weapon_check 1 } else do { es_xset weapon_check 0 } } } block check_player { // command order ifx true(anticamp_mode) do { ifx true(_start_timer) do { es_xmath _start_timer - 1 } else do { es_xforeachkey ac_id in anticamp "es_xdoblock anticamp/verify_vector" } } es_xdelayed 1 es_xdoblock anticamp/check_player } block verify_vector { es getplayerinfo ac_class server_var(ac_id) teamid ifx parse("ac_class != ac_team") do { // get user health es getplayerinfo ac_health server_var(ac_id) health ifx parse("ac_health > min_health") do { // get current location es_getplayerprop fA server_var(ac_id) "CBaseEntity.m_vecOrigin" es_splitvectorstring x y z server_var(fA) // get old vector es_keygetvalue _str anticamp server_var(ac_id) vectorstr es_splitvectorstring tpx tpy tpz server_var(_str) // check old vector ifx parse("x == tpx") do { es_xdoblock anticamp/get_user } else do { es_xmathparse x "x-tpx" es_xmathparse y "y-tpy" es_xmathparse z "z-tpz" es_xstring x replace - es_xstring y replace - es_xstring z replace - // check if camping ifx parse("(x < campradius) and (y < campradius) and (z < campradius)") do { es_xdoblock anticamp/get_user } } ifx false(ac_return) do { es_keysetvalue anticamp server_var(ac_id) timer server_var(camptime) es_keysetvalue anticamp server_var(ac_id) vectorstr server_var(fA) } es_xset ac_return 0 } } } block get_user { // get total camps es_keygetvalue ac_counter anticamp server_var(ac_id) timer es_xmathparse ac_counter "ac_counter+1" es_keysetvalue anticamp server_var(ac_id) timer server_var(ac_counter) // punish if camptime has passed ifx parse("ac_counter >= 0") do { es_xmathparse _temp "ac_counter/loop_timer" if ("." notin server_var(_temp)) do { es_xset ac_timer 1 } else do { es_xset ac_timer 0 } es_xset weapon_check 0 es getplayerinfo ac_weapon server_var(ac_id) weapon es_xstring ac_weapon replace "weapon_" es getplayerinfo ac_name server_var(ac_id) name es foreach token temptoken server_var(exclude_weapons) "," "es_doblock anticamp/weapon_checks" es_set weapon_check server_var(weapon_check) ifx false(weapon_check) { do_punish } else do { es_set excluded_send_message server_var(excluded_send_message) ifx true(excluded_send_message) do { es_xdoblock anticamp/message } } } es_xset ac_return 1 } block message { if (server_var(ac_counter) in server_var(message)) do { // get user detail es getplayerinfo ac_weapon server_var(ac_id) weapon es_xstring ac_weapon replace weapon_ es getplayerinfo ac_name server_var(ac_id) name es getplayerinfo _index server_var(ac_id) index // write msg es_xusermsg create campmsg SayText2 es_usermsg write byte campmsg server_var(_index) es_xusermsg write byte campmsg true es_usermsg write string campmsg server_var(campmsg) es_usermsg write string campmsg server_var(ac_name) es_usermsg write string campmsg server_var(ac_weapon) es_xcreateplayerlist _playerlist es_xforeachkey _tmp in _playerlist "es_usermsg send campmsg server_var(_tmp)" es_xkeygroupdelete _playerlist es_xusermsg delete campmsg } } block cash { ifx true(ac_timer) do { ifx parse("ac_counter >= cash") do { es_getplayerprop _temp server_var(ac_id) "CCSPlayer.m_iAccount" ifx true(_temp) do { ifx parse("_temp > 0") do { es_xmath takecash * -1 es playerset cashadd server_var(ac_id) takecash } } } } } block strip { ifx parse("ac_counter == strip") do { es_give server_var(ac_id) player_weaponstrip es_fire server_var(ac_id) player_weaponstrip strip es_give server_var(ac_id) weapon_knife } } block blind { ifx parse("ac_counter >= blind") do { es_give server_var(ac_id) env_fade es_fire server_var(ac_id) env_fade addoutput "spawnflags 4" es_fire server_var(ac_id) env_fade addoutput "duration 1" es_fire server_var(ac_id) env_fade addoutput "holdtime 1.2" es_fire server_var(ac_id) env_fade addoutput "rendercolor 200 200 200" es_fire server_var(ac_id) env_fade addoutput "OnUser1 !self,Fade,-1,0" es_fire server_var(ac_id) env_fade FireUser1 } } block slap { ifx true(ac_timer) do { ifx parse("ac_counter >= slap") do { // emit hurt sounds es_xrand _temp 1 3 es_xformatv ac_sound "player/damage%1.wav" _temp es_emitsound player server_var(ac_id) server_var(ac_sound) 1.0 0.7 // slap player es_xmathparse ac_health "ac_health-health_slap" ifx parse("ac_health <= 0") do { es_sexec server_var(ac_id) kill es bot_kill server_var(ac_name) } else do { ifx parse("ac_health > min_health") do { es playerset health server_var(ac_id) server_var(ac_health) } else do { es playerset health server_var(ac_id) server_var(min_health) } ifx true(slap_mode) do { es_xrand _rand 0 1 ifx true(_rand) do { es playerset push server_var(ac_id) -200 200 1 } else do { es playerset push server_var(ac_id) 200 200 1 } } } } } } block beacon { ifx true(ac_timer) do { ifx parse("ac_counter >= beacon") do { ifx true(beacon_sound) do { es_emitsound player server_var(ac_id) server_var(beacon_sound) 1.0 0.7 } es_splitvectorstring x y z server_var(fA) es_xmathparse z "z+10" if (server_var(anticamp_beacon_type) != 1) do { es ma_effect 3 server_var(x) server_var(y) server_var(z) 500 75 } if (server_var(anticamp_beacon_type) != 0) do { es_xset anticamp_team_check 0 es_getplayerteam anticamp_team_check server_var(ac_id) if (server_var(anticamp_team_check) == "2") do { es_set _r server_var(anticamp_beacon_red) es_set _g server_var(anticamp_beacon_green) es_set _b server_var(anticamp_beacon_blue) } else do { if (server_var(anticamp_team_check) == "3") do { es_set _r server_var(anticamp_beacon2_red) es_set _g server_var(anticamp_beacon2_green) es_set _b server_var(anticamp_beacon2_blue) } else do { es_xset _r 255 es_xset _g 255 es_xset _b 255 } } es est_effect 10 #a 0 "sprites/lgtning.vmt" server_var(x) server_var(y) server_var(z) 1 server_var(anticamp_beacon_size) 1 10 50 0 server_var(_r) server_var(_g) server_var(_b) 200 0 } } } } event player_spawn { // check if alive if (event_var(es_userteam) != 0) do { ifx false(exclude) do { es_xdoblock anticamp/add_player } else do { es_isbot ac_isbot event_var(userid) ifx parse("exclude == 2") do { ifx false(ac_isbot) do { es_xdoblock anticamp/add_player } } ifx parse("exclude == 1") do { ifx true(ac_isbot) do { es_xdoblock anticamp/add_player } } } } } block add_player { es_keycreate anticamp event_var(userid) es_keysetvalue anticamp event_var(userid) timer "-222" es_getplayerprop fA event_var(userid) "CBaseEntity.m_vecOrigin" es_keysetvalue anticamp event_var(userid) vectorstr server_var(fA) } block round_variables { ifx true(anticamp_lastman) do { es_xset lastman_t 0 es_xset lastman_ct 0 } else do { es_xset lastman_t 1 es_xset lastman_ct 1 } } event bomb_abortdefuse { es_keycreate anticamp event_var(userid) es_keysetvalue anticamp event_var(userid) timer server_var(camptime) es_getplayerprop fA event_var(userid) "CBaseEntity.m_vecOrigin" es_keysetvalue anticamp event_var(userid) vectorstr server_var(fA) } event round_start { es_xcopy _start_timer start_timer es_xdoblock anticamp/round_variables } event round_end { es_xset ac_team 0 if (server_var(ac_mapcat) in server_var(allow_t_camp)) do { es_xset ac_team 2 } if (server_var(ac_mapcat) in server_var(allow_ct_camp)) do { es_xset ac_team 3 } } event player_death { // delete user from loop es_xdoblock anticamp/check_delete es_xdelayed 2 es_xdoblock anticamp/check_delete es_xset ct_count 0 getplayercount ctcount #ct#alive es_xmath ctcount - 1 ifx false(ctcount) do { ifx false(lastman_ct) do { es_xmsg #multi #lightgreen Only#green 1#lightgreen player left for the#green Counter Terrorists#lightgreen ! foreach player tempid #ct#alive "es_keydelete anticamp server_var(tempid)" es_xset lastman_ct 1 } } es_xset t_count 0 getplayercount tcount #t#alive es_xmath tcount - 1 ifx false(tcount) do { ifx false(lastman_t) do { es_xmsg #multi #lightgreen Only#green 1#lightgreen player left for the#green Terrorists#lightgreen ! foreach player tempid #t#alive "es_keydelete anticamp server_var(tempid)" es_xset lastman_t 1 } } } block check_delete { es_xset _temp 0 es_exists _temp key anticamp event_var(userid) ifx true(_temp) do { es_keydelete anticamp event_var(userid) } } event player_disconnect { // delete user from loop es_exists _temp key anticamp event_var(userid) ifx true(_temp) do { es_keydelete anticamp event_var(userid) } } event player_team { if (event_var(team) == 1) // moved to spectators { // delete user from loop es_exists _temp key anticamp event_var(userid) ifx true(_temp) do { es_keydelete anticamp event_var(userid) } } } event bomb_begindefuse { // delete user from loop es_exists _temp key anticamp event_var(userid) ifx true(_temp) do { es_keydelete anticamp event_var(userid) } } event bomb_droped { // allow ct's to camp if (server_var(ac_mapcat) notin server_var(allow_ct_camp)) do { es_xset ac_team 3 } } event bomb_pickup { es_xset ac_team 0 if (server_var(ac_mapcat) in server_var(allow_t_camp)) do { es_xset ac_team 2 } if (server_var(ac_mapcat) in server_var(allow_ct_camp)) do { es_xset ac_team 3 } } event bomb_planted { // allow terrors to camp if (server_var(ac_mapcat) notin server_var(allow_t_camp)) do { es_xset ac_team 2 } }