Ejemplo n.º 1
0
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
        EditorGUILayout.LabelField("Approximated Stats");

        Hazard c = (Hazard)serializedObject.targetObject;

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Stealth", UnityEngine.GUILayout.MaxWidth(UnityEngine.Screen.width * .31f));
        EditorGUILayout.LabelField("+", UnityEngine.GUILayout.MaxWidth(10));
        EditorGUILayout.IntField(Hazard.GetSkillDC(c.GetAttribute(MStatAttr.STEALTH), c.level) - 10);
        EditorGUILayout.LabelField("/", UnityEngine.GUILayout.MaxWidth(10));
        EditorGUILayout.IntField(Hazard.GetSkillDC(c.GetAttribute(MStatAttr.STEALTH), c.level));
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.IntField("Disable", Hazard.GetSkillDC(c.GetAttribute(MStatAttr.DISABLE), c.level));
        EditorGUILayout.IntField("AC", Hazard.GetArmorClass(c.GetAttribute(MStatAttr.AC), c.level));
        EditorGUILayout.IntField("Attack", Hazard.GetAttack(c.level, c.isComplex));
        EditorGUILayout.IntField("Save DC", Hazard.GetSaveDC(c.GetAttribute(MStatAttr.ABILITY_DC), c.level));
        EditorGUILayout.IntField("Fort", Hazard.GetFortReflexBonus(c.GetAttribute(MStatAttr.FORT), c.level));
        EditorGUILayout.IntField("Ref", Hazard.GetFortReflexBonus(c.GetAttribute(MStatAttr.REFX), c.level));
    }
