解决剩称竖排有双色问题,调整了参数的结构,从数字变成数字数组。

This commit is contained in:
枫谷剑仙 2025-05-11 05:23:38 +08:00
parent 5ad9460c24
commit b3fb59db24
4 changed files with 61 additions and 36 deletions

View File

@ -2685,13 +2685,13 @@ const specialSearchFunctions = (function() {
const skill = getCardActiveSkill(card, searchTypeArray);
if (!skill) return;
const sk = skill.params;
const colums = Bin.unflags(sk[1]), rows = Bin.unflags(sk[2]);
const colums = Bin.unflags(sk[0]), rows = Bin.unflags(sk[2]);
const fragment = document.createDocumentFragment();
if (colums.length)
fragment.append(`${colums.length}`);
if (rows.length)
fragment.append(`${rows.length}`);
fragment.append(`×${sk[0]}T`);
fragment.append(`×${sk[1]}T`);
return fragment;
}
},

View File

@ -231,21 +231,23 @@ class Board
block.states.add(blockState);
}
//设定横行
setRows(rows, attr, state, blockState)
setRows(rows, attrs, state, blockState)
{
if (!Array.isArray(attrs)) attrs = [attrs];
for (let ri of rows)
{
ri = this.getTargetRowIndex(ri);
const orbsRow = this.orbsData[ri], blocksRow = this.blocksData[ri];
for (let ci=0; ci<this.columnCount; ci++)
{
this.setOrbAndBlock(orbsRow[ci], blocksRow[ci], attr, state, blockState);
this.setOrbAndBlock(orbsRow[ci], blocksRow[ci], attrs.randomItem(), state, blockState);
}
}
}
//设定竖列
setColumns(cols, attr, state, blockState)
setColumns(cols, attrs, state, blockState)
{
if (!Array.isArray(attrs)) attrs = [attrs];
for (let ci of cols)
{
ci = this.getTargetColumnIndex(ci);
@ -253,16 +255,17 @@ class Board
{
const orbsRow = this.orbsData[ri], blocksRow = this.blocksData[ri];
this.setOrbAndBlock(orbsRow[ci], blocksRow[ci], attr, state, blockState);
this.setOrbAndBlock(orbsRow[ci], blocksRow[ci], attrs.randomItem(), state, blockState);
if (blockState == 'immobility') { //如果是封条,额外添加需要旋转的信息
this.setOrbAndBlock(orbsRow[ci], blocksRow[ci], attr, state, 'rotate');
this.setOrbAndBlock(orbsRow[ci], blocksRow[ci], attrs.randomItem(), state, 'rotate');
}
}
}
}
//设定形状
setShape(matrix, attr, state, blockState)
setShape(matrix, attrs, state, blockState)
{
if (!Array.isArray(attrs)) attrs = [attrs];
//const setOrb = typeof(state) == 'number';
function fillRow(ri, inputRow)
{
@ -272,9 +275,9 @@ class Board
ci = this.getTargetColumnIndex(ci);
if (this.columnCount >= 7 && ci == 4)
{
this.setOrbAndBlock(orbsRow[ci - 1], blocksRow[ci - 1], attr, state, blockState);
this.setOrbAndBlock(orbsRow[ci - 1], blocksRow[ci - 1], attrs.randomItem(), state, blockState);
}
this.setOrbAndBlock(orbsRow[ci], blocksRow[ci], attr, state, blockState);
this.setOrbAndBlock(orbsRow[ci], blocksRow[ci], attrs.randomItem(), state, blockState);
}
}
for (let i=0; i<matrix.length; i++)
@ -1267,17 +1270,27 @@ const skillObjectParsers = {
},
[125](mon1, mon2, mon3, mon4, mon5, hp, atk, rcv) { return powerUp(null, null, p.mul({ hp: hp || 100, atk: atk || 100, rcv: rcv || 100 }), c.compo('card', [mon1, mon2, mon3, mon4, mon5].filter(Boolean))); },
[126](attrs, turns, turns2, percent) { return activeTurns(turns === turns2 ? turns : [turns, turns2], orbDropIncrease(v.percent(percent), Bin.unflags(attrs))); },
[127](cols1, attrs1, cols2, attrs2) {
return fixedOrbs(
{ orbs: Bin.unflags(attrs1), type: 'col', positions: Bin.unflags(cols1) },
{ orbs: Bin.unflags(attrs2), type: 'col', positions: Bin.unflags(cols2) }
);
[127](...params) { //cols1, attrs1, cols2, attrs2 ...
const generates = [];
for (let i = 0; i < params.length; i+=2) {
generates.push({
orbs: Bin.unflags(params[i+1]),
type: 'col',
positions: Bin.unflags(params[i])
});
}
return fixedOrbs.apply(null, generates);
},
[128](rows1, attrs1, rows2, attrs2) {
return fixedOrbs(
{ orbs: Bin.unflags(attrs1), type: 'row', positions: Bin.unflags(rows1) },
{ orbs: Bin.unflags(attrs2), type: 'row', positions: Bin.unflags(rows2) }
);
[128](...params) { //rows1, attrs1, rows2, attrs2 ...
const generates = [];
for (let i = 0; i < params.length; i+=2) {
generates.push({
orbs: Bin.unflags(params[i+1]),
type: 'row',
positions: Bin.unflags(params[i])
});
}
return fixedOrbs.apply(null, generates);
},
[129](attrs, types, hp, atk, rcv, rAttrs, rPercent) {
return [
@ -1417,7 +1430,7 @@ const skillObjectParsers = {
[175](series1, series2, series3, hp, atk, rcv) { return powerUp(null, null, p.mul({ hp: hp || 100, atk: atk || 100, rcv: rcv || 100 }), c.compo('series', [series1, series2, series3].filter(Boolean))); },
[176](row1, row2, row3, row4, row5, attrs) {
return fixedOrbs(
{ orbs: [attrs ?? 0], type: 'shape', positions: [row1, row2, row3, row4, row5].map(row=>Bin.unflags(row)) }
{ orbs: [attrs ?? 0], type: 'shape', positions: [row1, row2, row3, row4, row5].map(Bin.unflags) }
);
},
[177](attrs, types, hp, atk, rcv, remains, baseAtk, bonusAtk) {
@ -1876,14 +1889,14 @@ function renderSkillEntry(skills)
case SkillKinds.FixedOrbs: { //固定位置产生珠子
for (const generate of skill.generates)
{
let orb = generate.orbs?.[0];
const orbs = generate.orbs;
if (generate.type == 'shape') {
boardsBar.boards.forEach(board=>board.setShape(generate.positions, orb));
boardsBar.boards.forEach(board=>board.setShape(generate.positions, orbs));
} else {
if (generate.type == 'row')
boardsBar.boards.forEach(board=>board.setRows(generate.positions, orb));
boardsBar.boards.forEach(board=>board.setRows(generate.positions, orbs));
else
boardsBar.boards.forEach(board=>board.setColumns(generate.positions, orb));
boardsBar.boards.forEach(board=>board.setColumns(generate.positions, orbs));
}
}
break;
@ -2460,14 +2473,14 @@ function renderSkill(skill, option = {})
for (const generate of generates)
{
let orb = generate.orbs?.[0];
let dict = {
orbs: renderOrbs(orb),
const orbs = generate.orbs;
const dict = {
orbs: renderOrbs(orbs),
};
if (generate.type == 'shape')
{
dict.position = tsp.position.shape();
boardsBar?.boards?.forEach(board=>board.setShape(generate.positions, orb));
boardsBar?.boards?.forEach(board=>board.setShape(generate.positions, orbs));
}else
{
let posFrgs = [];
@ -2477,13 +2490,13 @@ function renderSkill(skill, option = {})
const [sequence, reverse] = posSplit(generate.positions, 'row');
if (sequence.length) posFrgs.push(tsp.position.top({pos: sequence.join(slight_pause)}));
if (reverse.length) posFrgs.push(tsp.position.bottom({pos: reverse.join(slight_pause)}));
boardsBar?.boards?.forEach(board=>board.setRows(generate.positions, orb));
boardsBar?.boards?.forEach(board=>board.setRows(generate.positions, orbs));
}else
{
const [sequence, reverse] = posSplit(generate.positions, 'colum');
if (sequence.length) posFrgs.push(tsp.position.left({pos: sequence.join(slight_pause)}));
if (reverse.length) posFrgs.push(tsp.position.right({pos: reverse.join(slight_pause)}));
boardsBar?.boards?.forEach(board=>board.setColumns(generate.positions, orb));
boardsBar?.boards?.forEach(board=>board.setColumns(generate.positions, orbs));
}
dict.position = posFrgs.nodeJoin(tsp.word.slight_pause());
}

View File

@ -335,7 +335,13 @@ Array.prototype.shuffle = function() {
}
//数组随机移除元素
Array.prototype.randomShift = function() {
return this.splice(Math.random() * this.length, 1)?.[0];
if (this.length === 0) {
return null;
} else if (this.length === 1) {
return this.shift();
} else {
return this.splice(Math.random() * this.length, 1)?.[0];
}
}
//数组分组函数用法array.groupBy((a,b)=>a.type === b.type)
Array.prototype.groupBy = function(func) {
@ -375,7 +381,13 @@ Array.prototype.nodeJoin = function(separator)
}
//数组随机选择一个元素
Array.prototype.randomItem = function(){
return this[Math.randomInteger(this.length-1)];
if (this.length === 0) {
return null;
} else if (this.length === 1) {
return this[0];
} else {
return this[Math.randomInteger(this.length-1)];
}
};
Math.randomInteger = function(max, min = 0) {

View File

@ -48275,15 +48275,15 @@ const cachesMap = new Map([
],
[
"script-json_data.js",
"01b72db639555d40de9f57b80e10d580"
"d1b966c0449f40c97a14cd9c0495e8b9"
],
[
"script-skill-parser.js",
"6028d746baee2c5266706c9cc405f984"
"bd6a5a83d0deed2d45322fa4b09babe0"
],
[
"script-universal_function.js",
"ecd23293d69eb2add579594e88c92208"
"3ce2b3d06e12181f692fa5dd50fe9502"
],
[
"script.js",