public static void RefreshPatch(EncyclopediaHeroPageVM __instance) { try { Hero PageHero = __instance.Obj as Hero; if (!Settings.Instance.UseAdvancedHeroTooltips || PageHero == Hero.MainHero) { return; } __instance.Allies.Clear(); __instance.Enemies.Clear(); EncyclopediaPage pageOf1 = Campaign.Current.EncyclopediaManager.GetPageOf(typeof(Hero)); foreach (Hero hero in Hero.All) { if (pageOf1.IsValidEncyclopediaItem(hero) && !hero.IsNotable && hero != PageHero) { if (PageHero.IsFriend(hero)) { __instance.Allies.Add(new HeroVMcontactExtension(hero, PageHero)); } else if (PageHero.IsEnemy(hero)) { __instance.Enemies.Add(new HeroVMcontactExtension(hero, PageHero)); } } } } catch (Exception ex) { MethodInfo methodInfo = MethodBase.GetCurrentMethod() as MethodInfo; DebugHelper.HandleException(ex, methodInfo, "Harmony patch for EncyclopediaHeroPageVM.Refresh"); } }
public static void RefreshPatch(EncyclopediaHeroPageVM __instance) { try { Hero?PageHero = __instance.Obj as Hero; if (!Settings.Instance !.UseAdvancedHeroTooltips || PageHero == Hero.MainHero) { return; } __instance.Allies.Clear(); __instance.Enemies.Clear(); EncyclopediaPage pageOf1 = Campaign.Current.EncyclopediaManager.GetPageOf(typeof(Hero)); #if STABLE foreach (Hero hero in Hero.All) #else foreach (Hero hero in Hero.AllAliveHeroes) #endif { if (pageOf1.IsValidEncyclopediaItem(hero) && !hero.IsNotable && hero != PageHero) { if (PageHero !.IsFriend(hero)) { __instance.Allies.Add(new HeroVMcontactExtension(hero, PageHero)); } else if (PageHero.IsEnemy(hero)) { __instance.Enemies.Add(new HeroVMcontactExtension(hero, PageHero)); } } } }
public static void Postfix(ref EncyclopediaHeroPageVM __instance) { if (null != ReflectUtils.ReflectField("_hero", __instance)) { Hero hero = (Hero)ReflectUtils.ReflectField("_hero", __instance); string heroOccupationName = CampaignUIHelper.GetHeroOccupationName(hero); if (string.IsNullOrEmpty(heroOccupationName)) { heroOccupationName = System.Enum.GetName(typeof(Occupation), hero.CharacterObject.Occupation); string definition3 = GameTexts.FindText("str_enc_sf_occupation", null).ToString(); __instance.Stats.Add(new StringPairItemVM(definition3, heroOccupationName, null)); } //模板 FieldInfo fieldInfo = hero.CharacterObject.GetType().GetField("_originCharacter", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); if (null != fieldInfo) { object obj = fieldInfo.GetValue(hero.CharacterObject);; if (obj is CharacterObject) { CharacterObject originCharacter = (CharacterObject)obj; __instance.Stats.Add(new StringPairItemVM("模板: ", originCharacter.StringId, null)); } } } }
public static bool Prefix(EncyclopediaHeroPageVM __instance) { var hero = __instance.Obj as Hero; if (hero.CanTalkTo()) { __instance.HeroCharacter = new HeroViewModelEx(hero, CharacterViewModel.StanceTypes.EmphasizeFace); } return(true); }
public static void Postfix(ref EncyclopediaHeroPageVM __instance) { if (null != ReflectUtils.ReflectField("_hero", __instance)) { Hero hero = (Hero)ReflectUtils.ReflectField("_hero", __instance); string heroOccupationName = CampaignUIHelper.GetHeroOccupationName(hero); if (string.IsNullOrEmpty(heroOccupationName)) { heroOccupationName = System.Enum.GetName(typeof(Occupation), hero.CharacterObject.Occupation); string definition3 = GameTexts.FindText("str_enc_sf_occupation", null).ToString(); __instance.Stats.Add(new StringPairItemVM(definition3, heroOccupationName, null)); } } }
public void OnEncyclopediaPageChanged(EncyclopediaPageChangedEvent e) { EncyclopediaData.EncyclopediaPages newPage = e.NewPage; if ((int)newPage != 12) { selectedHeroPage = null; selectedHero = null; if (gauntletLayerTopScreen != null && gauntletLayer != null) { gauntletLayerTopScreen.RemoveLayer(gauntletLayer); if (gauntletMovie != null) { gauntletLayer.ReleaseMovie(gauntletMovie); } gauntletLayerTopScreen = null; gauntletMovie = null; } return; } GauntletEncyclopediaScreenManager gauntletEncyclopediaScreenManager = MapScreen.Instance.EncyclopediaScreenManager as GauntletEncyclopediaScreenManager; if (gauntletEncyclopediaScreenManager == null) { return; } EncyclopediaData encyclopediaData = ReflectUtils.ReflectField <EncyclopediaData>("_encyclopediaData", gauntletEncyclopediaScreenManager); EncyclopediaPageVM encyclopediaPageVM = ReflectUtils.ReflectField <EncyclopediaPageVM>("_activeDatasource", encyclopediaData); selectedHeroPage = (encyclopediaPageVM as EncyclopediaHeroPageVM); if (selectedHeroPage == null) { return; } selectedHero = (selectedHeroPage.Obj as Hero); if (selectedHero == null) { return; } if (gauntletLayer == null) { gauntletLayer = new GauntletLayer(211, "GauntletLayer"); } try { if (viewModel == null) { viewModel = new HeroBuilderVM(delegate(Hero editHero) { InformationManager.DisplayMessage(new InformationMessage(new TextObject("{=CharacterCreation_EditAppearanceForHeroMessage}Entering edit appearance for: ").ToString() + editHero)); }); } viewModel.SetHero(selectedHero); gauntletMovie = gauntletLayer.LoadMovie("HeroEditor", viewModel); gauntletLayerTopScreen = ScreenManager.TopScreen; gauntletLayerTopScreen.AddLayer(gauntletLayer); gauntletLayer.InputRestrictions.SetInputRestrictions(true, InputUsageMask.MouseButtons); // Refresh selectedHeroPage.Refresh(); } catch (Exception ex) { // MessageBox.Show($"Error :\n{ex.Message} \n\n{ex.InnerException?.Message}"); } }