Exemplo n.º 1
0
        public MobileParty CreateMobileParty(Hero leader, TextObject name, Vec2 spawnPosition, Settlement homeSettlement, bool addLeaderToRoster, bool addInitialFood = true)
        {
            var mobileParty = MBObjectManager.Instance.CreateObject <MobileParty>(leader.CharacterObject.StringId + "_" + leader.OwnedParties.Count());

            if (addLeaderToRoster)
            {
                mobileParty.AddElementToMemberRoster(leader.CharacterObject, 1, true);
            }

            name = name ?? MobilePartyHelper.GeneratePartyName(leader.CharacterObject);
            mobileParty.InitializeMobileParty(name, leader.Clan.DefaultPartyTemplate, spawnPosition, 5f, 0.0f, MobileParty.PartyTypeEnum.Default, 0);
            mobileParty.Party.Owner    = leader;
            mobileParty.IsLordParty    = true;
            mobileParty.HomeSettlement = homeSettlement;
            mobileParty.Quartermaster  = leader;
            mobileParty.Party.Visuals.SetMapIconAsDirty();

            if (addInitialFood)
            {
                var foodItem = Campaign.Current.Items.Where(item => item.IsFood).GetRandomElement();
                mobileParty.ItemRoster.AddToCounts(foodItem, new Random().Next(100, 300));
            }

            GetInfo(mobileParty.Party).IsCustomParty = true;
            return(mobileParty);
        }
Exemplo n.º 2
0
        private static void CSAddCompanionAsArmy(int NoToAdd)
        {
            Hero mainhero = Hero.MainHero;

            for (int i = 0; i < NoToAdd; i++)
            {
                string Locculture = CSCharCreationOption.CSOptionSettlement().Culture.StringId;

                CharacterObject wanderer = (from x in CharacterObject.Templates
                                            where x.Occupation == Occupation.Wanderer && (x.Culture.StringId == mainhero.Culture.StringId || x.Culture.StringId == Locculture)
                                            select x).GetRandomElementInefficiently <CharacterObject>();

                Settlement randomElement = (from settlement in Settlement.All
                                            where settlement.Culture == wanderer.Culture && settlement.IsTown
                                            select settlement).GetRandomElementInefficiently <Settlement>();
                Hero hero = HeroCreator.CreateSpecialHero(wanderer, randomElement, null, null, 33);
                Campaign.Current.GetCampaignBehavior <IHeroCreationCampaignBehavior>().DeriveSkillsFromTraits(hero, wanderer);
                GiveGoldAction.ApplyBetweenCharacters(null, hero, 200, true);
                CSSetEquip(hero, 4);
                hero.HasMet = true;
                hero.Clan   = randomElement.OwnerClan;
                hero.ChangeState(Hero.CharacterStates.Active);
                AddCompanionAction.Apply(Clan.PlayerClan, hero);
                AddHeroToPartyAction.Apply(hero, MobileParty.MainParty, true);
                CampaignEventDispatcher.Instance.OnHeroCreated(hero, false);
                bool fromMainclan = true;
                MobilePartyHelper.CreateNewClanMobileParty(hero, mainhero.Clan, out fromMainclan);
            }
        }
Exemplo n.º 3
0
 private void DailyCheckBehaviour(MobileParty mb)
 {
     if (!registeredParties.Contains(mb))
     {
         return;
     }
     if (mb.Ai.AiState == AIState.Undefined || mb.Ai.AiState == AIState.WaitingAtSettlement)
     {
         if (yesterdayIdleParties.Contains(mb))
         {
             Settlement closestHostile = CampaignUtils.GetClosestHostileSettlement(mb);
             if (closestHostile == null)
             {
                 return;
             }
             mb.SetMoveGoToPoint(MobilePartyHelper.FindReachablePointAroundPosition(mb.Party, closestHostile.GatePosition, 10));
             yesterdayIdleParties.Remove(mb);
         }
         else
         {
             yesterdayIdleParties.Add(mb);
         }
     }
     else
     {
         yesterdayIdleParties.Remove(mb);
     }
 }
Exemplo n.º 4
0
 private static void SpawnPartyAtPosition(Hero hero, Vec2 position)
 {
     if (hero.IsActive || !hero.IsAlive)
     {
         return;
     }
     hero.ChangeState(Hero.CharacterStates.Active);
     GiveGoldAction.ApplyBetweenCharacters((Hero)null, hero, 3000, true);
     MobilePartyHelper.SpawnLordParty(hero, position, 0.5f);
 }
