mirror of
https://github.com/OpenFusionProject/OpenFusion.git
synced 2024-11-05 15:00:06 +00:00
Restore rapid-fire anti-cheat for projectiles
For a while we had made the temporary rapid-fire anti-cheat optional on master, but had removed it entirely on the refactor branch. The modification on master was acidentally only applied to the regular (non-projectile) combat handler, while the removal on refactor removed both that and the projectile check. When the refactor branch was merged, that resulted in the removal of only the projectile rapid-fire check, while the conditional regular combat rapid-fire check was kept. This change restores the projectile rapid-fire check such that it is conditional, just like for regular combat.
This commit is contained in:
parent
4592fc42af
commit
96c430c994
@ -365,7 +365,7 @@ static std::pair<int,int> getDamage(int attackPower, int defensePower, bool shou
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool checkRapidFire(CNSocket *sock, int targetCount) {
|
static bool checkRapidFire(CNSocket *sock, int targetCount, bool allowManyTargets) {
|
||||||
Player *plr = PlayerManager::getPlayer(sock);
|
Player *plr = PlayerManager::getPlayer(sock);
|
||||||
time_t currTime = getTime();
|
time_t currTime = getTime();
|
||||||
|
|
||||||
@ -377,7 +377,7 @@ static bool checkRapidFire(CNSocket *sock, int targetCount) {
|
|||||||
plr->lastShot = currTime;
|
plr->lastShot = currTime;
|
||||||
|
|
||||||
// 3+ targets should never be possible
|
// 3+ targets should never be possible
|
||||||
if (targetCount > 3)
|
if (!allowManyTargets && targetCount > 3)
|
||||||
plr->suspicionRating += 10001;
|
plr->suspicionRating += 10001;
|
||||||
|
|
||||||
// kill the socket when the player is too suspicious
|
// kill the socket when the player is too suspicious
|
||||||
@ -396,7 +396,7 @@ static void pcAttackNpcs(CNSocket *sock, CNPacketData *data) {
|
|||||||
auto targets = (int32_t*)data->trailers;
|
auto targets = (int32_t*)data->trailers;
|
||||||
|
|
||||||
// kick the player if firing too rapidly
|
// kick the player if firing too rapidly
|
||||||
if (settings::ANTICHEAT && checkRapidFire(sock, pkt->iNPCCnt))
|
if (settings::ANTICHEAT && checkRapidFire(sock, pkt->iNPCCnt, false))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -837,6 +837,10 @@ static void projectileHit(CNSocket* sock, CNPacketData* data) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// kick the player if firing too rapidly
|
||||||
|
if (settings::ANTICHEAT && checkRapidFire(sock, pkt->iTargetCnt, true))
|
||||||
|
return;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* initialize response struct
|
* initialize response struct
|
||||||
* rocket style hit doesn't work properly, so we're always sending this one
|
* rocket style hit doesn't work properly, so we're always sending this one
|
||||||
|
Loading…
Reference in New Issue
Block a user