Новости Релиз Of Ash and Steel состоится 6 ноября
  • 2.914
  • 3
Of Ash and Steel: атмосферный экшен выходит 6 ноября 6 ноября станет важной датой для поклонников сложных и атмосферных игр - именно в этот день состоится релиз долгожданного проекта Of Ash and...
Новости В Of Ash and Steel начался закрытый плейтест
  • 9.680
  • 12
Разработчики "Русской Готики" объявили о старте закрытого плейтеста. Если вы оставляли заявку на участие, не забудьте проверить электронную почту или посмотреть свою библиотеку - возможно игра уже...
С Днём России!
  • 8.054
  • 6
Дорогие друзья! Поздравляю вас с Днём России! Этот праздник напоминает нам о богатой истории и культуре нашей страны, о её величии и непоколебимом духе народа! Желаю вам крепкого здоровья...
Новости Анонсирован Atomic Heart II
EthernalBreeze

EthernalBreeze 3.05 (BUILD 6.4.6)

Нет прав доступа на загрузку
Сей мод направлен на расширение Нового Баланса в формат Дьяблоида и схожих рпг игр.
Автор
Автор
StonedWizzard

StonedWizzard

Рыцарь
Участник форума
Регистрация
10 Июн 2013
Сообщения
2.332
Реакции
2.028
Баллы
434
Лучшие ответы
0
Вопроса вообщем-то два, но они связаны:
1) Как настроить сложность монстров? Т.е. тирность например (тут твик о котором выше говорилось :thumbsup:, хорошобы его внести тогда в основные настройки) , которая по-хорошему должна определять кол-во аффиксов (а по факту определяет и аффиксы и мощь?), при этом см. вопрос2
2) Осквернённые я ориентировочно понимал как и описывал выше, это же касается и богатых и удачливых (хотя хотелось бы подробнее о них услышать, т.е. в какой степени они усиливают монстров/улучшают лут), но есть ещё и "благославляющие" (которые внезапно тоже накидывают аффиксов, или просто так совпадает всегда) количество которых настройками нерегулируется. Вообщем вопрос о том, как бы нам урегилировать кол-во аффиксов у монстров.
Плохой пример: с отключенными осквернёнными, богатыми и удачливыми и мощью маг.насыщения в ноль встречается монстр с необычной редкостью (Тир1) но с 2мя строчками аффиксов.

Как я представлю себе это в своих влажных фантазиях:
Т1 монстр имеет до 2ух аффиксов, Т2: 3...4 и т.д, потолок тира от первой главы настраивается (дальше автоматически +1 за главу если не макс), шанс встречи более высокого тира настраивается (и настраивается капитель от главы/уровня ГГ).
Каждый аффикс усиливает монстра на N процентов, данное N модифицируется настройкой мощи насыщения (та что сейчас существует)
При наличии у монстра осквернения/богатства/удачи он получает +2...3 аффикса (всякие "благословенные" исключения существовать не должны, т.е. при отключении всех этих типов монстров мы встречаем кол-во аффиксов только соотвествующее тирам, так понятнее должно быть) при этом, в идеале, эти монстры не должны иметь усилений на N за эти дополнительные 2...3 аффикса, т.к. они фактически на тир ниже чем должны являться.

