示例#1
0
 public static void StartBattle(PartyBase defenderParty)
 {
     StartBattleAction.Apply(MobileParty.MainParty.Party, defenderParty);
     PlayerEncounter.RestartPlayerEncounter(MobileParty.MainParty.Party, defenderParty, true);
     PlayerEncounter.Update();
     CampaignMission.OpenBattleMission(PlayerEncounter.GetBattleSceneForMapPosition(MobileParty.MainParty.Position2D));
 }
示例#2
0
        private void StartMeeting(Hero hero)
        {
            var heroParty   = hero.PartyBelongedTo?.Party;
            var player      = Hero.MainHero;
            var playerParty = player.PartyBelongedTo?.Party;

            if (!hero.IsWanderer || heroParty != null)
            {
                keepEncounter  = PlayerEncounter.Current;
                keepSettlement = player.PartyBelongedTo.CurrentSettlement;
                if (heroParty == null && hero.CurrentSettlement != null)
                {
                    player.PartyBelongedTo.CurrentSettlement = hero.CurrentSettlement;
                }
                PlayerEncounter.Start();
                PlayerEncounter.Current.SetupFields(playerParty, heroParty ?? playerParty);
                meetingEncounter = PlayerEncounter.Current;
                meetingHero      = hero;

                Campaign.Current.TimeControlMode            = CampaignTimeControlMode.Stop;
                Campaign.Current.CurrentConversationContext = ConversationContext.Default;
                AccessTools.Field(typeof(PlayerEncounter), "_mapEventState").SetValue(PlayerEncounter.Current, PlayerEncounterState.Begin);
                AccessTools.Field(typeof(PlayerEncounter), "_stateHandled").SetValue(PlayerEncounter.Current, true);
                AccessTools.Field(typeof(PlayerEncounter), "_meetingDone").SetValue(PlayerEncounter.Current, true);
            }

            ConversationCharacterData playerCharacterData     = new ConversationCharacterData(CharacterObject.PlayerCharacter, playerParty);
            ConversationCharacterData conversationPartnerData = new ConversationCharacterData(hero.CharacterObject, heroParty);

            CampaignMission.OpenConversationMission(playerCharacterData, conversationPartnerData);
        }
