/* .___ .__ _____ _____ __| _/____ ___________ ______ ____ |__|/ ____\/ ____\___________ / __ |/ _ \ / _ \_ __ \ ______ / ___// \| \ __\\ __\/ __ \_ __ \ / /_/ ( <_> | <_> ) | \/ /_____/ \___ \| | \ || | | | \ ___/| | \/ \____ |\____/ \____/|__| /____ >___| /__||__| |__| \___ >__| \/ \/ \/ \/ version 1.0 by Skipper */ #include #include #include #include #include #define PLUGIN "door-sniffer" #define VERSION "1.0" #define AUTHOR "Skipper" new is = 1 new w_sprite new bool:g_doors_ready new g_doors_max new g_doors[40] new g_playercandef[33][2] new Float:g_pos[33][3] public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_cvar("door_defuse", "1") register_cvar("door_defusecost", "800") register_cvar("door_defusetime", "6") register_cvar("door_defuseteam", "ALL") register_cvar("door_showsprite", "1") register_cvar("door_defuseiconyellow", "1") register_forward(FM_EmitSound, "forward_emitsound") register_clcmd("say /buydef","give_def") register_clcmd("defuser","give_def") set_task(5.0, "loadworld") set_task(0.2, "def", 0, "", 0, "b") } public plugin_modules() { require_module("fakemeta") require_module("engine") require_module("cstrike") } public plugin_precache() { precache_sound("lockpickbeginn.wav") precache_sound("lockpickready.wav") precache_sound("lockpickbuying.wav") w_sprite = precache_model("sprites/lockpick.spr") } public give_def(id){ new defteam[4] new p_team[12] get_user_team(id, p_team, 11) get_cvar_string("door_defuseteam", defteam, 11) if(equal(defteam, "ALL") || equal(defteam, "CT") && equal(p_team, "CT") || equal(defteam, "T") && equal(p_team, "TERRORIST")){ if(get_cvar_num("door_defuse") == 1 && g_doors_ready == true){ if(cs_get_user_buyzone(id) == 1){ if(is_user_alive(id)){ if(cs_get_user_defuse(id) == 0){ new defusecolor = get_cvar_num("door_defuseiconyellow") new cost = get_cvar_num("door_defusecost") if(cs_get_user_money(id) >= cost) { cs_set_user_money(id, cs_get_user_money(id)-cost, 1) client_cmd(id, "spk sound/lockpickbuying") if(defusecolor == 1){ cs_set_user_defuse(id, 1, 245, 245, 0) } else { cs_set_user_defuse(id, 1, 0, 160, 0) } } else { client_print(id, print_chat, "[DEF] You don't have enought money.") } } else { client_print(id, print_chat, "[DEF] You already have one.") } } else { client_print(id, print_chat, "[DEF] You can't buy something when you're dead.") } } else { client_print(id, print_chat, "[DEF] You're not in a buy-zone.") } } else { client_print(id, print_chat, "[DEF] The plugin is turned of or not ready.") } } else { client_print(id, print_chat, "[DEF] You're not allowed to buy a defusekit.") } return PLUGIN_HANDLED } public defuseit(id) { if(g_playercandef[id][0] == 1){ new give[2] give[0] = g_playercandef[id][1] give[1] = id defuse(id, 6) client_cmd(id, "spk sound/lockpickbeginn") entity_get_vector(id, EV_VEC_origin, g_pos[id]) set_task(0.1, "doeshedef", 101, give, 2, "b") set_task(6.0, "open_door_silent", 100, give, 2) return FMRES_SUPERCEDE } return FMRES_IGNORED } public loadworld() { while(is != 0) { is = find_ent_by_class ( is, "func_door_rotating" ) g_doors[g_doors_max] = is g_doors_ready = true if(is != 0) { g_doors_max++ } } if(g_doors[0] == 0 && g_doors_ready == true) { pause("a") } } public def() { if(get_cvar_num("door_defuse") == 1){ for(new id=1; id <= 32; id++) { if(is_user_connected (id) == 1){ if(cs_get_user_defuse(id) == 1){ rangetest(id) } } } } else { for(new id=1; id <= 32; id++) { if(is_user_connected (id) == 1){ if(cs_get_user_defuse(id) == 1){ cs_set_user_defuse(id, 1, 0, 160, 0, "defuser", 0) } } } } } public rangetest(id) { new range[2] new defusecolor = get_cvar_num("door_defuseiconyellow") for(new i=0;i temprange[0]) { range[0] = temprange[0] range[1] = temprange[1] } } } if(range[0] <= 70){ if(defusecolor == 1){ cs_set_user_defuse(id, 1, 255, 255, 0, "defuser", 1) } else { cs_set_user_defuse(id, 1, 0, 160, 0, "defuser", 1) } g_playercandef[id][0] = 1 g_playercandef[id][1] = range[1] } else { if(defusecolor == 1){ cs_set_user_defuse(id, 1, 255, 255, 0, "defuser", 0) } else { cs_set_user_defuse(id, 1, 0, 160, 0, "defuser", 0) } g_playercandef[id][0] = 0 g_playercandef[id][1] = range[1] } } public defuse (id, bartime) { message_begin(MSG_ONE, get_user_msgid("BarTime"), {0,0,0}, id) write_byte(bartime) write_byte(0) message_end() if(get_cvar_num("door_showsprite") == 1){ if(bartime != 0) { message_begin(MSG_ALL,SVC_TEMPENTITY) write_byte(124) write_byte(id) write_coord(40) write_short(w_sprite) write_short(65) message_end() } else { message_begin(MSG_ALL,SVC_TEMPENTITY) write_byte(125) write_byte(id) message_end() } } } public doeshedef(give[]) { if(!is_user_alive(give[1])){ remove_task (100) remove_task (101) defuse(give[1], 0) } if(!(entity_get_int(give[1], EV_INT_button) & IN_USE)) { remove_task (100) remove_task (101) defuse(give[1], 0) } new Float:currentpos[3] entity_get_vector(give[1], EV_VEC_origin, currentpos) for (new i = 0; i < 3; i++) { if (currentpos[i] != g_pos[give[1]][i]) { remove_task (100) remove_task (101) defuse(give[1], 0) } } } public open_door_silent(give[]) { client_cmd(give[1], "spk sound/lockpickready") entity_set_int(give[0], EV_INT_iuser1, 1) fake_touch(give[0], give[1]) remove_task (101) set_task(8.0,"door_loud", 0, give, 2) } public door_loud(give[]) { entity_set_int(give[0], EV_INT_iuser1, 0) } public forward_emitsound(const ent, const lol, const sound[]) { if (ent < 1) { return FMRES_IGNORED } if (ent >= 1 && ent <= 32) { if (equal(sound, "common/wpn_denyselect.wav")) return defuseit(ent) } new classname[32] entity_get_string(ent, EV_SZ_classname, classname, 31) if (equal(classname, "func_door_rotating") && entity_get_int(ent, EV_INT_iuser1) == 1) { return FMRES_SUPERCEDE } return FMRES_IGNORED }