Widget:沙盒
<style> .pbtn {
background: transparent; border: 1px solid green; color: black; padding: 5px 5px; border-radius: 6px; text-align: center; overflow: hidden; height: 70px; width: 150px; font-size: 14px; margin: 4px 2px; opacity: 1; transition: 0.3s;
}
.pbtn:hover {
overflow: visible; background-color: #bff7bb; opacity: 0.8;
}
- clearall{
float: right; width: auto; height: auto;
}
- clearall:hover {
overflow: visible; color: white; background-color: red; opacity: 0.8;
}
- myInput {
background-image: url('/css/searchicon.png'); background-position: 10px 10px; background-repeat: no-repeat; width: 100%; font-size: 16px; padding: 12px 20px 12px 40px; border: 1px solid #ddd; margin-bottom: 12px;
}
.pbtn-group{
display: flex;
}
.pbtn-group button {
background: transparent; border: 2px solid green; color: black; font-size: 16px; border-radius: 6px; padding: 10px 24px; flex: 1; /* Some padding */ cursor: pointer; /* Pointer/hand icon */ float: left; /* Float the buttons side by side */
}
/* Clear floats (clearfix hack) */ .pbtn-group: after {
content: " "; clear: both; display: table;
}
.pbtn-group button:not(:last-child) {
border-right: none; /* Prevent double borders */
}
/* Add a background color on hover */ .pbtn-group button:hover {
color: white; background-color: gray;
}
table {
border-spacing: 0; width: 100%; border: 1px solid #ddd; border-top: 0px;
}
th {
background-color: #bff7bb; border-bottom: 1px solid #ddd; color: black; position: sticky; width: 10px; top: 0;
}
th, td {
text-align: left; white-space: normal !important; padding: 16px;
}
tr:nth-child(even) {
background-color: #f2f2f2;
}
.container .heading {
font-size: 30px; background: #EEEEEE;
}
.h5,
h5 {
margin-bottom: 12px; margin-top: 12px;
}
.subtitle{
font-size: 25px;
}
.textsm{
font-size: 20px;
}
.bold{
font-weight: bold;
}
.resultnumber{
font-size: 25px; font-weight: bold;
}
.no-border {
box-shadow: none; border-width: 0; padding: 6px;
}
.text-center{
text-align: center;
}
.underline-border {
box-shadow: none; border-width: 0 0 1px 0;
}
.line {
height: 55px;
}
.show-data {
width: 90px; float: right;
}
.form-control {
border-radius: 0px; height: auto;
}
.show-word-left {
width: auto; float: left;
}
.show-word-right {
width: auto; float: right;
}
.form-control-sm {
border: 1px; width: 70px;
}
.container .panel {
margin-bottom: 12px; padding: 0; overflow-y: auto; box-shadow: 1px 1px 3px #ececec;
}
.container .collapsable-heading {
float: right; font-size: 20px; opacity: 50%; position: relative; top: -1em;
}
.container .hr {
margin-top: 20px; margin-bottom: 30px; border: 0; border-top: 1px solid #eee;
}
.container .hrb {
margin-top: 20px; margin-bottom: 30px; border: 0; border-top: 2px solid black;
}
.materialBox img {
max-width: 40px; max-height: 40px; width: auto; height: auto;
}
.container .skillicon{
float: left; width: 45px; height: 45px;
}
- fenxiang{
width: 100%; padding: 12px 20px; box-sizing: border-box; border: 2px solid #ccc; border-radius: 4px; background-color: #f8f8f8; resize: none;
}
- fxxuanxiang button{
flex: 0 150px;
}
- inputbtn:hover{
color: black; background-color: lightgreen; } </style>
<body>
速度
<input class="form-control show-data text-center underline-border subtitle" data-bind="value: 速度" oninput="if(value>2000)value=2000;if(value<0)value=0">
耐力
<input class="form-control show-data text-center underline-border subtitle" data-bind="value: 耐力" oninput="if(value>2000)value=2000;if(value<0)value=0">
力量
<input class="form-control show-data text-center underline-border subtitle" data-bind="value: 力量" oninput="if(value>2000)value=2000;if(value<0)value=0">
毅力
<input class="form-control show-data text-center underline-border subtitle" data-bind="value: 毅力" oninput="if(value>2000)value=2000;if(value<0)value=0">
智力
<input class="form-control show-data text-center underline-border subtitle" data-bind="value: 智力" oninput="if(value>2000)value=2000;if(value<0)value=0">
五维评分小计
<button onclick="sortByKW(0)">全部显示</button> <button onclick="sortByKW(10)">通用</button> <button onclick="sortByKW(9)">泥地</button>
<button onclick="sortByKW(1)">逃马</button> <button onclick="sortByKW(2)">先行</button> <button onclick="sortByKW(3)">差马</button> <button onclick="sortByKW(4)">追马</button>
<button onclick="sortByKW(5)">短距离</button> <button onclick="sortByKW(6)">英里</button> <button onclick="sortByKW(7)">中距离</button> <button onclick="sortByKW(8)">长距离</button>
<button onclick="sortColor(0)">红色</button> <button onclick="sortColor(1)">黄色</button> <button onclick="sortColor(2)">蓝色</button> <button onclick="sortColor(3)">绿色</button> <button onclick="sortColor(4)">紫色</button>
<input type="text" id="myInput" onkeyup="Search()" placeholder="搜索中日文名或评价分" title="">
选择 | 图标 | 日文名 | 中文名 | 条件限制 | 评价分 | 所需技能PT | PT评价比 |
---|---|---|---|---|---|---|---|
<input type="checkbox"
data-bind=" checked: isActive, enable: isEnable, click: $root.checkIfEnable" /> |
<img data-bind="attr:{src: 图标}"> |
|
|
|
|
|
|
继承·固有技 数量:
<input class="textsm show-data text-center underline-border" type="number" data-bind="value: 继承技数量" oninput="if(value>6)value=6;if(value<0)value=0">
<button id="clearall" class="pbtn show-word-right" data-bind='click: $root.clearSkill'>清空选择</button>
<button class="pbtn" data-bind='click: $root.removeSkill'> <img class="skillicon" data-bind="attr:{src: 图标}">
</button>
技能评分小计
消耗技能点小计
评分总计
评级
距S线(14499)
距B+线(8199)
<button data-bind="click: 编码">生成分享码</button> <button id="inputbtn" data-bind="click: 解码">导入分享码</button>
<textarea rows="5" type="text" id="fenxiang" data-bind="textInput: 分享码"></textarea>
</body>
<script src="https://wiki.biligame.com/ys/MediaWiki:Knockout.js?action=raw&ctype=text/javascript"></script> <script> /**
* * Base64 encode / decode * http://www.webtoolkit.info/ * **/
var Base64 = {
// private property _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
// public method for encoding encode: function(input) { var output = ""; var chr1, chr2, chr3, enc1, enc2, enc3, enc4; var i = 0;
input = Base64._utf8_encode(input);
while (i < input.length) {
chr1 = input.charCodeAt(i++); chr2 = input.charCodeAt(i++); chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2; enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); enc4 = chr3 & 63;
if (isNaN(chr2)) { enc3 = enc4 = 64; } else if (isNaN(chr3)) { enc4 = 64; }
output = output + this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) + this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
}
return output; },
// public method for decoding decode: function(input) { var output = ""; var chr1, chr2, chr3; var enc1, enc2, enc3, enc4; var i = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
while (i < input.length) {
enc1 = this._keyStr.indexOf(input.charAt(i++)); enc2 = this._keyStr.indexOf(input.charAt(i++)); enc3 = this._keyStr.indexOf(input.charAt(i++)); enc4 = this._keyStr.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4); chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); chr3 = ((enc3 & 3) << 6) | enc4;
output = output + String.fromCharCode(chr1);
if (enc3 != 64) { output = output + String.fromCharCode(chr2); } if (enc4 != 64) { output = output + String.fromCharCode(chr3); }
}
output = Base64._utf8_decode(output);
return output;
},
// private method for UTF-8 encoding _utf8_encode: function(string) { string = string.replace(/\r\n/g, "\n"); var utftext = "";
for (var n = 0; n < string.length; n++) {
var c = string.charCodeAt(n);
if (c < 128) { utftext += String.fromCharCode(c); } else if ((c > 127) && (c < 2048)) { utftext += String.fromCharCode((c >> 6) | 192); utftext += String.fromCharCode((c & 63) | 128); } else { utftext += String.fromCharCode((c >> 12) | 224); utftext += String.fromCharCode(((c >> 6) & 63) | 128); utftext += String.fromCharCode((c & 63) | 128); }
}
return utftext; },
// private method for UTF-8 decoding _utf8_decode: function(utftext) { var string = ""; var i = 0; var c = c1 = c2 = 0;
while (i < utftext.length) {
c = utftext.charCodeAt(i);
if (c < 128) { string += String.fromCharCode(c); i++; } else if ((c > 191) && (c < 224)) { c2 = utftext.charCodeAt(i + 1); string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); i += 2; } else { c2 = utftext.charCodeAt(i + 1); c3 = utftext.charCodeAt(i + 2); string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); i += 3; }
}
return string; }
}
var to10 = function (data) { var sum = 0, reg = /^(\d)$/ data = data.toString().split() for (var i = 0; i < data.length; i++) { if (!reg.test(data[i])) { data[i] = data[i].toLowerCase().charCodeAt() - 87 } sum += data[i] * Math.pow(32, data.length-i-1) } return sum }
var to32 = function (data) { var yu, shang = data, arr = [] while (shang >= 32) { yu = shang % 32 shang = Math.floor(shang/32) yu = yu > 9 ? String.fromCharCode(yu + 87) : yu arr.unshift(yu) } shang = shang > 9 ? String.fromCharCode(shang + 87) : shang arr.unshift(shang) return arr.join() }
function sortByKW(n) {
var filter, table, tr, td, i, txtValue; const Keyword = ["", "逃马", "先行", "差行", "追马", "短距离", "英里", "中距离", "长距离", "泥地", "通用"] filter = Keyword[n]; table = document.getElementById("Skilltable"); tr = table.getElementsByTagName("tr"); for (i = 0; i < tr.length; i++) { td = tr[i].getElementsByTagName("td")[4]; if (td) { txtValue = td.textContent || td.innerText; if (filter == null) { tr[i].style.display = ""; } else { if (txtValue.indexOf(filter) > -1) { tr[i].style.display = ""; } else { tr[i].style.display = "none"; } } } }
}
function sortColor(n) {
var filter, table, tr, td, i, txtValue; const Keyword = ["红色", "黄色", "蓝色", "绿色", "紫色"] filter = Keyword[n]; table = document.getElementById("Skilltable"); tr = table.getElementsByTagName("tr"); for (i = 0; i < tr.length; i++) { td = tr[i].getElementsByTagName("td")[6]; if (td) { txtValue = td.textContent || td.innerText; if (filter == null) { tr[i].style.display = ""; } else { if (txtValue.indexOf(filter) > -1) { tr[i].style.display = ""; } else { tr[i].style.display = "none"; } } } }
}
ko.bindingHandlers.sort = {
init: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) { var asc = false; element.style.cursor = 'pointer';
element.onclick = function() { var value = valueAccessor(); var prop = value.prop; var data = value.arr;
asc = !asc;
data.sort(function(left, right) { var rec1 = left; var rec2 = right;
if (!asc) { rec1 = right; rec2 = left; }
var props = prop.split('.'); for (var i in props) { var propName = props[i]; var parentIndex = propName.indexOf('()'); if (parentIndex > 0) { propName = propName.substring(0, parentIndex); rec1 = rec1[propName](); rec2 = rec2[propName](); } else { rec1 = rec1[propName]; rec2 = rec2[propName]; } }
return rec1 == rec2 ? 0 : rec1 < rec2 ? -1 : 1; }); }; }
};
function Search() {
var input, filter, table, tr, td, i; input = document.getElementById("myInput"); filter = input.value.toUpperCase(); table = document.getElementById("Skilltable"); var rows = table.getElementsByTagName("tr"); for (i = 1; i < rows.length; i++) { var cells = rows[i].getElementsByTagName("td"); var j; var rowContainsFilter = false; for (j = 2; j < 6; j++) { if (cells[j]) { var txtValue = cells[j].textContent || cells[j].innerText; if (txtValue.toUpperCase().indexOf(filter) > -1) { rowContainsFilter = true; continue; } } }
if (!rowContainsFilter) { rows[i].style.display = "none"; } else { rows[i].style.display = ""; } }
}
function 五维计算(value) {
if (value >1200){ var oval = value - 1200; value = 1200; } var result = 0; value += 1; const koeffi = [0.5, 0.8, 1, 1.3, 1.6, 1.8, 2.1, 2.4, 2.6, 2.8, 2.9, 3, 3.1, 3.3, 3.4, 3.5, 3.9, 4.1, 4.2, 4.3, 5.2, 5.5, 6.6, 6.8,6.9 ]; const ovk = [7.888, 8, 8.1, 8.3, 8.4, 8.5, 8.6, 8.8, 8.9, 9, 9.2, 9.3, 9.4, 9.6, 9.7, 9.8, 10, 10.1, 10.2, 10.3, 10.5, 10.6, 10.7, 10.9, 11, 11.1, 11.3, 11.4, 11.5, 11.7, 11.8, 11.9, 12.1, 12.2, 12.3, 12.4, 12.6, 12.7, 12.8, 13, 13.1, 13.2, 13.4, 13.5, 13.6, 13.8, 13.9, 14, 14.1, 14.3, 14.4, 14.5, 14.7, 14.8, 14.9, 15.1, 15.2, 15.3, 15.5, 15.6, 15.7, 15.9, 16, 16.1, 16.2, 16.4, 16.5, 16.6, 16.8, 16.9, 17, 17.2, 17.3, 17.4, 17.6, 17.7, 17.8, 17.9, 18.1, 18.2, 18.3]; var q = Math.floor(value / 50); var r = value % 50; var i; for (i = 0; i < q; i++) { result += 50 * koeffi[i]; } result += r * koeffi[i]; if (oval >0){ if (oval <9){ var ovq = Math.floor(oval / 10); var ovr = oval % 10; var j; for (j = 0; j < ovq; j++) { result += 10 * ovk[j]; } result += ovr * ovk[j]; } else{ result = 3912; oval += 1; var ovq = Math.floor(oval / 10); var ovr = oval % 10; var j; for (j = 1; j < ovq; j++) { result += Math.ceil(10 * ovk[j]); } result += Math.ceil(ovr * ovk[j]); } } result = Math.floor(result); return result;
}
var ViewModel = function() {
var self = this; var that = this; self.速度 = ko.observable(0); self.耐力 = ko.observable(0); self.力量 = ko.observable(0); self.毅力 = ko.observable(0); self.智力 = ko.observable(0); self.继承技数量 = ko.observable(0);
self.适性等级表 = [{ id: 0, 适性等级: "S", 技能倍率: 1.1, 竞技场倍率: 0.02 }, //0 { id: 1, 适性等级: "A", 技能倍率: 1.1, 竞技场倍率: 0 }, //1 { id: 2, 适性等级: "B", 技能倍率: 0.9, 竞技场倍率: -0.1 }, //2 { id: 3, 适性等级: "C", 技能倍率: 0.9, 竞技场倍率: -0.2 }, //3 { id: 4, 适性等级: "D", 技能倍率: 0.8, 竞技场倍率: -0.3 }, //4 { id: 5, 适性等级: "E", 技能倍率: 0.8, 竞技场倍率: -0.4 }, //5 { id: 6, 适性等级: "F", 技能倍率: 0.8, 竞技场倍率: -0.5 }, //6 { id: 7, 适性等级: "G", 技能倍率: 0.7, 竞技场倍率: -0.7 } //7 ]; self.脚质适性等级表 = [{ id: 0, 适性等级: "S", 技能倍率: 1.1, 竞技场倍率: 0.02 }, //0 { id: 1, 适性等级: "A", 技能倍率: 1.1, 竞技场倍率: 0 }, //1 { id: 2, 适性等级: "B", 技能倍率: 0.9, 竞技场倍率: -0.05 }, //2 { id: 3, 适性等级: "C", 技能倍率: 0.9, 竞技场倍率: -0.1 }, //3 { id: 4, 适性等级: "D", 技能倍率: 0.8, 竞技场倍率: -0.15 }, //4 { id: 5, 适性等级: "E", 技能倍率: 0.8, 竞技场倍率: -0.2 }, //5 { id: 6, 适性等级: "F", 技能倍率: 0.8, 竞技场倍率: -0.25 }, //6 { id: 7, 适性等级: "G", 技能倍率: 0.7, 竞技场倍率: -0.3 } //7 ]; self.固有技等级表 = [{ id: 0, 固有技等级: 1 }, //0 { id: 1, 固有技等级: 2 }, //1 { id: 2, 固有技等级: 3 }, //2 { id: 3, 固有技等级: 4 }, //3 { id: 4, 固有技等级: 5 }, //4 { id: 5, 固有技等级: 6 }, //5 ]; self.角色星级表 = [{ id: 0, 角色星级: "1~2", 系数: 120 }, { id: 1, 角色星级: "3~5", 系数: 170 } ]; self.场地表 = [{ id: 0, 场地类型: "草地" }, //0 { id: 1, 场地类型: "泥地" } //1 ]; self.距离表 = [{ id: 0, 距离类型: "短距离" }, //0 { id: 1, 距离类型: "英里" }, //1 { id: 2, 距离类型: "中距离" }, //2 { id: 3, 距离类型: "长距离" } //3 ]; self.跑法表 = [{ id: 0, 跑法类型: "逃马" }, //0 { id: 1, 跑法类型: "先行" }, //1 { id: 2, 跑法类型: "差行" }, //2 { id: 3, 跑法类型: "追马" } //3 ];
self.草地适性 = ko.observable(self.适性等级表[7]); self.泥地适性 = ko.observable(self.适性等级表[7]); self.短距离适性 = ko.observable(self.适性等级表[7]); self.英里赛适性 = ko.observable(self.适性等级表[7]); self.中距离适性 = ko.observable(self.适性等级表[7]); self.长距离适性 = ko.observable(self.适性等级表[7]); self.逃适性 = ko.observable(self.脚质适性等级表[7]); self.先适性 = ko.observable(self.脚质适性等级表[7]); self.差适性 = ko.observable(self.脚质适性等级表[7]); self.追适性 = ko.observable(self.脚质适性等级表[7]); self.角色星级 = ko.observable(self.角色星级表[0]); self.固有技等级 = ko.observable(self.固有技等级表[0]); self.场地 = ko.observable(self.场地表[0]); self.距离 = ko.observable(self.距离表[0]); self.跑法 = ko.observable(self.跑法表[0]);
function Skill(data) { var selfsk = this; selfsk.isActive = ko.observable(false);
selfsk.id = data.id; selfsk.group_id = data.group_id;
selfsk.图标 = data.图标; selfsk.技能名 = data.技能名; selfsk.中文名 = data.中文名; selfsk.条件限制 = data.条件限制; selfsk.评价分 = data.评价分; selfsk.所需技能PT = data.所需技能PT; selfsk.特殊 = data.特殊; selfsk.类型 = data.类型; selfsk.颜色 = data.颜色; selfsk.isEnable = ko.observable(true);
if(selfsk.id==201671||selfsk.id==201672) selfsk.特殊 = 1;
selfsk.评价分改 = ko.computed(function() {
var temp = 1 if (selfsk.特殊 == 1) return Math.round(Number(selfsk.评价分) * 1); else if(selfsk.group_id==20240||selfsk.id==104201211||selfsk.id==104201111||selfsk.id==108501211){ temp1 = temp * Number(self.短距离适性().技能倍率); temp2 = temp * Number(self.英里赛适性().技能倍率); temp1 > temp2 ? temp=temp1:temp=temp2 return Math.round(Number(selfsk.评价分) * temp); } else if(selfsk.group_id==20247||selfsk.id==104801211||selfsk.id==104801111||selfsk.id==101602111){ temp1 = temp * Number(self.先适性().技能倍率); temp2 = temp * Number(self.差适性().技能倍率); temp1 > temp2 ? temp=temp1:temp=temp2 return Math.round(Number(selfsk.评价分) * temp); }
else if(selfsk.group_id==20253){
temp1 = temp * Number(self.中距离适性().技能倍率); temp2 = temp * Number(self.英里赛适性().技能倍率); temp1 > temp2 ? temp=temp1:temp=temp2 return Math.round(Number(selfsk.评价分) * temp); }
else if(selfsk.group_id==20252||selfsk.id==105701111||selfsk.id==104701211||selfsk.id==108301211){
temp1 = temp * Number(self.中距离适性().技能倍率); temp2 = temp * Number(self.长距离适性().技能倍率); temp1 > temp2 ? temp=temp1:temp=temp2 return Math.round(Number(selfsk.评价分) * temp); } else{ if(selfsk.条件限制.includes("逃马")) temp = temp * Number(self.逃适性().技能倍率); if(selfsk.条件限制.includes("先行")) temp = temp * Number(self.先适性().技能倍率); if(selfsk.条件限制.includes("差行")) temp = temp * Number(self.差适性().技能倍率); if(selfsk.条件限制.includes("追马")) temp = temp * Number(self.追适性().技能倍率); if(selfsk.条件限制.includes("短距离")) temp = temp * Number(self.短距离适性().技能倍率); if(selfsk.条件限制.includes("中距离")) temp = temp * Number(self.中距离适性().技能倍率); if(selfsk.条件限制.includes("英里")) temp = temp * Number(self.英里赛适性().技能倍率); if(selfsk.条件限制.includes("长距离")) temp = temp * Number(self.长距离适性().技能倍率); return Math.round(Number(selfsk.评价分) * temp); } });
selfsk.PT评价比 = ko.computed(function() { if(selfsk.所需技能PT == 0) return ""; else{ return Math.abs(Number(selfsk.评价分改() / selfsk.所需技能PT).toFixed(2));} });
}
self.Skills = ko.observableArray([]); self.PopulateSkills = ko.computed(function(){ ko.utils.arrayForEach(skillData, function(item){ self.Skills.push(new Skill(item)); }); });
self.selectedSkills = ko.pureComputed(function() { var all = self.Skills(), isActive = []; for (var i = 0; i < all.length; i++) if (all[i].isActive()) isActive.push(all[i]); return isActive; });
self.removeSkill = function(Skill1) { for (var i = 0; i < self.Skills().length; i++) { if (self.Skills()[i].id == Skill1.id) { self.Skills()[i].isActive(false); if (Skill1.类型 == 2) { for (var j = 0; j < self.Skills().length; j++) { if (self.Skills()[j].group_id == Skill1.group_id && self.Skills()[j].类型 == 1) self.Skills()[j].isEnable(true); } } else if (Skill1.类型 == 3) { for (var j = 0; j < self.Skills().length; j++) { if (self.Skills()[j].group_id == Skill1.group_id ){ if(self.Skills()[j].类型 == 2||self.Skills()[j].类型 == 1) self.Skills()[j].isEnable(true); } } } } } };
self.clearSkill = function() { for (var i = 0; i < self.Skills().length; i++) { self.Skills()[i].isActive(false); self.Skills()[i].isEnable(true); } };
self.checkIfEnable = function(Skill2) { if (Skill2.类型 == 2) { for (var i = 0; i < self.Skills().length; i++) { if (self.Skills()[i].group_id == Skill2.group_id && self.Skills()[i].类型 == 1) { if (Skill2.isActive()) { self.Skills()[i].isActive(false); self.Skills()[i].isEnable(false); }
else self.Skills()[i].isEnable(true);
} } } else if (Skill2.类型 == 3) { for (var i = 0; i < self.Skills().length; i++) { if (self.Skills()[i].group_id == Skill2.group_id) { if (self.Skills()[i].类型 == 2||self.Skills()[i].类型 == 1){ if (Skill2.isActive()) { self.Skills()[i].isActive(false); self.Skills()[i].isEnable(false); }
else self.Skills()[i].isEnable(true);
} } } } return true; };
self.五维总计 = ko.computed(function() { return (五维计算(Number(self.速度())) + 五维计算(Number(self.耐力())) + 五维计算(Number(self.力量())) + 五维计算(Number(self.毅力())) + 五维计算(Number(self.智力()))); }); self.技能总计 = ko.computed(function() { var subtotal = 0; if (self.selectedSkills().length > 0) { for (var i = 0; i < self.selectedSkills().length; i++) subtotal += Number(self.selectedSkills()[i].评价分改()); } return subtotal + self.角色星级().系数 * self.固有技等级().固有技等级 + 180 * Number(self.继承技数量()); }); self.技能点总计 = ko.computed(function() { var subtotal = 0; if (self.selectedSkills().length > 0) { for (var i = 0; i < self.selectedSkills().length; i++) if (self.selectedSkills()[i].颜色 != "紫") subtotal += Number(self.selectedSkills()[i].所需技能PT); } return subtotal + 200 * Number(self.继承技数量()); }); self.评分总计 = ko.computed(function() { return self.技能总计() + self.五维总计(); }); self.距B = ko.computed(function() { return 8199 - self.评分总计(); }); self.距S = ko.computed(function() { return 14499 - self.评分总计(); }); self.评级 = ko.computed(function() { var n = self.评分总计();
if (n >= 34400)
return "UD";
if (n >= 33800)
return "UE9";
if (n >= 33200)
return "UE8";
if (n >= 32700)
return "UE7";
if (n >= 32100)
return "UE6";
if (n >= 31500)
return "UE5";
if (n >= 31000)
return "UE4";
if (n >= 30400)
return "UE3";
if (n >= 29900)
return "UE2";
if (n >= 29400)
return "UE1";
if (n >= 28800)
return "UE";
if (n >= 28300)
return "UF9";
if (n >= 27800)
return "UF8";
if (n >= 27300)
return "UF7";
if (n >= 26800)
return "UF6";
if (n >= 26300)
return "UF5";
if (n >= 25800)
return "UF4";
if (n >= 25300)
return "UF3";
if (n >= 24800)
return "UF2";
if (n >= 24300)
return "UF1";
if (n >= 23900)
return "UF";
if (n >= 23400)
return "UG9";
if (n >= 23000)
return "UG8";
if (n >= 22500)
return "UG7";
if (n >= 22100)
return "UG6";
if (n >= 21600)
return "UG5";
if (n >= 21200)
return "UG4";
if (n >= 20800)
return "UG3"; if (n >= 20400) return "UG2"; if (n >= 20000) return "UG1"; if (n >= 19600) return "UG"; if (n >= 19200) return "SS+"; if (n >= 17500) return "SS"; if (n >= 15900) return "S+"; if (n >= 14500) return "S"; if (n >= 12100) return "A+"; if (n >= 10000) return "A"; if (n >= 8200) return "B+"; if (n >= 6500) return "B"; if (n >= 4900) return "C+"; if (n >= 3500) return "C"; if (n >= 2900) return "D+"; if (n >= 2300) return "D"; if (n >= 1800) return "E+"; if (n >= 1300) return "E"; if (n >= 900) return "F+"; if (n >= 600) return "F"; if (n >= 300) return "G+"; return "G" }); self.竞技场评分 = ko.computed(function() { var 系数 = 1; switch (self.场地().场地类型) { case "泥地": 系数 = 系数 * (1 + self.泥地适性().竞技场倍率); break; case "草地": 系数 = 系数 * (1 + self.草地适性().竞技场倍率); break; } switch (self.距离().距离类型) { case "短距离": 系数 = 系数 * (1 + self.短距离适性().竞技场倍率); break; case "英里": 系数 = 系数 * (1 + self.英里赛适性().竞技场倍率); break; case "中距离": 系数 = 系数 * (1 + self.中距离适性().竞技场倍率); break; case "长距离": 系数 = 系数 * (1 + self.长距离适性().竞技场倍率); break; } switch (self.跑法().跑法类型) { case "逃": 系数 = 系数 * (1 + self.逃适性().竞技场倍率); break; case "先行": 系数 = 系数 * (1 + self.先适性().竞技场倍率); break; case "差": 系数 = 系数 * (1 + self.差适性().竞技场倍率); break; case "追": 系数 = 系数 * (1 + self.追适性().竞技场倍率); break; } return Math.floor(self.评分总计() * 系数); });
self.技能选择面板开关 = ko.observable(true); self.检查技能选择面板 = function() { var toggle = $("#技能面板").hasClass('collapsed'); self.技能选择面板开关(toggle); };
self.技能选择面板样式 = ko.computed(function() { return self.技能选择面板开关() ? "glyphicon-menu-up" : "glyphicon-menu-down"; });
self.分享码 = ko.observable("分享码..."); self.编码 = function() { var j = 0; var Code = []; Code[j] = to32(self.速度()); j++; Code[j] = to32(self.耐力()); j++; Code[j] = to32(self.力量()); j++; Code[j] = to32(self.毅力()); j++; Code[j] = to32(self.智力()); j++; Code[j] = to32(self.继承技数量()); j++; Code[j] = to32(self.草地适性().id); j++; Code[j] = to32(self.泥地适性().id); j++; Code[j] = to32(self.短距离适性().id); j++; Code[j] = to32(self.英里赛适性().id); j++; Code[j] = to32(self.中距离适性().id); j++; Code[j] = to32(self.长距离适性().id); j++; Code[j] = to32(self.逃适性().id); j++; Code[j] = to32(self.先适性().id); j++; Code[j] = to32(self.差适性().id); j++; Code[j] = to32(self.追适性().id); j++; Code[j] = to32(self.角色星级().id); j++; Code[j] = to32(self.固有技等级().id); j++;
var all = self.Skills(); for (var i = 0; i < all.length; i++) if (all[i].isActive()) { Code[j] = to32(all[i].id); j++; }
var arrayResult = "E"; arrayResult = arrayResult.concat("E", Code.join('Z'), "alvn"); var arrayResult2 = "TRSC"; arrayResult2 = arrayResult2.concat(Base64.encode(arrayResult)); self.分享码(arrayResult2); };
self.解码 = function() { var Code = self.分享码(); if (Code.slice(0, 4) == "TRSC") { Code = Base64.decode(Code.slice(4)); if (Code.startsWith("E") && Code.slice(-4) == "alvn") {
self.clearSkill();
Code = Code.slice(2, -4); var Result = Code.split('Z'); var j = 0; self.速度(Number(to10(Result[j]))); j++; self.耐力(Number(to10(Result[j]))); j++; self.力量(Number(to10(Result[j]))); j++; self.毅力(Number(to10(Result[j]))); j++; self.智力(Number(to10(Result[j]))); j++; self.继承技数量(Number(to10(Result[j]))); j++; self.草地适性(self.适性等级表[Number(to10(Result[j]))]); j++; self.泥地适性(self.适性等级表[Number(to10(Result[j]))]); j++; self.短距离适性(self.适性等级表[Number(to10(Result[j]))]); j++; self.英里赛适性(self.适性等级表[Number(to10(Result[j]))]); j++; self.中距离适性(self.适性等级表[Number(to10(Result[j]))]); j++; self.长距离适性(self.适性等级表[Number(to10(Result[j]))]); j++; self.逃适性(self.脚质适性等级表[Number(to10(Result[j]))]); j++; self.先适性(self.脚质适性等级表[Number(to10(Result[j]))]); j++; self.差适性(self.脚质适性等级表[Number(to10(Result[j]))]); j++; self.追适性(self.脚质适性等级表[Number(to10(Result[j]))]); j++; self.角色星级(self.角色星级表[Number(to10(Result[j]))]); j++; self.固有技等级(self.固有技等级表[Number(to10(Result[j]))]); j++;
for (var i = 0; i < self.Skills().length; i++) if (self.Skills()[i].id == Number(to10(Result[j]))) { self.Skills()[i].isActive(true); j++; }
} else self.分享码("请输入正确的分享码!"); } else self.分享码("请输入正确的分享码!");
}
}
ko.applyBindings(new ViewModel());
</script>