void APuzzlePresetPlayerController::OnEndTurn() { /*UPuzzlePresetGameInstance* ppgi = Cast<UPuzzlePresetGameInstance>(GetGameInstance()); ULocalPlayer* LocalPlayer = GetLocalPlayer(); ppgi->HostSession(MakeShareable(LocalPlayer->GetControllerId()),) return;*/ IOnlineSubsystem* ion = IOnlineSubsystem::Get(FName("Steam")); if (ion != nullptr) { ULocalPlayer* LocalPlayer = GetLocalPlayer(); if (LocalPlayer && LocalPlayer->GetControllerId() != -1) { UE_LOG(LogTemp, Warning, TEXT("steam user name: %s"), *PlayerState->PlayerName); uint8 status = ion->GetIdentityInterface()->GetLoginStatus(LocalPlayer->GetControllerId()); UE_LOG(LogTemp, Warning, TEXT("steam user status: %d"), status); } /*if (ion->InitSteamworksClient(false, 480)) { UE_LOG(LogTemp, Warning, TEXT("Steam API initialized succesfully!")); } else { UE_LOG(LogTemp, Warning, TEXT("Failed to initialize Steam API :(")); }*/ } }
void UUpdateManager::StartPlatformEnvironmentCheck() { IOnlineSubsystem* OnlineSubConsole = IOnlineSubsystem::GetByPlatform(); if (!bPlatformEnvironmentDetected && OnlineSubConsole != nullptr && OnlineSubConsole->GetIdentityInterface().IsValid()) { SetUpdateState(EUpdateState::DetectingPlatformEnvironment); ULocalPlayer* LP = GetGameInstance()->GetFirstGamePlayer(); if (LP != nullptr) { const int32 ControllerId = LP->GetControllerId(); OnLoginConsoleCompleteHandle = OnlineSubConsole->GetIdentityInterface()->AddOnLoginCompleteDelegate_Handle( ControllerId, FOnLoginCompleteDelegate::CreateUObject(this, &ThisClass::PlatformEnvironmentCheck_OnLoginConsoleComplete) ); OnlineSubConsole->GetIdentityInterface()->Login(ControllerId, FOnlineAccountCredentials()); } } else { StartHotfixCheck(); } }
void UGetFriendsCallbackProxy::Activate() { if (!PlayerControllerWeakPtr.IsValid()) { // Fail immediately UE_LOG(AdvancedGetFriendsLog, Warning, TEXT("GetFriends Failed received a bad player controller!")); TArray<FBPFriendInfo> EmptyArray; OnFailure.Broadcast(EmptyArray); return; } IOnlineFriendsPtr Friends = Online::GetFriendsInterface(); if (Friends.IsValid()) { ULocalPlayer* Player = Cast<ULocalPlayer>(PlayerControllerWeakPtr->Player); Friends->ReadFriendsList(Player->GetControllerId(), EFriendsLists::ToString((EFriendsLists::Type::Default)), FriendListReadCompleteDelegate); return; } // Fail immediately TArray<FBPFriendInfo> EmptyArray; OnFailure.Broadcast(EmptyArray); }
void UAdvancedFriendsLibrary::IsAFriend(APlayerController *PlayerController, const FBPUniqueNetId UniqueNetId, bool &IsFriend) { if (!PlayerController) { UE_LOG(AdvancedFriendsLog, Warning, TEXT("IsAFriend Had a bad Player Controller!")); return; } if (!UniqueNetId.IsValid()) { UE_LOG(AdvancedFriendsLog, Warning, TEXT("IsAFriend Had a bad UniqueNetId!")); return; } IOnlineFriendsPtr FriendsInterface = Online::GetFriendsInterface(); if (!FriendsInterface.IsValid()) { UE_LOG(AdvancedFriendsLog, Warning, TEXT("IsAFriend Failed to get friends interface!")); return; } ULocalPlayer* Player = Cast<ULocalPlayer>(PlayerController->Player); if (!Player) { UE_LOG(AdvancedFriendsLog, Warning, TEXT("IsAFriend Failed to get LocalPlayer!")); return; } IsFriend = FriendsInterface->IsFriend(Player->GetControllerId(), *UniqueNetId.GetUniqueNetId(), EFriendsLists::ToString(EFriendsLists::Type::Default)); }
bool UAmethystPersistentUser::IsInvertedYAxisDirty() const { bool bIsInvertedYAxisDirty = false; if (GEngine) { TArray<APlayerController*> PlayerList; GEngine->GetAllLocalPlayerControllers(PlayerList); for (auto It = PlayerList.CreateIterator(); It; ++It) { APlayerController* PC = *It; if (!PC || !PC->Player || !PC->PlayerInput) { continue; } // Update key bindings for the current user only ULocalPlayer* LocalPlayer = Cast<ULocalPlayer>(PC->Player); if(!LocalPlayer || LocalPlayer->GetControllerId() != UserIndex) { continue; } bIsInvertedYAxisDirty |= PC->PlayerInput->GetInvertAxis("Lookup") != GetInvertedYAxis(); bIsInvertedYAxisDirty |= PC->PlayerInput->GetInvertAxis("LookupRate") != GetInvertedYAxis(); } } return bIsInvertedYAxisDirty; }
void UAdvancedFriendsLibrary::SendSessionInviteToFriends(APlayerController *PlayerController, const TArray<FBPUniqueNetId> &Friends, TEnumAsByte<EBlueprintResultSwitch::Type> &Result) { if (!PlayerController) { UE_LOG(AdvancedFriendsLog, Warning, TEXT("SendSessionInviteToFriend Had a bad Player Controller!")); Result = EBlueprintResultSwitch::Type::OnFailure; return; } if (Friends.Num() < 1) { UE_LOG(AdvancedFriendsLog, Warning, TEXT("SendSessionInviteToFriend Had no friends in invitation array!")); Result = EBlueprintResultSwitch::Type::OnFailure; return; } IOnlineSessionPtr SessionInterface = Online::GetSessionInterface(); if (!SessionInterface.IsValid()) { UE_LOG(AdvancedFriendsLog, Warning, TEXT("SendSessionInviteToFriend Failed to get session interface!")); Result = EBlueprintResultSwitch::Type::OnFailure; return; } ULocalPlayer* Player = Cast<ULocalPlayer>(PlayerController->Player); if (!Player) { UE_LOG(AdvancedFriendsLog, Warning, TEXT("SendSessionInviteToFriend failed to get LocalPlayer!")); Result = EBlueprintResultSwitch::Type::OnFailure; return; } TArray<TSharedRef<const FUniqueNetId>> List; for (int i = 0; i < Friends.Num(); i++) { TSharedRef<const FUniqueNetId> val(Friends[i].UniqueNetId.ToSharedRef()); //TSharedRef<const FUniqueNetId> val(Friends[i].GetUniqueNetId()); List.Add(val); } if (SessionInterface->SendSessionInviteToFriends(Player->GetControllerId(), GameSessionName, List)) { Result = EBlueprintResultSwitch::Type::OnSuccess; return; } Result = EBlueprintResultSwitch::Type::OnFailure; return; }
void UAdvancedFriendsLibrary::GetStoredFriendsList(APlayerController *PlayerController, TArray<FBPFriendInfo> &FriendsList) { if (!PlayerController) { UE_LOG(AdvancedFriendsLog, Warning, TEXT("GetFriendsList Had a bad Player Controller!")); return; } IOnlineFriendsPtr FriendsInterface = Online::GetFriendsInterface(); if (!FriendsInterface.IsValid()) { UE_LOG(AdvancedFriendsLog, Warning, TEXT("GetFriendsList Failed to get friends interface!")); return; } ULocalPlayer* Player = Cast<ULocalPlayer>(PlayerController->Player); if (!Player) { UE_LOG(AdvancedFriendsLog, Warning, TEXT("GetFriendsList Failed to get LocalPlayer!")); return; } TArray< TSharedRef<FOnlineFriend> > FriendList; FriendsInterface->GetFriendsList(Player->GetControllerId(), EFriendsLists::ToString((EFriendsLists::Type::Default)), FriendList); for (int32 i = 0; i < FriendList.Num(); i++) { TSharedRef<FOnlineFriend> Friend = FriendList[i]; FBPFriendInfo BPF; BPF.OnlineState = ((EBPOnlinePresenceState::Type)((int32)Friend->GetPresence().Status.State)); BPF.DisplayName = Friend->GetDisplayName(); BPF.RealName = Friend->GetRealName(); BPF.UniqueNetId.SetUniqueNetId(Friend->GetUserId()); BPF.bIsPlayingSameGame = Friend->GetPresence().bIsPlayingThisGame; BPF.PresenceInfo.bIsOnline = Friend->GetPresence().bIsOnline; BPF.PresenceInfo.bIsPlaying = Friend->GetPresence().bIsPlaying; BPF.PresenceInfo.PresenceState = ((EBPOnlinePresenceState::Type)((int32)Friend->GetPresence().Status.State)); BPF.PresenceInfo.StatusString = Friend->GetPresence().Status.StatusStr; BPF.PresenceInfo.bIsJoinable = Friend->GetPresence().bIsJoinable; BPF.PresenceInfo.bIsPlayingThisGame = Friend->GetPresence().bIsPlayingThisGame; FriendsList.Add(BPF); } }
bool UAmethystPersistentUser::IsAimSensitivityDirty() const { bool bIsAimSensitivityDirty = false; // Fixme: UAmethystPersistentUser is not setup to work with multiple worlds. // For now, user settings are global to all world instances. if (GEngine) { TArray<APlayerController*> PlayerList; GEngine->GetAllLocalPlayerControllers(PlayerList); for (auto It = PlayerList.CreateIterator(); It; ++It) { APlayerController* PC = *It; if (!PC || !PC->Player || !PC->PlayerInput) { continue; } // Update key bindings for the current user only ULocalPlayer* LocalPlayer = Cast<ULocalPlayer>(PC->Player); if(!LocalPlayer || LocalPlayer->GetControllerId() != UserIndex) { continue; } // check if the aim sensitivity is off anywhere for (int32 Idx = 0; Idx < PC->PlayerInput->AxisMappings.Num(); Idx++) { FInputAxisKeyMapping &AxisMapping = PC->PlayerInput->AxisMappings[Idx]; if (AxisMapping.AxisName == "Lookup" || AxisMapping.AxisName == "LookupRate" || AxisMapping.AxisName == "Turn" || AxisMapping.AxisName == "TurnRate") { if (FMath::Abs(AxisMapping.Scale) != GetAimSensitivity()) { bIsAimSensitivityDirty = true; break; } } } } } return bIsAimSensitivityDirty; }
void UAdvancedFriendsLibrary::SendSessionInviteToFriend(APlayerController *PlayerController, const FBPUniqueNetId &FriendUniqueNetId, TEnumAsByte<EBlueprintResultSwitch::Type> &Result) { if (!PlayerController) { UE_LOG(AdvancedFriendsLog, Warning, TEXT("SendSessionInviteToFriend Had a bad Player Controller!")); Result = EBlueprintResultSwitch::Type::OnFailure; return; } if (!FriendUniqueNetId.IsValid()) { UE_LOG(AdvancedFriendsLog, Warning, TEXT("SendSessionInviteToFriend Had a bad UniqueNetId!")); Result = EBlueprintResultSwitch::Type::OnFailure; return; } IOnlineSessionPtr SessionInterface = Online::GetSessionInterface(); if (!SessionInterface.IsValid()) { UE_LOG(AdvancedFriendsLog, Warning, TEXT("SendSessionInviteToFriend Failed to get session interface!")); Result = EBlueprintResultSwitch::Type::OnFailure; return; } ULocalPlayer* Player = Cast<ULocalPlayer>(PlayerController->Player); if (!Player) { UE_LOG(AdvancedFriendsLog, Warning, TEXT("SendSessionInviteToFriend failed to get LocalPlayer!")); Result = EBlueprintResultSwitch::Type::OnFailure; return; } if (SessionInterface->SendSessionInviteToFriend(Player->GetControllerId(), GameSessionName, *FriendUniqueNetId.GetUniqueNetId())) { Result = EBlueprintResultSwitch::Type::OnSuccess; return; } Result = EBlueprintResultSwitch::Type::OnFailure; return; }
void UAmethystPersistentUser::TellInputAboutKeybindings() { TArray<APlayerController*> PlayerList; GEngine->GetAllLocalPlayerControllers(PlayerList); for (auto It = PlayerList.CreateIterator(); It; ++It) { APlayerController* PC = *It; if (!PC || !PC->Player || !PC->PlayerInput) { continue; } // Update key bindings for the current user only ULocalPlayer* LocalPlayer = Cast<ULocalPlayer>(PC->Player); if(!LocalPlayer || LocalPlayer->GetControllerId() != UserIndex) { continue; } //set the aim sensitivity for (int32 Idx = 0; Idx < PC->PlayerInput->AxisMappings.Num(); Idx++) { FInputAxisKeyMapping &AxisMapping = PC->PlayerInput->AxisMappings[Idx]; if (AxisMapping.AxisName == "Lookup" || AxisMapping.AxisName == "LookupRate" || AxisMapping.AxisName == "Turn" || AxisMapping.AxisName == "TurnRate") { AxisMapping.Scale = (AxisMapping.Scale < 0.0f) ? -GetAimSensitivity() : +GetAimSensitivity(); } } PC->PlayerInput->ForceRebuildingKeyMaps(); //invert it, and if does not equal our bool, invert it again if (PC->PlayerInput->GetInvertAxis("LookupRate") != GetInvertedYAxis()) { PC->PlayerInput->InvertAxis("LookupRate"); } if (PC->PlayerInput->GetInvertAxis("Lookup") != GetInvertedYAxis()) { PC->PlayerInput->InvertAxis("Lookup"); } } }
void FPlayerMuteList::ClientMutePlayer(APlayerController* OwningPC, const FUniqueNetIdRepl& MuteId) { const TSharedPtr<const FUniqueNetId>& PlayerIdToMute = MuteId.GetUniqueNetId(); // Add to the filter list on clients (used for peer to peer voice) AddIdToMuteList(VoicePacketFilter, PlayerIdToMute); // Use the local player to determine the controller id ULocalPlayer* LP = Cast<ULocalPlayer>(OwningPC->Player); if (LP != NULL) { UWorld* World = OwningPC->GetWorld(); IOnlineVoicePtr VoiceInt = Online::GetVoiceInterface(World); if (VoiceInt.IsValid()) { // Have the voice subsystem mute this player VoiceInt->MuteRemoteTalker(LP->GetControllerId(), *PlayerIdToMute, false); } } }
void UAdvancedFriendsLibrary::GetFriend(APlayerController *PlayerController, const FBPUniqueNetId FriendUniqueNetId, FBPFriendInfo &Friend) { if (!PlayerController) { UE_LOG(AdvancedFriendsLog, Warning, TEXT("GetFriend Had a bad Player Controller!")); return; } if (!FriendUniqueNetId.IsValid()) { UE_LOG(AdvancedFriendsLog, Warning, TEXT("GetFriend Had a bad UniqueNetId!")); return; } IOnlineFriendsPtr FriendsInterface = Online::GetFriendsInterface(); if (!FriendsInterface.IsValid()) { UE_LOG(AdvancedFriendsLog, Warning, TEXT("GetFriend Failed to get friends interface!")); return; } ULocalPlayer* Player = Cast<ULocalPlayer>(PlayerController->Player); if (!Player) { UE_LOG(AdvancedFriendsLog, Warning, TEXT("GetFriend failed to get LocalPlayer!")); return; } TSharedPtr<FOnlineFriend> fr = FriendsInterface->GetFriend(Player->GetControllerId(), *FriendUniqueNetId.GetUniqueNetId(), EFriendsLists::ToString(EFriendsLists::Type::Default)); if (fr.IsValid()) { Friend.DisplayName = fr->GetDisplayName(); Friend.OnlineState = ((EBPOnlinePresenceState::Type)((int32)fr->GetPresence().Status.State)); Friend.RealName = fr->GetRealName(); Friend.UniqueNetId.SetUniqueNetId(fr->GetUserId()); Friend.bIsPlayingSameGame = fr->GetPresence().bIsPlayingThisGame; } }
void UUpdateManager::StartPatchCheck() { ensure(ChecksEnabled()); UGameInstance* GameInstance = GetGameInstance(); check(GameInstance); bool bStarted = false; SetUpdateState(EUpdateState::CheckingForPatch); IOnlineSubsystem* OnlineSubConsole = IOnlineSubsystem::GetByPlatform(); if (OnlineSubConsole) { IOnlineIdentityPtr OnlineIdentityConsole = OnlineSubConsole->GetIdentityInterface(); if (OnlineIdentityConsole.IsValid()) { ULocalPlayer* LP = GameInstance->GetFirstGamePlayer(); if (LP != nullptr) { const int32 ControllerId = LP->GetControllerId(); TSharedPtr<const FUniqueNetId> UserId = OnlineIdentityConsole->GetUniquePlayerId(ControllerId); if (UserId.IsValid()) { bStarted = true; OnlineIdentityConsole->GetUserPrivilege(*UserId, EUserPrivileges::CanPlayOnline, IOnlineIdentity::FOnGetUserPrivilegeCompleteDelegate::CreateUObject(this, &ThisClass::OnCheckForPatchComplete, true)); } else { UE_LOG(LogHotfixManager, Warning, TEXT("No valid platform user id when starting patch check!")); } } else { UE_LOG(LogHotfixManager, Warning, TEXT("No local player to perform check!")); } } } else { if (GameInstance->IsDedicatedServerInstance()) { bStarted = true; PatchCheckComplete(EPatchCheckResult::NoPatchRequired); } else { UWorld* World = GetWorld(); IOnlineIdentityPtr IdentityInt = Online::GetIdentityInterface(World); if (IdentityInt.IsValid()) { ULocalPlayer* LP = GameInstance->GetFirstGamePlayer(); if (LP != nullptr) { const int32 ControllerId = LP->GetControllerId(); TSharedPtr<const FUniqueNetId> UserId = IdentityInt->GetUniquePlayerId(ControllerId); if (!bInitialUpdateFinished && !UserId.IsValid()) { // Invalid user for "before title/login" check, underlying code doesn't need a valid user currently UserId = IdentityInt->CreateUniquePlayerId(TEXT("InvalidUser")); } if (UserId.IsValid()) { bStarted = true; IdentityInt->GetUserPrivilege(*UserId, EUserPrivileges::CanPlayOnline, IOnlineIdentity::FOnGetUserPrivilegeCompleteDelegate::CreateUObject(this, &ThisClass::OnCheckForPatchComplete, false)); } else { UE_LOG(LogHotfixManager, Warning, TEXT("No valid user id when starting patch check!")); } } else { UE_LOG(LogHotfixManager, Warning, TEXT("No local player to perform check!")); } } } } if (!bStarted) { // Any failure to call GetUserPrivilege will result in completing the flow via this path PatchCheckComplete(EPatchCheckResult::PatchCheckFailure); } }