Exemplo n.º 5
0
        public static void OnNamingHeroOverPostfix(ClanLordItemVM __instance, string suggestedName)
        {
            if (!CampaignUIHelper.IsStringApplicableForHeroName(suggestedName))
            {
                return;
            }
            Hero selectedHero = __instance.GetHero();

            selectedHero.FirstName = selectedHero.Name;
            if (selectedHero.IsPartyLeader)
            {
                selectedHero.PartyBelongedTo.Name = MobilePartyHelper.GeneratePartyName(selectedHero.CharacterObject);
            }
        }
 private void OnNamingHeroOver(string suggestedName)
 {
     if (CampaignUIHelper.IsStringApplicableForHeroName(suggestedName))
     {
         var currentHero = this.GetHero();
         currentHero.CharacterObject.Name = new TextObject(suggestedName, null);
         this.Name             = suggestedName;
         currentHero.FirstName = currentHero.Name;
         if (currentHero.IsPartyLeader)
         {
             currentHero.PartyBelongedTo.Name = MobilePartyHelper.GeneratePartyName(currentHero.CharacterObject);
         }
     }
 }
Exemplo n.º 7
0
        private void ConsequenceChangeClanLeader()
        {
            newLeader = Hero.OneToOneConversationHero;
            leader    = Hero.MainHero;

            if (newLeader.PartyBelongedTo == null || newLeader != newLeader.PartyBelongedTo.LeaderHero)
            {
                MobilePartyHelper.CreateNewClanMobileParty(newLeader, leader.Clan, out _);
            }

            if (leader.PartyBelongedTo != null && leader.PartyBelongedTo.CurrentSettlement != null)
            {
                EnterSettlementAction.ApplyForParty(newLeader.PartyBelongedTo, leader.PartyBelongedTo.CurrentSettlement);
                LeaveSettlementAction.ApplyForParty(leader.PartyBelongedTo);
            }

            CampaignEvents.TickEvent.AddNonSerializedListener(this, OnChangeClanLeader);
        }
Exemplo n.º 8
0
        public static bool Prefix(ref MobileParty __result, Hero hero,
                                  Vec2 position,
                                  float spawnRadius,
                                  Settlement spawnSettlement)
        {
            MobileParty spawnedParty = MBObjectManager.Instance.CreateObject <MobileParty>(hero.CharacterObject.StringId + "_" + (object)hero.NumberOfCreatedParties);

            ++hero.NumberOfCreatedParties;
            spawnedParty.AddElementToMemberRoster(hero.CharacterObject, 1, true);
            int troopNumberLimit = hero == Hero.MainHero || hero.Clan == Clan.PlayerClan ?
                                   SubModule.Settings.Strategy_ModifyRespawnParty_PlayerPartySizeOnRespawn : SubModule.Settings.Strategy_ModifyRespawnParty_AILordPartySizeOnRespawn;

            if (!Campaign.Current.GameStarted)
            {
                float num = (float)(1.0 - (double)MBRandom.RandomFloat * (double)MBRandom.RandomFloat);
                troopNumberLimit = (int)((double)spawnedParty.Party.PartySizeLimit * (double)num);
            }
            TextObject partyName = MobilePartyHelper.GeneratePartyName((BasicCharacterObject)hero.CharacterObject);

            spawnedParty.InitializeMobileParty(partyName, hero.Clan.DefaultPartyTemplate, position, spawnRadius, 0.0f, MobileParty.PartyTypeEnum.Lord, troopNumberLimit);
            spawnedParty.Party.Owner = hero;
            spawnedParty.IsLordParty = true;
            spawnedParty.Party.Visuals.SetMapIconAsDirty();
            if (spawnSettlement != null)
            {
                spawnedParty.SetMoveGoToSettlement(spawnSettlement);
            }
            spawnedParty.Aggressiveness     = (float)(0.899999976158142 + 0.100000001490116 * (double)hero.GetTraitLevel(DefaultTraits.Valor) - 0.0500000007450581 * (double)hero.GetTraitLevel(DefaultTraits.Mercy));
            hero.PassedTimeAtHomeSettlement = (float)(int)((double)MBRandom.RandomFloat * 100.0);
            if (spawnSettlement != null)
            {
                spawnedParty.Ai.SetAIState(AIState.VisitingNearbyTown, (PartyBase)null);
                spawnedParty.SetMoveGoToSettlement(spawnSettlement);
            }

            // CampaignEventDispatcher.Instance.OnLordPartySpawned(spawnedParty);
            object[] parametersArray = new object[] { spawnedParty };
            OnLordPartySpawnedMI.Invoke(CampaignEventDispatcher.Instance, parametersArray);

            __result = spawnedParty;

            return(false);
        }
