Descriere plugin cerut:am nevoie de un plugin care sa dea slay celor afk, doar din echipa CT.
Exemplu mesaje in chat:
[AFK-Slay] Stex ai 6 secunde sa te misti sau vei primi slay !
[AFK-Slay] Stex ai 5 secunde sa te misti sau vei primi slay !
[AFK-Slay] Stex ai 4 secunde sa te misti sau vei primi slay !
[AFK-Slay] Stex ai 3 secunde sa te misti sau vei primi slay ! (acum, daca se poate, jucatorul sa primeasca blind)
[AFK-Slay] Stex ai 2 secunde sa te misti sau vei primi slay !
[AFK-Slay] Stex ai 1 secunde sa te misti sau vei primi slay !
Mesajele de mai sus apar doar jucatorului
[AFK-Slay] Stex a primit slay pentru ca este AFK !
Mesajul asta apare in chat, tuturor jucatorilor
Alte informatii: pluginul este pentru un server de furien si de asta doresc sa dea slay doar celor de la CT, pentru a evita campatul
[Rezolvat] Cerere plugin AFK-Slay only CT
Categoria cu cereri de pluginuri si nu numai.
Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com
Forum rules
Accesează link-ul pentru a putea vedea regulile forumului
Daca doriti sa vi se modifice un plugin, va rugam postati aici .
Accesează link-ul pentru a putea vedea regulile forumului
Daca doriti sa vi se modifice un plugin, va rugam postati aici .
-
- Membru, skill +2
- Posts: 610
- Joined: 10 Nov 2013, 20:24
- Detinator Steam: Da
- Location: Palermo, Italy
- Has thanked: 69 times
- Been thanked: 17 times
acesta cred ca e
- sma | Afiseaza codul
#define PLUGIN "AFK Manager" #define AUTHOR "Leon McVeran" #define VERSION "v1.4d" #define PDATE "19th May 2010" #include <amxmodx> #include <amxmisc> #include <cstrike> #include <fakemeta> #define KICK_IMMUNITY ADMIN_BAN #define TASK_AFK_CHECK 142500 #define FREQ_AFK_CHECK 5.0 #define MAX_WARN 3 static const OFFSET_LINUX = 5 new const m_iJoiningState = 125 new bool:g_bSpec[33] new Float:g_fLastActivity[33] new g_iAFKCheck new g_iAFKTime[33] new g_iDropBomb new g_iKickTime new g_iMaxPlayers new g_iMinPlayers new g_iTransferTime new g_iWarn[33] new g_vOrigin[33][3] new CVAR_afk_drop_bomb new CVAR_afk_check new CVAR_afk_transfer_time new CVAR_afk_kick_time new CVAR_afk_kick_players public plugin_init(){ register_plugin(PLUGIN, VERSION, AUTHOR) register_dictionary("afk_manager.txt") register_logevent("event_round_end", 2, "0=World triggered", "1=Round_End") register_logevent("event_round_start", 2, "0=World triggered", "1=Round_Start") // Support der alten Menüs register_clcmd("jointeam", "cmd_jointeam") // new menu register_menucmd(register_menuid("Team_Select", 1), 511, "cmd_jointeam") // old menu register_clcmd("joinclass", "cmd_joinclass") // new menu register_menucmd(register_menuid("Terrorist_Select", 1), 511, "cmd_joinclass") // old menu register_menucmd(register_menuid("CT_Select", 1), 511, "cmd_joinclass") // old menu CVAR_afk_check = register_cvar("afk_check", "1") CVAR_afk_drop_bomb = register_cvar("afk_drop_bomb", "2") CVAR_afk_transfer_time = register_cvar("afk_transfer_time", "9") CVAR_afk_kick_time = register_cvar("afk_kick_time", "24") CVAR_afk_kick_players = register_cvar("afk_kick_players", "12") } public plugin_cfg(){ g_iMaxPlayers = get_maxplayers() } public client_connect(id){ // Spieler als Spectator entmarkieren g_bSpec[id] = false // Positionen zurücksetzen g_vOrigin[id] = {0, 0, 0} // Counter zurücksetzen g_iAFKTime[id] = 0 g_iWarn[id] = 0 } public event_round_start(){ // AFK Check eingeschaltet g_iAFKCheck = get_pcvar_num(CVAR_afk_check) if (g_iAFKCheck){ // Spawn-Positionen aktualisieren new iPlayers[32], pNum get_players(iPlayers, pNum, "a") for (new p = 0; p < pNum; p++){ get_user_origin(iPlayers[p], g_vOrigin[iPlayers[p]]) } // Loop anlegen falls nicht vorhanden if (!task_exists(TASK_AFK_CHECK)) set_task(FREQ_AFK_CHECK, "func_afk_check", TASK_AFK_CHECK, _, _, "b") // Kick und Transferzeiten festlegen if (get_pcvar_num(CVAR_afk_transfer_time) < 6) set_pcvar_num(CVAR_afk_transfer_time, 6) if (get_pcvar_num(CVAR_afk_kick_time) < 6) set_pcvar_num(CVAR_afk_kick_time, 6) g_iDropBomb = get_pcvar_num(CVAR_afk_drop_bomb) g_iTransferTime = get_pcvar_num(CVAR_afk_transfer_time) g_iKickTime = get_pcvar_num(CVAR_afk_kick_time) g_iMinPlayers = get_pcvar_num(CVAR_afk_kick_players) } // AFK Check ausgeschaltet else{ // Loop löschen falls vorhanden if (task_exists(TASK_AFK_CHECK)) remove_task(TASK_AFK_CHECK) } } public cmd_jointeam(id){ // Spieler als Spectator markieren, sonst kann man den Kick umgehen, indem man keiner Klasse joined. g_bSpec[id] = true } public cmd_joinclass(id){ // Spieler als Spectator entmarkieren g_bSpec[id] = false // Positionen zurücksetzen g_vOrigin[id] = {0, 0, 0} // Counter zurücksetzen g_iAFKTime[id] = 0 g_iWarn[id] = 0 } public event_round_end(){ // Check darf nicht durchgeführt werden g_iAFKCheck = 0 } public func_afk_check(taskid){ if (g_iAFKCheck){ new CsTeams:eTeam // Alle Spieler überprüfen for (new id = 1; id <= g_iMaxPlayers; id++){ // Bots nicht überprüfen if (is_user_bot(id)) continue // AFK Funktionen für Specs if (is_user_connected(id) && !is_user_hltv(id)){ eTeam = cs_get_user_team(id) if (eTeam == CS_TEAM_SPECTATOR || eTeam == CS_TEAM_UNASSIGNED || g_bSpec[id]){ // Counter erhöhen g_iAFKTime[id]++ // Spec-Kick if (g_iAFKTime[id] >= g_iKickTime - MAX_WARN){ func_kick_player(id) } } } // AFK Funktionen für lebende Spieler if (is_user_alive(id)){ // Positionen überprüfen if (g_iAFKCheck == 1){ new vOrigin[3] get_user_origin(id, vOrigin) if (g_vOrigin[id][0] != vOrigin[0] || g_vOrigin[id][1] != vOrigin[1]){ g_vOrigin[id][0] = vOrigin[0] g_vOrigin[id][1] = vOrigin[1] g_vOrigin[id][2] = vOrigin[2] g_iAFKTime[id] = 0 g_iWarn[id] = 0 } else{ g_iAFKTime[id]++ } } // Letzte Aktivität ermitteln else{ new Float:fLastActivity fLastActivity = cs_get_user_lastactivity(id) if (fLastActivity != g_fLastActivity[id]){ g_fLastActivity[id] = fLastActivity g_iAFKTime[id] = 0 g_iWarn[id] = 0 } else{ g_iAFKTime[id] = floatround((get_gametime() - fLastActivity) / FREQ_AFK_CHECK) } } // Bombentransfer if (g_iDropBomb && g_iAFKTime[id] >= 3){ if (g_iDropBomb == 1){ if (pev(id, pev_weapons) & (1 << CSW_C4)) engclient_cmd(id, "drop", "weapon_c4") } else{ func_transfer_bomb(id) } } // Spec-Switch if (g_iAFKTime[id] >= g_iTransferTime - MAX_WARN){ func_transfer_player(id) } } } } } public func_transfer_bomb(id){ // Abbrechen wenn der Spieler keine Bombe hat if (!(pev(id, pev_weapons) & (1 << CSW_C4))) return // Ermittle alle lebenden Terroristen new iPlayers[32], pNum get_players(iPlayers, pNum, "ae", "TERRORIST") // Abbrechen falls weniger als 2 Terroristen leben if (pNum < 2) return // Finde den nächsten Terroristen der nicht AFK ist new vCarrier[3], vRecipient[3], iRecipient, iDistance, iMinDistance = 999999 get_user_origin(id, vCarrier) for (new p = 0; p < pNum; p++){ if (g_iAFKTime[iPlayers[p]] < 2){ get_user_origin(iPlayers[p], vRecipient) iDistance = get_distance(vCarrier, vRecipient) if (iDistance < iMinDistance){ iMinDistance = iDistance iRecipient = iPlayers[p] } } } // Abbrechen wenn alle Terroristen AFK sind if (!iRecipient) return // Bombe transferieren engclient_cmd(id, "drop", "weapon_c4") new iC4 = engfunc(EngFunc_FindEntityByString, -1, "classname", "weapon_c4") if (pev_valid(iC4)){ new iBackpack = pev(iC4, pev_owner) if (iBackpack > g_iMaxPlayers){ set_pev(iBackpack, pev_flags, pev(iBackpack, pev_flags) | FL_ONGROUND) dllfunc(DLLFunc_Touch, iBackpack, iRecipient) } } // Nachrichten anzeigen new szRecipient[32], szMsg[128] get_user_name(iRecipient, szRecipient, 31) set_hudmessage(255, 255, 0, -1.0, 0.8, 0, 3.0, 6.0, 0.1, 0.2, -1) for (new p = 0; p < pNum; p++){ if (iPlayers[p] != iRecipient){ format(szMsg, 127, "%L", iPlayers[p], "AFK_TRANSFER_BOMB", szRecipient) show_hudmessage(iPlayers[p], "%s", szMsg) } } format(szMsg, 127, "%L", iRecipient, "AFK_GOT_BOMB") show_hudmessage(iRecipient, szMsg) } public func_transfer_player(id){ // Warnung anzeigen, wenn nicht schon max-mal verwarnt if (g_iWarn[id] < MAX_WARN){ client_print(id, print_chat, "[AMXX] %L", LANG_PLAYER, "AFK_TRANSFER_WARN", floatround(FREQ_AFK_CHECK) * (MAX_WARN - g_iWarn[id])) g_iWarn[id]++ return } // Eigentlich sollte die Bombe schon transferiert worden sein if (pev(id, pev_weapons) & (1 << CSW_C4)){ engclient_cmd(id, "drop", "weapon_c4") } // Spieler tranferieren if (is_user_alive(id)) user_silentkill(id) // Allow players to choose a team more than one time per round (Thanks ConnorMcLeod) // I use this method caused of some issue with deathmatch (Player will be respawned as T or CT) set_pdata_int(id, m_iJoiningState, get_pdata_int(id, m_iJoiningState, OFFSET_LINUX) & ~(1<<8), OFFSET_LINUX) engclient_cmd(id, "jointeam", "6") set_pdata_int(id, m_iJoiningState, get_pdata_int(id, m_iJoiningState, OFFSET_LINUX) & ~(1<<8), OFFSET_LINUX) //cs_set_user_team(id, CS_TEAM_SPECTATOR) //cs_reset_user_model(id) // Positionen zurücksetzen g_vOrigin[id] = {0, 0, 0} // Counter zurücksetzen g_iAFKTime[id] = 0 g_iWarn[id] = 0 // Nachrichten anzeigen new szName[32] get_user_name(id, szName, 31) client_print(0, print_chat, "[AMXX] %L", LANG_PLAYER, "AFK_TRANSFER_PLAYER", szName) } public func_kick_player(id){ // Abbrechen wenn es sich um einen Admin handelt if (get_user_flags(id) & KICK_IMMUNITY) return // Anzahl der aktuellen Spieler ermitteln new iCurrentPlayers = get_playersnum(1) // Sind noch Plätze frei? if (iCurrentPlayers < g_iMinPlayers || !g_iMinPlayers) return // Warnung anzeigen, wenn nicht schon max-mal verwarnt if (g_iWarn[id] < MAX_WARN){ client_print(id, print_chat, "[AMXX] %L", LANG_PLAYER, "AFK_KICK_WARN", floatround(FREQ_AFK_CHECK) * (MAX_WARN - g_iWarn[id])) g_iWarn[id]++ return } // Spieler kicken new szMsg[192] format(szMsg, 191, "%L", id, "AFK_KICK_REASON") server_cmd("kick #%d ^"%s^"", get_user_userid(id), szMsg) // Nachrichten anzeigen new szName[32] get_user_name(id, szName, 31) client_print(0, print_chat, "[AMXX] %L", LANG_PLAYER, "AFK_KICK_PLAYER", szName) }
-
- Membru, skill 0
- Posts: 6
- Joined: 22 Jul 2014, 08:05
- Detinator Steam: Da
- CS Status: Citesc forumul eXtreamCS.com...!
- Detinator server CS: Cs.aGamers.Ro
- Fond eXtream: 0
- Has thanked: 4 times
- Contact:
Nu, nu e ce vreau eu, pe asta l-am mai testat inainte si da slay si celor de la tero :|
Eu vreau sa dea slay doar la CT.
Eu vreau sa dea slay doar la CT.
-
- Fost moderator
- Posts: 9362
- Joined: 06 Jul 2013, 22:08
- Detinator Steam: Da
- Detinator server CS: Nu
- Reputatie: Fost eXtream Mod
Fost Scripter eXtreamCS
Nume anterior: scosmynnnn - Has thanked: 492 times
- Been thanked: 547 times
- | Afiseaza codul
#define PLUGIN "AFK Manager" #define AUTHOR "Leon McVeran" #define VERSION "v1.4d" #define PDATE "19th May 2010" #include <amxmodx> #include <amxmisc> #include <cstrike> #include <fun> #include <fakemeta> #define KICK_IMMUNITY ADMIN_BAN #define TASK_AFK_CHECK 142500 #define FREQ_AFK_CHECK 5.0 #define MAX_WARN 3 static const OFFSET_LINUX = 5 new const m_iJoiningState = 125 new bool:g_bSpec[33] new Float:g_fLastActivity[33] new g_iAFKCheck new g_iAFKTime[33] new g_iDropBomb new g_iKickTime new g_iMaxPlayers new g_iMinPlayers new g_iTransferTime new g_iWarn[33] new g_vOrigin[33][3] new CVAR_afk_drop_bomb new CVAR_afk_check new CVAR_afk_transfer_time new CVAR_afk_kick_time new CVAR_afk_kick_players public plugin_init(){ register_plugin(PLUGIN, VERSION, AUTHOR) register_dictionary("afk_manager.txt") register_logevent("event_round_end", 2, "0=World triggered", "1=Round_End") register_logevent("event_round_start", 2, "0=World triggered", "1=Round_Start") // Support der alten Menüs register_clcmd("jointeam", "cmd_jointeam") // new menu register_menucmd(register_menuid("Team_Select", 1), 511, "cmd_jointeam") // old menu register_clcmd("joinclass", "cmd_joinclass") // new menu register_menucmd(register_menuid("Terrorist_Select", 1), 511, "cmd_joinclass") // old menu register_menucmd(register_menuid("CT_Select", 1), 511, "cmd_joinclass") // old menu CVAR_afk_check = register_cvar("afk_check", "1") CVAR_afk_drop_bomb = register_cvar("afk_drop_bomb", "2") CVAR_afk_transfer_time = register_cvar("afk_transfer_time", "9") CVAR_afk_kick_time = register_cvar("afk_kick_time", "24") CVAR_afk_kick_players = register_cvar("afk_kick_players", "12") } public plugin_cfg(){ g_iMaxPlayers = get_maxplayers() } public client_connect(id){ // Spieler als Spectator entmarkieren g_bSpec[id] = false // Positionen zurücksetzen g_vOrigin[id] = {0, 0, 0} // Counter zurücksetzen g_iAFKTime[id] = 0 g_iWarn[id] = 0 } public event_round_start(){ // AFK Check eingeschaltet g_iAFKCheck = get_pcvar_num(CVAR_afk_check) if (g_iAFKCheck){ // Spawn-Positionen aktualisieren new iPlayers[32], pNum get_players(iPlayers, pNum, "a") for (new p = 0; p < pNum; p++){ get_user_origin(iPlayers[p], g_vOrigin[iPlayers[p]]) } // Loop anlegen falls nicht vorhanden if (!task_exists(TASK_AFK_CHECK)) set_task(FREQ_AFK_CHECK, "func_afk_check", TASK_AFK_CHECK, _, _, "b") // Kick und Transferzeiten festlegen if (get_pcvar_num(CVAR_afk_transfer_time) < 6) set_pcvar_num(CVAR_afk_transfer_time, 6) if (get_pcvar_num(CVAR_afk_kick_time) < 6) set_pcvar_num(CVAR_afk_kick_time, 6) g_iDropBomb = get_pcvar_num(CVAR_afk_drop_bomb) g_iTransferTime = get_pcvar_num(CVAR_afk_transfer_time) g_iKickTime = get_pcvar_num(CVAR_afk_kick_time) g_iMinPlayers = get_pcvar_num(CVAR_afk_kick_players) } // AFK Check ausgeschaltet else{ // Loop löschen falls vorhanden if (task_exists(TASK_AFK_CHECK)) remove_task(TASK_AFK_CHECK) } } public cmd_jointeam(id){ // Spieler als Spectator markieren, sonst kann man den Kick umgehen, indem man keiner Klasse joined. g_bSpec[id] = true } public cmd_joinclass(id){ // Spieler als Spectator entmarkieren g_bSpec[id] = false // Positionen zurücksetzen g_vOrigin[id] = {0, 0, 0} // Counter zurücksetzen g_iAFKTime[id] = 0 g_iWarn[id] = 0 } public event_round_end(){ // Check darf nicht durchgeführt werden g_iAFKCheck = 0 } public func_afk_check(taskid) { if (g_iAFKCheck){ new CsTeams:eTeam // Alle Spieler überprüfen for (new id = 1; id <= g_iMaxPlayers; id++){ // Bots nicht überprüfen if (is_user_bot(id)) continue // AFK Funktionen für Specs if (is_user_connected(id) && !is_user_hltv(id) && get_user_team(id) == 2){ eTeam = cs_get_user_team(id) if (eTeam == CS_TEAM_SPECTATOR || eTeam == CS_TEAM_UNASSIGNED || g_bSpec[id]){ // Counter erhöhen g_iAFKTime[id]++ // Spec-Kick if (g_iAFKTime[id] >= g_iKickTime - MAX_WARN){ func_kick_player(id) } } } // AFK Funktionen für lebende Spieler if (is_user_alive(id)){ // Positionen überprüfen if (g_iAFKCheck == 1){ new vOrigin[3] get_user_origin(id, vOrigin) if (g_vOrigin[id][0] != vOrigin[0] || g_vOrigin[id][1] != vOrigin[1]){ g_vOrigin[id][0] = vOrigin[0] g_vOrigin[id][1] = vOrigin[1] g_vOrigin[id][2] = vOrigin[2] g_iAFKTime[id] = 0 g_iWarn[id] = 0 } else{ g_iAFKTime[id]++ } } // Letzte Aktivität ermitteln else{ new Float:fLastActivity fLastActivity = cs_get_user_lastactivity(id) if (fLastActivity != g_fLastActivity[id]){ g_fLastActivity[id] = fLastActivity g_iAFKTime[id] = 0 g_iWarn[id] = 0 } else{ g_iAFKTime[id] = floatround((get_gametime() - fLastActivity) / FREQ_AFK_CHECK) } } // Bombentransfer if (g_iDropBomb && g_iAFKTime[id] >= 3){ if (g_iDropBomb == 1){ if (pev(id, pev_weapons) & (1 << CSW_C4)) engclient_cmd(id, "drop", "weapon_c4") } else{ func_transfer_bomb(id) } } // Spec-Switch if (g_iAFKTime[id] >= g_iTransferTime - MAX_WARN){ func_transfer_player(id) } } } } } public func_transfer_bomb(id){ // Abbrechen wenn der Spieler keine Bombe hat if (!(pev(id, pev_weapons) & (1 << CSW_C4))) return // Ermittle alle lebenden Terroristen new iPlayers[32], pNum get_players(iPlayers, pNum, "ae", "TERRORIST") // Abbrechen falls weniger als 2 Terroristen leben if (pNum < 2) return // Finde den nächsten Terroristen der nicht AFK ist new vCarrier[3], vRecipient[3], iRecipient, iDistance, iMinDistance = 999999 get_user_origin(id, vCarrier) for (new p = 0; p < pNum; p++){ if (g_iAFKTime[iPlayers[p]] < 2){ get_user_origin(iPlayers[p], vRecipient) iDistance = get_distance(vCarrier, vRecipient) if (iDistance < iMinDistance){ iMinDistance = iDistance iRecipient = iPlayers[p] } } } // Abbrechen wenn alle Terroristen AFK sind if (!iRecipient) return // Bombe transferieren engclient_cmd(id, "drop", "weapon_c4") new iC4 = engfunc(EngFunc_FindEntityByString, -1, "classname", "weapon_c4") if (pev_valid(iC4)){ new iBackpack = pev(iC4, pev_owner) if (iBackpack > g_iMaxPlayers){ set_pev(iBackpack, pev_flags, pev(iBackpack, pev_flags) | FL_ONGROUND) dllfunc(DLLFunc_Touch, iBackpack, iRecipient) } } // Nachrichten anzeigen new szRecipient[32], szMsg[128] get_user_name(iRecipient, szRecipient, 31) set_hudmessage(255, 255, 0, -1.0, 0.8, 0, 3.0, 6.0, 0.1, 0.2, -1) for (new p = 0; p < pNum; p++){ if (iPlayers[p] != iRecipient){ format(szMsg, 127, "%L", iPlayers[p], "AFK_TRANSFER_BOMB", szRecipient) show_hudmessage(iPlayers[p], "%s", szMsg) } } format(szMsg, 127, "%L", iRecipient, "AFK_GOT_BOMB") show_hudmessage(iRecipient, szMsg) } public func_transfer_player(id){ // Warnung anzeigen, wenn nicht schon max-mal verwarnt if (g_iWarn[id] < MAX_WARN){ client_print(id, print_chat, "[AMXX] %L", LANG_PLAYER, "AFK_TRANSFER_WARN", floatround(FREQ_AFK_CHECK) * (MAX_WARN - g_iWarn[id])) g_iWarn[id]++ return } // Eigentlich sollte die Bombe schon transferiert worden sein if (pev(id, pev_weapons) & (1 << CSW_C4)){ engclient_cmd(id, "drop", "weapon_c4") } // Spieler tranferieren if (is_user_alive(id)) user_silentkill(id) // Allow players to choose a team more than one time per round (Thanks ConnorMcLeod) // I use this method caused of some issue with deathmatch (Player will be respawned as T or CT) set_pdata_int(id, m_iJoiningState, get_pdata_int(id, m_iJoiningState, OFFSET_LINUX) & ~(1<<8), OFFSET_LINUX) engclient_cmd(id, "jointeam", "6") set_pdata_int(id, m_iJoiningState, get_pdata_int(id, m_iJoiningState, OFFSET_LINUX) & ~(1<<8), OFFSET_LINUX) //cs_set_user_team(id, CS_TEAM_SPECTATOR) //cs_reset_user_model(id) // Positionen zurücksetzen g_vOrigin[id] = {0, 0, 0} // Counter zurücksetzen g_iAFKTime[id] = 0 g_iWarn[id] = 0 // Nachrichten anzeigen new szName[32] get_user_name(id, szName, 31) client_print(0, print_chat, "[AMXX] %L", LANG_PLAYER, "AFK_TRANSFER_PLAYER", szName) } public func_kick_player(id){ // Abbrechen wenn es sich um einen Admin handelt if (get_user_flags(id) & KICK_IMMUNITY) return // Anzahl der aktuellen Spieler ermitteln new iCurrentPlayers = get_playersnum(1) // Sind noch Plätze frei? if (iCurrentPlayers < g_iMinPlayers || !g_iMinPlayers) return // Warnung anzeigen, wenn nicht schon max-mal verwarnt if (g_iWarn[id] < MAX_WARN){ client_print(id, print_chat, "[AMXX] %L", LANG_PLAYER, "AFK_KICK_WARN", floatround(FREQ_AFK_CHECK) * (MAX_WARN - g_iWarn[id])) g_iWarn[id]++ return } // Spieler kicken new szMsg[192] format(szMsg, 191, "%L", id, "AFK_KICK_REASON") server_cmd("kick #%d ^"%s^"", get_user_userid(id), szMsg) // Nachrichten anzeigen new szName[32] get_user_name(id, szName, 31) client_print(0, print_chat, "[AMXX] %L", LANG_PLAYER, "AFK_KICK_PLAYER", szName) }
-
- Membru, skill 0
- Posts: 6
- Joined: 22 Jul 2014, 08:05
- Detinator Steam: Da
- CS Status: Citesc forumul eXtreamCS.com...!
- Detinator server CS: Cs.aGamers.Ro
- Fond eXtream: 0
- Has thanked: 4 times
- Contact:
Nu vreau sa-l puna si spectator, vreau doar sa dea slay :|scosmynnnn wrote:vezi asa
- | Afiseaza codul
#define PLUGIN "AFK Manager" #define AUTHOR "Leon McVeran" #define VERSION "v1.4d" #define PDATE "19th May 2010" #include <amxmodx> #include <amxmisc> #include <cstrike> #include <fun> #include <fakemeta> #define KICK_IMMUNITY ADMIN_BAN #define TASK_AFK_CHECK 142500 #define FREQ_AFK_CHECK 5.0 #define MAX_WARN 3 static const OFFSET_LINUX = 5 new const m_iJoiningState = 125 new bool:g_bSpec[33] new Float:g_fLastActivity[33] new g_iAFKCheck new g_iAFKTime[33] new g_iDropBomb new g_iKickTime new g_iMaxPlayers new g_iMinPlayers new g_iTransferTime new g_iWarn[33] new g_vOrigin[33][3] new CVAR_afk_drop_bomb new CVAR_afk_check new CVAR_afk_transfer_time new CVAR_afk_kick_time new CVAR_afk_kick_players public plugin_init(){ register_plugin(PLUGIN, VERSION, AUTHOR) register_dictionary("afk_manager.txt") register_logevent("event_round_end", 2, "0=World triggered", "1=Round_End") register_logevent("event_round_start", 2, "0=World triggered", "1=Round_Start") // Support der alten Menüs register_clcmd("jointeam", "cmd_jointeam") // new menu register_menucmd(register_menuid("Team_Select", 1), 511, "cmd_jointeam") // old menu register_clcmd("joinclass", "cmd_joinclass") // new menu register_menucmd(register_menuid("Terrorist_Select", 1), 511, "cmd_joinclass") // old menu register_menucmd(register_menuid("CT_Select", 1), 511, "cmd_joinclass") // old menu CVAR_afk_check = register_cvar("afk_check", "1") CVAR_afk_drop_bomb = register_cvar("afk_drop_bomb", "2") CVAR_afk_transfer_time = register_cvar("afk_transfer_time", "9") CVAR_afk_kick_time = register_cvar("afk_kick_time", "24") CVAR_afk_kick_players = register_cvar("afk_kick_players", "12") } public plugin_cfg(){ g_iMaxPlayers = get_maxplayers() } public client_connect(id){ // Spieler als Spectator entmarkieren g_bSpec[id] = false // Positionen zurücksetzen g_vOrigin[id] = {0, 0, 0} // Counter zurücksetzen g_iAFKTime[id] = 0 g_iWarn[id] = 0 } public event_round_start(){ // AFK Check eingeschaltet g_iAFKCheck = get_pcvar_num(CVAR_afk_check) if (g_iAFKCheck){ // Spawn-Positionen aktualisieren new iPlayers[32], pNum get_players(iPlayers, pNum, "a") for (new p = 0; p < pNum; p++){ get_user_origin(iPlayers[p], g_vOrigin[iPlayers[p]]) } // Loop anlegen falls nicht vorhanden if (!task_exists(TASK_AFK_CHECK)) set_task(FREQ_AFK_CHECK, "func_afk_check", TASK_AFK_CHECK, _, _, "b") // Kick und Transferzeiten festlegen if (get_pcvar_num(CVAR_afk_transfer_time) < 6) set_pcvar_num(CVAR_afk_transfer_time, 6) if (get_pcvar_num(CVAR_afk_kick_time) < 6) set_pcvar_num(CVAR_afk_kick_time, 6) g_iDropBomb = get_pcvar_num(CVAR_afk_drop_bomb) g_iTransferTime = get_pcvar_num(CVAR_afk_transfer_time) g_iKickTime = get_pcvar_num(CVAR_afk_kick_time) g_iMinPlayers = get_pcvar_num(CVAR_afk_kick_players) } // AFK Check ausgeschaltet else{ // Loop löschen falls vorhanden if (task_exists(TASK_AFK_CHECK)) remove_task(TASK_AFK_CHECK) } } public cmd_jointeam(id){ // Spieler als Spectator markieren, sonst kann man den Kick umgehen, indem man keiner Klasse joined. g_bSpec[id] = true } public cmd_joinclass(id){ // Spieler als Spectator entmarkieren g_bSpec[id] = false // Positionen zurücksetzen g_vOrigin[id] = {0, 0, 0} // Counter zurücksetzen g_iAFKTime[id] = 0 g_iWarn[id] = 0 } public event_round_end(){ // Check darf nicht durchgeführt werden g_iAFKCheck = 0 } public func_afk_check(taskid) { if (g_iAFKCheck){ new CsTeams:eTeam // Alle Spieler überprüfen for (new id = 1; id <= g_iMaxPlayers; id++){ // Bots nicht überprüfen if (is_user_bot(id)) continue // AFK Funktionen für Specs if (is_user_connected(id) && !is_user_hltv(id) && get_user_team(id) == 2){ eTeam = cs_get_user_team(id) if (eTeam == CS_TEAM_SPECTATOR || eTeam == CS_TEAM_UNASSIGNED || g_bSpec[id]){ // Counter erhöhen g_iAFKTime[id]++ // Spec-Kick if (g_iAFKTime[id] >= g_iKickTime - MAX_WARN){ func_kick_player(id) } } } // AFK Funktionen für lebende Spieler if (is_user_alive(id)){ // Positionen überprüfen if (g_iAFKCheck == 1){ new vOrigin[3] get_user_origin(id, vOrigin) if (g_vOrigin[id][0] != vOrigin[0] || g_vOrigin[id][1] != vOrigin[1]){ g_vOrigin[id][0] = vOrigin[0] g_vOrigin[id][1] = vOrigin[1] g_vOrigin[id][2] = vOrigin[2] g_iAFKTime[id] = 0 g_iWarn[id] = 0 } else{ g_iAFKTime[id]++ } } // Letzte Aktivität ermitteln else{ new Float:fLastActivity fLastActivity = cs_get_user_lastactivity(id) if (fLastActivity != g_fLastActivity[id]){ g_fLastActivity[id] = fLastActivity g_iAFKTime[id] = 0 g_iWarn[id] = 0 } else{ g_iAFKTime[id] = floatround((get_gametime() - fLastActivity) / FREQ_AFK_CHECK) } } // Bombentransfer if (g_iDropBomb && g_iAFKTime[id] >= 3){ if (g_iDropBomb == 1){ if (pev(id, pev_weapons) & (1 << CSW_C4)) engclient_cmd(id, "drop", "weapon_c4") } else{ func_transfer_bomb(id) } } // Spec-Switch if (g_iAFKTime[id] >= g_iTransferTime - MAX_WARN){ func_transfer_player(id) } } } } } public func_transfer_bomb(id){ // Abbrechen wenn der Spieler keine Bombe hat if (!(pev(id, pev_weapons) & (1 << CSW_C4))) return // Ermittle alle lebenden Terroristen new iPlayers[32], pNum get_players(iPlayers, pNum, "ae", "TERRORIST") // Abbrechen falls weniger als 2 Terroristen leben if (pNum < 2) return // Finde den nächsten Terroristen der nicht AFK ist new vCarrier[3], vRecipient[3], iRecipient, iDistance, iMinDistance = 999999 get_user_origin(id, vCarrier) for (new p = 0; p < pNum; p++){ if (g_iAFKTime[iPlayers[p]] < 2){ get_user_origin(iPlayers[p], vRecipient) iDistance = get_distance(vCarrier, vRecipient) if (iDistance < iMinDistance){ iMinDistance = iDistance iRecipient = iPlayers[p] } } } // Abbrechen wenn alle Terroristen AFK sind if (!iRecipient) return // Bombe transferieren engclient_cmd(id, "drop", "weapon_c4") new iC4 = engfunc(EngFunc_FindEntityByString, -1, "classname", "weapon_c4") if (pev_valid(iC4)){ new iBackpack = pev(iC4, pev_owner) if (iBackpack > g_iMaxPlayers){ set_pev(iBackpack, pev_flags, pev(iBackpack, pev_flags) | FL_ONGROUND) dllfunc(DLLFunc_Touch, iBackpack, iRecipient) } } // Nachrichten anzeigen new szRecipient[32], szMsg[128] get_user_name(iRecipient, szRecipient, 31) set_hudmessage(255, 255, 0, -1.0, 0.8, 0, 3.0, 6.0, 0.1, 0.2, -1) for (new p = 0; p < pNum; p++){ if (iPlayers[p] != iRecipient){ format(szMsg, 127, "%L", iPlayers[p], "AFK_TRANSFER_BOMB", szRecipient) show_hudmessage(iPlayers[p], "%s", szMsg) } } format(szMsg, 127, "%L", iRecipient, "AFK_GOT_BOMB") show_hudmessage(iRecipient, szMsg) } public func_transfer_player(id){ // Warnung anzeigen, wenn nicht schon max-mal verwarnt if (g_iWarn[id] < MAX_WARN){ client_print(id, print_chat, "[AMXX] %L", LANG_PLAYER, "AFK_TRANSFER_WARN", floatround(FREQ_AFK_CHECK) * (MAX_WARN - g_iWarn[id])) g_iWarn[id]++ return } // Eigentlich sollte die Bombe schon transferiert worden sein if (pev(id, pev_weapons) & (1 << CSW_C4)){ engclient_cmd(id, "drop", "weapon_c4") } // Spieler tranferieren if (is_user_alive(id)) user_silentkill(id) // Allow players to choose a team more than one time per round (Thanks ConnorMcLeod) // I use this method caused of some issue with deathmatch (Player will be respawned as T or CT) set_pdata_int(id, m_iJoiningState, get_pdata_int(id, m_iJoiningState, OFFSET_LINUX) & ~(1<<8), OFFSET_LINUX) engclient_cmd(id, "jointeam", "6") set_pdata_int(id, m_iJoiningState, get_pdata_int(id, m_iJoiningState, OFFSET_LINUX) & ~(1<<8), OFFSET_LINUX) //cs_set_user_team(id, CS_TEAM_SPECTATOR) //cs_reset_user_model(id) // Positionen zurücksetzen g_vOrigin[id] = {0, 0, 0} // Counter zurücksetzen g_iAFKTime[id] = 0 g_iWarn[id] = 0 // Nachrichten anzeigen new szName[32] get_user_name(id, szName, 31) client_print(0, print_chat, "[AMXX] %L", LANG_PLAYER, "AFK_TRANSFER_PLAYER", szName) } public func_kick_player(id){ // Abbrechen wenn es sich um einen Admin handelt if (get_user_flags(id) & KICK_IMMUNITY) return // Anzahl der aktuellen Spieler ermitteln new iCurrentPlayers = get_playersnum(1) // Sind noch Plätze frei? if (iCurrentPlayers < g_iMinPlayers || !g_iMinPlayers) return // Warnung anzeigen, wenn nicht schon max-mal verwarnt if (g_iWarn[id] < MAX_WARN){ client_print(id, print_chat, "[AMXX] %L", LANG_PLAYER, "AFK_KICK_WARN", floatround(FREQ_AFK_CHECK) * (MAX_WARN - g_iWarn[id])) g_iWarn[id]++ return } // Spieler kicken new szMsg[192] format(szMsg, 191, "%L", id, "AFK_KICK_REASON") server_cmd("kick #%d ^"%s^"", get_user_userid(id), szMsg) // Nachrichten anzeigen new szName[32] get_user_name(id, szName, 31) client_print(0, print_chat, "[AMXX] %L", LANG_PLAYER, "AFK_KICK_PLAYER", szName) }
Si imi poti da si fisierul "afk_manager.txt"
-
- Membru, skill +2
- Posts: 610
- Joined: 10 Nov 2013, 20:24
- Detinator Steam: Da
- Location: Palermo, Italy
- Has thanked: 69 times
- Been thanked: 17 times
poftim
- afk_manager.txt | Afiseaza codul
[en] AFK_GOT_BOMB = You got the bomb! AFK_TRANSFER_BOMB = Bomb transferred to ^"%s^" AFK_TRANSFER_WARN = You have %i seconds to start playing or you will be transferred to the spectators. AFK_TRANSFER_PLAYER = Player ^"%s^" was transferred to the spectators for being AFK. AFK_KICK_WARN = You have %i seconds to join a team or you will be kicked. AFK_KICK_PLAYER = Player ^"%s^" was kicked for being AFK. AFK_KICK_REASON = You were kicked for being AFK. AFK_ACCESS_GRANTED = Access granted. You will not be kicked from the server. [de] AFK_GOT_BOMB = Du hast die Bombe! AFK_TRANSFER_BOMB = Bombe wurde transferiert zu ^"%s^" AFK_TRANSFER_WARN = Du hast noch %i Sekunden Zeit um zu spielen oder du wirst zu den Spectator verschoben. AFK_TRANSFER_PLAYER = Spieler ^"%s^" wurde zu den Spectator verschoben, weil er AFK war. AFK_KICK_WARN = Du hast noch %i Sekunden Zeit um einen Team zu joinen oder du wirst gekickt. AFK_KICK_PLAYER = Spieler ^"%s^" wurde gekickt weil er AFK war. AFK_KICK_REASON = Du wurdest gekickt weil du AFK warst. AFK_ACCESS_GRANTED = Zugriff gewährt. Du wirst nicht vom Server gekickt. [es] AFK_GOT_BOMB = Tienes la bomba! AFK_TRANSFER_BOMB = La bomba ha sido transferida a ^"%s^" AFK_TRANSFER_WARN = Tienes %i segundos para comenzar a jugar o seras transferido a los espectadores. AFK_TRANSFER_PLAYER = El jugador ^"%s^" fue transferido a los espectadores por estar AFK. AFK_KICK_WARN = Tienes %i segundos para entrar en un equipo o seras expulsado. AFK_KICK_PLAYER = El jugador ^"%s^" fue expulsado por estar AFK. AFK_KICK_REASON = Fuiste expulsado por estar AFK. AFK_ACCESS_GRANTED = Access granted. You will not be kicked from the server. [tr] AFK_GOT_BOMB = Bomba sende! AFK_TRANSFER_BOMB = Bomba ^"%s^"'e gitti! AFK_TRANSFER_WARN = %i saniyen var oynamak icin, yoksa sehircilere dahil edileceksin! AFK_TRANSFER_PLAYER = ^"%s^" sehircilere dahil edildi! AFK_KICK_WARN = %i icinde bir Team sec yoksa serverden atilacaksin! AFK_KICK_PLAYER = ^"%s^" AFK diye serverden atildi! AFK_KICK_REASON = AFK'sin diye atildin! AFK_ACCESS_GRANTED = Access granted. You will not be kicked from the server. [pl] AFK_GOT_BOMB = Dostales bombe! AFK_TRANSFER_BOMB = Bomba przeniesiona do ^"%s^" AFK_TRANSFER_WARN = Masz %i sekund zeby zaczac grac albo zostaniesz przeniesiony do obserwatorow. AFK_TRANSFER_PLAYER = Gracz ^"%s^" was transfered to the spectators for being AFK. AFK_KICK_WARN = Masz %i sekund zeby dojsc do druzyny albo zostaniesz wyrzucony. AFK_KICK_PLAYER = Gracz ^"%s^" zostal wyrzucony za nieaktywnosc. AFK_KICK_REASON = Zostales wyrzucony za nieaktywnosc. AFK_ACCESS_GRANTED = Access granted. You will not be kicked from the server. [ro] AFK_GOT_BOMB = Ai luat bomba! AFK_TRANSFER_BOMB = Bomba a fost transferata lui ^"%s^" AFK_TRANSFER_WARN = Ai %i secunde sa te misti sau vei fi transferat la spectatori. AFK_TRANSFER_PLAYER = Jucatorul ^"%s^" a fost transferat la spectatori pentru ca a fost AFK. AFK_KICK_WARN = Ai %i secunde sa intri intr-o echipa sau vei primi kick. AFK_TRANSFER_PLAYER = Jucatorul ^"%s^" a primit slay si a fost mutat la spectatori pentru ca a fost AFK. AFK_KICK_REASON = Ai primit kick pentru ca ai fost AFK. AFK_ACCESS_GRANTED = Access granted. You will not be kicked from the server. [sv] AFK_GOT_BOMB = Du har bomben! AFK_TRANSFER_BOMB = Bomben 'o'verf'o'rd till ^"%s^" AFK_TRANSFER_WARN = Du har %i sekunder att r'o'ra pa dig annars blir du 'o'verskickad till spectator. AFK_TRANSFER_PLAYER = ^"%s^" blev 'o'verf'o'rd till spectator f'o'r att han/hon var AFK. AFK_KICK_WARN = Du har %i sekunder pa att r'o'ra dig annars blir du kickad. AFK_KICK_PLAYER = ^"%s^" blev kickad f'o'r att ha varit AFK. AFK_KICK_REASON = Du blev kickad f'o'r att du var AFK. AFK_ACCESS_GRANTED = Access granted. You will not be kicked from the server. [bg] AFK_GOT_BOMB = Vie vzehte bombata! AFK_TRANSFER_BOMB = Bombata e transferirana kum ^"%s^" AFK_TRANSFER_WARN = Imate %i sekundi da zapochnete da igraete ili shte budete transferiran kum nablyudatelite. AFK_TRANSFER_PLAYER = Igrachut ^"%s^" beshe transferiran kum nablyudatelite, zashtoto e AFK. AFK_KICK_WARN = Vie imate %i sekundi da izberete otbor, inache shte budete izritan. AFK_KICK_PLAYER = Igrachut ^"%s^" beshe izritan, zashtoto e AFK. AFK_KICK_REASON = Vie byahte izritan, zashtoto ste AFK. AFK_ACCESS_GRANTED = Access granted. You will not be kicked from the server. [ru] AFK_GOT_BOMB = У тебя бомба! AFK_TRANSFER_BOMB = Бомбой теперь владеет ^"%s^" AFK_TRANSFER_WARN = У тебя %i секнд до того, как ты будешь перемещен за наблюдателей. AFK_TRANSFER_PLAYER = Игрок ^"%s^" был перемещен за наблюдателей. Причина: AFK. AFK_KICK_WARN = У тебя %i секунд, чтобы выбрать команду. Иначе ты будешь кикнут. AFK_KICK_PLAYER = Игрок ^"%s^" кикнут. Причина: AFK. AFK_KICK_REASON = Ты был кикнут. Причина: AFK. AFK_ACCESS_GRANTED = Access granted. You will not be kicked from the server. [lt] AFK_GOT_BOMB = Jus turite bomba! AFK_TRANSFER_BOMB = Bomba perduota zaidejui ^"%s^" AFK_TRANSFER_WARN = Jeigu per %i sekundziu nepradesite zaisti, busite perkeltas i stebetojus. AFK_TRANSFER_PLAYER = Zaidejas ^"%s^" perkeltas i stebetojus nes buvo AFK. AFK_KICK_WARN = Jeigu per %i sekundziu nepasirinksite komandos, busite ismestas. AFK_KICK_PLAYER = Zaidejas ^"%s^" ismestas nes buvo AFK. AFK_KICK_REASON = Jus esate ismestas nes buvote AFK per ilgai. AFK_ACCESS_GRANTED = Access granted. You will not be kicked from the server. [nl] AFK_GOT_BOMB = Jij hebt de bom! AFK_TRANSFER_BOMB = Bom is overgeplaatst naar ^"%s^" AFK_TRANSFER_WARN = Je hebt %i seconden om te gaan spelen of anders word je overgezet naar de spectators. AFK_TRANSFER_PLAYER = Speler ^"%s^" is over gezet naar de spectators omdat hij AFK is. AFK_KICK_WARN = Je hebt precies %i seconden om een team te kiezen voordat je word gekickt. AFK_KICK_PLAYER = Speler ^"%s^" is gekickt omdat die AFK is. AFK_KICK_REASON = Je bent gekickt omdat je AFK was. AFK_ACCESS_GRANTED = Access granted. You will not be kicked from the server. [sk] AFK_GOT_BOMB = Dostal si bombu! AFK_TRANSFER_BOMB = Bomba bola dana hracovi ^"%s^" AFK_TRANSFER_WARN = Mas %i sekund aby si zacal hrat, inak budes presmerovany do spec. AFK_TRANSFER_PLAYER = Hrac ^"%s^" bol presmerovany do spectate, pretoze je AFK. AFK_KICK_WARN = Mas %i sekund na to, aby si sa pripojil, inak dostanes KICK. AFK_KICK_PLAYER = Hrac ^"%s^" dostal kick, lebo bol AFK. AFK_KICK_REASON = Dostal si kick, lebo si bol AFK. AFK_ACCESS_GRANTED = Access granted. You will not be kicked from the server.
-
- Fost moderator
- Posts: 9362
- Joined: 06 Jul 2013, 22:08
- Detinator Steam: Da
- Detinator server CS: Nu
- Reputatie: Fost eXtream Mod
Fost Scripter eXtreamCS
Nume anterior: scosmynnnn - Has thanked: 492 times
- Been thanked: 547 times
- | Afiseaza codul
#define PLUGIN "AFK Manager" #define AUTHOR "Leon McVeran" #define VERSION "v1.4d" #define PDATE "19th May 2010" #include <amxmodx> #include <amxmisc> #include <cstrike> #include <fun> #include <fakemeta> #define KICK_IMMUNITY ADMIN_BAN #define TASK_AFK_CHECK 142500 #define FREQ_AFK_CHECK 5.0 #define MAX_WARN 3 static const OFFSET_LINUX = 5 new const m_iJoiningState = 125 new bool:g_bSpec[33] new Float:g_fLastActivity[33] new g_iAFKCheck new g_iAFKTime[33] new g_iDropBomb new g_iKickTime new g_iMaxPlayers new g_iMinPlayers new g_iTransferTime new g_iWarn[33] new g_vOrigin[33][3] new CVAR_afk_drop_bomb new CVAR_afk_check new CVAR_afk_transfer_time new CVAR_afk_kick_time new CVAR_afk_kick_players public plugin_init(){ register_plugin(PLUGIN, VERSION, AUTHOR) register_dictionary("afk_manager.txt") register_logevent("event_round_end", 2, "0=World triggered", "1=Round_End") register_logevent("event_round_start", 2, "0=World triggered", "1=Round_Start") // Support der alten Menüs register_clcmd("jointeam", "cmd_jointeam") // new menu register_menucmd(register_menuid("Team_Select", 1), 511, "cmd_jointeam") // old menu register_clcmd("joinclass", "cmd_joinclass") // new menu register_menucmd(register_menuid("Terrorist_Select", 1), 511, "cmd_joinclass") // old menu register_menucmd(register_menuid("CT_Select", 1), 511, "cmd_joinclass") // old menu CVAR_afk_check = register_cvar("afk_check", "1") CVAR_afk_drop_bomb = register_cvar("afk_drop_bomb", "2") CVAR_afk_transfer_time = register_cvar("afk_transfer_time", "9") CVAR_afk_kick_time = register_cvar("afk_kick_time", "24") CVAR_afk_kick_players = register_cvar("afk_kick_players", "12") } public plugin_cfg(){ g_iMaxPlayers = get_maxplayers() } public client_connect(id){ // Spieler als Spectator entmarkieren g_bSpec[id] = false // Positionen zurücksetzen g_vOrigin[id] = {0, 0, 0} // Counter zurücksetzen g_iAFKTime[id] = 0 g_iWarn[id] = 0 } public event_round_start(){ // AFK Check eingeschaltet g_iAFKCheck = get_pcvar_num(CVAR_afk_check) if (g_iAFKCheck){ // Spawn-Positionen aktualisieren new iPlayers[32], pNum get_players(iPlayers, pNum, "a") for (new p = 0; p < pNum; p++){ get_user_origin(iPlayers[p], g_vOrigin[iPlayers[p]]) } // Loop anlegen falls nicht vorhanden if (!task_exists(TASK_AFK_CHECK)) set_task(FREQ_AFK_CHECK, "func_afk_check", TASK_AFK_CHECK, _, _, "b") // Kick und Transferzeiten festlegen if (get_pcvar_num(CVAR_afk_transfer_time) < 6) set_pcvar_num(CVAR_afk_transfer_time, 6) if (get_pcvar_num(CVAR_afk_kick_time) < 6) set_pcvar_num(CVAR_afk_kick_time, 6) g_iDropBomb = get_pcvar_num(CVAR_afk_drop_bomb) g_iTransferTime = get_pcvar_num(CVAR_afk_transfer_time) g_iKickTime = get_pcvar_num(CVAR_afk_kick_time) g_iMinPlayers = get_pcvar_num(CVAR_afk_kick_players) } // AFK Check ausgeschaltet else{ // Loop löschen falls vorhanden if (task_exists(TASK_AFK_CHECK)) remove_task(TASK_AFK_CHECK) } } public cmd_jointeam(id){ // Spieler als Spectator markieren, sonst kann man den Kick umgehen, indem man keiner Klasse joined. g_bSpec[id] = true } public cmd_joinclass(id){ // Spieler als Spectator entmarkieren g_bSpec[id] = false // Positionen zurücksetzen g_vOrigin[id] = {0, 0, 0} // Counter zurücksetzen g_iAFKTime[id] = 0 g_iWarn[id] = 0 } public event_round_end(){ // Check darf nicht durchgeführt werden g_iAFKCheck = 0 } public func_afk_check(taskid) { if (g_iAFKCheck){ new CsTeams:eTeam // Alle Spieler überprüfen for (new id = 1; id <= g_iMaxPlayers; id++){ // Bots nicht überprüfen if (is_user_bot(id)) continue // AFK Funktionen für Specs if (is_user_connected(id) && !is_user_hltv(id) && get_user_team(id) == 2){ eTeam = cs_get_user_team(id) if (eTeam == CS_TEAM_CT || eTeam == CS_TEAM_T && is_user_alive(id)){ // Counter erhöhen g_iAFKTime[id]++ // Spec-Kick if (g_iAFKTime[id] >= g_iKickTime - MAX_WARN){ func_kick_player(id) } } } // AFK Funktionen für lebende Spieler if (is_user_alive(id)){ // Positionen überprüfen if (g_iAFKCheck == 1){ new vOrigin[3] get_user_origin(id, vOrigin) if (g_vOrigin[id][0] != vOrigin[0] || g_vOrigin[id][1] != vOrigin[1]){ g_vOrigin[id][0] = vOrigin[0] g_vOrigin[id][1] = vOrigin[1] g_vOrigin[id][2] = vOrigin[2] g_iAFKTime[id] = 0 g_iWarn[id] = 0 } else{ g_iAFKTime[id]++ } } // Letzte Aktivität ermitteln else{ new Float:fLastActivity fLastActivity = cs_get_user_lastactivity(id) if (fLastActivity != g_fLastActivity[id]){ g_fLastActivity[id] = fLastActivity g_iAFKTime[id] = 0 g_iWarn[id] = 0 } else{ g_iAFKTime[id] = floatround((get_gametime() - fLastActivity) / FREQ_AFK_CHECK) } } // Bombentransfer if (g_iDropBomb && g_iAFKTime[id] >= 3){ if (g_iDropBomb == 1){ if (pev(id, pev_weapons) & (1 << CSW_C4)) engclient_cmd(id, "drop", "weapon_c4") } else{ func_transfer_bomb(id) } } // Spec-Switch if (g_iAFKTime[id] >= g_iTransferTime - MAX_WARN){ func_transfer_player(id) } } } } } public func_transfer_bomb(id){ // Abbrechen wenn der Spieler keine Bombe hat if (!(pev(id, pev_weapons) & (1 << CSW_C4))) return // Ermittle alle lebenden Terroristen new iPlayers[32], pNum get_players(iPlayers, pNum, "ae", "TERRORIST") // Abbrechen falls weniger als 2 Terroristen leben if (pNum < 2) return // Finde den nächsten Terroristen der nicht AFK ist new vCarrier[3], vRecipient[3], iRecipient, iDistance, iMinDistance = 999999 get_user_origin(id, vCarrier) for (new p = 0; p < pNum; p++){ if (g_iAFKTime[iPlayers[p]] < 2){ get_user_origin(iPlayers[p], vRecipient) iDistance = get_distance(vCarrier, vRecipient) if (iDistance < iMinDistance){ iMinDistance = iDistance iRecipient = iPlayers[p] } } } // Abbrechen wenn alle Terroristen AFK sind if (!iRecipient) return // Bombe transferieren engclient_cmd(id, "drop", "weapon_c4") new iC4 = engfunc(EngFunc_FindEntityByString, -1, "classname", "weapon_c4") if (pev_valid(iC4)){ new iBackpack = pev(iC4, pev_owner) if (iBackpack > g_iMaxPlayers){ set_pev(iBackpack, pev_flags, pev(iBackpack, pev_flags) | FL_ONGROUND) dllfunc(DLLFunc_Touch, iBackpack, iRecipient) } } // Nachrichten anzeigen new szRecipient[32], szMsg[128] get_user_name(iRecipient, szRecipient, 31) set_hudmessage(255, 255, 0, -1.0, 0.8, 0, 3.0, 6.0, 0.1, 0.2, -1) for (new p = 0; p < pNum; p++){ if (iPlayers[p] != iRecipient){ format(szMsg, 127, "%L", iPlayers[p], "AFK_TRANSFER_BOMB", szRecipient) show_hudmessage(iPlayers[p], "%s", szMsg) } } format(szMsg, 127, "%L", iRecipient, "AFK_GOT_BOMB") show_hudmessage(iRecipient, szMsg) } public func_transfer_player(id){ // Warnung anzeigen, wenn nicht schon max-mal verwarnt if (g_iWarn[id] < MAX_WARN){ client_print(id, print_chat, "[AMXX] %L", LANG_PLAYER, "AFK_TRANSFER_WARN", floatround(FREQ_AFK_CHECK) * (MAX_WARN - g_iWarn[id])) g_iWarn[id]++ return } // Eigentlich sollte die Bombe schon transferiert worden sein if (pev(id, pev_weapons) & (1 << CSW_C4)){ engclient_cmd(id, "drop", "weapon_c4") } // Spieler tranferieren if (is_user_alive(id)) user_silentkill(id) // Allow players to choose a team more than one time per round (Thanks ConnorMcLeod) // I use this method caused of some issue with deathmatch (Player will be respawned as T or CT) set_pdata_int(id, m_iJoiningState, get_pdata_int(id, m_iJoiningState, OFFSET_LINUX) & ~(1<<8), OFFSET_LINUX) engclient_cmd(id, "jointeam", "6") set_pdata_int(id, m_iJoiningState, get_pdata_int(id, m_iJoiningState, OFFSET_LINUX) & ~(1<<8), OFFSET_LINUX) //cs_set_user_team(id, CS_TEAM_SPECTATOR) //cs_reset_user_model(id) // Positionen zurücksetzen g_vOrigin[id] = {0, 0, 0} // Counter zurücksetzen g_iAFKTime[id] = 0 g_iWarn[id] = 0 // Nachrichten anzeigen new szName[32] get_user_name(id, szName, 31) client_print(0, print_chat, "[AMXX] %L", LANG_PLAYER, "AFK_TRANSFER_PLAYER", szName) } public func_kick_player(id){ // Abbrechen wenn es sich um einen Admin handelt if (get_user_flags(id) & KICK_IMMUNITY) return // Anzahl der aktuellen Spieler ermitteln new iCurrentPlayers = get_playersnum(1) // Sind noch Plätze frei? if (iCurrentPlayers < g_iMinPlayers || !g_iMinPlayers) return // Warnung anzeigen, wenn nicht schon max-mal verwarnt if (g_iWarn[id] < MAX_WARN){ client_print(id, print_chat, "[AMXX] %L", LANG_PLAYER, "AFK_KICK_WARN", floatround(FREQ_AFK_CHECK) * (MAX_WARN - g_iWarn[id])) g_iWarn[id]++ return } // Spieler kicken new szMsg[192] format(szMsg, 191, "%L", id, "AFK_KICK_REASON") server_cmd("slay #%d ^"%s^"", get_user_userid(id), szMsg) // Nachrichten anzeigen new szName[32] get_user_name(id, szName, 31) client_print(0, print_chat, "[AMXX] %L", LANG_PLAYER, "AFK_KICK_PLAYER", szName) }
P.S. Altadata specifica de la inceput ca nu stau dupa tine :|
-
- Membru, skill 0
- Posts: 6
- Joined: 22 Jul 2014, 08:05
- Detinator Steam: Da
- CS Status: Citesc forumul eXtreamCS.com...!
- Detinator server CS: Cs.aGamers.Ro
- Fond eXtream: 0
- Has thanked: 4 times
- Contact:
Tot il pune spec, dar nu-i nimic, lasa asa. Mai am o intrebare: "afk_manager.txt" unde il pun ?scosmynnnn wrote:vezi acum.
- | Afiseaza codul
#define PLUGIN "AFK Manager" #define AUTHOR "Leon McVeran" #define VERSION "v1.4d" #define PDATE "19th May 2010" #include <amxmodx> #include <amxmisc> #include <cstrike> #include <fun> #include <fakemeta> #define KICK_IMMUNITY ADMIN_BAN #define TASK_AFK_CHECK 142500 #define FREQ_AFK_CHECK 5.0 #define MAX_WARN 3 static const OFFSET_LINUX = 5 new const m_iJoiningState = 125 new bool:g_bSpec[33] new Float:g_fLastActivity[33] new g_iAFKCheck new g_iAFKTime[33] new g_iDropBomb new g_iKickTime new g_iMaxPlayers new g_iMinPlayers new g_iTransferTime new g_iWarn[33] new g_vOrigin[33][3] new CVAR_afk_drop_bomb new CVAR_afk_check new CVAR_afk_transfer_time new CVAR_afk_kick_time new CVAR_afk_kick_players public plugin_init(){ register_plugin(PLUGIN, VERSION, AUTHOR) register_dictionary("afk_manager.txt") register_logevent("event_round_end", 2, "0=World triggered", "1=Round_End") register_logevent("event_round_start", 2, "0=World triggered", "1=Round_Start") // Support der alten Menüs register_clcmd("jointeam", "cmd_jointeam") // new menu register_menucmd(register_menuid("Team_Select", 1), 511, "cmd_jointeam") // old menu register_clcmd("joinclass", "cmd_joinclass") // new menu register_menucmd(register_menuid("Terrorist_Select", 1), 511, "cmd_joinclass") // old menu register_menucmd(register_menuid("CT_Select", 1), 511, "cmd_joinclass") // old menu CVAR_afk_check = register_cvar("afk_check", "1") CVAR_afk_drop_bomb = register_cvar("afk_drop_bomb", "2") CVAR_afk_transfer_time = register_cvar("afk_transfer_time", "9") CVAR_afk_kick_time = register_cvar("afk_kick_time", "24") CVAR_afk_kick_players = register_cvar("afk_kick_players", "12") } public plugin_cfg(){ g_iMaxPlayers = get_maxplayers() } public client_connect(id){ // Spieler als Spectator entmarkieren g_bSpec[id] = false // Positionen zurücksetzen g_vOrigin[id] = {0, 0, 0} // Counter zurücksetzen g_iAFKTime[id] = 0 g_iWarn[id] = 0 } public event_round_start(){ // AFK Check eingeschaltet g_iAFKCheck = get_pcvar_num(CVAR_afk_check) if (g_iAFKCheck){ // Spawn-Positionen aktualisieren new iPlayers[32], pNum get_players(iPlayers, pNum, "a") for (new p = 0; p < pNum; p++){ get_user_origin(iPlayers[p], g_vOrigin[iPlayers[p]]) } // Loop anlegen falls nicht vorhanden if (!task_exists(TASK_AFK_CHECK)) set_task(FREQ_AFK_CHECK, "func_afk_check", TASK_AFK_CHECK, _, _, "b") // Kick und Transferzeiten festlegen if (get_pcvar_num(CVAR_afk_transfer_time) < 6) set_pcvar_num(CVAR_afk_transfer_time, 6) if (get_pcvar_num(CVAR_afk_kick_time) < 6) set_pcvar_num(CVAR_afk_kick_time, 6) g_iDropBomb = get_pcvar_num(CVAR_afk_drop_bomb) g_iTransferTime = get_pcvar_num(CVAR_afk_transfer_time) g_iKickTime = get_pcvar_num(CVAR_afk_kick_time) g_iMinPlayers = get_pcvar_num(CVAR_afk_kick_players) } // AFK Check ausgeschaltet else{ // Loop löschen falls vorhanden if (task_exists(TASK_AFK_CHECK)) remove_task(TASK_AFK_CHECK) } } public cmd_jointeam(id){ // Spieler als Spectator markieren, sonst kann man den Kick umgehen, indem man keiner Klasse joined. g_bSpec[id] = true } public cmd_joinclass(id){ // Spieler als Spectator entmarkieren g_bSpec[id] = false // Positionen zurücksetzen g_vOrigin[id] = {0, 0, 0} // Counter zurücksetzen g_iAFKTime[id] = 0 g_iWarn[id] = 0 } public event_round_end(){ // Check darf nicht durchgeführt werden g_iAFKCheck = 0 } public func_afk_check(taskid) { if (g_iAFKCheck){ new CsTeams:eTeam // Alle Spieler überprüfen for (new id = 1; id <= g_iMaxPlayers; id++){ // Bots nicht überprüfen if (is_user_bot(id)) continue // AFK Funktionen für Specs if (is_user_connected(id) && !is_user_hltv(id) && get_user_team(id) == 2){ eTeam = cs_get_user_team(id) if (eTeam == CS_TEAM_CT || eTeam == CS_TEAM_T && is_user_alive(id)){ // Counter erhöhen g_iAFKTime[id]++ // Spec-Kick if (g_iAFKTime[id] >= g_iKickTime - MAX_WARN){ func_kick_player(id) } } } // AFK Funktionen für lebende Spieler if (is_user_alive(id)){ // Positionen überprüfen if (g_iAFKCheck == 1){ new vOrigin[3] get_user_origin(id, vOrigin) if (g_vOrigin[id][0] != vOrigin[0] || g_vOrigin[id][1] != vOrigin[1]){ g_vOrigin[id][0] = vOrigin[0] g_vOrigin[id][1] = vOrigin[1] g_vOrigin[id][2] = vOrigin[2] g_iAFKTime[id] = 0 g_iWarn[id] = 0 } else{ g_iAFKTime[id]++ } } // Letzte Aktivität ermitteln else{ new Float:fLastActivity fLastActivity = cs_get_user_lastactivity(id) if (fLastActivity != g_fLastActivity[id]){ g_fLastActivity[id] = fLastActivity g_iAFKTime[id] = 0 g_iWarn[id] = 0 } else{ g_iAFKTime[id] = floatround((get_gametime() - fLastActivity) / FREQ_AFK_CHECK) } } // Bombentransfer if (g_iDropBomb && g_iAFKTime[id] >= 3){ if (g_iDropBomb == 1){ if (pev(id, pev_weapons) & (1 << CSW_C4)) engclient_cmd(id, "drop", "weapon_c4") } else{ func_transfer_bomb(id) } } // Spec-Switch if (g_iAFKTime[id] >= g_iTransferTime - MAX_WARN){ func_transfer_player(id) } } } } } public func_transfer_bomb(id){ // Abbrechen wenn der Spieler keine Bombe hat if (!(pev(id, pev_weapons) & (1 << CSW_C4))) return // Ermittle alle lebenden Terroristen new iPlayers[32], pNum get_players(iPlayers, pNum, "ae", "TERRORIST") // Abbrechen falls weniger als 2 Terroristen leben if (pNum < 2) return // Finde den nächsten Terroristen der nicht AFK ist new vCarrier[3], vRecipient[3], iRecipient, iDistance, iMinDistance = 999999 get_user_origin(id, vCarrier) for (new p = 0; p < pNum; p++){ if (g_iAFKTime[iPlayers[p]] < 2){ get_user_origin(iPlayers[p], vRecipient) iDistance = get_distance(vCarrier, vRecipient) if (iDistance < iMinDistance){ iMinDistance = iDistance iRecipient = iPlayers[p] } } } // Abbrechen wenn alle Terroristen AFK sind if (!iRecipient) return // Bombe transferieren engclient_cmd(id, "drop", "weapon_c4") new iC4 = engfunc(EngFunc_FindEntityByString, -1, "classname", "weapon_c4") if (pev_valid(iC4)){ new iBackpack = pev(iC4, pev_owner) if (iBackpack > g_iMaxPlayers){ set_pev(iBackpack, pev_flags, pev(iBackpack, pev_flags) | FL_ONGROUND) dllfunc(DLLFunc_Touch, iBackpack, iRecipient) } } // Nachrichten anzeigen new szRecipient[32], szMsg[128] get_user_name(iRecipient, szRecipient, 31) set_hudmessage(255, 255, 0, -1.0, 0.8, 0, 3.0, 6.0, 0.1, 0.2, -1) for (new p = 0; p < pNum; p++){ if (iPlayers[p] != iRecipient){ format(szMsg, 127, "%L", iPlayers[p], "AFK_TRANSFER_BOMB", szRecipient) show_hudmessage(iPlayers[p], "%s", szMsg) } } format(szMsg, 127, "%L", iRecipient, "AFK_GOT_BOMB") show_hudmessage(iRecipient, szMsg) } public func_transfer_player(id){ // Warnung anzeigen, wenn nicht schon max-mal verwarnt if (g_iWarn[id] < MAX_WARN){ client_print(id, print_chat, "[AMXX] %L", LANG_PLAYER, "AFK_TRANSFER_WARN", floatround(FREQ_AFK_CHECK) * (MAX_WARN - g_iWarn[id])) g_iWarn[id]++ return } // Eigentlich sollte die Bombe schon transferiert worden sein if (pev(id, pev_weapons) & (1 << CSW_C4)){ engclient_cmd(id, "drop", "weapon_c4") } // Spieler tranferieren if (is_user_alive(id)) user_silentkill(id) // Allow players to choose a team more than one time per round (Thanks ConnorMcLeod) // I use this method caused of some issue with deathmatch (Player will be respawned as T or CT) set_pdata_int(id, m_iJoiningState, get_pdata_int(id, m_iJoiningState, OFFSET_LINUX) & ~(1<<8), OFFSET_LINUX) engclient_cmd(id, "jointeam", "6") set_pdata_int(id, m_iJoiningState, get_pdata_int(id, m_iJoiningState, OFFSET_LINUX) & ~(1<<8), OFFSET_LINUX) //cs_set_user_team(id, CS_TEAM_SPECTATOR) //cs_reset_user_model(id) // Positionen zurücksetzen g_vOrigin[id] = {0, 0, 0} // Counter zurücksetzen g_iAFKTime[id] = 0 g_iWarn[id] = 0 // Nachrichten anzeigen new szName[32] get_user_name(id, szName, 31) client_print(0, print_chat, "[AMXX] %L", LANG_PLAYER, "AFK_TRANSFER_PLAYER", szName) } public func_kick_player(id){ // Abbrechen wenn es sich um einen Admin handelt if (get_user_flags(id) & KICK_IMMUNITY) return // Anzahl der aktuellen Spieler ermitteln new iCurrentPlayers = get_playersnum(1) // Sind noch Plätze frei? if (iCurrentPlayers < g_iMinPlayers || !g_iMinPlayers) return // Warnung anzeigen, wenn nicht schon max-mal verwarnt if (g_iWarn[id] < MAX_WARN){ client_print(id, print_chat, "[AMXX] %L", LANG_PLAYER, "AFK_KICK_WARN", floatround(FREQ_AFK_CHECK) * (MAX_WARN - g_iWarn[id])) g_iWarn[id]++ return } // Spieler kicken new szMsg[192] format(szMsg, 191, "%L", id, "AFK_KICK_REASON") server_cmd("slay #%d ^"%s^"", get_user_userid(id), szMsg) // Nachrichten anzeigen new szName[32] get_user_name(id, szName, 31) client_print(0, print_chat, "[AMXX] %L", LANG_PLAYER, "AFK_KICK_PLAYER", szName) }
P.S. Altadata specifica de la inceput ca nu stau dupa tine :|
-
- Fost moderator
- Posts: 9362
- Joined: 06 Jul 2013, 22:08
- Detinator Steam: Da
- Detinator server CS: Nu
- Reputatie: Fost eXtream Mod
Fost Scripter eXtreamCS
Nume anterior: scosmynnnn - Has thanked: 492 times
- Been thanked: 547 times
acel fisier il pui in data->lang pentru a citi mesajele pluginul (alea de apar in chat) deaia iti apare ML_NOTFOUND pe server ca nu ai acel fisier in data/lang.
Jump to
- eXtream - Forum
- ↳ Steam
- ↳ Forum
- ↳ WebDesign
- ↳ Incepatori
- ↳ Cos de reciclare
- ↳ Discutii generale
- ↳ Anunturi
- ↳ Security zone
- ↳ Filme si seriale
- ↳ Reclamatii
- ↳ Entertainment
- ↳ Distractie
- ↳ Clubul eXtreamCS - Intra si tu ! [noi oportunitati]
- eXtream - Counter-Strike 2
- ↳ Counter-Strike 2
- eXtream - Counter-Strike 1.6
- ↳ Diverse
- ↳ Filme gaming
- ↳ Meciuri
- ↳ Tutoriale
- ↳ Tutoriale
- ↳ Cereri
- ↳ Discutii generale
- ↳ Probleme la servere dedicate de Counter-Strike
- ↳ Cereri admin / slot
- ↳ Probleme in jocul Counter-Strike
- ↳ Pluginuri
- ↳ Pluginuri eXtream
- ↳ Cereri
- ↳ AdminMod
- ↳ AmxModX
- ↳ Resurse
- ↳ Moduri
- ↳ Addon-uri
- ↳ Kit-uri
- ↳ Harti
- ↳ Diverse
- ↳ Cereri
- ↳ Servere
- ↳ Programarea CS-ului
- ↳ Scripting
- ↳ Modificari pluginuri
- ↳ CStrike
- ↳ Cereri
- eXtream - Echipa
- ↳ Productia eXtream
- ↳ Harti eXtream
- ↳ CS.eXtreamCS.com - Server oficial eXtreamCS
- ↳ Zona administrativă
- ↳ Cereri acces
- ↳ Cereri unban
- ↳ Reclamații
- ↳ Admin zone
- ↳ CS2.eXtreamCS.com - Server official eXtreamCS
- ↳ XMAS.eXtreamCS.com
- ↳ Cereri admin
- ↳ Cereri unban
- ↳ Reclamatii / Sugestii
- ↳ eXtreamCS #PubMasters
- eXtream - Counter Strike Global Offensive
- ↳ Diverse
- ↳ Meciuri
- ↳ Tutoriale
- ↳ Probleme la servere dedicate de Counter-Strike: Global Offensive
- ↳ Probleme in jocul Counter-Strike: Global Offensive
- ↳ Pluginuri
- ↳ Cereri
- ↳ Resurse
- ↳ Addons-uri
- ↳ Hărți
- ↳ Diverse
- ↳ Servere
- eXtream - Counter-Strike Source
- ↳ Tutoriale
- ↳ Pluginuri
- ↳ Servere
- ↳ Resurse
- ↳ Harti
- ↳ Moduri
- ↳ Diverse
- ↳ Classic » CS
- ↳ Anunțuri administrative
- ↳ Cereri admin/slot
- ↳ Cereri unban
- ↳ Reclamații
- ↳ Banlist
- ↳ Admins Only
- ↳ Discord