- // ==UserScript==
- // @name NGA ui-原神树脂计算器
- // @version 1.2
- // @description 一个基于nga-ui的树脂计算器
- // @author InfSeinP
- // @match *://nga.178.com/*
- // @match *://ngabbs.com/*
- // @match *://bbs.nga.cn/*
- // @grant none
- // @note v1.1 ui优化
- // @note v1.2 ui优化; 添加误差提示; 优化错误提示
- // @namespace https://gf.qytechs.cn/users/994825
- // ==/UserScript==
-
- (function() {
- 'use strict';
-
- // Init common
- const page = typeof unsafeWindow == 'undefined' ? window : unsafeWindow;
- const $ = page.$;
- const _$ = page._$;
- const commonui = page.commonui;
- if (!commonui) { return; }
- const limit = 15; // 显示的最大行数
-
- // Core functions
-
- // 1. 计算回满时间
- function _f1(curr) {
- var remainingTime = Math.floor((160 - curr) * 8);
- var h = Math.floor(remainingTime / 60);
- var m = remainingTime % 60;
- var date = new Date();
- var d = date.getDate();
- date.setHours(date.getHours() + h);
- date.setMinutes(date.getMinutes() + m);
- var day = date.getDate();
- var hours = date.getHours();
- var minutes = date.getMinutes();
- if (hours < 10) {
- hours = "0" + hours;
- }
- if (minutes < 10) {
- minutes = "0" + minutes;
- }
-
- var res = d != day ? '次日' : '今日';
- res += hours + ":" + minutes;
- return res;
- }
- // 2. 按整点输出
- function _f2(curr) {
- var date = new Date();
- var hours = date.getHours();
- var minutes = date.getMinutes();
- var nd = false;
-
- var data = [];
-
- while (curr < 320) {
- var remainingMinutes = 60 - minutes;
- minutes = 0;
- curr += remainingMinutes / 8;
- if (data.length >= limit) {
- break;
- }
-
- hours++;
- if (hours >= 24) { hours -= 24; nd = true; }
- if (hours < 10) { hours = "0" + hours; }
- var key = (nd ? '次日' : '') + hours + ":00";
- key = `<div>${key}</div>`
-
- var value = `<div>${parseInt(curr)}</div>`;
- if (curr > 160) {
- value = `<p style='color: red'>${parseInt(curr)}</p>`;
- }
- else if (curr == 160) {
- value = `<p style='color: orange'>${parseInt(curr)}</p>`;
- }
-
- data.push({key:key,value:value});
- }
-
- return data;
- }
- // 3. 按树脂输出
- function _f3(curr) {
- const interval = 8 * 60 * 1000;
- var date = new Date();
- var d = date.getDate();
-
- var data = [];
-
- while (curr < 320) {
- curr++;
- date.setTime(date.getTime() + interval);
-
- if (data.length >= limit) {
- break;
- }
-
- if (curr%10 == 0) {
- var c = parseInt(curr)
- var key = c>160 ? `<div style='color: red'>${c}</div>` : c==160 ? `<div style='color: orange'>${c}</div>` : `<div>${c}</div>`;
-
- var day = date.getDate();
- var hours = date.getHours();
- var minutes = date.getMinutes();
- var value = '';
- if (day != d ) { value += '次日'; }
- if (hours< 10) { hours = '0' + hours; }
- if (minutes < 10) { minutes = '0' + minutes; }
- value += hours + ":" + minutes;
- value = `<div>${value}</div>`;
-
- data.push({key:key,value:value});
- }
- }
-
- return data;
- }
-
- // Add ui-entry
- commonui.mainMenu && commonui.mainMenu.addItemOnTheFly('树脂计算器', null, () => {
- const w = commonui.createadminwindow();
- var csz, ft, bt, bs, bt1, bt2, bs1, bs2, blk;
- w._.addContent(null);
- w._.addContent(
- '当前树脂 ',
- csz = _$('/input','id','csz','maxlength','3','style','width:105px;','placeholder','只能是整数'),
- _$('/button','type','button','innerHTML','更新','onclick',async () => {
- console.log(csz.value);
- let sz = parseInt(csz.value);
- if (!csz.value || sz<0 || sz>160) { alert('输入0~160的整数'); return; }
- ft.innerHTML = _f1(sz);
- console.log('f1.success')
-
- let t1 = _f2(sz);
- let t2 = _f3(sz);
- var t1a = '',t1b = '',t2a = '',t2b = '';
- for(var i=0;i<t1.length;i++){
- t1a += t1[i].key// + '</br>';
- t1b += t1[i].value// + '</br>';
- }
- for(i=0;i<t2.length;i++){
- t2a += t2[i].key// + '</br>';
- t2b += t2[i].value// + '</br>';
- }
- var blklen = Math.max(t1.length, t2.length);
- var blkcon = ' | </br> | </br>';
- for(i=0;i<blklen;i++){
- blkcon += ' | </br>';
- }
- blk.innerHTML = blkcon;
- bt1.innerHTML = t1a; bt2.innerHTML = t1b;
- bs1.innerHTML = t2a; bs2.innerHTML = t2b;
- console.log('f2/3.success')
-
- }),
- _$('/br'),
- _$('/span','class','silver','innerHTML',' - 将于 ', 'style', 'margin-left: 5px;'),
- ft = _$('/span','class','silver','innerHTML',''),
- _$('/span','class','silver','innerHTML',' 回满'),_$('/br'),
- _$('/span','class','silver','innerHTML','注意: 本工具提供的时间会有最多8分钟的误差!'),_$('/br'),
- _$('/table')._.add(_$('/tbody')._.add(_$('/tr')._.add(
- _$('/td','colspan','2','innerHTML','<strong>时间轴</strong>','style','text-align:center'),
- blk = _$('/td','rowspan','3','innerHTML',' | '),
- _$('/td','colspan','2','innerHTML','<strong>树脂轴</strong>','style','text-align:center'),
- ))._.add(_$('/tr')._.add(
- _$('/td','innerHTML','时间','style','text-align:left;padding-right:0.7em;'),
- _$('/td','innerHTML','树脂','style','text-align:center;padding-right:0.7em;'),
- _$('/td','innerHTML','树脂','style','text-align:center;padding-left:0.7em;padding-right:0.7em'),
- _$('/td','innerHTML','时间','style','text-align:right;padding-right:0.7em;'),
- ))._.add(_$('/tr')._.add(
- bt1 = _$('/td','style','padding-right:0.7em;text-align:right'),
- bt2 = _$('/td','style','padding-right:0.7em'),
- bs1 = _$('/td','style','padding-left:0.7em;padding-right:0.7em'),
- bs2 = _$('/td','style','padding-right:0.7em;text-align:right'),
- )))
- );
- w._.addTitle('原神树脂计算器');
- w._.show();
- });
- })();