Beispiel #1
0
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);
	}
}
Beispiel #2
0
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;
			}
		}
	}
}
Beispiel #6
0
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();
}