示例#3
0
        internal void CECaptorHuntPrisoners(MenuCallbackArgs args, int amount = 20)
        {
            CEPersistence.animationPlayEvent = false;

            TroopRoster releasedPrisoners = TroopRoster.CreateDummyTroopRoster();

            if (CESettings.Instance != null)
            {
                amount = CESettings.Instance.AmountOfTroopsForHunt;
            }

            try
            {
                for (int i = 0; i < amount; i++)
                {
                    TroopRosterElement test = MobileParty.MainParty.PrisonRoster.GetTroopRoster().Where(troop => !troop.Character.IsHero).GetRandomElementInefficiently();

                    if (test.Character == null)
                    {
                        continue;
                    }

                    MobileParty.MainParty.PrisonRoster.RemoveTroop(test.Character);
                    releasedPrisoners.AddToCounts(test.Character, 1, true);
                }
            }
            catch (Exception)
            {
                CECustomHandler.LogToFile("Couldn't find anymore prisoners.");
            }

            if (!releasedPrisoners.GetTroopRoster().IsEmpty())
            {
                CECaptorContinue(args);

                try
                {
                    Clan clan = Clan.BanditFactions.First(clanLooters => clanLooters.StringId == "looters");
                    clan.Banner.SetBannerVisual(Banner.CreateRandomBanner().BannerVisual);

                    Settlement nearest = SettlementHelper.FindNearestSettlement(settlement => { return(true); });

                    MobileParty prisonerParty = BanditPartyComponent.CreateBanditParty("CustomPartyCE_Hunt_" + MBRandom.RandomInt(int.MaxValue), clan, nearest.Hideout, false);

                    PartyTemplateObject defaultPartyTemplate = clan.DefaultPartyTemplate;

                    prisonerParty.InitializeMobileParty(defaultPartyTemplate, MobileParty.MainParty.Position2D, 0.5f, 0.1f, -1);
                    prisonerParty.SetCustomName(new TextObject("{=CEEVENTS1107}Escaped Captives"));

                    prisonerParty.MemberRoster.Clear();
                    prisonerParty.MemberRoster.Add(releasedPrisoners.ToFlattenedRoster());

                    prisonerParty.RecentEventsMorale = -100;
                    prisonerParty.IsActive           = true;
                    prisonerParty.ActualClan         = clan;
                    prisonerParty.Party.Owner        = clan.Leader;
                    prisonerParty.Party.Visuals.SetMapIconAsDirty();

                    prisonerParty.HomeSettlement = nearest;
                    prisonerParty.InitializePartyTrade(0);

                    Hero.MainHero.HitPoints += 40;


                    CECustomHandler.LogToFile(prisonerParty.Leader.Name.ToString());
                    PlayerEncounter.RestartPlayerEncounter(prisonerParty.Party, MobileParty.MainParty.Party, true);
                    StartBattleAction.Apply(MobileParty.MainParty.Party, prisonerParty.Party);
                    PlayerEncounter.Update();

                    CEPersistence.huntState = CEPersistence.HuntState.StartHunt;
                    CampaignMission.OpenBattleMission(PlayerEncounter.GetBattleSceneForMapPosition(MobileParty.MainParty.Position2D));
                }
                catch (Exception)
                {
                    CECaptorKillPrisoners(args, amount);
                }
            }
            else
            {
                CECaptorContinue(args);
            }
        }
        public IEnumerator RunFetchCampaignMission(string spreadSheetId)
        {
            {
                yield return(StartCoroutine(GetData(spreadSheetId, "CampaignMissions")));

                Debug.Log("FINISH RETRIEVING CAMPAIGN ITEMS FROM GOOGLE");

                if (_spreadSheetResults == null)
                {
                    Debug.Log("NULL RETURN - DESTROYING");
                    Destroy(gameObject);
                    yield break;
                }

                var items = new List <CampaignMission>();
                for (var i = 0; i < _spreadSheetResults.Length; i++)
                {
                    var current      = _spreadSheetResults[i];
                    var campaignItem = new CampaignMission();

                    campaignItem.Id                        = int.Parse(current["Id"].ToString());
                    campaignItem.FilesToOpen               = GetIntList(current, "FilesToOpen");
                    campaignItem.FilesToDecrypt            = GetIntList(current, "FilesToDecrypt");
                    campaignItem.DevicesToConnect          = GetStringHashedList(GetStringList(current, "DevicesToConnect"));
                    campaignItem.DevicesToDecrypt          = GetStringHashedList(GetStringList(current, "DevicesToDecrypt"));
                    campaignItem.SystemVariablesToSet      = GetStringList(current, "SystemVariablesToSet");
                    campaignItem.ProgramsToUnlock          = GetIntList(current, "ProgramsToUnlock");
                    campaignItem.CampaignMissionReward     = GetIntList(current, "CampaignMissionRewards");
                    campaignItem.CampaignMissionToComplete = GetIntList(current, "CampaignMissionToComplete");

                    items.Add(campaignItem);
                }

                var serializedData = JsonConvert.SerializeObject(items,
                                                                 new JsonSerializerSettings()
                {
                    PreserveReferencesHandling = PreserveReferencesHandling.Objects,
                    TypeNameHandling           = TypeNameHandling.All,
                    TypeNameAssemblyFormat     = FormatterAssemblyStyle.Full,
                });

                CreateFile(Alias.Config.CollectionsSavePath, "CampaignMissionsData.txt", serializedData);

                Debug.Log("Finished creating and configuring campaign missions data!");
            }

            {
                yield return(StartCoroutine(GetData(spreadSheetId, "CampaignMissionsRewards")));


                Debug.Log("FINISH RETRIEVING CAMPAIGN ITEMS FROM GOOGLE");

                if (_spreadSheetResults == null)
                {
                    Debug.Log("NULL RETURN - DESTROYING");
                    Destroy(gameObject);
                    yield break;
                }

                var itemsRewards = new List <CampaignMissionReward>();
                for (var i = 0; i < _spreadSheetResults.Length; i++)
                {
                    var current      = _spreadSheetResults[i];
                    var campaignItem = new CampaignMissionReward();

                    campaignItem.Id               = int.Parse(current["Id"].ToString());
                    campaignItem.FilesToUnlock    = GetIntList(current, "FilesToUnlock");
                    campaignItem.DevicesToUnlock  = GetStringHashedList(GetStringList(current, "DevicesToUnlock"));
                    campaignItem.ProgramsToUnlock = GetIntList(current, "ProgramsToUnlock");
                    campaignItem.CommandsToRun    = GetStringList(current, "CommandsToRun");

                    itemsRewards.Add(campaignItem);
                }

                var serializedData = JsonConvert.SerializeObject(itemsRewards,
                                                                 new JsonSerializerSettings()
                {
                    PreserveReferencesHandling = PreserveReferencesHandling.Objects,
                    TypeNameHandling           = TypeNameHandling.All,
                    TypeNameAssemblyFormat     = FormatterAssemblyStyle.Full,
                });

                CreateFile(Alias.Config.CollectionsSavePath, "CampaignMissionsRewardsData.txt", serializedData);
            }

            AssetDatabase.Refresh();
            AssetDatabase.SaveAssets();

            Debug.Log("Finished creating and configuring campaign mission rewards data!");
            DestroyImmediate(gameObject);
        }