Beispiel #1
0
        private static void LoadRafCombatStyle(XElement elem, ref RafCombatStyle value)
        {
            switch (elem.Value.ToLower())
            {
            case "auto":
                value = RafCombatStyle.Auto;
                break;

            case "combatonly":
                value = RafCombatStyle.CombatOnly;
                break;

            case "healingovercombat":
                value = RafCombatStyle.HealingOverCombat;
                break;

            case "healingonly":
                value = RafCombatStyle.HealingOnly;
                break;

            default:
                Shaman.Slog(
                    "config:  setting '{0}' invalid - expected Raf combat style but read '{1}' - defaulting to '{2}'",
                    elem.Name,
                    elem.Value,
                    value
                    );
                break;
            }
        }
Beispiel #2
0
 private static void LoadRafCombatStyle(XElement elem, ref RafCombatStyle value)
 {
     switch (elem.Value.ToLower())
     {
         case "auto":
             value = RafCombatStyle.Auto;
             break;
         case "combatonly":
             value = RafCombatStyle.CombatOnly;
             break;
         case "healingovercombat":
             value = RafCombatStyle.HealingOverCombat;
             break;
         case "healingonly":
             value = RafCombatStyle.HealingOnly;
             break;
         default:
             Shaman.Slog(
                 "config:  setting '{0}' invalid - expected Raf combat style but read '{1}' - defaulting to '{2}'",
                 elem.Name,
                 elem.Value,
                 value
                 );
             break;
     }
 }
