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