Ejemplo n.º 1
0
        private static void SetPersonalityProperties(CLRScriptBase script, uint armor, Generation.Theme theme, int baseEnhancement, ref double effectivePlusRemaining, ref double currentEffectivePlus)
        {
            switch (theme)
            {
            case Generation.Theme.Acid:
            case Generation.Theme.Cold:
            case Generation.Theme.Fire:
            case Generation.Theme.Electricity:
            case Generation.Theme.Sound:
            {
                if (effectivePlusRemaining >= (1.0 / 3.0))
                {
                    int vsElementalAC = 0;
                    if (effectivePlusRemaining >= (4.0 / 3.0))
                    {
                        vsElementalAC = baseEnhancement + 4;
                    }
                    else if (effectivePlusRemaining >= 1.0)
                    {
                        vsElementalAC = baseEnhancement + 3;
                    }
                    else if (effectivePlusRemaining >= (2.0 / 3.0))
                    {
                        vsElementalAC = baseEnhancement + 2;
                    }
                    else
                    {
                        vsElementalAC = baseEnhancement + 1;
                    }
                    if (vsElementalAC > 5)
                    {
                        vsElementalAC = 5;
                    }
                    if (vsElementalAC > baseEnhancement)
                    {
                        script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_ELEMENTAL, vsElementalAC), armor, 0.0f);
                        script.SetFirstName(armor, String.Format("{0} of Elementalwarding", script.GetName(armor)));
                        effectivePlusRemaining -= ((double)(vsElementalAC - baseEnhancement)) / 3.0;
                        currentEffectivePlus   += ((double)(vsElementalAC - baseEnhancement)) / 3.0;
                        return;
                    }
                }
                return;
            }

            case Generation.Theme.ConstructSlaying:
            {
                if (effectivePlusRemaining >= (1.0 / 3.0))
                {
                    int vsConstructAC = 0;
                    if (effectivePlusRemaining >= (4.0 / 3.0))
                    {
                        vsConstructAC = baseEnhancement + 4;
                    }
                    else if (effectivePlusRemaining >= 1.0)
                    {
                        vsConstructAC = baseEnhancement + 3;
                    }
                    else if (effectivePlusRemaining >= (2.0 / 3.0))
                    {
                        vsConstructAC = baseEnhancement + 2;
                    }
                    else
                    {
                        vsConstructAC = baseEnhancement + 1;
                    }
                    if (vsConstructAC > 5)
                    {
                        vsConstructAC = 5;
                    }
                    if (vsConstructAC > baseEnhancement)
                    {
                        script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_CONSTRUCT, vsConstructAC), armor, 0.0f);
                        script.SetFirstName(armor, String.Format("{0} of Golemwarding", script.GetName(armor)));
                        effectivePlusRemaining -= ((double)(vsConstructAC - baseEnhancement)) / 3.0;
                        currentEffectivePlus   += ((double)(vsConstructAC - baseEnhancement)) / 3.0;
                        return;
                    }
                }
                return;
            }

            case Generation.Theme.DemonSlaying:
            case Generation.Theme.DevilSlaying:
            {
                if (effectivePlusRemaining >= (1.0 / 3.0))
                {
                    int vsOutsiderAC = 0;
                    if (effectivePlusRemaining >= (4.0 / 3.0))
                    {
                        vsOutsiderAC = baseEnhancement + 4;
                    }
                    else if (effectivePlusRemaining >= 1.0)
                    {
                        vsOutsiderAC = baseEnhancement + 3;
                    }
                    else if (effectivePlusRemaining >= (2.0 / 3.0))
                    {
                        vsOutsiderAC = baseEnhancement + 2;
                    }
                    else
                    {
                        vsOutsiderAC = baseEnhancement + 1;
                    }
                    if (vsOutsiderAC > 5)
                    {
                        vsOutsiderAC = 5;
                    }
                    if (vsOutsiderAC > baseEnhancement)
                    {
                        script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_OUTSIDER, vsOutsiderAC), armor, 0.0f);
                        script.SetFirstName(armor, String.Format("{0} of Fiendwarding", script.GetName(armor)));
                        effectivePlusRemaining -= ((double)(vsOutsiderAC - baseEnhancement)) / 3.0;
                        currentEffectivePlus   += ((double)(vsOutsiderAC - baseEnhancement)) / 3.0;
                        return;
                    }
                }
                return;
            }

            case Generation.Theme.DragonSlaying:
            {
                if (effectivePlusRemaining >= (1.0 / 3.0))
                {
                    int vsDragonAC = 0;
                    if (effectivePlusRemaining >= (4.0 / 3.0))
                    {
                        vsDragonAC = baseEnhancement + 4;
                    }
                    else if (effectivePlusRemaining >= 1.0)
                    {
                        vsDragonAC = baseEnhancement + 3;
                    }
                    else if (effectivePlusRemaining >= (2.0 / 3.0))
                    {
                        vsDragonAC = baseEnhancement + 2;
                    }
                    else
                    {
                        vsDragonAC = baseEnhancement + 1;
                    }
                    if (vsDragonAC > 5)
                    {
                        vsDragonAC = 5;
                    }
                    if (vsDragonAC > baseEnhancement)
                    {
                        script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_DRAGON, vsDragonAC), armor, 0.0f);
                        script.SetFirstName(armor, String.Format("{0} of Dragonwarding", script.GetName(armor)));
                        effectivePlusRemaining -= ((double)(vsDragonAC - baseEnhancement)) / 3.0;
                        currentEffectivePlus   += ((double)(vsDragonAC - baseEnhancement)) / 3.0;
                        return;
                    }
                }
                return;
            }

            case Generation.Theme.FeySlaying:
            {
                if (effectivePlusRemaining >= (1.0 / 3.0))
                {
                    int vsFeyAC = 0;
                    if (effectivePlusRemaining >= (4.0 / 3.0))
                    {
                        vsFeyAC = baseEnhancement + 4;
                    }
                    else if (effectivePlusRemaining >= 1.0)
                    {
                        vsFeyAC = baseEnhancement + 3;
                    }
                    else if (effectivePlusRemaining >= (2.0 / 3.0))
                    {
                        vsFeyAC = baseEnhancement + 2;
                    }
                    else
                    {
                        vsFeyAC = baseEnhancement + 1;
                    }
                    if (vsFeyAC > 5)
                    {
                        vsFeyAC = 5;
                    }
                    if (vsFeyAC > baseEnhancement)
                    {
                        script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_FEY, vsFeyAC), armor, 0.0f);
                        script.SetFirstName(armor, String.Format("{0} of Feywarding", script.GetName(armor)));
                        effectivePlusRemaining -= ((double)(vsFeyAC - baseEnhancement)) / 3.0;
                        currentEffectivePlus   += ((double)(vsFeyAC - baseEnhancement)) / 3.0;
                        return;
                    }
                }
                return;
            }

            case Generation.Theme.GiantSlaying:
            {
                if (effectivePlusRemaining >= (1.0 / 3.0))
                {
                    int vsGiantAC = 0;
                    if (effectivePlusRemaining >= (4.0 / 3.0))
                    {
                        vsGiantAC = baseEnhancement + 4;
                    }
                    else if (effectivePlusRemaining >= 1.0)
                    {
                        vsGiantAC = baseEnhancement + 3;
                    }
                    else if (effectivePlusRemaining >= (2.0 / 3.0))
                    {
                        vsGiantAC = baseEnhancement + 2;
                    }
                    else
                    {
                        vsGiantAC = baseEnhancement + 1;
                    }
                    if (vsGiantAC > 5)
                    {
                        vsGiantAC = 5;
                    }
                    if (vsGiantAC > baseEnhancement)
                    {
                        script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_GIANT, vsGiantAC), armor, 0.0f);
                        script.SetFirstName(armor, String.Format("{0} of Giantwarding", script.GetName(armor)));
                        effectivePlusRemaining -= ((double)(vsGiantAC - baseEnhancement)) / 3.0;
                        currentEffectivePlus   += ((double)(vsGiantAC - baseEnhancement)) / 3.0;
                        return;
                    }
                }
                return;
            }

            case Generation.Theme.Holy:
            {
                if (effectivePlusRemaining >= 0.5)
                {
                    int vsEvilAC = 0;
                    if (effectivePlusRemaining >= 2.0)
                    {
                        vsEvilAC = baseEnhancement + 4;
                    }
                    else if (effectivePlusRemaining >= 1.5)
                    {
                        vsEvilAC = baseEnhancement + 3;
                    }
                    else if (effectivePlusRemaining >= 1.0)
                    {
                        vsEvilAC = baseEnhancement + 2;
                    }
                    else if (effectivePlusRemaining >= 0.5)
                    {
                        vsEvilAC = baseEnhancement + 1;
                    }
                    if (vsEvilAC > 5)
                    {
                        vsEvilAC = 5;
                    }
                    if (vsEvilAC > baseEnhancement)
                    {
                        script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyACBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL, vsEvilAC), armor, 0.0f);
                        script.SetFirstName(armor, String.Format("Holy {0}", script.GetName(armor)));
                        effectivePlusRemaining -= ((double)(vsEvilAC - baseEnhancement)) / 2.0;
                        currentEffectivePlus   += ((double)(vsEvilAC - baseEnhancement)) / 2.0;
                        return;
                    }
                }
                return;
            }

            case Generation.Theme.Themeless:
            {
                // Not much we can do with no theme. Return a less-than-max-value item
                return;
            }

            case Generation.Theme.UndeadSlaying:
            {
                if (effectivePlusRemaining >= (1.0 / 3.0))
                {
                    int vsUndeadAC = 0;
                    if (effectivePlusRemaining >= (4.0 / 3.0))
                    {
                        vsUndeadAC = baseEnhancement + 4;
                    }
                    else if (effectivePlusRemaining >= 1.0)
                    {
                        vsUndeadAC = baseEnhancement + 3;
                    }
                    else if (effectivePlusRemaining >= (2.0 / 3.0))
                    {
                        vsUndeadAC = baseEnhancement + 2;
                    }
                    else
                    {
                        vsUndeadAC = baseEnhancement + 1;
                    }
                    if (vsUndeadAC > 5)
                    {
                        vsUndeadAC = 5;
                    }
                    if (vsUndeadAC > baseEnhancement)
                    {
                        script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyACBonusVsRace(IP_CONST_RACIALTYPE_UNDEAD, vsUndeadAC), armor, 0.0f);
                        script.SetFirstName(armor, String.Format("{0} of Undeadwarding", script.GetName(armor)));
                        effectivePlusRemaining -= ((double)(vsUndeadAC - baseEnhancement)) / 3.0;
                        currentEffectivePlus   += ((double)(vsUndeadAC - baseEnhancement)) / 3.0;
                        return;
                    }
                }
                return;
            }

            case Generation.Theme.Unholy:
            {
                if (effectivePlusRemaining >= 0.5)
                {
                    int vsGoodAC = 0;
                    if (effectivePlusRemaining >= 1.6)
                    {
                        vsGoodAC = baseEnhancement + 4;
                    }
                    else if (effectivePlusRemaining >= 1.2)
                    {
                        vsGoodAC = baseEnhancement + 3;
                    }
                    else if (effectivePlusRemaining >= 0.8)
                    {
                        vsGoodAC = baseEnhancement + 2;
                    }
                    else if (effectivePlusRemaining >= 0.4)
                    {
                        vsGoodAC = baseEnhancement + 1;
                    }
                    if (vsGoodAC > 5)
                    {
                        vsGoodAC = 5;
                    }
                    if (vsGoodAC > baseEnhancement)
                    {
                        script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyACBonusVsAlign(IP_CONST_ALIGNMENTGROUP_GOOD, vsGoodAC), armor, 0.0f);
                        script.SetFirstName(armor, String.Format("Unholy {0}", script.GetName(armor)));
                        effectivePlusRemaining -= ((double)(vsGoodAC - baseEnhancement)) * 2.0 / 5.0;
                        currentEffectivePlus   += ((double)(vsGoodAC - baseEnhancement)) * 2.0 / 5.0;
                        return;
                    }
                }
                return;
            }
            }
        }
