// Hooked for catching kills and revive spree void eth_CG_EntityEvent(centity_t *cent, vec3_t position) { entityState_t *es = ¢->currentState;; int event = es->event & ~EV_EVENT_BITS; switch (event) { case EV_FIRE_WEAPON: if( seth.value[VAR_RECOIL] == 2) if (es->number == eth.cg_clientNum) { syscall_CG_S_StartLocalSound(eth.cgs_media_sndLimboSelect, CHAN_LOCAL_SOUND); return; } break; case EV_OBITUARY: // Don't count kills in warmup. if (eth.cgs_gamestate != GS_PLAYING) break; // For now this way, report if it doesen't work on some mods int target, attacker; if (eth.mod->type == MOD_ETPRO) { target = es->time; attacker = es->time2; } else { target = es->otherEntityNum; attacker = es->otherEntityNum2; } // If we do a selfkill or someone kills us, reset killing spree if (target == eth.cg_clientNum) { if( attacker > MAX_CLIENTS ) strncpy( eth.KillerName, "world" ,sizeof(eth.KillerName) ); else strncpy( eth.KillerName, eth.clientInfo[attacker].name,sizeof(eth.KillerName) ); if (seth.value[VAR_KILLSPAM] && attacker != target) deathSpam(); if (seth.value[VAR_KILLSPAM] && attacker == target) selfKillSpam(); eth.killCountNoDeath = 0; eth.killSpreeCount = 0; eth.reviveSpree = 0; break; // Increase killcount only if we're the attacker and if we killed a player from the opposite team } else if (attacker == eth.cg_clientNum && eth.clientInfo[target].team != eth.clientInfo[eth.cg_clientNum].team) { strncpy(eth.VictimName, eth.clientInfo[target].name, sizeof(eth.VictimName)); eth.killCount++; eth.killCountNoDeath++; eth.autoDemoKillCount++; // Backup killcount for auto-record demo // If not a killing spree if ((eth.cg_time - eth.lastKillTime) > (SPREE_TIME * 1000)) { eth.firstKillSpreeTime = eth.cg_time; eth.killSpreeCount = 1; } else { eth.killSpreeCount++; } eth.lastKillTime = eth.cg_time; if (eth.killSpreeCount > 1) playSpreeSound(); if (seth.value[VAR_KILLSPAM]) killSpam(); } break; default: break; } eth.CG_EntityEvent(cent, position); }