├── README.md ├── js ├── html2canvas.min.js ├── solver.js └── solver.js.map ├── script.js └── version.md /README.md: -------------------------------------------------------------------------------- 1 | # pcr-wiki-helper 2 | 3 | Tampermonkey script for 4 | 5 | ## Dependency 6 | 7 | 8 | 9 | ## Release URL 10 | 11 | 12 | 13 | ## How to install 14 | 15 | 1. **Install Tampermonkey Browser Plugin**: 16 | You can go to their [offical website](https://www.tampermonkey.net/) to do this. 17 | 18 | 2. **Install Script**: 19 | [Release Page](https://greasyfork.org/zh-CN/scripts/402389-pcr%E5%9B%BE%E4%B9%A6%E9%A6%86%E8%BE%85%E5%8A%A9%E8%AE%A1%E7%AE%97%E5%99%A8) 20 | Or you can just copy the content of [script.js](https://github.com/winrey/pcr-wiki-helper/blob/master/script.js) (not recommend because you won't able to receive update if you choose this way) 21 | -------------------------------------------------------------------------------- /js/solver.js: -------------------------------------------------------------------------------- 1 | "object"==typeof exports&&(module.exports=require("./main")),function a(n,o,h){function l(e,t){if(!o[e]){if(!n[e]){var i="function"==typeof require&&require;if(!t&&i)return i(e,!0);if(u)return u(e,!0);var r=new Error("Cannot find module '"+e+"'");throw r.code="MODULE_NOT_FOUND",r}var s=o[e]={exports:{}};n[e][0].call(s.exports,function(t){return l(n[e][1][t]||t)},s,s.exports,a,n,o,h)}return o[e].exports}for(var u="function"==typeof require&&require,t=0;t|\<){0,}\=/i,is_unrestricted:/^\S{0,}unrestricted/i,parse_lhs:/(\-|\+){0,1}\s{0,1}\d{0,}\.{0,}\d{0,}\s{0,}[A-Za-z]\S{0,}/gi,parse_rhs:/(\-|\+){0,1}\d{1,}\.{0,}\d{0,}\W{0,}\;{0,1}$/i,parse_dir:/(\>|\<){0,}\=/gi,parse_int:/[^\s|^\,]+/gi,parse_bin:/[^\s|^\,]+/gi,get_num:/(\-|\+){0,1}(\W|^)\d+\.{0,1}\d{0,}/g,get_word:/[A-Za-z].*/},i={opType:"",optimize:"_obj",constraints:{},variables:{}},r={">=":"min","<=":"max","=":"equal"},s="",a=null,n="",o="",h="",l=0;"string"==typeof t&&(t=t.split("\n"));for(var u=0;u=",equal:"="},r=new RegExp("[^A-Za-z0-9_[{}/.&#$%~'@^]","gi");if(t.opType)for(var s in e+=t.opType+":",t.variables)t.variables[s][s]=t.variables[s][s]?t.variables[s][s]:1,t.variables[s][t.optimize]&&(e+=" "+t.variables[s][t.optimize]+" "+s.replace(r,"_"));else e+="max:";for(var a in e+=";\n\n",t.constraints)for(var n in t.constraints[a])if(void 0!==i[n]){for(var o in t.variables)void 0!==t.variables[o][a]&&(e+=" "+t.variables[o][a]+" "+o.replace(r,"_"));e+=" "+i[n]+" "+t.constraints[a][n],e+=";\n"}if(t.ints)for(var h in e+="\n\n",t.ints)e+="int "+h.replace(r,"_")+";\n";if(t.unrestricted)for(var l in e+="\n\n",t.unrestricted)e+="unrestricted "+l.replace(r,"_")+";\n";return e}(t)}},{}],3:[function(n,t,e){function o(t){return t=(t=(t=t.replace("\\r\\n","\r\n")).split("\r\n")).filter(function(t){return!0!==new RegExp(" 0$","gi").test(t)&&!1!==new RegExp("\\d$","gi").test(t)}).map(function(t){return t.split(/\:{0,1} +(?=\d)/)}).reduce(function(t,e,i){return t[e[0]]=e[1],t},{})}e.reformat=n("./Reformat.js"),e.solve=function(a){return new Promise(function(r,s){"undefined"!=typeof window&&s("Function Not Available in Browser");var t=n("./Reformat.js")(a);a.external||s("Data for this function must be contained in the 'external' attribute. Not seeing anything there."),a.external.binPath||s("No Executable | Binary path provided in arguments as 'binPath'"),a.external.args||s("No arguments array for cli | bash provided on 'args' attribute"),a.external.tempName||s("No 'tempName' given. This is necessary to produce a staging file for the solver to operate on"),n("fs").writeFile(a.external.tempName,t,function(t,e){if(t)s(t);else{var i=n("child_process").execFile;a.external.args.push(a.external.tempName),i(a.external.binPath,a.external.args,function(t,e){if(t)if(1===t.code)r(o(e));else{var i={code:t.code,meaning:{"-2":"Out of Memory",1:"SUBOPTIMAL",2:"INFEASIBLE",3:"UNBOUNDED",4:"DEGENERATE",5:"NUMFAILURE",6:"USER-ABORT",7:"TIMEOUT",9:"PRESOLVED",25:"ACCURACY ERROR",255:"FILE-ERROR"}[t.code],data:e};s(i)}else r(o(e))})}})})}},{"./Reformat.js":2,child_process:1,fs:1}],4:[function(t,e,i){e.exports={lpsolve:t("./lpsolve/main.js")}},{"./lpsolve/main.js":3}],5:[function(t,e,i){var r=t("./Tableau/Tableau.js"),s=(t("./Tableau/branchAndCut.js"),t("./expressions.js")),a=s.Constraint,F=s.Equality,o=s.Variable,h=s.IntegerVariable;s.Term;function n(t,e){this.tableau=new r(t),this.name=e,this.variables=[],this.integerVariables=[],this.unrestrictedVariables={},this.constraints=[],this.nConstraints=0,this.nVariables=0,this.isMinimization=!0,this.tableauInitialized=!1,this.relaxationIndex=1,this.useMIRCuts=!1,this.checkForCycles=!0,this.messages=[]}(e.exports=n).prototype.minimize=function(){return this.isMinimization=!0,this},n.prototype.maximize=function(){return this.isMinimization=!1,this},n.prototype._getNewElementIndex=function(){if(0v[r].max&&(v[r].max=p[a][r]),p[a][r]this.height;)this.varIndexByRow.pop();var o=i.varIndexByCol;for(t=0;tthis.width;)this.varIndexByCol.pop();for(var h=i.rowByVarIndex,l=i.colByVarIndex,u=0;ua)){var d=u.cuts;if(this.applyCuts(d),e++,!1!==this.feasible){var c=this.evaluation;if(!(ao[p]);p+=1)if(this.optionalObjectives[p].reducedCosts[0]this.precision){var u=n.cost;uthis.precision)return!1}}return!0},r.prototype.computeFractionalVolume=function(t){for(var e=-1,i=1;it.length-i)break;for(var a=!0,n=1;n=", 48 | "<=", 49 | "=", 50 | "tmp", 51 | "ary", 52 | "hldr", 53 | "hldr2", 54 | "constraint", 55 | "rhs", 56 | "split", 57 | "test", 58 | "match", 59 | "map", 60 | "d", 61 | "replace", 62 | "slice", 63 | "forEach", 64 | "substr", 65 | "parseFloat", 66 | "_obj", 67 | "ints", 68 | "binaries", 69 | "separatorIndex", 70 | "indexOf", 71 | "unrestricted", 72 | "to_JSON", 73 | "output", 74 | "lookup", 75 | "max", 76 | "min", 77 | "equal", 78 | "rxClean", 79 | "RegExp", 80 | "x", 81 | "xx", 82 | "y", 83 | "z", 84 | "xxx", 85 | "xxxx", 86 | "from_JSON", 87 | "3", 88 | "clean_data", 89 | "data", 90 | "filter", 91 | "reduce", 92 | "k", 93 | "reformat", 94 | "solve", 95 | "Promise", 96 | "res", 97 | "rej", 98 | "window", 99 | "external", 100 | "binPath", 101 | "args", 102 | "tempName", 103 | "writeFile", 104 | "fe", 105 | "fd", 106 | "exec", 107 | "execFile", 108 | "push", 109 | "ret_obj", 110 | "meaning", 111 | "-2", 112 | "4", 113 | "5", 114 | "6", 115 | "7", 116 | "9", 117 | "25", 118 | "255", 119 | "./Reformat.js", 120 | "child_process", 121 | "fs", 122 | "lpsolve", 123 | "./lpsolve/main.js", 124 | "Tableau", 125 | "expressions", 126 | "Constraint", 127 | "Equality", 128 | "Variable", 129 | "IntegerVariable", 130 | "Term", 131 | "Model", 132 | "precision", 133 | "name", 134 | "this", 135 | "tableau", 136 | "integerVariables", 137 | "unrestrictedVariables", 138 | "nConstraints", 139 | "nVariables", 140 | "isMinimization", 141 | "tableauInitialized", 142 | "relaxationIndex", 143 | "useMIRCuts", 144 | "checkForCycles", 145 | "messages", 146 | "prototype", 147 | "minimize", 148 | "maximize", 149 | "_getNewElementIndex", 150 | "availableIndexes", 151 | "pop", 152 | "index", 153 | "lastElementIndex", 154 | "_addConstraint", 155 | "slackVariable", 156 | "slack", 157 | "variablesPerIndex", 158 | "addConstraint", 159 | "smallerThan", 160 | "getNewElementIndex", 161 | "greaterThan", 162 | "constraintUpper", 163 | "constraintLower", 164 | "addVariable", 165 | "cost", 166 | "id", 167 | "isInteger", 168 | "isUnrestricted", 169 | "priority", 170 | "variable", 171 | "varIndex", 172 | "_removeConstraint", 173 | "idx", 174 | "splice", 175 | "removeConstraint", 176 | "relaxation", 177 | "removeVariable", 178 | "console", 179 | "warn", 180 | "isEquality", 181 | "upperBound", 182 | "lowerBound", 183 | "updateRightHandSide", 184 | "difference", 185 | "updateConstraintCoefficient", 186 | "setCost", 187 | "updateCost", 188 | "loadJson", 189 | "jsonModel", 190 | "constraintsMin", 191 | "constraintsMax", 192 | "constraintIds", 193 | "Object", 194 | "keys", 195 | "nConstraintIds", 196 | "constraintId", 197 | "weight", 198 | "relaxed", 199 | "undefined", 200 | "relax", 201 | "equality", 202 | "variableIds", 203 | "tolerance", 204 | "timeout", 205 | "options", 206 | "exitOnCycles", 207 | "integerVarIds", 208 | "binaryVarIds", 209 | "unrestrictedVarIds", 210 | "objectiveName", 211 | "v", 212 | "variableId", 213 | "variableConstraints", 214 | "isBinary", 215 | "addTerm", 216 | "constraintNames", 217 | "constraintName", 218 | "coefficient", 219 | "constraintMin", 220 | "constraintMax", 221 | "getNumberOfIntegerVariables", 222 | "setModel", 223 | "isFeasible", 224 | "feasible", 225 | "save", 226 | "restore", 227 | "activateMIRCuts", 228 | "debug", 229 | "debugCheckForCycles", 230 | "log", 231 | "message", 232 | "./Tableau/Tableau.js", 233 | "./Tableau/branchAndCut.js", 234 | "./expressions.js", 235 | "solver", 236 | "j", 237 | "objectives", 238 | "new_constraints", 239 | "JSON", 240 | "parse", 241 | "stringify", 242 | "counter", 243 | "vectors", 244 | "vector_key", 245 | "obj", 246 | "pareto", 247 | "Solve", 248 | "result", 249 | "Math", 250 | "random", 251 | "cheater", 252 | "midpoint", 253 | "vertices", 254 | "ranges", 255 | "Solution", 256 | "MilpSolution", 257 | "evaluation", 258 | "bounded", 259 | "branchAndCutIterations", 260 | "iter", 261 | "create", 262 | "constructor", 263 | "./Solution.js", 264 | "8", 265 | "_tableau", 266 | "generateSolutionSet", 267 | "solutionSet", 268 | "varIndexByRow", 269 | "matrix", 270 | "rhsColumn", 271 | "lastRow", 272 | "height", 273 | "roundingCoeff", 274 | "round", 275 | "isSlack", 276 | "varValue", 277 | "Number", 278 | "EPSILON", 279 | "width", 280 | "costRowIndex", 281 | "unrestrictedVars", 282 | "simplexIters", 283 | "varIndexByCol", 284 | "rowByVarIndex", 285 | "colByVarIndex", 286 | "optionalObjectives", 287 | "objectivesByPriority", 288 | "savedState", 289 | "nVars", 290 | "unboundedVarIndex", 291 | "OptionalObjective", 292 | "nColumns", 293 | "reducedCosts", 294 | "Array", 295 | "branchAndCut", 296 | "simplex", 297 | "updateVariableValues", 298 | "getSolution", 299 | "copy", 300 | "setOptionalObjective", 301 | "column", 302 | "objectiveForPriority", 303 | "sort", 304 | "b", 305 | "initialize", 306 | "tmpRow", 307 | "_resetMatrix", 308 | "costRow", 309 | "coeff", 310 | "rowIndex", 311 | "term", 312 | "constraintIndex", 313 | "terms", 314 | "nTerms", 315 | "row", 316 | "isUpperBound", 317 | "density", 318 | "setEvaluation", 319 | "roundedEvaluation", 320 | "bestPossibleEval", 321 | "./MilpSolution.js", 322 | "10", 323 | "optionalObjectivesCopy", 324 | "matrixCopy", 325 | "savedMatrix", 326 | "savedRow", 327 | "savedBasicIndexes", 328 | "savedNonBasicIndexes", 329 | "savedRows", 330 | "savedCols", 331 | "optionalObjectivePerPriority", 332 | "optionalObjectiveCopy", 333 | "./Tableau.js", 334 | "11", 335 | "Cut", 336 | "type", 337 | "value", 338 | "Branch", 339 | "relaxedEvaluation", 340 | "cuts", 341 | "sortByEvaluation", 342 | "applyCuts", 343 | "branchingCuts", 344 | "addCutConstraints", 345 | "fractionalVolumeImproved", 346 | "fractionalVolumeBefore", 347 | "computeFractionalVolume", 348 | "applyMIRCuts", 349 | "branches", 350 | "iterations", 351 | "toleranceFlag", 352 | "terminalTime", 353 | "Date", 354 | "now", 355 | "bestEvaluation", 356 | "Infinity", 357 | "bestBranch", 358 | "bestOptionalObjectivesEvaluations", 359 | "oInit", 360 | "acceptableThreshold", 361 | "branch", 362 | "isCurrentEvaluationWorse", 363 | "isIntegral", 364 | "__isIntegral", 365 | "oCopy", 366 | "getMostFractionalVar", 367 | "cutsHigh", 368 | "cutsLow", 369 | "nCuts", 370 | "cut", 371 | "ceil", 372 | "floor", 373 | "cutHigh", 374 | "cutLow", 375 | "12", 376 | "VariableData", 377 | "biggestFraction", 378 | "selectedVarIndex", 379 | "selectedVarValue", 380 | "nIntegerVars", 381 | "varRow", 382 | "fraction", 383 | "abs", 384 | "getFractionalVarWithLowestCost", 385 | "highestCost", 386 | "13", 387 | "SlackVariable", 388 | "cutConstraints", 389 | "nCutConstraints", 390 | "heightWithCuts", 391 | "h", 392 | "lastColumn", 393 | "sign", 394 | "varRowIndex", 395 | "constraintRow", 396 | "slackVarIndex", 397 | "_addLowerBoundMIRCut", 398 | "frac_d", 399 | "colIndex", 400 | "coef", 401 | "termCoeff", 402 | "_addUpperBoundMIRCut", 403 | "aj", 404 | "fj", 405 | "../expressions.js", 406 | "14", 407 | "_putInBase", 408 | "r1", 409 | "pivot", 410 | "_takeOutOfBase", 411 | "pivotRow", 412 | "c1", 413 | "slackColumn", 414 | "nOptionalObjectives", 415 | "colVar", 416 | "rowVar", 417 | "varColumn", 418 | "variableRow", 419 | "slackIndex", 420 | "switchVarIndex", 421 | "15", 422 | "./backup.js", 423 | "./branchingStrategies.js", 424 | "./cuttingStrategies.js", 425 | "./dynamicModification.js", 426 | "./integerProperties.js", 427 | "./log.js", 428 | "./simplex.js", 429 | "16", 430 | "countIntegerValues", 431 | "count", 432 | "decimalPart", 433 | "ignoreIntegerValues", 434 | "volume", 435 | "17", 436 | "force", 437 | "varName", 438 | "varNameLength", 439 | "valueSpace", 440 | "nameSpace", 441 | "rowString", 442 | "varNameRowString", 443 | "spacePerColumn", 444 | "firstRow", 445 | "firstRowString", 446 | "toFixed", 447 | "reducedCostsString", 448 | "18", 449 | "phase1", 450 | "phase2", 451 | "varIndexesCycle", 452 | "leavingRowIndex", 453 | "rhsValue", 454 | "enteringColumn", 455 | "maxQuotient", 456 | "leavingRow", 457 | "quotient", 458 | "cycleData", 459 | "reducedCost", 460 | "optionalCostsColumns", 461 | "enteringValue", 462 | "isReducedCostNegative", 463 | "optionalCostsColumns2", 464 | "minQuotient", 465 | "colValue", 466 | "nonZeroColumns", 467 | "pivotRowIndex", 468 | "pivotColumnIndex", 469 | "leavingBasicIndex", 470 | "enteringBasicIndex", 471 | "v0", 472 | "nNonZeroColumns", 473 | "varIndexes", 474 | "e1", 475 | "e2", 476 | "elt1", 477 | "elt2", 478 | "cycleFound", 479 | "tmp1", 480 | "tmp2", 481 | "19", 482 | "CleanObjectiveAttributes", 483 | "fakeAttr", 484 | "20", 485 | "createRelaxationVariable", 486 | "termsByVarIndex", 487 | "newCoefficient", 488 | "setVariableCoefficient", 489 | "removeTerm", 490 | "setRightHandSide", 491 | "newRhs", 492 | "_relax", 493 | "relaxationVariable", 494 | "21", 495 | "Solver", 496 | "Numeral", 497 | "lastSolvedModel", 498 | "External", 499 | "full", 500 | "validate", 501 | "validation", 502 | "solvers", 503 | "solution", 504 | "store", 505 | "ReformatLP", 506 | "MultiObjective", 507 | "define", 508 | "self", 509 | "./External/lpsolve/Reformat.js", 510 | "./External/main.js", 511 | "./Model", 512 | "./Polyopt", 513 | "./Tableau/branchAndCut", 514 | "./Tableau/index.js", 515 | "./Validation" 516 | ], 517 | "mappings": "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", 518 | "file": "solver.js" 519 | } 520 | -------------------------------------------------------------------------------- /script.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable require-jsdoc */ 2 | 3 | // ==UserScript== 4 | // @name PCR图书馆辅助计算器 5 | // @namespace http://tampermonkey.net/ 6 | 7 | // @version 3.1.6 8 | // @description 辅助计算PCR手游的所需体力,总次数 9 | // @author winrey,colin,hymbz 10 | // @license MIT 11 | // @icon https://pcredivewiki.tw/static/images/unit/icon_unit_108831.png 12 | // @supportURL https://github.com/winrey/pcr-wiki-helper/issues 13 | // @homepage https://github.com/winrey/pcr-wiki-helper 14 | // @run-at document-start 15 | // @connect cdn.jsdelivr.net 16 | // @match *://pcredivewiki.tw/* 17 | // @grant unsafeWindow 18 | // @grant GM_getValue 19 | // @grant GM_setValue 20 | // @grant GM_info 21 | // @grant GM.getValue 22 | // @grant GM.setClipboard 23 | // @grant GM.setValue 24 | // @grant GM.deleteValue 25 | // @grant GM.info 26 | // @grant GM_addStyle 27 | // @updateURL https://raw.githubusercontent.com/winrey/pcr-wiki-helper/master/script.js 28 | // @require https://cdn.jsdelivr.net/npm/jquery@3.4.0/dist/jquery.min.js 29 | // @require https://cdn.jsdelivr.net/gh/winrey/pcr-wiki-helper@eea66a67d2a0f3794d905fd6447b66329dc34d2e/js/solver.js 30 | // @require https://cdn.jsdelivr.net/gh/winrey/pcr-wiki-helper@21de4a7a288c0cdf5d3cea248eee31301d36c105/js/html2canvas.min.js 31 | // ==/UserScript== 32 | 33 | (function() { 34 | 'use strict'; 35 | 36 | const sleep = (time) => new Promise((r) => setTimeout(r, time)); 37 | 38 | $(document).ready(function() { 39 | GM_addStyle(` 40 | .helper--calc-result-cell.helper--show-deleted-btn::after { 41 | content: '\u2716'; 42 | position: absolute; 43 | bottom: 70px; 44 | background-color: #ff0000; 45 | color: #fff; 46 | line-height: 0.9rem; 47 | border-radius: 30%; 48 | padding: 3px; 49 | opacity: 50%; 50 | cursor: pointer; 51 | z-index: 10000; 52 | } 53 | .helper--calc-result-cell.helper--show-deleted-btn.multiSelect-no::after { 54 | content: '\u00A0\u00A0\u00A0'; 55 | } 56 | .helper--calc-result-cell.helper--show-deleted-btn.multiSelect-yes::after { 57 | content: '\u2714'; 58 | } 59 | .Unique.helper-cell.mapDrop-item.mr-2.p-2.text-center{ 60 | background-color: rgba(255,193,7,.5); 61 | border-radius: 0.7vw; 62 | } 63 | table.table-bordered.mapDrop-table.helper .result-cell-td{ 64 | vertical-align: middle; 65 | text-align: justify; 66 | text-align-last: justify; 67 | } 68 | .topToView{ 69 | z-index: 96000; 70 | white-space: break-spaces; 71 | } 72 | div.ClpMeue{ 73 | visibility: hidden; 74 | transition: all 0.3s; 75 | position: relative; 76 | top: 3rem; 77 | opacity:0; 78 | max-width: 0px; 79 | } 80 | button#toImage { 81 | position: absolute; 82 | font-size: 0.2375rem; 83 | padding: 0.075rem 0.05rem; 84 | bottom: 4.4rem; 85 | 86 | } 87 | button#toText{ 88 | position: absolute; 89 | font-size: 0.2375rem; 90 | padding: 0.075rem 0.05rem; 91 | bottom: 2.8rem; 92 | } 93 | div.ClpMeue.active{ 94 | visibility: visible; 95 | display: inline-block; 96 | opacity:1; 97 | } 98 | 99 | .mapDrop-table .helper-oddTri { 100 | right: .3rem; 101 | top: 1.6rem; 102 | color: black; 103 | } 104 | .mapDrop-table .mapDrop-item { 105 | max-width: 106px; 106 | } 107 | .mapDrop-table .helper--calc-result-cell{ 108 | width: 70px; 109 | height: 70px; 110 | margin: 0 auto; 111 | position: relative; 112 | } 113 | .mapDrop-table .helper--calc-result-cell.un--wanted{ 114 | opacity: 0.4; 115 | } 116 | .mapDrop-table .helper-block { 117 | top: 1.6rem; 118 | right: .12rem; 119 | } 120 | #helper--bottom-btn-group { 121 | position: fixed; 122 | right: calc(60px + 1% - 2px); 123 | bottom: 90px; 124 | overflow: visible; 125 | display: flex; 126 | flex-wrap: wrap; 127 | flex-direction: column; 128 | } 129 | .helper--nav-to-level.helper--important::after { 130 | content: "独"; 131 | color: #e60c0c; 132 | font-size: .5em; 133 | position: relative; 134 | top: -0.8em; 135 | right: 1em; 136 | } 137 | span.dropsProgress.hide{ 138 | display: none; 139 | } 140 | #helper--modal-content:not(.helper--drop) input[item-name], #helper--modal-content:not(.helper--drop) input[orig-item-name] { 141 | display: none; 142 | } 143 | #helper--modal-content input[item-name], #helper--modal-content input[orig-item-name]{ 144 | width: 6em; 145 | } 146 | a.singleSelect{ 147 | display: none 148 | } 149 | a.singleSelect.ready{ 150 | display: inline 151 | } 152 | .switch-multiSelectBtnState { 153 | display: none; 154 | width: 70px; 155 | height: 32px; 156 | border: solid 2px #ddd; 157 | border-radius: 30px; 158 | background-color: #FFF; 159 | position: relative; 160 | padding-left: 2.6rem; 161 | -webkit-transition: background-color 0.3s; 162 | transition: background-color 0.3s; 163 | -webkit-user-select: none; 164 | font-size: 14px; 165 | left: 5.1rem; 166 | } 167 | .switch-multiSelectBtnState.ready { 168 | display: inline; 169 | } 170 | .switch-handler.ready{ 171 | display: inline-block; 172 | } 173 | .switch-multiSelectBtnState.selected-completedBtn{ 174 | pointer-events: none; 175 | } 176 | .switch-multiSelectBtnState::before { 177 | right: 4rem; 178 | content: '多选'; 179 | position: absolute; 180 | width: 2rem; 181 | font-size: 15px; 182 | top: -0.1rem; 183 | margin-right: -1rem; 184 | transition: width 0s 0s,margin-right .3s ,top 0.3s,content 0s 1s; 185 | } 186 | .switch-multiSelectBtnState.active.selected-completedBtn::before { 187 | right: 3rem; 188 | content: '已选完成'; 189 | font-size: 14px; 190 | top: -0.08rem; 191 | margin-right: 0rem; 192 | border-radius: 11%; 193 | width: 4rem; 194 | border: 2px outset #f5d68e; 195 | pointer-events: all; 196 | line-height: 15.9px; 197 | transition: box-shadow 0.3s 198 | } 199 | .switch-multiSelectBtnState.selected-completedBtn:hover::before { 200 | box-shadow: -0.7px 1px 5.1px #000; 201 | } 202 | .switch-handler { 203 | position: relative; 204 | left: 2.5rem; 205 | top: 0.25rem; 206 | width: 1rem; 207 | height: 1rem; 208 | background-color: #FFF; 209 | border-radius: 100% 100%; 210 | -webkit-box-shadow: 1px 2px 5px rgba(0, 0, 0, 0.52); 211 | box-shadow: 1px 2px 5px rgba(0, 0, 0, 0.52); 212 | -webkit-transition: all 0.3s; 213 | transition: all 0.3s; 214 | display: none; 215 | } 216 | .switch-multiSelectBtnState.active { 217 | border-color: #4cd964; 218 | background-color: #4cd964; 219 | } 220 | .switch-handler.ready.active { 221 | left: 3.9rem; 222 | } 223 | .switch-handler::after { 224 | color: #000000; 225 | content: '关'; 226 | position: relative; 227 | bottom: 0.25rem; 228 | left: -0.6rem; 229 | padding-left: 1rem; 230 | -webkit-transition: color .3s 0.1s; 231 | } 232 | .switch-handler.active::after { 233 | content: ' '; 234 | color: #fff0; 235 | position: relative; 236 | left: -4rem; 237 | } 238 | .switch-handler.active::before { 239 | content: '开'; 240 | color: #f5f5f5; 241 | right: 1.4rem; 242 | padding-right: 1.4rem; 243 | } 244 | .switch-handler::before { 245 | content: '\u00A0\u00A0\u00A0'; 246 | color: #fff0; 247 | width: 2.6rem; 248 | bottom: 0.2rem; 249 | -webkit-transition: color .3s .1s; 250 | position: relative; 251 | } 252 | .form-control.active{ 253 | transition:border linear .2s,box-shadow linear .5s; 254 | -moz-transition:border linear .2s,-moz-box-shadow linear .5s; 255 | -webkit-transition:border linear .2s,-webkit-box-shadow linear .5s; 256 | outline:none; 257 | border-color: rgba(12, 255, 0, 0.75); 258 | box-shadow:0 0 8px rgba(59, 224, 9, 0.75); 259 | -moz-box-shadow:0 0 8px rgba(93,149,242,.5); 260 | -webkit-box-shadow:0 0 8px rgba(93,149,242,3); 261 | } 262 | `); 263 | /** 264 | * @global 265 | * @namespace onceItemchange 266 | * @type {object[]} 267 | * @property {string} onceItemchange[].id - 碎片id. 268 | * @property {number} onceItemchange[].count - 碎片数量. 269 | */ 270 | 271 | const onceItemchange = []; 272 | let vue; 273 | /** 274 | * 点击“存储队伍”按钮 275 | */ 276 | 277 | const saveTeamData = () => { 278 | // findOnePCRelem(`.sticky-top>button.pcbtn.primary`, '儲存隊伍').click(); 279 | vue.saveTeam(); 280 | const d = document.querySelector('a[href="##"]'); 281 | d && d.click(); 282 | }; 283 | /** 284 | * 自动切换到地图掉落模式 285 | * 286 | */ 287 | async function autoSwitch2MapList() { 288 | vue = document.querySelector('div.container').__vue__; 289 | // findOnePCRelem(`.armory-function.p-1.pb-3>button`, '地圖掉落模式').click(); 290 | vue.isLoading = true; 291 | await sleep(20); 292 | vue.changeDisplayMode(3); 293 | vue.pageSize = 1000; 294 | await sleep(1000); 295 | } 296 | // eslint-disable-next-line require-jsdoc 297 | function toPage(num) { 298 | const $table = $('.mapDrop-table:not(.helper)'); 299 | const $pages = $($table.find('tr').toArray().pop()); 300 | const $frist = $($pages.find('li').toArray()[num || 1]); 301 | $frist.children()[0].click(); 302 | } 303 | async function getMapData() { 304 | function rowParser($tr, page, index) { 305 | function parseItem($item) { 306 | const url = $($item.find('a')[0]).attr('href'); 307 | const name = $($item.find('img')[0]).attr('title'); 308 | const img = $($item.find('img')[0]).attr('src'); 309 | const odd = parseInt($($item.find('h6.dropOdd')[0]).text()) / 100; // %不算在parseInt内 310 | const count = parseInt( 311 | (!/無需|溢/.test($($item.find('.py-1')[0]).text()) && 312 | $($item.find('.py-1')[0]).text()) || 313 | 0, 314 | ); 315 | const id = /\d+/.exec(img)[0]; 316 | return {url, name, img, odd, count, id}; 317 | } 318 | const children = $tr.children().map(function() { 319 | return $(this); 320 | }); 321 | const name = children[0].text(); 322 | const requirement = parseInt(children[1].text()); 323 | const items = $(children[2].children()[0]) 324 | .children() 325 | .toArray() 326 | .map((v) => parseItem($(v))); 327 | return {name: name, requirement: requirement, items: items, page: page, index: index}; 328 | } 329 | function next($table) { 330 | const $pages = $($table.find('tr').toArray().pop()); 331 | const $next = $($pages.find('li').toArray().pop()); 332 | if ($next.hasClass('disabled')) return false; 333 | $next.children()[0].click(); 334 | return true; 335 | } 336 | let $table = $('.mapDrop-table:not(.helper)'); 337 | const data = []; 338 | toPage(1); 339 | let page = 1; 340 | await sleep(20); 341 | do { 342 | await sleep(20); 343 | $table = $('.mapDrop-table:not(.helper)'); 344 | // 判断简易计算 345 | const start = $table.find('thead>tr').length; 346 | let pageData = $table.find('tbody>tr'); 347 | const dataTd = $table.find('tbody>td'); 348 | pageData = pageData.toArray().map($); 349 | pageData = pageData.slice(0, -1); // 最后一行是分页栏 350 | if (start === 1) { 351 | pageData = pageData.slice(start, -1); // 最后一行是分页栏 352 | } else { 353 | // pageData = pageData 354 | // .filter(function (i, v) { return v !== this && v % 2 === 0 || false }.bind(pageData.length - 1)) //结果过滤偶数 //edit "Comments "by cool_delete 355 | const paeD = (_i, v) => ~~/建議:\s(\d+)/.exec($(dataTd.get(v)).text())[1]; // 结果过滤0数 356 | 357 | pageData = pageData.filter(paeD); 358 | } 359 | pageData = pageData.map((m, i) => rowParser(m, page, i)); 360 | data.push.apply(data, pageData); 361 | page += 1; 362 | } while (next($table)); 363 | toPage(1); 364 | return data; 365 | } 366 | function getCost(name) { 367 | if (name === '1-1') return 6; 368 | if (name.startsWith('1-')) return 8; 369 | if (name.startsWith('2-')) return 8; 370 | if (name.startsWith('3-')) return 8; 371 | if (name.startsWith('4-')) return 9; 372 | if (name.startsWith('5-')) return 9; 373 | if (name.startsWith('6-')) return 9; 374 | return 10; 375 | } 376 | function calcResult(data) { 377 | data = data.map((chan) => { 378 | const sum = (...arr) => [].concat(...arr).reduce((acc, val) => acc + val, 0); 379 | chan.exception = sum(chan.items.map((v) => v.count * v.odd)); 380 | chan.max = Math.max.apply( 381 | null, 382 | chan.items.map((v) => v.count / v.odd), 383 | ); 384 | chan.min = Math.min.apply( 385 | null, 386 | chan.items.filter((v) => v.count).map((v) => v.count / v.odd), 387 | ); 388 | chan.effective = sum.apply( 389 | null, 390 | chan.items.map((v) => (v.count ? v.odd : 0)), 391 | ); 392 | return chan; 393 | }); 394 | const model = { 395 | optimize: 'cost', 396 | opType: 'min', 397 | constraints: (() => { 398 | const equis = {}; 399 | data.forEach((c) => c.items.forEach((e) => (equis[e.name] = {min: e.count}))); 400 | return equis; 401 | })(), 402 | variables: (() => { 403 | const challs = {}; 404 | data.forEach((c) => { 405 | const cMap = {}; 406 | c.items.forEach((item) => (cMap[item.name] = item.odd)); 407 | cMap.cost = getCost(c.name); 408 | challs[c.name] = cMap; 409 | }); 410 | return challs; 411 | })(), 412 | }; 413 | console.log('model', model); 414 | const lp_result = solver.Solve(model); 415 | console.log(lp_result); 416 | for (const k in lp_result) { 417 | if (!k.includes('-')) continue; 418 | const target = data.find((c) => c.name === k); 419 | if (target) target.times = lp_result[k] || 0; 420 | } 421 | return { 422 | total: lp_result.result, 423 | map: data.sort((a, b) => b.times - a.times).sort((a, b) => b.effective - a.effective), 424 | }; 425 | } 426 | 427 | const BOUNS_KEY = '___bouns'; 428 | 429 | function askBouns() { 430 | const bouns = 431 | parseInt( 432 | prompt('请输入目前倍数(N3或N2,非活动期可取消)').split('').reverse().join('') || '1', 433 | ) || 1; 434 | sessionStorage.setItem(BOUNS_KEY, bouns); 435 | return bouns; 436 | } 437 | function getBouns() { 438 | let bouns = parseInt(sessionStorage.getItem('___bouns')); 439 | if (!bouns) { 440 | bouns = askBouns(); 441 | } 442 | return bouns; 443 | } 444 | function showResult(data) { 445 | const bouns = getBouns(); 446 | const table = genTable(data.map.filter((m) => m.times)); 447 | const comment = $.parseHTML('说明'); 448 | const commentLines = []; 449 | commentLines.push( 450 | '推荐使用方法:按照列表顺序刷图,数量不要超过「适用」和「推荐」两者的最小值,完成后修改数量,重新根据新情景计算。', 451 | ); 452 | commentLines.push(''); 453 | commentLines.push( 454 | '注意:如果您尚缺好感,可考虑以30体/次为倍数单位扫荡刷图,能最大化获取发情蛋糕。', 455 | ); 456 | commentLines.push(''); 457 | commentLines.push('---表头说明---'); 458 | commentLines.push( 459 | '『章节』关卡编号。点击编号可以自动跳转到图书馆原表中关卡详细介绍。点击『章节』能切换排序', 460 | ); 461 | commentLines.push( 462 | '『独』标识。代表当前结果中仅有该图能出的装备碎片。赶进度的话刷满黄色碎片数。', 463 | ); 464 | commentLines.push('『需求』关卡需求。图中所需装备总数。'); 465 | commentLines.push('『效率』装备效率。图中所有有效装备掉落的概率和。'); 466 | commentLines.push('『适用』有效次数。预计能保持「效率」不变的次数。'); 467 | commentLines.push( 468 | '『推荐』推荐次数。假设概率固定,由考虑体力的线性规划算法计算出的总最优刷图次数。', 469 | ); 470 | commentLines.push('『最大』最大次数。最近该图需要的最高次数。'); 471 | $(comment[0]).click((e) => { 472 | tips('说明', commentLines.join('\n')); 473 | e.preventDefault(); 474 | e.stopPropagation(); 475 | }); 476 | const quickModifyBtn = $.parseHTML(`快速修改`); 477 | $(quickModifyBtn[0]).click(async () => { 478 | const modifyState = !document.querySelector('.singleSelect.ready'); 479 | [...document.querySelectorAll('span.dropsProgress')].reduce( 480 | (t, i) => i.classList.toggle('hide', modifyState), 481 | document.querySelector('span.dropsProgress'), 482 | ); 483 | // 点击快速修改 如果找不到输入框就没法设置 484 | vue.showFastStock(); 485 | document.querySelector('#popBox.modal.fade.show') && 486 | document.querySelector('#popBox.modal.fade.show').click(); 487 | document 488 | .getElementById('helper--modal-content') 489 | .classList.toggle('helper--drop', modifyState); 490 | deleteItem(modifyState); 491 | modifyState && 492 | document 493 | .querySelector('span.switch-multiSelectBtnState') 494 | .addEventListener(`click`, multiItemChange); 495 | modifyState && 496 | document.querySelector('span.switch-handler').addEventListener(`click`, (e) => { 497 | multiSelectState( 498 | switchMultBtnState( 499 | 'active', 500 | !document.querySelector('span.switch-multiSelectBtnState.active'), 501 | ), 502 | ); 503 | e.stopImmediatePropagation(); 504 | }); 505 | modifyState && 506 | (document.querySelector('.singleSelect.ready').parentElement.scrollLeft = 3000); 507 | return false; 508 | }); 509 | const reCalcBtn = $.parseHTML( 510 | `重新计算`, 511 | ); 512 | const multipleBtn = $.parseHTML( 513 | ``, 514 | ); 515 | $(reCalcBtn[0]).click(() => { 516 | TranslateRefresh_the_interface(); 517 | handleClickCalcBtn(); 518 | return false; 519 | }); 520 | showModalByDom( 521 | `总体力需求:${Math.round( 522 | data.total / bouns, 523 | )}    当前倍率:${bouns}    `, 524 | comment, 525 | quickModifyBtn, 526 | reCalcBtn, 527 | multipleBtn, 528 | table, 529 | ); 530 | } 531 | function createModal(...content) { 532 | const containerStyle = ` 533 | top: 0; 534 | left: 0; 535 | width: 100%; 536 | height: 100%; 537 | position: fixed; 538 | z-index: 10000; 539 | display: flex; 540 | align-items: center; 541 | justify-content: center; 542 | opacity: 0; 543 | pointer-events: none; 544 | transition: all ease-in-out 0.5s; 545 | `; 546 | const maskStyle = ` 547 | top: 0; 548 | left: 0; 549 | width: 100%; 550 | height: 100%; 551 | background: rgba(0,0,0,0.7); 552 | position: absolute; 553 | z-index: 11000; 554 | `; 555 | const boxStyle = ` 556 | min-width: 80%; 557 | z-index: 12000; 558 | `; 559 | const contentStyle = ` 560 | width: 100%; 561 | margin-bottom: 10px; 562 | max-height: 80vh; 563 | overflow: scroll; 564 | `; 565 | const html = ` 566 |
567 |
568 | 578 |
579 | `; 580 | $('#app').after(html); 581 | $('#helper--modal-close').click(() => hideModal()); 582 | $('#helper--modal-mask').click(() => hideModal()); 583 | $('#helper--modal-Clipboard').click(showToClpMeue); 584 | $('button#toText').click(() => { 585 | return showToClpMeue(), txtToClipboard(); 586 | }); 587 | $('button#toImage').click(() => { 588 | return showToClpMeue(), clpSetImage(); 589 | }); 590 | } 591 | const showToClpMeue = () => { 592 | document.querySelector('div.ClpMeue').classList.toggle('active'); 593 | }; 594 | function genItemsGroup(items) { 595 | items = boundLocatStrong(items); // ${item.Unique?`唯一`:``} 596 | 597 | const html = ` 598 |
599 | ${items 600 | .map( 601 | (item) => ` 602 |
606 | 631 | ${(item.count && `总需` + item.count) || `已满`} 636 | 639 | 641 | 进度:${item.has || 0 642 | } 643 |
644 | `, 645 | ) 646 | .join('')} 647 |
648 | `; 649 | return html; 650 | } 651 | function boundLocatStrong(items) { 652 | for (const item of items) { 653 | try { 654 | const p = ~~new RegExp('"equipment_id":' + item.id + ',"count":([^,]+),') 655 | .exec(localStorage.itemList)[1] 656 | .replace(/^\"|\"$/g, ''); 657 | item.information = `有` + p + ' 缺' + item.count; 658 | item.has = p; 659 | } catch (e) { 660 | item.count = 0; 661 | } 662 | } 663 | return items; 664 | } 665 | const changeItemCount = (e) => { 666 | // 快速完成 667 | const singleItem = () => { 668 | const $this = $(e.target); 669 | const count = $this[0].dataset.itemCount; 670 | if (!count) return; 671 | const ID = $this[0].dataset.item_id; 672 | const name = $this[0].dataset.item_name; 673 | if (confirm(`${name}的数量达到了${count}。页面刷新后自动计算`)) { 674 | itemCountChage(ID, count); 675 | GM.setValue(`mount`, `(()=>{ setTimeout(handleClickCalcBtn,2000) })()`); 676 | location.reload(); 677 | } 678 | }; 679 | const multiItem = () => { 680 | e.target.classList.toggle( 681 | `multiSelect-yes`, 682 | !(e.target.classList[e.target.classList.length - 1] == `multiSelect-yes`), 683 | ); 684 | const cls = document.querySelector('.switch-multiSelectBtnState').classList; 685 | cls.toggle( 686 | `selected-completedBtn`, 687 | document.querySelectorAll('.multiSelect-yes').length != 0, 688 | ); 689 | }; 690 | (e.target.classList[e.target.classList.length - 1] == `helper--show-deleted-btn` && 691 | !singleItem()) || 692 | multiItem(); 693 | }; 694 | const multiItemChange = () => { 695 | const cell = document.querySelectorAll('.multiSelect-yes'); 696 | if ( 697 | cell.length && 698 | confirm(`你目前选了${cell.length}个装备,开始修改,点击确定刷新页面自动计算`) 699 | ) { 700 | for (const dom of [...cell]) { 701 | itemCountChage(dom.dataset.itemId, dom.dataset.itemCount); 702 | } 703 | GM.setValue(`mount`, `(()=>{ setTimeout(handleClickCalcBtn,2000) })()`); 704 | location.reload(); 705 | } 706 | }; 707 | function itemCountChage(equipment_id, count) { 708 | const p = new RegExp('"equipment_id":' + equipment_id + ',"count":([^,]+)', 'g'); 709 | const t = new RegExp(`\\d+`, 'g'); 710 | localStorage.setItem( 711 | `itemList`, 712 | localStorage.itemList.replace(p, (match, p1) => { 713 | return match.substr(0, 30) + p1.replace(t, count); // match[match.length-1]match.length-3 714 | }), 715 | ); 716 | } 717 | function uniqueItem(mapData) { 718 | const itmes = []; 719 | for (let i = 0; i < mapData.length; i++) { 720 | itmes.push(...mapData[i].items); 721 | } 722 | for (const t of itmes) { 723 | itmes[t.name] = (itmes[t.name] && itmes[t.name] + 1) || 1; 724 | } 725 | for (let i = 0; i < mapData.length; i++) { 726 | for (const item of mapData[i].items) { 727 | if (item.count > 0 && itmes[item.name] < 2) { 728 | mapData[i].IsuniqueItem = true; 729 | item.Unique = true; 730 | } 731 | } 732 | } 733 | } 734 | function sortColumn(e) { 735 | // -1>a,b 1>b,a//greedy 736 | const trList = [...e.target.closest('table').querySelectorAll(`tbody>tr`)]; 737 | const greedy = () => { 738 | trList 739 | .sort((a) => { 740 | return (~~a.dataset.isUniqueItem && -1) || (~~a.dataset.isUniqueItem && 1) || 0; 741 | }) 742 | .sort((a, b) => { 743 | return ( 744 | (~~a.dataset.isUniqueItem && 745 | ~~b.dataset.isUniqueItem && 746 | ~~b.children[2].dataset.dropEffective - ~~a.children[2].dataset.dropEffective) || 747 | 0 748 | ); 749 | }); 750 | return 1; 751 | }; 752 | const dropEffective = () => { 753 | trList.sort((a, b) => { 754 | return ~~b.children[2].dataset.dropEffective - ~~a.children[2].dataset.dropEffective || 0; 755 | }); 756 | return 0; 757 | }; 758 | e.target.dataset.sortType = (!~~e.target.dataset.sortType && greedy()) || dropEffective(); // 切换状态保存 759 | const tbody = e.target.closest('table').querySelector('tbody'); 760 | tbody.innerHTML = ''; 761 | for (const t of trList) { 762 | tbody.appendChild(t); 763 | } 764 | } 765 | async function txtToClipboard() { 766 | const 数据条目 = '20'; // (条) 767 | const trList = [ 768 | ...document.querySelectorAll( 769 | `table.table.table-bordered.mapDrop-table.helper>tbody tr:nth-child(-n+${数据条目})`, 770 | ), 771 | ]; 772 | const howMuchSpace = (sum = 12, a = []) => { 773 | return sum < 1 && (sum = 0), (a.length = sum), a.fill(space, 0, sum).join(``); 774 | }; 775 | const surroundedByaBar = (text, Rows = 6, horizontal = text.length + 8) => { 776 | Rows = (Rows & 1 && Rows) || Rows + 1; // only odd 777 | let str = enter; 778 | const blank = (horizontal - text.length) / 2; 779 | const half = Math.ceil(Rows / 2); 780 | for (let i = 1; i <= Rows; i++) { 781 | str += '|'; 782 | for (let k = 0; k < horizontal; k++) { 783 | ((Rows === i || 1 === i) && (str += '-')) || i === half || (str += ' '); 784 | // 中间行k已到居中文本位置 785 | i === half && 786 | ((blank <= k && 787 | k < blank + text.length - 2 && 788 | ((k = text.length + blank - 1), (str += text))) || 789 | (str += ' ')); 790 | } 791 | str += '|' + enter; 792 | } 793 | str.substr(0, str.length - 2); 794 | return str; 795 | }; 796 | const space = ' '; 797 | const enter = '\r\n'; 798 | let text = `\u200E ${howMuchSpace(3)}章节${howMuchSpace(6)}效率${howMuchSpace( 799 | 6, 800 | )}各效率${enter}`; 801 | for (const t of trList) { 802 | text += howMuchSpace(5); 803 | for (let b = 1; b < 9; b += 2) { 804 | const lent = t.childNodes[b].innerText.length; 805 | text += t.childNodes[b].innerText + howMuchSpace(10 - lent); 806 | } 807 | text = text.trim(); 808 | text += enter; 809 | } 810 | // 设置dom移除监听 负责在生成链接后设置粘贴板 811 | 812 | vue.isLoading = true; 813 | 814 | 815 | const toClip=async () => { 816 | GM.setClipboard( 817 | `7天内打开链接,装备、角色数据完整保留,但将于${((d) => `${d.getMonth() + 1}月${d.getDate()}号`)( 818 | new Date(new Date().getTime() + 7 * 86400000), 819 | )}失效!${enter}请尽快打开链接:${surroundedByaBar( 820 | vue.exportNotice || 'network error,copy Text below', 821 | )}${enter}${howMuchSpace(4)}${enter}${howMuchSpace( 822 | 4, 823 | )}并点击储存队伍${enter}${enter}${enter}${howMuchSpace( 824 | 4, 825 | )}如果链接失效,可复制""(不含引号)内的字符"到文字汇入队伍的输入框${enter}"${vue.zipMyTeam()}"`, 826 | ); 827 | tips('备份成功', '复制完成,请尽快拷贝到其他地方保存'); 828 | }; 829 | backupTream(toClip); 830 | } 831 | function backupTream(callback) { 832 | const uuid = vue.uuid(); 833 | const armory = _.concat([vue.teamList], [vue.itemList]); 834 | let teamList = JSON.stringify(armory); 835 | teamList = vue.b64EncodeUnicode(teamList); 836 | const url = '/static/php/mysqlAdd.php'; 837 | const data = {teamList: teamList, uuid: uuid}; 838 | $.ajax({ 839 | type: 'POST', 840 | url: url, 841 | data: data, 842 | success: function(data) { 843 | const res = data.toString().trim(); 844 | if (res == '200') { 845 | vue.isLoading = false; 846 | vue.exportNotice = 'https://pcredivewiki.tw/Armory?s=' + uuid; 847 | callback(); 848 | } 849 | }, 850 | }); 851 | } 852 | 853 | async function clpSetImage() { 854 | vue.isLoading = true; 855 | await sleep(200); 856 | const shareContent = document.querySelector( 857 | 'table.table.table-bordered.mapDrop-table.helper tbody', 858 | ); 859 | const width = shareContent.offsetWidth; 860 | const height = shareContent.offsetHeight; 861 | const canvas = document.createElement('canvas'); 862 | const scale = 1; 863 | canvas.width = width * scale; 864 | canvas.height = height * scale; 865 | const content = canvas.getContext('2d'); 866 | content.scale(scale, scale); 867 | const opts = { 868 | scale: scale, 869 | width: width, 870 | height: height, 871 | canvas: canvas, 872 | allowTaint: true, 873 | width: width, 874 | heigth: height, 875 | y: window.pageYOffset + shareContent.getBoundingClientRect().top, 876 | }; // 局部元素带滚动时候 截图需要指定window的x,y 元素的getBoundingClientRect挺重要的 877 | html2canvas(shareContent, opts).then((canvas) => { 878 | const content = canvas.getContext('2d'); 879 | content.mozImageSmoothingEnabled = false; 880 | content.webkitImageSmoothingEnabled = false; 881 | content.msImageSmoothingEnabled = false; 882 | content.ImgSmoothingEnabled = false; 883 | canvas.toBlob((blob) => { 884 | navigator.clipboard.write([new ClipboardItem({'image/png': blob})]); 885 | vue.isLoading = false; 886 | tips('图片复制成功', '复制完成,可直接复制到微信或qq。'); 887 | }); 888 | }); 889 | } 890 | const deleteItem = (switchOn) => { 891 | switchMultBtnState(`ready`, switchOn); 892 | for (const i of $('table .p-2.text-center.mapDrop-item.mr-2>div.helper--calc-result-cell')) { 893 | (~~i.dataset.itemCount && switchOn && !!$(i).addClass('helper--show-deleted-btn')) || 894 | $(i).removeClass('helper--show-deleted-btn'); 895 | } 896 | !switchOn && multiSelectState(); 897 | }; 898 | const switchMultBtnState = (cls, switchOn = false) => { 899 | const state = ['ready', 'active', 'selected-completedBtn']; 900 | !switchOn && 901 | cls == state[1] && 902 | document.querySelector('a.singleSelect').classList.toggle(state[0], !switchOn); 903 | if ( 904 | !switchOn && 905 | cls == state[0] && 906 | !state.forEach((i) => { 907 | document.querySelector('span.switch-multiSelectBtnState').classList.toggle(i, switchOn); 908 | document.querySelector('span.switch-handler').classList.toggle(i, switchOn); 909 | document.querySelector('a.singleSelect').classList.toggle(i, switchOn); 910 | }) 911 | ) { 912 | return switchOn; 913 | } 914 | if ( 915 | !switchOn && 916 | cls == (state.shift() && state)[0] && 917 | !state.forEach((i) => { 918 | document.querySelector('span.switch-multiSelectBtnState').classList.toggle(i, switchOn); 919 | document.querySelector('span.switch-handler').classList.toggle(i, switchOn); 920 | }) 921 | ) { 922 | return switchOn; 923 | } 924 | document.querySelector('span.switch-multiSelectBtnState').classList.toggle(cls, switchOn); 925 | document.querySelector('span.switch-handler').classList.toggle(cls, switchOn); 926 | switchOn && cls == state[1] ? 927 | document.querySelector('a.singleSelect').classList.toggle(state[0], !switchOn) : 928 | document.querySelector('a.singleSelect').classList.toggle(state[0], switchOn); 929 | return switchOn; 930 | }; 931 | const multiSelectState = (switchOn = false) => { 932 | for (const i of $('table .p-2.text-center.mapDrop-item.mr-2>div.helper--calc-result-cell')) { 933 | const c = ~~i.dataset.itemCount; 934 | c && i.classList.toggle('multiSelect-no', switchOn); 935 | c && !switchOn && i.classList.toggle('multiSelect-yes', switchOn); 936 | } 937 | }; 938 | const toDetailsTheMap = (map) => { 939 | const genUri = () => { 940 | /* 日后地图更新 941 | 打开https://pcredivewiki.tw/Map 打开控制台按下Exc 在console中输入 942 | ` $$('.btn.btn-info.p-3') 943 | .map(el => (el.innerText.replace(/\d+\./,'')+'N')) 944 | .reduce((sum, value) =>{return sum .push(value),sum},[]).join('","') 945 | ` 946 | 不含反引号 输出后模仿格式(注意前后引号!!)复制到下面maps中 947 | */ 948 | console.log(`如果地图更新的话看我,点右边的超链接`); 949 | const levelsForMapUir = new Map(); 950 | const maps = [ 951 | '朱諾平原N', 952 | '帕拉斯高原N', 953 | '赫柏丘陵N', 954 | '維斯塔溪谷N', 955 | '刻瑞斯森林N', 956 | '佛洛拉湖畔N', 957 | '墨提斯大瀑布N', 958 | '伊麗絲樹海N', 959 | '弗麗嘉雪原N', 960 | '洛麗泰海岸N', 961 | '蓋奴亞荒漠N', 962 | '波諾尼亞砂丘N', 963 | '朵羅西亞溼地N', 964 | '尤金尼亞熱地N', 965 | '塔利亞火山N', 966 | '泰美斯銀嶺N', 967 | '菲得斯冰原N', 968 | '法艾頓草原N', 969 | '法艾頓草原‧南部N', 970 | '卡斯塔利亞樹林‧西部N', 971 | '卡斯塔利亞樹林‧東部N', 972 | '馬提爾德岩峰‧南部N', 973 | '馬提爾德岩峰‧北部N', 974 | '雷蒂烏斯群峰‧西麓N', 975 | '雷蒂烏斯群峰‧東麓N', 976 | '佩特羅大森林‧西部N', 977 | '佩特羅大森林‧東部N', 978 | '迪茲塔爾河蝕岸‧北部N', 979 | '迪茲塔爾河蝕岸‧南部N', 980 | '弗泰拉斷崖‧北部N', 981 | '弗泰拉斷崖‧南部N', 982 | '法斯奇亞森林‧南部N', 983 | '法斯奇亞森林‧東部N', 984 | '迪克斯提亞岩崖‧西壁N', 985 | '迪克斯提亞岩崖‧東壁N', 986 | '維娜湖畔道‧南部N', 987 | '維娜湖畔道‧北部N', 988 | '拉圖斯斷崖‧南部N', 989 | '拉圖斯斷崖‧北部N', 990 | 'スカプ山系・西麓N', 991 | 'スカプ山系・東麓N', 992 | 'ペクトス氷峰・西壁N', 993 | 'ペクトス氷峰・東壁N', 994 | ]; 995 | let i = 1; 996 | for (const m of maps) { 997 | levelsForMapUir.set(i, `https://pcredivewiki.tw/Map/Detail/${encodeURI(m)}`); 998 | i += 1; 999 | } 1000 | return levelsForMapUir; 1001 | }; 1002 | const mapIndex = map.split('-'); 1003 | const p = mapIndex.shift() >> 0; 1004 | const d = genUri(); 1005 | (d.has(p) && GM.setValue(`toMap`, mapIndex.shift() >> 0) && unsafeWindow.open(d.get(p))) || 1006 | alert( 1007 | `地图可能更新了,请按下F12 ,再按下Esc,找到‘如果地图更新的话看我,点右边的超链接’字样,按提示修改脚本`, 1008 | ); 1009 | }; 1010 | function genTable(mapData) { 1011 | uniqueItem(mapData); 1012 | const bouns = getBouns(); // 1013 | const html = ` 1014 | 1015 | 1016 | 1017 | 1018 | 1019 | 1020 | 1021 | 1022 | 1023 | ${mapData.map((m) => ` 1024 | 1025 | 1031 | 1034 | 1040 | 1043 | 1044 | `).join('')} 1045 | 1046 |
章节效率各次数 掉落一覽
1026 | 1028 | ${m.name} 1029 | 1030 | ${Math.round(m.effective * 100)}% 适用
1035 |     ${Math.ceil(m.min / bouns)}
1036 | 推荐
1037 |     ${Math.ceil(m.times / bouns)}
1038 | 最大
1039 |     ${Math.ceil(m.max / bouns)}
1041 | ${genItemsGroup(m.items)} 1042 |
1047 | `.trim(); 1048 | const table = $.parseHTML(html).pop(); // 0是一堆逗号,我也不造这是什么鬼 1049 | $(table) 1050 | .find('a.helper--nav-to-level') 1051 | .click(function(e) { 1052 | const $this = $(e.currentTarget); 1053 | // hideModal(); 1054 | toDetailsTheMap($this.text()); 1055 | /* 1056 | setTimeout(() => { 1057 | const $table = $(".mapDrop-table:not(.helper)"); 1058 | const elem = $table.find("tr")[index]; 1059 | elem.scrollIntoView({ 1060 | behavior: "smooth", 1061 | block: "center", 1062 | inline: "center", 1063 | }) 1064 | }, 200) 1065 | */ 1066 | }); 1067 | $(table) 1068 | .find('.p-2.text-center.mapDrop-item.mr-2>div.helper--calc-result-cell') 1069 | .click(changeItemCount); 1070 | 1071 | const inputEntry = async (e) => { 1072 | // 只有回车触发更改 1073 | if (e.type !== 'blur' && e.keyCode != 13) { 1074 | return; 1075 | } 1076 | if (isWanted(e)) { 1077 | const itemName = e.target.getAttribute('item-name'); 1078 | const id = e.target.parentElement.parentElement.children[0].dataset.item_id; 1079 | const newNum = e.srcElement.valueAsNumber; 1080 | // 通过图书馆的快速修改功能来进行库存的修改 1081 | // const inputDoms=[...document.querySelectorAll(`#app table img[title="${itemName}"]`)] 1082 | // const Refresh_the_interface = () => { 1083 | // let i=inputDoms.shift().closest('div').querySelector('input') 1084 | // i.valueAsNumber = newNum; 1085 | // inputDoms.length&& 1086 | // window.requestAnimationFrame(Refresh_the_interface)|| 1087 | // i.dispatchEvent(new KeyboardEvent("keyup", { key: "Enter", keyCode: 13 })) 1088 | // }; 1089 | // window.requestAnimationFrame(Refresh_the_interface) 1090 | // 卡顿原因自pcr的vue计算dom挤在一个宏任务了 无法优化 1091 | 1092 | singleFragmentGlobalSave(id, newNum); 1093 | e.target.classList.toggle('active', 1); 1094 | // 在修改库存后,修改结果页的库存显示 1095 | // table.querySelectorAll(`input[item-name=${itemName}]`).forEach(dom => { 1096 | // }) 1097 | // 在输入掉落数时同步所有相同装备下的 input 的 value 1098 | const c = [...table.querySelectorAll(`input[item-name=${itemName}]`)]; 1099 | c.reduce((t, i) => { 1100 | i.value = newNum; 1101 | const itemSpanDom = i.closest('div').querySelector('span.text-center'); 1102 | const totalNeed = itemSpanDom.getAttribute('data-total-need'); 1103 | itemSpanDom.innerText = newNum < totalNeed ? `总需${totalNeed}` :(i.closest('div').classList.toggle('un--wanted', true), i.closest('div').querySelector('div').classList.toggle('un--wanted', true), '已满'); 1104 | itemSpanDom.setAttribute('title', `有${newNum} 缺${Math.max(totalNeed - newNum, 0)}`); 1105 | i.closest('div') 1106 | .querySelector('img') 1107 | .setAttribute('title', `有${newNum} 缺${Math.max(totalNeed - newNum, 0)}`); 1108 | i.closest('div').querySelector('span.dropsProgress').innerText = `进度:${newNum}`; 1109 | }, c[0]); 1110 | } 1111 | 1112 | // 如有下个物品,跳转焦点 1113 | jump(e); 1114 | }; 1115 | const fnChanged = _.debounce(inputEntry, 300); 1116 | table.querySelectorAll('input[item-name]').forEach((inputDom) => { 1117 | inputDom.addEventListener('input', fnChanged); 1118 | inputDom.addEventListener('keyup', fnChanged); 1119 | inputDom.addEventListener('blur', inputEntry); 1120 | }); 1121 | const deltaInputEntry = async (e) => { 1122 | // 只有回车触发更改 1123 | if (e.keyCode != 13) { 1124 | return; 1125 | } 1126 | // 修改上方总数量并触发修改事件 -> delegate to inputEntry() 1127 | const delta = +e.srcElement.value; 1128 | const origInputDom = e.target.closest('div').querySelector('input[item-name]'); 1129 | origInputDom.value = +origInputDom.value + delta; 1130 | origInputDom.dispatchEvent(new KeyboardEvent('keyup', {key: 'Enter', keyCode: 13})); 1131 | e.target.value = ''; 1132 | }; 1133 | table.querySelectorAll('input[orig-item-name]').forEach((inputDom) => { 1134 | inputDom.addEventListener('input', _.debounce(deltaInputEntry, 500)); 1135 | inputDom.addEventListener('keyup', _.debounce(deltaInputEntry, 500)); 1136 | inputDom.addEventListener('blur', deltaInputEntry); 1137 | }); 1138 | const isWanted = (e) => !e.target 1139 | .closest('div') 1140 | .classList.contains('un--wanted'); 1141 | const jump = (e) => { 1142 | const nextItemDiv = e.target.closest('div').nextElementSibling && 1143 | e.target 1144 | .closest('div') 1145 | .nextElementSibling.querySelector('div') 1146 | .classList.contains('un--wanted') && e.target.closest('div').nextElementSibling; 1147 | if (nextItemDiv) { 1148 | nextItemDiv 1149 | .querySelector('input[orig-item-name]') 1150 | .dispatchEvent(new KeyboardEvent('keyup', {key: 'Enter', keyCode: 13})); 1151 | } else { 1152 | (e.target.closest('div').nextElementSibling && 1153 | !e.target 1154 | .closest('div') 1155 | .nextElementSibling.querySelector('input[orig-item-name]') 1156 | .focus()) || 1157 | e.target.closest('tr').querySelector('div').querySelector('div:not(.un--wanted)').querySelector('input[orig-item-name]').focus(); 1158 | } 1159 | return nextItemDiv; 1160 | }; 1161 | return table; 1162 | } 1163 | function singleFragmentGlobalSave(id, newNum) { 1164 | // 直接存到local,vue中关闭再处理 1165 | itemCountChage(id, newNum); 1166 | onceItemchange.push({id: id, count: newNum}); 1167 | } 1168 | async function hideModal() { 1169 | document.querySelector('#popBox.modal.fade.show') && 1170 | document.querySelector('#popBox.modal.fade.show').click(); 1171 | $('#helper--modal').css('opacity', 0); 1172 | $('#helper--modal').css('pointer-events', 'none'); 1173 | window.requestAnimationFrame(Refresh_the_interface); 1174 | } 1175 | const Refresh_the_interface = () => { 1176 | const i = onceItemchange.shift(); 1177 | i && vue.changeStock(i.count, i.id); 1178 | onceItemchange.length && window.requestAnimationFrame(Refresh_the_interface); 1179 | }; 1180 | const TranslateRefresh_the_interface = () => { 1181 | const i = onceItemchange.shift(); 1182 | i && vue.changeStock(i.count, i.id); 1183 | onceItemchange.length && TranslateRefresh_the_interface(); 1184 | }; 1185 | function showModal(...content) { 1186 | $('#helper--modal').css('opacity', 1); 1187 | $('#helper--modal').css('pointer-events', ''); 1188 | if (content && content.length) { 1189 | debugger; 1190 | $('#helper--modal-content').html(content.join('')); 1191 | } 1192 | } 1193 | 1194 | async function showModalByDom(...dom) { 1195 | $('#helper--modal').css('opacity', 1); 1196 | $('#helper--modal').css('pointer-events', ''); 1197 | if (dom.length) { 1198 | $('#helper--modal-content').html(''); 1199 | for (const i in dom) $('#helper--modal-content').append(dom[i]); 1200 | } 1201 | document 1202 | .querySelector('table.table.table-bordered.mapDrop-table.helper th') 1203 | .addEventListener(`click`, sortColumn); 1204 | } 1205 | 1206 | async function handleClickCalcBtn() { 1207 | await autoSwitch2MapList(); 1208 | await sleep(300); 1209 | saveTeamData(); 1210 | // 自动调整至旧版数量 1211 | // const tempDom = document.querySelector('button[title="設計圖數量為舊版數量"]'); 1212 | // if(![...tempDom.classList].includes('active')) 1213 | // tempDom.click(); 1214 | // await sleep(100); 1215 | document.getElementById('helper--modal-content').classList.remove('helper--drop'); 1216 | // if (selectNumInOnePage() != '1000') { 1217 | // selectNumInOnePage(1000); 1218 | // } 1219 | await sleep(100); 1220 | const data = await getMapData(); 1221 | console.log('data', data); 1222 | const result = calcResult(data); 1223 | console.log('result', result); 1224 | showResult(result); 1225 | vue.pageSize = 10; 1226 | vue.isLoading = false; 1227 | document.querySelector('#popBox.modal.fade.show') && 1228 | document.querySelector('#popBox.modal.fade.show').click(), 1229 | changeBtnGroup(); 1230 | } 1231 | 1232 | async function handleFastModifyBtn() { 1233 | const $table = $('.mapDrop-table:not(.helper)'); 1234 | if ($table && $table.find('thead button').length) { 1235 | $table.find('thead button')[0].click(); 1236 | } else { 1237 | alert('现在还不是地图掉落页面呢~'); 1238 | } 1239 | } 1240 | function btnFactory(content, colorRotate, onClick) { 1241 | const btn = $.parseHTML(` 1242 |
1243 | 1244 |
1245 | `); 1246 | $(btn).click(onClick); 1247 | return btn; 1248 | } 1249 | function tips(title, text) { 1250 | vue.copyText('errrcolin'); 1251 | vue.popMsg.title = title; 1252 | vue.popMsg.content = text; 1253 | const options = { 1254 | attributes: true, 1255 | attributeFilter: ['class'], 1256 | }; 1257 | $('div#popBox')[0].classList.toggle('topToView', 1); 1258 | const mb = new MutationObserver(function(mutationRecord, observer) { 1259 | if (mutationRecord[0].target.classList.contains('show')) return; 1260 | observer.disconnect(); 1261 | $('div#popBox')[0].classList.toggle('topToView', 0); 1262 | }); 1263 | mb.observe($('div#popBox')[0], options); 1264 | $('div#popBox button').focus(); 1265 | } 1266 | function createBtnGroup() { 1267 | const group = $.parseHTML(` 1268 |
1269 | `); 1270 | const fastModifyBtn = btnFactory('快速
修改', 270, handleFastModifyBtn); 1271 | const bounsBtn = btnFactory('修改
倍数', 180, askBouns); 1272 | const calcBtn = btnFactory('计算
结果', 90, handleClickCalcBtn); 1273 | $(group).append(calcBtn); 1274 | $(group).append(fastModifyBtn); 1275 | $(group).append(bounsBtn); 1276 | $('#app .container').append(group); 1277 | } 1278 | function changeBtnGroup() { 1279 | const group = $('#helper--bottom-btn-group'); 1280 | group.html(''); 1281 | const fastModifyBtn = btnFactory('快速
修改', 188, handleFastModifyBtn); 1282 | const bounsBtn = btnFactory('修改
倍数', 216, askBouns); 1283 | const lastResultBtn = btnFactory('上次
结果', 144, () => showModal()); 1284 | const calcBtn = btnFactory('重新
计算', 72, handleClickCalcBtn); 1285 | group.append(calcBtn); 1286 | group.append(bounsBtn); 1287 | group.append(fastModifyBtn); 1288 | group.append(lastResultBtn); 1289 | } 1290 | function appendName(mapName) { 1291 | document.querySelector('nav.navbar.navbar-expand-md.navbar-dark.fixed-top').style.visibility = 1292 | 'hidden'; // 隐藏导航条 1293 | document.querySelector('.main>div').__vue__.showMonster(); // 显示魔物 1294 | const toName = ( 1295 | name, 1296 | ElementFindByNameDotParent = document.querySelector('#H' + name.mapName).parentElement, 1297 | ) => { 1298 | ElementFindByNameDotParent.scrollIntoView({block: 'center'}), 1299 | (ElementFindByNameDotParent.style.border = '3px solid #db1f77'); 1300 | }; 1301 | [...document.querySelectorAll('.item-title')].forEach( 1302 | (ele) => (ele.id = 'H' + ele.outerText.split('-').pop()), 1303 | ); // 添加id方便toName 1304 | toName({mapName}); 1305 | } 1306 | createBtnGroup(); 1307 | createModal(); 1308 | (async () => { 1309 | try { 1310 | const before = await GM.getValue('mount', 0); 1311 | const after = await GM.getValue('toMap', 0); 1312 | before && eval(before); 1313 | await sleep(2000); 1314 | unsafeWindow.location.href.includes('https://pcredivewiki.tw/Map/Detail') && 1315 | after && 1316 | appendName(after); 1317 | } catch (e) { 1318 | console.log(`错误: ` + e); 1319 | } finally { 1320 | await GM.deleteValue('mount'); 1321 | await GM.deleteValue('toMap'); 1322 | } 1323 | })(); 1324 | }); 1325 | })(); 1326 | -------------------------------------------------------------------------------- /version.md: -------------------------------------------------------------------------------- 1 | # PCR 图书馆辅助计算器 2 | 3 | ## 更新日志 4 | 5 | **3.1.6** 6 | pcr好像准备改版了 最好预备 7 | 8 | **3.1.5** 9 | fix 在独立装备的后面碎片修改动作逻辑 10 | 11 | **3.1.0** 12 | 优化动作和动画,减少卡顿情况,刷图修改数量更得心应手了 13 | 14 | **3.0.0** 15 | 功能比以前稳定了,算法得出的体力比pcr本身要更理想,新增 16 | 截图功能,在导出剪切板的二级菜单 适合短时间用 17 | --fix pcr修改碎片在低配置电脑会非常卡特别数据量大的时候 18 | 19 | **2.8.1** 20 | 网站功能已经非常完成了 当前版本的目的是直接展示出最有效的地图 而且能分享到qq微信等 21 | --修复算法忽略地图问题 22 | 23 | **2.7.1** 24 | 点击关卡能看怪物阵容,方便查看切后排 25 | 26 | **2.6.5** 27 | 各按钮查找修正,对队伍汇出功能进一步加强 28 | 29 | **2.6.4** 30 | 修复 2.6.3 引起的 bug 31 | 32 | ### readme 使用说明 33 | 34 | #### 急刷装备 35 | 36 | ![贪心排序](https://img.imgdb.cn/item/6059a1418322e6675c320309.gif) 37 | 38 | #### 查看地图阵容 39 | 40 | ![查看地图](https://img.imgdb.cn/item/60599f438322e6675c301395.gif) 41 | 42 | #### 截图 43 | 44 | ![导出图片](https://img.imgdb.cn/item/605988a18322e6675c20dc5c.gif) 45 | 46 | #### 导出数据 47 | 48 | ![导出数据](https://img.imgdb.cn/item/60598eef8322e6675c24c8b2.gif) 49 | 50 | #### 多选 51 | 52 | ![批量满足](https://img.imgdb.cn/item/6059a54e8322e6675c352fab.gif) 53 | 54 | #### 单手刷图 55 | 56 | ![刷图统计](https://img.imgdb.cn/item/605a26088322e6675c82362f.gif) 57 | --------------------------------------------------------------------------------