Hi all, I’m trying to write achievement progress in C++ now and my player ID always turns to be null so I’m not able to call write achievement successfully. Any suggestion on this?
void APlayerController_WeepingDoll::UpdateTrophyProgress(const FString& AchName, float Percent)
{
ULocalPlayer* LocalPlayer = Cast<ULocalPlayer>(Player);
if (LocalPlayer)
{
IOnlineSubsystem* OnlineSub = IOnlineSubsystem::Get();
if (OnlineSub)
{
IOnlineIdentityPtr Identity = OnlineSub->GetIdentityInterface();
if (Identity.IsValid())
{
TSharedPtr<const FUniqueNetId> UserId = LocalPlayer->GetCachedUniqueNetId();
if (UserId.IsValid())
{
GEngine->AddOnScreenDebugMessage(-1, 1.f, FColor::Red, AchName);
IOnlineAchievementsPtr Achievements = OnlineSub->GetAchievementsInterface();
if (Achievements.IsValid() && (!WriteObject.IsValid() || WriteObject->WriteState != EOnlineAsyncTaskState::InProgress))
{
WriteObject = MakeShareable(new FOnlineAchievementsWrite());
WriteObject->SetFloatStat(*AchName, Percent);
FOnlineAchievementsWriteRef WriteObjectRef = WriteObject.ToSharedRef();
Achievements->WriteAchievements(*UserId, WriteObjectRef);
}
}
}
}
}
}