[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 .
Post Reply
Stex
Membru, skill 0
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:

22 Jul 2014, 11:37

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
Last edited by Stex on 23 Jul 2014, 18:49, edited 1 time in total.
RoyalServer
mr.f3lyx
Membru, skill +2
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

22 Jul 2014, 12:36

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)
}
Stex
Membru, skill 0
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:

22 Jul 2014, 13:51

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.
Cosmin
Fost moderator
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

22 Jul 2014, 15:08

| 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)
}
vezi asa
Stex
Membru, skill 0
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:

23 Jul 2014, 08:48

scosmynnnn wrote:
| 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)
}
vezi asa
Nu vreau sa-l puna si spectator, vreau doar sa dea slay :|
Si imi poti da si fisierul "afk_manager.txt"
mr.f3lyx
Membru, skill +2
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

23 Jul 2014, 12:29

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.
Cosmin
Fost moderator
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

23 Jul 2014, 15:06

| 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)
}
vezi acum.

P.S. Altadata specifica de la inceput ca nu stau dupa tine :|
Stex
Membru, skill 0
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:

23 Jul 2014, 16:56

scosmynnnn wrote:
| 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)
}
vezi acum.

P.S. Altadata specifica de la inceput ca nu stau dupa tine :|
Tot il pune spec, dar nu-i nimic, lasa asa. Mai am o intrebare: "afk_manager.txt" unde il pun ?
Cosmin
Fost moderator
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

23 Jul 2014, 17:01

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.
Post Reply

Return to “Cereri”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 33 guests