满宠合成攻略(全满资质的宠物,那不是有手就行?)
3 小时前39 浏览游戏攻略
注意:本贴不教宠物基础玩法,不适合0基础玩家阅读,如果你是初次接触宠物,请移步:
⭐️宠物基础知识
如果你已经对宠物有相关的了解了,也知道满资质的宠物要怎么合成了,但是还不会计算资质,那请往下看:


在开始之前先给大家分享个好东西:
const allPets = [];
let valid = true;
// 收集所有宠物数据
rows.forEach((row, idx) => {
const inputs = row.querySelectorAll('input');
const atk = parseInt(inputs[0].value) || 0;
const hp = parseInt(inputs[1].value) || 0;
const crit = parseInt(inputs[2].value) || 0;
const dmg = parseInt(inputs[3].value) || 0;
// 验证输入有效性(仅检查数值范围)
if (atk < 0 || atk > 500 || hp < 0 || hp > 500 || crit < 0 || crit > 500 || dmg < 0 || dmg > 500) {
valid = false;
}
allPets.push({
idx: idx + 1,
atk, hp, crit, dmg,
total: atk + hp + crit + dmg // 总资质(用于排序优化)
});
});
if (!valid) {
alert('请输入0-500之间的有效数字!');
return;
}
const petCount = allPets.length;
if (petCount < 8 || petCount > 20) {
alert('请输入8-20只宠物!');
return;
}
// 【核心修复】放宽筛选条件:仅保留所有输入的有效宠物,不提前过滤(避免候选不足)
// 仅排除完全无意义的宠物(所有属性为0)
const candidatePets = allPets.filter(pet => {
return pet.atk > 0 || pet.hp > 0 || pet.crit > 0 || pet.dmg > 0;
});
if (candidatePets.length < 8) {
alert('有效候选宠物不足8只(排除了所有属性为0的宠物),无法筛选!');
return;
}
// 优化:取前15只高总资质宠物(减少组合计算量,避免卡顿)
const topCandidates = candidatePets.sort((a, b) => b.total - a.total).slice(0, 15);
const combinations = getCombinations(topCandidates, 8);
const validPlans = [];
// 遍历每个组合,验证是否能合成满资质并计算丹数
for (const combo of combinations) {
const comboResult = checkComboQualification(combo);
if (comboResult.canFull) {
validPlans.push({
pets: combo.map(p => p.idx),
danCount: comboResult.grandTotal,
detail: comboResult
});
}
}
// 展示结果
document.getElementById('embryoResult').style.display = 'block';
const resultText = document.getElementById('embryoResultText');
const plansEl = document.getElementById('embryoPlans');
if (validPlans.length === 0) {
resultText.innerHTML = '<div class="alert alert-warning">⚠️ 未找到能合成满资质橙宠的组合!</div>';
plansEl.innerHTML = '<div>建议:提高输入的白宠基础资质(攻击/生命/暴击/爆伤尽量≥400)</div>';
return;
}
// 按丹数升序排序,取前5种方案(避免过多)
validPlans.sort((a, b) => a.danCount - b.danCount);
const topPlans = validPlans.slice(0, 5);
resultText.innerHTML = `<div class="alert alert-success">✅ 共找到 ${validPlans.length} 种有效组合,以下是丹消耗最少的前5种方案:</div>`;
let plansHtml = '';
topPlans.forEach((plan, planIdx) => {
plansHtml += `
<div class="card mb-3">
<div class="card-header">
方案${planIdx + 1}(资质丹消耗:${plan.danCount} 颗)
</div>
<div class="card-body">
<div><strong>选中宠物序号:</strong>${plan.pets.join('、')}</div>
<div class="mt-2"><strong>各属性丹消耗:</strong></div>
<table class="table table-sm table-bordered mt-1">
<tr><th>属性</th><th>白宠阶段</th><th>蓝宠阶段</th><th>紫宠阶段</th><th>橙宠阶段</th><th>合计</th></tr>
<tr>
<td>攻击</td>
<td>${plan.detail.danCount.w.atk}颗</td>
<td>${plan.detail.danCount.b.atk}颗</td>
<td>${plan.detail.danCount.p.atk}颗</td>
<td>1颗</td>
<td>${plan.detail.danCount.t.atk}颗</td>
</tr>
<tr>
<td>生命</td>
<td>${plan.detail.danCount.w.hp}颗</td>
<td>${plan.detail.danCount.b.hp}颗</td>
<td>${plan.detail.danCount.p.hp}颗</td>
<td>1颗</td>
<td>${plan.detail.danCount.t.hp}颗</td>
</tr>
<tr>
<td>暴击</td>
<td>${plan.detail.danCount.w.crit}颗</td>
<td>${plan.detail.danCount.b.crit}颗</td>
<td>${plan.detail.danCount.p.crit}颗</td>
<td>1颗</td>
<td>${plan.detail.danCount.t.crit}颗</td>
</tr>
<tr>
<td>爆伤</td>
<td>${plan.detail.danCount.w.dmg}颗</td>
<td>${plan.detail.danCount.b.dmg}颗</td>
<td>${plan.detail.danCount.p.dmg}颗</td>
<td>1颗</td>
<td>${plan.detail.danCount.t.dmg}颗</td>
</tr>
</table>
</div>
</div>
`;
});
plansEl.innerHTML = plansHtml;
} catch (e) {
console.error('筛选出错:', e);
alert('筛选过程中出现错误,请检查输入或刷新页面重试!');
}
}
// 验证单个8只宠物组合是否能合成满资质
function checkComboQualification(combo) {
const attrs = ['atk', 'hp', 'crit', 'dmg'];
const attrUpper = { white: 500, blue: 650, purple: 850, orange: 1100 };
const attrDan = { white: 25, blue: 32.5, purple: 42.5, orange: 55 };
const requirements = {
white: { baseAvg: 400, danAvg: 425 },
blue: { baseAvg: 552.5, danAvg: 585 },
purple: { baseAvg: 765, danAvg: 807.5 },
orange: { baseAvg: 1045, danAvg: 1100 }
};
const result = {
canFull: true,
danCount: { w: {}, b: {}, p: {}, t: {} },
grandTotal: 0
};
// 初始化丹数
attrs.forEach(attr => {
result.danCount.w[attr] = 0;
result.danCount.b[attr] = 0;
result.danCount.p[attr] = 0;
result.danCount.t[attr] = 0;
});
// 逐属性计算
for (const attr of attrs) {
const petAttrs = combo.map(p => p[attr]);
const baseSum = petAttrs.reduce((a, b) => a + b, 0);
const baseAvg = baseSum / 8;
// 白宠阶段
if (baseAvg < requirements.white.baseAvg) {
result.canFull = false;
break;
}
const targetWhiteSum = requirements.white.danAvg * 8;
let lack = targetWhiteSum - baseSum;
let whiteDan = 0;
if (lack > 0) {
const sortedPets = [...combo].sort((a, b) => a[attr] - b[attr]);
for (const pet of sortedPets) {
if (lack <= 0) break;
const current = pet[attr];
const maxAdd = attrUpper.white - current;
const realAdd = Math.min(attrDan.white, maxAdd);
if (realAdd <= 0) continue;
whiteDan++;
lack -= realAdd;
}
if (lack > 0) {
result.canFull = false;
break;
}
}
// 蓝宠阶段
const blueBaseAvg = (baseSum + whiteDan * attrDan.white) / 8 / attrUpper.white * attrUpper.blue;
if (blueBaseAvg < requirements.blue.baseAvg) {
result.canFull = false;
break;
}
const blueLack = requirements.blue.danAvg - blueBaseAvg;
const blueDan = blueLack > 0 ? Math.ceil(blueLack / (attrDan.blue / 4)) : 0;
const blueDanFinal = Math.min(blueDan, 4);
// 紫宠阶段
const blueDanAvg = blueBaseAvg + (blueDanFinal * attrDan.blue) / 4;
const purpleBaseAvg = blueDanAvg / attrUpper.blue * attrUpper.purple;
if (purpleBaseAvg < requirements.purple.baseAvg) {
result.canFull = false;
break;
}
const purpleLack = requirements.purple.danAvg - purpleBaseAvg;
const purpleDan = purpleLack > 0 ? Math.ceil(purpleLack / (attrDan.purple / 2)) : 0;
const purpleDanFinal = Math.min(purpleDan, 2);
// 橙宠阶段
const purpleDanAvg = purpleBaseAvg + (purpleDanFinal * attrDan.purple) / 2;
const orangeBaseAvg = purpleDanAvg / attrUpper.purple * attrUpper.orange;
if (orangeBaseAvg < requirements.orange.baseAvg) {
result.canFull = false;
break;
}
// 记录丹数
result.danCount.w[attr] = whiteDan;
result.danCount.b[attr] = blueDanFinal;
result.danCount.p[attr] = purpleDanFinal;
result.danCount.t[attr] = whiteDan + blueDanFinal + purpleDanFinal + 1;
result.grandTotal += result.danCount.t[attr];
}
return result;
}
// 生成组合(从数组中选n个元素的所有组合)
function getCombinations(arr, n) {
const result = [];
if (n === 1) return arr.map(item => [item]);
arr.forEach((current, idx, array) => {
const rest = array.slice(idx + 1);
const combinations = getCombinations(rest, n - 1);
const combined = combinations.map(c => [current, ...c]);
result.push(...combined);
});
return result;
}
</script>
</body>
</html>
使用方法:复制以上代码,在桌面新建一个记事本,把内容粘贴在记事本上,保存,修改记事本名称为index,把后缀.txt修改为.html。然后直接打开便可使用。


