rlabrecque / Steamworks.NET

Steamworks wrapper for Unity / C#
http://steamworks.github.io
MIT License
2.78k stars 366 forks source link

GetWorkshopEULAStatus always returns k_EResultInvalidParam #538

Open Phoenixx19 opened 1 year ago

Phoenixx19 commented 1 year ago

Following side by side the Test example and the Steamworks Documentation, I was trying to prompt the user to enable their EULA status (if they haven't already). That being said, the callback always gives me k_EResultInvalidParam as result, I've left the code snippets below even though I've tested the test example snippets too and it still returns the same issue.

I'm using:

Initialization

public static void Init()
{
    // ...

    SteamAPICall_t handle = SteamUGC.GetWorkshopEULAStatus();
    eula.Set(handle);

    // ...
}

Variable creation and callback

#region eula
        private static CallResult<WorkshopEULAStatus_t> eula = CallResult<WorkshopEULAStatus_t>.Create(OnReturnEULA);

        private static void OnReturnEULA(WorkshopEULAStatus_t p_result, bool bIOFailure)
        {
            // ok result by steam api
            if (p_result.m_eResult == EResult.k_EResultOK && !bIOFailure)
            {
               // "True if the user needs to accept the latest Workshop EULA, false otherwise."
               if (p_result.m_bNeedsAction)
               {
                    if (MessageBox.Show(
                        "In order to have your item publicly available, you need to agree on the Steam EULA Agreement",
                        "Steam EULA Agreement",
                        MessageBoxButtons.YesNo,
                        MessageBoxIcon.Warning)
                            == DialogResult.Yes)
                    {
                        System.Diagnostics.Process.Start("https://steamcommunity.com/sharedfiles/workshoplegalagreement");
                    }
               }
            }
        }
#endregion

Let me know if I messed up something. Thanks for your time!

Phoenixx19 commented 1 year ago

This is definitely not a problem in my code since I tried on your Steamworks.NET Standalone project as well returning the same issue.

image

Program.cs file

using System;
using System.Threading;
using Steamworks;

namespace SteamworksNET_StandaloneTest {
    class Program {
        static CallResult m_NumberOfCurrentPlayers;
        static CallResult m_callResultFindLeaderboard;
        static Callback m_PersonaStateChange;
        static Callback m_UserStatsReceived;
        static CallResult m_WorkshopEULAStatus;

        static void InitializeCallbacks() {
            m_NumberOfCurrentPlayers = CallResult.Create(OnNumberOfCurrentPlayers);
            m_callResultFindLeaderboard = CallResult.Create(OnFindLeaderboard);
            m_PersonaStateChange = Callback.Create(OnPersonaStateChange);
            m_WorkshopEULAStatus = CallResult.Create(OnEulaStatus);
            m_UserStatsReceived = Callback.Create(
                (pCallback) => {
                    Console.WriteLine("[" + UserStatsReceived_t.k_iCallback + " - UserStatsReceived] - " + pCallback.m_eResult + " -- " + pCallback.m_nGameID + " -- " + pCallback.m_steamIDUser);
                });
        }

        static void Main(string[] args) {
            try {
                if (!SteamAPI.Init()) {
                    Console.WriteLine("SteamAPI.Init() failed!");
                    return;
                }
            }
            catch (DllNotFoundException e) { // We check this here as it will be the first instance of it.
                Console.WriteLine(e);
                return;
            }

            if (!Packsize.Test()) {
                Console.WriteLine("You're using the wrong Steamworks.NET Assembly for this platform!");
                return;
            }

            if (!DllCheck.Test()) {
                Console.WriteLine("You're using the wrong dlls for this platform!");
                return;
            }

            InitializeCallbacks(); // We do this after SteamAPI.Init() has occured

            Console.WriteLine("Requesting Current Stats - " + SteamUserStats.RequestCurrentStats());

            Console.WriteLine("CurrentGameLanguage: " + SteamApps.GetCurrentGameLanguage());
            Console.WriteLine("PersonaName: " + SteamFriends.GetPersonaName());

            {
                string folder;
                uint length = SteamApps.GetAppInstallDir(SteamUtils.GetAppID(), out folder, 260);
                Console.WriteLine("AppInstallDir: " + length + " " + folder);
            }

            m_NumberOfCurrentPlayers.Set(SteamUserStats.GetNumberOfCurrentPlayers());
            Console.WriteLine("Requesting Number of Current Players");

            {
                SteamAPICall_t hSteamAPICall = SteamUserStats.FindLeaderboard("Quickest Win");
                m_callResultFindLeaderboard.Set(hSteamAPICall);
                Console.WriteLine("Requesting Leaderboard");
            }

            m_WorkshopEULAStatus.Set(SteamUGC.GetWorkshopEULAStatus());
            Console.WriteLine("Request EULA Status");

            while (true) {
                // Must be called from the primary thread.
                SteamAPI.RunCallbacks();

                if (Console.KeyAvailable) {
                    ConsoleKeyInfo info = Console.ReadKey(true);

                    if (info.Key == ConsoleKey.Escape) {
                        break;
                    }
                    else if (info.Key == ConsoleKey.Spacebar) {
                        SteamUserStats.RequestCurrentStats();
                        Console.WriteLine("Requesting Current Stats");
                    }
                    else if (info.Key == ConsoleKey.D1) {
                        SteamAPICall_t hSteamAPICall = SteamUserStats.FindLeaderboard("Quickest Win");
                        m_callResultFindLeaderboard.Set(hSteamAPICall);
                        Console.WriteLine("FindLeaderboard() - " + hSteamAPICall);
                    }
                    else if (info.Key == ConsoleKey.D2) {
                        SteamAPICall_t hSteamAPICall = SteamUserStats.GetNumberOfCurrentPlayers();
                        m_NumberOfCurrentPlayers.Set(hSteamAPICall);
                        Console.WriteLine("GetNumberOfCurrentPlayers() - " + hSteamAPICall);
                    }
                }

                Thread.Sleep(50);
            }
            SteamAPI.Shutdown();
        }

        static void OnEulaStatus(WorkshopEULAStatus_t pCallback, bool bIOFailure)
        {
            Console.WriteLine("[" + WorkshopEULAStatus_t.k_iCallback + " - WorkshopEULAStatus] - " + pCallback.m_eResult + " -- " + pCallback.m_nAppID + " -- " + pCallback.m_unVersion + " -- " + pCallback.m_rtAction + " -- " + pCallback.m_bAccepted + " -- " + pCallback.m_bNeedsAction);
        }

        static void OnNumberOfCurrentPlayers(NumberOfCurrentPlayers_t pCallback, bool bIOFailure) {
            Console.WriteLine("[" + NumberOfCurrentPlayers_t.k_iCallback + " - NumberOfCurrentPlayers] - " + pCallback.m_bSuccess + " -- " + pCallback.m_cPlayers);
        }

        static void OnFindLeaderboard(LeaderboardFindResult_t pCallback, bool bIOFailure) {
            Console.WriteLine("[" + LeaderboardFindResult_t.k_iCallback + " - LeaderboardFindResult] - " + pCallback.m_bLeaderboardFound + " -- " + pCallback.m_hSteamLeaderboard);
        }

        static void OnPersonaStateChange(PersonaStateChange_t pCallback) {
            Console.WriteLine("[" + PersonaStateChange_t.k_iCallback + " - PersonaStateChange] - " + pCallback.m_ulSteamID + " -- " + pCallback.m_nChangeFlags);
        }
    }
}