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