|
本文为 其乐用户(UID:376220) 发布的原创文章,转摘前请联系该用户获得许可
本帖最后由 376220 于 2025-7-11 23:22 编辑
原脚本:https://keylol.com/t129183-1-1
但脚本好像已经被删除了,中间改过几个版本,而这次夏促发现出现了夏促卡牌随机无法加载出价格的问题
检查了一下原因是促销开始一周前的神秘卡牌(促销开始后会转换为正常的促销卡牌)偶尔也会在过滤结果中,导致匹配错误。
修改方法是在市场过滤器里加上可出售的过滤条件:
$J.getJSON('//steamcommunity.com/market/search/render/?start=0&count=20&category_753_cardborder[]=tag_cardborder_'+foil+'&appid=753&category_753_Game[]=tag_app_'+appid, function(data){ 修改为
$J.getJSON('//steamcommunity.com/market/search/render/?start=0&count=40&category_753_cardborder[]=tag_cardborder_'+foil+'&appid=753&category_753_item_class%5B%5D=marketable&category_753_Game[]=tag_app_'+appid, function(data){ 即可正常使用
考虑到原始链接已经无法打开,这里放上修改后的版本:
- // ==UserScript==
- // @name Enhanced Steam Community
- // @author Deparsoul & onisuly
- // @namespace https://greasyfork.org/users/726
- // @description Add some extra functions to Steam Community
- // @copyright 2015+, Deparsoul & onisuly
- // @version 2019.11.29
- // @icon https://store.steampowered.com/favicon.ico
- // @license GPL version 3 or any later version
- // @include http*://steamcommunity.com/*
- // @include http*://store.steampowered.com/*
- // @run-at document-end
- // @grant GM_xmlhttpRequest
- // @connect www.steamcardexchange.net
- // ==/UserScript==
- /*
- *This program is free software: you can redistribute it and/or modify
- *it under the terms of the GNU General Public License as published by
- *the Free Software Foundation, either version 3 of the License, or
- *(at your option) any later version.
- *
- *This program is distributed in the hope that it will be useful,
- *but WITHOUT ANY WARRANTY; without even the implied warranty of
- *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *GNU General Public License for more details.
- *
- *You should have received a copy of the GNU General Public License
- *along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- // 下面用了一个将代码嵌入到网页中的技巧
- function escMain() {
- // Enhanced Steam Community 代码开始
- $J = $J || jQuery;
- // 多语言支持
- var escSteamLanguage = escGetCookie("Steam_Language");
- var escMatch;
- if (!escSteamLanguage) {
- // 尝试从网页中检测出语言
- escMatch = document.head.innerHTML.match(/l=([a-z]+)/);
- if (escMatch) {
- escSteamLanguage = escMatch[1];
- }
- }
- // 默认语言字符串
- var escT = {};
- {
- escT.Market = "View in Market";
- escT.MarketAll = "All";
- escT.MarketCard = "Card";
- escT.MarketBackground = "Background";
- escT.MarketEmoticon = "Emoticon";
- escT.Inventory = "View in My Inventory";
- escT.Showcase = "Card Showcase";
- escT.EditBKG = "Edit Background";
- escT.BKGTips = "Please enter your background image link:\n(resolution:1920x1200)";
- escT.SearchFriends = "Search Friends";
- escT.WebChat = "Web Chat";
- escT.OneClickBuying = "1-Click buying";
- escT.ViewMarket = "View in Market";
- escT.SellItem = "Sell";
- escT.BKGAlert = "Please set a background in edit profile page first!";
- escT.ViewBKG = "View Background";
- escT.ViewBKGSign = "Profile Background";
- escT.LibrarySearch = "Advanced Search";
- escT.BatchBuyCard = "Batch Buy Cards (Beta, Use at Your Own Risk)";
- escT.BatchBuyBtn = "Batch Buy";
- escT.BatchBuyConfirm = "Batch Buy Confirmation";
- escT.BatchBuyMessage = "Your current buy orders will be canceled. Please keep this window open while placing orders. And you need to pay at most ";
- escT.BatchBuyCheck = "Fail to fetch market info. You may need to open the market page of any card and try again";
- escT.Confirm = "Confirm";
- escT.Cancel = "Cancel";
- escT.Name = "Name";
- escT.Demand = "Demand";
- escT.Supply = "Supply";
- escT.Order = "Order";
- escT.Owned = "Owned";
- escT.Loading = "Loading...";
- escT.TargetLevel = "Target Level";
- escT.CurrentLevel = "Current Level";
- escT.BoosterPack = "Booster Pack";
- escT.ThreeCardAvg = "Three Cards";
- escT.Fail = "Fail";
- escT.BatchBuyModes = ["Buy Them Now", "Lowest Sell", "Highest Buy", "Second Buy", "Lowest"];
- }
- // 中文支持,可仿照此格式扩展其他语言
- if (escSteamLanguage == "schinese") {
- escT.Market = "在“市场”中查看";
- escT.MarketAll = "全部";
- escT.MarketCard = "卡牌";
- escT.MarketBackground = "背景";
- escT.MarketEmoticon = "表情";
- escT.Inventory = "在我的“库存”中查看";
- escT.Showcase = "卡片展示橱窗";
- escT.EditBKG = "编辑背景图";
- escT.BKGTips = "请输入你的背景图链接:\n(分辨率:1920x1200)";
- escT.SearchFriends = "搜索好友";
- escT.WebChat = "网页聊天";
- escT.OneClickBuying = "一键购买";
- escT.ViewMarket = "在市场中查看";
- escT.SellItem = "出售";
- escT.BKGAlert = "请先在编辑个人资料页面设置一个背景!";
- escT.ViewBKG = "查看背景图";
- escT.ViewBKGSign = "个人资料背景";
- escT.LibrarySearch = "高级搜索";
- escT.BatchBuyCard = "批量购买卡牌(测试中,风险自负)";
- escT.BatchBuyBtn = "批量下单";
- escT.BatchBuyConfirm = "批量购买确认";
- escT.BatchBuyMessage = "请注意,你目前已有的订购单会被取消。下单需要一段时间,请不要关闭窗口。本次批量下单的总金额为:";
- escT.BatchBuyCheck = "无法获取市场信息,你可能需要先打开某张卡片的市场页面,再重新尝试本功能";
- escT.Confirm = "确认";
- escT.Cancel = "取消";
- escT.Name = "名称";
- escT.Demand = "需要";
- escT.Supply = "供给";
- escT.Order = "订单";
- escT.Owned = "已有";
- escT.Loading = "加载中...";
- escT.TargetLevel = "目标等级";
- escT.CurrentLevel = "当前等级";
- escT.BoosterPack = "补充包";
- escT.ThreeCardAvg = "三张卡";
- escT.Fail = "出错";
- escT.BatchBuyModes = ["尽快买齐", "最低卖价", "最高买价", "第二买价", "最低出价"];
- }else if (escSteamLanguage == "tchinese") {
- escT.Market = "在“市集”中查看";
- escT.MarketAll = "全部";
- escT.MarketCard = "卡片";
- escT.MarketBackground = "背景";
- escT.MarketEmoticon = "表情";
- escT.Inventory = "在我的“物品库”中查看";
- escT.Showcase = "卡片展示橱窗";
- escT.EditBKG = "编辑背景图";
- escT.BKGTips = "请输入你的背景图连结:\n(解析度:1920x1200)";
- escT.SearchFriends = "搜索好友";
- escT.WebChat = "网页聊天";
- escT.OneClickBuying = "一键购买";
- escT.ViewMarket = "在市场中查看";
- escT.SellItem = "贩卖";
- escT.BKGAlert = "请先在编辑个人档案页面设置一个背景!";
- escT.ViewBKG = "查看背景图";
- escT.ViewBKGSign = "个人档案背景";
- escT.LibrarySearch = "高级搜索";
- escT.BatchBuyCard = "批量购买卡牌(测试中,风险自负)";
- escT.BatchBuyBtn = "批量下单";
- escT.BatchBuyConfirm = "批量购买确认";
- escT.BatchBuyMessage = "请注意,你目前已有的买单会被取消。下单需要一段时间,请不要关闭窗口。买单的总金额为:";
- escT.BatchBuyCheck = "无法获取市场信息,你可能需要先打开某张卡片的市场页面,再重新尝试本功能";
- escT.Confirm = "确认";
- escT.Cancel = "取消";
- escT.Name = "名称";
- escT.Demand = "需要";
- escT.Supply = "供给";
- escT.Order = "订单";
- escT.Owned = "已有";
- escT.Loading = "加载中...";
- escT.TargetLevel = "目标等级";
- escT.CurrentLevel = "当前等级";
- escT.BoosterPack = "补充包";
- escT.ThreeCardAvg = "三张卡";
- escT.Fail = "出错";
- escT.BatchBuyModes = ["尽快买齐", "最低卖价", "最高买价", "第二买价", "最低出价"];
- }
- var escUrlBase = $J('#global_actions .user_avatar').attr('href');
- var escUrlInventory = escUrlBase + 'inventory/';
- if (location.href.match(/^https?:\/\/steamcommunity\.com\/(id|profiles)\/.+\/gamecards\/[0-9]+/)) {
- // 某个游戏的徽章页面
- escEnhanceBadges();
- } else if (location.href.match(/^https?:\/\/store\.steampowered\.com\/recommended\/friendactivity/)) {
- // 好友活动页面
- setTimeout(escFriendActivity, 100);
- } else if (location.href.match(/^https?:\/\/steamcommunity\.com\/market\/listings\/.+/)) {
- // 市场商品页面
- escOneClickBuying();
- } else if (location.href.match(/^https?:\/\/steamcommunity\.com\/market\/search\?.+/)) {
- // 市场搜索页面
- escEnhanceMarketSearch();
- } else if (location.href.match(/^https?:\/\/store\.steampowered\.com\/agecheck\/app\/[0-9]+\//)) {
- // 年龄检查页面
- escSkipAgeCheck();
- } else if (location.href.match(/^https?:\/\/steamcommunity\.com\/(id|profiles)\/.+\/friends/)) {
- // 好友页面
- escEnhanceFriends();
- } else if (location.href.match(/^https?:\/\/steamcommunity\.com\/(id|profiles)\/.+\/inventory/)) {
- // 库存页面
- escMatch = location.href.match(/(#.*)\?filter=(.*)/);
- if (escMatch) {
- location.hash = escMatch[1];
- escApplyInventoryFilter(0, escMatch[2]);
- }
- escEnhanceInventory();
- } else if (location.href.match(/^https?:\/\/steamcommunity\.com\/tradeoffer\/.+/)) {
- // 离线交易页面
- setTimeout(escEnhanceTradeOffer, 500);
- }
- function escFriendActivity() {
- for (var prefix in g_rgPagingControls) {
- var originalResponseHandler = g_rgPagingControls[prefix].m_fnResponseHandler;
- g_rgPagingControls[prefix].SetResponseHandler(function (response) {
- originalResponseHandler(response);
- $J('img[src$="friendactivity_noimage.jpg"]').each(function () {
- var $img = $J(this);
- var $link = $J(this).parent();
- var appid = $link.data('ds-appid');
- if (appid) {
- $link.attr('href', '//store.steampowered.com/app/' + appid + '/?cc=hk');
- $img.attr('src', '//cdn.akamai.steamstatic.com/steam/apps/' + appid + '/capsule_sm_120.jpg');
- }
- });
- });
- }
- }
- function escEnhanceTradeOffer() {
- // 防止库存页卡住的迷之代码
- $J('#inventory_select_their_inventory').click();
- $J('#inventory_select_your_inventory').click();
- // 过滤对应的 appid
- var match = location.href.match(/for_tradingcard=(\d+)_/);
- if (match) {
- var appid = match[1];
- setTimeout('TradePageSelectInventory(UserYou, 753, 0)', 5);
- var filter = 'tag_filter_753_0_Game_app_' + appid;
- function apply_filter() {
- escApplyInventoryFilter(0, filter);
- }
- setTimeout(apply_filter, 500);
- $J('#inventory_select_their_inventory, #inventory_select_your_inventory').click(apply_filter);
- }
- }
- function escChangeMarketSearchPageSize() {
- if (!escGetLS('market_pagesize')) {
- escSetLS('market_pagesize', 20);
- }
- var pagesize = escGetLS('market_pagesize');
- g_oSearchResults.SetPageChangedHandler(function () {
- escShowInventoryAmount();
- });
- if (pagesize && g_oSearchResults.m_cPageSize != pagesize && typeof g_oSearchResults !== undefined) {
- g_oSearchResults.m_cPageSize = pagesize;
- g_oSearchResults.m_bLoading = false;
- HandleHashChange(0);
- g_oSearchResults.GoToPage(0, true);
- $J('#searchResultsRows').stop().fadeTo(0, 1.0);
- }
- }
- function escEnhanceMarketSearch() {
- escShowInventoryAmount();
- setTimeout(escChangeMarketSearchPageSize, 300);
- }
- // 打开库存时自动激活指定过滤条件
- function escApplyInventoryFilter(i, filter) {
- // 尝试展开过滤器列表
- if (g_ActiveInventory && g_ActiveInventory.ShowTags)
- g_ActiveInventory.ShowTags();
- if (filter) {
- if ($J('#' + filter).length) {
- $J('#' + filter).click();
- } else {
- ++i;
- if (i < 20) // 限制重试次数
- setTimeout('escApplyInventoryFilter(' + i + ', "' + filter + '")', 500);
- }
- }
- }
- // 接收 SCE 数据
- function escProcBadges(data) {
- // 将 SCE 页面中的链接替换成支持 https 的域名
- data = data.replace(/https?:\/\/(community\.edgecast\.steamstatic\.com|steamcommunity-a\.akamaihd\.net|cdn\.steamcommunity\.com)\//g, "//steamcommunity-a.akamaihd.net/");
- data = data.replace(/https?:\/\/(cdn\.edgecast\.steamstatic\.com|steamcdn-a\.akamaihd\.net|cdn\.akamai\.steamstatic\.com)\//g, "//steamcdn-a.akamaihd.net/");
- $J('.gamecard_badge_progress').css('bottom', 'auto').css('top', 0);
- var sce = $J(data);
- // 普通徽章
- var badges = sce.find('h3:contains("BADGES"):not(:contains("FOIL"))').closest('.content-box');
- if (window.location.href.indexOf('?border=1') != -1) {
- // 闪亮徽章
- badges = sce.find('h3:contains("FOIL BADGES")').closest('.content-box');
- }
- badges.find('.showcase-element-container.badge>.showcase-element').each(function () {
- var badge = $J(this);
- if (badge.text()) {
- //$J('.gamecard_badge_progress').remove();
- var img = badge.find('.element-image').attr('src');
- var text = badge.find('.element-text').text();
- var level = badge.find('.element-experience').html();
- $J('.badge_content.gamecard_details').append('<div class="badge_info" style="float:left;width:80px;text-align:center;padding:5px;min-height:150px;"><div class="badge_info_image"><img src="' + img + '"></div><div class="badge_info_description"><div class="badge_info_title">' + text + '</div><div>' + level + '</div></div><div style="clear: left;"></div></div>')
- }
- });
- $J('.badge_content.gamecard_details').append('<div style="clear: both"></div>');
- sce.find('h3:contains("EMOTICONS")').closest('.content-box').find('.showcase-element-container.emoticon>.showcase-element').each(function () {
- var item = $J(this);
- if (item.text()) {
- $J('.badge_content.gamecard_details').append('<div class="badge_info" style="float:left;width:80px;text-align:center;padding:5px;"><div><img src="' + item.find('.element-image.small').attr('src') + '"></div><div><img src="' + item.find('.element-image.big').attr('src') + '"></div><div><div class="badge_info_title">' + item.find('.element-text').text() + '</div><div>' + item.find('.element-experience').text() + '</div></div><div style="clear: left;"></div></div>')
- }
- });
- $J('.badge_content.gamecard_details').append('<div style="clear: both"></div>');
- sce.find('h3:contains("BACKGROUNDS")').closest('.content-box').find('.showcase-element-container.background>.showcase-element').each(function () {
- var item = $J(this);
- if (item.text()) {
- $J('.badge_content.gamecard_details').append('<div class="badge_info" style="float:left;width:160px;text-align:center;padding:5px;"><div><a target="_blank" href="' + item.find('.element-image').attr('href') + '"><img src="' + item.find('.element-image img').attr('src').replace('112x70f', '160x100f') + '"></a></div><div><div class="badge_info_title">' + item.find('.element-text').text() + '</div><div>' + item.find('.element-experience').text() + '</div></div><div style="clear: left;"></div></div>')
- }
- });
- }
- // 为徽章页面添加在库存、市场、SCE 查看的选项(似乎会覆盖原有链接)
- function escEnhanceBadges() {
- var cards = []; // 保存卡片信息
- var booster = null; // 补充包信息
- var appid = location.href.match(/gamecards\/(\d+)(?!\w)/)[1];
- var batch_state = 0; // 状态:0=为初始化,1=正在初始化,2=初始化完成,3=正在下单
- var target_level = 5; // 目标等级
- var current_level = 0; // 当前等级
- var current_badge = $J('.badge_current .badge_info_description>div:eq(1)');
- if (current_badge.length) {
- current_level = parseInt(current_badge.text().match(/\d+/));
- }
- // foil = 1 为闪卡, 0 为普通卡
- var foil = window.location.href.indexOf('?border=1') != -1;
- if (foil) {
- foil = 1;
- target_level = 1;
- } else {
- foil = 0;
- }
- var link_market = '//steamcommunity.com/market/search?q=&category_753_Game[]=tag_app_' + appid + '&category_753_item_class[]=tag_item_class_2&appid=753';
- var link_inventory = escUrlInventory + "#753_6" + "?filter=tag_filter_753_6_Game_app_" + appid;
- var link_showcase = 'https://www.steamcardexchange.net/index.php?gamepage-appid-' + appid;
- $J('.gamecards_inventorylink:first').html('<a class="btn_grey_grey btn_small_thin" target="_blank" id="batch_buy_card" href=' + link_market + '><span>' + escT.BatchBuyCard + '</span></a> <a class="btn_grey_grey btn_small_thin" target="_blank" href=' + link_market + '><span>' + escT.Market + '</span></a> <a class="btn_grey_grey btn_small_thin" target="_blank" href=' + link_inventory + '><span>' + escT.Inventory + '</span></a> <a class="btn_grey_grey btn_small_thin" target="_blank" href=' + link_showcase + '><span>' + escT.Showcase + '</span></a> ');
- // 将空值转换成问号
- function text_wrapper(value) {
- if (value !== undefined)
- return value;
- else
- return '?';
- }
- // 刷新统计表格
- function refresh_market_table() {
- var i, j;
- // 构造表头
- var content = '<table cellpadding=5 style="margin:auto;font-size:90%;">';
- content += '<tr><th>' + escT.MarketCard + '</th><th>' + escT.Name + '</th><th>' + escT.Owned + '</th><th>' + escT.Demand + '</th>';
- for (j = 0; j < escT.BatchBuyModes.length; ++j) {
- content += '<th>' + escT.BatchBuyModes[j] + '</th>';
- }
- content += '<th>'+escT.Supply+'</th><th>'+escT.Order+'</th></tr>';
- // 用于统计三张卡片均价
- var set_cost = 0;
- var set_count = 0;
- var total_cost = []; // 用于统计总费用
- var total_estimate = [];
- var is_complete = true; // 用于判断数据是否已经加载完
- for (i = 0; i < cards.length; i++) {
- var card = cards[i];
- var demand = target_level - current_level - card.count;
- if (demand < 0) demand = 0;
- if (card.price !== undefined) {
- set_cost += card.price[0]; // 使用最低卖价
- set_count++;
- var buy_now_remain = demand;
- var buy_now_amount, buy_now_price = 0, buy_now_total = 0, buy_now_limit = 0;
- for (j = 0; j < card.graph_sell.length; ++j) {
- if (buy_now_limit && card.graph_sell[j][0] > buy_now_limit)
- break;
- buy_now_price = card.graph_sell[j][0];
- if (!buy_now_limit)
- buy_now_limit = buy_now_price * 2;
- buy_now_amount = card.graph_sell[j][1];
- if (j > 0)
- buy_now_amount -= card.graph_sell[j - 1][1];
- buy_now_amount = Math.min(buy_now_amount, buy_now_remain);
- buy_now_total += buy_now_price * buy_now_amount;
- buy_now_remain -= buy_now_amount;
- if (buy_now_remain <= 0)
- break;
- }
- //buy_now_price = Math.ceil(buy_now_price * 10) / 100; // dummy price for debug
- card.price[0] = buy_now_price;
- buy_now_amount = demand - buy_now_remain;
- var buy_now_text = format_price(buy_now_price) + ' x ' + buy_now_amount + ' ≈ ' + format_price(buy_now_total);
- if (buy_now_amount < demand)
- buy_now_text = '<span style="color:red">' + buy_now_text + '</span>';
- card.price_text[0] = buy_now_text;
- total_estimate[0] = (total_estimate[0] || 0) + buy_now_total;
- for (j = 0; j < card.price.length; ++j) {
- if (total_cost[j] === undefined)
- total_cost[j] = 0;
- total_cost[j] += demand * card.price[j];
- }
- } else {
- is_complete = false;
- }
- // 构造数据行
- content += '<tr><td><img src="' + card.img + '" style="height:32px;"></td><td><a target="_blank" href="//steamcommunity.com/market/listings/753/' + encodeURIComponent(card.hash) + '">' + card.name + '</td><td>' + card.count + '</a></td><td>' + demand + '</td>';
- for (j = 0; j < escT.BatchBuyModes.length; ++j) {
- if (card.price_text && card.price_text[j]) {
- content += '<td>' + card.price_text[j] + '</td>';
- } else {
- content += '<td>?</td>';
- }
- }
- content += '<td>' + text_wrapper(card.quantity) + '</td><td>' + text_wrapper(card.order) + '</td></tr>';
- }
- content += "</table>";
- if (booster) {
- var b = '<a target="_blank" href="' + booster.link + '">' + escT.BoosterPack + '</a>: ' + booster.price + ' ';
- if (is_complete) {
- b += escT.ThreeCardAvg + ': ' + format_price(set_cost / set_count * 3);
- }
- content = b + content;
- }
- // 如果加载完成,显示按钮并更新总费用
- if (is_complete) {
- for (j = 0; j < total_cost.length; ++j) {
- $J('.btn_batch_buy:eq(' + j + ') span.total_cost').text(format_price(total_cost[j]) + (total_estimate[j] ? ' ≈ ' + format_price(total_estimate[j]) : ''));
- }
- if (batch_state == 1) {
- $J('.btn_batch_buy').fadeIn();
- batch_state = 2;
- }
- }
- $J('#market_data').html(content);
- }
- // 调用 Steam 网页接口所需要的几个变量,会在分析市场页面的时候填写
- var g_sessionID = '';
- var g_walletCurrency = '';
- var g_strCountryCode = '';
- var g_strLanguage = '';
- // 改用官方函数格式化价格
- function format_price(price) {
- return v_currencyformat(price * 100, GetCurrencyCode(g_walletCurrency), g_strCountryCode);
- }
- // 读取第 i 张卡的市场信息,延迟递归
- function load_card_listing(i) {
- if (i >= cards.length)
- return;
- var card = cards[i];
- if (card.hash === undefined) {
- load_card_listing(i + 1);
- return;
- }
- $J.get('//steamcommunity.com/market/listings/753/' + encodeURIComponent(card.hash), function (data) {
- g_sessionID = data.match(/g_sessionID = "([^"]+)"/)[1];
- g_walletCurrency = parseInt(data.match(/"wallet_currency":(\d+)/)[1]);
- g_strLanguage = data.match(/g_strLanguage = "([^"]+)"/)[1];
- g_strCountryCode = data.match(/g_strCountryCode = "([^"]+)"/)[1];
- var nameid = data.match(/Market_LoadOrderSpread\( (\d+)/)[1];
- var order = data.match(/id="mybuyorder_(\d+)">[\s\S]*<span class="market_listing_price">\s*<span class="market_listing_inline_buyorder_qty">(.+?) @<\/span>\s*(.*?)\s*<\/span>/);
- card.nameid = nameid;
- // 是否有买单
- card.order = '0';
- if(order){
- card.order_id = order[1];
- card.order_price = order[2];
- card.order_amount = order[3];
- card.order = order[3]+' x '+order[2];
- }
- // 获取买卖信息
- $J.ajax({
- url: '//steamcommunity.com/market/itemordershistogram',
- type: 'GET',
- data: {
- country: g_strCountryCode,
- language: g_strLanguage,
- currency: g_walletCurrency,
- item_nameid: nameid
- }
- }).success(function(data){
- var graph_sell = data.sell_order_graph; // 卖单
- var graph_buy = data.buy_order_graph; // 买单
- card.graph_sell = graph_sell;
- // 如果没有卖单则不进行处理
- if (!graph_sell.length)
- return;
- // 如果没有买单则将最低价卖单作为买单
- if (!graph_buy.length)
- graph_buy = [graph_sell[0]];
- card.price = []; // 价格信息
- card.price_text = []; // 价格的文字说明
- // 尽快买齐(先占位,之后根据购买数量动态计算)
- card.price.push(null);
- card.price_text.push(null);
- // 最低卖单
- card.price.push(graph_sell[0][0]);
- card.price_text.push(format_price(graph_sell[0][0]) + ' x ' + graph_sell[0][1]);
- var j = 0;
- // 最高买单
- card.price.push(graph_buy[j][0]);
- card.price_text.push(format_price(graph_buy[j][0]) + ' x ' + graph_buy[j][1]);
- if (graph_buy[1]) {
- j = 1;
- }
- // 次高买单
- card.price.push(graph_buy[j][0]);
- card.price_text.push(format_price(graph_buy[j][0]) + ' x ' + graph_buy[j][1]);
- j = graph_buy.length - 1;
- // 最低价格
- card.price.push(graph_buy[j][0]);
- card.price_text.push(format_price(graph_buy[j][0]) + ' x ' + graph_buy[j][1]);
- refresh_market_table();
- });
- refresh_market_table();
- setTimeout(function () { load_card_listing(i + 1); }, 500);
- }).fail(function () {
- // TODO: 这里可能需要一个更好的解决方法
- alert(escT.BatchBuyCheck);
- });
- }
- // 开始批量下单,mode 为出价模式为
- function batch_buy(mode) {
- // 取消第 i 张卡片的订单,延迟递归
- function cancel_buy(i) {
- // 全部取消后开始下单
- if (i == cards.length) {
- place_buy(0);
- return;
- }
- var card = cards[i];
- if (card.order_id !== undefined) {
- $J.post('/market/cancelbuyorder/', { sessionid: g_sessionID, buy_orderid: card.order_id }, function (data) {
- if (data.success == 1) {
- card.order = '0';
- } else {
- card.order = escT.Fail;
- }
- refresh_market_table();
- setTimeout(function () { cancel_buy(i + 1); }, 500);
- });
- } else {
- cancel_buy(i + 1);
- }
- }
- // 为第 i 张卡片下单
- function place_buy(i) {
- if (i == cards.length) {
- return;
- }
- var card = cards[i];
- var demand = target_level - current_level - card.count;
- if (card.hash !== undefined && demand > 0) {
- var price = card.price[mode];
- $J.ajax({
- url: 'https://steamcommunity.com/market/createbuyorder/',
- type: 'POST',
- data: {
- sessionid: g_sessionID,
- currency: g_walletCurrency,
- appid: 753,
- market_hash_name: card.hash,
- price_total: Math.round(demand * price * 100),
- quantity: demand
- },
- crossDomain: true,
- xhrFields: { withCredentials: true }
- }).done(function (data) {
- if (data.success == 1) {
- card.order = format_price(price) + ' x ' + demand;
- } else {
- card.order = escT.Fail;
- }
- refresh_market_table();
- setTimeout(function () { place_buy(i + 1); }, 500);
- });
- } else {
- place_buy(i + 1);
- }
- }
- // 先取消已有订单
- cancel_buy(0);
- }
- // 在按钮上绑定批量买卡的初始化函数
- $J('#batch_buy_card').click(function () {
- if (batch_state == 0) {
- batch_state = 1;
- var t = $J(this).closest('.badge_detail_tasks');
- t.before('<div class="badge_detail_tasks"><div class="gamecards_inventorylink">'+escT.CurrentLevel+' : <span style="background-color: rgba(0, 0, 0, 0.2); border: 1px solid #000; border-radius: 3px; box-shadow: 1px 1px 0 0 rgba(91, 132, 181, 0.2); color: #909090; width: 30px; display: inline-block;">'+current_level+'</span> '+escT.TargetLevel+' : <input type="text" value="5" id="target_level" style="width:30px;"></div><div class="gamecards_inventorylink" id="market_data">'+escT.Loading+'</div></div><div style="clear: both"></div>');
- // 出价按钮
- var btn = ' ' + escT.BatchBuyBtn + ':';
- for (var j = 0; j < escT.BatchBuyModes.length; ++j) {
- btn += ' <a class="btn_grey_grey btn_small_thin btn_batch_buy" style="display:none;" data-mode="' + j + '"><span>' + escT.BatchBuyModes[j] + ' <span class="total_cost">?</span></span></a>';
- }
- $J('#target_level').after(btn);
- $J('.btn_batch_buy').click(function(){
- var btn = $J(this);
- var total_cost = btn.find('.total_cost').text();
- var mode = btn.data('mode');
- ShowConfirmDialog(
- escT.BatchBuyConfirm,
- escT.BatchBuyMessage + total_cost,
- escT.Confirm + ' (' + total_cost + ')',
- escT.Cancel
- ).done(function () {
- $J('.btn_batch_buy').fadeOut();
- batch_buy(mode);
- });
- });
- // 输入等级
- $J('#target_level').keyup(function () {
- var t = $J(this).val();
- if (!isNaN(t)) {
- t = parseInt(t);
- target_level = t;
- refresh_market_table();
- }
- });
- // 读取卡片基本信息
- $J('.badge_detail_tasks .badge_card_set_cards .badge_card_set_card').each(function () {
- var card = $J(this);
- var name = card.find('.badge_card_set_text:eq(0)').text().replace(/^\s+\(\d+\)/, '').trim();
- var count = card.find('.badge_card_set_text_qty').text();
- if(count)
- count = parseInt(count.replace(/[()]/g, ''));
- else
- count = 0;
- var img = card.find('img.gamecard').attr('src');
- cards.push({
- 'name': name,
- 'img': img,
- 'count': count
- });
- });
- // 检查补充包价格
- if (foil == 0) {
- $J.getJSON('//steamcommunity.com/market/search/render/?category_753_item_class[]=tag_item_class_5&appid=753&category_753_Game[]=tag_app_' + appid, function (data) {
- var list = $J('<div>' + data.results_html + '</div>');
- var l = list.find('.market_listing_row_link');
- if (l.length == 1) {
- var quantity = l.find('.market_listing_num_listings_qty').text();
- quantity = parseInt(quantity.replace(/[^\d]/, ''));
- var link = l.attr('href');
- var price = l.find('.market_listing_their_price .market_table_value>span.normal_price').text().trim();
- booster = {
- 'link': link,
- 'quantity': quantity,
- 'price': price
- };
- }
- //console.log('booster', booster);
- });
- }
- // 通过市场获取所有卡片列表
- $J.getJSON('//steamcommunity.com/market/search/render/?start=0&count=40&category_753_cardborder[]=tag_cardborder_'+foil+'&appid=753&category_753_item_class%5B%5D=marketable&category_753_Game[]=tag_app_'+appid, function(data){
- var list = $J('<div>'+data.results_html+'</div>');
- list.find('.market_listing_row_link').each(function(){
- var l = $J(this);
- //var name = l.find('.market_listing_item_name').text().trim();
- //var img = l.find('.market_listing_item_img').attr('src').replace('/62fx62f', '');
- var quantity = l.find('.market_listing_num_listings_qty').text();
- quantity = parseInt(quantity.replace(/[^\d]/, ''));
- var link = l.attr('href');
- var hash = link.match(/\/753\/([^?]+)/)[1];
- var hash_zh=l.find('.market_listing_item_name[id]');
- console.log(link,hash,hash_zh);
- if(hash_zh){
- hash_zh=$J.trim(hash_zh.text()).replace(' (闪亮)',' (Foil)');
- }else{
- hash_zh=null;
- }
- hash = decodeURIComponent(hash);
- var i = -1;
- var match, hash_name;
- //i = cards.findIndexCallback(function (c) { return c.img == img; });
- if (i < 0 && (match = hash.match(/\d+-(.*)/))) {
- hash_name = match[1].trim();
- i = cards.findIndex(function (c) { return c.name == hash_name || c.name==hash_zh; });
- }
- if (i < 0 && (match = hash.match(/\d+-(.*)\((Foil|Foil Trading Card|Trading Card)\)/))) {
- hash_name = match[1].trim();
- hash_zh=hash_zh.replace(' (Foil)','');
- i = cards.findIndex(function (c) { return c.name == hash_name|| c.name==hash_zh;});
- }
- if (i > -1) {
- cards[i]['quantity'] = quantity;
- cards[i]['hash'] = hash;
- }
- //console.log('cards', cards);
- refresh_market_table();
- });
- load_card_listing(0);
- });
- }
- return false;
- });
- // 高亮数量
- $J('.badge_card_set_text_qty').css('color', 'red');
- }
- function escListingClickPurchase(){
- $('market_buynow_dialog_purchase').click();
- $('market_buynow_dialog_cancel').click();
- }
- function escOneClickBuying(){
- // 添加一键购买选项
- var $cb = $J('<span class="market_listing_filter_searchhint" style="padding-left: 5px;"><label style="color:red;"><input id="escOneClickBuying" type="checkbox" />'+escT.OneClickBuying+'</label></span>');
- $cb.appendTo("#market_listing_filter_form");
- if(escGetLS("one_click_buying")){
- $J('#escOneClickBuying').prop('checked', true);
- }else{
- $J('#escOneClickBuying').prop('checked', false);
- }
- $J('#escOneClickBuying').change(function(){
- escSetLS("one_click_buying", $J(this).prop('checked'), 365);
- });
- $J("#searchResultsTable").on("click", ".market_listing_buy_button", function(){
- var $row = $J(this).closest('.market_listing_row');
- var price = $row.find(".market_listing_price_with_fee").text().match(/([\d.]+)/);
- price = parseFloat(price[1]);
- if(escGetLS("one_click_buying") && price<5){
- $J('#market_buynow_dialog').css({opacity: 0});
- setTimeout('escListingClickPurchase()', 100);
- $J(this).html('<img src="//steamcommunity-a.akamaihd.net/public/images/login/throbber.gif">');
- $row.delay(20000).fadeTo('slow', 0);
- }else{
- $J('#market_buynow_dialog').css({opacity: 1});
- }
- });
- // 自动勾选同意协议
- $J('#market_buynow_dialog_accept_ssa, #market_buyorder_dialog_accept_ssa').prop('checked', true);
- }
- // cookie 操作函数
- function escGetCookie(c_name) {
- if (document.cookie.length > 0) {
- c_start = document.cookie.indexOf(c_name + '=');
- if (c_start != -1) {
- c_start = c_start + c_name.length + 1;
- c_end = document.cookie.indexOf(';', c_start);
- if (c_end == -1) c_end = document.cookie.length;
- return unescape(document.cookie.substring(c_start, c_end));
- }
- }
- return '';
- }
- function escSetCookie(c_name, value, expiredays) {
- var exdate = new Date();
- exdate.setDate(exdate.getDate() + expiredays);
- document.cookie = c_name + '=' + escape(value) + ( (expiredays == null) ? '' : '; expires=' + exdate.toGMTString() ) + ';path=/';
- }
- function escGetLS(key) {
- var val = null;
- if (typeof localStorage !== undefined && localStorage['esc_' + key] !== undefined) {
- val = JSON.parse(localStorage['esc_' + key]);
- }
- return val;
- }
- function escSetLS(key, val) {
- if (typeof localStorage !== undefined) {
- localStorage['esc_' + key] = JSON.stringify(val);
- }
- }
- function escSkipAgeCheck() {
- escSetCookie('birthtime', -473356799, 365);
- window.location = window.location;
- }
- function escEnhanceFriends() {
- $J('.manage_friends_btn_ctn').prepend('<span class="btn_grey_black btn_details btn_small btn_manage_friends"><span><a target="_blank" href="//steamcommunity.com/chat/">' + escT.WebChat + '</a></span></span>');
- }
- function escShowInventoryAmount() {
- var inventory = escGetLS('inventory');
- $J('.market_listing_row_link').each(function () {
- var link = $J(this);
- link.find('.market_listing_item_esc_amount').remove();
- var href = link.attr('href');
- var match = href.match(/steamcommunity\.com\/market\/listings\/([^$?]*)/);
- if (match != null) {
- var identifier = decodeURIComponent(match[1]);
- if (inventory && inventory.hasOwnProperty(identifier)) {
- var amount = inventory[identifier];
- link.find('.market_listing_item_name').prepend('<span style="color:red;" class="market_listing_item_esc_amount">(' + amount + ') </span>');
- }
- }
- });
- }
- function escUpdateInventoryCache() {
- if (!g_steamID)
- return;
- if (!g_ActiveUser || g_ActiveUser.strSteamId != g_steamID)
- return;
- var app = {};
- for (var appid in g_ActiveUser.rgAppInfo) {
- var a = g_ActiveUser.rgAppInfo[appid];
- var con = [];
- for (var id in a.rgContexts) {
- con.push(id);
- }
- app[appid] = con;
- }
- escSetLS('inventory_app', app);
- app = escGetLS('inventory_app');
- var inventory = {};
- for (var appid in app) {
- var a = app[appid];
- for (var i = 0; i < a.length; ++i) {
- var id = a[i];
- $J.getJSON(escUrlInventory + 'json/' + appid + '/' + id + '/', function (data) {
- if (data.success) {
- var inv = data.rgInventory;
- var des = data.rgDescriptions;
- for (var id in inv) {
- var i = inv[id];
- var d = des[i.classid + '_' + i.instanceid];
- if (!d) {
- continue;
- }
- var name = d.name;
- if (d.market_name)
- name = d.market_name;
- if (d.market_hash_name)
- name = d.market_hash_name;
- var identifier = d.appid + '/' + name;
- var amount = parseInt(i.amount);
- if (inventory.hasOwnProperty(identifier)) {
- inventory[identifier] += amount;
- } else {
- inventory[identifier] = amount;
- }
- }
- escSetLS('inventory', inventory);
- }
- });
- }
- }
- }
- function escEnhanceInventory() {
- // 自动勾选同意协议
- $J('#market_sell_dialog_accept_ssa').prop('checked', true);
- // 引入显示价格列表所需要的样式表
- $J('head').append('<link type="text/css" rel="stylesheet" href="//steamcommunity-a.akamaihd.net/public/css/skin_1/economy_market.css?v=1617814919">');
- var div = $J('<div style="border-top: 1px solid rgb(93, 137, 44); padding-top: 10px; margin-top: 8px;"></div>');
- div.append('<style>.market_listing_action_buttons{display:none;}</style><div class="market_content_block market_home_listing_table market_home_main_listing_table market_listing_table" id="searchResultsTable"><div id="searchResultsRows"></div></div>');
- $J('#market_sell_dialog .newmodal_content').append(div);
- $J('#market_sell_dialog_accept').click(function () {
- // 记住上次的售价
- if ($J('#market_sell_currency_input').val())
- escSetLS('last_sell_price', $J('#market_sell_currency_input').val());
- });
- $J('.market_dialog_input').keydown(function (e) {
- // 记住上次的售价
- if ($J('#market_sell_currency_input').val())
- escSetLS('last_sell_price', $J('#market_sell_currency_input').val());
- // Ctrl + Enter 直接上架
- if (e.ctrlKey && e.keyCode == 13) {
- setTimeout(function () {
- if (SellItemDialog.m_bWaitingForUserToConfirm) {
- $('market_sell_dialog_ok').click();
- }
- }, 100);
- }
- });
- // 覆盖出售按钮函数
- var originalSell = window.SellCurrentSelection;
- window.SellCurrentSelection = function(){
- var result = $J("#searchResultsRows");
- result.hide();
- var selected_item = window.g_ActiveInventory.selectedItem;
- selected_item = selected_item.description || selected_item;
- var appid = selected_item.appid;
- var market_hash_name = selected_item.market_hash_name || selected_item.market_name;
- if (market_hash_name) {
- $J.getJSON("//steamcommunity.com/market/listings/" + appid + "/" + encodeURIComponent(market_hash_name) + "/render/", {
- query: "",
- start: 0,
- count: 20,
- country: g_strCountryCode,
- language: g_strLanguage,
- currency: typeof g_rgWalletInfo != 'undefined' ? g_rgWalletInfo['wallet_currency'] : 1
- }, function (data) {
- result.html(data.results_html).slideDown('slow');
- //result.prepend("0 - 20 / "+data.total_count);
- });
- }
- originalSell();
- if (escGetLS('last_sell_price')) {
- $J('#market_sell_currency_input').val(escGetLS('last_sell_price'));
- SellItemDialog.OnInputKeyUp();
- }
- // 将出售框定位到顶部
- $J('#market_sell_dialog').css('top', $J(window).scrollTop());
- };
- setTimeout(escUpdateInventoryCache, 1000);
- }
- // Enhanced Steam Community 代码结束
- }
- // 将上面的代码插入到网页中
- var script = escMain.toString();
- script = script.slice(script.indexOf('{') + 1, -1);
- exec(script);
- var match = location.href.match(/^https?:\/\/steamcommunity.com\/(id|profiles)\/.+\/gamecards\/([0-9]+)/);
- if (match) {
- // 某个游戏的徽章页面
- var appid = match[2];
- load('https://www.steamcardexchange.net/index.php?gamepage-appid-' + appid, 'Badges');
- }
- // Script Injection
- function exec(fn) {
- var script = document.createElement('script');
- script.setAttribute('type', 'application/javascript');
- script.textContent = fn;
- document.body.appendChild(script);
- document.body.removeChild(script);
- }
- // Load url and call proc function
- function load(url, id) {
- GM_xmlhttpRequest({
- method: "GET",
- url: url,
- onload: function (response) {
- exec('escProc' + id + '("' + addslashes(response.responseText) + '")');
- }
- });
- }
- // Add slashes to string
- function addslashes(string) {
- return string
- .replace(/\\/g, '\\\\')
- .replace(/\u0008/g, '\\b')
- .replace(/\t/g, '\\t')
- .replace(/\n/g, '\\n')
- .replace(/\f/g, '\\f')
- .replace(/\r/g, '\\r')
- .replace(/'/g, '\\\'')
- .replace(/"/g, '\\"');
- }
复制代码 |
1、转载或引用本网站内容,必须注明本文网址:https://keylol.com/t1008174-1-1。如发文者注明禁止转载,则请勿转载
2、对于不当转载或引用本网站内容而引起的民事纷争、行政处理或其他损失,本网站不承担责任
3、对不遵守本声明或其他违法、恶意使用本网站内容者,本网站保留追究其法律责任的权利
4、所有帖子仅代表作者本人意见,不代表本社区立场
|