Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
sv_kick_teamkiller.qc File Reference
#include "sv_kick_teamkiller.qh"
#include <server/ipban.qh>
Include dependency graph for sv_kick_teamkiller.qc:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

 MUTATOR_HOOKFUNCTION (kick_teamkiller, PlayerDies)
 REGISTER_MUTATOR (kick_teamkiller,(autocvar_g_kick_teamkiller_rate > 0))

Variables

float autocvar_g_kick_teamkiller_bantime
float autocvar_g_kick_teamkiller_lower_limit
float autocvar_g_kick_teamkiller_rate
int autocvar_g_kick_teamkiller_severity

Function Documentation

◆ MUTATOR_HOOKFUNCTION()

MUTATOR_HOOKFUNCTION ( kick_teamkiller ,
PlayerDies  )

Definition at line 11 of file sv_kick_teamkiller.qc.

12{
13 if (!teamplay)
14 {
15 return;
16 }
17 if (warmup_stage)
18 {
19 return;
20 }
21 entity attacker = M_ARGV(1, entity);
22 if (!IS_REAL_CLIENT(attacker))
23 {
24 return;
25 }
26
27 float masksize = autocvar_g_ban_default_masksize;
29
30 int teamkills = PlayerScore_Get(attacker, SP_TEAMKILLS);
31 // use the players actual playtime
32 float playtime = time - CS(attacker).startplaytime;
33 // rate is in teamkills/minutes, playtime in seconds
35 teamkills >= autocvar_g_kick_teamkiller_rate*playtime/60.0)
36 {
38 {
39 case 1:
40 {
41 if (dropclient_schedule(attacker))
42 Send_Notification(NOTIF_ALL, NULL, MSG_INFO, INFO_QUIT_KICK_TEAMKILL, attacker.netname);
43 return;
44 }
45 case 2:
46 {
47 attacker.respawn_flags = RESPAWN_SILENT;
48 Ban_KickBanClient(attacker, bantime, masksize, "Team Killing");
49 Send_Notification(NOTIF_ALL, NULL, MSG_INFO, INFO_QUIT_KICK_TEAMKILL, attacker.netname);
50 return;
51 }
52 default:
53 {
54 attacker.respawn_flags = RESPAWN_SILENT;
55 string theid = "";
56
58 theid = cons(theid, attacker.netaddress);
60 theid = cons(theid, attacker.crypto_idfp);
61
62 LOG_INFO(strcat("Play-banning player ", GetCallerName(attacker), " (", attacker.netaddress, ")."));
63 PutObserverInServer(attacker, true, true);
64 cvar_set("g_playban_list", cons(autocvar_g_playban_list, theid));
65
66 Send_Notification(NOTIF_ALL, NULL, MSG_INFO, INFO_QUIT_PLAYBAN_TEAMKILL, attacker.netname);
67 Send_Notification(NOTIF_ONE, attacker, MSG_CENTER, CENTER_QUIT_PLAYBAN_TEAMKILL);
68
70 TRANSMUTE(Observer, attacker);
71
72 return;
73 }
74 }
75 }
76}
string autocvar_g_playban_list
Definition banning.qh:14
float autocvar_g_ban_default_masksize
Definition banning.qh:4
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
bool warmup_stage
Definition main.qh:120
#define M_ARGV(x, type)
Definition events.qh:17
float time
void Ban_KickBanClient(entity client, float bantime, float masksize, string reason)
Definition ipban.qc:582
#define LOG_INFO(...)
Definition log.qh:65
void cvar_set(string name, string value)
strcat(_("^F4Countdown stopped!"), "\n^BG", _("Teams are too unbalanced."))
void Send_Notification(NOTIF broadcast, entity client, MSG net_type, Notification net_name,...count)
Definition all.qc:1573
#define TRANSMUTE(cname, this,...)
Definition oo.qh:136
#define NULL
Definition post.qh:14
bool PlayerInIDList(entity p, string idlist)
Definition client.qc:1036
void PutObserverInServer(entity this, bool is_forced, bool use_spawnpoint)
putting a client as observer in the server
Definition client.qc:261
bool PlayerInIPList(entity p, string iplist)
Definition client.qc:1027
bool PlayerInList(entity player, string list)
Definition client.qc:1045
const int RESPAWN_SILENT
Definition client.qh:327
string GetCallerName(entity caller)
Definition common.qc:33
bool dropclient_schedule(entity this)
Schedules dropclient for a player and returns true; if dropclient is already scheduled (for that play...
Definition main.qc:44
#define PlayerScore_Get(player, scorefield)
Returns the player's score.
Definition scores.qh:42
ClientState CS(Client this)
Definition state.qh:47
ERASEABLE string cons(string a, string b)
Definition string.qh:276
float autocvar_g_kick_teamkiller_lower_limit
int autocvar_g_kick_teamkiller_severity
float autocvar_g_kick_teamkiller_bantime
float autocvar_g_kick_teamkiller_rate
bool teamplay
Definition teams.qh:59
#define IS_REAL_CLIENT(v)
Definition utils.qh:17

References autocvar_g_ban_default_masksize, autocvar_g_kick_teamkiller_bantime, autocvar_g_kick_teamkiller_lower_limit, autocvar_g_kick_teamkiller_rate, autocvar_g_kick_teamkiller_severity, autocvar_g_playban_list, Ban_KickBanClient(), cons(), CS(), cvar_set(), dropclient_schedule(), entity(), GetCallerName(), IS_REAL_CLIENT, LOG_INFO, M_ARGV, NULL, PlayerInIDList(), PlayerInIPList(), PlayerInList(), PlayerScore_Get, PutObserverInServer(), RESPAWN_SILENT, Send_Notification(), strcat(), teamplay, time, TRANSMUTE, and warmup_stage.

◆ REGISTER_MUTATOR()

REGISTER_MUTATOR ( kick_teamkiller ,
(autocvar_g_kick_teamkiller_rate > 0)  )

Variable Documentation

◆ autocvar_g_kick_teamkiller_bantime

float autocvar_g_kick_teamkiller_bantime

Definition at line 7 of file sv_kick_teamkiller.qc.

Referenced by MUTATOR_HOOKFUNCTION().

◆ autocvar_g_kick_teamkiller_lower_limit

float autocvar_g_kick_teamkiller_lower_limit

Definition at line 5 of file sv_kick_teamkiller.qc.

Referenced by MUTATOR_HOOKFUNCTION().

◆ autocvar_g_kick_teamkiller_rate

float autocvar_g_kick_teamkiller_rate

Definition at line 4 of file sv_kick_teamkiller.qc.

Referenced by MUTATOR_HOOKFUNCTION(), and REGISTER_MUTATOR().

◆ autocvar_g_kick_teamkiller_severity

int autocvar_g_kick_teamkiller_severity

Definition at line 6 of file sv_kick_teamkiller.qc.

Referenced by MUTATOR_HOOKFUNCTION().