Вычисление максимального прироста статов от предметных кузниц посредством итерации - Hypixel Skyblock (Minecraft) - PullRequest
2 голосов
/ 13 октября 2019

Броня и талисманы могут быть перекованы, чтобы давать бонусы к статам, когда они экипированы, а ценность, которую дают перековы, меняется в зависимости от редкости предмета. Талисманы могут быть обычными, необычными, редкими или эпическими, в то время как броня может быть общими, необычными, редкими, эпическими или легендарными.

Обычные божественные талисманы дают 1% вероятности критического удара и 1% критического урона, необычныеБлагочестивые талисманы дают 2% вероятности критического удара и 2% крит. Урона, Редкие благочестивые талисманы дают 2% вероятности критического удара и 3% крит. Урона, а эпические благочестивые талисманы дают 3% вероятности критического удара и 6% критического урона. Обычные зудящие талисманы наносят 3% критического урона, необычные зудящие талисманы наносят 5% критического урона, редкие зудящие талисманы дают 8% критического урона, а эпические зудящие талисманы дают 12% критического урона. Неприятные Талисманы дают те же характеристики, что и Божественные Талисманы, за исключением того, что шанс критического удара и урон от критического удара поменялись местами.

Божественная броня дает те же характеристики, что и Божественные талисманы, но с добавлением легендарной редкости, Легендарная божественная броня дает 5% крит. шанс и 8% критического урона. «Неприятная броня», как и «Неприятные талисманы», такая же, как «Благочестивая броня», за исключением случаев, когда шанс критического удара и урон от крит поменялись местами. Обычная Сильная Броня дает 1% критического урона, Необычная Сильная Броня дает 2% критического урона, Редкая Сильная Броня дает 4% критического урона, Эпическая Сильная Броня дает 7% критического урона, а Легендарная Сильная Броня дает вам 10% критического урона.

У игрока также есть базовый шанс критического удара 20 и переменный шанс, зависящий от уровня определенных навыков, которые он выровнял, а также от оружия. В каждом редком ярусе талисманов это просто комбинация, а не перестановка, поэтому не имеет значения, какой из Общих Талисманов является Божественным. В настоящее время существует 11 Общих Талисманов, 10 Необычных Талисманов, 11 Редких Талисманов и 2 Эпических Талисмана, но есть и другие известные, которые появятся в будущем, и поэтому мне нужно, чтобы он был легко редактируемым.

Цель состоит в том, чтобы получить 80% шанс критического удара, а затем максимизировать критический урон. Я хотел бы знать, как выполнить итерацию возможных комбинаций, чтобы получить все результаты, соответствующие этому критерию, и затем распечатать их на консоли.

Я сделал такую ​​версию, где потребовалось всего 2 режера ви как таковой, я мог бы просто использовать функцию% remainder (как показано ниже), чтобы дать мне результат, и он работал хорошо для меня, если мне не нужно помещать 0 в одну из переменных talismanCount, чего я просто избегаю.

int iterationMax = (commonCount * uncommonCount * rareCount * epicCount * 2 * 4 * 8 * 16);
int iteration = 0;
while (iteration < iterationMaximum)
{
    godlyCommons = ((iteration + 1) % commonCount);
    godlyUncommons = ((iteration + 1) % (commonCount * uncommonCount)) / commonCount;
    godlyRares = ((iteration + 1) % (commonCount * uncommonCount * rareCount)) / (commonCount * uncommonCount);
    godlyEpics = ((iteration + 1) % (commonCount * uncommonCount * rareCount * epicCount)) / (commonCount * uncommonCount * rareCount);
    godlyHelmet = ((iteration + 1) % (commonCount * uncommonCount * rareCount * epicCount * 2)) / (commonCount * uncommonCount * rareCount * epicCount);
    godlyChestplate = ((iteration + 1) % (commonCount * uncommonCount * rareCount * epicCount * 4)) / (commonCount * uncommonCount * rareCount * epicCount * 2);
    godlyLeggings = ((iteration + 1) % (commonCount * uncommonCount * rareCount * epicCount * 8)) / (commonCount * uncommonCount * rareCount * epicCount * 4);
    godlyBoots = ((iteration + 1) % (commonCount * uncommonCount * rareCount * epicCount * 16)) / (commonCount * uncommonCount * rareCount * epicCount * 8);
    switch (godlyHelmet) {
        case 0:
            switch (helmetRarity) {
                case "common":
                    armourCritDamage += 1;
                    break;
                case "uncommon":
                    armourCritDamage += 2;
                    break;
                case "rare":
                    armourCritDamage += 4;
                    break;
                case "epic":
                    armourCritDamage += 7;
                    break;
                case "legendary":
                    armourCritDamage += 10;
                    break;
            }
            break;
        //Case 1: more stats
    //switch (godlyChestplate/Leggings/Boots)
    critChance += (baseCritChance + combatLevel + swordCritChance + (godlyCommons) + (godlyUncommons * 2) + (godlyRares * 2) + (godlyEpics * 3) + armourCritChance);
    //Add crit chance for godly pieces (only godly and unpleasant give crit chance, but this code was only for godly
    critDamage += (baseCritDamage + swordCritDamage + (godlyCommons) + (godlyUncommons * 2) + (godlyRares * 3) + (godlyEpics * 6) + ((commonCount - godlyCommons) * 3) + ((uncommonCount - godlyUncommons) * 5) + ((rareCount - godlyRares) * 8) + ((epicCount - godlyEpics) * 12) + armourCritDamage);
    //Add crit damage for all reforges
    if (critChance == targetCritChance)
        Console.WriteLine(godlyCommons + " " + godlyUncommons + " " + godlyRares + " " + godlyEpics + " | " + godlyHelmet + " " + godlyChestplate + " " + godlyLeggings + " " + godlyBoots + " | " + critChance + " " + critDamage);
    iteration += 1;
}

Теперь, когда 3-я реорганизация жизнеспособна, мне нужно изменить свой код, чтобы иметь возможность принять это во внимание. Есть ли простой способ сделать это, или мне придется перезагрузить с нуля? Как бы вы пошли на счет этого.

...