自学内容网 自学内容网

【UE】自动添加Megascans所有资产到自己的账户

1. 复制如下代码:

((async (startPage = 0, autoClearConsole = true) => {

  const getCookie = (name) => {
    const value = `; ${document.cookie}`;
    const parts = value.split(`; ${name}=`);
    if (parts.length === 2) return parts.pop().split(';').shift();
  }

  const callCacheApi = async (params = {}) => {
    const defaultParams = {
      page: 0,
      maxValuesPerFacet: 1000,
      hitsPerPage: 1000,
      attributesToRetrieve: ["id", "name"].join(",")
    }
    const response = await fetch("https://proxy-algolia-prod.quixel.com/algolia/cache", {
      "headers": {
        "x-api-key": "2Zg8!d2WAHIUW?pCO28cVjfOt9seOWPx@2j"
      },
      "body": JSON.stringify({
        url: "https://6UJ1I5A072-2.algolianet.com/1/indexes/assets/query?x-algolia-application-id=6UJ1I5A072&x-algolia-api-key=e93907f4f65fb1d9f813957bdc344892",
        params: new URLSearchParams({ ...defaultParams, ...params }).toString()
      }),
      "method": "POST",
    })
    return await response.json()
  }

  const callAcl = async ({ id, name }) => {
    const response = await fetch("https://quixel.com/v1/acl", {
      "headers": {
        "authorization": "Bearer " + authToken,
        "content-type": "application/json;charset=UTF-8",
      },
      "body": JSON.stringify({ assetID: id }),
      "method": "POST",
    });
    const json = await response.json()
    if (json?.isError) {
      console.error(`  --> **UNABLE TO ADD ITEM** Item ${id} | ${name} (${json?.msg})`)
    } else {
      console.log(`  --> ADDED ITEM Item ${id} | ${name}`)
    }
  }

  const callAcquired = async () => {
    const response = await fetch("https://quixel.com/v1/assets/acquired", {
      "headers": {
        "authorization": "Bearer " + authToken,
        "content-type": "application/json;charset=UTF-8",
      },
      "method": "GET",
    });
    return await response.json()
  }

  // 1. Check token exist, quixel API needs it
  console.log("-> Checking Auth API Token...")
  let authToken = ""
  try {
    const authCookie = getCookie("auth") ?? "{}"
    authToken = JSON.parse(decodeURIComponent(authCookie))?.token
    if (!authToken) {
      return console.error("-> Error: cannot find authentication token. Please login again.")
    }
  } catch (_) {
    return console.error("-> Error: cannot find authentication token. Please login again.")
  }

  // 2. Get all currently acquired items
  console.log("-> Get Acquired Items...")
  const acquiredItems = (await callAcquired()).map(a => a.assetID)

  // 3. Get total count of items
  console.log("-> Getting Total Number of Pages....")
  const { nbPages: totalPages, hitsPerPage: itemsPerPage, nbHits: totalItems } = await callCacheApi()


  console.log("-> ==============================================")
  console.log(`-> Total # of items: ${totalItems}`)
  console.log(`-> ${totalPages} total pages with ${itemsPerPage} per page`)
  console.log(`-> Total Items to add: ${(totalItems - acquiredItems.length)}.`)
  console.log("-> ==============================================")

  if (!confirm(`Click OK to start adding ${(totalItems - acquiredItems.length)} items in your account.`)) return

  // Loop
  for (let pageIdx = startPage || 0; pageIdx < totalPages; pageIdx++) {
    console.log(`-> ======================= PAGE ${pageIdx + 1}/${totalPages} START =======================`)

    console.log("-> Getting Items from page " + (pageIdx + 1) + " ...")

    const { hits: items } = await callCacheApi({ page: pageIdx })

    console.log("-> Adding non-acquired items...")

    // Filter out owned items
    const unownedItems = items.filter(i => !acquiredItems.includes(i.id))
    const aclPromises = unownedItems.map(callAcl)

    await Promise.all(aclPromises)
    console.log(`-> ======================= PAGE ${pageIdx + 1}/${totalPages} COMPLETED =======================`)
    if (autoClearConsole) console.clear() // Fix the issue that too much log hangs the console. Set autoClearConsole = false to keep the logs
  }

  console.log("-> Getting new acquired info...")
  // Get acquired items again
  const newItemsAcquired = (await callAcquired()).length
  const newTotalCount = (await callCacheApi()).nbHits

  console.log(`-> Completed. Your account now have a total of ${newItemsAcquired} out of ${newTotalCount} items.`)

  alert(`-> Your account now have a total of ${newItemsAcquired} out of ${newTotalCount} items.\n\nIf you find some items missing, try refresh the page and run the script again.`)
})())

2. 打开 Quixel官网并登陆

3. 进入Quixel Megascans

4. 在第3步的网页中,按F12进入控制台,然后点击“Console”,将第1步复制的代码粘贴到控制台中,然后回车。在弹出的提示框中点击确定,然后等待脚本把所有资产都加入到你的库存(不会占用电脑内存)

参考文章:

https://gist.github.com/jamiephan/0c04986c7f2e62d5c87c4e8c8ce115fc


原文地址:https://blog.csdn.net/ChaoChao66666/article/details/142795026

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!