Exemplo n.º 1
0
        // TODO make this share code with FeaturedWorkshopItems
        public static void GetWorkShopItem(ulong publishedFileId, WorkShopItemHandler handleItem)
        {
            PublishedFileId_t[] fileIds     = new PublishedFileId_t[] { new PublishedFileId_t(publishedFileId) };
            UGCQueryHandle_t    queryHandle = SteamUGC.CreateQueryUGCDetailsRequest(fileIds, (uint)fileIds.Length);

            Steamworks.CallResult <Steamworks.SteamUGCQueryCompleted_t> .APIDispatchDelegate onQueryCompleted = (SteamUGCQueryCompleted_t p_callback, bool p_bIOFailure) =>
            {
                OnQueryCompleted(p_callback, p_bIOFailure, handleItem, publishedFileId);
            };
            SteamWorkshopMain.Instance.Execute <SteamUGCQueryCompleted_t>(SteamUGC.SendQueryUGCRequest(queryHandle), onQueryCompleted);
        }
Exemplo n.º 2
0
        private static void OnQueryCompleted(SteamUGCQueryCompleted_t p_callback, bool p_bIOFailure, WorkShopItemHandler handleItem, ulong requestedFileId)
        {
            if (p_bIOFailure || p_callback.m_eResult != EResult.k_EResultOK)
            {
                Util.LogError($"Failed to query workshop item {requestedFileId}. Result code: {p_callback.m_eResult}");
                handleItem(Util.Maybe <WorkshopItem> .CreateEmpty());
                return;
            }

            // There should just be 1..but doesn't hurt.
            for (uint i = 0; i < p_callback.m_unNumResultsReturned; i++)
            {
                SteamUGCDetails_t itemDetails;
                if (SteamUGC.GetQueryUGCResult(p_callback.m_handle, i, out itemDetails))
                {
                    if (itemDetails.m_eResult != Steamworks.EResult.k_EResultOK)
                    {
                        Util.LogError($"Something is wrong with workshop item {requestedFileId} - returning empty. Result code: {itemDetails.m_eResult}");
                        handleItem(Util.Maybe <WorkshopItem> .CreateEmpty());
                    }
                    else
                    {
                        WorkshopItem item = SteamWorkshopMain.Instance.RegisterQueryResultItem(p_callback.m_handle, i, itemDetails);
                        handleItem(Util.Maybe <WorkshopItem> .CreateWith(item));
                    }
                }
                else
                {
                    Util.LogError($"Could not query details of workshop item {requestedFileId} - returning empty. Result code: {itemDetails.m_eResult}");
                    handleItem(Util.Maybe <WorkshopItem> .CreateEmpty());
                }
            }
        }