Так, смотри как работают тиры, да и просто собирается Infusion в движке
C++:
MagicInfusionData* CreateInfusion(int tier)
    {
        const MagicInfusionData* prefix = GetRandomInfusion(StExt_InfusionType_Preffix, tier, false);
        const MagicInfusionData* affix = GetRandomInfusion(StExt_InfusionType_Affix, tier, false);
        const MagicInfusionData* suffix = GetRandomInfusion(StExt_InfusionType_Suffix, tier, false);

        if (!suffix && !affix && !prefix)
        {
            if (StExt_Rand::Bool()) prefix = GetRandomInfusion(StExt_InfusionType_Preffix, tier, true);
            else suffix = GetRandomInfusion(StExt_InfusionType_Suffix, tier, true);
        }
        Array<const MagicInfusionData*> infusionData = Array<const MagicInfusionData*>();
        infusionData.Insert(prefix);
        infusionData.Insert(affix);
        infusionData.Insert(suffix);

        MagicInfusionData* result = new MagicInfusionData();
        result->Tier = tier;
        result->PreffixId = prefix ? prefix->Id : -1;
        result->AffixId = affix ? affix->Id : -1;
        result->SuffixId = suffix ? suffix->Id : -1;
        result->Effect = "";
        for (int i = 0; i < 10; ++i)
            result->Abilities[i] = -1;

        Array<zSTRING> effectsData = Array<zSTRING>();
        Array<int> abilitiesData = Array<int>();
        for (unsigned int i = 0; i < infusionData.GetNum(); ++i)
        {
            if (!infusionData[i]) continue;

            // Npc mods
            result->NpcFlags |= infusionData[i]->NpcFlags;
            result->Size += infusionData[i]->Size;
            result->SpeedMod += infusionData[i]->SpeedMod;
            result->ExtraLevel += infusionData[i]->ExtraLevel;
            result->ExtraLevelMult += infusionData[i]->ExtraLevelMult;

            // Attribute mods
            result->ExtraHp += infusionData[i]->ExtraHp;
            result->ExtraEs += infusionData[i]->ExtraEs;
            result->ExtraStr += infusionData[i]->ExtraStr;
            result->ExtraAgi += infusionData[i]->ExtraAgi;
            result->ExtraHpMult += infusionData[i]->ExtraHpMult;
            result->ExtraEsMult += infusionData[i]->ExtraEsMult;
            result->ExtraStrMult += infusionData[i]->ExtraStrMult;
            result->ExtraAgiMult += infusionData[i]->ExtraAgiMult;

            // Damage mods
            result->ExtraBluntDam += infusionData[i]->ExtraBluntDam;
            result->ExtraEdgeDam += infusionData[i]->ExtraEdgeDam;
            result->ExtraFireDam += infusionData[i]->ExtraFireDam;
            result->ExtraFlyDam += infusionData[i]->ExtraFlyDam;
            result->ExtraMagicDam += infusionData[i]->ExtraMagicDam;
            result->ExtraPointDam += infusionData[i]->ExtraPointDam;
            result->ExtraHitchances += infusionData[i]->ExtraHitchances;

            // Protection mods
            result->ExtraDodgeChance += infusionData[i]->ExtraDodgeChance;
            result->ExtraBluntProt += infusionData[i]->ExtraBluntProt;
            result->ExtraEdgeProt += infusionData[i]->ExtraEdgeProt;
            result->ExtraFireProt += infusionData[i]->ExtraFireProt;
            result->ExtraFlyProt += infusionData[i]->ExtraFlyProt;
            result->ExtraMagicProt += infusionData[i]->ExtraMagicProt;
            result->ExtraPointProt += infusionData[i]->ExtraPointProt;
            result->ExtraProtAllMult += infusionData[i]->ExtraProtAllMult;
            result->ResistEdge += infusionData[i]->ResistEdge;
            result->ResistBlunt += infusionData[i]->ResistBlunt;
            result->ResistPoint += infusionData[i]->ResistPoint;
            result->ResistMagic += infusionData[i]->ResistMagic;
            result->ResistFire += infusionData[i]->ResistFire;
            result->ResistFly += infusionData[i]->ResistFly;
            result->ResistPois += infusionData[i]->ResistPois;

            result->GoldBonus += infusionData[i]->GoldBonus;
            result->LuckBonus += infusionData[i]->LuckBonus;

            // Visual effects
            if (!infusionData[i]->Effect.IsEmpty())
                effectsData.Insert(infusionData[i]->Effect);

            // Abilities
            if (!abilitiesData.HasEqual(infusionData[i]->PassiveAbilityId) && (infusionData[i]->PassiveAbilityId > 0))
                abilitiesData.Insert(infusionData[i]->PassiveAbilityId);
            if (!abilitiesData.HasEqual(infusionData[i]->LowAbilityId) && (infusionData[i]->LowAbilityId > 0))
                abilitiesData.Insert(infusionData[i]->LowAbilityId);
            if (!abilitiesData.HasEqual(infusionData[i]->MedAbilityId) && (tier >= 2) && (infusionData[i]->MedAbilityId > 0))
                abilitiesData.Insert(infusionData[i]->MedAbilityId);
            if (!abilitiesData.HasEqual(infusionData[i]->TopAbilityId) && (tier >= 3) && (infusionData[i]->TopAbilityId > 0))
                abilitiesData.Insert(infusionData[i]->TopAbilityId);
            if (!abilitiesData.HasEqual(infusionData[i]->SummonAbilityId) && (tier >= 2) && (infusionData[i]->SummonAbilityId > 0))
                abilitiesData.Insert(infusionData[i]->SummonAbilityId);
            if (!abilitiesData.HasEqual(infusionData[i]->BuffAbilityId) && (infusionData[i]->BuffAbilityId > 0))
                abilitiesData.Insert(infusionData[i]->BuffAbilityId);
            if (!abilitiesData.HasEqual(infusionData[i]->DebuffAbilityId) && (infusionData[i]->DebuffAbilityId > 0))
                abilitiesData.Insert(infusionData[i]->DebuffAbilityId);
        }

        // Visual effects selection
        if (effectsData.GetNum() > 0)
            result->Effect = effectsData[StExt_Rand::Index(effectsData.GetNum())];

        int abilityNum = abilitiesData.GetNum();
        if (abilityNum > 10)
            StExt_Rand::ShuffleArray(abilitiesData);

        for (int i = 0; i < 10; ++i) {
            result->Abilities[i] = ((abilityNum == 0) || (i >= abilityNum)) ? Invalid : abilitiesData[i];
        }

        // Model scale
        result->Size += 1.0f;
        if (result->Size < 0.75f) result->Size = 0.75f;
        if (result->Size > 2.00f) result->Size = 2.00f;

        return result;
    }

