private static bool GetIsHalfWeight(CLRScriptBase script, List <PricedItemProperty> itProp) { PricedItemProperty removedProp = null; foreach (PricedItemProperty prop in itProp) { if (script.GetItemPropertyType(prop.Property) == ITEM_PROPERTY_DAMAGE_BONUS && script.GetItemPropertyCostTableValue(prop.Property) == IP_CONST_REDUCEDWEIGHT_50_PERCENT) { removedProp = prop; break; } } if (removedProp != null) { itProp.Remove(removedProp); return(true); } return(false); }
private static bool GetIsAlchemicalSilver(CLRScriptBase script, List <PricedItemProperty> itProp) { PricedItemProperty removedProp = null; foreach (PricedItemProperty prop in itProp) { if (script.GetItemPropertyType(prop.Property) == ITEM_PROPERTY_DECREASED_DAMAGE && script.GetItemPropertyCostTableValue(prop.Property) == 1) { removedProp = prop; break; } } if (removedProp != null) { itProp.Remove(removedProp); return(true); } return(false); }
private static bool GetHasSpecificSavingThrowBonus(CLRScriptBase script, List <PricedItemProperty> itProp, int saveType, int saveBonus) { PricedItemProperty removedProp = null; foreach (PricedItemProperty prop in itProp) { if (script.GetItemPropertyType(prop.Property) == ITEM_PROPERTY_SAVING_THROW_BONUS && script.GetItemPropertySubType(prop.Property) == saveType && script.GetItemPropertyCostTableValue(prop.Property) == saveBonus) { removedProp = prop; break; } } if (removedProp != null) { itProp.Remove(removedProp); return(true); } return(false); }
private static bool GetHasElementalWeaponBonus(CLRScriptBase script, List <PricedItemProperty> itProp, int elementalConstant, int damageBonus) { PricedItemProperty removedProp = null; foreach (PricedItemProperty prop in itProp) { if (script.GetItemPropertyType(prop.Property) == ITEM_PROPERTY_DAMAGE_BONUS && script.GetItemPropertySubType(prop.Property) == elementalConstant && script.GetItemPropertyCostTableValue(prop.Property) == damageBonus) { removedProp = prop; break; } } if (removedProp != null) { itProp.Remove(removedProp); return(true); } return(false); }
private static bool GetHasVersusAlignmentBonus(CLRScriptBase script, List <PricedItemProperty> itProp, int alignmentTarget, int damageBonus) { PricedItemProperty removedProp = null; foreach (PricedItemProperty prop in itProp) { if (script.GetItemPropertyType(prop.Property) == ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP && script.GetItemPropertySubType(prop.Property) == alignmentTarget && script.GetItemPropertyCostTableValue(prop.Property) == damageBonus) { removedProp = prop; break; } } if (removedProp != null) { itProp.Remove(removedProp); return(true); } return(false); }
private static bool GetIsMasterwork(CLRScriptBase script, List <PricedItemProperty> itProp) { PricedItemProperty removedProp = null; bool complexEnchantment = false; foreach (PricedItemProperty prop in itProp) { if (script.GetItemPropertyType(prop.Property) == ITEM_PROPERTY_ENHANCEMENT_BONUS) { // This needs its own pricing. Leave it in place and return. return(true); } if (script.GetItemPropertyType(prop.Property) == ITEM_PROPERTY_ATTACK_BONUS && script.GetItemPropertyCostTableValue(prop.Property) == 1) { removedProp = prop; } if (script.GetItemPropertyType(prop.Property) == ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP || script.GetItemPropertyType(prop.Property) == ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP || script.GetItemPropertyType(prop.Property) == ITEM_PROPERTY_ATTACK_BONUS_VS_SPECIFIC_ALIGNMENT) { complexEnchantment = true; } } if (removedProp != null && !complexEnchantment) { itProp.Remove(removedProp); return(true); } else if (removedProp != null) { // enchantment is complex; we still need to treat the // attack bonus as magic. return(true); } return(false); }
private static void GetAffinityAdjustedValue(int itemType, PricedItemProperty prop, int type, int subtype, int costTableValue) { switch (itemType) { #region Rings case BASE_ITEM_RING: { // Rings are everything affinate, // so they never take an affinity penalty. break; } #endregion #region Amulets case BASE_ITEM_AMULET: { switch (type) { #region Ability Bonus case ITEM_PROPERTY_ABILITY_BONUS: { switch (subtype) { case IP_CONST_ABILITY_CON: case IP_CONST_ABILITY_WIS: { break; } default: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } } break; } #endregion #region Bonus Feats case ITEM_PROPERTY_BONUS_FEAT: { switch (subtype) { case IP_CONST_FEAT_EXTRA_TURNING: case IP_CONST_FEAT_COMBAT_CASTING: { break; } default: { prop.AffinityPenaltyPrice = -1; break; } } break; } #endregion #region Bonus Spell Slots case ITEM_PROPERTY_BONUS_SPELL_SLOT_OF_LEVEL_N: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } #endregion #region Spell Casting case ITEM_PROPERTY_CAST_SPELL: { switch (subtype) { case IP_CONST_CASTSPELL_ACTIVATE_ITEM: // no special price case IP_CONST_CASTSPELL_UNIQUE_POWER: case IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY: case IP_CONST_CASTSPELL_AID_3: // morale case IP_CONST_CASTSPELL_AMPLIFY_5: // discernment case IP_CONST_CASTSPELL_AURA_VERSUS_ALIGNMENT_15: // protection case IP_CONST_CASTSPELL_BANE_5: // morale case IP_CONST_CASTSPELL_BARKSKIN_12: // protection case IP_CONST_CASTSPELL_BARKSKIN_3: case IP_CONST_CASTSPELL_BARKSKIN_6: case IP_CONST_CASTSPELL_BLESS_2: // morale case IP_CONST_CASTSPELL_CLAIRAUDIENCE_CLAIRVOYANCE_10: // discernment case IP_CONST_CASTSPELL_CLAIRAUDIENCE_CLAIRVOYANCE_15: case IP_CONST_CASTSPELL_CLAIRAUDIENCE_CLAIRVOYANCE_5: case IP_CONST_CASTSPELL_DARKVISION_3: // discernment case IP_CONST_CASTSPELL_DARKVISION_6: case IP_CONST_CASTSPELL_DOOM_2: // morale case IP_CONST_CASTSPELL_DOOM_5: case IP_CONST_CASTSPELL_ELEMENTAL_SHIELD_12: // protection case IP_CONST_CASTSPELL_ELEMENTAL_SHIELD_7: case IP_CONST_CASTSPELL_ENDURANCE_10: // protection-- which I guess is the justification of amulets of health? case IP_CONST_CASTSPELL_ENDURANCE_15: case IP_CONST_CASTSPELL_ENDURANCE_3: case IP_CONST_CASTSPELL_ENDURE_ELEMENTS_2: // protection case IP_CONST_CASTSPELL_ENERGY_BUFFER_11: // protection case IP_CONST_CASTSPELL_ENERGY_BUFFER_15: case IP_CONST_CASTSPELL_ENERGY_BUFFER_20: case IP_CONST_CASTSPELL_ENTROPIC_SHIELD_5: // protection case IP_CONST_CASTSPELL_FEAR_5: // morale case IP_CONST_CASTSPELL_FIND_TRAPS_3: // discernment case IP_CONST_CASTSPELL_GLOBE_OF_INVULNERABILITY_11: // protection case IP_CONST_CASTSPELL_GREATER_ENDURANCE_11: // protection case IP_CONST_CASTSPELL_GREATER_OWLS_WISDOM_11: // discernment case IP_CONST_CASTSPELL_GREATER_SPELL_MANTLE_17: // protection case IP_CONST_CASTSPELL_GREATER_STONESKIN_11: // protection case IP_CONST_CASTSPELL_LESSER_SPELL_MANTLE_9: // protection case IP_CONST_CASTSPELL_MAGE_ARMOR_2: // protection case IP_CONST_CASTSPELL_MAGIC_CIRCLE_AGAINST_ALIGNMENT_5: // protection case IP_CONST_CASTSPELL_MIND_BLANK_15: // protection case IP_CONST_CASTSPELL_OWLS_INSIGHT_15: // discernment case IP_CONST_CASTSPELL_OWLS_WISDOM_10: case IP_CONST_CASTSPELL_OWLS_WISDOM_15: case IP_CONST_CASTSPELL_OWLS_WISDOM_3: case IP_CONST_CASTSPELL_PREMONITION_15: // discernment case IP_CONST_CASTSPELL_PROTECTION_FROM_ALIGNMENT_2: // protection case IP_CONST_CASTSPELL_PROTECTION_FROM_ALIGNMENT_5: case IP_CONST_CASTSPELL_PROTECTION_FROM_ELEMENTS_10: case IP_CONST_CASTSPELL_PROTECTION_FROM_ELEMENTS_3: case IP_CONST_CASTSPELL_PROTECTION_FROM_EVIL_1: case IP_CONST_CASTSPELL_PROTECTION_FROM_SPELLS_13: case IP_CONST_CASTSPELL_PROTECTION_FROM_SPELLS_20: case IP_CONST_CASTSPELL_REMOVE_FEAR_2: // morale case IP_CONST_CASTSPELL_RESIST_ELEMENTS_10: // protection case IP_CONST_CASTSPELL_RESIST_ELEMENTS_3: case IP_CONST_CASTSPELL_RESISTANCE_2: // protection case IP_CONST_CASTSPELL_RESISTANCE_5: case IP_CONST_CASTSPELL_SCARE_2: // morale case IP_CONST_CASTSPELL_SEE_INVISIBILITY_3: // discernment case IP_CONST_CASTSPELL_SHADOW_SHIELD_13: // protection case IP_CONST_CASTSPELL_SHIELD_5: // protection case IP_CONST_CASTSPELL_SHIELD_OF_FAITH_5: // protection case IP_CONST_CASTSPELL_SPELL_MANTLE_13: // protection case IP_CONST_CASTSPELL_SPELL_RESISTANCE_15: // protection case IP_CONST_CASTSPELL_SPELL_RESISTANCE_9: case IP_CONST_CASTSPELL_STONESKIN_7: // protection case IP_CONST_CASTSPELL_TRUE_SEEING_9: // discernment case IP_CONST_CASTSPELL_TRUE_STRIKE_5: // discernment { break; } case IP_CONST_CASTSPELL_SS_DEFENSIVE_EDGE: case IP_CONST_CASTSPELL_SS_DESPAIR_OF_THE_DIVIDED: case IP_CONST_CASTSPELL_SS_GREATER_RESTORATION: case IP_CONST_CASTSPELL_SS_GREATER_SHOUT: case IP_CONST_CASTSPELL_SS_PENETRATING_EDGE: case IP_CONST_CASTSPELL_SS_POLAR_RAY: case IP_CONST_CASTSPELL_SS_PREMONITION: case IP_CONST_CASTSPELL_SS_SPELL_MANTLE: case IP_CONST_CASTSPELL_SS_SPELLLIKE_ABILITIES: case IP_CONST_CASTSPELL_SS_SWORD_FORMS: case IP_CONST_CASTSPELL_SS_UNITY_OF_WILL: case IP_CONST_CASTSPELL_SS_VORPAL_EDGE: case IP_CONST_CASTSPELL_SPECIAL_ALCOHOL_BEER: case IP_CONST_CASTSPELL_SPECIAL_ALCOHOL_SPIRITS: case IP_CONST_CASTSPELL_SPECIAL_ALCOHOL_WINE: case IP_CONST_CASTSPELL_SPECIAL_HERB_BELLADONNA: case IP_CONST_CASTSPELL_SPECIAL_HERB_GARLIC: case IP_CONST_CASTSPELL_DRAGON_BREATH_ACID_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_COLD_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_FEAR_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_FIRE_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_GAS_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_LIGHTNING_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_PARALYZE_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_SLEEP_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_SLOW_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_WEAKEN_10: case IP_CONST_CASTSPELL_ANTIMAGIC_EDGE: { prop.AffinityPenaltyPrice = -1; break; } default: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } } break; } #endregion #region Damage Resistance case ITEM_PROPERTY_DAMAGE_RESISTANCE: { // Protection; no penalty. break; } #endregion #region Darkvision case ITEM_PROPERTY_DARKVISION: { // Discernment; no penalty. break; } #endregion #region Freedom of Movement case ITEM_PROPERTY_FREEDOM_OF_MOVEMENT: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } #endregion #region Immunities case ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS: { // Protection; no penalty. break; } #endregion #region Spell Immunities case ITEM_PROPERTY_IMMUNITY_SPECIFIC_SPELL: { // Protection; no penalty. break; } #endregion #region Light case ITEM_PROPERTY_LIGHT: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } #endregion #region Saving throws case ITEM_PROPERTY_SAVING_THROW_BONUS: case ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC: { // Protection; no penalty. break; } #endregion #region Skills case ITEM_PROPERTY_SKILL_BONUS: { switch (subtype) { case SKILL_APPRAISE: // discernment case SKILL_FORGERY: // discernment case SKILL_INTIMIDATE: // morale case SKILL_LISTEN: // discernment case SKILL_SEARCH: // discernment case SKILL_SENSE_MOTIVE: // discernment case SKILL_SPOT: // discernment case SKILL_SPELLCRAFT: // discernment { break; } default: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } } break; } #endregion #region Spell Resistance case ITEM_PROPERTY_SPELL_RESISTANCE: { // Protection; no penalty. break; } #endregion } break; } #endregion #region Belts case BASE_ITEM_BELT: { // Belts' only affinity is "physical improvment" -- it is the rationale // for everything argued as affinate. switch (type) { #region Ability Bonus case ITEM_PROPERTY_ABILITY_BONUS: { switch (subtype) { case IP_CONST_ABILITY_CON: case IP_CONST_ABILITY_STR: case IP_CONST_ABILITY_DEX: { break; } default: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } } break; } #endregion #region Bonus Feats case ITEM_PROPERTY_BONUS_FEAT: { prop.AffinityPenaltyPrice = -1; break; } #endregion #region Bonus Spell Slots case ITEM_PROPERTY_BONUS_SPELL_SLOT_OF_LEVEL_N: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } #endregion #region Spell Casting case ITEM_PROPERTY_CAST_SPELL: { switch (subtype) { case IP_CONST_CASTSPELL_ACTIVATE_ITEM: // no special price case IP_CONST_CASTSPELL_UNIQUE_POWER: case IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY: case IP_CONST_CASTSPELL_AID_3: case IP_CONST_CASTSPELL_BARKSKIN_12: case IP_CONST_CASTSPELL_BARKSKIN_3: case IP_CONST_CASTSPELL_BARKSKIN_6: case IP_CONST_CASTSPELL_BULLS_STRENGTH_10: case IP_CONST_CASTSPELL_BULLS_STRENGTH_15: case IP_CONST_CASTSPELL_BULLS_STRENGTH_3: case IP_CONST_CASTSPELL_CATS_GRACE_10: case IP_CONST_CASTSPELL_CATS_GRACE_15: case IP_CONST_CASTSPELL_CATS_GRACE_3: case IP_CONST_CASTSPELL_ENDURANCE_10: case IP_CONST_CASTSPELL_ENDURANCE_15: case IP_CONST_CASTSPELL_ENDURANCE_3: case IP_CONST_CASTSPELL_ENDURE_ELEMENTS_2: case IP_CONST_CASTSPELL_GREATER_BULLS_STRENGTH_11: case IP_CONST_CASTSPELL_GREATER_CATS_GRACE_11: case IP_CONST_CASTSPELL_GREATER_ENDURANCE_11: case IP_CONST_CASTSPELL_GREATER_MAGIC_FANG_9: case IP_CONST_CASTSPELL_GREATER_STONESKIN_11: case IP_CONST_CASTSPELL_IRON_BODY_15: case IP_CONST_CASTSPELL_IRON_BODY_20: case IP_CONST_CASTSPELL_MAGIC_FANG_5: case IP_CONST_CASTSPELL_NEUTRALIZE_POISON_5: case IP_CONST_CASTSPELL_REMOVE_BLINDNESS_DEAFNESS_5: case IP_CONST_CASTSPELL_REMOVE_DISEASE_5: case IP_CONST_CASTSPELL_STONESKIN_7: case IP_CONST_CASTSPELL_VIRTUE_1: { break; } case IP_CONST_CASTSPELL_SS_DEFENSIVE_EDGE: case IP_CONST_CASTSPELL_SS_DESPAIR_OF_THE_DIVIDED: case IP_CONST_CASTSPELL_SS_GREATER_RESTORATION: case IP_CONST_CASTSPELL_SS_GREATER_SHOUT: case IP_CONST_CASTSPELL_SS_PENETRATING_EDGE: case IP_CONST_CASTSPELL_SS_POLAR_RAY: case IP_CONST_CASTSPELL_SS_PREMONITION: case IP_CONST_CASTSPELL_SS_SPELL_MANTLE: case IP_CONST_CASTSPELL_SS_SPELLLIKE_ABILITIES: case IP_CONST_CASTSPELL_SS_SWORD_FORMS: case IP_CONST_CASTSPELL_SS_UNITY_OF_WILL: case IP_CONST_CASTSPELL_SS_VORPAL_EDGE: case IP_CONST_CASTSPELL_SPECIAL_ALCOHOL_BEER: case IP_CONST_CASTSPELL_SPECIAL_ALCOHOL_SPIRITS: case IP_CONST_CASTSPELL_SPECIAL_ALCOHOL_WINE: case IP_CONST_CASTSPELL_SPECIAL_HERB_BELLADONNA: case IP_CONST_CASTSPELL_SPECIAL_HERB_GARLIC: case IP_CONST_CASTSPELL_DRAGON_BREATH_ACID_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_COLD_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_FEAR_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_FIRE_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_GAS_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_LIGHTNING_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_PARALYZE_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_SLEEP_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_SLOW_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_WEAKEN_10: case IP_CONST_CASTSPELL_ANTIMAGIC_EDGE: { prop.AffinityPenaltyPrice = -1; break; } default: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } } break; } #endregion #region Damage Resistance case ITEM_PROPERTY_DAMAGE_RESISTANCE: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } #endregion #region Darkvision case ITEM_PROPERTY_DARKVISION: { prop.AffinityPenaltyPrice = -1; break; } #endregion #region Freedom of Movement case ITEM_PROPERTY_FREEDOM_OF_MOVEMENT: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } #endregion #region Immunities case ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS: { switch (subtype) { case IP_CONST_IMMUNITYMISC_DEATH_MAGIC: case IP_CONST_IMMUNITYMISC_DISEASE: case IP_CONST_IMMUNITYMISC_KNOCKDOWN: case IP_CONST_IMMUNITYMISC_LEVEL_ABIL_DRAIN: case IP_CONST_IMMUNITYMISC_PARALYSIS: case IP_CONST_IMMUNITYMISC_POISON: { break; } default: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } } break; } #endregion #region Spell Immunities case ITEM_PROPERTY_IMMUNITY_SPECIFIC_SPELL: { switch (subtype) { case IP_CONST_IMMUNITYSPELL_BLINDNESS_AND_DEAFNESS: case IP_CONST_IMMUNITYSPELL_CIRCLE_OF_DEATH: case IP_CONST_IMMUNITYSPELL_ENERVATION: case IP_CONST_IMMUNITYSPELL_FINGER_OF_DEATH: case IP_CONST_IMMUNITYSPELL_HARM: case IP_CONST_IMMUNITYSPELL_IMPLOSION: case IP_CONST_IMMUNITYSPELL_MASS_BLINDNESS_AND_DEAFNESS: case IP_CONST_IMMUNITYSPELL_PHANTASMAL_KILLER: case IP_CONST_IMMUNITYSPELL_POISON: case IP_CONST_IMMUNITYSPELL_POWER_WORD_KILL: case IP_CONST_IMMUNITYSPELL_POWER_WORD_STUN: case IP_CONST_IMMUNITYSPELL_RAY_OF_ENFEEBLEMENT: case IP_CONST_IMMUNITYSPELL_WAIL_OF_THE_BANSHEE: { break; } default: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } } break; } #endregion #region Light case ITEM_PROPERTY_LIGHT: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } #endregion #region Saving throws case ITEM_PROPERTY_SAVING_THROW_BONUS: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } case ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC: { if (subtype != IP_CONST_SAVEBASETYPE_FORTITUDE) { prop.AffinityPenaltyPrice = prop.Price / 2; } break; } #endregion #region Skills case ITEM_PROPERTY_SKILL_BONUS: { switch (subtype) { case SKILL_BALANCE: case SKILL_CLIMB: case SKILL_ESCAPE_ARTIST: case SKILL_JUMP: case SKILL_RIDE: case SKILL_SURVIVAL: case SKILL_SWIM: case SKILL_TUMBLE: { break; } default: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } } break; } #endregion #region Spell Resistance case ITEM_PROPERTY_SPELL_RESISTANCE: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } #endregion } break; } #endregion #region Boots case BASE_ITEM_BOOTS: { // Boots' only affinity is "movement" -- this is the argued trait // that makes everything here affinate. switch (type) { #region Ability Bonus case ITEM_PROPERTY_ABILITY_BONUS: { switch (subtype) { case IP_CONST_ABILITY_DEX: { break; } default: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } } break; } #endregion #region Bonus Feats case ITEM_PROPERTY_BONUS_FEAT: { prop.AffinityPenaltyPrice = -1; break; } #endregion #region Bonus Spell Slots case ITEM_PROPERTY_BONUS_SPELL_SLOT_OF_LEVEL_N: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } #endregion #region Spell Casting case ITEM_PROPERTY_CAST_SPELL: { switch (subtype) { case IP_CONST_CASTSPELL_ACTIVATE_ITEM: // no special price case IP_CONST_CASTSPELL_UNIQUE_POWER: case IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY: case IP_CONST_CASTSPELL_CATS_GRACE_10: case IP_CONST_CASTSPELL_CATS_GRACE_15: case IP_CONST_CASTSPELL_CATS_GRACE_3: case IP_CONST_CASTSPELL_EXPEDITIOUS_RETREAT_5: case IP_CONST_CASTSPELL_FREEDOM_OF_MOVEMENT_7: case IP_CONST_CASTSPELL_GREATER_CATS_GRACE_11: case IP_CONST_CASTSPELL_HASTE_10: case IP_CONST_CASTSPELL_HASTE_5: { break; } case IP_CONST_CASTSPELL_SS_DEFENSIVE_EDGE: case IP_CONST_CASTSPELL_SS_DESPAIR_OF_THE_DIVIDED: case IP_CONST_CASTSPELL_SS_GREATER_RESTORATION: case IP_CONST_CASTSPELL_SS_GREATER_SHOUT: case IP_CONST_CASTSPELL_SS_PENETRATING_EDGE: case IP_CONST_CASTSPELL_SS_POLAR_RAY: case IP_CONST_CASTSPELL_SS_PREMONITION: case IP_CONST_CASTSPELL_SS_SPELL_MANTLE: case IP_CONST_CASTSPELL_SS_SPELLLIKE_ABILITIES: case IP_CONST_CASTSPELL_SS_SWORD_FORMS: case IP_CONST_CASTSPELL_SS_UNITY_OF_WILL: case IP_CONST_CASTSPELL_SS_VORPAL_EDGE: case IP_CONST_CASTSPELL_SPECIAL_ALCOHOL_BEER: case IP_CONST_CASTSPELL_SPECIAL_ALCOHOL_SPIRITS: case IP_CONST_CASTSPELL_SPECIAL_ALCOHOL_WINE: case IP_CONST_CASTSPELL_SPECIAL_HERB_BELLADONNA: case IP_CONST_CASTSPELL_SPECIAL_HERB_GARLIC: case IP_CONST_CASTSPELL_DRAGON_BREATH_ACID_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_COLD_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_FEAR_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_FIRE_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_GAS_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_LIGHTNING_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_PARALYZE_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_SLEEP_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_SLOW_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_WEAKEN_10: case IP_CONST_CASTSPELL_ANTIMAGIC_EDGE: { prop.AffinityPenaltyPrice = -1; break; } default: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } } break; } #endregion #region Damage Resistance case ITEM_PROPERTY_DAMAGE_RESISTANCE: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } #endregion #region Darkvision case ITEM_PROPERTY_DARKVISION: { prop.AffinityPenaltyPrice = -1; break; } #endregion #region Freedom of Movement case ITEM_PROPERTY_FREEDOM_OF_MOVEMENT: { // Movement is affinate. break; } #endregion #region Immunities case ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS: { switch (subtype) { case IP_CONST_IMMUNITYMISC_KNOCKDOWN: case IP_CONST_IMMUNITYMISC_PARALYSIS: { break; } default: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } } break; } #endregion #region Spell Immunities case ITEM_PROPERTY_IMMUNITY_SPECIFIC_SPELL: { switch (subtype) { case IP_CONST_IMMUNITYSPELL_ENTANGLE: case IP_CONST_IMMUNITYSPELL_EVARDS_BLACK_TENTACLES: case IP_CONST_IMMUNITYSPELL_GREASE: case IP_CONST_IMMUNITYSPELL_HOLD_ANIMAL: case IP_CONST_IMMUNITYSPELL_HOLD_MONSTER: case IP_CONST_IMMUNITYSPELL_HOLD_PERSON: case IP_CONST_IMMUNITYSPELL_SLOW: case IP_CONST_IMMUNITYSPELL_WEB: { break; } default: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } } break; } #endregion #region Light case ITEM_PROPERTY_LIGHT: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } #endregion #region Saving throws case ITEM_PROPERTY_SAVING_THROW_BONUS: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } case ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC: { if (subtype != IP_CONST_SAVEBASETYPE_REFLEX) { prop.AffinityPenaltyPrice = prop.Price / 2; } break; } #endregion #region Skills case ITEM_PROPERTY_SKILL_BONUS: { switch (subtype) { case SKILL_BALANCE: case SKILL_CLIMB: case SKILL_ESCAPE_ARTIST: case SKILL_JUMP: case SKILL_MOVE_SILENTLY: case SKILL_PERFORM_DANCE: case SKILL_RIDE: case SKILL_SWIM: case SKILL_TUMBLE: { break; } default: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } } break; } #endregion #region Spell Resistance case ITEM_PROPERTY_SPELL_RESISTANCE: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } #endregion } break; } #endregion #region Cloaks case BASE_ITEM_CLOAK: { switch (type) { #region Ability Bonus case ITEM_PROPERTY_ABILITY_BONUS: { switch (subtype) { case IP_CONST_ABILITY_CHA: // transformation { break; } default: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } } break; } #endregion #region Bonus Feats case ITEM_PROPERTY_BONUS_FEAT: { prop.AffinityPenaltyPrice = -1; break; } #endregion #region Bonus Spell Slots case ITEM_PROPERTY_BONUS_SPELL_SLOT_OF_LEVEL_N: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } #endregion #region Spell Casting case ITEM_PROPERTY_CAST_SPELL: { switch (subtype) { case IP_CONST_CASTSPELL_ACTIVATE_ITEM: // no special price case IP_CONST_CASTSPELL_UNIQUE_POWER: case IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY: case IP_CONST_CASTSPELL_AID_3: // protection case IP_CONST_CASTSPELL_BARKSKIN_12: //protection case IP_CONST_CASTSPELL_BARKSKIN_3: case IP_CONST_CASTSPELL_BARKSKIN_6: case IP_CONST_CASTSPELL_CAMOFLAGE_5: // transformation case IP_CONST_CASTSPELL_DISPLACEMENT_9: // transformation case IP_CONST_CASTSPELL_DEATH_WARD_7: // protection case IP_CONST_CASTSPELL_DIVINE_SHIELD_5: // protection case IP_CONST_CASTSPELL_ELEMENTAL_SHIELD_12: // protection case IP_CONST_CASTSPELL_ELEMENTAL_SHIELD_7: case IP_CONST_CASTSPELL_ENDURE_ELEMENTS_2: // protection case IP_CONST_CASTSPELL_ENERGY_BUFFER_11: // protection case IP_CONST_CASTSPELL_ENERGY_BUFFER_15: case IP_CONST_CASTSPELL_ENERGY_BUFFER_20: case IP_CONST_CASTSPELL_ENTROPIC_SHIELD_5: // protection case IP_CONST_CASTSPELL_GHOSTLY_VISAGE_15: // transformation case IP_CONST_CASTSPELL_GHOSTLY_VISAGE_3: case IP_CONST_CASTSPELL_GHOSTLY_VISAGE_9: case IP_CONST_CASTSPELL_GLOBE_OF_INVULNERABILITY_11: // protection case IP_CONST_CASTSPELL_IMPROVED_INVISIBILITY_7: // transformation case IP_CONST_CASTSPELL_IMPROVED_MAGE_ARMOR_10: // protection case IP_CONST_CASTSPELL_INVISIBILITY_3: //transformation case IP_CONST_CASTSPELL_INVISIBILITY_SPHERE_5: // transformation case IP_CONST_CASTSPELL_IRON_BODY_15: // transformation case IP_CONST_CASTSPELL_IRON_BODY_20: case IP_CONST_CASTSPELL_LESSER_GLOBE_OF_INVULNERABILITY_15: // protection case IP_CONST_CASTSPELL_LESSER_GLOBE_OF_INVULNERABILITY_7: case IP_CONST_CASTSPELL_LESSER_SPELL_MANTLE_9: // protection case IP_CONST_CASTSPELL_MAGIC_CIRCLE_AGAINST_ALIGNMENT_5: // protection case IP_CONST_CASTSPELL_MASS_CAMOFLAGE_13: // transformation case IP_CONST_CASTSPELL_MIND_BLANK_15: // protection case IP_CONST_CASTSPELL_POLYMORPH_SELF_7: // transformation case IP_CONST_CASTSPELL_PROTECTION_FROM_ALIGNMENT_2: // protection case IP_CONST_CASTSPELL_PROTECTION_FROM_ALIGNMENT_5: case IP_CONST_CASTSPELL_PROTECTION_FROM_ELEMENTS_10: // protection case IP_CONST_CASTSPELL_PROTECTION_FROM_ELEMENTS_3: case IP_CONST_CASTSPELL_PROTECTION_FROM_EVIL_1: // protection case IP_CONST_CASTSPELL_PROTECTION_FROM_SPELLS_13: // protection case IP_CONST_CASTSPELL_PROTECTION_FROM_SPELLS_20: case IP_CONST_CASTSPELL_RESIST_ELEMENTS_10: // protection case IP_CONST_CASTSPELL_RESIST_ELEMENTS_3: case IP_CONST_CASTSPELL_RESISTANCE_2: // protection case IP_CONST_CASTSPELL_RESISTANCE_5: case IP_CONST_CASTSPELL_SANCTUARY_2: // protection case IP_CONST_CASTSPELL_SHADOW_SHIELD_13: // protection case IP_CONST_CASTSPELL_SHAPECHANGE_17: // transformation case IP_CONST_CASTSPELL_SHIELD_5: // protection case IP_CONST_CASTSPELL_SHIELD_OF_FAITH_5: // protection case IP_CONST_CASTSPELL_SPELL_MANTLE_13: // protection case IP_CONST_CASTSPELL_SPELL_RESISTANCE_15: // protection case IP_CONST_CASTSPELL_SPELL_RESISTANCE_9: // protection case IP_CONST_CASTSPELL_STONE_TO_FLESH_5: // transformation case IP_CONST_CASTSPELL_STONESKIN_7: // protection & transformation case IP_CONST_CASTSPELL_TENSERS_TRANSFORMATION_11: // transformation { break; } case IP_CONST_CASTSPELL_SS_DEFENSIVE_EDGE: case IP_CONST_CASTSPELL_SS_DESPAIR_OF_THE_DIVIDED: case IP_CONST_CASTSPELL_SS_GREATER_RESTORATION: case IP_CONST_CASTSPELL_SS_GREATER_SHOUT: case IP_CONST_CASTSPELL_SS_PENETRATING_EDGE: case IP_CONST_CASTSPELL_SS_POLAR_RAY: case IP_CONST_CASTSPELL_SS_PREMONITION: case IP_CONST_CASTSPELL_SS_SPELL_MANTLE: case IP_CONST_CASTSPELL_SS_SPELLLIKE_ABILITIES: case IP_CONST_CASTSPELL_SS_SWORD_FORMS: case IP_CONST_CASTSPELL_SS_UNITY_OF_WILL: case IP_CONST_CASTSPELL_SS_VORPAL_EDGE: case IP_CONST_CASTSPELL_SPECIAL_ALCOHOL_BEER: case IP_CONST_CASTSPELL_SPECIAL_ALCOHOL_SPIRITS: case IP_CONST_CASTSPELL_SPECIAL_ALCOHOL_WINE: case IP_CONST_CASTSPELL_SPECIAL_HERB_BELLADONNA: case IP_CONST_CASTSPELL_SPECIAL_HERB_GARLIC: case IP_CONST_CASTSPELL_DRAGON_BREATH_ACID_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_COLD_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_FEAR_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_FIRE_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_GAS_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_LIGHTNING_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_PARALYZE_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_SLEEP_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_SLOW_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_WEAKEN_10: case IP_CONST_CASTSPELL_ANTIMAGIC_EDGE: { prop.AffinityPenaltyPrice = -1; break; } default: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } } break; } #endregion #region Damage Resistance case ITEM_PROPERTY_DAMAGE_RESISTANCE: { // Protection; no penalty. break; } #endregion #region Darkvision case ITEM_PROPERTY_DARKVISION: { prop.AffinityPenaltyPrice = -1; break; } #endregion #region Freedom of Movement case ITEM_PROPERTY_FREEDOM_OF_MOVEMENT: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } #endregion #region Immunities case ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS: { // Protection; no penalty. break; } #endregion #region Spell Immunities case ITEM_PROPERTY_IMMUNITY_SPECIFIC_SPELL: { // Protection; no penalty. break; } #endregion #region Light case ITEM_PROPERTY_LIGHT: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } #endregion #region Saving throws case ITEM_PROPERTY_SAVING_THROW_BONUS: case ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC: { // Protection; no penalty. break; } #endregion #region Skills case ITEM_PROPERTY_SKILL_BONUS: { switch (subtype) { case SKILL_HIDE: { break; } default: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } } break; } #endregion #region Spell Resistance case ITEM_PROPERTY_SPELL_RESISTANCE: { // Protection; no penalty. break; } #endregion } break; } #endregion #region Gloves, Gauntlets, and Bracers case BASE_ITEM_GLOVES: case BASE_ITEM_BRACER: { switch (type) { #region Ability Bonus case ITEM_PROPERTY_ABILITY_BONUS: { switch (subtype) { case IP_CONST_ABILITY_STR: // destructive power case IP_CONST_ABILITY_DEX: // quickness { break; } default: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } } break; } #endregion #region Bonus Feats case ITEM_PROPERTY_BONUS_FEAT: { prop.AffinityPenaltyPrice = -1; break; } #endregion #region Bonus Spell Slots case ITEM_PROPERTY_BONUS_SPELL_SLOT_OF_LEVEL_N: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } #endregion #region Spell Casting case ITEM_PROPERTY_CAST_SPELL: { switch (subtype) { case IP_CONST_CASTSPELL_ACTIVATE_ITEM: // no special price case IP_CONST_CASTSPELL_UNIQUE_POWER: case IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY: case IP_CONST_CASTSPELL_AID_3: // allies case IP_CONST_CASTSPELL_ANIMATE_DEAD_10: // allies case IP_CONST_CASTSPELL_ANIMATE_DEAD_15: case IP_CONST_CASTSPELL_ANIMATE_DEAD_5: case IP_CONST_CASTSPELL_CHARM_MONSTER_10: // allies case IP_CONST_CASTSPELL_CHARM_MONSTER_5: case IP_CONST_CASTSPELL_CHARM_PERSON_10: case IP_CONST_CASTSPELL_CHARM_PERSON_2: case IP_CONST_CASTSPELL_CHARM_PERSON_OR_ANIMAL_10: case IP_CONST_CASTSPELL_CHARM_PERSON_OR_ANIMAL_3: case IP_CONST_CASTSPELL_CREATE_GREATER_UNDEAD_15: // allies case IP_CONST_CASTSPELL_CREATE_GREATER_UNDEAD_16: case IP_CONST_CASTSPELL_CREATE_GREATER_UNDEAD_18: case IP_CONST_CASTSPELL_CREATE_UNDEAD_11: case IP_CONST_CASTSPELL_CREATE_UNDEAD_14: case IP_CONST_CASTSPELL_CREATE_UNDEAD_16: case IP_CONST_CASTSPELL_CURE_CRITICAL_WOUNDS_12: // allies case IP_CONST_CASTSPELL_CURE_CRITICAL_WOUNDS_15: case IP_CONST_CASTSPELL_CURE_CRITICAL_WOUNDS_7: case IP_CONST_CASTSPELL_CURE_LIGHT_WOUNDS_2: case IP_CONST_CASTSPELL_CURE_LIGHT_WOUNDS_5: case IP_CONST_CASTSPELL_CURE_MINOR_WOUNDS_1: case IP_CONST_CASTSPELL_CURE_MODERATE_WOUNDS_10: case IP_CONST_CASTSPELL_CURE_MODERATE_WOUNDS_3: case IP_CONST_CASTSPELL_CURE_MODERATE_WOUNDS_6: case IP_CONST_CASTSPELL_CURE_SERIOUS_WOUNDS_10: case IP_CONST_CASTSPELL_CURE_SERIOUS_WOUNDS_5: case IP_CONST_CASTSPELL_DESTRUCTION_13: // destructive power case IP_CONST_CASTSPELL_EXPEDITIOUS_RETREAT_5: // quickness case IP_CONST_CASTSPELL_HASTE_10: // quickness case IP_CONST_CASTSPELL_HASTE_5: case IP_CONST_CASTSPELL_MASS_HEAL_15: // allies case IP_CONST_CASTSPELL_MASS_CHARM_15: case IP_CONST_CASTSPELL_MASS_HASTE_11: // quickness case IP_CONST_CASTSPELL_NEUTRALIZE_POISON_5: // allies case IP_CONST_CASTSPELL_REMOVE_BLINDNESS_DEAFNESS_5: case IP_CONST_CASTSPELL_REMOVE_CURSE_5: case IP_CONST_CASTSPELL_REMOVE_DISEASE_5: case IP_CONST_CASTSPELL_REMOVE_FEAR_2: case IP_CONST_CASTSPELL_REMOVE_PARALYSIS_3: case IP_CONST_CASTSPELL_RESTORATION_7: case IP_CONST_CASTSPELL_SUMMON_CREATURE_I_2: // allies case IP_CONST_CASTSPELL_SUMMON_CREATURE_I_5: case IP_CONST_CASTSPELL_SUMMON_CREATURE_II_3: case IP_CONST_CASTSPELL_SUMMON_CREATURE_III_5: case IP_CONST_CASTSPELL_SUMMON_CREATURE_IV_7: case IP_CONST_CASTSPELL_SUMMON_CREATURE_IX_17: case IP_CONST_CASTSPELL_SUMMON_CREATURE_V_9: case IP_CONST_CASTSPELL_SUMMON_CREATURE_VI_11: case IP_CONST_CASTSPELL_SUMMON_CREATURE_VII_13: case IP_CONST_CASTSPELL_SUMMON_CREATURE_VIII_15: { break; } case IP_CONST_CASTSPELL_SS_DEFENSIVE_EDGE: case IP_CONST_CASTSPELL_SS_DESPAIR_OF_THE_DIVIDED: case IP_CONST_CASTSPELL_SS_GREATER_RESTORATION: case IP_CONST_CASTSPELL_SS_GREATER_SHOUT: case IP_CONST_CASTSPELL_SS_PENETRATING_EDGE: case IP_CONST_CASTSPELL_SS_POLAR_RAY: case IP_CONST_CASTSPELL_SS_PREMONITION: case IP_CONST_CASTSPELL_SS_SPELL_MANTLE: case IP_CONST_CASTSPELL_SS_SPELLLIKE_ABILITIES: case IP_CONST_CASTSPELL_SS_SWORD_FORMS: case IP_CONST_CASTSPELL_SS_UNITY_OF_WILL: case IP_CONST_CASTSPELL_SS_VORPAL_EDGE: case IP_CONST_CASTSPELL_SPECIAL_ALCOHOL_BEER: case IP_CONST_CASTSPELL_SPECIAL_ALCOHOL_SPIRITS: case IP_CONST_CASTSPELL_SPECIAL_ALCOHOL_WINE: case IP_CONST_CASTSPELL_SPECIAL_HERB_BELLADONNA: case IP_CONST_CASTSPELL_SPECIAL_HERB_GARLIC: case IP_CONST_CASTSPELL_DRAGON_BREATH_ACID_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_COLD_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_FEAR_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_FIRE_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_GAS_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_LIGHTNING_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_PARALYZE_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_SLEEP_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_SLOW_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_WEAKEN_10: case IP_CONST_CASTSPELL_ANTIMAGIC_EDGE: { prop.AffinityPenaltyPrice = -1; break; } default: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } } break; } #endregion #region Damage Resistance case ITEM_PROPERTY_DAMAGE_RESISTANCE: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } #endregion #region Darkvision case ITEM_PROPERTY_DARKVISION: { prop.AffinityPenaltyPrice = -1; break; } #endregion #region Freedom of Movement case ITEM_PROPERTY_FREEDOM_OF_MOVEMENT: { // Quickness break; } #endregion #region Immunities case ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } #endregion #region Spell Immunities case ITEM_PROPERTY_IMMUNITY_SPECIFIC_SPELL: { switch (subtype) { case IP_CONST_IMMUNITYSPELL_SLOW: { break; } default: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } } break; } #endregion #region Light case ITEM_PROPERTY_LIGHT: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } #endregion #region Saving throws case ITEM_PROPERTY_SAVING_THROW_BONUS: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } case ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC: { if (subtype != IP_CONST_SAVEBASETYPE_REFLEX) { prop.AffinityPenaltyPrice = prop.Price / 2; } break; } #endregion #region Skills case ITEM_PROPERTY_SKILL_BONUS: { switch (subtype) { case SKILL_HANDLE_ANIMAL: // allies case SKILL_HEAL: // allies case SKILL_PARRY: // combat case SKILL_RIDE: // allies { break; } default: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } } break; } #endregion #region Spell Resistance case ITEM_PROPERTY_SPELL_RESISTANCE: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } #endregion } break; } #endregion #region Helmets case BASE_ITEM_HELMET: { switch (type) { #region Ability Bonus case ITEM_PROPERTY_ABILITY_BONUS: { switch (subtype) { case IP_CONST_ABILITY_INT: // mental improvement case IP_CONST_ABILITY_WIS: case IP_CONST_ABILITY_CHA: { break; } default: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } } break; } #endregion #region Bonus Feats case ITEM_PROPERTY_BONUS_FEAT: { switch (subtype) { case IP_CONST_FEAT_COMBAT_CASTING: { break; } default: { prop.AffinityPenaltyPrice = -1; break; } } break; } #endregion #region Bonus Spell Slots case ITEM_PROPERTY_BONUS_SPELL_SLOT_OF_LEVEL_N: { // mental improvement. Claimed affinate. break; } #endregion #region Spell Casting case ITEM_PROPERTY_CAST_SPELL: { switch (subtype) { case IP_CONST_CASTSPELL_ACTIVATE_ITEM: // no special price case IP_CONST_CASTSPELL_UNIQUE_POWER: case IP_CONST_CASTSPELL_UNIQUE_POWER_SELF_ONLY: case IP_CONST_CASTSPELL_CHARM_MONSTER_10: // interaction case IP_CONST_CASTSPELL_CHARM_MONSTER_5: case IP_CONST_CASTSPELL_CHARM_PERSON_10: case IP_CONST_CASTSPELL_CHARM_PERSON_2: case IP_CONST_CASTSPELL_CHARM_PERSON_OR_ANIMAL_10: case IP_CONST_CASTSPELL_CHARM_PERSON_OR_ANIMAL_3: case IP_CONST_CASTSPELL_CLAIRAUDIENCE_CLAIRVOYANCE_10: // vision case IP_CONST_CASTSPELL_CLAIRAUDIENCE_CLAIRVOYANCE_15: case IP_CONST_CASTSPELL_CLAIRAUDIENCE_CLAIRVOYANCE_5: case IP_CONST_CASTSPELL_CONFUSION_10: case IP_CONST_CASTSPELL_CONFUSION_5: case IP_CONST_CASTSPELL_DELAYED_BLAST_FIREBALL_13: case IP_CONST_CASTSPELL_DELAYED_BLAST_FIREBALL_15: case IP_CONST_CASTSPELL_DELAYED_BLAST_FIREBALL_20: case IP_CONST_CASTSPELL_DOMINATE_ANIMAL_5: case IP_CONST_CASTSPELL_DOMINATE_MONSTER_17: case IP_CONST_CASTSPELL_DOMINATE_PERSON_7: case IP_CONST_CASTSPELL_EAGLE_SPLEDOR_10: case IP_CONST_CASTSPELL_EAGLE_SPLEDOR_15: case IP_CONST_CASTSPELL_EAGLE_SPLEDOR_3: case IP_CONST_CASTSPELL_FEAR_5: case IP_CONST_CASTSPELL_FEEBLEMIND_9: case IP_CONST_CASTSPELL_FIND_TRAPS_3: case IP_CONST_CASTSPELL_FIREBALL_10: case IP_CONST_CASTSPELL_FIREBALL_5: case IP_CONST_CASTSPELL_FIREBRAND_15: case IP_CONST_CASTSPELL_FLAME_ARROW_12: case IP_CONST_CASTSPELL_FLAME_ARROW_18: case IP_CONST_CASTSPELL_FLAME_ARROW_5: case IP_CONST_CASTSPELL_FOXS_CUNNING_10: case IP_CONST_CASTSPELL_FOXS_CUNNING_15: case IP_CONST_CASTSPELL_FOXS_CUNNING_3: case IP_CONST_CASTSPELL_IDENTIFY_3: case IP_CONST_CASTSPELL_ISAACS_GREATER_MISSILE_STORM_15: case IP_CONST_CASTSPELL_ISAACS_LESSER_MISSILE_STORM_13: case IP_CONST_CASTSPELL_LEGEND_LORE_5: case IP_CONST_CASTSPELL_LESSER_MIND_BLANK_9: case IP_CONST_CASTSPELL_LIGHTNING_BOLT_10: case IP_CONST_CASTSPELL_LIGHTNING_BOLT_5: case IP_CONST_CASTSPELL_MAGIC_MISSILE_3: case IP_CONST_CASTSPELL_MAGIC_MISSILE_5: case IP_CONST_CASTSPELL_MAGIC_MISSILE_9: case IP_CONST_CASTSPELL_MELFS_ACID_ARROW_3: case IP_CONST_CASTSPELL_MELFS_ACID_ARROW_6: case IP_CONST_CASTSPELL_MELFS_ACID_ARROW_9: case IP_CONST_CASTSPELL_MIND_BLANK_15: case IP_CONST_CASTSPELL_MIND_FOG_9: case IP_CONST_CASTSPELL_OWLS_INSIGHT_15: case IP_CONST_CASTSPELL_OWLS_WISDOM_10: case IP_CONST_CASTSPELL_OWLS_WISDOM_15: case IP_CONST_CASTSPELL_OWLS_WISDOM_3: case IP_CONST_CASTSPELL_PHANTASMAL_KILLER_7: case IP_CONST_CASTSPELL_RAY_OF_ENFEEBLEMENT_2: case IP_CONST_CASTSPELL_RAY_OF_FROST_1: case IP_CONST_CASTSPELL_REMOVE_BLINDNESS_DEAFNESS_5: case IP_CONST_CASTSPELL_SCARE_2: case IP_CONST_CASTSPELL_SCINTILLATING_SPHERE_5: case IP_CONST_CASTSPELL_SEARING_LIGHT_5: case IP_CONST_CASTSPELL_SEE_INVISIBILITY_3: case IP_CONST_CASTSPELL_TRUE_SEEING_9: case IP_CONST_CASTSPELL_TRUE_STRIKE_5: { break; } case IP_CONST_CASTSPELL_SS_DEFENSIVE_EDGE: case IP_CONST_CASTSPELL_SS_DESPAIR_OF_THE_DIVIDED: case IP_CONST_CASTSPELL_SS_GREATER_RESTORATION: case IP_CONST_CASTSPELL_SS_GREATER_SHOUT: case IP_CONST_CASTSPELL_SS_PENETRATING_EDGE: case IP_CONST_CASTSPELL_SS_POLAR_RAY: case IP_CONST_CASTSPELL_SS_PREMONITION: case IP_CONST_CASTSPELL_SS_SPELL_MANTLE: case IP_CONST_CASTSPELL_SS_SPELLLIKE_ABILITIES: case IP_CONST_CASTSPELL_SS_SWORD_FORMS: case IP_CONST_CASTSPELL_SS_UNITY_OF_WILL: case IP_CONST_CASTSPELL_SS_VORPAL_EDGE: case IP_CONST_CASTSPELL_SPECIAL_ALCOHOL_BEER: case IP_CONST_CASTSPELL_SPECIAL_ALCOHOL_SPIRITS: case IP_CONST_CASTSPELL_SPECIAL_ALCOHOL_WINE: case IP_CONST_CASTSPELL_SPECIAL_HERB_BELLADONNA: case IP_CONST_CASTSPELL_SPECIAL_HERB_GARLIC: case IP_CONST_CASTSPELL_DRAGON_BREATH_ACID_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_COLD_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_FEAR_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_FIRE_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_GAS_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_LIGHTNING_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_PARALYZE_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_SLEEP_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_SLOW_10: case IP_CONST_CASTSPELL_DRAGON_BREATH_WEAKEN_10: case IP_CONST_CASTSPELL_ANTIMAGIC_EDGE: { prop.AffinityPenaltyPrice = -1; break; } default: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } } break; } #endregion #region Damage Resistance case ITEM_PROPERTY_DAMAGE_RESISTANCE: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } #endregion #region Darkvision case ITEM_PROPERTY_DARKVISION: { // Vision break; } #endregion #region Freedom of Movement case ITEM_PROPERTY_FREEDOM_OF_MOVEMENT: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } #endregion #region Immunities case ITEM_PROPERTY_IMMUNITY_MISCELLANEOUS: { switch(subtype) { case IP_CONST_IMMUNITYMISC_FEAR: { break; } default: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } } break; } #endregion #region Spell Immunities case ITEM_PROPERTY_IMMUNITY_SPECIFIC_SPELL: { switch (subtype) { case IP_CONST_IMMUNITYSPELL_BLINDNESS_AND_DEAFNESS: case IP_CONST_IMMUNITYSPELL_CAUSE_FEAR: case IP_CONST_IMMUNITYSPELL_CHARM_MONSTER: case IP_CONST_IMMUNITYSPELL_CHARM_PERSON: case IP_CONST_IMMUNITYSPELL_CHARM_PERSON_OR_ANIMAL: case IP_CONST_IMMUNITYSPELL_CONFUSION: case IP_CONST_IMMUNITYSPELL_DAZE: case IP_CONST_IMMUNITYSPELL_DOMINATE_ANIMAL: case IP_CONST_IMMUNITYSPELL_DOMINATE_MONSTER: case IP_CONST_IMMUNITYSPELL_DOMINATE_PERSON: case IP_CONST_IMMUNITYSPELL_FEAR: case IP_CONST_IMMUNITYSPELL_FEEBLEMIND: case IP_CONST_IMMUNITYSPELL_HOLD_ANIMAL: case IP_CONST_IMMUNITYSPELL_HOLD_MONSTER: case IP_CONST_IMMUNITYSPELL_HOLD_PERSON: case IP_CONST_IMMUNITYSPELL_MASS_BLINDNESS_AND_DEAFNESS: case IP_CONST_IMMUNITYSPELL_MASS_CHARM: case IP_CONST_IMMUNITYSPELL_MIND_FOG: case IP_CONST_IMMUNITYSPELL_PHANTASMAL_KILLER: case IP_CONST_IMMUNITYSPELL_POWER_WORD_STUN: case IP_CONST_IMMUNITYSPELL_PRISMATIC_SPRAY: case IP_CONST_IMMUNITYSPELL_SLEEP: case IP_CONST_IMMUNITYSPELL_WEIRD: { break; } default: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } } break; } #endregion #region Light case ITEM_PROPERTY_LIGHT: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } #endregion #region Saving throws case ITEM_PROPERTY_SAVING_THROW_BONUS: { if (subtype != IP_CONST_SAVEVS_FEAR && subtype != IP_CONST_SAVEVS_MINDAFFECTING) { prop.AffinityPenaltyPrice = prop.Price / 2; } break; } case ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC: { if (subtype != IP_CONST_SAVEBASETYPE_WILL) { prop.AffinityPenaltyPrice = prop.Price / 2; } break; } #endregion #region Skills case ITEM_PROPERTY_SKILL_BONUS: { switch (subtype) { case SKILL_APPRAISE: // vision case SKILL_BLUFF: // interaction case SKILL_CONCENTRATION: // mental improvement case SKILL_DECIPHER_SCRIPT: // mental case SKILL_DIPLOMACY: // interaction case SKILL_DISGUISE: // interaction case SKILL_FORGERY: // vision case SKILL_GATHER_INFO: // interaction case SKILL_HANDLE_ANIMAL: // interaction case SKILL_INTIMIDATE: // interaction case SKILL_KNOW_ARCANA: // mental case SKILL_KNOW_DUNGEON: case SKILL_KNOW_ENGINEERING: case SKILL_KNOW_GEOPGRAPHY: case SKILL_KNOW_HISTORY: case SKILL_KNOW_LOCAL: case SKILL_KNOW_NATURE: case SKILL_KNOW_NOBILITY: case SKILL_KNOW_PLANES: case SKILL_KNOW_RELIGION: case SKILL_PERFORM: // interaction case SKILL_PERFORM_ACT: case SKILL_PERFORM_COMEDY: case SKILL_PERFORM_KEYBOARDS: case SKILL_PERFORM_ORATORY: case SKILL_PERFORM_PERCUSSION: case SKILL_PERFORM_SING: case SKILL_PERFORM_STRING: case SKILL_PERFORM_WIND: case SKILL_SEARCH: // vision case SKILL_SENSE_MOTIVE: // interaction case SKILL_SPELLCRAFT: // mental case SKILL_SPOT: // vision case SKILL_USE_MAGIC_DEVICE: // mental { break; } default: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } } break; } #endregion #region Spell Resistance case ITEM_PROPERTY_SPELL_RESISTANCE: { prop.AffinityPenaltyPrice = prop.Price / 2; break; } #endregion } break; } #endregion #region Misc default: { switch (type) { case ITEM_PROPERTY_ENHANCED_CONTAINER_REDUCED_WEIGHT: prop.AffinityPenaltyPrice = 0; break; default: // No-slot items always have a 100% affinity penalty. prop.AffinityPenaltyPrice = prop.Price; break; } break; } #endregion } }