192 - Shotgun Score Request

This commit is contained in:
Kingsmedia 2022-05-27 21:29:25 +02:00
parent 067c83583c
commit 87d05490a5
2 changed files with 46 additions and 8 deletions

View File

@ -36,6 +36,34 @@ void ULagCompensationComponent::ServerScoreRequest_Implementation(ABlasterCharac
}
}
void ULagCompensationComponent::ShotgunServerScoreRequest_Implementation(const TArray<ABlasterCharacter*>& HitCharacters, const FVector_NetQuantize& TraceStart,
const TArray<FVector_NetQuantize>& 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<ABlasterCharacter*>& HitCharacters,
const FVector_NetQuantize& TraceStart, const TArray<FVector_NetQuantize>& HitLocations, float HitTime)
const FVector_NetQuantize& TraceStart, const TArray<FVector_NetQuantize>& HitLocations, float HitTime)
{
TArray<FFramePackage> FramesToCheck;
for (ABlasterCharacter* HitCharacter : HitCharacters)

View File

@ -86,7 +86,23 @@ public:
float HitTime,
AWeapon* DamageCauser
);
UFUNCTION(Server, Reliable)
void ShotgunServerScoreRequest(
const TArray<ABlasterCharacter*>& HitCharacters,
const FVector_NetQuantize& TraceStart,
const TArray<FVector_NetQuantize>& HitLocations,
float HitTime,
AWeapon* DamageCauser
);
FShotgunServerSideRewindResult ShotgunServerSideRewind(
const TArray<ABlasterCharacter*>& HitCharacters,
const FVector_NetQuantize& TraceStart,
const TArray<FVector_NetQuantize>& 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<ABlasterCharacter*>& HitCharacters,
const FVector_NetQuantize& TraceStart,
const TArray<FVector_NetQuantize>& HitLocations,
float HitTime
);
FShotgunServerSideRewindResult ShotgunConfirmHit(
const TArray<FFramePackage>& FramePackages,
const FVector_NetQuantize& TraceStart,