mirror of
https://github.com/mordentral/AdvancedSessionsPlugin.git
synced 2025-10-28 19:04:07 +00:00
Added SteamRequestGroupOfficers function to the sessions plugin.
Added GetSteamGroups to the sessions plugin. Added GetSteamFriendGamePlayed function to the sessions plugin. Former-commit-id: 8e553495aa175521d91f9efd6b6432d237796fc9
This commit is contained in:
@@ -17,6 +17,8 @@
|
||||
#undef ARRAY_COUNT
|
||||
|
||||
#include <steam/steam_api.h>
|
||||
#include <steam/isteamapps.h>
|
||||
#include <steam/isteamapplist.h>
|
||||
#include <OnlineSubsystemSteamTypes.h>
|
||||
#pragma pop_macro("ARRAY_COUNT")
|
||||
|
||||
@@ -81,6 +83,75 @@ DEFINE_LOG_CATEGORY(AdvancedSteamFriendsLog);
|
||||
return 0;
|
||||
}*/
|
||||
|
||||
void UAdvancedSteamFriendsLibrary::GetSteamGroups(TArray<FBPSteamGroupInfo> & SteamGroups)
|
||||
{
|
||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
|
||||
|
||||
if (SteamAPI_Init())
|
||||
{
|
||||
int numClans = SteamFriends()->GetClanCount();
|
||||
|
||||
for (int i = 0; i < numClans; i++)
|
||||
{
|
||||
CSteamID SteamGroupID = SteamFriends()->GetClanByIndex(i);
|
||||
|
||||
if(!SteamGroupID.IsValid())
|
||||
continue;
|
||||
|
||||
FBPSteamGroupInfo GroupInfo;
|
||||
|
||||
TSharedPtr<const FUniqueNetId> ValueID(new const FUniqueNetIdSteam(SteamGroupID));
|
||||
GroupInfo.GroupID.SetUniqueNetId(ValueID);
|
||||
SteamFriends()->GetClanActivityCounts(SteamGroupID, &GroupInfo.numOnline, &GroupInfo.numInGame, &GroupInfo.numChatting);
|
||||
GroupInfo.GroupName = FString(UTF8_TO_TCHAR(SteamFriends()->GetClanName(SteamGroupID)));
|
||||
GroupInfo.GroupTag = FString(UTF8_TO_TCHAR(SteamFriends()->GetClanTag(SteamGroupID)));
|
||||
|
||||
SteamGroups.Add(GroupInfo);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void UAdvancedSteamFriendsLibrary::GetSteamFriendGamePlayed(const FBPUniqueNetId UniqueNetId, EBlueprintResultSwitch &Result, FString & GameName, int32 & AppID)
|
||||
{
|
||||
|
||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
|
||||
if (!UniqueNetId.IsValid() || !UniqueNetId.UniqueNetId->IsValid())
|
||||
{
|
||||
UE_LOG(AdvancedSteamFriendsLog, Warning, TEXT("GetSteamFriendGamePlayed Had a bad UniqueNetId!"));
|
||||
Result = EBlueprintResultSwitch::OnFailure;
|
||||
return;
|
||||
}
|
||||
|
||||
if (SteamAPI_Init())
|
||||
{
|
||||
uint64 id = *((uint64*)UniqueNetId.UniqueNetId->GetBytes());
|
||||
|
||||
FriendGameInfo_t GameInfo;
|
||||
bool bIsInGame = SteamFriends()->GetFriendGamePlayed(id, &GameInfo);
|
||||
|
||||
if (bIsInGame && GameInfo.m_gameID.IsValid())
|
||||
{
|
||||
AppID = GameInfo.m_gameID.AppID();
|
||||
|
||||
char NameBuffer[512];
|
||||
int Len = SteamAppList()->GetAppName(GameInfo.m_gameID.AppID(), NameBuffer, 512);
|
||||
|
||||
if (Len != -1) // Invalid
|
||||
{
|
||||
GameName = FString(UTF8_TO_TCHAR(NameBuffer));
|
||||
}
|
||||
|
||||
Result = EBlueprintResultSwitch::OnSuccess;
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
Result = EBlueprintResultSwitch::OnFailure;
|
||||
}
|
||||
|
||||
int32 UAdvancedSteamFriendsLibrary::GetFriendSteamLevel(const FBPUniqueNetId UniqueNetId)
|
||||
{
|
||||
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#include "SteamRequestGroupOfficersCallbackProxy.h"
|
||||
#include "OnlineSubSystemHeader.h"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// UEndSessionCallbackProxy
|
||||
|
||||
USteamRequestGroupOfficersCallbackProxy::USteamRequestGroupOfficersCallbackProxy(const FObjectInitializer& ObjectInitializer)
|
||||
: Super(ObjectInitializer)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
USteamRequestGroupOfficersCallbackProxy* USteamRequestGroupOfficersCallbackProxy::GetSteamGroupOfficerList(UObject* WorldContextObject, FBPUniqueNetId GroupUniqueNetID)
|
||||
{
|
||||
USteamRequestGroupOfficersCallbackProxy* Proxy = NewObject<USteamRequestGroupOfficersCallbackProxy>();
|
||||
|
||||
Proxy->GroupUniqueID = GroupUniqueNetID;
|
||||
return Proxy;
|
||||
}
|
||||
|
||||
void USteamRequestGroupOfficersCallbackProxy::Activate()
|
||||
{
|
||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
|
||||
if (SteamAPI_Init())
|
||||
{
|
||||
uint64 id = *((uint64*)GroupUniqueID.UniqueNetId->GetBytes());
|
||||
SteamAPICall_t hSteamAPICall = SteamFriends()->RequestClanOfficerList(id);
|
||||
m_callResultGroupOfficerRequestDetails.Set(hSteamAPICall, this, &USteamRequestGroupOfficersCallbackProxy::OnRequestGroupOfficerDetails);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
TArray<FBPSteamGroupOfficer> EmptyArray;
|
||||
OnFailure.Broadcast(EmptyArray);
|
||||
}
|
||||
|
||||
void USteamRequestGroupOfficersCallbackProxy::OnRequestGroupOfficerDetails(ClanOfficerListResponse_t *pResult, bool bIOFailure)
|
||||
{
|
||||
TArray<FBPSteamGroupOfficer> OfficerArray;
|
||||
|
||||
#if PLATFORM_WINDOWS || PLATFORM_MAC || PLATFORM_LINUX
|
||||
|
||||
if (bIOFailure || !pResult || !pResult->m_bSuccess)
|
||||
{
|
||||
OnFailure.Broadcast(OfficerArray);
|
||||
return;
|
||||
}
|
||||
|
||||
if (SteamAPI_Init())
|
||||
{
|
||||
uint64 id = *((uint64*)GroupUniqueID.UniqueNetId->GetBytes());
|
||||
|
||||
FBPSteamGroupOfficer Officer;
|
||||
CSteamID ClanOwner = SteamFriends()->GetClanOwner(id);
|
||||
|
||||
Officer.bIsOwner = true;
|
||||
|
||||
TSharedPtr<const FUniqueNetId> ValueID(new const FUniqueNetIdSteam(ClanOwner));
|
||||
Officer.OfficerUniqueNetID.SetUniqueNetId(ValueID);
|
||||
OfficerArray.Add(Officer);
|
||||
|
||||
for (int i = 0; i < pResult->m_cOfficers; i++)
|
||||
{
|
||||
CSteamID OfficerSteamID = SteamFriends()->GetClanOfficerByIndex(id, i);
|
||||
|
||||
Officer.bIsOwner = false;
|
||||
|
||||
TSharedPtr<const FUniqueNetId> ValueID(new const FUniqueNetIdSteam(OfficerSteamID));
|
||||
Officer.OfficerUniqueNetID.SetUniqueNetId(ValueID);
|
||||
|
||||
OfficerArray.Add(Officer);
|
||||
}
|
||||
|
||||
OnSuccess.Broadcast(OfficerArray);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
OnFailure.Broadcast(OfficerArray);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user