thh866 发表于 2024-9-20 03:29:34

【界外来客】【2024.09.23更新】勋章信息快速查询——博物馆传送门

本帖最后由 thh866 于 2024-9-23 01:18 编辑

抽空整了个用处不那么大的脚本蹭蹭勋章


功能
点击勋章图片或文本,会直接跳转到博物馆对应页面


生效范围
1、勋章商城的相关页面,为图片增加了链接;

2、勋章商城(存在勋章记录)的相关页面,为勋章名称增加了链接;

3、帖子页面,删除了用户头像下方勋章向勋章商城的跳转,并为图片绑定点击事件进行跳转;


实现代码
@Name
// ==UserScript==
// @Name         博物馆传送门
// @namespace    https://www.gamemale.com/space-uid-679233.html
// @homepage   https://www.gamemale.com/thread-144398-1-1.html
// @supportURL   https://www.gamemale.com/thread-144398-1-1.html
// @version      2024-09-22
// @descriptionClick to jump!
// @author       thh866
// @match      https://www.gamemale.com/wodexunzhang-showxunzhang.html*
// @match      https://www.gamemale.com/plugin.php?id=wodexunzhang%3Ashowxunzhang&fid=*
// @match      https://www.gamemale.com/plugin.php?id=wodexunzhang%3Ashowxunzhang&action=*
// @match      https://www.gamemale.com/thread-*
// @match      https://www.gamemale.com/forum.php?mod=viewthread&tid*
// @grant      none
// ==/UserScript==

(function() {
    'use strict';

    // 勋章商城、荣誉勋章、奖励勋章、二手市场和我的勋章页面的勋章图片的点击跳转开关
    const xunzhangSwitch = 1;

    // 帖子详情页用户头像下展示的勋章图片的点击跳转开关
    const threadSwitch = 1;

    // 二手市场页面的勋章记录的文字的点击跳转开关
    const recordSwitch = 1;

    // 勋章名称到帖子的映射表
    const name2url = {
      '詹姆斯·维加':'12025', '詹姆斯‧维加':'12025', '詹姆斯·维加(James Vega)':'12025',
      '奥伦':'12027', '奥伦(Auron)':'12027',
      '希德‧海温特':'12028', '希德‧海温特(Cid Highwind)':'12028',
      '吉姆‧雷诺':'12030', '吉姆‧雷诺(Jim Raynor)':'12030',
      '法卡斯':'12032', '法卡斯(Farkas)':'12032',

      // ...

      'Zootopia':'144106', '启程':'144106', '全景':'144106', '沙漠':'144106', '冰原':'144106', '雨林':'144106',
    };

    // 判断是否是帖子页面的正则
    const reg = /^https:\/\/www.gamemale.com\/thread/;
    const reg2 = /^https:\/\/www.gamemale.com\/forum.php/;

    // 勋章商城、荣誉勋章、奖励勋章、二手市场和我的勋章页面修改href
    // <a href="javascript:void(0);"> => <a href="..." target="_blank">
    function modifyHref(){
      if (1 == xunzhangSwitch){
            // debugger;
            let allDivs = document.getElementsByClassName('myimg');
            console.log(allDivs.length);
            for (let i = 0; i < allDivs.length; i++) {
                let aTag = allDivs.querySelector('a');
                let href = aTag.getAttribute('href');
                if (href && href.includes('javascript:void')) {
                  let alt = aTag.querySelector('img').getAttribute('alt');
                  console.log(alt);
                  if (alt && name2url)
                  {
                        aTag.setAttribute('href', href.replace('javascript:void(0);', 'thread-'+name2url+'-1-1.html'));
                        aTag.setAttribute('target', '_blank');
                  }
                }
            }
      }
      return 0;
    }

    // 帖子详情页为<img>增加Listener
    function addHref(){
      if (1 == threadSwitch){
            // debugger;
            let pTags = document.getElementsByClassName('md_ctrl wodexunzhang_img');
            for (let i = 0; i < pTags.length; i++) {
                let imgs = pTags.getElementsByTagName('img');
                console.log("");
                for (let j = 0; j <imgs.length; j++){
                  let alt = imgs.getAttribute('alt');
                  if (alt){
                        if (alt.includes('『随时随地开启!』')){
                            let tip = imgs.getAttribute('tip');
                            alt = (tip && tip.includes('知识')) ? '『任天堂Switch』红蓝√' : '『任天堂Switch』灰黑√'; // 旅程
                        }
                        else if(alt.includes('月光骑士')){
                            let tip = imgs.getAttribute('tip');
                            alt = (tip && tip.includes('回帖 血液')) ? '马克·史贝特' : '史蒂文·格兰特'; // 回帖 金币
                        }
                        if (name2url){
                            imgs.addEventListener("click", function() {
                              window.open('thread-'+name2url+'-1-1.html', '_blank');
                            });
                            console.log(alt);
                        }
                        else{
                            console.log(alt+' not found!');
                        }
                  }
                }
                let aTag = pTags.getElementsByTagName('a');
                let href = aTag.getAttribute('href');
                if (href && href.includes('wodexunzhang-showxunzhang.html')){
                  aTag.setAttribute('href', href.replace('wodexunzhang-showxunzhang.html', 'javascript:void(0);'));
                }
            }
      }
      return 0;
    }

    // 勋章记录为<b>增加<a href...></a>
    function modifyTagB(){
      if (1 == recordSwitch){
            // debugger;
            let ul = document.getElementsByClassName('mn mymn');
            let li = ul.getElementsByTagName('li');
            for (let i = 0; i < li.length; i++) {
                let bTags = li.getElementsByTagName('b');
                for (let j = 0; j <bTags.length; j++){
                  if (bTags && name2url.textContent]){
                        let aElement = document.createElement('a');
                        aElement.href = 'thread-'+name2url.textContent]+'-1-1.html';
                        aElement.textContent = bTags.textContent;
                        aElement.target = '_blank';
                        bTags.textContent = '';
                        bTags.appendChild(aElement);
                        break;
                  }
                }
            }
      }
      return 0;
    }

    // 页面加载完再执行
    window.onload=function(){
      if (reg.test(window.location.href) || reg2.test(window.location.href)){
            addHref();
      }
      else{
            modifyHref();
            modifyTagB();
      }
    }
})();