Beispiel #3
0
        public bool FileLoad(string sFilename, out bool didUpgrade)
        {
            XElement toplvl = XElement.Load(sFilename);

            XElement[] elements = toplvl.Elements().ToArray();

            didUpgrade = false;
            foreach (XElement elem in elements)
            {
                switch (elem.Name.ToString())
                {
                case "version":
                    LoadStr(elem, ref CreatedByVersion);                        break;

                case "debug":
                    LoadBool(elem, ref Debug);                                  break;

                case "useghostwolf":
                    LoadBool(elem, ref UseGhostWolfForm);                      break;

                case "safedistanceforghostwolf":
                    LoadInt(elem, ref DistanceForGhostWolf);                   break;

                case "restminmana":
                    LoadInt(elem, ref RestManaPercent);                        break;

                case "restminhealth":
                    LoadInt(elem, ref RestHealthPercent);                      break;

                case "needheal":
                    LoadInt(elem, ref NeedHealHealthPercent);                  break;

                case "emergencyhealth":
                    LoadInt(elem, ref EmergencyHealthPercent);                 break;

                case "emergencymana":
                    LoadInt(elem, ref EmergencyManaPercent);                   break;

                case "needlifeblood":
                    LoadInt(elem, ref LifebloodPercent); break;

                case "needshamanisticrage":
                    LoadInt(elem, ref ShamanisticRagePercent);             break;

                case "needthunderstorm":
                    LoadInt(elem, ref ThunderstormPercent); break;

                case "needmanatide":
                    LoadInt(elem, ref ManaTidePercent); break;

                case "trinkathealth":
                    LoadInt(elem, ref TrinkAtHealth);                break;

                case "trinkatmana":
                    LoadInt(elem, ref TrinkAtMana);                break;

                case "usebandages":
                    LoadBool(elem, ref UseBandages);                           break;

                case "totemrecalldistance":
                    LoadInt(elem, ref DistanceForTotemRecall);                 break;

                case "twistwatershield":
                    LoadInt(elem, ref TwistManaPercent);                       break;

                case "twistlightningshield":
                    LoadInt(elem, ref TwistDamagePercent);                     break;

                case "disablemovement":
                    LoadBool(elem, ref DisableMovement); break;

                case "disabletargeting":
                    LoadBool(elem, ref DisableTargeting); break;

                case "meleecombatbeforelevel10":
                    LoadBool(elem, ref MeleeCombatBeforeLevel10); break;

                case "interruptstyle":
                    LoadSpellInterruptStyle(elem, ref InterruptStyle); break;

                case "detectimmunities":
                    LoadBool(elem, ref DetectImmunities); break;

                case "waterwalking":
                    LoadBool(elem, ref WaterWalking); break;

                case "pve_combatstyle":
                    LoadPveCombatStyle(elem, ref PVE_CombatStyle);             break;

                case "pve_typeofpull":
                    LoadTypeOfPull(elem, ref PVE_PullType);                    break;

                case "pve_stressonly_feralspirit":
                    LoadBool(elem, ref PVE_SaveForStress_FeralSpirit);         break;

                case "pve_stressonly_elementaltotems":
                    LoadBool(elem, ref PVE_SaveForStress_ElementalTotems);     break;

                case "pve_stressonly_dps_racials":
                    LoadBool(elem, ref PVE_SaveForStress_DPS_Racials);         break;

                case "pve_stressonly_bloodlust":
                    LoadBool(elem, ref PVE_SaveForStress_Bloodlust);           break;

                case "pve_stressonly_totembar":
                    LoadBool(elem, ref PVE_SaveForStress_TotemsSelected);      break;

                case "pve_stresslevelsabove":
                    LoadInt(elem, ref PVE_LevelsAboveAsElite);                 break;

                case "pve_stressfulmobcount":
                    LoadInt(elem, ref PVE_StressfulMobCount);                  break;

                case "pve_totemearth":
                    LoadStr(elem, ref PVE_TotemEarth);                         break;

                case "pve_totemfire":
                    LoadStr(elem, ref PVE_TotemFire);                          break;

                case "pve_totemwater":
                    LoadStr(elem, ref PVE_TotemWater);                         break;

                case "pve_totemair":
                    LoadStr(elem, ref PVE_TotemAir);                           break;

                case "pve_mainhand":
                    LoadStr(elem, ref PVE_MainhandImbue);                    break;

                case "pve_offhand":
                    LoadStr(elem, ref PVE_OffhandImbue);                     break;

                case "pvp_combatstyle":
                    LoadPvpCombatStyle(elem, ref PVP_CombatStyle);             break;

                case "pvp_totemearth":
                    LoadStr(elem, ref PVP_TotemEarth);                         break;

                case "pvp_totemfire":
                    LoadStr(elem, ref PVP_TotemFire);                          break;

                case "pvp_totemwater":
                    LoadStr(elem, ref PVP_TotemWater);                         break;

                case "pvp_totemair":
                    LoadStr(elem, ref PVP_TotemAir);                           break;

                case "pvp_mainhand":
                    LoadStr(elem, ref PVP_MainhandImbue);                    break;

                case "pvp_offhand":
                    LoadStr(elem, ref PVP_OffhandImbue);                     break;

                case "pvp_cleansepriority":
                    LoadSpellPriority(elem, ref PVP_CleansePriority); break;

                case "pvp_purgepriority":
                    LoadSpellPriority(elem, ref PVP_PurgePriority); break;

                case "pvp_hexicon":
                    LoadRaidIcon(elem, ref PVP_HexIcon); break;

                case "pvp_prepwaterbreathing":
                    LoadBool(elem, ref PVP_PrepWaterBreathing); break;

                case "pvp_prepwaterwalking":
                    LoadBool(elem, ref PVP_PrepWaterWalking); break;

                case "pvp_heal_healingwave":
                    LoadInt(elem, ref PVP_Heal.HealingWave); break;

                case "pvp_heal_riptide":
                    LoadInt(elem, ref PVP_Heal.Riptide); break;

                case "pvp_heal_unleashelements":
                    LoadInt(elem, ref PVP_Heal.UnleashElements); break;

                case "pvp_heal_chainheal":
                    LoadInt(elem, ref PVP_Heal.ChainHeal); break;

                case "pvp_heal_healingrain":
                    LoadInt(elem, ref PVP_Heal.HealingRain); break;

                case "pvp_heal_greaterhealingwave":
                    LoadInt(elem, ref PVP_Heal.GreaterHealingWave); break;

                case "pvp_heal_healingsurge":
                    LoadInt(elem, ref PVP_Heal.HealingSurge); break;

                case "pvp_heal_ohshoot":
                    LoadInt(elem, ref PVP_Heal.OhShoot); break;

                case "pvp_heal_tidalwaves":
                    LoadBool(elem, ref PVP_Heal.TidalWaves); break;

                case "pvp_heal_cleanse":
                    LoadBool(elem, ref PVP_Heal.Cleanse); break;

                case "pvp_heal_pets":
                    LoadBool(elem, ref PVP_Heal.Pets); break;

                case "pvp_heal_searchrange":
                    LoadDouble(elem, ref PVP_Heal.SearchRange); break;

                case "raf_combatstyle":
                    LoadRafCombatStyle(elem, ref RAF_CombatStyle);             break;

                case "raf_groupoffheal":
                    LoadInt(elem, ref RAF_GroupOffHeal); break;

                case "raf_usethunderstorm":
                    LoadBool(elem, ref RAF_UseThunderstorm); break;

                case "raf_usebloodlustonbosses":
                    LoadBool(elem, ref RAF_UseBloodlustOnBosses);              break;

                case "raf_saveferalspiritforbosses":
                    LoadBool(elem, ref RAF_SaveFeralSpiritForBosses);          break;

                case "raf_totemearth":
                    LoadStr(elem, ref RAF_TotemEarth);                         break;

                case "raf_totemfire":
                    LoadStr(elem, ref RAF_TotemFire);                          break;

                case "raf_totemwater":
                    LoadStr(elem, ref RAF_TotemWater);                         break;

                case "raf_totemair":
                    LoadStr(elem, ref RAF_TotemAir);                           break;

                case "raf_saveelementaltotemsforbosses":
                    LoadBool(elem, ref RAF_SaveElementalTotemsForBosses);      break;

                case "raf_followclosely":
                    LoadBool(elem, ref RAF_FollowClosely);      break;

                case "raf_cleansepriority":
                    LoadSpellPriority(elem, ref RAF_CleansePriority); break;

                case "raf_purgepriority":
                    LoadSpellPriority(elem, ref RAF_PurgePriority); break;

                case "raf_hexicon":
                    LoadRaidIcon(elem, ref RAF_HexIcon); break;

                case "raf_bindicon":
                    LoadRaidIcon(elem, ref RAF_BindIcon); break;

                case "raf_heal_healingwave":
                    LoadInt(elem, ref RAF_Heal.HealingWave); break;

                case "raf_heal_riptide":
                    LoadInt(elem, ref RAF_Heal.Riptide); break;

                case "raf_heal_unleashelements":
                    LoadInt(elem, ref RAF_Heal.UnleashElements); break;

                case "raf_heal_chainheal":
                    LoadInt(elem, ref RAF_Heal.ChainHeal); break;

                case "raf_heal_healingrain":
                    LoadInt(elem, ref RAF_Heal.HealingRain); break;

                case "raf_heal_greaterhealingwave":
                    LoadInt(elem, ref RAF_Heal.GreaterHealingWave); break;

                case "raf_heal_healingsurge":
                    LoadInt(elem, ref RAF_Heal.HealingSurge); break;

                case "raf_heal_ohshoot":
                    LoadInt(elem, ref RAF_Heal.OhShoot); break;

                case "raf_heal_tidalwaves":
                    LoadBool(elem, ref RAF_Heal.TidalWaves); break;

                case "raf_heal_cleanse":
                    LoadBool(elem, ref RAF_Heal.Cleanse); break;

                case "raf_heal_pets":
                    LoadBool(elem, ref RAF_Heal.Pets); break;

                case "raf_heal_searchrange":
                    LoadDouble(elem, ref RAF_Heal.SearchRange); break;

                case "raf_followatrange":
                    LoadInt(elem, ref RAF_FollowAtRange); break;

                case "raf_healstyle":
                    LoadHealStyle(elem, ref RAF_HealStyle); break;

                default:
                    Shaman.Dlog("error: unknown config setting: {0}={1}", elem.Name, elem.Value.ToString());
                    break;
                }
            }

            if (String.Compare(CreatedByVersion, Shaman.Version) < 0)
            {
                didUpgrade = true;
                Shaman.Dlog("ConfigValue.FileLoad:  detected config file created by a different version");

                // UPGRADE TO 4.2.05
                if (string.Compare(CreatedByVersion, "4.2.05") < 0)
                {
                    Shaman.Slog("");

                    Shaman.Slog(Color.Orange, "ConfigUpgrade:  upgrading older config file version to {0}", Shaman.Version);

                    Shaman.Slog(Color.Orange, "ConfigUpgrade:  Shamanistic Rage % changed from {0} to {1}", ShamanisticRagePercent, 100);
                    ShamanisticRagePercent = 100;

                    Shaman.Slog(Color.Orange, "ConfigUpgrade:  RAF Combat Style changed from '{0}' to '{1}'", RAF_CombatStyle, "Auto");
                    RAF_CombatStyle = RafCombatStyle.Auto;

                    Shaman.Slog(Color.Orange, "ConfigUpgrade:  Shield Twist Mana % changed from '{0}' to '{1}'", TwistManaPercent, 25);
                    TwistManaPercent = 25;

                    Shaman.Slog(Color.Orange, "ConfigUpgrade:  Shield Twist Damage % changed from '{0}' to '{1}'", TwistDamagePercent, 50);
                    TwistDamagePercent = 50;

                    Shaman.Slog("");
                }

                CreatedByVersion = Shaman.Version;
                Save(sFilename);
            }

            return(true);
        }
