void APawn::PossessedBy(AController* NewController) { AController* const OldController = Controller; Controller = NewController; ForceNetUpdate(); if (Controller->PlayerState != NULL) { PlayerState = Controller->PlayerState; } if (APlayerController* PlayerController = Cast<APlayerController>(Controller)) { if (GetNetMode() != NM_Standalone) { SetReplicates(true); SetAutonomousProxy(true); } } else { CopyRemoteRoleFrom(GetDefault<APawn>()); } // dispatch Blueprint event if necessary if (OldController != NewController) { ReceivePossessed(Controller); } }
float AFPSGCharacter::TakeDamage(float damageAmount, struct FDamageEvent const& damageEvent, class AController* eventInstigator, class AActor* damageCauser) { //eventInstigator Player that killed this player float actualDamageAmount = Super::TakeDamage(damageAmount, damageEvent, eventInstigator, damageCauser); //GEngine->AddOnScreenDebugMessage(-1, 6.0f, FColor::Red, "AFPSGCharacter::TakeDamage: " + FString::FromInt(actualDamageAmount)); if (currentHealth > 0.0f && actualDamageAmount > 0.0f) { currentHealth -= actualDamageAmount; if (currentHealth <= 0.0f) { //Correct the actual damage in case health is less than zero actualDamageAmount += currentHealth; currentHealth = 0.0f; //Call this here to make sure currentHealth is replicated immediately, probably dont need it ForceNetUpdate(); // Kill character die(Cast<AFPSGPlayerController>(eventInstigator)); } //GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Magenta, "Take Damage Health" + FString::SanitizeFloat(currentHealth)); } return actualDamageAmount; }
void AUTBetrayalPlayerState::SetRogueTimer() { AUTBetrayalGameMode* GM = GetWorld()->GetAuthGameMode<AUTBetrayalGameMode>(); RogueTimePenalty = GM ? GM->RogueTimePenalty : AUTBetrayalGameMode::StaticClass()->GetDefaultObject<AUTBetrayalGameMode>()->RogueTimePenalty; RemainingRogueTime = RogueTimePenalty; ForceNetUpdate(); bIsRogue = true; GetWorldTimerManager().SetTimer(TimerHandle_RogueTimer, this, &AUTBetrayalPlayerState::RogueTimer, 1.0f, true); }
void APlayerState::SetPlayerName(const FString& S) { PlayerName = S; // RepNotify callback won't get called by net code if we are the server ENetMode NetMode = GetNetMode(); if (NetMode == NM_Standalone || NetMode == NM_ListenServer) { OnRep_PlayerName(); } OldName = PlayerName; ForceNetUpdate(); }
void AUTBetrayalPlayerState::RogueExpired() { RemainingRogueTime = -100.0; bIsRogue = false; ForceNetUpdate(); GetWorldTimerManager().ClearTimer(TimerHandle_RogueTimer); AGameState* GameState = GetWorld()->GetGameState(); if (GameState != NULL) { for (APlayerState* PS : GameState->PlayerArray) { AUTBetrayalPlayerState* PRI = Cast<AUTBetrayalPlayerState>(PS); if ((PRI != NULL) && (PRI->Betrayer == this)) { PRI->Betrayer = NULL; } } } }
void APawn::UnPossessed() { AController* const OldController = Controller; ForceNetUpdate(); PlayerState = NULL; SetOwner(NULL); Controller = NULL; // Unregister input component if we created one DestroyPlayerInputComponent(); // dispatch Blueprint event if necessary if (OldController) { ReceiveUnpossessed(OldController); } ConsumeMovementInputVector(); }
void APlayerState::Reset() { Super::Reset(); Score = 0; ForceNetUpdate(); }