【FSU】FIFA FUT WEB 增强器

FIFAFUT模式SBC任务便捷操作增强器👍👍👍,额外信息展示、近期低价自动查询、一键挂出球员、跳转FUTBIN、快捷搜索、拍卖行优化等等...👍👍👍

目前為 2023-04-15 提交的版本,檢視 最新版本

    // ==UserScript==
    // @name         【FSU】FIFA FUT WEB 增强器
    // @namespace    https://futcd.com/
    // @version      3.1
    // @description  FIFAFUT模式SBC任务便捷操作增强器👍👍👍,额外信息展示、近期低价自动查询、一键挂出球员、跳转FUTBIN、快捷搜索、拍卖行优化等等...👍👍👍
    // @author       Futcd_kcka
    // @match        https://www.ea.com/fifa/ultimate-team/web-app/*
    // @match        https://www.easports.com/*/fifa/ultimate-team/web-app/*
    // @match        https://www.ea.com/*/fifa/ultimate-team/web-app/*
    // @icon         data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAJ/ElEQVR4nO2dfbRVRRmHHxRNxDBNQlCWSqQ3MgOzUsNSCmOR5CIM+iJcZbhSpGWJSCpiUIvKzDJcoRCGRJlUrK5laloKSqRSkHx5L9GqqFiBukjFoAv98bunS+fMPmdmz+zZe9/O8w+LzZx3hv07Zz7eeeedHvv376eas+burnlWMHoBZwIXAAOAE4AewDbgb8DPgceB5/JqoA2rrulV86xnDu3woQ9wLTAJ6Fen3BRgF/AD4EbgL9k3LQwH5d0ABz4NtAFXU1+MCn2AS4DNwOeBg7NrWjjKIMi7gJXALcBrUnz+cOB6YCPwoXDNyoYiC/J64IfAL4C3B7D3OmAp8BBwXgB7mVBEQQ4B5gAbgPdnYH8E8DAwH+ifgX0viibIeNTnXxuhrsloTPpUhLqsKYogI4AVwN3ASRHr7Q3cBqwHPhyx3kTyFmQg6joeAobn2I4hwHeBVmBoju3IVZCrgHbUdRSFC4DfAjcDr8qjAXkIMg7YBHwFODSH+m24EthCDuNLTEHejKawy4BTItablqPR+LIGOD9WpTEEOQKYBzyJFnllYxhwP3AP8pllStaCVNwdlwWy9zTwReB24IU65fYBi5Efa2Wgui+iyw3TO5DNGrISZAxa2N0CHBvA3g7gE8Ab0RrlUmAwsNVQ9gU0a5oEzALOAd6LXCe+vAK5YbYAnwxgr4bQgrQAy4GfINdHCOYit8e3q55vB6Yays9E3+QD+RkSaTrwYoA29UO/0l8Sxq3zX0IJ8krUlWwELgxksxU4A5gBPJ9QxvQL+X0dm19GE4pvebWsi3NRlzgfOD6EwRCCXIamsTMC2ALNakYD7wOealD2MMOz2l2f/2Ubms6eBdzn3Dozk9E7uNLXkI8gI4FH0AxqgG9D0O7e1Wh6bPuiTO23/T/9Ggk/CfiD5Wfq0RstKB8A3pPWSBpBTgQWdFb8jrQVV/Ed4GS0WIzN4s66vwTsCWBvJNpCXgi8wfXDroLcCDyDZjwhaAXOBi5GM6m86ACuQZOSBYFsfhxN07+OxlgrbAU5Fg1eM9F+hS9bgY+gcWJVAHuh2Iqms+8kXLumIm/yMJvCNoIMANYRZnq3B5iNZjpLA9jbF8CGiUfRL3cKml77MhBNVs5sVLCRIIcAq4G+ARq1BC3mZgJ7A9iD5OlwKOYBr0XT5Y4A9lYCx9Ur0EiQxfjPr1ehvY6JwJ89bVUzJrA9Ey+iBWUL8CNPWwejRXMi9QQZCnzQo/KdKAznbOAxDzsmjkJuka8FtluPdrR1MBqNCWk5HU21jdQT5JspK9xPl7tjYUobSZwIfAP5km4IbNuW+4BT0WC9K6WNm5L+IUmQAaQbxJegPncGYcM4hwF3oQXcFegXkje3AoNIt3Y6BrldakgSZJxjBX9HHtWJmP1LaXkbis1aA3wUxe8WiZ10eReedPzseNPDpNjeMxwMP4vGmxDTwwrvRuPPhIA2s2QN8BbgN51/2tBiepgkyCCHxowinBgT0F5HzMjCowjXvZ6Lou/7WJQ1zl6TuqxjLBvwK+AJy7L1uBg5+75PXDFGo8j4LWh30zfo4iUUcW/DEaaHSYLYroBXW5Yz0RNN/9YBi9B4EZupKBh7ENrd3NL57EgPmw9aljO+4yRBak/xmHnZstyBHIkWWs8Ad6Jt2bx4vurvxyNnYBuKL667qk7AtvszvmPfDSqXAz89gOvQAmsucUNGk0hyh/RFe/dtwOccbXo5X2OeoLoX9dllohfwBdSV3W35Ga+peaxAuVMonxgHcolD2VIIMiRSPVnh4p22HX+NxBIkzeBfJEJtFzQkliBe35r/J/I+H9KkiqYgBaMpSMGIJUhm0eKR+JdD2bSbVkA8QTZFqicrjnYo6xXFGWulvh45EiuRfNWzrh6GZyYqi64O5KK4EG0VZ815aIewjeQvcQda2XvF98Z0nSzOwOZStDl0IFlMsQ9CMVqZU/ZB3bRgK0WSmSTKLohpZ64pSI6YuqdSewXKLoiJokWmONEdBWn+QnLENKg3fyE54rUqLiIx1yFvoiulhm+3sg+F0ZhOcmW1d/EoOm6dNIvbixLWjMPjvcYS5CTgd5HqyoLV6FSVDZeTPlA9Wpd1eqR6ssIlXrnac+BEkiChB8aXAtuLzeEOZV0ckTX4BsrZUuqpaEzKPsvqdjQFKRhNQQpGUxA7onmQm4LY0SjDUDCagtjRGquipiCNuQMd5omCryBZ5RqJRb3//xKUgcI10bOXLy3Jl2W7Ui+1qxt4teHZ7cgXVS9VYD1MWe6sSfqG2M4qTvOpvAB8r/PPPSgb3BB0CjitGGCfw974jpN+Ic9aGh2FAsP+alm+aCxCp4ifQ7kYQzDRspzx5rWkX8gfLY0eim42KDNPE06MZdjnKTbWmSTIOodGtKC7P051+Ex3oy+67sIlJUm76WGSID92bNBw1O/egHkR1Z29vZeiEFPXC2GMebOSBNlMupxQs9CJ1epDkt1u7xvdNbIeJWV2TTTwMo6CAHzGsZIK/dFiajVKXgbh0o4XgcEoQ1Er6Q+zziZhDVdvT/0BlCMw7VVEb0WZ5NYRJ0I9aw5DNyNM87SzDaVlN9JopX4R/smFTyOicy4jJqNUIL5iQIM8kY0E2U6+l3XlzXCUpWg+SvXqywR0x1UiNr6sJ1BCs9Jc8BuAgciXtYIwWYr+DYzFInWTrXPxKZQ17q70bSoFPVGCnE0o83YI7kUZj5bbFHbx9u4EPoaypj3u2qoSMAmNE7NxC/tJog1dHTsGhzOWadzvj6CMpVOAP6X4fNEYjlK/3kmYlFG7UFbWFtwX2F77IfM6K72ZYq3EbdtyHMoBvAI5SUOwBL2TuaTcK/LdoNoNfBYtkGzzSWWNTaKb6ahLuSJQnZUrxieiJJipCbWFuwmlJR+LZ2xrAOqdEx8LrEXf4BBro3bkJhpJoHE19J76cpRU+Crgn4Ft2zKL2oyfLcBPUTL9UJtqN6HjFUHTqWcV5PBVlOkzdVi+Byeg2dJ16JabRej2uFAZ7ZYiV9A0MogpyPJ8yA7URy9A+dFHZlhXNf3R9DUka9F4memGXIwwoLXoct/xaCAtG/9Ah3CGEmF3NGZc1j3IDT+d+vfYFonKOHFbrApjB8p1oOuDBqOr8orK/cjdMY2w1240JK/Ixe0o3/s5FCtIYiO6OW4UCn6ITt6hpCvpupoiVORHGnajTNZDiBjHayJvQSosRLdtXp9D3beiW4ESd/FiUhRBQAdD56BFXIg7DhvxIOoyp+Lp7ghJkQSpsJmuW0BD3E1STTu6zfN81GUWiiIKUqEVBUpMRndc+bIXdYknE+6+2+AUWZAKd6CX6LMWqKyB5lCsrYIayiAIyFF5OUqiuczhcw+jDajxKICv8MRMPhOCDcAH0M7eaGAE0I+uAOcdaI3zGNrL3pBDG734D+mntpkNC0pxAAAAAElFTkSuQmCC
    // @grant        GM_addStyle
    // @grant        GM_openInTab
    // @grant        GM_xmlhttpRequest
    // @connect      ea.com
    // @connect      futbin.com
    // @connect      futbin.org
    // @connect      futcd.com
    // @license      MIT
    // ==/UserScript==
    
    (function() {
        'use strict';
        window.requirementTarget = "";
        var futsbcup = {},events = {},info = {},cntlr = {},html = {},className = {},call = {};
        info = {
            "unassigned":{"state":false,"run":0,"playerId":[],"rating":0},
            "task":{"obj":{"stat":{},"html":""},"sbc":{"stat":{},"html":""}},
            "base":{"state":false,"platform":"pc","price":{},"sId":"","localization":"",autoLoad:true,"ratings":{},"input":true,"promo":0},
            "criteria":{"state":false,"data":{},"repeat":0},
            "roster":{"state":false,"data":{},"page":-1,"element":{},"thousand":{"lowest":99}},
            "language":"en",
            "localization":{},
            "quick":{},
            "squad":{"load":true},
            "league":{2012:'中超',61:'英乙',60:'英甲',14:'英冠',13:'英超',2208:'英丙',2149:'印超',32:'意乙',31:'意甲',54:'西乙',53:'西甲',68:'土超',50:'苏超',308:'葡超',39:'美职联',17:'法乙',16:'法甲',20:'德乙',19:'德甲',2076:'德丙',2118:'传奇',353:'阿甲'}
        };
        cntlr = {
            "current":function(){return getAppMain().getRootViewController().getPresentedViewController().getCurrentViewController().getCurrentController();},
            "right":function(){return getAppMain().getRootViewController().getPresentedViewController().getCurrentViewController().getCurrentController()._rightController._currentController},
            "left":function(){return getAppMain().getRootViewController().getPresentedViewController().getCurrentViewController().getCurrentController()._leftController},
        };
        events.notice = function(text,type){
            services.Notification.queue([events.L10n(text),type])
        };
        events.init =  async function(){
            info.base.sId = services.Authentication.sessionUtas.id;
            console.log(info.base.sId)
            let locale = services.Messages.messagesDAO.authDelegate.sessionUtas.locale;
            info.language = "en";
            info.base.year = APP_YEAR_SHORT;
            if(locale.language == "zh"){
                info.language = locale.variant == "Hans" ? "chs" : "cht";
            }
            console.log(info.language)
            events.notice("notice.succeeded",0);
            GM_xmlhttpRequest({
                method:"GET",
                url:"https://futcd.com/data/fsuupdata.json",
                timeout:8000,
                headers: {
                    "Content-type": "application/json"
                },
                onload:function(res){
                    let urlText = events.L10n("top.readme");
                    let urlLink = "https://mfrasi851i.feishu.cn/wiki/wikcng1Ih7fFRidBfMdNS9SrucR";
                    if(res.status == 404){
                        events.notice("notice.upgradefailed",2);
                    }else{
                        let data = JSON.parse(res.response);
                        let myVersion = Number(GM_info.script.version) || 0;
                        if(data["version"] > myVersion){
                            urlText = events.L10n("top.upgrade");
                            urlLink = data["updateURL"];
                            events.notice("notice.upgradeconfirm",1);
                        }
                    }
                    getAppMain()._FIFAHeader._view.__fifaLink.insertAdjacentHTML('afterend', `<a class="header_explain" href="${urlLink}" target="_blank">${urlText}</a>`);
                },
                onerror:function(){
                    events.notice("notice.upgrade.failed",2);
                }
            })
            let user = services.User.getUser().getSelectedPersona();
            if(user.isXbox || user.isPlaystation || user.isStadia){
                info.base.platform = "ps";
                info.base.platform = "ps";
            }
            services.User.maxAllowedAuctions = 100;
            GM_xmlhttpRequest({
                method:"GET",
                url:"https://futcd.com/data/futpricenew.json",
                headers: {
                    "Content-type": "application/json"
                },
                onload:function(res){
                    let data = JSON.parse(res.response);
                    if(info.base.platform == "pc"){
                        info.base.price = data["pc"];
                    }else{
                        info.base.price = data["tv"];
                    }
                },
            })
            info.base.localization = services.Localization.repository._collection;
            GM_xmlhttpRequest({
                method:"GET",
                url:`https://utas.mob.v1.fut.ea.com/ut/game/fifa${info.base.year}/scmp/campaign/categories`,
                headers: {
                    "Content-type": "application/json",
                    "X-UT-SID": info.base.sId
                },
                onload:function(response){
                    let data = JSON.parse(response.response);
                    let nowDate = Math.round(new Date().getTime()/1000);
                    let objJson = {reward:"",new:{"-1":0}};
                    let rewardJson = {"player":0,"pack":0};
                    for (let i = 0; i < data.length; i++) {
                        data[i].groupsList.forEach( (item,key) => {
                            let tempJson = {"f":0,"e":0}
                            if(item.groupType !== 2){
                                if(item.startTime >= nowDate - 86400){
                                    tempJson.f = 1;
                                    objJson.new["-1"]++;
                                    if(objJson.new.hasOwnProperty(data[i].categoryId)){
                                        objJson.new[data[i].categoryId]++;
                                    }else{
                                        objJson.new[data[i].categoryId] = 1;
                                    }
                                    for (let z = 0; z < item.awardsList.length; z++) {
                                        if(item.awardsList[z].awardType == "pack"){
                                            rewardJson["pack"]++;
                                        }
                                        if(item.awardsList[z].awardType == "item"){
                                            if(item.awardsList[z].itemDataReduced.itemType == "player"){
                                                rewardJson["player"]++;
                                            }
                                        }
                                    }
                                }
                                if(item.endTime <= nowDate + 86400 && item.endTime !== 0){
                                    tempJson.e = 1;
                                }
                            }
                            objJson[`${item.groupType.toString()}-${item.groupId.toString()}`] = tempJson;
                        })
                    }
                    let reward = [];
                    if(rewardJson["player"] > 0){
                        reward.push(events.L10n("task.player"))
                    }
                    if(rewardJson["pack"] > 0){
                        reward.push(events.L10n("task.pack"))
                    }
                    objJson.reward = reward.join("、");
                    info.task.obj.stat = objJson;
                    info.task.obj.html = events.taskHtml(objJson.new["-1"],objJson.reward);
                },
            })
            GM_xmlhttpRequest({
                method:"GET",
                url:"https://futcd.com/data/futsbc.json",
                headers: {
                    "Content-type": "application/json",
                    "Cache-Control": "600"
                },
                onload:function(res){
                    let sbcJson = JSON.parse(res.response);
                    info.task.sbc.stat = sbcJson;
                    info.task.sbc.html = events.taskHtml(sbcJson.new["0"],sbcJson.reward);
                },
            })
            
            GM_xmlhttpRequest({
                method:"GET",
                url:"https://futcd.com/data/promo.json",
                headers: {
                    "Content-type": "application/json",
                    "Cache-Control": "600"
                },
                onload:function(res){
                    let n = JSON.parse(res.response);
                    info.base.promo = n.n;
                },
            })
            const staticData = services.Item.itemDao.itemRepo.getStaticData();
            for (let item of staticData) {
                if(!info.base.ratings.hasOwnProperty(item.rating)){
                    info.base.ratings[item.rating] = [];
                }
                info.base.ratings[item.rating].push(item.id)
            }
            var dataNumber = [0,250,500,750];
            const itemFactory = new UTItemEntityFactory();
            for (const key in dataNumber) {
                console.log("读取第几页",key)
                let tempData = await getThousand(dataNumber[key]);
                for (let item of tempData.itemData) {
                    if(!item.hasOwnProperty("loans")){
                        info.roster.thousand[item.resourceId] = {"untradeable":item.untradeable,"rating":item.rating,"id":item.id};
                        if(!info.base.ratings.hasOwnProperty(item.rating)){
                            info.base.ratings[item.rating] = [];
                        }
                        if(!info.base.ratings[item.rating].includes(item.resourceId)){
                            info.base.ratings[item.rating].push(item.resourceId)
                        }
                        services.Item.itemDao.itemRepo.club.addClubItem(itemFactory.createItem(item))
                        if(item.rating < info.roster.thousand.lowest){
                            info.roster.thousand.lowest = item.rating;
                        }
                    }
                }
            }
            let lb = events.createButton(
                new UTButtonControl(),
                events.L10n("loadingclose.text"),
                async(e) => {
                    events.hideLoader()
                },
                "fsu-loading-close"
            )
            info.base.close = lb;
            document.querySelector(".ut-click-shield").append(info.base.close.__root)
        };
        function getThousand(dataNumber){
            return new Promise(res => {
                let postData = {"count": 250,"sort": "desc","sortBy": "ovr","start": dataNumber,"type": "player"};
                GM_xmlhttpRequest({
                    method:"POST",
                    url:`https://utas.mob.v1.fut.ea.com/ut/game/fifa${info.base.year}/club`,
                    headers: {
                        "Content-type": "application/json",
                        "X-UT-SID": info.base.sId
                    },
                    data:JSON.stringify(postData),
                    onload:function(response){
                        res(JSON.parse(response.response))
                    },
                })
            })
        };
        events.taskHtml = function(number,text){
            let html = "<div>{Number}</div><div>{reward}</div>";
            if(number > 0){
                html = html.replace("{Number}",events.L10n("task.added") + number);
            }else{
                html = html.replace("fsu-task","fsu-task no");
                html = html.replace("{Number}",events.L10n("task.noadded"));
            }
            if(text == "、"){
                text = "";
            }
            let reward = text;
            reward = reward.replace("组合包",events.L10n("task.pack"));
            reward = reward.replace("球员",events.L10n("task.player"));
            html = html.replace("{reward}",reward);
            return html;
        };
        events.showLoader = () => {
            document.querySelector(".ut-click-shield").classList.add("showing","fsu-loading");
            document.querySelector(".loaderIcon").style.display = "block";
        };
        events.hideLoader = () => {
            document.querySelector(".ut-click-shield").classList.remove("showing","fsu-loading");
            document.querySelector(".loaderIcon").style.display = "none"
        };
        events.L10n = function(param) {
            let text = "";
            if(param.indexOf("{") !== -1){
                text = param;
                let paramArr = param.match(/{(.*?)}/g);
                for (let item of paramArr) {
                    let paramFormat = item.match(/{(.*?)}/)[1];
                    if(info.localization[info.language].hasOwnProperty(paramFormat)){
                        text = text.replace(item,info.localization[info.language][paramFormat]);
                    }
                }
            }else{
                text = info.localization[info.language].hasOwnProperty(param) ? info.localization[info.language][param] : param;
            }
            return text;
        }
        info.localization = {
            "chs":{
                "price.btntext":"查询价格",
                "price.formatno":"无数据",
                "price.formatcompany":"万",
                "price.now":"球员低价",
                "price.low":"评分低价",
                "price.last":"购买价格",
                "duplicate.swap":"可发送俱乐部",
                "duplicate.not":"队内不可交易",
                "duplicate.yes":"队内可交易",
                "duplicate.nodata":"无队内数据",
                "duplicate.lowprice":"评分低价:",
                "top.readme":"【FSU】插件使用说明",
                "top.upgrade":"有新版FSU插件可升级",
                "notice.upgradefailed":"查询新版本失败",
                "notice.upgradeconfirm":"有新版本点击顶部链接查看",
                "notice.uasreset":"已重新载入列表 请重新进入查看",
                "notice.priceloading":"开始读取价格数据 请稍等",
                "notice.loaderror":"读取数据失败 请检查网络",
                "notice.succeeded":"FSU插件加载成功",
                "notice.duplicateloading":"开始读取重复球员数据 请稍等",
                "notice.quicksearch":"使用快捷添加 直接沿用上次配置搜索球员",
                "notice.appointloading":"开始读取指定评分球员 请稍等",
                "notice.noduplicate":"已无重复球员",
                "notiec.quickauction":"球员将按照最低售价作为即买价挂出",
                "task.player":"球员",
                "task.pack":"组合包",
                "task.added":"今日新增:",
                "task.noadded":"今日无新增",
                "task.new":"新",
                "task.expire":"即将到期",
                "task.nodata":"无数据请过段时间重新进入WEBAPP再查看",
                "sbc.price":"造价预估:",
                "sbc.topprice":"预估造价",
                "sbc.topsquad":"阵容价值",
                "sbc.like":"值得做:",
                "sbc.dislike":"不值得:",
                "sbc.consult":"抄作业",
                "sbc.count":"算评分",
                "sbc.duplicates":"重复球员名单",
                "sbc.qucikdupes":"重",
                "sbc.appoint":"指定评分球员名单",
                "sbc.addduplicate":"添加重复球员",
                "sbc.swapduplicate":"替换为重复球员",
                "sbc.notduplicate":"无重复球员",
                "sbc.addquick":"快捷添加球员",
                "sbc.swapquick":"快捷替换球员",
                "sbc.watchplayer":"查看球员",
                "sbc.watchplayer":"查看球员",
                "uasreset.btntext":"重载名单",
                "sbc.filtert":"筛选",
                "sbc.filter0":"全部",
                "sbc.filter1":"新增",
                "sbc.filter2":"临期",
                "sbc.filter3":"高评价",
                "loadingclose.text":"数据载入 如卡顿点此关闭",
                "quicklist.gotofutbin":"前往FUTBIN查看",
                "quicklist.auction":"按低价快速拍卖",
                "pack.promo":"特殊球员"
            },
            "cht":{
                "price.btntext":"查詢價格",
                "price.formatno":"沒有數據",
                "price.formatcompany":"萬",
                "price.now":"最低價格",
                "price.low":"評分最低價格",
                "price.last":"購入價格",
                "duplicate.swap":"可以送到球會",
                "duplicate.not":"球會球員無法交易",
                "duplicate.yes":"球會球員可交易",
                "duplicate.nodata":"沒有球員數據",
                "duplicate.lowprice":"評分最低價格:",
                "top.readme":"【FSU】插件使用說明",
                "top.upgrade":"有新版本的FSU插件可更新",
                "notice.upgradefailed":"查詢新版本失敗",
                "notice.upgradeconfirm":"有新版本點擊頂部鏈接查看",
                "notice.uasreset":"已重新載入列表 請重新進入查看",
                "notice.priceloading":"開始讀取價格數據 請稍等",
                "notice.loaderror":"讀取數據失敗 請檢查網絡",
                "notice.succeeded":"FSU插件載入成功",
                "notice.duplicateloading":"開始讀取重複球員數據 請稍等",
                "notice.quicksearch":"使用快捷增加球員 直接沿用上次配置搜索球員",
                "notice.appointloading":"開始讀取指定評分球員 請稍等",
                "notice.noduplicate":"已經沒有重複球員",
                "notiec.quickauction":"球員將按最低價格列在轉會市場上",
                "task.player":"球員",
                "task.pack":"組合包",
                "task.added":"今日新增:",
                "task.noadded":"今日沒有新增",
                "task.new":"新",
                "task.expire":"即將過期",
                "task.nodata":"沒有數據請過段時間重新進入WEBAPP再查看",
                "sbc.price":"製作價格:",
                "sbc.topprice":"製作價格",
                "sbc.topsquad":"球隊價格",
                "sbc.like":"贊成:",
                "sbc.dislike":"反對:",
                "sbc.consult":"參考方案",
                "sbc.count":"計算評分",
                "sbc.duplicates":"重複球員名單",
                "sbc.qucikdupes":"重",
                "sbc.appoint":"指定評分球員名單",
                "sbc.addduplicate":"新增重複球員",
                "sbc.swapduplicate":"交換為重複球員",
                "sbc.notduplicate":"沒有重複球員",
                "sbc.addquick":"快速新增球員",
                "sbc.swapquick":"快速交換球員",
                "sbc.watchplayer":"查看球員",
                "uasreset.btntext":"重新載入名單",
                "sbc.filtert":"篩選",
                "sbc.filter0":"全部",
                "sbc.filter1":"新增",
                "sbc.filter2":"即期",
                "sbc.filter3":"高評價",
                "loadingclose.text":"數據載入中 如長時間未響應 請點擊此處關閉",
                "quicklist.gotofutbin":"前往FUTBIN查看",
                "quicklist.auction":"使用最低價格列入轉會",
                "pack.promo":"特殊球員"
            },
            "en":{
                "price.btntext":"Check Price",
                "price.formatno":"No Data",
                "price.formatcompany":"ten thousand",
                "price.now":"Low Price",
                "price.low":"Rating Price",
                "price.last":"Bought Price",
                "duplicate.swap":"Can be Sent to Club",
                "duplicate.not":"Club Players are Untradeable",
                "duplicate.yes":"Club Players are Tradable",
                "duplicate.nodata":"No Club Players Data",
                "duplicate.lowprice":"Rating Price ",
                "top.readme":"【FSU】Plugin Instructions",
                "top.upgrade":"There is a new version of the FSU plugin that can be upgraded",
                "notice.upgradefailed":"Query new version failed",
                "notice.upgradeconfirm":"There is a new version, click the top link to view",
                "notice.uasreset":"The list has been reloaded, please re-enter to view",
                "notice.priceloading":"Start reading price data, please wait",
                "notice.loaderror":"Failed to read data, please check the network",
                "notice.succeeded":"FSU plugin loaded successfully",
                "notice.duplicateloading":"Start reading duplicate player data, please wait",
                "notice.quicksearch":"Use the shortcut to add, directly follow the last configuration to search for players",
                "notice.appointloading":"Start reading assigned rating player please wait ",
                "notice.noduplicate":"no duplicate player",
                "notiec.quickauction":"Players will be listed at the lowest selling price as an immediate purchase price",
                "task.player":"Player",
                "task.pack":"Pack",
                "task.added":"Added today ",
                "task.noadded":"No new additions today",
                "task.new":"New",
                "task.expire":"Expiring",
                "task.nodata":"No data, please re-enter WEBAPP after a while to check",
                "sbc.price":"Cost estimate:",
                "sbc.topprice":"Estimate",
                "sbc.topsquad":"Squad",
                "sbc.like":"Thumbs Up:",
                "sbc.dislike":"Thumbs Down:",
                "sbc.consult":"See Plan",
                "sbc.count":"Calculate Score",
                "sbc.duplicates":"Duplicate Players List",
                "sbc.qucikdupes":"D",
                "sbc.appoint":"Assign Rating Players List",
                "sbc.addduplicate":"Add Duplicate Players",
                "sbc.swapduplicate":"Swap Duplicate Players",
                "sbc.notduplicate":"No Duplicate Players",
                "sbc.addquick":"Quick Add Player",
                "sbc.swapquick":"Quick Swap Player",
                "sbc.watchplayer":"Watch Player",
                "uasreset.btntext":"Reload List",
                "sbc.filtert":"Filter",
                "sbc.filter0":"All",
                "sbc.filter1":"New",
                "sbc.filter2":"Expiring",
                "sbc.filter3":"Approval",
                "loadingclose.text":"If you encounter stuck, click here to close",
                "quicklist.gotofutbin":"Go to FUTBIN",
                "quicklist.auction":"Quick Auction at Low Price",
                "pack.promo":"PROMO"
            },
        }
        html = {
            "priceBtn":"<button class=\"flat pagination fsu-getprice\" id=\"getprice\">{price.btntext}</button>",
            "priceBtn2":"<button class=\"btn-standard section-header-btn mini call-to-action fsu-getprice\" id=\"getprice\">{price.btntext}</button>",
            "taskBar":"<div class=\"fsu-task-bar\">{Number}</div>",
            "sbcInfo":"<div class=\"fsu-sbc-info\"><div class=\"currency-coins\">{sbc.price}{price}</div><div><span>{sbc.like}{up}</span><span>{sbc.dislike}{down}</span></div></div>",
            "consultBtn":"<a href=\"https://www.futbin.com/squad-building-challenges/ALL/{sbcId}\" target=\"_blank\" class=\"fsu-consult fsu-sbcButton\">{sbc.consult}</a>",
            "countBtn":"<a id=\"goToCount\" href=\"javascript:void(0)\" class=\"fsu-count\">{sbc.count}</a>",
            "searchInput":"<input type=\"text\" class=\"fsu-input\" placeholder=\"{text}\" maxlength=\"50\">",
            "uasBtn":"<button class=\"btn-standard section-header-btn mini call-to-action fsu-getprice\" id=\"uasreset\">{uasreset.btntext}</button>",
        };
        className = {
            "home":"UTHomeHubViewController",
            "object":"UTObjectivesHubViewController",
            "sbc":"UTSBCHubViewController",
            "sbcList":"UTSBCChallengesViewController",
            "sbcItem":"UTSBCSquadSplitViewController",
            "squadItem":"UTSquadSplitViewController",
        };
        info.base.sytle = ".tns-horizontal.tns-subpixel>.tns-item{position: relative;}button.notevents{pointer-events: none;color: #a4a9b4;}.btn-standard.section-header-btn.mini.call-to-action.fsu-getprice{margin-left: 1rem;}.btn-standard.section-header-btn.mini.call-to-action.fsu-getprice:hover{background-color:#e9dfcd}.view-modal-container.form-modal header .fsu-getprice{position: absolute;top: .5rem;left: 0;height: 2rem;line-height: 2rem;}.fsu-task-bar{position: absolute;right: .2rem;top: 0;}.ut-objective-entry-view--title span.task-new{padding-left: 0.5rem;padding-right: 0.8rem;background-color: #d31332;margin-right: 0.2rem;}.ut-sbc-set-tile-view .tileHeader span.task-new{padding-left: 0.3rem;padding-right: 0.8rem;background-color: #d31332;margin-right: 0.2rem;}.ut-sbc-set-tile-view.production-tagged .tileHeader::before{display:none;}.fsu-task{display: flex;justify-content: space-between;padding: 0.5rem;background-color: #d31332;}.fsu-task.no{background-color: #d313325c;}.task-expire{background-color: #d313325c;height: 2rem;line-height: 2rem;text-align: center;}a.header_explain{color: #a2a2a2;text-decoration: none;line-height: 3rem;}a.header_explain:hover{color: #ffffff;}.ut-fifa-header-view{display: flex;justify-content: space-between;}                                  .SearchResults.ui-layout-left ul:not(.fsu-card-pos){display: grid;grid-template-columns: repeat(2, minmax(0, 1fr));}.SearchResults.ui-layout-left .listFUTItem.has-auction-data.selected .rowContent.has-tap-callback{background-color: #2c319b8f;}.SearchResults .listFUTItem.has-auction-data .entityContainer{width: 100%;}.SearchResults .listFUTItem.has-auction-data .player-stats-data-component{width: 44%;}.SearchResults .listFUTItem.has-auction-data .player-stats-data-component ul{display: grid;grid-template-columns: repeat(3, minmax(0, 1fr));}.SearchResults .listFUTItem.has-auction-data .player-stats-data-component ul li{padding:0;margin-top: 0.2rem;}    .fsu-loading-close{display: none;position: absolute;bottom: 40%;z-index: 999;}.fsu-loading .fsu-loading-close{display: block;}          .fsu-task-bar-favorite{background-color: rgb(255,86,48);right: 0.2rem;top: 2px;color: #ffffff;padding: 0 6px;border-radius: 4px;line-height: 1.2rem;position: absolute;}                                                     .fsu-sbc-info{padding: 0.5rem;background-color: #d313325c;display: flex;font-family: UltimateTeamCondensed,sans-serif;justify-content: space-between;font-size: 1rem;}.fsu-sbc-info div{width: 50%;}.fsu-sbc-info div:last-child{display: flex;justify-content: space-around;}.fsu-sbc-info .currency-coins::after{font-size:16px}                .rewards-footer li{position: relative;}.fsu-sbc-vplayer {position: absolute;bottom: .25rem;right:0;background-color: #8A6E2C;padding: .5rem;color: #15191d;line-height: 1rem;font-size: 16px;}.fsu-sbc-vplayer:hover{background-color: #f6b803;}                 @media screen and (min-width:1280px) and (max-width:1441px) {.ut-split-view {padding:0;}.ut-split-view>.ut-content {max-height:100%;}}            .fsu-squad-pBox{display:flex}.fsu-squad-pWrap{margin:.5em}.fsu-squad-pTitle{width:100%;word-break:keep-all;font-size:.8em;display:block;overflow:hidden;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}.fsu-squad-pValue{font-family:UltimateTeamCondensed,sans-serif;font-weight:400;font-size:1.125em;text-overflow:ellipsis;white-space:nowrap;line-height: 1.8rem;}.fsu-squad-pValue.currency-coins::after{font-size:1rem;margin-left:.2em !important;margin-top:-.2em !important}.fsu-squad-pTitle .plus{color:#36b84b;padding-left:.1rem}.fsu-squad-pTitle .minus{color:#d21433;padding-left:.1rem}         li.with-icon.hide {display: none;}                      .fsu-input{border: 0 !important;background-color: rgba(0,0,0,0) !important;padding-left: 0 !important;font-family: UltimateTeamCondensed,sans-serif;font-size: 1em;color: #f8eede;}                  .fsu-quick{position:absolute;top:100%;width:100%;display:flex;align-items:center;font-family:UltimateTeam,sans-serif;justify-content:center;margin-top:.2rem}.fsu-quick.top .fsu-quick-list{display:flex;align-items:center}.fsu-quick-list .im{height:1.8rem;line-height:1.8rem;cursor:pointer;background-color:#2b3540;font-family:UltimateTeam,sans-serif;border-radius:4px;padding:0 .2rem;font-size:1rem;font-weight:900;color:#f2f2f2;overflow: hidden;}.fsu-quick-list .im:hover{background-color:#394754}.fsu-quick-list.other .im{background-color:#f8eede;color:#ef6405;font-weight:500;margin-left:.3rem;text-align:center;}.fsu-quick-list.other .im:hover{background-color:#f5efe6}.fsu-quick-list .im span{font-size:.8rem;font-weight:300;color:#a4a9b4}.fsu-quick-list.left .im{margin-right:.3rem}.fsu-quick-list.right .im{margin-left:.3rem}.fsu-quick-inr{font-size:.8rem;margin:0 .3rem}.fsu-quick.right{position:absolute;top:50%;width:2rem;display:block;right:0%;z-index:3;-webkit-transform:translateY(-50%) !important;transform:translateY(-50%) !important}.fsu-quick.right .fsu-quick-list .im{width:1.4rem;margin-bottom:.2rem;text-align:center}.entityContainer>.name.untradeable{color:#f6b803}        .btn-standard.section-header-btn.mini.call-to-action.fsu-uasreset{margin-left: 1rem;}                                      .fsu-promo-box{flex:auto;display:flex;justify-content:flex-end}.landscape button.currency.fsu-promo{margin-top:-.25rem;text-align:justify;padding:.25rem .5rem;width:6.6rem;color:#f2f2f2;background-color:#556c95}.landscape button.currency.fsu-promo:hover{background-color:#ef6405}.landscape button.currency.fsu-promo .text{font-size:2rem;font-weight:600;height:2rem;line-height:2rem}.landscape button.currency.fsu-promo .subtext{font-size:.6rem;line-height:1rem;font-weight:600;text-transform:uppercase}.landscape button.currency.fsu-promo::after{background-image:url(https://www.ea.com/fifa/ultimate-team/web-app/images/branding/settings.png) !important;background-position:center;background-repeat:no-repeat;background-size:100%;content:'';display:inline-block;top:-.8rem;vertical-align:middle;height:5rem;margin-top:0;position:absolute;width:5rem;right:-1.2rem}                           .fsu-cards-pos,.fsu-cards-attr,.fsu-cards-lea-small,.fsu-cards-lea-large,.fsu-cards-price{position:absolute;z-index:2;font-family:UltimateTeamCondensed,sans-serif;font-weight:300;text-align:center;width:1.6rem;top:25%}.fsu-cards-pos{right:0}.fsu-cards-pos>div,div:not(.small)>.fsu-cards-attr>div{border:1px solid;border-color:inherit;background-color:#13151d;line-height:100%;border-radius:5px;font-size:.875rem;margin-bottom:4px}.small>.fsu-cards-pos{width:1.4rem;top:30%}.small~.fsu-cards-pos{width:1.4rem;top:30%;right:-10px}.small>.fsu-cards-pos>div,.small~.fsu-cards-pos>div,.small~.fsu-cards-attr>div{border-radius:3px !important;font-size:0.75rem !important;margin-bottom:2px !important}div:not(.small)>.fsu-cards-attr{left:0}.small~.fsu-cards-attr{width:1.4rem;top:30%;left:-10px !important}.small>.fsu-cards-attr{width:88%;display:flex;justify-content:space-between;align-items:center;bottom:0px;top:auto;z-index:0;background-color:#13151d;font-size:.875rem;left:4%;padding:0 2%;border-radius:4px}.fsu-cards-lea-small{bottom:8%;height:16%;font-size:70%;width:100%;top:auto;font-weight:500;line-height:1}.fsu-cards-lea-small~.playStyle,.ut-squad-pitch-view:not(.sbc) .fsu-cards-lea-small{display:none !important}.specials .fsu-cards-lea-small{bottom:10%}.fsu-cards-lea-large,.fsu-cards-price{width:auto !important;padding:0 0.2rem;left:50%;-webkit-transform:translateX(-50%) !important;transform:translateX(-50%) !important;white-space:nowrap;background-color:#13151d;border:1px solid;border-radius:5px}.fsu-cards-lea-large{bottom:0;top:auto !important}.fsu-cards-price{top:0 !important}.fsu-cards-price::after{font-size:1rem}.ut-squad-pitch-view:not(.sbc) .fsu-cards-lea-small~.playStyle{display:block !important}.fsu-price-box{font-family:UltimateTeamCondensed,sans-serif}.fsu-price-box.right{position:absolute;right:0%;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:flex;align-items:center}.fsu-price-box.right>div{background-color:#36b84b33;padding:0.5rem;text-align:center;border-radius:4px;margin-top:0;display:block}.fsu-price-box.right>div .title{color:#a4a9b4;padding:0;font-size:1rem;line-height:1rem}.fsu-price-box.right>div .title span.plus{color:#36b84b;font-weight:500;padding-left:.2rem}.fsu-price-box.right>div .title span.minus{color:#d21433;font-weight:500;padding-left:.2rem}.fsu-price-box.right>div .value{font-size:1.2rem;margin-top:.5rem;line-height:1.2rem}.fsu-price-val[data-value='0']{display:none !important}.fsu-price-val .currency-coins::after{font-size:1rem;margin-top:-3px}.fsu-price-box.bottom{padding-left:6.3rem;margin:.2rem 0rem}.fsu-price-box.bottom>div{display:flex;align-items:center;font-size:0.9375rem}.fsu-price-box.bottom>div .title{color:#a4a9b4;margin-right:.2rem}.fsu-price-box.bottom .fsu-price-val .currency-coins::after{font-size:inherit}.fsu-price-box.trf{position:absolute;left:54%;margin-top:.2rem}.fsu-price-box.trf .fsu-price-val{display:flex;align-items:center;background-color:#36b84b33;text-align:center;border-radius:4px;padding:0 .3rem;height:20px}.fsu-price-box.trf .fsu-price-val .title{font-size:.875rem;margin-right:.2rem}.fsu-price-box.trf .fsu-price-val .currency-coins::after{margin-top:-2px}.fsu-price-box.top{position:absolute;right:0%;top:8%;display:flex;align-items:center}.fsu-price-box.top>div{display:flex;align-items:center;background-color:#36b84b33;padding:.1rem 0.5rem;text-align:center;border-radius:4px}.fsu-price-box.top>div .title{font-size:0.875rem;margin-right:0.5rem}.fsu-price-last{margin-right:.5rem}.fsu-player-other{display:flex;margin-top:.2rem;font-family:UltimateTeamCondensed,sans-serif;font-size:1rem;line-height:1rem}.fsu-price-box.top+.fsu-player-other{margin-top:.4rem}.fsu-player-other>div{background-color:#3B4754;color:#a4a9b4;padding:0.1rem 0.5rem;text-align:center;border-radius:20px;font-size:0.9rem;margin-right:0.5rem;white-space: nowrap;}.fsu-player-other>div.swap{background-color:#36b84b;color:#201e20}.fsu-player-other>div.not{background-color:#8A6E2C;color:#201e20}.fsu-player-other>div.yes{background-color:#264A35;color:#201e20}.large.player+.fsu-player-other{justify-content:center}.large.player+.fsu-player-other>div{margin-right:0rem}.fsu-player-other .currency-coins::after{font-size:.875rem;margin-top:-1px;margin-left:2px !important}@media (max-width:1130px){.has-auction-data .fsu-player-other{margin-top:5rem !important}.has-auction-data .fsu-price-box.trf{margin-top:5rem !important;left:auto;right:3%}}.SearchResults.ui-layout-left .listFUTItem.has-auction-data .auction{display:flex;width:46%;right:0;top:2.7rem}.SearchResults.ui-layout-left .listFUTItem .rowContent.has-tap-callback::before{display:none}                       .phone .fsu-sbc-info{font-size:.875rem}.phone .fsu-task{display:block;font-size:.875rem}.phone .fsu-price-box.right > div .value{font-size:1rem;margin-top:.2rem}.phone .fsu-price-box.right > div .title{font-size:.875rem}.phone button.currency.fsu-promo{line-height:1.6rem;padding:0 .3rem;height:3rem}.phone button.currency.fsu-promo .subtext{display:block;font-size:.6rem;line-height:1rem;text-transform:uppercase}.phone .fsu-player-other > div{font-size:0.6rem}.phone .small.player .fsu-cards-price{font-size:.6rem}.phone .small.player .fsu-cards-price{font-size:.6rem}.phone .small.player .fsu-cards-price::after{font-size:.875rem}.phone .fsu-cards.fsu-cards-attr{font-size:.6rem}.phone .fsu-quick-list .im{font-size:.875rem}        .fsu-cards-loan{left:auto;right:5% !important;top:72% !important;line-height:1.2rem !important;width:1rem !important;height:1rem !important;box-shadow:0 1px 3px #000 !important}.fsu-cards-chem{right:auto;left:5% !important;top:72% !important;line-height:.9rem !important;width:1rem !important;height:1rem !important;box-shadow:0 1px 3px #000 !important}.large.player .fsu-cards-loan{line-height:1.7rem !important;width:1.5rem !important;height:1.5rem !important;font-size:1.2rem !important;top:82% !important}                                      .ut-pinned-item .listFUTItem.has-auction-data .fsu-player-other{margin-top:0 !important;top:.8rem;right:.2rem;position:absolute;z-index:2}        .fsu-sbcfilter-box{align-items:center;background-color:#394754;display:flex;justify-content:center;padding:1rem;z-index:1}.fsu-sbcfilter-option{align-items:center;box-sizing:border-box;display:flex;flex:1;max-width:300px}.fsu-sbcfilter-option .ut-drop-down-control{margin-left:1rem;flex:1}             .fsu-cards-pos.old>div,div:not(.small)>.fsu-cards-attr.old>div{background-color:#0040A6}.small.player .fsu-price-box{font-size:.875rem}.large.player .fsu-price-box{font-size:1rem}.fsu-price-box.old{background-color:#0f1417;color:#a4a9b4;border:0}.small>.fsu-cards-attr.old{background-color:#0040A6}"

        
        function getFutbin(url){
            return new Promise(res => {
                GM_xmlhttpRequest({
                    method:"GET",
                    url:url,
                    headers: {
                        "Content-type": "application/json"
                    },
                    onload:function(response){
                        if(response.status == 404){
                            events.notice("notice.loaderror",2);
                            if(document.querySelector(".ut-click-shield").classList.contains("showing")){
                                events.hideLoader()
                            }
                            return;
                        }
                        res(JSON.parse(response.response))
                    },
                    onerror:function(){
                        events.notice("notice.loaderror",2);
                        if(document.querySelector(".ut-click-shield").classList.contains("showing")){
                            events.hideLoader()
                        }
                    }
                })
            })
        };
        const leagueCnName = {2012:'中超',61:'英乙',60:'英甲',14:'英冠',13:'英超',2208:'英丙',2149:'印超',32:'意乙',31:'意甲',54:'西乙',53:'西甲',68:'土超',50:'苏超',308:'葡超',39:'美职联',17:'法乙',16:'法甲',20:'德乙',19:'德甲',2076:'德丙',2118:'传奇',353:'阿甲',10:'荷甲',10010:'荷乙'};


        call.view = {
            card:UTPlayerItemView.prototype.renderItem,
            squad:UTBaseSquadSplitViewController.prototype.viewDidAppear,
            unassigned:UTUnassignedItemsViewController.prototype._renderView,
            pack:UTStorePackDetailsView.prototype._generate,
            build:UTSquadBuilderViewController.prototype.viewDidAppear,
        }
        UTSquadBuilderViewController.prototype.viewDidAppear = function() {
            call.view.build.call(this)
            if(this.squad.isSBC()){
                this._view.getSortDropDown().setIndexById(3);
            }
        }
        UTPlayerItemView.prototype.renderItem = function (p, t) {
            call.view.card.call(this, p, t);
            if (p.isValid()) {
                setTimeout(() => {
                    let st = 0;
                    let stc = st ? "old" : "new" ;
                    let ct = t.getExpColorMap(p.getTier());
                    let cr = `rgb(${ct.dividers.r},${ct.dividers.g},${ct.dividers.b})`;
                    let or = `rgb(0,64,166)`;
                    let cf = `rgb(${ct.footer.r},${ct.footer.g},${ct.footer.b})`;

                    //位置区块添加
                    let fcp = document.createElement("div");
                    fcp.classList.add("fsu-cards","fsu-cards-pos",stc);
                    fcp.style.borderColor =  st ? or : cr ;
                    fcp.setAttribute('data-id',p.id);
                    fcp.innerHTML = p.possiblePositions.filter((z) => {return z !== p.preferredPosition}).map((z) => {return "<div>" + UTLocalizationUtil.positionIdToName(z, services.Localization) + "</div>"}).join("");
                    this._fsuCardPos = fcp;

                    //额外属性区块
                    let pwork = ["?","M","L","H"];
                    let fca = document.createElement("div");
                    fca.classList.add("fsu-cards","fsu-cards-attr",stc);
                    fca.style.borderColor = st ? or : cr ;
                    fca.style.borderStyle = "solid";
                    fca.style.borderWidth = "1px";
                    fca.innerHTML = `<div>${p.isLeftFoot() ? "L" : "R"}</div><div>${pwork[p.getOffensiveWorkRate() + 1]}/${pwork[p.getDefensiveWorkRate() + 1]}</div><div>${p._skillMoves + 1}/${p._weakFoot}</div>`;
                    this._fsuCardAttr = fca;

                    //价格区块
                    let pp = info.roster.data.hasOwnProperty(p.definitionId) ? info.roster.data[p.definitionId].prices[info.base.platform].LCPrice : "0";
                    
                    let fcpr = document.createElement("div");
                    fcpr.classList.add("fsu-cards-price","fsu-price-box","fsu-price-val","fsu-cards","currency-coins",stc);
                    fcpr.setAttribute('data-id',p.definitionId);
                    fcpr.setAttribute('data-value',pp);
                    fcpr.style.borderColor = st ? or : cr ;
                    fcpr.innerText = pp;
                    this._fsuCardPrice = fcpr;

                    let fcpb = document.createElement("div");
                    fcpb.classList.add("fsu-price-box");
                    fcpb.setAttribute('data-id',p.definitionId);
                    let plast = "",ptl ="";
                    if(p.lastSalePrice !== 0){
                        plast = `<div class="fsu-price-last"><div class="title">${events.L10n("price.last")}</div><div class="value currency-coins">${p.lastSalePrice.toLocaleString()}</div></div>`;
                        ptl = pp ? events.priceLastDiff(pp.replace(/,/g, ''),p.lastSalePrice) : "<span></span>";
                    }
                    fcpb.innerHTML = `${plast}<div class="fsu-price-val" data-value="${pp}"><div class="title">${events.L10n("price.now")}${ptl}</div><div class="value currency-coins">${pp}</div></div>`
                    this._fsuCardPriceBox = fcpb;

                    let plow = info.base.price.hasOwnProperty(p.rating) ? `<div class="fsu-other-low currency-coins">${events.L10n("duplicate.lowprice")}${Number(info.base.price[p.rating]["p"]).toLocaleString()}</div>` : `<span class="fsu-other-low"></span>`;

                    let pe = -1;
                    if(p.duplicateId){
                        if(services.Item.itemDao.itemRepo.club.items._collection.hasOwnProperty(p.duplicateId)){
                            pe = services.Item.itemDao.itemRepo.club.items._collection[p.duplicateId].untradeable ? 0 : 1;
                        }
                    }else{
                        if(info.roster.thousand.hasOwnProperty(p.definitionId)){
                            pe = info.roster.thousand[p.definitionId].untradeable ? 0 : 1;
                        }
                    }
                    let pd = "";
                    if(pe == -1){
                        if(p.duplicateId !== 0 || p.rating <= info.roster.thousand.lowest){
                            pd = `<div class="fsu-other-dup">${events.L10n("duplicate.nodata")}</div>`;
                        }else{
                            pd = `<div class="fsu-other-dup swap">${events.L10n("duplicate.swap")}</div>`;
                        }
                    }else if(pe == 0){
                        pd = `<div class="fsu-other-dup not">${events.L10n("duplicate.not")}</div>`;
                    }else{
                        pd = `<div class="fsu-other-dup yes">${events.L10n("duplicate.yes")}</div>`;
                    }

                    let fco = document.createElement("div");
                    fco.classList.add("fsu-player-other","fsu-cards");
                    fco.innerHTML = `${pd}${plow}`;
                    this._fsuCardOther = fco;

                    let fcll = document.createElement("div");
                    fcll.classList.add("fsu-cards-lea-large","fsu-cards");
                    fcll.style.borderColor = cr;
                    fcll.innerHTML = `${UTLocalizationUtil.leagueIdToName(p.leagueId, services.Localization)}`;
                    this._fsuCardLeaL = fcll;

                    let fcls = document.createElement("div");
                    fcls.classList.add("fsu-cards-lea-small","fsu-cards");
                    fcls.style.color = cf;
                    fcls.innerHTML = `${services.Localization.locale.name == "简体中文" && leagueCnName.hasOwnProperty(p.leagueId) ? leagueCnName[p.leagueId] : UTLocalizationUtil.leagueIdToAbbr5(p.leagueId,services.Localization)}`;
                    this._fsuCardLeaS = fcls;
                    let pId = p.id ? p.id : p.definitionId;
                    if(!this.__root) return;
                    if(!this.__root.querySelector("span[p-id]")){
                        let fpi = document.createElement("span");
                        fpi.setAttribute('p-id',pId);
                        fpi.style.display = "none";
                        this._fsuCardPid = fpi;
                        this.__root.append(this._fsuCardPid);
                    }else{
                        this.__root.querySelector("span[p-id]").setAttribute('p-id',pId);
                    }
                    
                    if(this.__root.classList.contains("small")){
                        this.__root.parentNode.querySelectorAll(".fsu-cards").forEach(e => e.remove());
                        let sp = `span[p-id="${pId}"]`;
                        let pm = {
                            1:`.itemList > .listFUTItem.won ${sp}`,
                            2:`.itemList > .listFUTItem.has-auction-data ${sp}`,
                            3:`.itemList > .listFUTItem ${sp}`,
                            //拍卖行
                            7:`.SearchResults .paginated-item-list .listFUTItem.has-auction-data ${sp}`,
                            //替换球员上部
                            5:`.ut-pinned-item.has-iterator .listFUTItem ${sp}`, 
                            //比较价格上部
                            6:`.ut-pinned-item .listFUTItem ${sp}`,
                            //比较价格 
                            //普通样式
                            8:`.ut-club-search-results-view .paginated-item-list .listFUTItem ${sp}`,
                            //俱乐部
                            
                            10:`.paginated-item-list .listFUTItem ${sp}`,
                            21:`.ut-squad-pitch-view.sbc ${sp}`,
                            22:`.ut-squad-pitch-view ${sp}`,
                            23:`.ut-squad-slot-dock-view.sbc ${sp}`,
                            24:`.ut-squad-slot-dock-view ${sp}`,
                            25:`.reward.small ${sp}`,

                        }
                        let cs = 0;
                        for (let i in pm) {
                            if(document.querySelector(pm[i])){
                                if(!document.querySelector(pm[i]).parentNode.querySelectorAll(".fsu-cards").length){
                                    cs = Number(i);
                                    break
                                }
                            }
                        }
                        if(cs == 7 && document.querySelector(".icon-transfer.selected")) cs = 4;
                        if(cs == 8 && document.querySelector(".icon-club.selected")) cs = 9;
                        if(cs == 2 && cntlr.current().className == "UTWatchListViewController") cs = 11;
                        if(cs !== 0){
                            //位置区块添加
                            //额外属性区块
                            if([21,22].indexOf(cs) !== -1){
                                this.__root.after(this._fsuCardPos);
                                this._fsuCardAttr.style.borderWidth = 0;
                                this.__root.after(this._fsuCardAttr);
                            }else{
                                this.__root.prepend(this._fsuCardPos);
                                this._fsuCardAttr.children[0].remove();
                                this.__root.prepend(this._fsuCardAttr);
                            }
                            if([5,7,21,22,23,24,25].indexOf(cs) !== -1){
                                this.__root.prepend(this._fsuCardPrice);
                            }else{
                                let pbc = "right";
                                if(cs == 4 || cs == 11) pbc = "trf";
                                if(cs == 1 || cs == 2) pbc = "top";
                                this._fsuCardPriceBox.classList.add(pbc);
                                if(cs == 4 || cs == 11){
                                    if(this._fsuCardPriceBox.querySelector(".fsu-price-last")){
                                        this._fsuCardPriceBox.querySelector(".fsu-price-last").remove();
                                        this._fsuCardPriceBox.querySelector(".fsu-price-val .title span").remove();
                                    }
                                    this.__root.parentNode.append(this._fsuCardPriceBox);
                                }else if(cs == 6 || cs == 8){
                                    this.__root.prepend(this._fsuCardPrice);
                                }else{
                                    this.__root.after(this._fsuCardPriceBox);
                                }

                                if(cs == 4 || cs == 6) this._fsuCardOther.querySelector(".fsu-other-low").remove();
                                if(cs == 1 || cs == 8  || cs == 9) this._fsuCardOther.querySelector(".fsu-other-dup").remove();
                                this.__root.parentNode.append(this._fsuCardOther);
                            }
                            if(cs !== 22 && cs !== 24) this.__root.prepend(this._fsuCardLeaS);
                            
                        }
                    }else{
                        this.__root.prepend(this._fsuCardPos);
                        this._fsuCardAttr.style.borderWidth = 0;
                        this.__root.prepend(this._fsuCardAttr);
                        this.__root.prepend(this._fsuCardPrice);
                        this.__root.prepend(this._fsuCardLeaL);
                        if(document.querySelector(`.player-pick-option  span[p-id="${pId}"]`)){
                            this._fsuCardOther.querySelector(".fsu-other-low").remove();
                            this.__root.after(this._fsuCardOther)
                        }
                    }
                    let ccv = this.__root.parentNode.querySelector(".ut-squad-slot-chemistry-points-view.item");
                    if(ccv){
                        ccv.classList.add("fsu-cards-chem")
                    }
                    this.__loanInfoTab.classList.add("fsu-cards-loan");
                }, 10);
            };
        };
        call.plist = {
            sectioned:UTSectionedItemListView.prototype.addItems,
            paginated:UTPaginatedItemListView.prototype.renderItems,
            storeReveal:UTStoreRevealModalListView.prototype.addItems,
            picks:UTPlayerPicksViewController.prototype.viewDidAppear,
            club:UTClubRepository.prototype.removeClubItem,
            squadSet:UTSquadEntity.prototype.setPlayers,
            squadGR:UTSquadEntity.prototype.getRating,
            squad:UTSquadOverviewViewController.prototype.viewDidAppear
        }

        UTSquadOverviewViewController.prototype.viewDidAppear = function() {
            call.plist.squad.call(this);
            let p = this._squad._players.map(function (i) {if(i._item.type == "player" && !info.roster.data.hasOwnProperty(i._item.definitionId)){return i._item.definitionId}}).filter(i => i > 0);
            events.loadPlayerPrice(p);


            if(this._squad.isSBC()){
                let sp = this._view;
                let e = this._challenge.eligibilityRequirements;
                let t = 0;
                let th = document.createElement("div");
                th.classList.add("fsu-quick","top")
                sp._fsuQuickTop = th;
                let to = document.createElement("div");
                to.classList.add("fsu-quick-list","other");
                sp._fsuQuickOther = to;
                sp._fsuRlist = {};
                for (let i of e) {
                    if(i.kvPairs._collection.hasOwnProperty(19)){
                        t = i.kvPairs._collection[19][0];
                        sp._fsuCount = events.createButton(
                            new UTButtonControl(),
                            events.L10n("sbc.count"),
                            (e) => {events.squadCount(e);},
                            "im"
                        )
                        sp._fsuCount.__root.setAttribute("data-r",t);
                        sp._fsuQuickOther.append(sp._fsuCount.__root);
                    }
                    if(i.kvPairs._collection.hasOwnProperty(35)){
                        sp._fsuConsult = events.createButton(
                            new UTButtonControl(),
                            events.L10n("sbc.consult"),
                            (e) => {events.squadConsult(e);},
                            "im"
                        )
                        sp._fsuConsult.__root.setAttribute("data-id",this._challengeId);
                        sp._fsuQuickOther.append(sp._fsuConsult.__root);
                    }
                }
                if(t !== 0){
                    let l = [[1,6,3,1],[0,9,2,0]];
                    let h = `<div class="fsu-rlist top"><div class="fsu-rlist-item left">{list}</div><div class="fsu-rlist-inr">OR</div><div class="fsu-rlist-item right">{list}</div></div>`

                    for (let i in l) {
                        let tn = i == 0 ? "left" : "right";
                        let ts = document.createElement("div");
                        ts.classList.add("fsu-quick-list",tn);
                        sp._fsuQuickTop.append(ts);
                        if(i == 0){
                            sp._fsuQuickTop.append(events.createDF(`<div class="fsu-quick-inr">OR</div>`));
                        }
                        for (let si in l[i]) {
                            if(l[i][si] !== 0){
                                let o = t+1-Number(si);
                                let n = `t_${i}_${o}`
                                let r = events.createButton(
                                    new UTButtonControl(),
                                    "",
                                    (e) => {events.SBCSetRatingPlayers(e);},
                                    "im"
                                )
                                r.__root.innerHTML = `${o}<span>×${l[i][si]}</span>`;
                                r.__root.setAttribute("data-r",o);
                                sp._fsuRlist[n] = r;
                                sp._fsuQuickTop.querySelector(`.${tn}`).append(sp._fsuRlist[n].__root);
                            }
                        }
                    }
                }
                if(sp._fsuQuickOther.innerHTML !== ""){
                    sp._fsuQuickTop.append(sp._fsuQuickOther);
                }
                sp._summaryPanel.__root.append(sp._fsuQuickTop)
                let y = t !== 0 ? t : 75;
                let rh = document.createElement("div");
                rh.classList.add("fsu-quick","right");
                rh.innerHTML = `<div class="fsu-quick-list"></div>`;
                sp._fsuQuickRight = rh;
                for (let i = 0; i < 10; i++) {
                    let o = y+3-i;
                    let n = `r_${o}`
                    let r = events.createButton(
                        new UTButtonControl(),
                        o,
                        (e) => {events.SBCSetRatingPlayers(e);},
                        "im"
                    );
                    r.__root.setAttribute("data-r",o);
                    sp._fsuRlist[n] = r;
                    sp._fsuQuickRight.querySelector(".fsu-quick-list").append(sp._fsuRlist[n].__root);
                }
                let rd = events.createButton(
                    new UTButtonControl(),
                    events.L10n("sbc.qucikdupes"),
                    (e) => {events.SBCSetRatingPlayers(e);},
                    "im"
                );
                rd.__root.setAttribute("data-r","d");
                sp._fsuRlist["r_d"] = rd;
                sp._fsuQuickRight.querySelector(".fsu-quick-list").append(sp._fsuRlist["r_d"].__root);
                sp._summaryPanel.__root.after(sp._fsuQuickRight);
            }
        }
        //分个形式(拍卖行待售、待分配)球员列表 读取球员列表查询价格
        UTSectionedItemListView.prototype.addItems = function(...args) {
            call.plist.sectioned.call(this, ...args);
            let p = this.listRows.map(function (i) {if(i.data.type == "player" && !info.roster.data.hasOwnProperty(i.data.definitionId)){return i.data.definitionId}}).filter(Boolean);
            events.loadPlayerPrice(p);
        }

        //列表形式(右侧、拍卖行搜索结果、俱乐部)球员列表 读取球员列表查询价格
        UTPaginatedItemListView.prototype.renderItems = function(t) {
            call.plist.paginated.call(this,t);
            let p = this.listRows.map(function (i) {if(i.data.type == "player" && !info.roster.data.hasOwnProperty(i.data.definitionId)){return i.data.definitionId}}).filter(Boolean);
            events.loadPlayerPrice(p);
        }

        //球员预览包打开 读取球员列表查询价格
        UTStoreRevealModalListView.prototype.addItems = function(e, t, i, o) {
            call.plist.storeReveal.call(this, e, t, i, o);
            let p = e.map(function (it) {if(it.type == "player" && !info.roster.data.hasOwnProperty(it.definitionId)){return it.definitionId}}).filter(Boolean);
            events.loadPlayerPrice(p);
        }

        //球员挑选包打开 读取球员列表查询价格
        UTPlayerPicksViewController.prototype.viewDidAppear = function() {
            call.plist.picks.call(this);
            let p = this.picks.map(function (i) {if(i.type == "player" && !info.roster.data.hasOwnProperty(i.definitionId)){return i.definitionId}}).filter(Boolean);
            events.loadPlayerPrice(p);
        }

        //俱乐部卖掉球员 移除在阵容列表内球员 以便计算重复效果
        UTClubRepository.prototype.removeClubItem = function(t) {
            call.plist.club.call(this,t);
            if(info.roster.thousand.hasOwnProperty(t.definitionId)){
                delete(info.roster.thousand[t.definitionId]);
            }
        }

        //阵容评分获取 每次球员变化都会获取 主要计算阵容整体价格
        UTSquadEntity.prototype.getRating = function() {
            let r = call.plist.squadGR.call(this);
            let p = [];
            for (let i of this.getFieldPlayers()) {
                let id = i._item.definitionId;
                if(id > 0 && info.roster.data.hasOwnProperty(id)){
                    p.push(id)
                }
            }
            events.squadTotal(this.getFieldPlayers().map(function (i) {if(info.roster.data.hasOwnProperty(i._item.definitionId)){return i._item.definitionId}}).filter(i => i > 0));
            return r;
        }

        //阵容的总价格计算填充 需要传递阵容球员ID列表(数组)
        events.squadTotal = (p) => {
            let e = document.getElementById("squadTotal");
            if(e){
                let n = 0;
                for (let i of p) {
                    if(info.roster.data.hasOwnProperty(i)){
                        n += Number((info.roster.data[i].prices[info.base.platform].LCPrice).replace(/,/g, ""));
                    }
                }
                e.innerText = n.toLocaleString();
                if(n !== 0 && document.getElementById("sbcPrice")){
                    let p = e.parentNode.querySelector(".fsu-squad-pTitle");
                    if(p.querySelector("span")){
                        p.querySelector("span").remove();
                    }
                    p.append(events.createDF(events.priceLastDiff(n,document.getElementById("sbcPrice").innerText.replace(/,/g, ''))))
                }
            }
        }

        //差价计算 需要传递购买价格和预估价格
        events.priceLastDiff = (p,l) => {
            let n = ((Number(p)/Number(l)-1)*100).toFixed(0);
            if (!isFinite(n)) {
                n = 0;
            }
            let v = ("+" + n +"%").replace("+-","-");
            return v.indexOf("+") != -1 ? `<span class="plus">${v}</span>` : `<span class="minus">${v}</span>`;
        }
        
        //球员价格读取 需要传递球员ID列表(数组)
        events.loadPlayerPrice = async(list) => {
            if(list.length > 0){
                let la = Array.from(new Set(list));
                let pu = [];
                let gr = Math.ceil(la.length / 23);
                for (let i = 0; i < gr; i++) {
                    let lt = la.splice(-23).join();
                    pu.push(`https://www.futbin.com/${info.base.year}/playerPrices?player=&rids=${lt}`)
                }
                for (let k in pu) {
                    let t = await getFutbin(pu[k]);
                    info.roster.data = Object.assign(info.roster.data,t);
                    for (let k in t) {
                        let e = document.querySelectorAll(`.fsu-price-box[data-id='${k}']`);
                        let p = t[k].prices[info.base.platform].LCPrice;
                        if(e.length > 0){
                            for (let i of e) {
                                if(i.classList.contains("fsu-price-val")){
                                    i.setAttribute("data-value",p);
                                    i.innerText = p;
                                }else{
                                    i.querySelector(".fsu-price-val").setAttribute("data-value",p);
                                    i.querySelector(".fsu-price-val .value").innerText = p;
                                }
                                if(i.querySelectorAll(".fsu-price-last").length > 0){
                                    i.querySelector(".fsu-price-val .title span").outerHTML = events.priceLastDiff(p.replace(/,/g, ''),i.querySelector(".fsu-price-last .value").innerText.replace(/,/g, ''));
                                }
                            }
                        }
                        let b = document.querySelectorAll(`.btn-subtext.currency-coins[data-id='${k}']`)
                        if(b.length > 0){
                            for (let i of b) {
                                i.innerText = p;
                            }
                        }
                    }
                }
                if(document.getElementById("squadTotal")){
                    events.squadTotal(cntlr.current()._squad.getFieldPlayers().map(function (i) {return i._item.definitionId}).filter(i => i > 0));
                }
            }
        }

        //阵容页面显示 添加阵容价值部分
        UTBaseSquadSplitViewController.prototype.viewDidAppear = function(){
            call.view.squad.call(this);
            let p = this._squad.getPlayers().map(function (i) {if(i._item.type == "player" && !info.roster.data.hasOwnProperty(i._item.definitionId)){return i._item.definitionId}}).filter(i => i > 0);


            this._getLeftController().getView().getSummaryPanel().getRootElement().querySelector(`.ut-squad-summary-info${this.className == "UTSBCSquadSplitViewController" ? "--right" : ""}`).after(events.createDF(`<div class="fsu-squad-pBox"><div class="fsu-squad-pWrap"><span class="fsu-squad-pTitle">${events.L10n("sbc.topsquad")}</span><span id="squadTotal" class="fsu-squad-pValue currency-coins">0</span></div></div>`))
            
            if(!p.length){
                events.squadTotal(this._squad.getFieldPlayers().map(function (i) {if(info.roster.data.hasOwnProperty(i._item.definitionId)){return i._item.definitionId}}).filter(i => i > 0));
            }

            
            if(this._squad.isSBC()){
                let si;
                if(info.task.sbc.stat.hasOwnProperty(this._set.id)){
                    if(this._set.challengesCount == 1){
                        si = info.task.sbc.stat.hasOwnProperty(this._set.id) ? info.task.sbc.stat[this._set.id] : -1;
                    }else{
                        si = info.task.sbc.stat[this._set.id].hasOwnProperty("c") ? info.task.sbc.stat[this._set.id].c[this._challengeId] : -1;
                    }
                }
                if(si !== -1 && !document.getElementById("sbcPrice")){
                    this._getLeftController().getView().getRootElement().querySelector(".fsu-squad-pBox .fsu-squad-pWrap").after(events.createDF(`<div class="fsu-squad-pWrap"><span class="fsu-squad-pTitle">${events.L10n("sbc.topprice")}</span><span id="sbcPrice" class="fsu-squad-pValue currency-coins">${Number(info.base.platform == "pc" ? si.pc : si.tv).toLocaleString()}</span></div>`))
                }
            }
        }
        call.task = {
            sbcT:UTSBCHubView.prototype.populateTiles,
            sbcC:UTSBCChallengesViewController.prototype.viewDidAppear,
            sbcN:UTSBCHubView.prototype.populateNavigation,
            objN:UTObjectivesHubView.prototype.setupNavigation,
            objG:UTObjectiveCategoryView.prototype.setCategoryGroups,
            home:UTHomeHubView.prototype._generate,
            homeG:UTHomeHubView.prototype.getObjectivesTile,
        }
        events.squadCount = (e) => {
            let t = e.__root.getAttribute("data-r");
            let pa = cntlr.current()._squad.getFieldPlayers(),pn = [],pr = "";
            for (let i of pa) {
                if(i.isBrick()){
                    pn.push(0);
                }else{
                    if(i.item.rating !== 0){
                        pn.push(i.item.rating)
                    }
                }
            }
            if(pn.length > 0){
                pr = "&ratings=" + pn.join(",");
            }
            GM_openInTab(`https://futcd.com/sbc.html?target=${t}${pr}`, { active: true, insert: true, setParent :true });
        }
        events.squadConsult = (e) => {
            let i = e.__root.getAttribute("data-id");
            GM_openInTab(`https://www.futbin.com/squad-building-challenges/ALL/${i}/list`, { active: true, insert: true, setParent :true });
        }   
        //SBC阵容填充指定评分 需要元素携带data-r(评分),切换球员填充状态为3
        events.SBCSetRatingPlayers = async(e) => {
            let r = e.__root.getAttribute('data-r');
            let pi = 0,w,b;
            if(isPhone()){
                w = cntlr.current();
            }else{
                w = cntlr.left();
            }
            if(w.getView().getSelectedSlot() !== null){
                pi = w.getView().getSelectedSlot().getIndex();
            }
            if(w._squad._getSlotByIndex(pi).isBrick() || w._squad._getSlotByIndex(pi).isValid()){
                let pl = w._squad.getNonBrickSlots()
                for (const i of pl) {
                    if(!i.isValid()){
                        pi = i.getIndex();
                        break;
                    }
                }
            }
            await w.getView().selectSlot(pi);
            await w.getView().getSelectedSlot()._tapDetected(this);
            
            if(isPhone()){
                b = cntlr.current()._rootController;
            }else{
                b = cntlr.right();
            }
            if(r == "d"){
                if(b._panelView._fsuUn._interactionState){
                    await b._panelView._fsuUn._tapDetected(this);
                }else{
                    events.notice("notice.noduplicate",2);
                }
            }else{
                info.unassigned.state = true;
                info.unassigned.run = 3;
                info.unassigned.rating = r;
                await b._panelView._btnAddSwap._tapDetected(this);
            }
        }

        //SBC填充导航题头 加载导航额外信息
        UTSBCHubView.prototype.populateNavigation = function(e, t) {
            call.task.sbcN.call(this, e, t);
            setTimeout(() => {
                if(info.task.sbc.stat.hasOwnProperty("new")){
                    if(info.task.sbc.stat.new[0] > 0){
                        let t = this._SBCCategoriesTM.items;
                        let j = info.task.sbc.stat.new;
                        for (let n in j) {
                            t[n].__root.append(events.createDF(events.L10n(html.taskBar).replace("{Number}",`+${j[n]}`)));
                        }
                    }
                    if(services.SBC.repository.categories._collection.hasOwnProperty("Favourite")){
                        let f = services.SBC.repository.categories._collection.Favourite.setIds;
                        let se = 0;
                        for (let si of f) {
                            if(info.task.sbc.stat.hasOwnProperty(si)){
                                if(info.task.sbc.stat[si].e == "1") se++;
                            }
                        }
                        if(se > 0){
                            this._SBCCategoriesTM.items[1].__root.append(events.createDF(`<div class="fsu-task-bar-favorite">${se}</div>`));
                        }
                    }
            
                }
            },10);
        }

        //SBC填充任务列表 每次切换类型都重新填充 加载任务额外信息
        UTSBCHubView.prototype.populateTiles = function(e, t) {
            call.task.sbcT.call(this, e, t);
            let l = this.sbcSetTiles;
            for (let i of l) {
                events.sbcInfoFill(i.data.id,i);
            }
            if(t.isFavourite){
                let f = t.setIds;
                let se = 0;
                for (let si of f) {
                    if(info.task["sbc"].stat.hasOwnProperty(si)){
                        if(info.task["sbc"].stat[si].e == "1") se++;
                    }
                }
                let el = this._SBCCategoriesTM.items[1].__root;
                if(el.querySelector(".fsu-task-bar-favorite")){
                    el.querySelector(".fsu-task-bar-favorite").remove();
                }
                if(se > 0){
                    el.append(events.createDF(`<div class="fsu-task-bar-favorite">${se}</div>`));
                }
            }
            if(Object.keys(info.task.sbc.stat).length){
                this._fsuSbcFilter = new UTDropDownControl();
                let fa = [];
                for (let i = 0; i < 4; i++) {
                    fa.push(new UTDataProviderEntryDTO(i,i,events.L10n(`sbc.filter${i}`)))
                }
                this._fsuSbcFilter.init();
                this._fsuSbcFilter.setOptions(fa);
                this._fsuSbcFilter.addTarget(this._fsuSbcFilter, (e) => {events.sbcFilter(e);}, EventType.CHANGE);
                let b = document.createElement("div");
                b.classList.add("fsu-sbcfilter-box");
                let o = document.createElement("div");
                o.classList.add("fsu-sbcfilter-option");
                let s = document.createElement("div");
                s.innerText = events.L10n(`sbc.filtert`);
                o.appendChild(s);
                o.appendChild(this._fsuSbcFilter.__root);
                b.appendChild(o);
                if(this.__root.querySelector(".fsu-sbcfilter-box")){
                    this.__root.querySelector(".fsu-sbcfilter-box").remove()
                }
                this._SBCCategoriesTM.__root.after(b);
            }
        }
        events.sbcFilter = e => {
            let t = cntlr.current()._view.sbcSetTiles,g = e.getIndex();
            for (let i of t) {
                let y = true,d = i.data.id;
                if(info.task.sbc.stat.hasOwnProperty(d)){
                    let s = info.task.sbc.stat[d];
                    if(g == 1 && s.f !== "1") y = false;
                    if(g == 2 && s.e !== "1") y = false;
                    if(g == 3){
                        let n = parseFloat(s.u);
                        if(!isNaN(n)){
                            if(n < 65) y = false;
                        }else{
                            y = false
                        }
                    }
                }
                y ? i.show() : i.hide();
            }
        }
        //SBC子任务列表展示 填充额外信息和读取价格
        UTSBCChallengesViewController.prototype.viewDidAppear = function() {
            call.task.sbcC.call(this);
            events.sbcInfoFill(this.sbset.id,this.getView()._setInfo);
            events.sbcSubPrice(this.sbset.id,this.getView()._challengeTiles);
        }

        //打开futbin球员链接,需要元素携带data-id(球员id)和data-name(球员全称)
        events.openFutbinPlayerUrl = async(e) => {
            events.showLoader();
            let di = e.__root.getAttribute('data-id');
            let n = e.__root.getAttribute('data-name').normalize("NFKD").replace(/[\u0300-\u036f]/g, "").replace(/ø/g, "o");
            let u = `https://www.futbin.org/futbin/api/searchPlayersByName?playername=${n}&year=${info.base.year}`;
            let d = await getFutbin(u);
            let fi = "";
            for (let i of d.data) {
                if(i.resource_id == di){
                    fi = i.ID;
                    break;
                }
            }
            events.hideLoader();
            GM_openInTab(`https://www.futbin.com/${info.base.year}/player/${fi}/`, { active: true, insert: true, setParent :true });
        };
        //SBC信息填充,需要传递sbcid和需填充的元素
        events.sbcInfoFill = (d,e) => {
            if(!info.task.sbc.stat.hasOwnProperty(d)) return;
            let s = info.task.sbc.stat[d];
            if(s !== undefined){
                if(e.hasOwnProperty("__tileTitle")) e.__tileTitle.prepend(events.createDF(`${s.f == "1" ? "<span class='task-new'>" + events.L10n("task.new") + "</span>" : ""}`));
                if(!e.__root.querySelector(".task-expire")){
                    e.__root.prepend(events.createDF(`${s.e == "1" ? "<div class='task-expire'>" + events.L10n("task.expire") + "</div>" : ""}`));
                }
            }
            if(e._interactionState && !e.__root.querySelector(".fsu-sbc-info")){
                let p = s.type == "7" ? "0" : info.base.platform == "pc" ? s.pc : s.tv;
                e.__root.lastChild.before(events.createDF(events.L10n(html.sbcInfo).replace("{price}",Number(p).toLocaleString()).replace("{up}",s.u).replace("{down}",s.d)))
            }
            if(e._rewards.rewards.length == 1 && e._rewards.rewards[0].isItem){
                let it = e._rewards.rewards[0].item;
                if(it.type == "player"){
                    let fb = events.createButton(
                        new UTStandardButtonControl(),
                        events.L10n("sbc.watchplayer"),
                        (e) => {events.openFutbinPlayerUrl(e);},
                        "mini"
                    )
                    fb.__root.setAttribute("data-id",it.definitionId);
                    fb.__root.setAttribute("data-name",`${it._staticData.name}`);
                    e._rewards._fsuPlayer = fb;
                    e._rewards.__root.children[0].append(e._rewards._fsuPlayer.__root);
                }
            }
        }
        events.createDF = (t) => {
            let f = document.createRange().createContextualFragment(t);
            return f;
        }

        events.sbcSubPrice = async(id,e) => {
            if(!info.task.sbc.stat[id].hasOwnProperty("c")){
                let u = `https://www.futbin.org/futbin/api/getChallengesBySetId?set_id=${id}`;
                let d = await getFutbin(u);
                info.task.sbc.stat[id].c = {};
                for (let i of d.data) {
                    let j = {"tv":i.price.ps,"pc":i.price.pc};
                    info.task.sbc.stat[id].c[i.challengeId] = j;
                }
            }
            if(info.task.sbc.stat[id].hasOwnProperty("c")){
                for (let i of e) {
                    i.__tileContent.before(events.createDF(`<div class="fsu-sbc-info"><span class="currency-coins">${events.L10n("sbc.price")}${Number(info.base.platform == "pc" ? info.task.sbc.stat[id].c[i._data.id].pc : info.task.sbc.stat[id].c[i._data.id].tv).toLocaleString()}</span></div>`));
                }
            }
        }

        call.panel = {
            default:UTDefaultActionPanelView.prototype._generate,
            auction:UTAuctionActionPanelView.prototype._generate,
            slot:UTSlotActionPanelView.prototype._generate,
            transfer:UTTransferActionPanelView.prototype._generate,
            quickRender:UTQuickListPanelViewController.prototype.renderView,
            quick:UTQuickListPanelView.prototype._generate,
            loan:UTDuplicateLoanActionPanelView.prototype._generate
        }
        UTQuickListPanelViewController.prototype.renderView = function () {
            call.panel.quickRender.call(this);
            events.detailsButtonSet(this)
        };
        UTQuickListPanelView.prototype._generate = function (...args) {
            if (!this._generated) {
                call.panel.quick.call(this, ...args);
                events.detailsButtonQuick(this)
            }
        };
        UTDefaultActionPanelView.prototype._generate = function (...args) {
            if (!this._generated) {
                call.panel.default.call(this, ...args);
                events.detailsButtonAction(this)
            }
        };

        UTDuplicateLoanActionPanelView.prototype._generate = function (...args) {
            if (!this._generated) {
                call.panel.loan.call(this, ...args);
                events.detailsButtonAction(this)
            }
        }
        UTAuctionActionPanelView.prototype._generate = function (...args) {
            if (!this._generated) {
                call.panel.auction.call(this, ...args);
                events.detailsButtonAction(this)
            }
        };
        UTSlotActionPanelView.prototype._generate = function (...args) {
            if (!this._generated) {
                call.panel.slot.call(this, ...args);
                events.detailsButtonAction(this)
                info.criteria.state = true
            }
        };
        UTTransferActionPanelView.prototype._generate = function (...args) {
            if (!this._generated) {
                call.panel.transfer.call(this, ...args);
                events.detailsButtonAction(this)
            }
        };

        events.detailsButtonSet = (e) => {
            if(!isPhone() && !cntlr.current()._rightController) return;
            let w = isPhone() ? cntlr.current() : cntlr.right();
            if(w.hasOwnProperty("_rootController")) w = w._rootController;
            let a = w._panelView || w._panel;
            if(e.item.isPlayer()){
                if(e.item.definitionId && a.hasOwnProperty("_fsuPlayer")){
                    a._fsuPlayer.__root.setAttribute("data-id",e.item.definitionId);
                    a._fsuPlayer.__root.setAttribute("data-name",`${e.item._staticData.name}`);
                    a._fsuPlayer.setDisplay(1);
                }
                e._view._fsuBuy.__subtext.setAttribute('data-id',e.item.definitionId);
                if(info.roster.data.hasOwnProperty(e.item.definitionId)){
                    e._view._fsuBuy.setSubtext(info.roster.data[e.item.definitionId].prices[info.base.platform].LCPrice);
                }
                e._view._fsuBuy.setInteractionState(1);
            }else{
                e._view._fsuBuy.setDisplay(!1);
            }
            if(a.hasOwnProperty("_fsuSwap") && a.hasOwnProperty("_fsuUn")){
                if(e.item.id){
                    a._fsuSwap.__text.innerText = events.L10n("sbc.swapquick");
                    a._fsuUn.__text.innerText = events.L10n("sbc.swapduplicate");
                }else{
                    a._fsuSwap.__text.innerText = events.L10n("sbc.addquick");
                    a._fsuUn.__text.innerText = events.L10n("sbc.addduplicate");
                }
                if(Object.keys(info.criteria.data).length){
                    a._fsuSwap.setInteractionState(1);
                }
                let unj = services.Item.itemDao.itemRepo.unassigned._collection;
                if(!info.unassigned.state){
                    info.unassigned.run = 0;
                }
                info.unassigned.playerId = [];
                if(Object.keys(unj).length > 0){
                    let p = cntlr.current()._squad._players.map(function (i) {if(i.item.definitionId > 0){return i.item.definitionId}}).filter(Boolean);
                    for (let i in unj) {
                        if(unj[i].isDuplicate() && unj[i].loans == -1 && unj[i].type == "player" && p.indexOf(unj[i].definitionId) == -1){
                            info.unassigned.playerId.push(unj[i].definitionId);
                        }
                    }
                }
                if(info.unassigned.playerId.length){
                    a._fsuUn.setInteractionState(1);
                }else{
                    a._fsuUn.__text.innerText = events.L10n("sbc.notduplicate")
                }

            }
        }
        events.detailsButtonQuick = (e) => {
            let qb = events.createButton(
                new UTGroupButtonControl(),
                events.L10n("quicklist.auction"),
                (e) => {events.playerQuickAuction(e);},
                "accordian"
            )
            qb.setSubtext(0);
            qb.displayCurrencyIcon(!0);
            qb.setInteractionState(!1);
            e._fsuBuy = qb;
            e._btnToggle.__root.after(e._fsuBuy.__root);
        }
        //添加fut默认按钮
        events.createButton = (s,t,b,c) => {
            const btn = s;
            btn.init();
            btn.addTarget(btn, b.bind(btn), EventType.TAP);
            btn.setText(t);
            if(c){
                const cl = c.split(" ").filter(Boolean);
                for (let ci of cl) btn.getRootElement().classList.add(ci);
            }
            return btn;
        }
        events.detailsButtonAction = (e) =>{
            let fb = events.createButton(
                new UTGroupButtonControl(),
                events.L10n("quicklist.gotofutbin"),
                (e) => {events.openFutbinPlayerUrl(e);},
                "more"
            )
            fb.setDisplay(!1)
            e._fsuPlayer = fb;
            let pb = e._playerBioButton || e._btnPlayerBio;
            pb.__root.after(e._fsuPlayer.__root);
            if(e.hasOwnProperty("_btnAddSwap") && cntlr.current()._squad.isSBC()){
                let fq = events.createButton(
                    new UTGroupButtonControl(),
                    "quickSwap",
                    async() => {
                        info.criteria.repeat = 1;
                        if(isPhone()){
                            await cntlr.current()._rootController._panelView._btnAddSwap._tapDetected(this)
                        }else{
                            await cntlr.right()._panelView._btnAddSwap._tapDetected(this);
                        }
                        console.log("快捷添加状态变为",1)
                    },
                    ""
                )
                fq.setInteractionState(!1);
                e._fsuSwap = fq;
                e._btnAddSwap.__root.after(e._fsuSwap.__root);

                let fu = events.createButton(
                    new UTGroupButtonControl(),
                    "unassigned",
                    async() => {
                        info.unassigned.state = true;
                        info.unassigned.run = 1;
                        if(isPhone()){
                            await cntlr.current()._rootController._panelView._btnAddSwap._tapDetected(this)
                        }else{
                            await cntlr.right()._panelView._btnAddSwap._tapDetected(this);
                        }
                        console.log("点击按钮变为状态",1)
                    },
                    ""
                )
                fu.setInteractionState(!1);
                e._fsuUn = fu;
                e._fsuSwap.__root.after(e._fsuUn.__root);
            }
        }

        events.playerQuickAuction = async(e) => {
            let p = Number(e.__subtext.innerText.replace(/,/g, ''));
            if(!p) return;
            let w = isPhone() ? cntlr.current() : cntlr.right();
            await w._quickListPanel._view._bidNumericStepper.setValue(p);
            await w._quickListPanel._view._buyNowNumericStepper.setValue(p);
            await w._quickListPanel._view._listButton._tapDetected(this);
            events.notice("notiec.quickauction",1);
        }

        UTObjectivesHubView.prototype.setupNavigation = function(e) {
            call.task.objN.call(this,e)
            let t = this._objectivesTM.items;
            for (let i of t) {
                if(info.task.obj.stat.new.hasOwnProperty(i.id)){
                    i.__root.append(events.createDF(events.L10n(html.taskBar).replace("{Number}",`+${info.task.obj.stat.new[i.id]}`)))
                }
            }
        }

        UTObjectiveCategoryView.prototype.setCategoryGroups = function(t, e) {
            call.task.objG.call(this ,t, e)
            let g = this.groups;
            for (let i of g) {
                if(info.task.obj.stat[i.id].f){
                    i.__title.prepend(events.createDF(`<span class="task-new">${events.L10n("task.new")}</span>`))
                }
                if(info.task.obj.stat[i.id].e){
                    i.__title.parentNode.after(events.createDF(`<div class="task-expire">${events.L10n("task.expire")}</div>`))
                }
            }
        }
        UTHomeHubView.prototype._generate = function (...args) {
            if (!this._generated) {
                call.task.home.call(this, ...args);
                GM_addStyle(info.base.sytle);
                events.init();
                info.base.state = true;
            }
        };
        UTHomeHubView.prototype.getObjectivesTile = function() {
            let r = call.task.homeG.call(this);
            if(info.task.obj.html && !this._objectivesTile.__root.querySelector(".fsu-task")){
                this._objectivesTile.__tileContent.before(
                    events.createDF(`<div class="fsu-task">${info.task.obj.html}</div>`)
                )
            }
            if(info.task.sbc.html && !this._sbcTile.__root.querySelector(".fsu-task")){
                this._sbcTile.__tileContent.before(
                    events.createDF(`<div class="fsu-task">${info.task.sbc.html}</div>`)
                )
            }
            return r;
        }
        call.search = {
            did:UTClubSearchFiltersViewController.prototype.viewDidAppear,
            filters:UTItemSearchView.prototype.setFilters ,
            result:UTPaginatedItemListView.prototype.setPaginationState,

        };
        UTClubSearchFiltersViewController.prototype.viewDidAppear = function() {
            call.search.did.call(this)
            if(info.criteria.state){
                events.searchFill(this,-1);
            }
        }
        UTItemSearchView.prototype.setFilters = function(e, t) {
            call.search.filters.call(this,e, t)
            if(e.searchCriteria.type == "player" && !isPhone()){
                events.searchInput(this)
            }
        }
        events.searchFill = async(e,t) =>{
            if(t == -1){
                t = info.unassigned.run;
            }
            let c = e.viewmodel.searchCriteria;
            if(t == 1){
                let s = new UTSearchCriteriaDTO();
                s._type = "player";
                s.count = 21;
                s.sortBy = Object.keys(info.criteria.data).length ? info.criteria.data.sortBy : "ovr";
                s._sort = Object.keys(info.criteria.data).length ? info.criteria.data._sort : "asc";
                s.defId = info.unassigned.playerId;
                await e.setSearchCriteria(s);
                await e._view.getSearchButton()._tapDetected(this);
                events.notice("notice.duplicateloading",1);
                return;
            }
            if(t == 3){
                let s = new UTSearchCriteriaDTO();
                s._type = "player";
                s.count = 21;
                s.sortBy = "value";
                s._sort = "asc";
                let sr,r = info.base.ratings[info.unassigned.rating];
                if(r.length > 650){
                    if (Math.random() > 0.5) {
                        sr = r.sort((a, b) => a - b).slice(0, 650);
                    } else {
                        sr = r.sort((a, b) => b - a).slice(0, 650);
                    }
                }else{
                    sr = r;
                }
                s.defId = sr;
                await e.setSearchCriteria(s);
                await e._view.getSearchButton()._tapDetected(this);
                events.notice("notice.appointloading",1);
                return;
            }
            if(t !== 0 && c.defId.length == 0){
                console.log("状态不是0","但是判断符合条件给变成0")
                t = 0;
                info.unassigned.run = 0;
                if(isPhone()){
                    getAppMain().getRootViewController().getPresentedViewController().getCurrentViewController()._eBackButtonTapped();
                    return;
                }
            }
            if(t == 4){
                console.log("状态4","修改input")
                await e._view.getPlayerNameSearch()._playerNameInput.setValue(events.L10n("sbc.appoint"));
                e._view.getPlayerNameSearch().selected.firstName = events.L10n("sbc.appoint");
                e._view.getPlayerNameSearch().selected.lastName = "";
                await e._view.getSortDropDown().setIndexById(2);
                return;
            }
            if(t == 2){
                console.log("状态2","修改input")
                await e._view.getPlayerNameSearch()._playerNameInput.setValue(events.L10n("sbc.duplicates"));
                e._view.getPlayerNameSearch().selected.firstName = events.L10n("sbc.duplicates");
                e._view.getPlayerNameSearch().selected.lastName = "";
                await e._view.getSortDropDown().setIndexById(2);
                return;
            }
            console.log("开始判断进行填充选项","此时的saveCriteria为:",info.criteria.data)
            if(Object.keys(info.criteria.data).length == 0){
                await e._view.getSortDropDown().setIndexById(2);
                info.criteria.state = false;
            }else{
                info.criteria.state = false;
                //交易选项匹配判断
                c._untradeables = info.criteria.data._untradeables;
                if(info.criteria.data._untradeables == "true"){
                    await e._view.getSortOptions().toggles._collection["sort-untradeable"].toggle(true);
                }else{
                    await e._view.getSortOptions().toggles._collection["sort-untradeable"].toggle(false);
                }
                //排除队伍选项匹配判断
                if(cntlr.current().className == `UTSquadSplitViewController`){
                    c.excludeDefIds = [];
                }else{
                    c.excludeDefIds = info.criteria.data.excludeDefIds;
                    if(info.criteria.data.excludeDefIds.length > 0){
                        await e._view.getSortOptions().toggles._collection["sort-exclude-squad"].toggle(true);
                    }else{
                        await e._view.getSortOptions().toggles._collection["sort-exclude-squad"].toggle(false);
                    }
                }
                //排序条件选项匹配判断
                if(info.criteria.data.sortBy !== c.sortBy || info.criteria.data._sort !== c._sort){
                    let sort = ["valuedesc","valueasc","ovrdesc","ovrasc","recentdesc"]
                    for (let i = 0; i < sort.length; i++) {
                        if(info.criteria.data.sortBy + info.criteria.data._sort == sort[i]){
                            await e._view.getSortDropDown().setIndexById(i);
                            break;
                        }
                    }
                }
                //品质条件选项匹配判断
                if(info.criteria.data.level !== c.level){
                    for (const v of e._view._filterContainer.filters[0].options) {
                        if(v.value == info.criteria.data.level){
                            await e._view._filterContainer.filters[0].setIndexById(v.id);
                            break;
                        }
                    }
                }
                //稀有条件选项匹配判断
                if(info.criteria.data.rarities !== c.rarities){
                    if(info.criteria.data.rarities.length == 1){
                        await e._view._filterContainer.filters[1].setIndexById(info.criteria.data.rarities[0])
                    }
                }
                //位置条件选项匹配判断
                if(info.criteria.data._position == "any"){
                    await e._view._filterContainer.filters[2].setIndexById(-1)
                }else{
                    let posId = -1;
                    if(cntlr.current()._squad._players[cntlr.left().getView().getSelectedSlot()._slotIndex].position !== null){
                        posId = cntlr.current()._squad._players[cntlr.left().getView().getSelectedSlot()._slotIndex].position.typeId;
                    }
                    await e._view._filterContainer.filters[2].setIndexById(posId)
                }
                if(info.criteria.data.nation !== c.nation){
                    await e._view._filterContainer.filters[4].setIndexById(info.criteria.data.nation)
                }
                if(info.criteria.data.league !== c.league){
                    await e._view._filterContainer.filters[5].setIndexById(info.criteria.data.league)
                }
                if(info.criteria.data.club !== c.club){
                    await e._view._filterContainer.filters[6].setIndexById(info.criteria.data.club)
                }
                if(info.criteria.repeat == 1){
                    setTimeout(() => {
                        e._view.getSearchButton()._tapDetected(this);
                    }, 50);
                    info.criteria.repeat = 0;
                    events.notice("notice.quicksearch",1);
                    console.log("快捷添加状态变为",0)
                    return;
                }
            }
        }

        UTPaginatedItemListView.prototype.setPaginationState = function(t, e) {
            call.search.result.call(this , t ,e)
            if(this._interactionState){
                info.unassigned.state = false;
                if(info.unassigned.run == 1){
                    info.unassigned.run = 2;
                    console.log("状态1","有结果变为状态2")
                    if(!this.getRows()){
                        events.notice("notice.noduplicate",2);
                        services.Item.itemDao.itemRepo.unassigned.reset();
                        return;
                    }
                }
                if(info.unassigned.run == 3){
                    info.unassigned.run = 4;
                    if(!this.getRows()){
                        console.log("状态3","有结果变为状态4")
                        events.notice("notice.noduplicate",2);
                        return;
                    }
                }
                if(cntlr.current().hasOwnProperty("_squad")){
                    if(cntlr.current()._squad.isSBC()){
                        let w;
                        if(isPhone()){
                            w = cntlr.current()._currentController;
                        }else{
                            w = cntlr.right();
                        }
                        if(w.searchCriteria.defId.length == 0){
                            info.criteria.data = JSON.parse(JSON.stringify(w.searchCriteria));
                        }
                    }
                }
            }
        }
        events.searchInput = (c) => {
            for (let i of ["club","nation","league"]) {
                let s = c.searchFilters._collection[i];
                let a = s.options.map(e => e.label);
                s.__root.setAttribute("data-f",i);
                let st = s.__label.innerText;
                s.__label.innerHTML = "";
                s.__label.style.marginRight = 0 
                0;
                s.__list.style.height = "14rem";
                s.__list.style.backgroundColor = "#171826";
                s.__list.setAttribute("data-f",i);
                let ip = document.createElement("input");
                ip.classList.remove("ut-text-input-control");
                ip.classList.add("fsu-input");
                if(st == services.Localization.localize(`sbc.requirements.subType.${i}`)){
                    ip.setAttribute("placeholder",st);
                }else{
                    ip.setAttribute("value",st);
                }
                ip.setAttribute("maxlength","50");
                ip.setAttribute("data-f",i);
                ip._oData = a;
                ip.addEventListener('compositionstart', events.searchInputEvent);
                ip.addEventListener('compositionend', events.searchInputEvent);
                ip.addEventListener('input', events.searchInputEvent);
                ip.addEventListener('blur', events.searchInputEvent);
                ip.addEventListener('focus', events.searchInputEvent);
                s[`_fsu${i}`] = ip;
                s.__label.append(s[`_fsu${i}`]);
            }
        }
        events.searchInputEvent = (e) => {
            let iz = cntlr.current()._view;
            if(cntlr.current().hasOwnProperty("_rightController")){
                iz = cntlr.right()._view;
            }
            if(e.type == "compositionstart"){
                info.base.input = false;
            }
            if(e.type == "compositionend"){
                info.base.input = true;
            }
            if(e.type == "input"){
                setTimeout(() => {
                    if(info.base.input){
                        let v = e.target.value;
                        let f = e.target.getAttribute("data-f");
                        let z = iz.hasOwnProperty("_filterContainer") ? iz._filterContainer.searchFilters._collection[f] : iz._searchFilters.searchFilters._collection[f];
                        let p = `ul[data-f='${f}'] li`;
                        if(!z.isOpen){
                            z.open()
                        }
                        e.target._oData.forEach(function(el, i) {
                            let a = document.querySelectorAll(p)[i];
                            if(el.includes(v)){
                                a.classList.remove("hide");
                            }else{
                                a.classList.add("hide");
                            }
                        })
                    }
                }, 0);
            }
            if(e.type == "blur"){
                let v = e.target.value;
                let f = e.target.getAttribute("data-f");
                let z = iz.hasOwnProperty("_filterContainer") ? iz._filterContainer.searchFilters._collection[f] : iz._searchFilters.searchFilters._collection[f];
                if(v !== z.label){
                    if(z.id == -1){
                        e.target.value = "";
                    }else{
                        e.target.value = z.label;
                    }
                }
            }
            if(e.type == "focus"){
                e.target.value = "";
            }
        }
        UTUnassignedItemsViewController.prototype._renderView = function(...args) {
            let r = call.view.unassigned.call(this, ...args);
            if(this._view.sections.length){
                this._view._fsuUasreset = events.createButton(
                    new UTStandardButtonControl(),
                    events.L10n("uasreset.btntext"),
                    async(e) => {
                        await services.Item.itemDao.itemRepo.unassigned.reset();
                        await getAppMain().getRootViewController().getPresentedViewController().getCurrentViewController()._backButton._tapDetected(this);
                        events.notice("notice.uasreset",0);
                    },
                    "mini call-to-action section-header-btn fsu-uasreset"
                )
                this._view.__root.querySelector(".ut-section-header-view").append(this._view._fsuUasreset.__root)
            }
            return r;
        }

        //SBC无须排列创建队伍
        UTSquadBuilderViewModel.prototype.generatePlayerCollection = function (e,o,n) {
            let c = 0;
            return e.map(function (_, t) {
                var i = n ? n.getSlot(t) : null;
                return i && (i.isValid() || i.isBrick()) ?
                    i.getItem() :
                    o[c++];
            });
        };


        UTStorePackDetailsView.prototype._generate = function(...args) {
            if (!this._generated) {
                call.view.pack.call(this,...args)
                if(info.base.promo){
                    let f = events.createButton(
                        new UTCurrencyButtonControl(),
                        info.base.promo,
                        (e) => {
                            GM_openInTab(`https://www.fut.gg/players/?in_packs=1`, { active: true, insert: true, setParent :true });
                        },
                        "fsu-promo"
                    )
                    f.setSubText(events.L10n("pack.promo"))
                    this._fsuPromo = f;
                    this._fsuPromoBox = document.createElement("div");
                    this._fsuPromoBox.classList.add("fsu-promo-box");
                    this._fsuPromoBox.append(this._fsuPromo.__root);
                    this.__root.querySelector(".ut-store-pack-details-view--pack-counts").append(this._fsuPromoBox)
                }
            }
        }
    })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址