Greasy Fork

Greasy Fork is available in English.

恢复求生之路2创意工坊订阅

通过本地workshop文件夹恢复求生之路2创意工坊订阅

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         恢复求生之路2创意工坊订阅
// @namespace    http://tampermonkey.net/
// @version      2024-01-11
// @description  通过本地workshop文件夹恢复求生之路2创意工坊订阅
// @author       blade_
// @match        https://steamcommunity.com/app/550/workshop/
// @icon         https://www.google.com/s2/favicons?sz=64&domain=greasyfork.org
// @grant        GM_registerMenuCommand
// @license      MIT
// ==/UserScript==

function sleep (time) {
  return new Promise((resolve) => setTimeout(resolve, time));
}

function getSessionValue(sessionName) {
    var cookies = document.cookie.split(';');
    for (var i = 0; i < cookies.length; i++) {
        var cookie = cookies[i].trim();
        if (cookie.indexOf(sessionName + '=') === 0) {
            return cookie.substring(sessionName.length + 1);
        }
    }
    return null;
}

async function getWoekshop() {
    // open directory picker
    const dirHandle = await window.showDirectoryPicker({mode:"readwrite"});
    return dirHandle;
}

async function getModList(dirHandle){
    //console.log(dirHandle)
    for await (const item of dirHandle.values()) {
        if (item.kind == 'file') {
            item.getFile().then(recovery)
            sleep(20)
        }
    }
}

async function recovery(fileHanlde){
    //console.log(fileHanlde)
    if(fileHanlde.type == 'image/jpeg') {
        let idx = fileHanlde.name.indexOf('.jpg')
        let modid = fileHanlde.name.substr(0, idx)
        subscribe(modid)
    }
}

function subscribe(modid){
    let sessionId = getSessionValue('sessionid')
    if(!sessionId) {
        console.log("sessionid not fond, key: sessionid")
    }
    // 创建请求数据
    const data = {
        id: modid,
        sessionid: sessionId,
        appid: 550,
        include_dependencies: false
    };
    // 发送添加到集合的请求
    jQuery.ajax({
        type: "POST",
        url: 'https://steamcommunity.com/sharedfiles/subscribe',
        data: data,
        success: function(response){
            if(response.success === 1){
                console.log('subscribe successfly, id:', modid)
            }else {
                console.log('subscribe failedid:', modid)
            }
        }
    });
}

function unsubscribe(modid){
    let sessionId = getSessionValue('sessionid')
    if(!sessionId) {
        console.log("sessionid not fond, key: sessionid")
    }
    // 创建请求数据
    const data = {
        id: modid,
        sessionid: sessionId,
        appid: 550,
    };
    // 发送添加到集合的请求
    jQuery.ajax({
        type: "POST",
        url: 'https://steamcommunity.com/sharedfiles/unsubscribe',
        data: data,
        success: function(response){
            if(response.success === 1){
                console.log('unsubscribe successfly, id:', modid)
            }else {
                console.log('unsubscribe failedid:', modid)
            }
        }
    });
}

(function() {
    'use strict';
    // Your code here...
    const button = document.createElement('button');
    button.innerText = "恢复求生之路创意工坊订阅";
    document.body.firstChild.after(button);
    button.addEventListener('click', async function () {
        getWoekshop().then(getModList)
    });
    // GM_registerMenuCommand('测试订阅功能(modid:3131682175)',()=>{
    //     subscribe(3131682175)
    // })
    // GM_registerMenuCommand('测试取消订阅(modid:3131682175)',()=>{
    //     unsubscribe(3131682175)
    // })
    // GM_registerMenuCommand('测试延时功能(倒数10s)',async()=>{
    //     for(let i = 10; i >= 0; i--) {
    //         console.log("countdown:",i)
    //         await sleep(1000)
    //     }
    // })
})();