From 87d05490a5f9fe2cf690847597e731481a281952 Mon Sep 17 00:00:00 2001 From: Kingsmedia Date: Fri, 27 May 2022 21:29:25 +0200 Subject: [PATCH] 192 - Shotgun Score Request --- .../Components/LagCompensationComponent.cpp | 30 ++++++++++++++++++- .../Components/LagCompensationComponent.h | 24 ++++++++++----- 2 files changed, 46 insertions(+), 8 deletions(-) diff --git a/Source/Blaster/Components/LagCompensationComponent.cpp b/Source/Blaster/Components/LagCompensationComponent.cpp index 2945c27..5824e50 100644 --- a/Source/Blaster/Components/LagCompensationComponent.cpp +++ b/Source/Blaster/Components/LagCompensationComponent.cpp @@ -36,6 +36,34 @@ void ULagCompensationComponent::ServerScoreRequest_Implementation(ABlasterCharac } } +void ULagCompensationComponent::ShotgunServerScoreRequest_Implementation(const TArray& HitCharacters, const FVector_NetQuantize& TraceStart, + const TArray& HitLocations, float HitTime, AWeapon* DamageCauser) +{ + FShotgunServerSideRewindResult Confirm = ShotgunServerSideRewind(HitCharacters, TraceStart, HitLocations, HitTime); + + for (auto& HitCharacter : HitCharacters) + { + if (HitCharacter == nullptr || Character == nullptr || HitCharacter->GetPrimaryWeapon() == nullptr) continue; + float TotalDamage = 0.f; + if (Confirm.Headshots.Contains(HitCharacter)) + { + TotalDamage += Confirm.Headshots[HitCharacter] * Character->GetPrimaryWeapon()->GetDamage(); + } + if (Confirm.BodyShots.Contains(HitCharacter)) + { + TotalDamage += Confirm.BodyShots[HitCharacter] * Character->GetPrimaryWeapon()->GetDamage(); + } + + UGameplayStatics::ApplyDamage( + HitCharacter, + TotalDamage, + Character->Controller, + Character->GetPrimaryWeapon(), + UDamageType::StaticClass() + ); + } +} + void ULagCompensationComponent::SaveFramePackage() { if (Character == nullptr || !Character->HasAuthority()) return; @@ -355,7 +383,7 @@ FServerSideRewindResult ULagCompensationComponent::ServerSideRewind(ABlasterChar } FShotgunServerSideRewindResult ULagCompensationComponent::ShotgunServerSideRewind(const TArray& HitCharacters, - const FVector_NetQuantize& TraceStart, const TArray& HitLocations, float HitTime) + const FVector_NetQuantize& TraceStart, const TArray& HitLocations, float HitTime) { TArray FramesToCheck; for (ABlasterCharacter* HitCharacter : HitCharacters) diff --git a/Source/Blaster/Components/LagCompensationComponent.h b/Source/Blaster/Components/LagCompensationComponent.h index 5c57337..1a29cff 100644 --- a/Source/Blaster/Components/LagCompensationComponent.h +++ b/Source/Blaster/Components/LagCompensationComponent.h @@ -86,7 +86,23 @@ public: float HitTime, AWeapon* DamageCauser ); + + UFUNCTION(Server, Reliable) + void ShotgunServerScoreRequest( + const TArray& HitCharacters, + const FVector_NetQuantize& TraceStart, + const TArray& HitLocations, + float HitTime, + AWeapon* DamageCauser + ); + FShotgunServerSideRewindResult ShotgunServerSideRewind( + const TArray& HitCharacters, + const FVector_NetQuantize& TraceStart, + const TArray& HitLocations, + float HitTime + ); + protected: virtual void BeginPlay() override; void SaveFramePackage(); @@ -105,13 +121,7 @@ protected: FFramePackage GetFrameToCheck(ABlasterCharacter* HitCharacter, float HitTime); // Shotgun related stuff - - FShotgunServerSideRewindResult ShotgunServerSideRewind( - const TArray& HitCharacters, - const FVector_NetQuantize& TraceStart, - const TArray& HitLocations, - float HitTime - ); + FShotgunServerSideRewindResult ShotgunConfirmHit( const TArray& FramePackages, const FVector_NetQuantize& TraceStart,