ACR_Items.Pricing.GetAffinityAdjustedValue C# (CSharp) Метод

GetAffinityAdjustedValue() приватный статический Метод

private static GetAffinityAdjustedValue ( int itemType, PricedItemProperty prop, int type, int subtype, int costTableValue ) : void
itemType int
prop PricedItemProperty
type int
subtype int
costTableValue int
Результат void
        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
            }
        }
    }