inline const MagicInfusionData* GetRandomInfusion(int type, int tier, int grantInfusion)
    {
        int chance = StExt_Rand::Next(100) + (tier * 5);
        if (!grantInfusion && (chance < 50)) return Null;

        switch (type)
        {
            case StExt_InfusionType_Affix:
                return &InfusionAffixes[StExt_Rand::Index(InfusionAffixes.GetNum())];

            case StExt_InfusionType_Preffix:
                return &InfusionPreffixes[StExt_Rand::Index(InfusionPreffixes.GetNum())];

            case StExt_InfusionType_Suffix:
                return &InfusionSuffixes[StExt_Rand::Index(InfusionSuffixes.GetNum())];

            default:
                return Null;
        }
        return Null;
    }

то есть тир так или иначе влияет на кол-во имён у моба, а это уже в свою очередь влияет на статы с учётом суммарного множителя + там в скриптах от тира расчёт.
Генерацию тира переделаю - я её тогда по всей видимости на скорую руку заделал, потом обдумаю как бы гибкости той системе добавить.
Абилки - это сумма абилок от всех 3х возможных аффиксов у моба (префикс, аффикс и суффикс) Они хранятся в соответсвующей структуре м просто смешиваются - так что кол-во умений у непися ограничено лишь физическим капом в 10 штук и как видно в коде - его тиром, дабы мясной жук не кастовал армагедон, а крыса не призывала демонов)
Пометки богатый и удачливый если мне ща память не изменяет - просто увеличивают "входящую мощь нпс" при генерации что бы сделать моба чуть сильнее, но в замен накинуть больше мощи удачи при дропе.
 
Сверху Снизу