public void InitializeSettings(List <CECustom> moduleCustoms)
        {
            CustomFlags = new Dictionary <string, bool>();
            ISettingsBuilder builder = BaseSettingsBuilder.Create("CaptivityEventsFlags", "Captivity Events Custom Flags");

            if (builder != null)
            {
                builder.SetFormat("json2").SetFolderName("Global").SetSubFolder("zCaptivityEvents");

                foreach (CECustom module in moduleCustoms)
                {
                    builder.CreateGroup("{=CESETTINGS0090}Custom Flags of " + module.CEModuleName, groupBuilder =>
                    {
                        foreach (CEFlagNode flag in module.CEFlags)
                        {
                            if (!CustomFlags.ContainsKey(flag.Id))
                            {
                                CustomFlags.Add(flag.Id, flag.DefaultValue);
                                groupBuilder.AddBool(flag.Id, flag.Name, new ProxyRef <bool>(() => CustomFlags[flag.Id], o => CustomFlags[flag.Id] = o), boolBuilder => boolBuilder.SetHintText(flag.HintText).SetRequireRestart(false));
                            }
                        }
                        foreach (CESkillNode skillNode in module.CESkills)
                        {
                            CESkills.AddCustomSkill(skillNode);
                        }
                    });
                }
                _settings = builder.BuildAsGlobal();
                _settings.Register();
            }
            else
            {
                foreach (CECustom module in moduleCustoms)
                {
                    foreach (CEFlagNode flag in module.CEFlags)
                    {
                        if (!CustomFlags.ContainsKey(flag.Id))
                        {
                            CustomFlags.Add(flag.Id, flag.DefaultValue);
                        }
                    }
                    foreach (CESkillNode skillNode in module.CESkills)
                    {
                        CESkills.AddCustomSkill(skillNode);
                    }
                }
            }
        }
Beispiel #2
0
        private void SkillObjectModifier(SkillObject skillObject, Color color, Hero hero, string skill, int amount, int xp, bool display = true, bool resetSkill = false)
        {
            if (xp == 0)
            {
                int currentSkillLevel = hero.GetSkillValue(skillObject);
                int newNumber         = resetSkill ? 0 : currentSkillLevel + amount;

                CESkillNode skillNode = CESkills.FindSkillNode(skill);
                if (skillNode != null)
                {
                    int maxLevel = new CEVariablesLoader().GetIntFromXML(skillNode.MaxLevel);

                    int minLevel = new CEVariablesLoader().GetIntFromXML(skillNode.MinLevel);
                    if (maxLevel != 0 && newNumber > maxLevel)
                    {
                        newNumber = maxLevel;
                        amount    = maxLevel - currentSkillLevel;
                    }
                    else if (newNumber < minLevel)
                    {
                        newNumber = minLevel;
                        amount    = minLevel - currentSkillLevel;
                    }
                }
                else if (newNumber < 0)
                {
                    newNumber = 0;
                    amount    = newNumber - currentSkillLevel;
                }

                float xpToSet = Campaign.Current.Models.CharacterDevelopmentModel.GetXpRequiredForSkillLevel(newNumber);
                Campaign.Current.Models.CharacterDevelopmentModel.GetSkillLevelChange(hero, skillObject, xpToSet, out int levels);
                hero.HeroDeveloper.SetPropertyValue(skillObject, xpToSet);

                if (levels > 0)
                {
                    MethodInfo mi = hero.HeroDeveloper.GetType().GetMethod("ChangeSkillLevelFromXpChange", BindingFlags.Instance | BindingFlags.NonPublic);
                    if (mi != null)
                    {
                        mi.Invoke(hero.HeroDeveloper, new object[] { skillObject, levels, false });
                    }
                }
                else
                {
                    hero.SetSkillValue(skillObject, newNumber);
                }

                if (!display)
                {
                    return;
                }

                TextObject textObject = GameTexts.FindText("str_CE_level_skill");
                textObject.SetTextVariable("HERO", hero.Name);

                if (xp == 0)
                {
                    textObject.SetTextVariable("NEGATIVE", amount > 0 ? 0 : 1);
                }
                else
                {
                    textObject.SetTextVariable("NEGATIVE", xp >= 0 ? 0 : 1);
                }

                textObject.SetTextVariable("SKILL_AMOUNT", Math.Abs(amount));

                textObject.SetTextVariable("PLURAL", amount > 1 || amount < 1 ? 1 : 0);
                textObject.SetTextVariable("SKILL", skillObject.Name.ToLower());
                textObject.SetTextVariable("TOTAL_AMOUNT", newNumber);
                InformationManager.DisplayMessage(new InformationMessage(textObject.ToString(), color));
            }
            else
            {
                hero.HeroDeveloper.AddSkillXp(skillObject, xp, true, display);
            }
        }