Exemplo n.º 9
0
            public override void OnBeforeSave()
            {
                if (Game.Current == null || !(Game.Current.GameType is Campaign))
                {
                    return;
                }

                //CampaignTime deltaTime = CampaignTime.Now - TimeSinceLastSave;
                CampaignTime deltaTime = GetDeltaTime(true);

                //double yearsElapsed = deltaTime.ToYears;
                //TimeSinceLastSave = CampaignTime.Now;

                foreach (Hero hero in Game.Current.ObjectManager.GetObjectTypeList <Hero>())
                {
                    hero.FirstName = hero.Name;
                    if (hero.IsPartyLeader)
                    {
                        hero.PartyBelongedTo.Name = MobilePartyHelper.GeneratePartyName(hero.CharacterObject);
                    }

                    //TODO:: Why is this conflicting now???

                    /*ddouble newAge = hero.Age + yearsElapsed;
                     *  DynamicBodyProperties dynamicBodyProperties = new DynamicBodyProperties((float)newAge, hero.Weight, hero.Build);*/

                    DynamicBodyProperties dynamicBodyProperties = new DynamicBodyProperties(hero.Age, hero.Weight, hero.Build);
                    BodyProperties        heroBodyProperties    = new BodyProperties(dynamicBodyProperties, hero.BodyProperties.StaticProperties);
                    //BodyProperties heroBodyProperties = hero.BodyProperties;
                    //CharacterBodyManager.CopyDynamicBodyProperties(dynamicBodyProperties, heroBodyProperties.DynamicProperties);
                    hero.CharacterObject.UpdatePlayerCharacterBodyProperties(heroBodyProperties, hero.IsFemale);

                    if (hero.IsHumanPlayerCharacter && DCCSettingsUtil.Instance.DebugMode)
                    {
                        InformationManager.DisplayMessage(new InformationMessage(GetFormattedAgeDebugMessage(hero, hero.Age), ColorManager.Red));
                    }
                }
            }
Exemplo n.º 10
0
        private void RenameHero(string heroName)
        {
            if (selectedHero.CharacterObject == null)
            {
                return;
            }

            if (!string.IsNullOrEmpty(heroName))
            {
                var newName = new TextObject(heroName);
                selectedHero.Name      = newName;
                selectedHero.FirstName = newName;
                if (selectedHero.IsPartyLeader)
                {
                    selectedHero.PartyBelongedTo.Name = MobilePartyHelper.GeneratePartyName(selectedHero.CharacterObject);
                }
                ClosePage();
            }
            else
            {
                return;
            }
        }
        private static void Postfix(Hero companion, EndCaptivityDetail detail)
        {
            if (companion.Clan != Hero.MainHero.Clan || companion.PartyBelongedTo != null && companion.PartyBelongedTo.Party.Owner == companion || ((companion != null ? companion.getOrder() : (PartyOrder)null) == null || !companion.IsAlive || companion.Clan.CommanderLimit <= companion.Clan.WarParties.Count <MobileParty>((Func <MobileParty, bool>)(p => !p.IsGarrison && !p.IsMilitia && !p.IsVillager && !p.IsCaravan))))
            {
                return;
            }
            companion.ChangeState(Hero.CharacterStates.Active);
            MobilePartyHelper.CreateNewClanMobileParty(companion, companion.Clan, out bool _);
            if (companion.PartyBelongedTo == null)
            {
                return;
            }
            PartyOrder order = companion.getOrder();

            if (order.Behavior == AiBehavior.EscortParty && (double)order.ScoreMinimum > 1.0)
            {
                companion.PartyBelongedTo.SetInititave(0.0f, 1f, CampaignTime.YearsFromNow(100f).RemainingHoursFromNow);
            }
            else
            {
                companion.PartyBelongedTo.SetInititave(order.AttackInitiative, order.AvoidInitiative, CampaignTime.YearsFromNow(100f).RemainingHoursFromNow);
            }
        }
        private static void RenameHero(string heroName, Hero selectedHero, Action action)
        {
            if (selectedHero.CharacterObject == null)
            {
                InformationManager.DisplayMessage(new InformationMessage(HeroBuilderVM.InvalidCharacterText.ToString(), ColorManager.Red));
                return;
            }

            if (!string.IsNullOrEmpty(heroName))
            {
                var newName = new TextObject(heroName);
                selectedHero.Name      = newName;
                selectedHero.FirstName = newName;
                if (selectedHero.IsPartyLeader)
                {
                    selectedHero.PartyBelongedTo.Name = MobilePartyHelper.GeneratePartyName(selectedHero.CharacterObject);
                }
                action?.Invoke();
            }
            else
            {
                InformationManager.DisplayMessage(new InformationMessage(HeroBuilderVM.InvalidNameText.ToString(), ColorManager.Red));
            }
        }