WriteByte(0, TE_CSQC_TEAMNAGGER);
}
-void send_CSQC_nexvelocity(entity e) {
- msg_entity = e;
- WriteByte(MSG_ONE, SVC_TEMPENTITY);
- WriteByte(MSG_ONE, TE_CSQC_NEX_VELOCITY);
- WriteShort(MSG_ONE, cvar("g_balance_nex_velocitydependent_minspeed"));
- WriteShort(MSG_ONE, cvar("g_balance_nex_velocitydependent_maxspeed"));
-}
-
void send_CSQC_cr_maxbullets(entity e) {
msg_entity = e;
WriteByte(MSG_ONE, SVC_TEMPENTITY);
self.effects = 0;
self.air_finished = time + 12;
self.dmg = 2;
+ if(cvar("g_balance_nex_charge"))
+ self.nex_charge = cvar("g_balance_nex_charge_start");
if(inWarmupStage)
{
void ClientKill (void)
{
- ClientKill_TeamChange(0);
+ if((g_arena || g_ca) && ((champion && champion.classname == "player" && player_count > 1) || player_count == 1)) // don't allow a kill in this case either
+ {
+ // do nothing
+ }
+ else
+ ClientKill_TeamChange(0);
+}
+
+void CTS_ClientKill_Think (void)
+{
+ self = self.owner; // set self to the player to be killed
+ sprint(self, "^1You were killed in order to prevent cheating!");
+ ClientKill_Now();
+}
+
+void CTS_ClientKill (float t) // silent version of ClientKill
+{
+ entity e;
+ e = spawn();
+ e.owner = self;
+ e.think = CTS_ClientKill_Think;
+ e.nextthink = t;
}
void DoTeamChange(float destteam)
string ColoredTeamName(float t);
void DecodeLevelParms (void);
//void dom_player_join_team(entity pl);
-#ifdef UID
-.float uid_kicktime;
-.string uid;
-#endif
void ClientConnect (void)
{
float t;
else
self.hitplotfh = -1;
-#ifdef UID
- if(clienttype(self) == CLIENTTYPE_REAL)
- if not(self.uid)
- self.uid_kicktime = time + 60;
-#endif
-
if(g_race || g_cts) {
string rr;
if(g_cts)
rr = RACE_RECORD;
t = stof(db_get(ServerProgsDB, strcat(GetMapname(), rr, "time")));
+ msg_entity = self;
race_send_recordtime(MSG_ONE);
race_send_speedaward(MSG_ONE);
speedaward_alltimebest = stof(db_get(ServerProgsDB, strcat(GetMapname(), rr, "speed/speed")));
- speedaward_alltimebest_holder = db_get(ServerProgsDB, strcat(GetMapname(), rr, "speed/netname"));
+ speedaward_alltimebest_holder = uid2name(db_get(ServerProgsDB, strcat(GetMapname(), rr, "speed/crypto_idfp")));
race_send_speedaward_alltimebest(MSG_ONE);
float i;
else if(cvar("sv_teamnagger") && !(cvar("bot_vs_human") && (c3==-1 && c4==-1)) && !g_ca) // teamnagger is currently bad for ca
send_CSQC_teamnagger();
- send_CSQC_nexvelocity(self);
send_CSQC_cr_maxbullets(self);
CheatInitClient();
self.stat_count -= 1;
}
-#ifdef UID
- if(self.uid_kicktime)
- if(time > self.uid_kicktime)
- {
- bprint("^3", self.netname, "^3 was kicked for missing UID.\n");
- dropclient(self);
- return;
- }
-#endif
-
if(sv_maxidle && frametime)
{
// WORKAROUND: only use dropclient in server frames (frametime set). Never use it in cl_movement frames (frametime zero).
playerdemo_write();
+ if((g_cts || g_race) && self.cvar_cl_allow_uid2name)
+ {
+ if(!self.stored_netname)
+ self.stored_netname = strzone(uid2name(self.crypto_idfp));
+ if(self.stored_netname != self.netname)
+ {
+ db_put(ServerProgsDB, strcat("uid2name", self.crypto_idfp), self.netname);
+ strunzone(self.stored_netname);
+ self.stored_netname = strzone(self.netname);
+ }
+ }
+
/*
if(g_race)
dprint(sprintf("%f %.6f\n", time, race_GetFractionalLapCount(self)));