满宠合成攻略(全满资质的宠物,那不是有手就行?)

3 小时前39 浏览游戏攻略
注意:本贴不教宠物基础玩法,不适合0基础玩家阅读,如果你是初次接触宠物,请移步:
如果你已经对宠物有相关的了解了,也知道满资质的宠物要怎么合成了,但是还不会计算资质,那请往下看:
horizontal linehorizontal line
在开始之前先给大家分享个好东西:
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。然后直接打开便可使用。
horizontal linehorizontal line
那这个东西可以用来干嘛呢?
如果你不会计算宠物合成后是什么资质,不要慌!!!
TapTap
只需要输入你想要合成的宠物资质,便能直接计算出结果。
horizontal linehorizontal line
玩这游戏三个月了,我经常听到的一些问题,我把他整理出来,看看是不是你们经常也会遇到的问题:
⭐️我这堆宠物里面有没有能用的胚子?
⭐️好不容易抓到个好胚子,但有一条资质200多瘸腿,是不是废了?
⭐️我抓的宠物都是些蓝天白云,橙的紫的属性都很少,最好的也就两条紫,这样次宠物能用么?
面对这些问题,即使是那些玩游戏一年半载的大佬们,也只能回答你:等我帮你看看,等我算算:
但是,现在,不用了!!!!
TapTap
这是一个实际案例,一个朋友给我了15只他觉得还不错的胚子,让我帮忙看看这些里面,能不能挑出来几只能用的胚子保留下来,用来合成橙宠。
可以看出来,他挑选的宠物里面,绝大多数都是一紫带三蓝,甚至四蓝的都有,其次是两紫2蓝的有一些,橙色词条就很少见了,像这种大多数都是蓝色属性的,需要在这里面找出来能合成橙色满资质宠物的也能找出来,但是需要多少时间,多少精力去计算。正式服玩宠物研究的比较深的大佬可以出来回答一下。
但是现在,不需要那么复杂,只需要把资质输入进去,便能得出结果:
TapTap
TapTap
可以看出,就这么一堆资质不算特别出众的宠物,有22种可以合成满资质宠物的组合,并且还不需要全部都服用资质丹,还整理出了最省资质丹的几种组合。
horizontal linehorizontal line
如果胚子都给你筛选出来了你还不会:那就...还有办法!!
TapTap
把筛选出来的胚子资质输入进去
TapTap
每一个阶段喂多少个资质丹,喂给谁,都给你计算的明明白白。
注释:
⭐️计算过程中因为会出现小数,当出现小数时游戏中一般会向上取整,但是我为了保险起见,设置的为向下取整,所以会多使用一点资质丹,但也避免了最终达不到满资质的情况。
⭐️计算过程中已经考虑了吃资质丹后资质达到上限,没有完全发挥资质丹作用的情况,所以大可放心相信计算结果。
⭐️使用过程中有任何疑问可以进行反馈,在使用过程中出现任何问题也可以在此贴下面回复。
horizontal linehorizontal line
4
2
2