private void DisbandPatrol(MobileParty recruiter) { if (recruiter != null) { RecruiterProperties props = recruiterProperties.FirstOrDefault(prop => prop.party == recruiter); if (props != null && recruiterProperties.Contains(props)) { recruiterProperties.Remove(props); recruiter.RemoveParty(); } } }
private void conversation_patrol_disband_on_consequence() { PartyBase encounteredParty = PlayerEncounter.EncounteredParty; RecruiterProperties props = recruiterProperties.FirstOrDefault(prop => prop.party == encounteredParty.MobileParty); if (props != null) { recruiterProperties.Remove(props); encounteredParty.MobileParty.RemoveParty(); PlayerEncounter.LeaveEncounter = true; } }
private void RecruiterDestroyed(MobileParty recruiter, PartyBase arg2) { if (recruiter != null) { RecruiterProperties props = recruiterProperties.FirstOrDefault(prop => prop.party == recruiter); if (props != null && recruiterProperties.Contains(props)) { InformationManager.DisplayMessage(new InformationMessage("Your recruiter bringing recruits to " + recruiter.Name.ToString().Substring(0, recruiter.Name.ToString().Length - " Recruiter".Length) + " has been killed!", new Color(1f, 0f, 0f))); recruiterProperties.Remove(props); recruiter.RemoveParty(); } } }
private void trackRecruiters() { foreach (PartyBase party in Hero.MainHero.OwnedParties) { if (party.Name.ToString().EndsWith("Recruiter")) { RecruiterProperties recruiterProps = recruiterProperties.FirstOrDefault(prop => prop.party == party.MobileParty); if (recruiterProps == null) { recruiterProps = new RecruiterProperties(); recruiterProps.party = party.MobileParty; recruiterProperties.Add(recruiterProps); } } } }
private Settlement findNearestSettlementWithRecruitableRecruits(MobileParty recruiter) { RecruiterProperties props = recruiterProperties.First(prop => prop.party == recruiter); CultureObject onlyCulture = props.SearchCulture; IEnumerable <Settlement> settlementsWithRecruits; if (onlyCulture != null) { settlementsWithRecruits = Settlement.All. Where(settlement => settlement.GetNumberOfAvailableRecruits() > 0 && !settlement.OwnerClan.IsAtWarWith(Hero.MainHero.Clan) && settlement.Culture.Name.ToString().Equals(onlyCulture.Name.ToString())); } else { settlementsWithRecruits = Settlement.All. Where(settlement => settlement.GetNumberOfAvailableRecruits() > 0 && !settlement.OwnerClan.IsAtWarWith(Hero.MainHero.Clan)); } DefaultPartyWageModel wageModel = new DefaultPartyWageModel(); Settlement nearest = null; float shortestDistance = float.MaxValue; foreach (Settlement settlement in settlementsWithRecruits) { if (!hasSettlementRecruits(settlement, recruiter)) { continue; } Vec2 position = settlement.GatePosition; float distance = position.Distance(recruiter.GetPosition2D); if (distance < shortestDistance) { shortestDistance = distance; nearest = settlement; } } return(nearest); }
public MobileParty spawnRecruiter(Settlement settlement, int cash, RecruiterProperties props) { PartyTemplateObject defaultPartyTemplate = settlement.Culture.DefaultPartyTemplate; int numberOfCreated = defaultPartyTemplate.NumberOfCreated; defaultPartyTemplate.IncrementNumberOfCreated(); MobileParty mobileParty = MBObjectManager.Instance.CreateObject <MobileParty>(settlement.OwnerClan.StringId + "_" + numberOfCreated); TextObject textObject = new TextObject("{RECRUITER_SETTLEMENT_NAME} Recruiter", null); textObject.SetTextVariable("RECRUITER_SETTLEMENT_NAME", settlement.Name); mobileParty.InitializeMobileParty(textObject, defaultPartyTemplate, settlement.GatePosition, 0f, 0f, MobileParty.PartyTypeEnum.Default, 1); mobileParty.PartyTradeGold = cash; this.InitRecruiterParty(mobileParty, textObject, settlement.OwnerClan, settlement); mobileParty.Aggressiveness = 0f; props.party = mobileParty; recruiterProperties.Add(props); mobileParty.SetMoveGoToSettlement(findNearestSettlementWithRecruitableRecruits(mobileParty)); return(mobileParty); }
public void AddRecruiterMenu(CampaignGameStarter obj) { GameMenuOption.OnConditionDelegate hireRecruiterDelegate = delegate(MenuCallbackArgs args) { args.optionLeaveType = GameMenuOption.LeaveType.Recruit; return(Settlement.CurrentSettlement.OwnerClan == Clan.PlayerClan); }; GameMenuOption.OnConsequenceDelegate hireRecruiterConsequenceDelegate = delegate(MenuCallbackArgs args) { GameMenu.SwitchToMenu("recruiter_culture_menu"); }; obj.AddGameMenu("recruiter_culture_menu", "The Chamberlain asks you what culture your recruits should be.", null, GameOverlays.MenuOverlayType.None, GameMenu.MenuFlags.none, null); RecruiterProperties props = new RecruiterProperties(); foreach (CultureObject culture in getPossibleCultures()) { obj.AddGameMenuOption("recruiter_culture_menu", "recruiter_" + culture.GetName().ToString(), culture.GetName().ToString(), delegate(MenuCallbackArgs args) { return(Settlement.All.Count(settlement => settlement.Culture == culture && settlement.OwnerClan != null && !((settlement.OwnerClan.Kingdom != null && settlement.OwnerClan.Kingdom.IsAtWarWith(Hero.MainHero.Clan)) || settlement.OwnerClan.IsAtWarWith(Hero.MainHero.Clan) || (settlement.OwnerClan.Kingdom != null && Hero.MainHero.Clan.Kingdom != null && settlement.OwnerClan.Kingdom.IsAtWarWith(Hero.MainHero.Clan.Kingdom)) ) ) > 0); }, delegate(MenuCallbackArgs args) { props = new RecruiterProperties(); props.SearchCulture = culture; GameMenu.SwitchToMenu("recruiter_pay_menu"); }); } obj.AddGameMenuOption("town_keep", "recruiter_buy_recruiter", "Hire a Recruiter", hireRecruiterDelegate, hireRecruiterConsequenceDelegate, false, 4, false); obj.AddGameMenuOption("castle", "recruiter_buy_recruiter", "Hire a Recruiter", hireRecruiterDelegate, hireRecruiterConsequenceDelegate, false, 4, false); obj.AddGameMenu("recruiter_pay_menu", "The Chamberlain asks you for how many denars he should buy recruits.", null, GameOverlays.MenuOverlayType.None, GameMenu.MenuFlags.none, null); obj.AddGameMenuOption("recruiter_pay_menu", "recruiter_pay_small", "Pay 500.", delegate(MenuCallbackArgs args) { args.optionLeaveType = GameMenuOption.LeaveType.Recruit; string stringId = Settlement.CurrentSettlement.StringId; int cost = 500; bool flag = cost >= Hero.MainHero.Gold; return(!flag); }, delegate(MenuCallbackArgs args) { string stringId = Settlement.CurrentSettlement.StringId; int cost = 500; bool flag = cost <= Hero.MainHero.Gold; if (flag) { GiveGoldAction.ApplyForCharacterToSettlement(Hero.MainHero, Settlement.CurrentSettlement, cost, false); MobileParty item = this.spawnRecruiter(Settlement.CurrentSettlement, cost, props); } GameMenu.SwitchToMenu("castle"); }, false, -1, false); obj.AddGameMenuOption("recruiter_pay_menu", "recruiter_pay_medium", "Pay 1500.", delegate(MenuCallbackArgs args) { args.optionLeaveType = GameMenuOption.LeaveType.Recruit; string stringId = Settlement.CurrentSettlement.StringId; int cost = 1500; bool flag = cost >= Hero.MainHero.Gold; return(!flag); }, delegate(MenuCallbackArgs args) { string stringId = Settlement.CurrentSettlement.StringId; int cost = 1500; bool flag = cost <= Hero.MainHero.Gold; if (flag) { GiveGoldAction.ApplyForCharacterToSettlement(Hero.MainHero, Settlement.CurrentSettlement, cost, false); MobileParty item = this.spawnRecruiter(Settlement.CurrentSettlement, cost, props); } GameMenu.SwitchToMenu("castle"); }, false, -1, false); obj.AddGameMenuOption("recruiter_pay_menu", "recruiter_pay_large", "Pay 3000.", delegate(MenuCallbackArgs args) { args.optionLeaveType = GameMenuOption.LeaveType.Recruit; string stringId = Settlement.CurrentSettlement.StringId; int cost = 3000; bool flag = cost >= Hero.MainHero.Gold; return(!flag); }, delegate(MenuCallbackArgs args) { string stringId = Settlement.CurrentSettlement.StringId; int cost = 3000; bool flag = cost <= Hero.MainHero.Gold; if (flag) { GiveGoldAction.ApplyForCharacterToSettlement(Hero.MainHero, Settlement.CurrentSettlement, cost, false); MobileParty item = this.spawnRecruiter(Settlement.CurrentSettlement, cost, props); } GameMenu.SwitchToMenu("castle"); }, false, -1, false); obj.AddGameMenuOption("recruiter_pay_menu", "recruiter_leave", "Leave", new GameMenuOption.OnConditionDelegate(this.game_menu_just_add_leave_conditional), new GameMenuOption.OnConsequenceDelegate(this.game_menu_switch_to_village_menu), false, -1, false); }