float AShooterGameMode::ModifyDamage(float Damage, AActor* DamagedActor, struct FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser) const { float ActualDamage = Damage; AShooterCharacter* DamagedPawn = Cast<AShooterCharacter>(DamagedActor); if (DamagedPawn && EventInstigator) { AShooterPlayerState* DamagedPlayerState = Cast<AShooterPlayerState>(DamagedPawn->PlayerState); AShooterPlayerState* InstigatorPlayerState = Cast<AShooterPlayerState>(EventInstigator->PlayerState); // disable friendly fire if (!CanDealDamage(InstigatorPlayerState, DamagedPlayerState)) { ActualDamage = 0.0f; } // scale self instigated damage if (InstigatorPlayerState == DamagedPlayerState) { ActualDamage *= DamageSelfScale; } } return ActualDamage; }
float ABaseGameMode::ModifyDamage(float Damage, AActor* DamagedActor, struct FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser) const { float ActualDamage = Damage; ABaseCharacter* DamagedPawn = Cast<ABaseCharacter>(DamagedActor); if (DamagedPawn && EventInstigator) { ABasePlayerState* DamagedPlayerState = Cast<ABasePlayerState>(DamagedPawn->PlayerState); ABasePlayerState* InstigatorPalyerState = Cast<ABasePlayerState>(EventInstigator->PlayerState); if (!CanDealDamage(InstigatorPalyerState, DamagedPlayerState)) { ActualDamage = 0.0f; } } return ActualDamage; }
float ASGameMode::ModifyDamage(float Damage, AActor* DamagedActor, struct FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser) const { float ActualDamage = Damage; ASBaseCharacter* DamagedPawn = Cast<ASBaseCharacter>(DamagedActor); if (DamagedPawn && EventInstigator) { ASPlayerState* DamagedPlayerState = Cast<ASPlayerState>(DamagedPawn->PlayerState); ASPlayerState* InstigatorPlayerState = Cast<ASPlayerState>(EventInstigator->PlayerState); // Check for friendly fire if (!CanDealDamage(InstigatorPlayerState, DamagedPlayerState)) { ActualDamage = 0.f; } } return ActualDamage; }