gta jobs filter

GTA 差事过滤 简单增强

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         gta jobs filter
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  GTA 差事过滤 简单增强
// @author       alvin
// @match        https://*.socialclub.rockstargames.com/jobs*
// @grant        none
// @require      http://code.jquery.com/jquery-2.1.1.min.js
// ==/UserScript==

(function() {
    'use strict';

    let timer;

    // 把格式化的数字字符串逆转为数值
    function unitFormat(input) {
        let unit = input.substr(input.length-1, 1);
        if (unit == 'k' || unit == 'K') {
            return parseFloat(input.substr(0, input.length-1)) * 1000;
        } else if (unit == 'm' || unit == 'M') {
            return parseFloat(input.substr(0, input.length-1)) * 1000000;
        } else if (unit == 'g' || unit == 'G') {
            return parseFloat(input.substr(0, input.length-1)) * 1000000000;
        }
        return parseFloat(input);
    }

    // 自定义保留几位小数
    function number(data, val) {
        let factor = 1;
        for (let i = 0; i < val; i++) {
            factor = factor * 10;
        }
        return Math.floor(data * factor) / factor;
    }

    // 过滤毛子语
    function russianFilter(content) {
        if(/[а-яА-ЯЁё]/.test(content)){
            return true;
        }
        return false;
    }

    // 定时修改隐藏已经修改的
    function updateJobsList(FILTER_MIN, FILTER_MAX, FILTER_PLAY, FILTER_COLLECTED, FILTER_PLAYED, FILTER_RUSSIA)
    {
        // 执行过滤
        $.each($('.UI__Card__card'), function(i,value){
            // 点赞数
            let liked = $(value).find('span')[1].innerHTML;
            liked = unitFormat(liked);

            // 点踩数
            let unliked = $(value).find('span')[3].innerHTML;
            unliked = unitFormat(unliked);

            // 总评价数
            let all = liked + unliked;

            // 好评率
            let rate = all != 0 ? (liked / all).toFixed(2) : 0;

            let mark = false;

            if (FILTER_MIN != 0 && rate < FILTER_MIN) {     // 好评率最小值过滤
                mark = true;
            }
            if (FILTER_MAX != 0 && rate > FILTER_MAX) {     // 好评率最大值过滤
                mark = true;
            }
            if (FILTER_PLAY != 0 && all <= FILTER_PLAY) {    // 过滤至少游玩人数
                mark = true;
            }
            if (FILTER_COLLECTED) {                          // 过滤已收藏
                if ($(value).find('a.Social__liked__HZDh7').length > 0) {
                    mark = true;
                }
            }
            if (FILTER_PLAYED) {                             // 过滤已经玩过
                if ($(value).find('span.UgcCard__playedLabel__3rgOv').length > 0) {
                    mark = true;
                }
            }
            if (FILTER_RUSSIA) {                             // 过滤毛子图
                let name = $(value).find('h2.UgcCard__name__3asOk').html();
                let description = $(value).find('div.UgcCard__description__2nOkP').html();
                if (russianFilter(name) || russianFilter(description)) {
                    mark = true;
                }
            }

            // 对标记过的差事进行清理,其他差事显示好评率
            if (mark == true) {
                $(value).remove();
            } else {
                $(value).find('span')[5].innerHTML = '' + number((rate*100), 2) + '%';
            }
        });
    }

    // 执行过滤
    function execFilter() {
        // 获取设置值
        let FILTER_MAX = $('#gta_filter_rating_max').val();          // 好评率接受的最大值
        let FILTER_MIN = $('#gta_filter_rating_min').val();           // 好评率接受的最小值
        let FILTER_PLAY = $('#gta_filter_play').val();           // 最少游玩人数 0:禁用该过滤
        let FILTER_COLLECTED = $('#gta_filter_collected')[0].checked;   // 是否过滤已经收藏过的
        let FILTER_PLAYED = $('#gta_filter_played')[0].checked;      // 是否过滤已经玩过的
        let FILTER_RUSSIA = $('#gta_filter_russian')[0].checked;      // 毛子过滤器

        updateJobsList(FILTER_MIN, FILTER_MAX, FILTER_PLAY, FILTER_COLLECTED, FILTER_PLAYED, FILTER_RUSSIA);
    }

    // 模拟下拉到最下方并过滤当前的数据
    function scollWindow(status) {
        if (status) {
            timer = setInterval(function() {
                scroll(0, document.body.scrollHeight);      // 先下拉到当前位置,
                execFilter();                                        // 然后对数据进行过滤
            }, 500);
        } else {
            clearInterval(timer);       // 停止定时器
            execFilter();
        }
    }

    // 插入输入框,按钮到页面中
    function insertPageDiv() {
        let div = document.createElement("div");
        let divStr = '<div id="gta_jobs_filter_container" style="right:10px;bottom:20px;z-index: 9999;position: fixed;width: 200px;height: 200px;border:4px; background:#aaaaaa;color:red;">' +
            'gta jobs fliter<br>' +
            '过滤好评率:<input id="gta_filter_rating_min" value="0" style="width: 40px"/> - <input id="gta_filter_rating_max" value="0" style="width: 40px"/><br>' +
            '过滤游玩数:<input id="gta_filter_play" value="0" style="width: 80px"/> <br>' +
            '过滤已收藏:<input type="checkbox" id="gta_filter_collected"/> <br>' +
            '过滤已玩过:<input type="checkbox" id="gta_filter_played"/> <br>' +
            '过滤毛子图:<input type="checkbox" id="gta_filter_russian"/> <br>' +
            '当前状态:<button id="gta_filter_button" style="border: none;color:white;background-color: #f44336;padding: 6px 14px;border-radius: 4px;text-align: center;text-decoration: none;display: inline-block;" id="gta_filter_button">关</button>'
        '</div>';
        div.innerHTML = divStr;
        $('body').append(div);
    }

    function run() {
        insertPageDiv();

        $('html').css('overflow', 'scroll');        // 强制显示滚动条,否则无法滚动

        // 绑定按钮事件
        $('#gta_filter_button').click(function(){
            if ($(this).html() == '关') {
                $(this).html('开');
                $('#gta_filter_button').css('background-color', '#4CAF50');
                $('#gta_filter_rating_min').attr('readonly', true);
                $('#gta_filter_rating_max').attr('readonly', true);
                scollWindow(true);      // 开始拉数据并过滤
            } else {
                scollWindow(false);     // 停止拉数据
                $(this).html('关');
                $('#gta_filter_button').css('background-color', '#f44336');
                $('#gta_filter_rating_min').attr('readonly', false);
                $('#gta_filter_rating_max').attr('readonly', false);
            }
        });
    }

    run();
})();