Offline |
|
Csatlakozott: 2013.01.21. 10:10 Hozzászólások: 138
Megköszönt másnak: 20 alkalommal Megköszönték neki: 6 alkalommal
|
DanComment írta: Sziasztok feltettem azt a plugint ami az afk t egy idő után kiteszi spectate ba. Nem működik és konzolba ezt írja: Unknown command: spectator #include <amxmodx> #include <amxmisc> #define MIN_AFK_TIME 60 // I use this incase stupid admins accidentally set mp_afktime to something silly. #define WARNING_TIME 15 // Start warning the user this many seconds before they are about to be kicked. #define CHECK_FREQ 5 // This is also the warning message frequency. new g_oldangles[33][3] new g_afktime[33] new bool:g_spawned[33] = {false, ...} public plugin_init() { register_plugin("AFK spectate","1.2","pizzahut") register_cvar("afk_version", "1.2", FCVAR_SERVER) register_cvar("mp_afktime", "300") // Kick people AFK longer than this time. register_cvar("mp_afkminplayers", "1") // Only kick AFKs when there is at least this many players on the server. set_task(float(CHECK_FREQ),"checkPlayers",0,"",0,"b",0) register_logevent("playerSpawned",3,"1=changed role to") register_logevent("playerSpecs",3,"1=joined team","2=SPECTATOR") } public checkPlayers() { new name[64] for (new i = 1; i <= get_maxplayers(); i++) { if (is_user_connected(i) && !is_user_bot(i) && !is_user_hltv(i) && (get_user_team(i)>0)) { new newangle[3] get_user_origin(i, newangle) get_user_name(i,name,64) if((newangle[0] == g_oldangles[i][0]) && (newangle[1] == g_oldangles[i][1]) && (newangle[2] == g_oldangles[i][2])) { g_afktime[i] += CHECK_FREQ check_afktime(i) } else { g_oldangles[i][0] = newangle[0] g_oldangles[i][1] = newangle[1] g_oldangles[i][2] = newangle[2] g_afktime[i] = 0 } } else afk_reset(i) } return PLUGIN_CONTINUE } check_afktime(id) { new numplayers = get_playersnum() new minplayers = get_cvar_num("mp_afkminplayers") if (numplayers >= minplayers) { if(g_spawned[id]) { new maxafktime = get_cvar_num("mp_afktime") if(maxafktime < MIN_AFK_TIME) { log_amx("cvar mp_afktime %i is too low. Minimum value is %i.", maxafktime, MIN_AFK_TIME) maxafktime = MIN_AFK_TIME set_cvar_num("mp_afktime", MIN_AFK_TIME) } if(maxafktime-WARNING_TIME <= g_afktime[id] < maxafktime) { new timeleft = maxafktime - g_afktime[id] client_print(id, print_chat, "You have %i seconds to move or you will be put into spectator mode for being AFK.", timeleft) } else if(g_afktime[id] > maxafktime) { client_print(id, print_chat, "You are put into spectator mode for being AFK longer than %i seconds.", maxafktime) client_cmd(id,"spectate") } } else if(g_afktime[id] > 30) client_cmd(id,"spectate") } } public playerSpawned() { new id = get_id() g_spawned[id] = true return PLUGIN_CONTINUE } public playerSpecs() { new id = get_id() afk_reset(id) return PLUGIN_CONTINUE } afk_reset(id) { g_afktime[id] = 0 new newangle[3] get_user_origin(id,newangle) g_oldangles[id][0] = newangle[0] g_oldangles[id][1] = newangle[1] g_oldangles[id][2] = newangle[2] g_spawned[id] = false } get_id() { new Arg1[64] read_logargv(0,Arg1,64) new p_name[64] parse_loguser(Arg1,p_name,64) new name[64],id=0 for (new i=1;i<=get_maxplayers();i++) { if(is_user_connected(i)) { get_user_name(i,name,64) if(equal(p_name,name)) id = i } } return id } public server_changelevel(map[]) { for (new i = 1; i <= get_maxplayers(); i++) afk_reset(i) return PLUGIN_CONTINUE }
Azért nem megy a plugin, mert nincs "befejezve" return PLUGIN_CONTINUE => HANDLED
Tesztelve, működik: #include <amxmodx> #include <cstrike> // AFK Task offset const afk_task = 4000 // pcvars new cvar_afktime new cvar_afkimmunity // player origins new last_origins[33] public plugin_init() { register_plugin("AFK to Spectator", "0.1", "MeRcyLeZZ") // AFK time in seconds, before player is transferred cvar_afktime = register_cvar("amx_afktime", "40") // Admin immunity? cvar_afkimmunity = register_cvar("amx_afkimmunity", "1") } public client_putinserver(id) { remove_task(id+afk_task) set_task(get_pcvar_float(cvar_afktime), "check_afk", id+afk_task) } public client_disconnect(id) { remove_task(id+afk_task) } public check_afk(taskid) { new id = taskid - afk_task; if (!is_user_alive(id)) { set_task(get_pcvar_float(cvar_afktime), "check_afk", taskid) return; } new origin[3] // get origin get_user_origin(id, origin) if (origin[0] == last_origins[id][0] && origin[1] == last_origins[id][1] && origin[2] == last_origins[id][2]) { if (get_user_flags(id) & ADMIN_IMMUNITY && get_pcvar_num(cvar_afkimmunity)) { client_print(id, print_chat, "[AMXX AFK] You have immunity. You won't be transferred.") } else { new name[32] get_user_name( id , name , sizeof name - 1) client_print(0, print_chat, "[AMXX AFK] %s has been transferred to the Spectator Team.",name) user_kill(id, 1) cs_set_user_team(id, CS_TEAM_SPECTATOR) } } // save new origin last_origins[id][0] = origin[0] last_origins[id][1] = origin[1] last_origins[id][2] = origin[2] set_task(get_pcvar_float(cvar_afktime), "check_afk", taskid) // keep checking }
A kód elég hülyén van, de sajnos nem tudtam vele mit kezdeni, de itt a forrás ha te tudod hogy kell normálisan megjeleníteni a kódot LINK: http://forums.alliedmods.net/showthread.php?t=69219
_________________ See you next time! :) Ha hasznosnak találtad a hozzászólásomat, köszönd meg a lenyomásával..!! :)
|
|