Beispiel #4
0
        public bool FileLoad(string sFilename, out bool didUpgrade )
        {
            XElement toplvl = XElement.Load( sFilename);
            XElement[] elements = toplvl.Elements().ToArray();

            didUpgrade = false;
            foreach (XElement elem in elements)
            {
                switch (elem.Name.ToString())
                {
                    case "version":
                        LoadStr(elem, ref CreatedByVersion);                        break;

                    case "debug":
                        LoadBool(elem, ref Debug);                                  break;

                    case "useghostwolf":
                        LoadBool(elem, ref UseGhostWolfForm);                      break;
                    case "safedistanceforghostwolf":
                        LoadInt(elem, ref DistanceForGhostWolf);                   break;
                    case "restminmana":
                        LoadInt(elem, ref RestManaPercent);                        break;
                    case "restminhealth":
                        LoadInt(elem, ref RestHealthPercent);                      break;
                    case "needheal":
                        LoadInt(elem, ref NeedHealHealthPercent);                  break;
                    case "emergencyhealth":
                        LoadInt(elem, ref EmergencyHealthPercent);                 break;
                    case "emergencymana":
                        LoadInt(elem, ref EmergencyManaPercent);                   break;
                    case "needlifeblood":
                        LoadInt(elem, ref LifebloodPercent); break;
                    case "needshamanisticrage":
                        LoadInt(elem, ref ShamanisticRagePercent);             break;
                    case "needthunderstorm":
                        LoadInt(elem, ref ThunderstormPercent); break;
                    case "needmanatide":
                        LoadInt(elem, ref ManaTidePercent); break;
                    case "trinkathealth":
                        LoadInt(elem, ref TrinkAtHealth);                break;
                    case "trinkatmana":
                        LoadInt(elem, ref TrinkAtMana);                break;

                    case "usebandages":
                        LoadBool(elem, ref UseBandages);                           break;
                    case "totemrecalldistance":
                        LoadInt(elem, ref DistanceForTotemRecall);                 break;
                    case "twistwatershield":
                        LoadInt(elem, ref TwistManaPercent);                       break;
                    case "twistlightningshield":
                        LoadInt(elem, ref TwistDamagePercent);                     break;
                    case "disablemovement":
                        LoadBool(elem, ref DisableMovement); break;
                    case "disabletargeting":
                        LoadBool(elem, ref DisableTargeting); break;
                    case "meleecombatbeforelevel10":
                        LoadBool(elem, ref MeleeCombatBeforeLevel10 ); break;
                    case "interruptstyle":
                        LoadSpellInterruptStyle(elem, ref InterruptStyle ); break;
                    case "detectimmunities":
                        LoadBool(elem, ref DetectImmunities ); break;
                    case "waterwalking":
                        LoadBool(elem, ref WaterWalking ); break;

                    case "pve_combatstyle":
                        LoadPveCombatStyle(elem, ref PVE_CombatStyle);             break;
                    case "pve_typeofpull":
                        LoadTypeOfPull(elem, ref PVE_PullType);                    break;
                    case "pve_stressonly_feralspirit":
                        LoadBool(elem, ref PVE_SaveForStress_FeralSpirit);         break;
                    case "pve_stressonly_elementaltotems":
                        LoadBool(elem, ref PVE_SaveForStress_ElementalTotems);     break;
                    case "pve_stressonly_dps_racials":
                        LoadBool(elem, ref PVE_SaveForStress_DPS_Racials);         break;
                    case "pve_stressonly_bloodlust":
                        LoadBool(elem, ref PVE_SaveForStress_Bloodlust);           break;
                    case "pve_stressonly_totembar":
                        LoadBool(elem, ref PVE_SaveForStress_TotemsSelected);      break;
                    case "pve_stresslevelsabove":
                        LoadInt(elem, ref PVE_LevelsAboveAsElite);                 break;
                    case "pve_stressfulmobcount":
                        LoadInt(elem, ref PVE_StressfulMobCount);                  break;
                    case "pve_totemearth":
                        LoadStr(elem, ref PVE_TotemEarth);                         break;
                    case "pve_totemfire":
                        LoadStr(elem, ref PVE_TotemFire);                          break;
                    case "pve_totemwater":
                        LoadStr(elem, ref PVE_TotemWater);                         break;
                    case "pve_totemair":
                        LoadStr(elem, ref PVE_TotemAir);                           break;
                    case "pve_mainhand":
                        LoadStr(elem, ref PVE_MainhandImbue);                    break;
                    case "pve_offhand":
                        LoadStr(elem, ref PVE_OffhandImbue);                     break;

                    case "pvp_combatstyle":
                        LoadPvpCombatStyle(elem, ref PVP_CombatStyle);             break;
                    case "pvp_totemearth":
                        LoadStr(elem, ref PVP_TotemEarth);                         break;
                    case "pvp_totemfire":
                        LoadStr(elem, ref PVP_TotemFire);                          break;
                    case "pvp_totemwater":
                        LoadStr(elem, ref PVP_TotemWater);                         break;
                    case "pvp_totemair":
                        LoadStr(elem, ref PVP_TotemAir);                           break;
                    case "pvp_mainhand":
                        LoadStr(elem, ref PVP_MainhandImbue);                    break;
                    case "pvp_offhand":
                        LoadStr(elem, ref PVP_OffhandImbue);                     break;

                    case "pvp_cleansepriority":
                        LoadSpellPriority(elem, ref PVP_CleansePriority); break;
                    case "pvp_purgepriority":
                        LoadSpellPriority(elem, ref PVP_PurgePriority); break;
                    case "pvp_hexicon":
                        LoadRaidIcon(elem, ref PVP_HexIcon ); break;

                    case "pvp_prepwaterbreathing":
                        LoadBool(elem, ref PVP_PrepWaterBreathing ); break;
                    case "pvp_prepwaterwalking":
                        LoadBool(elem, ref PVP_PrepWaterWalking ); break;

                    case "pvp_heal_healingwave":
                        LoadInt(elem, ref PVP_Heal.HealingWave); break;
                    case "pvp_heal_riptide":
                        LoadInt(elem, ref PVP_Heal.Riptide); break;
                    case "pvp_heal_unleashelements":
                        LoadInt(elem, ref PVP_Heal.UnleashElements); break;
                    case "pvp_heal_chainheal":
                        LoadInt(elem, ref PVP_Heal.ChainHeal); break;
                    case "pvp_heal_healingrain":
                        LoadInt(elem, ref PVP_Heal.HealingRain); break;
                    case "pvp_heal_greaterhealingwave":
                        LoadInt(elem, ref PVP_Heal.GreaterHealingWave); break;
                    case "pvp_heal_healingsurge":
                        LoadInt(elem, ref PVP_Heal.HealingSurge); break;
                    case "pvp_heal_ohshoot":
                        LoadInt(elem, ref PVP_Heal.OhShoot); break;

                    case "pvp_heal_tidalwaves":
                        LoadBool(elem, ref PVP_Heal.TidalWaves); break;
                    case "pvp_heal_cleanse":
                        LoadBool(elem, ref PVP_Heal.Cleanse); break;
                    case "pvp_heal_pets":
                        LoadBool(elem, ref PVP_Heal.Pets ); break;
                    case "pvp_heal_searchrange":
                        LoadDouble(elem, ref PVP_Heal.SearchRange); break;

                    case "raf_combatstyle":
                        LoadRafCombatStyle(elem, ref RAF_CombatStyle);             break;
                    case "raf_groupoffheal":
                        LoadInt(elem, ref RAF_GroupOffHeal ); break;
                    case "raf_usethunderstorm":
                        LoadBool(elem, ref RAF_UseThunderstorm); break;
                    case "raf_usebloodlustonbosses":
                        LoadBool(elem, ref RAF_UseBloodlustOnBosses);              break;
                    case "raf_saveferalspiritforbosses":
                        LoadBool(elem, ref RAF_SaveFeralSpiritForBosses);          break;
                    case "raf_totemearth":
                        LoadStr(elem, ref RAF_TotemEarth);                         break;
                    case "raf_totemfire":
                        LoadStr(elem, ref RAF_TotemFire);                          break;
                    case "raf_totemwater":
                        LoadStr(elem, ref RAF_TotemWater);                         break;
                    case "raf_totemair":
                        LoadStr(elem, ref RAF_TotemAir);                           break;
                    case "raf_saveelementaltotemsforbosses":
                        LoadBool(elem, ref RAF_SaveElementalTotemsForBosses );      break;
                    case "raf_followclosely":
                        LoadBool(elem, ref RAF_FollowClosely );      break;

                    case "raf_cleansepriority":
                        LoadSpellPriority(elem, ref RAF_CleansePriority); break;
                    case "raf_purgepriority":
                        LoadSpellPriority(elem, ref RAF_PurgePriority); break;
                    case "raf_hexicon":
                        LoadRaidIcon(elem, ref RAF_HexIcon); break;
                    case "raf_bindicon":
                        LoadRaidIcon(elem, ref RAF_BindIcon); break;

                    case "raf_heal_healingwave":
                        LoadInt(elem, ref RAF_Heal.HealingWave); break;
                    case "raf_heal_riptide":
                        LoadInt(elem, ref RAF_Heal.Riptide); break;
                    case "raf_heal_unleashelements":
                        LoadInt(elem, ref RAF_Heal.UnleashElements); break;
                    case "raf_heal_chainheal":
                        LoadInt(elem, ref RAF_Heal.ChainHeal); break;
                    case "raf_heal_healingrain":
                        LoadInt(elem, ref RAF_Heal.HealingRain); break;
                    case "raf_heal_greaterhealingwave":
                        LoadInt(elem, ref RAF_Heal.GreaterHealingWave); break;
                    case "raf_heal_healingsurge":
                        LoadInt(elem, ref RAF_Heal.HealingSurge); break;
                    case "raf_heal_ohshoot":
                        LoadInt(elem, ref RAF_Heal.OhShoot); break;

                    case "raf_heal_tidalwaves":
                        LoadBool(elem, ref RAF_Heal.TidalWaves); break;
                    case "raf_heal_cleanse":
                        LoadBool(elem, ref RAF_Heal.Cleanse); break;
                    case "raf_heal_pets":
                        LoadBool(elem, ref RAF_Heal.Pets); break;
                    case "raf_heal_searchrange":
                        LoadDouble(elem, ref RAF_Heal.SearchRange); break;
                    case "raf_followatrange":
                        LoadInt(elem, ref RAF_FollowAtRange ); break;

                    case "raf_healstyle":
                        LoadHealStyle(elem, ref RAF_HealStyle); break;

                    default:
                        Shaman.Dlog("error: unknown config setting: {0}={1}", elem.Name, elem.Value.ToString());
                        break;
                }
            }

            if ( String.Compare( CreatedByVersion, Shaman.Version) < 0)
            {
                didUpgrade = true;
                Shaman.Dlog("ConfigValue.FileLoad:  detected config file created by a different version");

                // UPGRADE TO 4.2.05
                if (string.Compare(CreatedByVersion, "4.2.05") < 0)
                {
                    Shaman.Slog( "" );

                    Shaman.Slog(Color.Orange, "ConfigUpgrade:  upgrading older config file version to {0}", Shaman.Version);

                    Shaman.Slog(Color.Orange, "ConfigUpgrade:  Shamanistic Rage % changed from {0} to {1}", ShamanisticRagePercent, 100);
                    ShamanisticRagePercent = 100;

                    Shaman.Slog(Color.Orange, "ConfigUpgrade:  RAF Combat Style changed from '{0}' to '{1}'", RAF_CombatStyle, "Auto");
                    RAF_CombatStyle = RafCombatStyle.Auto;

                    Shaman.Slog(Color.Orange, "ConfigUpgrade:  Shield Twist Mana % changed from '{0}' to '{1}'", TwistManaPercent, 25);
                    TwistManaPercent = 25;

                    Shaman.Slog(Color.Orange, "ConfigUpgrade:  Shield Twist Damage % changed from '{0}' to '{1}'", TwistDamagePercent, 50);
                    TwistDamagePercent = 50;

                    Shaman.Slog("");
                }

                CreatedByVersion = Shaman.Version;
                Save(sFilename);
            }

            return true;
        }