Exemple #1
0
 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();
         }
     }
 }
Exemple #2
0
        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;
            }
        }
Exemple #3
0
 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();
         }
     }
 }
Exemple #4
0
 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);
             }
         }
     }
 }
Exemple #5
0
        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);
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        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);
        }