Ejemplo n.º 2
0
    private void CalcStatsForPair(Character chr, Hazard haz, StatisticsResults result, ItemBonusMode mode)
    {
        int off;
        int def;
        int sve;
        int sdc;

        if (chr.alchemistUseItemDC)
        {
            if (chr.level < 8)
            {
                sdc = 17 + chr.level + (chr.level / 3);
            }
            else
            {
                sdc = Math.Max(Character.GetStatValue(chr, chr.classSpellDC, chr.classStat, mode) + 10 + Character.GetItemBonus(chr, mode, ItemBonusType.SPELLDC), 17 + chr.level + (chr.level / 3));
            }
        }
        else
        {
            sdc = Character.GetStatValue(chr, chr.classSpellDC, chr.classStat, mode) + 10 + Character.GetItemBonus(chr, mode, ItemBonusType.SPELLDC);
        }
        int hazardFinder = chr.defenseBoost.HasFlag(SaveIncrease.HAZARD_FINDER) ? 1 : 0;

        if (haz.canBeAttacked)
        {
            off = Character.GetStatValue(chr, chr.attacks, chr.attackStat, mode) + Character.GetItemBonus(chr, mode, ItemBonusType.WEAPON);
            def = Hazard.GetArmorClass(haz.armorClass, haz.level);
            result.attacktot++;
            for (int i = 1; i <= 20; i++)
            {
                result.attack[i - 1] += GetRollResult(i, off, def, chr.attackBoost, SaveIncrease.NONE, ref result.attack[20], ref result.attack[21]);
            }
        }
        if (haz.usesAttack)
        {
            off = Hazard.GetAttack(haz.level, haz.isComplex);
            def = Character.GetArmorClass(chr, chr.armorClass, StatAttr.DEX, mode) + 10 + Character.GetItemBonus(chr, mode, chr.armorType == ArmorType.HEAVY ? ItemBonusType.HEAVY_ARMOR : ItemBonusType.ARMOR) + hazardFinder;
            result.armortot++;
            for (int i = 1; i <= 20; i++)
            {
                result.armorClass[i - 1] += GetRollResult(i, off, def, SaveIncrease.NONE, SaveIncrease.NONE, ref result.armorClass[20], ref result.armorClass[21]);
            }
        }
        if (haz.usesSavingThrow)
        {
            if (haz.canAffectsSaves.HasFlag(AffectType.FORT) || haz.canAffectsSaves.HasFlag(AffectType.FORT_LIVING))
            {
                sve = Character.GetStatValue(chr, chr.fort, StatAttr.CON, mode) + Character.GetItemBonus(chr, mode, ItemBonusType.SAVING_THROWS) + hazardFinder;
                sdc = Hazard.GetSaveDC(haz.effectDifficultyClass, haz.level);
                result.forttot++;
                for (int i = 1; i <= 20; i++)
                {
                    result.fort[i - 1] += GetRollResult(i, sve, sdc, chr.fortSaveBoost, SaveIncrease.NONE, ref result.fort[20], ref result.fort[21]);
                }
            }
            if (haz.canAffectsSaves.HasFlag(AffectType.REFX))
            {
                sve = Character.GetReflexSave(chr, chr.refx, StatAttr.DEX, mode) + Character.GetItemBonus(chr, mode, ItemBonusType.SAVING_THROWS) + hazardFinder;
                sdc = Hazard.GetSaveDC(haz.effectDifficultyClass, haz.level);
                result.refxtot++;
                for (int i = 1; i <= 20; i++)
                {
                    result.refx[i - 1] += GetRollResult(i, sve, sdc, chr.refxSaveBoost, SaveIncrease.NONE, ref result.refx[20], ref result.refx[21]);
                }
            }
            if (haz.canAffectsSaves.HasFlag(AffectType.WILL))
            {
                sve = Character.GetStatValue(chr, chr.will, StatAttr.WIS, mode) + Character.GetItemBonus(chr, mode, ItemBonusType.SAVING_THROWS) + hazardFinder;
                sdc = Hazard.GetSaveDC(haz.effectDifficultyClass, haz.level);
                result.willtot++;
                for (int i = 1; i <= 20; i++)
                {
                    result.will[i - 1] += GetRollResult(i, sve, sdc, chr.willSaveBoost, SaveIncrease.NONE, ref result.will[20], ref result.will[21]);
                }
            }
        }
        if (haz.canBeAttacked && chr.canAffectsSaves.HasFlag(AffectType.FORT))
        {
            result.spellDCtot++;
            sve = Hazard.GetFortReflexBonus(haz.fortSave, haz.level);
            for (int i = 1; i <= 20; i++)
            {
                result.classSpellDC[i - 1] += GetRollResult(i, sve, sdc, SaveIncrease.NONE, SaveIncrease.NONE, ref result.classSpellDC[20], ref result.classSpellDC[21]);
            }
        }
        if (haz.canBeAttacked && chr.canAffectsSaves.HasFlag(AffectType.REFX))
        {
            result.spellDCtot++;
            sve = Hazard.GetFortReflexBonus(haz.refxSave, haz.level);
            for (int i = 1; i <= 20; i++)
            {
                result.classSpellDC[i - 1] += GetRollResult(i, sve, sdc, SaveIncrease.NONE, SaveIncrease.NONE, ref result.classSpellDC[20], ref result.classSpellDC[21]);
            }
        }
        result.totSkills++;
        StatAttr skillStat = GetBestSkillStat(chr, 0);

        off = Character.GetSkillValue(chr, GetBestTeml(chr, chr.level), skillStat, mode) + Character.GetItemBonus(chr, mode, ItemBonusType.SKILL_BEST);
        def = Hazard.GetSkillDC(haz.disable, haz.level);
        if (haz.isComplex)
        {
            def -= 5;
        }
        for (int i = 1; i <= 20; i++)
        {
            result.skillSpecialist[i - 1] += GetRollResult(i, off, def, SaveIncrease.NONE, SaveIncrease.NONE, ref result.skillSpecialist[20], ref result.skillSpecialist[21]);
        }
        skillStat = GetBestSkillStat(chr, 1);
        off       = Character.GetSkillValue(chr, GetBestTeml(chr, chr.level - 7), skillStat, mode) + Character.GetItemBonus(chr, mode, ItemBonusType.SKILL_DECENT);
        for (int i = 1; i <= 20; i++)
        {
            result.skillDecent[i - 1] += GetRollResult(i, off, def, SaveIncrease.NONE, SaveIncrease.NONE, ref result.skillDecent[20], ref result.skillDecent[21]);
        }
        skillStat = GetBestSkillStat(chr, 3);
        off       = Character.GetSkillValue(chr, TEML.TRAINED, skillStat, mode) + Character.GetItemBonus(chr, mode, ItemBonusType.SKILL_LOWEST);
        for (int i = 1; i <= 20; i++)
        {
            result.skillDabbler[i - 1] += GetRollResult(i, off, def, SaveIncrease.NONE, SaveIncrease.NONE, ref result.skillDabbler[20], ref result.skillDabbler[21]);
        }
        int skil = Character.GetStatValue(chr, chr.perception, StatAttr.WIS, mode) + Character.GetItemBonus(chr, mode, ItemBonusType.PERCEPTION) + hazardFinder;
        int diff = Hazard.GetSkillDC(haz.stealth, haz.level);

        result.perceptiontot++;
        for (int i = 1; i <= 20; i++)
        {
            if (skil + i >= diff)
            {
                result.perception[i - 1] += (int)RollResult.SUCCESS;
            }
            else
            {
                if (result.perception[20] < i)
                {
                    result.perception[20] = i;
                }
                result.perception[i - 1] += (int)RollResult.FAIL;
            }
        }
    }