那这个东西可以用来干嘛呢?
如果你不会计算宠物合成后是什么资质,不要慌!!!
只需要输入你想要合成的宠物资质,便能直接计算出结果。


玩这游戏三个月了,我经常听到的一些问题,我把他整理出来,看看是不是你们经常也会遇到的问题:
⭐️我这堆宠物里面有没有能用的胚子?
⭐️好不容易抓到个好胚子,但有一条资质200多瘸腿,是不是废了?
⭐️我抓的宠物都是些蓝天白云,橙的紫的属性都很少,最好的也就两条紫,这样次宠物能用么?
面对这些问题,即使是那些玩游戏一年半载的大佬们,也只能回答你:等我帮你看看,等我算算:
但是,现在,不用了!!!!
这是一个实际案例,一个朋友给我了15只他觉得还不错的胚子,让我帮忙看看这些里面,能不能挑出来几只能用的胚子保留下来,用来合成橙宠。
可以看出来,他挑选的宠物里面,绝大多数都是一紫带三蓝,甚至四蓝的都有,其次是两紫2蓝的有一些,橙色词条就很少见了,像这种大多数都是蓝色属性的,需要在这里面找出来能合成橙色满资质宠物的也能找出来,但是需要多少时间,多少精力去计算。正式服玩宠物研究的比较深的大佬可以出来回答一下。
但是现在,不需要那么复杂,只需要把资质输入进去,便能得出结果:
可以看出,就这么一堆资质不算特别出众的宠物,有22种可以合成满资质宠物的组合,并且还不需要全部都服用资质丹,还整理出了最省资质丹的几种组合。


如果胚子都给你筛选出来了你还不会:那就...还有办法!!
把筛选出来的胚子资质输入进去
每一个阶段喂多少个资质丹,喂给谁,都给你计算的明明白白。
注释:
⭐️计算过程中因为会出现小数,当出现小数时游戏中一般会向上取整,但是我为了保险起见,设置的为向下取整,所以会多使用一点资质丹,但也避免了最终达不到满资质的情况。
⭐️计算过程中已经考虑了吃资质丹后资质达到上限,没有完全发挥资质丹作用的情况,所以大可放心相信计算结果。
⭐️使用过程中有任何疑问可以进行反馈,在使用过程中出现任何问题也可以在此贴下面回复。



