ACR_Items.GenerateArmor.SetPersonalityProperties C# (CSharp) Метод

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

private static SetPersonalityProperties ( CLRScriptBase script, uint armor, Generation theme, int baseEnhancement, double &effectivePlusRemaining, double &currentEffectivePlus ) : void
script CLRScriptFramework.CLRScriptBase
armor uint
theme Generation
baseEnhancement int
effectivePlusRemaining double
currentEffectivePlus double
Результат void
        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;
                    }
            }
        }