Re: Block menu from another plugin.
Yes here you have.
PHP Code:
/* * _______ _ _ __ __ * | _____/ | | | | \ \ __ / / * | | | | | | | | / \ | | * | | | |____| | | |/ __ \| | * | | ___ | ______ | | / \ | * | | |_ | | | | | | / \ | * | | | | | | | | | | | | * | |____| | | | | | | | | | * |_______/ |_| |_| \_/ \_/ * * * * Last Edited: 07-12-09 * * ============ * Changelog: * ============ * * v2.3 * -Bug Fixes * * v2.2 * -Added ML * * v2.1 * -Added rules * * v2.0 * -Rewrite * * v1.1 * -Made less laggy and more compadible (by taking out client_PreThink) * * v1.0 * -Initial Release * */
#define VERSION "2.3b"
#include <amxmodx> #include <amxmisc> #include <fun> #include <fakemeta>
#define TAG_BASE_DISTANCE 150
#define TASK_SELECT_IT 1335 #define TASK_CREATE_BASE 1336 #define TASK_REDRAW_BASE 1337
enum MODE { OFF, REGULAR, FREEZE, BASE, TEAM }
new MODE:game_mode new it_player new old_it new immune_player new maxplayers
new individual_msg_pcvar new restart_pcvar new activity_pcvar
new bool:frozen[33] new bool:defrostable[33] new bool:respawning[33] new bool:tagged[33] new bool:gottobase[33]
new Float:base_origin[3] new base_origin_I[3]
new beamsprite
public plugin_init() { register_plugin("Tag Mod",VERSION,"GHW_Chronic") register_clcmd("chooseteam", "ClCmd_ChooseTeam") register_concmd("amx_tag","cmd_start",ADMIN_SLAY," Starts a game of tag [Normal, Freeze, Base, Team]") register_concmd("amx_tag_off","cmd_stop",ADMIN_SLAY," Stops a currently running game of tag")
register_forward(FM_Touch,"FM_Touch_Hook") register_forward(FM_PlayerPreThink,"FM_Think_Hook") register_event("ResetHUD","ResetHUD_Hook","b")
register_cvar("tag_mode","0") individual_msg_pcvar = register_cvar("tag_individual_msg","0") restart_pcvar = get_cvar_pointer("sv_restart") activity_pcvar = get_cvar_pointer("amx_show_activity")
maxplayers = get_maxplayers()
if(get_cvar_num("tag_mode")) { switch(get_cvar_num("tag_mode")) { case 1: { game_mode = REGULAR } case 2: { game_mode = FREEZE } case 3: { game_mode = BASE } case 4: { game_mode = TEAM } }
reset_game()
new players[32], num get_players(players,num,"h") for(new i=0;i<num;i++) { set_pev(players[i],pev_takedamage,0.0) frozen[players[i]] = false }
select_it() }
register_dictionary("GHW_TagMod.txt") }
public plugin_precache() { beamsprite = precache_model("sprites/dot.spr") }
public client_connect(id) { frozen[id] = false respawning[id] = false tagged[id] = false gottobase[id] = false }
public client_disconnect(id) { if(id==it_player) { select_it() } }
public cmd_start(id,level,cid) { if(!cmd_access(id,level,cid,1)) { return PLUGIN_HANDLED }
game_mode = REGULAR
if(read_argc()>1) { new arg[32] read_argv(1,arg,31) if(equali(arg,"Freeze")) { game_mode = FREEZE } else if(equali(arg,"Base")) { game_mode = BASE } else if(equali(arg,"Team")) { game_mode = TEAM } }
new name[32] if(get_pcvar_num(activity_pcvar)>1) { format(name,31,"Admin") } else { get_user_name(id,name,31) }
new type[32] new rules[128] switch(game_mode) { case REGULAR: { format(type,31,"%L",0,"TAG_TYPE_REGULAR") format(rules,127,"[AMXX] %L",0,"TAG_RULES_REGULAR") } case FREEZE: { format(type,31,"%L",0,"TAG_TYPE_FREEZE") format(rules,127,"[AMXX] %L",0,"TAG_RULES_FREEZE") } case BASE: { format(type,31,"%L",0,"TAG_TYPE_BASE") format(rules,127,"[AMXX] %L",0,"TAG_RULES_BASE") } case TEAM: { format(type,31,"%L",0,"TAG_TYPE_TEAM") format(rules,127,"[AMXX] %L",0,"TAG_RULES_TEAM") } }
reset_game()
set_pcvar_num(restart_pcvar,1)
new players[32], num get_players(players,num,"h") for(new i=0;i<num;i++) { set_pev(players[i],pev_takedamage,0.0) frozen[players[i]] = false }
console_print(id,"[AMXX] %L",id,"TAG_GAME_STARTED_CON",type) client_print(0,print_chat,"[AMXX] %L",0,"TAG_GAME_STARTED_CHAT",name,type) client_print(0,print_chat,"%s",rules)
select_it()
return PLUGIN_HANDLED }
public clcmd_chooseteam(id) { if (id == it_player) return PLUGIN_HANDLED; }
public Create_Base() { if(game_mode==BASE) { if(it_player && is_user_alive(it_player)) { pev(it_player,pev_origin,base_origin) FVecIVec(base_origin,base_origin_I) set_task(2.0,"Redraw_Base") set_task(30.0,"Redraw_Base",TASK_REDRAW_BASE,"",0,"b") remove_task(TASK_CREATE_BASE) } } else { remove_task(TASK_CREATE_BASE) } }
public Redraw_Base() { if(game_mode!=BASE) { remove_task(TASK_REDRAW_BASE) }
draw_sprite(100,100,100,-100) draw_sprite(100,100,-100,100) draw_sprite(100,-100,-100,-100) draw_sprite(-100,100,-100,-100) }
public draw_sprite(addx1,addy1,addx2,addy2) { message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(0) //TE_BEAMPOINTS write_coord(base_origin_I[0] + addx1) write_coord(base_origin_I[1] + addy1) write_coord(base_origin_I[2]) write_coord(base_origin_I[0] + addx2) write_coord(base_origin_I[1] + addy2) write_coord(base_origin_I[2]) write_short(beamsprite) write_byte(1) // framestart write_byte(1) // framerate write_byte(1200) // life in 0.1's write_byte(5) // width write_byte(0) // noise write_byte(random_num(0,255)) write_byte(random_num(0,255)) write_byte(random_num(0,255)) write_byte(200) // brightness write_byte(0) // speed message_end() }
public reset_game() { for(new i=1;i<=maxplayers;i++) { if(is_user_connected(i)) { set_user_noclip(i) _set_rendering(i) } frozen[i] = false tagged[i] = false } }
public reset_game2() { for(new i=1;i<=maxplayers;i++) { gottobase[i] = false } }
public select_it() { if(task_exists(TASK_SELECT_IT) && it_player && is_user_connected(it_player)) { remove_task(TASK_SELECT_IT) } else if(!task_exists(TASK_SELECT_IT)) { old_it = is_user_connected(it_player) ? it_player : 0 it_player = 0 set_task(5.0,"select_it",TASK_SELECT_IT,"",0,"b") } else { select_it2() } }
public select_it2() { if(it_player && is_user_connected(it_player)) _set_rendering(it_player)
it_player = 0
new num, players[32] get_players(players,num,"h")
if(num) { new tries = 100 new tempplayer while(!it_player && tries--) { tempplayer = random_num(0,num - 1) if(tempplayer!=old_it && (game_mode!=BASE || !gottobase[players[tempplayer]])) { it_player = tempplayer } } if(!it_player) it_player = players[random_num(0,num - 1)]
if(is_user_connected(it_player)) { _set_rendering(it_player,kRenderFxDistort,255,0,0,kRenderTransAdd,127) new name[32] get_user_name(it_player,name,31) client_print(0,print_chat,"[AMXX] %L",0,"TAG_IT_SELECTED",name)
if(it_player && game_mode==BASE) { reset_game2() if(!task_exists(TASK_CREATE_BASE)) { set_task(10.0,"Create_Base",TASK_CREATE_BASE,"",0,"b") } } } else { select_it2() ///////// it_player = 0 } } }
public ResetHUD_Hook(id) { if(game_mode && pev_valid(id) && pev(id,pev_takedamage)) set_pev(id,pev_takedamage,0.0) }
public cmd_stop(id,level,cid) { if(!cmd_access(id,level,cid,1)) { return PLUGIN_HANDLED }
if(game_mode) { game_mode = OFF
new players[32], num get_players(players,num,"h") for(new i=0;i<num;i++) { _set_rendering(players[i]) set_pev(players[i],pev_takedamage,1.0) set_user_noclip(players[i]) }
new name[32] if(get_pcvar_num(activity_pcvar)>1) { format(name,31,"Admin") } else { get_user_name(id,name,31) } console_print(id,"[AMXX] %L",id,"TAG_GAME_STOPPED_CON") client_print(0,print_chat,"[AMXX] %L",0,"TAG_GAME_STOPPED_CHAT",name) } else { console_print(id,"[AMXX] %L",id,"TAG_GAME_NOTRUNNING") }
return PLUGIN_HANDLED }
public respawn_player(id) { if(is_user_connected(id)) { //Make the engine think he is spawning set_pev(id,pev_deadflag,DEAD_RESPAWNABLE) set_pev(id,pev_iuser1,0) dllfunc(DLLFunc_Think,id)
//Move his body so if corpse is created it is not in map engfunc(EngFunc_SetOrigin,id,Float:{-4800.0,-4800.0,-4800.0})
//Actual Spawn set_task(0.5,"spawnagain",id) } }
public spawnagain(id) { //Make sure he didn't disconnect in the 0.5 seconds that have passed. if(is_user_connected(id)) { //Spawn player spawn(id) dllfunc(DLLFunc_Spawn,id)
set_task(0.2,"spawned",id) } }
public spawned(id) { if(is_user_connected(id)) { if(id==it_player) { _set_rendering(id,kRenderFxDistort,255,0,0,kRenderTransAdd,127) } else if(game_mode==BASE) { if(tagged[id]) { _set_rendering(id,kRenderFxGlowShell,0,255,0,kRenderTransAlpha,70) set_user_noclip(id,1) } else if(gottobase[id]) { _set_rendering(id,kRenderFxGlowShell,0,0,0,kRenderTransAdd,0) engfunc(EngFunc_SetView,id,it_player) } } else if(game_mode==FREEZE && frozen[id]) { _set_rendering(id,kRenderFxGlowShell,0,0,255,kRenderTransAlpha,70) } set_pev(id,pev_takedamage,0.0) respawning[id] = false if(!it_player) { select_it() } } }
public FM_Think_Hook(ent) { if(!game_mode || ent > maxplayers) return PLUGIN_CONTINUE
if(!respawning[ent] && !is_user_alive(ent) && get_user_team(ent)) { respawning[ent] = true respawn_player(ent) }
if(frozen[ent]) { set_pev(ent,pev_velocity,Float:{0.0,0.0,-100.0}) }
if(ent!=it_player && !tagged[ent] && !gottobase[ent] && is_user_alive(ent) && game_mode==BASE) { static Float:origin[3] pev(ent,pev_origin,origin) if(get_distance_f(origin,base_origin)<TAG_BASE_DISTANCE) { gottobase[ent] = true frozen[ent] = true set_user_noclip(ent,1) _set_rendering(ent,kRenderFxGlowShell,0,0,0,kRenderTransAlpha,0)
if(get_pcvar_num(individual_msg_pcvar)) { static name[32] get_user_name(ent,name,31) client_print(ent,print_chat,"[AMXX] %L",ent,"TAG_GOTTOBASE_CLIENT") if(get_pcvar_num(individual_msg_pcvar)) { client_print(0,print_chat,"[AMXX] %L",0,"TAG_GOTTOBASE_ALL",name) }
if(allout()) { client_print(0,print_chat,"[AMXX] %L",0,"TAG_NEXTROUND")
reset_game() select_it() reset_game2() } } } }
return PLUGIN_CONTINUE }
public FM_Touch_Hook(ent1,ent2) { static name[32] if(ent1 <= maxplayers && is_user_alive(ent1) && ent2 <= maxplayers && is_user_alive(ent1) && is_user_alive(ent2)) { switch(game_mode) { case REGULAR: { if(ent1==it_player && ent2!=immune_player) { if(frozen[it_player]) frozen[it_player] = false
immune_player = it_player set_task(5.0,"unimmune") frozen[ent2] = true set_task(5.0,"unfreeze",ent2) it_player = ent2
get_user_name(ent2,name,31) client_print(0,print_chat,"[AMXX] %L",0,"TAG_TAGGED",name)
_set_rendering(ent1) _set_rendering(ent2,kRenderFxDistort,0,0,0,kRenderTransAdd,127) } } case FREEZE: { if(defrostable[ent1] && frozen[ent1] && ent2!=it_player && !frozen[ent2]) { unfreeze(ent1) _set_rendering(ent1)
if(get_pcvar_num(individual_msg_pcvar)) { get_user_name(ent1,name,31) client_print(0,print_chat,"[AMXX] %L",0,"TAG_UNFROZEN",name) } } else if(ent1==it_player && !frozen[ent2]) { freeze(ent2) _set_rendering(ent2,kRenderFxGlowShell,0,0,255,kRenderTransAlpha,70)
if(get_pcvar_num(individual_msg_pcvar)) { get_user_name(ent2,name,31) client_print(0,print_chat,"[AMXX] %L",0,"TAG_FROZEN",name) }
defrostable[ent2] = false set_task(1.0,"unfreezeable",ent2)
if(allfrozen()) { set_pcvar_num(restart_pcvar,1)
get_user_name(it_player,name,31) client_print(0,print_chat,"[AMXX] %L",0,"TAG_FROZEN_FINISHED",name)
reset_game() select_it() } } } case BASE: { if(ent1==it_player && !tagged[ent2] && !gottobase[ent2]) { tagged[ent2] = true; _set_rendering(ent2,kRenderFxGlowShell,0,255,0,kRenderTransAlpha,70) set_user_noclip(ent2,1)
if(get_pcvar_num(individual_msg_pcvar)) { get_user_name(ent2,name,31) client_print(0,print_chat,"[AMXX] %L",0,"TAG_BASE_TAGGED",name) }
if(allout()) { client_print(0,print_chat,"[AMXX] %L",0,"TAG_NEXTROUND")
reset_game() select_it() } } } case TEAM: { if((ent1==it_player || tagged[ent1]) && (!tagged[ent2] && ent2!=it_player)) { client_print(ent2,print_chat,"[AMXX] %L",ent2,"TAG_TEAM_TAGGED") tagged[ent2] = true _set_rendering(ent2,kRenderFxDistort,0,0,0,kRenderTransAdd,127) if(alltagged()) { client_print(0,print_chat,"[AMXX] %L",0,"TAG_NEXTROUND")
reset_game() select_it() } } } } } }
public allfrozen() { new num, players[32] get_players(players,num,"ah")
for(new i=0;i<num;i++) { if(players[i]!=it_player && !frozen[players[i]]) return 0; }
return 1; }
public allout() { new num, players[32] get_players(players,num,"ah")
for(new i=0;i<num;i++) { if(players[i]!=it_player && !tagged[players[i]] && !gottobase[players[i]]) return 0; }
return 1; }
public alltagged() { new num, players[32] get_players(players,num,"ah")
for(new i=0;i<num;i++) { if(players[i]!=it_player && !tagged[players[i]]) return 0; }
return 1; }
public unfreezeable(id) { defrostable[id] = true }
public freeze(id) { frozen[id] = true }
public unfreeze(id) { frozen[id] = false }
public unimmune() { immune_player = 0 }
// Taken from csdm_protection.sma by BAILOPAN. stock _set_rendering(index, fx=kRenderFxNone, r=255, g=255, b=255, render=kRenderNormal, amount=16) { set_pev(index, pev_renderfx, fx); new Float:RenderColor[3]; RenderColor[0] = float(r); RenderColor[1] = float(g); RenderColor[2] = float(b); set_pev(index, pev_rendercolor, RenderColor); set_pev(index, pev_rendermode, render); set_pev(index, pev_renderamt, float(amount));
return 1; }
|