Ejemplo n.º 2
0
        public static int NewArmor(CLRScriptBase script, int maxValue)
        {
            #region Calculate Armor Type
            List <int> possibleBaseItems = new List <int>();
            foreach (int armorType in ArmorResRefs.Keys)
            {
                if (Pricing.ArmorRulesTypeValues[armorType] <= maxValue)
                {
                    possibleBaseItems.Add(armorType);
                }
            }
            if (possibleBaseItems.Count == 0)
            {
                // Can't afford any armor. What are we doing here?
                return(0);
            }
            int selectedArmorType = possibleBaseItems[Generation.rand.Next(possibleBaseItems.Count)];
            int armorValue        = Pricing.ArmorRulesTypeValues[selectedArmorType];
            maxValue -= armorValue;
            uint armor = script.CreateItemOnObject(ArmorResRefs[selectedArmorType], script.OBJECT_SELF, 1, "", FALSE);
            #endregion

            #region Armor Appearance
            Generation.Theme armorTheme = Generation.GetEnchantmentTheme();
            if (script.GetBaseItemType(armor) == BASE_ITEM_ARMOR)
            {
                script.StoreCampaignObject(ACR_Items.ItemChangeDBName, ACR_Items.ModelChangeVarName, armor, script.OBJECT_SELF);
                ArmorSet set = null;
                switch (selectedArmorType)
                {
                case ARMOR_RULES_TYPE_BANDED:
                    set = ACR_Items.ArmorSetLibrary[ACR_Items.ArmorSetTypes.Banded][Generation.rand.Next(ACR_Items.ArmorSetLibrary[ACR_Items.ArmorSetTypes.Banded].Count)];
                    break;

                case ARMOR_RULES_TYPE_BREASTPLATE:
                    set = ACR_Items.ArmorSetLibrary[ACR_Items.ArmorSetTypes.Breastplate][Generation.rand.Next(ACR_Items.ArmorSetLibrary[ACR_Items.ArmorSetTypes.Breastplate].Count)];
                    break;

                case ARMOR_RULES_TYPE_CHAIN_SHIRT:
                    set = ACR_Items.ArmorSetLibrary[ACR_Items.ArmorSetTypes.ChainShirt][Generation.rand.Next(ACR_Items.ArmorSetLibrary[ACR_Items.ArmorSetTypes.ChainShirt].Count)];
                    break;

                case ARMOR_RULES_TYPE_CHAINMAIL:
                    set = ACR_Items.ArmorSetLibrary[ACR_Items.ArmorSetTypes.Chainmail][Generation.rand.Next(ACR_Items.ArmorSetLibrary[ACR_Items.ArmorSetTypes.Chainmail].Count)];
                    break;

                case ARMOR_RULES_TYPE_CLOTH:
                    set = ACR_Items.ArmorSetLibrary[ACR_Items.ArmorSetTypes.Cloth][Generation.rand.Next(ACR_Items.ArmorSetLibrary[ACR_Items.ArmorSetTypes.Cloth].Count)];
                    break;

                case ARMOR_RULES_TYPE_FULL_PLATE:
                    set = ACR_Items.ArmorSetLibrary[ACR_Items.ArmorSetTypes.FullPlate][Generation.rand.Next(ACR_Items.ArmorSetLibrary[ACR_Items.ArmorSetTypes.FullPlate].Count)];
                    break;

                case ARMOR_RULES_TYPE_HALF_PLATE:
                    set = ACR_Items.ArmorSetLibrary[ACR_Items.ArmorSetTypes.HalfPlate][Generation.rand.Next(ACR_Items.ArmorSetLibrary[ACR_Items.ArmorSetTypes.HalfPlate].Count)];
                    break;

                case ARMOR_RULES_TYPE_HIDE:
                    set = ACR_Items.ArmorSetLibrary[ACR_Items.ArmorSetTypes.Hide][Generation.rand.Next(ACR_Items.ArmorSetLibrary[ACR_Items.ArmorSetTypes.Hide].Count)];
                    break;

                case ARMOR_RULES_TYPE_LEATHER:
                    set = ACR_Items.ArmorSetLibrary[ACR_Items.ArmorSetTypes.Leather][Generation.rand.Next(ACR_Items.ArmorSetLibrary[ACR_Items.ArmorSetTypes.Leather].Count)];
                    break;

                case ARMOR_RULES_TYPE_PADDED:
                    set = ACR_Items.ArmorSetLibrary[ACR_Items.ArmorSetTypes.Padded][Generation.rand.Next(ACR_Items.ArmorSetLibrary[ACR_Items.ArmorSetTypes.Padded].Count)];
                    break;

                case ARMOR_RULES_TYPE_SCALE:
                    set = ACR_Items.ArmorSetLibrary[ACR_Items.ArmorSetTypes.Scale][Generation.rand.Next(ACR_Items.ArmorSetLibrary[ACR_Items.ArmorSetTypes.Scale].Count)];
                    break;

                case ARMOR_RULES_TYPE_STUDDED_LEATHER:
                    set = ACR_Items.ArmorSetLibrary[ACR_Items.ArmorSetTypes.StuddedLeather][Generation.rand.Next(ACR_Items.ArmorSetLibrary[ACR_Items.ArmorSetTypes.StuddedLeather].Count)];
                    break;
                }
                if (set != null)
                {
                    ItemModels.TakeArmorStyle(ALFA.Shared.Modules.InfoStore.ModifiedGff[ACR_Items.ModelChangeVarName], set);
                }
                ColorPair color = GeneratedColors.ColorPairs[armorTheme][Generation.rand.Next(GeneratedColors.ColorPairs[armorTheme].Count)];
                ItemColors.SetColorThemes(ALFA.Shared.Modules.InfoStore.ModifiedGff[ACR_Items.ModelChangeVarName], color.Primary, color.Accent);
                script.DestroyObject(armor, 0.0f, TRUE);
                armor = script.RetrieveCampaignObject(ACR_Items.ItemChangeDBName, ACR_Items.ModelChangeVarName, script.GetLocation(script.OBJECT_SELF), script.OBJECT_SELF, script.OBJECT_SELF);
            }
            #endregion

            #region See if We Want This to be Masterwork
            if (maxValue >= 150)
            {
                switch (selectedArmorType)
                {
                case ARMOR_RULES_TYPE_BANDED:
                    script.SetArmorRulesType(armor, ARMOR_RULES_TYPE_BANDED_MASTERWORK);
                    armorValue += 150;
                    maxValue   -= 150;
                    break;

                case ARMOR_RULES_TYPE_BREASTPLATE:
                    script.SetArmorRulesType(armor, ARMOR_RULES_TYPE_BREASTPLATE_MASTERWORK);
                    armorValue += 150;
                    maxValue   -= 150;
                    break;

                case ARMOR_RULES_TYPE_CHAIN_SHIRT:
                    script.SetArmorRulesType(armor, ARMOR_RULES_TYPE_CHAIN_SHIRT_MASTERWORK);
                    armorValue += 150;
                    maxValue   -= 150;
                    break;

                case ARMOR_RULES_TYPE_CHAINMAIL:
                    script.SetArmorRulesType(armor, ARMOR_RULES_TYPE_CHAINMAIL_MASTERWORK);
                    armorValue += 150;
                    maxValue   -= 150;
                    break;

                case ARMOR_RULES_TYPE_FULL_PLATE:
                    script.SetArmorRulesType(armor, ARMOR_RULES_TYPE_FULL_PLATE_MASTERWORK);
                    armorValue += 150;
                    maxValue   -= 150;
                    break;

                case ARMOR_RULES_TYPE_HALF_PLATE:
                    script.SetArmorRulesType(armor, ARMOR_RULES_TYPE_HALF_PLATE_MASTERWORK);
                    armorValue += 150;
                    maxValue   -= 150;
                    break;

                case ARMOR_RULES_TYPE_HIDE:
                    script.SetArmorRulesType(armor, ARMOR_RULES_TYPE_HIDE_MASTERWORK);
                    armorValue += 150;
                    maxValue   -= 150;
                    break;

                case ARMOR_RULES_TYPE_LEATHER:
                    script.SetArmorRulesType(armor, ARMOR_RULES_TYPE_LEATHER_MASTERWORK);
                    armorValue += 150;
                    maxValue   -= 150;
                    break;

                case ARMOR_RULES_TYPE_PADDED:
                    script.SetArmorRulesType(armor, ARMOR_RULES_TYPE_PADDED_MASTERWORK);
                    armorValue += 150;
                    maxValue   -= 150;
                    break;

                case ARMOR_RULES_TYPE_SCALE:
                    script.SetArmorRulesType(armor, ARMOR_RULES_TYPE_SCALE_MASTERWORK);
                    armorValue += 150;
                    maxValue   -= 150;
                    break;

                case ARMOR_RULES_TYPE_SHIELD_HEAVY:
                    script.SetArmorRulesType(armor, ARMOR_RULES_TYPE_SHIELD_HEAVY_MASTERWORK);
                    armorValue += 150;
                    maxValue   -= 150;
                    break;

                case ARMOR_RULES_TYPE_SHIELD_LIGHT:
                    script.SetArmorRulesType(armor, ARMOR_RULES_TYPE_SHIELD_LIGHT_MASTERWORK);
                    armorValue += 150;
                    maxValue   -= 150;
                    break;

                case ARMOR_RULES_TYPE_SHIELD_TOWER:
                    script.SetArmorRulesType(armor, ARMOR_RULES_TYPE_SHIELD_TOWER_MASTERWORK);
                    armorValue += 150;
                    maxValue   -= 150;
                    break;

                case ARMOR_RULES_TYPE_SPLINT:
                    script.SetArmorRulesType(armor, ARMOR_RULES_TYPE_SPLINT_MASTERWORK);
                    armorValue += 150;
                    maxValue   -= 150;
                    break;

                case ARMOR_RULES_TYPE_STUDDED_LEATHER:
                    script.SetArmorRulesType(armor, ARMOR_RULES_TYPE_STUDDED_LEATHER_MASTERWORK);
                    armorValue += 150;
                    maxValue   -= 150;
                    break;
                }
            }
            else
            {
                // We can't even afford masterwork. Carry on.
                return(armorValue);
            }
            #endregion

            #region Calculate Effective Plus
            double effectivePlusRemaining = Math.Sqrt((double)(maxValue / 1000)); // we cast after the division because we're going to turn this into an int later.
            double currentEffectivePlus   = 0.0;
            #endregion

            #region Set Base Properties
            int enhancementBonus = 0;
            if (effectivePlusRemaining >= 1.0)
            {
                enhancementBonus        = 1;
                effectivePlusRemaining -= 1;
                currentEffectivePlus    = 1;
                bool quirkAdded = false;
                while (effectivePlusRemaining >= 1)
                {
                    if (Generation.rand.Next(100) > 95)
                    {
                        // The remainder of the enchantment will
                        // be personality heavy.
                        break;
                    }
                    if (!quirkAdded && Generation.rand.Next(100) < 75)
                    {
                        enhancementBonus       += 1;
                        effectivePlusRemaining -= 1;
                        currentEffectivePlus   += 1;
                    }
                    else
                    {
                        List <EnhancementTypes> quirks = BuildBaseEnchantmentPossibilities(script.GetBaseItemType(armor), effectivePlusRemaining);
                        if (quirks.Count > 0)
                        {
                            EnhancementTypes quirk = quirks[Generation.rand.Next(quirks.Count)];
                            if (selectedArmorType == ARMOR_RULES_TYPE_CLOTH &&
                                quirk == EnhancementTypes.Twilight)
                            {
                                quirk = EnhancementTypes.SpellFocus;
                            }
                            switch (quirk)
                            {
                            case EnhancementTypes.CombatCasting:
                                script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyBonusFeat(IP_CONST_FEAT_COMBAT_CASTING), armor, 0.0f);
                                script.SetFirstName(armor, String.Format("Battlemage's {0}", script.GetName(armor)));
                                effectivePlusRemaining -= 1;
                                currentEffectivePlus   += 1;
                                break;

                            case EnhancementTypes.DeflectArrows:
                                script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyBonusFeat(IP_CONST_FEAT_DEFLECT_ARROWS), armor, 0.0f);
                                script.SetFirstName(armor, String.Format("Arrowcatching {0}", script.GetName(armor)));
                                effectivePlusRemaining -= 2;
                                currentEffectivePlus   += 2;
                                break;

                            case EnhancementTypes.Dodge:
                                script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyBonusFeat(IP_CONST_FEAT_DODGE), armor, 0.0f);
                                script.SetFirstName(armor, String.Format("Nimble {0}", script.GetName(armor)));
                                effectivePlusRemaining -= 1;
                                currentEffectivePlus   += 1;
                                break;

                            case EnhancementTypes.ExtraTurning:
                                script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyBonusFeat(IP_CONST_FEAT_EXTRA_TURNING), armor, 0.0f);
                                script.SetFirstName(armor, String.Format("Turning {0}", script.GetName(armor)));
                                effectivePlusRemaining -= 1;
                                currentEffectivePlus   += 1;
                                break;

                            case EnhancementTypes.SpellFocus:
                                int primarySchool = Generation.SpellSchoolFocus[Generation.rand.Next(Generation.SpellSchoolFocus.Count)];
                                script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyBonusFeat(primarySchool), armor, 0.0f);
                                script.SetFirstName(armor, String.Format("Mage's {0}", script.GetName(armor)));
                                effectivePlusRemaining -= 1;
                                currentEffectivePlus   += 1;
                                if (effectivePlusRemaining >= 0.5)
                                {
                                    script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyBonusFeat(Generation.SpellFocusLeft[primarySchool]), armor, 0.0f);
                                    effectivePlusRemaining -= 0.5;
                                    currentEffectivePlus   += 0.5;
                                }
                                if (effectivePlusRemaining >= 0.5)
                                {
                                    script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyBonusFeat(Generation.SpellFocusRight[primarySchool]), armor, 0.0f);
                                    effectivePlusRemaining -= 0.5;
                                    currentEffectivePlus   += 0.5;
                                }
                                break;

                            case EnhancementTypes.SpellPenetration:
                                script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyBonusFeat(IP_CONST_FEAT_SPELLPENETRATION), armor, 0.0f);
                                script.SetFirstName(armor, String.Format("Mage's {0}", script.GetName(armor)));
                                effectivePlusRemaining -= 1.5;
                                currentEffectivePlus   += 1.5;
                                break;

                            case EnhancementTypes.SR12:
                                script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_12), armor, 0.0f);
                                script.SetFirstName(armor, String.Format("Spellsoaking {0}", script.GetName(armor)));
                                effectivePlusRemaining -= 2;
                                currentEffectivePlus   += 2;
                                break;

                            case EnhancementTypes.SR14:
                                script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_14), armor, 0.0f);
                                script.SetFirstName(armor, String.Format("Spellsoaking {0}", script.GetName(armor)));
                                effectivePlusRemaining -= 3;
                                currentEffectivePlus   += 3;
                                break;

                            case EnhancementTypes.SR16:
                                script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_16), armor, 0.0f);
                                script.SetFirstName(armor, String.Format("Spellsoaking {0}", script.GetName(armor)));
                                effectivePlusRemaining -= 4;
                                currentEffectivePlus   += 4;
                                break;

                            case EnhancementTypes.SR18:
                                script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyBonusSpellResistance(IP_CONST_SPELLRESISTANCEBONUS_18), armor, 0.0f);
                                script.SetFirstName(armor, String.Format("Spellsoaking {0}", script.GetName(armor)));
                                effectivePlusRemaining -= 5;
                                currentEffectivePlus   += 5;
                                break;

                            case EnhancementTypes.Twilight:
                                script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyArcaneSpellFailure(IP_CONST_ARCANE_SPELL_FAILURE_MINUS_10_PERCENT), armor, 0.0f);
                                script.SetFirstName(armor, String.Format("Twilight {0}", script.GetName(armor)));
                                effectivePlusRemaining -= 1;
                                currentEffectivePlus   += 1;
                                break;
                            }
                        }
                        quirkAdded = true;
                    }
                }
                script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyACBonus(enhancementBonus), armor, 0.0f);
                script.SetFirstName(armor, String.Format("{0} +{1}", script.GetName(armor), enhancementBonus));
            }
            #endregion

            #region Armor Personality
            SetPersonalityProperties(script, armor, armorTheme, enhancementBonus, ref effectivePlusRemaining, ref currentEffectivePlus);
            armorValue += (int)(currentEffectivePlus * currentEffectivePlus * 1000);
            Pricing.CalculatePrice(script, armor);
            return(armorValue);

            #endregion
        }