203 - Cheating and Validation

This commit is contained in:
Kingsmedia 2022-05-28 13:51:52 +02:00
parent 6eb1db5505
commit 2f3404195c
2 changed files with 23 additions and 9 deletions

View File

@ -129,7 +129,7 @@ void UCombatComponent::FireProjectileWeapon()
{ {
HitTarget = PrimaryWeapon->bUseScatter ? PrimaryWeapon->TraceEndWithScatter(HitTarget) : HitTarget; HitTarget = PrimaryWeapon->bUseScatter ? PrimaryWeapon->TraceEndWithScatter(HitTarget) : HitTarget;
if (!Character->HasAuthority()) LocalFire(HitTarget); if (!Character->HasAuthority()) LocalFire(HitTarget);
ServerFire(HitTarget); ServerFire(HitTarget, PrimaryWeapon->FireDelay);
} }
} }
@ -139,7 +139,7 @@ void UCombatComponent::FireHitScanWeapon()
{ {
HitTarget = PrimaryWeapon->bUseScatter ? PrimaryWeapon->TraceEndWithScatter(HitTarget) : HitTarget; HitTarget = PrimaryWeapon->bUseScatter ? PrimaryWeapon->TraceEndWithScatter(HitTarget) : HitTarget;
if (!Character->HasAuthority()) LocalFire(HitTarget); if (!Character->HasAuthority()) LocalFire(HitTarget);
ServerFire(HitTarget); ServerFire(HitTarget, PrimaryWeapon->FireDelay);
} }
} }
@ -151,7 +151,7 @@ void UCombatComponent::FireShotgun()
TArray<FVector_NetQuantize> HitTargets; TArray<FVector_NetQuantize> HitTargets;
Shotgun->ShotgunTraceEndWithScatter(HitTarget, HitTargets); Shotgun->ShotgunTraceEndWithScatter(HitTarget, HitTargets);
if (!Character->HasAuthority()) ShotgunLocalFire(HitTargets); if (!Character->HasAuthority()) ShotgunLocalFire(HitTargets);
ServerShotgunFire(HitTargets); ServerShotgunFire(HitTargets, PrimaryWeapon->FireDelay);
} }
} }
@ -177,22 +177,34 @@ void UCombatComponent::FireTimerFinished()
ReloadEmptyWeapon(); ReloadEmptyWeapon();
} }
void UCombatComponent::ServerFire_Implementation(const FVector_NetQuantize& TraceHitTarget) void UCombatComponent::ServerFire_Implementation(const FVector_NetQuantize& TraceHitTarget, float FireDelay)
{ {
MulticastFire(TraceHitTarget); MulticastFire(TraceHitTarget);
} }
bool UCombatComponent::ServerFire_Validate(const FVector_NetQuantize& TraceHitTarget, float FireDelay)
{
if (PrimaryWeapon == nullptr) return true;
return FMath::IsNearlyEqual(PrimaryWeapon->FireDelay, FireDelay, 0.001f);
}
void UCombatComponent::MulticastFire_Implementation(const FVector_NetQuantize& TraceHitTarget) void UCombatComponent::MulticastFire_Implementation(const FVector_NetQuantize& TraceHitTarget)
{ {
if (Character && Character->IsLocallyControlled() && !Character->HasAuthority()) return; if (Character && Character->IsLocallyControlled() && !Character->HasAuthority()) return;
LocalFire(TraceHitTarget); LocalFire(TraceHitTarget);
} }
void UCombatComponent::ServerShotgunFire_Implementation(const TArray<FVector_NetQuantize>& TraceHitTargets) void UCombatComponent::ServerShotgunFire_Implementation(const TArray<FVector_NetQuantize>& TraceHitTargets, float FireDelay)
{ {
MulticastShotgunFire(TraceHitTargets); MulticastShotgunFire(TraceHitTargets);
} }
bool UCombatComponent::ServerShotgunFire_Validate(const TArray<FVector_NetQuantize>& TraceHitTargets, float FireDelay)
{
if (PrimaryWeapon == nullptr) return true;
return FMath::IsNearlyEqual(PrimaryWeapon->FireDelay, FireDelay, 0.001f);
}
void UCombatComponent::MulticastShotgunFire_Implementation(const TArray<FVector_NetQuantize>& TraceHitTargets) void UCombatComponent::MulticastShotgunFire_Implementation(const TArray<FVector_NetQuantize>& TraceHitTargets)
{ {
if (Character && Character->IsLocallyControlled() && !Character->HasAuthority()) return; if (Character && Character->IsLocallyControlled() && !Character->HasAuthority()) return;
@ -823,6 +835,8 @@ bool UCombatComponent::CanFire()
void UCombatComponent::OnRep_CarriedAmmo() void UCombatComponent::OnRep_CarriedAmmo()
{ {
if (Character == nullptr) return;
Controller = Controller == nullptr ? Cast<ABlasterPlayerController>(Character->Controller) : Controller; Controller = Controller == nullptr ? Cast<ABlasterPlayerController>(Character->Controller) : Controller;
if (Controller) if (Controller)
{ {

View File

@ -71,14 +71,14 @@ protected:
void FireHitScanWeapon(); void FireHitScanWeapon();
void FireShotgun(); void FireShotgun();
UFUNCTION(Server, Reliable) UFUNCTION(Server, Reliable, WithValidation)
void ServerFire(const FVector_NetQuantize& TraceHitTarget); void ServerFire(const FVector_NetQuantize& TraceHitTarget, float FireDelay);
UFUNCTION(NetMulticast, Reliable) UFUNCTION(NetMulticast, Reliable)
void MulticastFire(const FVector_NetQuantize& TraceHitTarget); void MulticastFire(const FVector_NetQuantize& TraceHitTarget);
UFUNCTION(Server, Reliable) UFUNCTION(Server, Reliable, WithValidation)
void ServerShotgunFire(const TArray<FVector_NetQuantize>& TraceHitTargets); void ServerShotgunFire(const TArray<FVector_NetQuantize>& TraceHitTargets, float FireDelay);
UFUNCTION(NetMulticast, Reliable) UFUNCTION(NetMulticast, Reliable)
void MulticastShotgunFire(const TArray<FVector_NetQuantize>& TraceHitTargets); void MulticastShotgunFire(const TArray<FVector_NetQuantize>& TraceHitTargets);