为charasheet.vampire-blood.net卡站增加导出到骰子.st指令的功能。
// ==UserScript== // @name Dice export for charasheet.vampire-blood.net // @namespace http://tampermonkey.net/ // @version 0.3 // @description 为charasheet.vampire-blood.net卡站增加导出到骰子.st指令的功能。 // @author okotori // @match *://charasheet.vampire-blood.net/* // @grant none // ==/UserScript== (function() { var skill_aliases = { "STR": ["力量", "str"], "CON": ["体质", "con"], "POW": ["意志", "pow"], "DEX": ["敏捷", "dex"], "APP": ["外貌", "app"], "SIZ": ["体型", "siz"], "EDU": ["教育", "edu"], "INT": ["智力", "int"], "HP": "hp", "MP": "mp", "アイ\nデア": "灵感", "幸運": ["幸运", "luk"], "知識": ["知识"], "回避": "回避", "キック": "踢", "組み付き": "擒抱", "こぶし(パンチ)": ["斗殴", "拳击"], "頭突き": ["头槌", "头锤"], "投擲": "投掷", "マーシャルアーツ": "#术", "拳銃": "手枪", "サブマシンガン": "冲锋枪", "ショットガン": ["散弹枪", "霰弹枪"], "マシンガン": "机枪", "ライフル": "步枪", "応急手当": "急救", "鍵開け": "开锁", "隠す": "藏匿", "隠れる": "躲藏", "聞き耳": "聆听", "忍び歩き": "潜行", "写真術": "摄影", "精神分析": "精神分析", "追跡": ["追踪", "跟踪"], "登攀": "攀爬", "図書館": ["图书馆","图书馆利用","图书馆使用"], "目星": ["侦查", "侦察"], "運転()": ["驾驶", "驾驶({X})", "{X}"], "機械修理": ["机械修理", "机械维修"], "重機械操作": ["重机械操作", "重机械"], "乗馬": "骑马", "水泳": "游泳", "製作()": ["制作", "制作({X})", "{X}"], "操縦()": ["操纵", "操纵({X})", "{X}"], "跳跃": "跳跃", "電気修理": ["电气修理", "电器维修", "电气维修"], "ナビゲート": ["导航", "引航"], "変装": ["变装", "乔装"], "言いくるめ": "快速交谈", "信用": ["信用", "信誉度", "信誉"], "説得": "劝说", "値切り": "议价", "母国語()": ["母语", "母语({X})", "{X}"], "医学": "医学", "オカルト": "神秘学", "化学": "化学", "クトゥルフ神話": "克苏鲁神话", "芸術()": ["艺术", "艺术({X})", "{X}"], "経理": "会计学", "考古学": "考古学", "コンピューター": ["电脑使用", "计算机使用", "计算机"], "心理学": "心理学", "人類学": "人类学", "生物学": "生物学", "地質学": "地质学", "電子工学": "电子学", "天文学": "天文学", "博物学": "博物学", "物理学": "物理学", "法律": "法律", "薬学": "药学", "歴史": ["历史", "历史学"], } var isMobile = document.querySelector("#app-navbar-collapse > div > li:nth-child(3) > a") == null var ids = ["Table_battle_arts", "Table_find_arts", "Table_act_arts", "Table_commu_arts", "Table_know_arts"] function proc_rules(){ var rule_name = isMobile ? document.querySelector("#MAKING>div:last-child>table td:first-child").innerText : document.querySelector("#MAKING > div > div > div > table > tbody > tr > td:nth-child(1)").innerText var text = "" if (rule_name == "クトゥルフ神話TRPG"){ text = proc_coc() } show_text(text) } function show_text(text){ document.querySelector("#dice_export_r###lt").innerHTML = text } function insert_textarea(){ var newNode if (isMobile) { newNode = document.createElement("div") newNode.className = "row" newNode.innerHTML = `<div class="container"><div class="card mb-3"> <textarea id="dice_export_r###lt" class="full" rows = "5"></textarea> </div></div>` document.querySelector("#MAKING").insertBefore(newNode, document.querySelector("#MAKING > div:nth-child(3)")) } else { newNode = document.createElement("section") newNode.innerHTML = `<div class="container"><div class="card mb-3"> <textarea id="dice_export_r###lt" class="full" rows = "5"></textarea> </div></div>` document.querySelector("#MAKING > div > div > div").insertBefore(newNode, document.querySelector("#status_disp")) } } function proc_coc(){ var r###lt = ".st" r###lt = r###lt + "san" + document.querySelector("#san_disp > div.disp > table > tbody > tr > td:nth-child(2) > input[type=text]").value r###lt = r###lt + proc_coc_title() for (var i in ids) r###lt = r###lt + proc_coc_id(ids[i]) return r###lt } function proc_coc_title(){ var r###lt = "" var tbl = document.querySelector("#status_disp > div.disp > table > tbody") for (var x = 1; x < tbl.querySelectorAll("tr:first-child th").length; x ++){ var name = tbl.querySelector(`tr:first-child > th:nth-child(${x+1})`).innerText var value = tbl.querySelector(`tr:nth-child(2) > td:nth-child(${x+1}) > input`).value if (skill_aliases[name]) { if (typeof(skill_aliases[name]) == "string"){ r###lt = r###lt + skill_aliases[name] + value } else { for (var i in skill_aliases[name]){ var name_l = skill_aliases[name][i] r###lt = r###lt + name_l + value } } } } return r###lt } function proc_coc_id(id){ var r###lt = "" var vas = document.querySelectorAll(`#${id} > tbody > tr`) for (var x = 1; x < vas.length; x++){ var name = vas[x].querySelector("th").innerText var input_text = (vas[x].querySelector("th>input") == null) ? "" : vas[x].querySelector("th>input").value var value = vas[x].querySelector("td:last-child>input").value if (name == ""){ r###lt = r###lt + input_text + value } else if (skill_aliases[name]) { if (typeof(skill_aliases[name]) == "string"){ r###lt = r###lt + skill_aliases[name] + value } else { for (var i in skill_aliases[name]){ var name_l = skill_aliases[name][i] if (name_l.indexOf("{X}") != -1){ if (input_text == "") continue name_l = name_l.replace("{X}", input_text) } r###lt = r###lt + name_l + value } } } else { r###lt = r###lt + name + value } } return r###lt } insert_textarea(); proc_rules(); var old_cE = cE; cE = function(){ old_cE(); proc_rules(); } })();