From 9f7c8a18df512abccc1eda6eade45608bc43d322 Mon Sep 17 00:00:00 2001 From: gsemaj Date: Sat, 16 Jul 2022 12:18:32 -0700 Subject: [PATCH] Get rid of player fire rate suspicion This was super primitive & jank, and caused false positives. Will replace with a polished system later on. --- src/Combat.cpp | 35 ----------------------------------- src/Player.hpp | 2 -- 2 files changed, 37 deletions(-) diff --git a/src/Combat.cpp b/src/Combat.cpp index 479951f..fe01499 100644 --- a/src/Combat.cpp +++ b/src/Combat.cpp @@ -137,26 +137,6 @@ static void pcAttackNpcs(CNSocket *sock, CNPacketData *data) { Player *plr = PlayerManager::getPlayer(sock); auto targets = (int32_t*)data->trailers; - // rapid fire anti-cheat - // TODO: move this out of here, when generalizing packet frequency validation - time_t currTime = getTime(); - if (currTime - plr->lastShot < plr->fireRate * 80) - plr->suspicionRating += plr->fireRate * 100 + plr->lastShot - currTime; // gain suspicion for rapid firing - else if (currTime - plr->lastShot < plr->fireRate * 180 && plr->suspicionRating > 0) - plr->suspicionRating += plr->fireRate * 100 + plr->lastShot - currTime; // lose suspicion for delayed firing - - plr->lastShot = currTime; - - if (pkt->iNPCCnt > 3) // 3+ targets should never be possible - plr->suspicionRating += 10000; - - if (plr->suspicionRating > 10000) { // kill the socket when the player is too suspicious - sock->kill(); - CNShardServer::_killConnection(sock); - return; - } - - /* * IMPORTANT: This validates memory safety in addition to preventing * ordinary cheating. If the client sends a very large number of trailing @@ -581,21 +561,6 @@ static void projectileHit(CNSocket* sock, CNPacketData* data) { return; } - // rapid fire anti-cheat - time_t currTime = getTime(); - if (currTime - plr->lastShot < plr->fireRate * 80) - plr->suspicionRating += plr->fireRate * 100 + plr->lastShot - currTime; // gain suspicion for rapid firing - else if (currTime - plr->lastShot < plr->fireRate * 180 && plr->suspicionRating > 0) - plr->suspicionRating += plr->fireRate * 100 + plr->lastShot - currTime; // lose suspicion for delayed firing - - plr->lastShot = currTime; - - if (plr->suspicionRating > 10000) { // kill the socket when the player is too suspicious - sock->kill(); - CNShardServer::_killConnection(sock); - return; - } - /* * initialize response struct * rocket style hit doesn't work properly, so we're always sending this one diff --git a/src/Player.hpp b/src/Player.hpp index 3b9a40c..477f1a7 100644 --- a/src/Player.hpp +++ b/src/Player.hpp @@ -78,8 +78,6 @@ struct Player : public Entity, public ICombatant { uint64_t iFirstUseFlag[2] = {}; time_t lastHeartbeat = 0; - int suspicionRating = 0; - time_t lastShot = 0; std::vector buyback = {}; Player() { kind = EntityKind::PLAYER; }