◆少前百科是非盈利性、非官方的少女前线维基百科。
◆如果您发现某些内容错误/空缺,请勇于修正/添加!参与进来其实很容易!点这里 加入少前百科
◆有任何意见、建议、纠错,欢迎在 GFwiki:反馈与建议 提出和讨论。编辑事务讨论QQ群:597764980,微博@GFwiki少前百科
◆To foreigners,You can use twitter to contact us.
Icon Nyto Silver.png

“Widget:融合势力属性”的版本间的差异

来自少前百科GFwiki
跳转至: 导航搜索
第79行: 第79行:
 
     stars = rankCtrl.children;
 
     stars = rankCtrl.children;
 
     for (let i = 5; i--;) stars[i].src = '/images/0/0a/StarWhite.svg';
 
     for (let i = 5; i--;) stars[i].src = '/images/0/0a/StarWhite.svg';
     for (let i = 3 - type; i < 5; i++) {
+
     for (let i = 2 - type; i < 5; i++) {
 
         let star = stars[i];
 
         let star = stars[i];
 
         stars[i].addEventListener('click', e => {
 
         stars[i].addEventListener('click', e => {

2022年5月1日 (日) 22:11的版本

<script> const type_coef = [

   [4.79, 3.67, 0.46, 0.55, 0.75, 0.18],
   [3.84, 2.94, 0.42, 0.44, 0.60, 0.15],
   [3.60, 2.76, 0.42, 0.42, 0.57, 0.14]];

const size_coef = [100, 102, 105, 108, 110]; const rank_coef = [80, 90, 100, 110, 120]; let div, type, ratios, grow; let maxform = 5; let resolution = new Array(5);

let variables = {size: 0, formation: 5, lv: 100, rank: 4, resolution: 4}; let stars;

function calc(attr, lv, rank, size, resolve, form) {

   let ratio = ratios[attr];
   let base = type_coef[type][attr] * ratio * 2 * grow *
       size_coef[size] * rank_coef[rank] * form / (maxform * 5e6);
   let accretion = type_coef[type][attr] * ratio * (lv - 1) * grow *
       size_coef[size] * rank_coef[rank] * form / (maxform * 1e8);
   if (base - Math.floor(base) < 1e-3) {
       base = Math.floor(base);
   }
   return Math.ceil(base) + Math.floor(accretion) + form * resolution[resolve][attr];

}

function updateAttrs() {

   for (let i = 7; --i;) document.getElementById('attr-td-' + i).textContent = calc(
       i-1, variables.lv, variables.rank, variables.size, variables.resolution, variables.formation);

}

function updateResSignal() { return; }

function addInputs(container, name, labels, base = 0) {

   for (let i = 0; i < 5; i++) {
       let label = document.createElement('label');
       let input = document.createElement('input');
       input.type = 'radio';
       input.value = i;
       input.name = name;
       label.appendChild(input);
       if (labels) label.insertAdjacentText('beforeend', labels[i]);
       container.appendChild(label);
       input.addEventListener('click', e => {
           let val = +e.currentTarget.value + base;
           if (variables[name] != val) {
               variables[name] = val;
               updateAttrs();
           }
       });
   }

}

function addControl() {

   let sizeCtrl = document.getElementById('size-control');
   let formCtrl = document.getElementById('formation-control');
   let lvCtrl = document.getElementById('lv-control');
   let rankCtrl = document.getElementById('rank-control');
   let resCtrl = document.getElementById('resolve-control');
   if (sizeCtrl) addInputs(sizeCtrl, 'size', ['微', '小', '中', '大', '巨']);
   if (maxform == 5) addInputs(formCtrl, 'formation', ['×1', '×2', '×3', '×4', '×5'], 1);
   else formCtrl.textContent = '×1';
   let lvLabel = document.createElement('label');
   lvLabel.textContent = '等级';
   let lvInput = document.createElement('input');
   lvInput.type = 'number';
   lvInput.max = 100;
   lvInput.min = 1;
   lvInput.value = 100;
   lvLabel.appendChild(lvInput);
   lvCtrl.appendChild(lvLabel);
   lvInput.addEventListener('input', e => {
       let val = e.currentTarget.value;
       if (variables.lv != val) {
           variables.lv = val;
           updateAttrs();
       }
   });
   stars = rankCtrl.children;
   for (let i = 5; i--;) stars[i].src = '/images/0/0a/StarWhite.svg';
   for (let i = 2 - type; i < 5; i++) {
       let star = stars[i];
       stars[i].addEventListener('click', e => {
           let rank = +e.currentTarget.dataset.id;
           if (variables.rank != rank) {
               variables.rank = rank;
               for (let j = 3 - type; j <= rank; j++) stars[j].className = ;
               for (let j = rank + 1; j < 5; j++) stars[j].className = 'star-dark';
               updateAttrs();
           }
       });
   }
   for (let i = 0; i < 5; i++) {
       let input = document.createElement('input');
       input.type = 'radio';
       input.value = i;
       input.name = 'resolution';
       resCtrl.appendChild(input);
       input.addEventListener('click', e => {
           let val = +e.currentTarget.value;
           if (variables.resolution != val)
           variables.resolution = val;
           updateAttrs();
           updateResSignal();
       });
   }

}

function main() {

   div = document.getElementById('attrs');
   let unitid = div.dataset.id;
   if (unitid < 2000 || unitid == 2006 || unitid == 3010) maxform = 1;
   variables.formation = maxform;
   type = div.dataset.type;
   ratios = div.dataset.attrs.split(',').map(x => +x);
   grow = div.dataset.grow;
   let r2d = div.dataset.resolution.split(';');
   for (let i = 0; i < 5; i++) {
       rs = r2d[i].split(',');
       resolution[i] = new Array(6);
       for (let j = 0; j < 6; j++) resolution[i][j] = +rs[j];
   }
   addControl();
   updateAttrs();

}

window.onload = main; </script>