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)); }
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; } } }