使用方法
导入脚本,可根据需要修改开关配置


存在的问题

[*]帖子页面由于部分勋章不同等级名称不同,这一部分数据未录入完整,无法跳转,这个有空会跟以前的帖子一起慢慢改,前提是能找到是哪个勋章
[*]部分不在博物馆记录的勋章无法进行跳转(如剧情中的『活动代币』、『酒馆蛋煲』、『转生经筒』、『浪客便当』、『天价酬劳Ⓖ』等,装饰/特殊中的特殊-纯真护剑,故事中的被祝福的新旅程等等),没有就没必要跳了
[*]页面未加载完全时,不生效,无能为力告辞


更新记录
2024/09/23
1、修改了由于万圣南瓜、丹·安博尔、汤姆·赫兰德和超人在博物馆和阿尔伯特·威斯克、鬼王酒吞童子、Scott Ryder和GM論壇初心者勛章的No重复导致的错误tid;
2、增加了帖子页面对两个『随时随地开启!』、月光骑士的区分;
3、补充了映射表;


使用中有问题欢迎反馈



light04 发表于 2024-9-20 03:57:16

好东西啊,跳过搜索流程,不需要每次都等那个搜索时间限制了{:4_114:}

水水水冘 发表于 2024-9-20 04:12:05

很不错啊,这样就不会弹出短时间不能搜索了

lostorage 发表于 2024-9-20 04:13:11

芜直接跳转真不错,还能直接跳谭友的展示勋章{:4_86:}

枫糖 发表于 2024-9-20 05:16:21

新人大感谢,之前都在瞎买

轮回2L 发表于 2024-9-20 05:39:06

一键查询也很方便惹,节省了搜索的时间{:6_163:}

Morphyus 发表于 2024-9-20 05:40:40

{:6_188:}Nice, 方便查询勋章, 便民利好

星之子 发表于 2024-9-20 06:01:35

泥潭的各级勋章名称都不一样,经常在别人头像下面看到挂着的勋章,却要全文搜索才能找得到具体是哪个。
之前Makima老师有开发过一个勋章搜索,原理是点击后按照名称在博物馆全文搜索;而这个脚本则更加生猛,直接用1000多行的映射表把名字一对一映射到博物馆的链接,不通过搜索而是点击直达。
一千多行!很难想象整理出这1000多行各级勋章的名称和对应的帖子地址是多离谱的工作量,大佬辛苦了!https://img.gamemale.com/album/202408/03/102123lu8vgs5u8krdhz28.gif

promax 发表于 2024-9-20 06:17:06

看似只节省了一小步,实际上却是泥潭的一大步

饥渴难耐的G 发表于 2024-9-20 06:24:58

非常方便,免得去一个一个搜了

紫漾Aro 发表于 2024-9-20 06:32:56

好久之前用过类似的脚本,就是点击勋章跳转的,这个工程量很大了可以说,辛苦了楼主,soon好评!{:6_191:}

Makima 发表于 2024-9-20 06:47:30

!不会是一个一个自己搞得吧,好大的工作量
我之前做的是根据alt属性搜索
如果按照你的思路,我会写个自动提取博物馆的标题和tid,虽然只有一级的名字,但是也够用了(?)

2302594 发表于 2024-9-20 06:59:36

很方便,不用一个个搜索了

rockdjs 发表于 2024-9-20 07:26:55

辛苦了,工作量真的很大,好评给你

猫猫橘 发表于 2024-9-20 07:39:34

看起来是升级版勋章搜索脚本

koh 发表于 2024-9-20 07:41:57

这个我是真的喜欢,直接跳转,对我这种喜欢看版面的xp玩家太便利了

singto 发表于 2024-9-20 08:02:09

定位传送很方便去查看大佬对勋章的分析呢;P;P

凯诺斯 发表于 2024-9-20 08:09:38

感谢优化,能够直接跳转到博物馆挺方便的:loveliness:

dwsleyi 发表于 2024-9-20 08:14:08

泥潭的良心代码大神还是挺多的
越来越优化,在泥潭玩得越来越开心{:4_102:}

Howieee 发表于 2024-9-20 08:16:10

感谢大佬哇,非常利好坛友的脚本惹
页: [1] 2 3 4 5
查看完整版本: 【界外来客】【2024.09.23更新】勋章信息快速查询——博物馆传送门