mirror of
				https://github.com/mordentral/AdvancedSessionsPlugin.git
				synced 2025-10-26 18:04:07 +00:00 
			
		
		
		
	Compare commits
	
		
			3 Commits
		
	
	
		
			4.23_Locke
			...
			4.18_Locke
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | f89a7148fa | ||
|   | 2711aaaba7 | ||
|   | 717e82ea04 | 
| @@ -29,6 +29,41 @@ enum class SteamAvatarSize : uint8 | ||||
| 	SteamAvatar_Large = 3 | ||||
| }; | ||||
|  | ||||
| UENUM(Blueprintable) | ||||
| enum class ESteamUserOverlayType : uint8 | ||||
| { | ||||
| 	/*Opens the overlay web browser to the specified user or groups profile.*/ | ||||
| 	steamid, | ||||
| 	/*Opens a chat window to the specified user, or joins the group chat.*/ | ||||
| 	chat, | ||||
| 	/*Opens a window to a Steam Trading session that was started with the ISteamEconomy / StartTrade Web API.*/ | ||||
| 	jointrade, | ||||
| 	/*Opens the overlay web browser to the specified user's stats.*/ | ||||
| 	stats, | ||||
| 	/*Opens the overlay web browser to the specified user's achievements.*/ | ||||
| 	achievements, | ||||
| 	/*Opens the overlay in minimal mode prompting the user to add the target user as a friend.*/ | ||||
| 	friendadd, | ||||
| 	/*Opens the overlay in minimal mode prompting the user to remove the target friend.*/ | ||||
| 	friendremove, | ||||
| 	/*Opens the overlay in minimal mode prompting the user to accept an incoming friend invite.*/ | ||||
| 	friendrequestaccept, | ||||
| 	/*Opens the overlay in minimal mode prompting the user to ignore an incoming friend invite.*/ | ||||
| 	friendrequestignore | ||||
| }; | ||||
|  | ||||
| static FString EnumToString(const FString& enumName, uint8 value) | ||||
| { | ||||
| 	const UEnum* EnumPtr = FindObject<UEnum>(ANY_PACKAGE, *enumName, true); | ||||
|  | ||||
| 	if (!EnumPtr) | ||||
| 		return FString(); | ||||
|  | ||||
| 	FString EnumName = EnumPtr->GetNameStringByIndex(value); | ||||
| 	return EnumName; | ||||
| } | ||||
|  | ||||
|  | ||||
| USTRUCT(BlueprintType, Category = "Online|SteamAPI|SteamGroups") | ||||
| struct FBPSteamGroupInfo | ||||
| { | ||||
| @@ -68,6 +103,10 @@ public: | ||||
| 	// Preloads the avatar and name of a steam friend, return whether it is already available or not, STEAM ONLY, Takes time to actually load everything after this is called. | ||||
| 	UFUNCTION(BlueprintCallable, Category = "Online|AdvancedFriends|SteamAPI") | ||||
| 	static bool RequestSteamFriendInfo(const FBPUniqueNetId UniqueNetId, bool bRequireNameOnly = false); | ||||
|  | ||||
| 	// Opens the steam overlay to go to the specified user dialog | ||||
| 	UFUNCTION(BlueprintCallable, Category = "Online|AdvancedFriends|SteamAPI") | ||||
| 		static bool OpenSteamUserOverlay(const FBPUniqueNetId UniqueNetId, ESteamUserOverlayType DialogType); | ||||
| 	 | ||||
| 	// Gets the level of a friends steam account, STEAM ONLY, Returns -1 if the steam level is not known, might need RequestSteamFriendInfo called first. | ||||
| 	UFUNCTION(BlueprintCallable, Category = "Online|AdvancedFriends|SteamAPI") | ||||
|   | ||||
| @@ -227,6 +227,25 @@ public: | ||||
| 		CreatorSteamID = FString::Printf(TEXT("%llu"), hUGCDetails.m_ulSteamIDOwner); | ||||
| 	} | ||||
|  | ||||
| 	FBPSteamWorkshopItemDetails(const SteamUGCDetails_t &hUGCDetails) | ||||
| 	{ | ||||
| 		ResultOfRequest = (FBPSteamResult)hUGCDetails.m_eResult; | ||||
| 		FileType = (FBPWorkshopFileType)hUGCDetails.m_eFileType; | ||||
| 		CreatorAppID = (int32)hUGCDetails.m_nCreatorAppID; | ||||
| 		ConsumerAppID = (int32)hUGCDetails.m_nConsumerAppID; | ||||
| 		Title = FString(hUGCDetails.m_rgchTitle, k_cchPublishedDocumentTitleMax); | ||||
| 		Description = FString(hUGCDetails.m_rgchDescription, k_cchPublishedDocumentDescriptionMax); | ||||
| 		ItemUrl = FString(hUGCDetails.m_rgchURL, k_cchPublishedFileURLMax); | ||||
| 		VotesUp = (int32)hUGCDetails.m_unVotesUp; | ||||
| 		VotesDown = (int32)hUGCDetails.m_unVotesDown; | ||||
| 		CalculatedScore = hUGCDetails.m_flScore; | ||||
| 		bBanned = hUGCDetails.m_bBanned; | ||||
| 		bAcceptedForUse = hUGCDetails.m_bAcceptedForUse; | ||||
| 		bTagsTruncated = hUGCDetails.m_bTagsTruncated; | ||||
|  | ||||
| 		CreatorSteamID = FString::Printf(TEXT("%llu"), hUGCDetails.m_ulSteamIDOwner); | ||||
| 	} | ||||
|  | ||||
| 	// Result of obtaining the details | ||||
| 	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Online|AdvancedSteamWorkshop") | ||||
| 		FBPSteamResult ResultOfRequest; | ||||
|   | ||||
| @@ -17,6 +17,8 @@ | ||||
|  | ||||
| #if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX | ||||
|  | ||||
| #include "OnlineSubsystemSteam.h" | ||||
|  | ||||
| #pragma push_macro("ARRAY_COUNT") | ||||
| #undef ARRAY_COUNT | ||||
|  | ||||
|   | ||||
| @@ -18,6 +18,8 @@ | ||||
|  | ||||
| #if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX | ||||
|  | ||||
| #include "OnlineSubsystemSteam.h" | ||||
|  | ||||
| #pragma push_macro("ARRAY_COUNT") | ||||
| #undef ARRAY_COUNT | ||||
|  | ||||
|   | ||||
| @@ -50,7 +50,7 @@ DEFINE_LOG_CATEGORY(AdvancedSteamFriendsLog); | ||||
| { | ||||
|  | ||||
| #if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX | ||||
| 	if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid()) | ||||
| 	if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid() || UniqueNetId.UniqueNetId->GetType() != STEAM_SUBSYSTEM) | ||||
| 	{ | ||||
| 		UE_LOG(AdvancedSteamFriendsLog, Warning, TEXT("IsAFriend Had a bad UniqueNetId!")); | ||||
| 		return 0; | ||||
| @@ -128,7 +128,7 @@ void UAdvancedSteamFriendsLibrary::GetSteamFriendGamePlayed(const FBPUniqueNetId | ||||
| { | ||||
|  | ||||
| #if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX | ||||
| 	if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid()) | ||||
| 	if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid() || UniqueNetId.UniqueNetId->GetType() != STEAM_SUBSYSTEM) | ||||
| 	{ | ||||
| 		UE_LOG(AdvancedSteamFriendsLog, Warning, TEXT("GetSteamFriendGamePlayed Had a bad UniqueNetId!")); | ||||
| 		Result = EBlueprintResultSwitch::OnFailure; | ||||
| @@ -168,7 +168,7 @@ int32 UAdvancedSteamFriendsLibrary::GetFriendSteamLevel(const FBPUniqueNetId Uni | ||||
| { | ||||
|  | ||||
| #if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX | ||||
| 	if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid()) | ||||
| 	if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid() || UniqueNetId.UniqueNetId->GetType() != STEAM_SUBSYSTEM) | ||||
| 	{ | ||||
| 		UE_LOG(AdvancedSteamFriendsLog, Warning, TEXT("IsAFriend Had a bad UniqueNetId!")); | ||||
| 		return 0; | ||||
| @@ -189,7 +189,7 @@ FString UAdvancedSteamFriendsLibrary::GetSteamPersonaName(const FBPUniqueNetId U | ||||
| { | ||||
|  | ||||
| #if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX | ||||
| 	if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid()) | ||||
| 	if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid() || UniqueNetId.UniqueNetId->GetType() != STEAM_SUBSYSTEM) | ||||
| 	{ | ||||
| 		UE_LOG(AdvancedSteamFriendsLog, Warning, TEXT("GetSteamPersonaName Had a bad UniqueNetId!")); | ||||
| 		return FString(TEXT("")); | ||||
| @@ -234,7 +234,7 @@ FBPUniqueNetId UAdvancedSteamFriendsLibrary::CreateSteamIDFromString(const FStri | ||||
| bool UAdvancedSteamFriendsLibrary::RequestSteamFriendInfo(const FBPUniqueNetId UniqueNetId, bool bRequireNameOnly) | ||||
| { | ||||
| #if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX | ||||
| 	if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid()) | ||||
| 	if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid() || UniqueNetId.UniqueNetId->GetType() != STEAM_SUBSYSTEM) | ||||
| 	{ | ||||
| 		UE_LOG(AdvancedSteamFriendsLog, Warning, TEXT("RequestSteamFriendInfo Had a bad UniqueNetId!")); | ||||
| 		return false; | ||||
| @@ -252,10 +252,33 @@ bool UAdvancedSteamFriendsLibrary::RequestSteamFriendInfo(const FBPUniqueNetId U | ||||
| 	return false; | ||||
| } | ||||
|  | ||||
|  | ||||
| bool UAdvancedSteamFriendsLibrary::OpenSteamUserOverlay(const FBPUniqueNetId UniqueNetId, ESteamUserOverlayType DialogType) | ||||
| { | ||||
| #if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX | ||||
| 	if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid() || UniqueNetId.UniqueNetId->GetType() != STEAM_SUBSYSTEM) | ||||
| 	{ | ||||
| 		UE_LOG(AdvancedSteamFriendsLog, Warning, TEXT("OpenSteamUserOverlay Had a bad UniqueNetId!")); | ||||
| 		return false; | ||||
| 	} | ||||
|  | ||||
| 	if (SteamAPI_Init()) | ||||
| 	{ | ||||
| 		uint64 id = *((uint64*)UniqueNetId.UniqueNetId->GetBytes()); | ||||
| 		FString DialogName = EnumToString("ESteamUserOverlayType", (uint8)DialogType); | ||||
| 		SteamFriends()->ActivateGameOverlayToUser(TCHAR_TO_ANSI(*DialogName), id); | ||||
| 		return true; | ||||
| 	} | ||||
| #endif | ||||
|  | ||||
| 	UE_LOG(AdvancedSteamFriendsLog, Warning, TEXT("OpenSteamUserOverlay Couldn't init steamAPI!")); | ||||
| 	return false; | ||||
| } | ||||
|  | ||||
| UTexture2D * UAdvancedSteamFriendsLibrary::GetSteamFriendAvatar(const FBPUniqueNetId UniqueNetId, EBlueprintAsyncResultSwitch &Result, SteamAvatarSize AvatarSize) | ||||
| { | ||||
| #if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX | ||||
| 	if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid()) | ||||
| 	if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid() || UniqueNetId.UniqueNetId->GetType() != STEAM_SUBSYSTEM) | ||||
| 	{ | ||||
| 		UE_LOG(AdvancedSteamFriendsLog, Warning, TEXT("GetSteamFriendAvatar Had a bad UniqueNetId!")); | ||||
| 		Result = EBlueprintAsyncResultSwitch::OnFailure; | ||||
|   | ||||
| @@ -46,10 +46,20 @@ void USteamRequestGroupOfficersCallbackProxy::OnRequestGroupOfficerDetails(ClanO | ||||
| 	TArray<FBPSteamGroupOfficer> OfficerArray; | ||||
|  | ||||
| #if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX | ||||
| 	 | ||||
| 	FOnlineSubsystemSteam* SteamSubsystem = (FOnlineSubsystemSteam*)(IOnlineSubsystem::Get(STEAM_SUBSYSTEM)); | ||||
|  | ||||
| 	if (bIOFailure || !pResult || !pResult->m_bSuccess) | ||||
| 	{ | ||||
| 		OnFailure.Broadcast(OfficerArray); | ||||
| 		if (SteamSubsystem != nullptr) | ||||
| 		{ | ||||
| 			SteamSubsystem->ExecuteNextTick([this]() | ||||
| 			{ | ||||
| 				TArray<FBPSteamGroupOfficer> FailureArray; | ||||
| 				OnFailure.Broadcast(FailureArray); | ||||
| 			}); | ||||
| 		} | ||||
| 		//OnFailure.Broadcast(OfficerArray); | ||||
| 		return; | ||||
| 	} | ||||
|  | ||||
| @@ -78,11 +88,31 @@ void USteamRequestGroupOfficersCallbackProxy::OnRequestGroupOfficerDetails(ClanO | ||||
| 			OfficerArray.Add(Officer); | ||||
| 		} | ||||
|  | ||||
| 		OnSuccess.Broadcast(OfficerArray); | ||||
| 		if (SteamSubsystem != nullptr) | ||||
| 		{ | ||||
| 			SteamSubsystem->ExecuteNextTick([OfficerArray, this]() | ||||
| 			{ | ||||
| 				OnSuccess.Broadcast(OfficerArray); | ||||
| 			}); | ||||
| 		} | ||||
|  | ||||
| 		//OnSuccess.Broadcast(OfficerArray); | ||||
| 		return; | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		if (SteamSubsystem != nullptr) | ||||
| 		{ | ||||
| 			SteamSubsystem->ExecuteNextTick([this]() | ||||
| 			{ | ||||
| 				TArray<FBPSteamGroupOfficer> FailureArray; | ||||
| 				OnFailure.Broadcast(FailureArray); | ||||
| 			}); | ||||
| 		} | ||||
| 	} | ||||
| #endif | ||||
|  | ||||
| 	OnFailure.Broadcast(OfficerArray); | ||||
| 	// Should never hit this anyway | ||||
| 	//OnFailure.Broadcast(OfficerArray); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -49,23 +49,51 @@ void USteamWSRequestUGCDetailsCallbackProxy::Activate() | ||||
| void USteamWSRequestUGCDetailsCallbackProxy::OnUGCRequestUGCDetails(SteamUGCQueryCompleted_t *pResult, bool bIOFailure) | ||||
| { | ||||
| #if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX | ||||
| 	 | ||||
| 	FOnlineSubsystemSteam* SteamSubsystem = (FOnlineSubsystemSteam*)(IOnlineSubsystem::Get(STEAM_SUBSYSTEM)); | ||||
|  | ||||
| 	if (bIOFailure || !pResult || pResult->m_unNumResultsReturned <= 0) | ||||
| 	{ | ||||
| 		OnFailure.Broadcast(FBPSteamWorkshopItemDetails()); | ||||
| 	{ | ||||
| 		if (SteamSubsystem != nullptr) | ||||
| 		{ | ||||
| 			SteamSubsystem->ExecuteNextTick([this]() | ||||
| 			{ | ||||
| 				OnFailure.Broadcast(FBPSteamWorkshopItemDetails()); | ||||
| 			}); | ||||
| 		} | ||||
| 		//OnFailure.Broadcast(FBPSteamWorkshopItemDetails()); | ||||
| 		return; | ||||
| 	} | ||||
| 	if (SteamAPI_Init()) | ||||
| 	{ | ||||
| 		SteamUGCDetails_t Details; | ||||
| 		if (SteamUGC()->GetQueryUGCResult(pResult->m_handle, 0, &Details)) | ||||
| 		{ | ||||
| 			OnSuccess.Broadcast(FBPSteamWorkshopItemDetails(Details)); | ||||
| 		{ | ||||
| 			if (SteamSubsystem != nullptr) | ||||
| 			{ | ||||
| 				SteamSubsystem->ExecuteNextTick([Details, this]() | ||||
| 				{ | ||||
| 					OnSuccess.Broadcast(FBPSteamWorkshopItemDetails(Details)); | ||||
| 				}); | ||||
| 			} | ||||
|  | ||||
| 			//OnSuccess.Broadcast(FBPSteamWorkshopItemDetails(Details)); | ||||
| 			return; | ||||
| 		} | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		if (SteamSubsystem != nullptr) | ||||
| 		{ | ||||
| 			SteamSubsystem->ExecuteNextTick([this]() | ||||
| 			{ | ||||
| 				OnFailure.Broadcast(FBPSteamWorkshopItemDetails()); | ||||
| 			}); | ||||
| 		} | ||||
| 	} | ||||
| #endif | ||||
|  | ||||
| 	OnFailure.Broadcast(FBPSteamWorkshopItemDetails()); | ||||
| 	// Not needed, should never hit here | ||||
| 	//OnFailure.Broadcast(FBPSteamWorkshopItemDetails()); | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user