private static void OnCharacterPortraitPopUpOpened(CharacterObject characterObject) { if (characterObject == null || LocationComplex.Current == null) { return; } Location locationOfCharacter = LocationComplex.Current.GetLocationOfCharacter(characterObject.HeroObject); if (!characterObject.HeroObject.IsPrisoner) { return; } heroToTalk = characterObject.HeroObject; MenuContext menuContext = Campaign.Current.CurrentMenuContext; if (menuContext == null) { return; } GameOverlays.MenuOverlayType menuOverlayType = Campaign.Current.GameMenuManager.GetMenuOverlayType(menuContext); if (menuOverlayType == GameOverlays.MenuOverlayType.SettlementWithCharacters) { // get menu overlay layer, see GauntletMenuOverlayBase; ScreenBase topScreen = ScreenManager.TopScreen; if (topScreen == null) { return; } GauntletLayer gauntletLayer = topScreen.FindLayer <ScreenLayer>("BasicLayer") as GauntletLayer; if (gauntletLayer == null) { return; } // get _moviesAndDatasources, its public // and there will be ViewModel for SettlementMenuOverlayVM; var movieAndDatasource = gauntletLayer._moviesAndDatasources.FirstOrDefault(p => p.Item2 is SettlementMenuOverlayVM); if (movieAndDatasource == null) { return; } SettlementMenuOverlayVM dataSource = movieAndDatasource.Item2 as SettlementMenuOverlayVM; // it has prop ContextList; // you should add new items there, example ExecuteOnSetAsActiveContextMenuItem; GameMenuOverlayActionVM overlayItem = new GameMenuOverlayActionVM( OnTalkToPrisonerAction, GameTexts.FindText("str_menu_overlay_context_list", "Conversation").ToString(), true, 1, // ID for Conversation ""); dataSource.ContextList.Add(overlayItem); } }
private static void OnGameMenuOpened(MenuCallbackArgs menuCallbackArgs) { MenuContext menuContext = menuCallbackArgs.MenuContext; GameOverlays.MenuOverlayType menuOverlayType = Campaign.Current.GameMenuManager.GetMenuOverlayType(menuContext); if (menuOverlayType == GameOverlays.MenuOverlayType.SettlementWithCharacters) { Location lordshall = LocationComplex.Current.GetLocationWithId("lordshall"); if (lordshall == null) { return; } Settlement settlement = Hero.MainHero.CurrentSettlement; if (settlement == null) { return; } IEnumerable <Hero> list = settlement.HeroesWithoutParty.Where(h => h.IsPrisoner); if (list == null) { return; } foreach (Hero hero in list) { Location current = LocationComplex.Current.GetLocationOfCharacter(hero); if (current == lordshall) { continue; } if (current == null) { Tuple <string, Monster> actionSetAndMonster = new Tuple <string, Monster>("as_human_lady", Campaign.Current.HumanMonsterSettlement); AgentData agentData = new AgentData( new SimpleAgentOrigin( hero.CharacterObject, -1, null, default(UniqueTroopDescriptor))).Monster(actionSetAndMonster.Item2).NoHorses(true); lordshall.AddCharacter( new LocationCharacter(agentData, new LocationCharacter.AddBehaviorsDelegate(SandBoxManager.Instance.AgentBehaviorManager.AddFixedCharacterBehaviors), null, true, LocationCharacter.CharacterRelations.Neutral, actionSetAndMonster.Item1, true, true, null, false, false, true)); } else { LocationComplex.Current.ChangeLocation(LocationComplex.Current.GetLocationCharacterOfHero(hero), current, lordshall); } } } if (menuContext.GameMenu.StringId == "town_wait_menus") { if (ZenDzeeRomanceHelper.GetLover(Hero.MainHero, ZenDzeeRomanceHelper.RomanceLevel_Prisoner) != null) { GameMenu.SwitchToMenu("zendzee_town_wait_menus"); } } }