Ejemplo n.º 1
0
 private static void Fetched(object sender, WorkshopQueryResult result)
 {
     if (RandomLevelDownloader._toFetchIndex == -1)
     {
         RandomLevelDownloader._toFetchIndex = Rando.Int((int)(sender as WorkshopQueryAll).numResultsFetched);
     }
     if (RandomLevelDownloader._toFetchIndex == RandomLevelDownloader._numFetch && Steam.DownloadWorkshopItem(result.details.publishedFile))
     {
         RandomLevelDownloader._downloading = result.details.publishedFile;
     }
     RandomLevelDownloader._currentQuery = (WorkshopQueryAll)null;
     ++RandomLevelDownloader._numFetch;
 }
Ejemplo n.º 2
0
        private static void ResultFetched(object value0, WorkshopQueryResult result)
        {
            if (result == null || result.details == null)
            {
                return;
            }
            WorkshopItem publishedFile = result.details.publishedFile;

            if (publishedFile == null)
            {
                return;
            }
            try
            {
                if ((publishedFile.stateFlags & WorkshopItemState.Installed) == WorkshopItemState.None || !Directory.Exists(publishedFile.path))
                {
                    return;
                }
                foreach (string folder in DuckFile.GetDirectoriesNoCloud(publishedFile.path))
                {
                    ModConfiguration modConfiguration = ModLoader.AttemptModLoad(folder);
                    if (modConfiguration != null)
                    {
                        try
                        {
                            modConfiguration.isWorkshop = true;
                            ModLoader.loadableMods.Add(modConfiguration.uniqueID, modConfiguration);
                        }
                        catch (Exception ex)
                        {
                        }
                    }
                }
            }
            catch (Exception ex)
            {
            }
        }
Ejemplo n.º 3
0
    private unsafe void OnSteamUGCQueryCompleted(SteamUGCQueryCompleted_t queryCompleted, bool ioFailure)
    {
        UGCQueryHandle_t handle = queryCompleted.m_handle;

        if (_handle.m_UGCQueryHandle == 0 || ioFailure)
        {
            goto Finish;
        }

        numResultsTotal = queryCompleted.m_unTotalMatchingResults;
        uint results = queryCompleted.m_unNumResultsReturned;

        if (results == 0 || fetchedData == WorkshopQueryData.TotalOnly)
        {
            goto Finish;
        }

        numResultsFetched += results;
        for (uint resulti = 0; resulti < results; resulti++)
        {
            WorkshopQueryResult result = new WorkshopQueryResult();
            SteamUGC.GetQueryUGCPreviewURL(handle, resulti, out result.previewURL, 260);

            SteamUGCDetails_t ugcDetails;
            SteamUGC.GetQueryUGCResult(queryCompleted.m_handle, resulti, out ugcDetails);
            WorkshopQueryResultDetails resultDetails = result.details = new WorkshopQueryResultDetails();

            resultDetails.acceptedForUse = ugcDetails.m_bAcceptedForUse;
            resultDetails.banned         = ugcDetails.m_bBanned;

            resultDetails.title        = ugcDetails.m_rgchTitle;
            resultDetails.description  = ugcDetails.m_rgchDescription;
            resultDetails.steamIDOwner = ugcDetails.m_ulSteamIDOwner;
            resultDetails.score        = ugcDetails.m_flScore;
            resultDetails.visibility   = ugcDetails.m_eVisibility;
            resultDetails.votesDown    = ugcDetails.m_unVotesDown;
            resultDetails.votesUp      = ugcDetails.m_unVotesUp;

            resultDetails.tags          = ugcDetails.m_rgchTags.Split(',');
            resultDetails.tagsTruncated = ugcDetails.m_bTagsTruncated;

            resultDetails.timeAddedToUserList = ugcDetails.m_rtimeAddedToUserList;
            resultDetails.timeCreated         = ugcDetails.m_rtimeCreated;
            resultDetails.timeUpdated         = ugcDetails.m_rtimeUpdated;

            resultDetails.file     = ugcDetails.m_hFile.m_UGCHandle;
            resultDetails.fileName = ugcDetails.m_pchFileName;
            resultDetails.fileSize = ugcDetails.m_nFileSize;
            resultDetails.fileType = ugcDetails.m_eFileType;

            resultDetails.numChildren = ugcDetails.m_unNumChildren;

            resultDetails.previewFile     = ugcDetails.m_hPreviewFile.m_UGCHandle;
            resultDetails.previewFileSize = ugcDetails.m_nPreviewFileSize;

            resultDetails.URL = ugcDetails.m_rgchURL;

            resultDetails.publishedFile = WorkshopItem.GetItem(ugcDetails.m_nPublishedFileId);

            resultDetails.result = ugcDetails.m_eResult;

            if ((fetchedData & WorkshopQueryData.Children) != 0)
            {
                PublishedFileId_t[] children = new PublishedFileId_t[resultDetails.numChildren];
                if (SteamUGC.GetQueryUGCChildren(handle, resulti, children, (uint)children.Length))
                {
                    result.fileList = _.GetArray(children, id => WorkshopItem.GetItem(id));
                }
            }

            if ((fetchedData & WorkshopQueryData.Metadata) != 0)
            {
                SteamUGC.GetQueryUGCMetadata(handle, resulti, out result.metadata, 260);
            }

            if ((fetchedData & WorkshopQueryData.AdditionalPreviews) != 0)
            {
                WorkshopQueryResultAdditionalPreview[] previews = result.additionalPreviews = new WorkshopQueryResultAdditionalPreview[SteamUGC.GetQueryUGCNumAdditionalPreviews(handle, resulti)];
                for (uint previewi = 0; previewi < previews.Length; previewi++)
                {
                    string           url;
                    string           name;
                    EItemPreviewType type;
                    if (SteamUGC.GetQueryUGCAdditionalPreview(handle, resulti, previewi, out url, 260, out name, 260, out type))
                    {
                        previews[previewi] = new WorkshopQueryResultAdditionalPreview(type == EItemPreviewType.k_EItemPreviewType_Image, url);
                    }
                }
            }

            if ((fetchedData & WorkshopQueryData.Statistics) != 0)
            {
                uint[] stats = result.statistics = new uint[8];
                for (WorkshopResultStatistic stat = WorkshopResultStatistic.NumSubscriptions; (int)stat < stats.Length; stat++)
                {
                    ulong val;
                    if (SteamUGC.GetQueryUGCStatistic(handle, resulti, (EItemStatistic)stat, out val))
                    {
                        stats[(int)stat] = (uint)val;
                    }
                }
            }

            ResultFetched?.Invoke(this, result);
        }

        if (numResultsFetched != numResultsTotal && !justOnePage)
        {
            Destroy();
            page++;
            Create();
            Request();
            return;
        }

Finish:
        QueryFinished?.Invoke(this);
    }