private void Activate() { foreach (Agent agent in this.Mission.Agents) { if (agent.IsHuman) { agent.EquipBanner(Banner.CreateRandomBanner()); agent.UnequipAllAndEquipStones(); } } InformationManager.AddQuickInformation(new TextObject("Konami code!"), 0, null, "event:/mission/tutorial/finish_task"); }
private static void CacheBanners() { //T.Restart(); for (var i = 0; i < 10_000; i++) { // need to cache the banners before CEK adds background colours which // causes custom banners to crash for reasons unknown // have to use a seed because the game hasn't initialized the game's // inefficient but does it really matter for 38ms once at startup Banners.Add(Banner.CreateRandomBanner((int)DateTime.Now.Ticks)); } //Log(T.ElapsedMilliseconds); }
public static Banner SPBannerFor(BasicCultureObject culture, bool isAttacker) { if (culture.BannerKey != null) { return(new Banner(culture.BannerKey, ClothingColor1(culture, isAttacker), ClothingColor2(culture, isAttacker))); } else { var banner = Banner.CreateRandomBanner(); banner.ChangePrimaryColor(ClothingColor1(culture, isAttacker)); banner.ChangeIconColors(ClothingColor2(culture, isAttacker)); return(banner); } }
public static Banner BannerFor(BasicCultureObject culture, bool isAttacker) { if (culture.BannerKey != null) { return(new Banner(culture.BannerKey, BackgroundColor(culture, isAttacker), ForegroundColor(culture, isAttacker))); } else { var banner = Banner.CreateRandomBanner(); banner.ChangePrimaryColor(BackgroundColor(culture, isAttacker)); banner.ChangeIconColors(ForegroundColor(culture, isAttacker)); return(banner); } }
public void AfterStart2() { this._started = true; playerTeamAgents = new List <Agent>(); var scene = this.Mission.Scene; if (this.CaptureTheBannerLordParams.skyBrightness >= 0) { scene.SetSkyBrightness(this.CaptureTheBannerLordParams.skyBrightness); } if (this.CaptureTheBannerLordParams.rainDensity >= 0) { scene.SetRainDensity(this.CaptureTheBannerLordParams.rainDensity); } this.Mission.MissionTeamAIType = Mission.MissionTeamAITypeEnum.FieldBattle; this.Mission.SetMissionMode(MissionMode.Battle, true); var xInterval = this.CaptureTheBannerLordParams.soldierXInterval; var yInterval = this.CaptureTheBannerLordParams.soldierYInterval; var soldiersPerRow = this.CaptureTheBannerLordParams.soldiersPerRow; var startPos = this.CaptureTheBannerLordParams.FormationPosition; var xDir = this.CaptureTheBannerLordParams.formationDirection; var yDir = this.CaptureTheBannerLordParams.formationDirection.LeftVec(); var agentDefaultDir = new TL.Vec2(0, 1); var useFreeCamera = this.CaptureTheBannerLordParams.useFreeCamera; BasicCharacterObject soldierCharacter = this._game.ObjectManager.GetObject <BasicCharacterObject>(this.CaptureTheBannerLordParams.playerSoldierCharacterId); var playerSoldierFormationClass = soldierCharacter.CurrentFormationClass; this.playerTeam = this.Mission.Teams.Add(BattleSideEnum.Attacker, 0xff3f51b5); playerTeam.AddTeamAI(new TeamAIGeneral(this.Mission, playerTeam)); playerTeam.AddTacticOption(new TacticCharge(playerTeam)); // playerTeam.AddTacticOption(new TacticFullScaleAttack(playerTeam)); playerTeam.ExpireAIQuerySystem(); playerTeam.ResetTactic(); this.Mission.PlayerTeam = playerTeam; var playerPosVec2 = startPos + xDir * -10 + yDir * -10; var playerPos = new TL.Vec3(playerPosVec2.x, playerPosVec2.y, 30); if (!useFreeCamera) { var playerMat = TL.Mat3.Identity; playerMat.RotateAboutUp(agentDefaultDir.AngleBetween(xDir)); BasicCharacterObject playerCharacter = this._game.ObjectManager.GetObject <BasicCharacterObject>(this.CaptureTheBannerLordParams.playerCharacterId); AgentBuildData agentBuildData = new AgentBuildData(new BasicBattleAgentOrigin(playerCharacter)) .ClothingColor1(0xff3f51b5) .ClothingColor2(0xff3f51b5) .Banner(Banner.CreateRandomBanner()) .IsFemale(false) .InitialFrame(new TL.MatrixFrame(playerMat, playerPos)); Agent player = this.Mission.SpawnAgent(agentBuildData, false, 0); player.Controller = Agent.ControllerType.Player; player.WieldInitialWeapons(); player.AllowFirstPersonWideRotation(); Mission.MainAgent = player; player.SetTeam(playerTeam, true); playerTeam.GetFormation(playerSoldierFormationClass).PlayerOwner = player; playerTeam.PlayerOrderController.Owner = player; this._playerAgent = player; } else { var c = this.CaptureTheBannerLordParams.playerSoldierCount; if (c <= 0) { this.freeCameraPosition = new TL.Vec3(startPos.x, startPos.y, 30); } else { var rowCount = (c + soldiersPerRow - 1) / soldiersPerRow; var p = startPos + (System.Math.Min(soldiersPerRow, c) - 1) / 2 * yInterval * yDir - rowCount * xInterval * xDir; this.freeCameraPosition = new TL.Vec3(p.x, p.y, 5); } } BasicCharacterObject enemyCharacter = this._game.ObjectManager.GetObject <BasicCharacterObject>(this.CaptureTheBannerLordParams.enemySoldierCharacterId); enemyTeam = this.Mission.Teams.Add(BattleSideEnum.Defender, 0xffff6090); enemyTeam.AddTeamAI(new TeamAIGeneral(this.Mission, enemyTeam)); enemyTeam.AddTacticOption(new TacticCharge(enemyTeam)); // enemyTeam.AddTacticOption(new TacticFullScaleAttack(enemyTeam)); enemyTeam.SetIsEnemyOf(playerTeam, true); playerTeam.SetIsEnemyOf(enemyTeam, true); enemyTeam.ExpireAIQuerySystem(); enemyTeam.ResetTactic(); var enemyFormationClass = enemyCharacter.CurrentFormationClass; var enemyFormation = enemyTeam.GetFormation(FormationClass.Ranged); { float width = this.getInitialFormationWidth(enemyTeam, enemyFormationClass); var centerPos = startPos + yDir * (width / 2) + xDir * this.CaptureTheBannerLordParams.distance; var wp = new WorldPosition(scene, centerPos.ToVec3()); enemyFormation.SetPositioning(wp, -xDir, null); enemyFormation.FormOrder = FormOrder.FormOrderCustom(width); } for (var i = 0; i < this.CaptureTheBannerLordParams.enemySoldierCount; i += 1) { AgentBuildData enemyBuildData = new AgentBuildData(new BasicBattleAgentOrigin(enemyCharacter)) .ClothingColor1(enemyTeam.Color) .ClothingColor2(enemyTeam.Color2) .Banner(enemyTeam.Banner) .Formation(enemyFormation); var agent = this.Mission.SpawnAgent(enemyBuildData); agent.SetTeam(enemyTeam, true); agent.Formation = enemyFormation; agent.SetWatchState(AgentAIStateFlagComponent.WatchState.Alarmed); } { var a = this.Mission.IsOrderShoutingAllowed(); var b = this.Mission.IsAgentInteractionAllowed(); var c = GameNetwork.IsClientOrReplay; var d = playerTeam.PlayerOrderController.Owner == null; ModuleLogger.Log("mission allowed shouting: {0} interaction: {1} {2} {3}", a, b, c, d); } }
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); } }
internal void CECaptorPrisonerRebel(MenuCallbackArgs args) { CEPersistence.animationPlayEvent = false; TroopRoster releasedPrisoners = TroopRoster.CreateDummyTroopRoster(); try { foreach (TroopRosterElement element in MobileParty.MainParty.PrisonRoster.GetTroopRoster()) { if (element.Character.IsHero) { element.Character.HeroObject.ChangeState(Hero.CharacterStates.Active); } } releasedPrisoners.Add(MobileParty.MainParty.PrisonRoster.ToFlattenedRoster()); MobileParty.MainParty.PrisonRoster.Clear(); } catch (Exception) { CECustomHandler.LogToFile("Couldn't find anymore prisoners."); } if (!releasedPrisoners.GetTroopRoster().IsEmpty()) { try { TroopRosterElement leader = releasedPrisoners.GetTroopRoster().FirstOrDefault(hasHero => hasHero.Character.IsHero); Clan clan = null; Settlement nearest = null; MobileParty prisonerParty = null; if (leader.Character != null) { clan = leader.Character.HeroObject.Clan; nearest = SettlementHelper.FindNearestSettlement(settlement => settlement.OwnerClan == clan) ?? SettlementHelper.FindNearestSettlement(settlement => true); prisonerParty = LordPartyComponent.CreateLordParty("CustomPartyCE_" + MBRandom.RandomInt(int.MaxValue), leader.Character.HeroObject, MobileParty.MainParty.Position2D, 0.5f, nearest); } else { clan = Clan.BanditFactions.First(clanLooters => clanLooters.StringId == "looters"); clan.Banner.SetBannerVisual(Banner.CreateRandomBanner().BannerVisual); nearest = SettlementHelper.FindNearestSettlement(settlement => true); prisonerParty = BanditPartyComponent.CreateBanditParty("CustomPartyCE_" + 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.ActualClan = clan; prisonerParty.MemberRoster.Add(releasedPrisoners.ToFlattenedRoster()); prisonerParty.IsActive = true; prisonerParty.HomeSettlement = nearest; prisonerParty.SetMovePatrolAroundPoint(nearest.IsTown ? nearest.GatePosition : nearest.Position2D); if (leader.Character != null) { prisonerParty.Party.Owner = leader.Character.HeroObject; #if BETA prisonerParty.ChangePartyLeader(leader.Character); #else prisonerParty.ChangePartyLeader(leader.Character, true); #endif } else { prisonerParty.Party.Owner = clan.Leader; } prisonerParty.RecentEventsMorale = -100; prisonerParty.Aggressiveness = 0.2f; prisonerParty.InitializePartyTrade(0); Hero.MainHero.HitPoints += 40; CECustomHandler.LogToFile(prisonerParty.Leader.Name.ToString()); PlayerEncounter.RestartPlayerEncounter(MobileParty.MainParty.Party, prisonerParty.Party); GameMenu.SwitchToMenu("encounter"); } catch (Exception) { CECaptorContinue(args); } } else { CECaptorContinue(args); } }
public CustomBattleCombatant[] GetCustomBattleParties( BasicCharacterObject playerCharacter, BasicCharacterObject playerSideGeneralCharacter, BasicCharacterObject enemyCharacter, BasicCultureObject playerFaction, int[] playerNumbers, List <BasicCharacterObject>[] playerTroopSelections, BasicCultureObject enemyFaction, int[] enemyNumbers, List <BasicCharacterObject>[] enemyTroopSelections, bool isPlayerAttacker) { CustomBattleCombatant[] customBattleCombatantArray = new CustomBattleCombatant[2] { new CustomBattleCombatant(new TextObject("{=sSJSTe5p}Player Party"), playerFaction, Banner.CreateRandomBanner()), new CustomBattleCombatant(new TextObject("{=0xC75dN6}Enemy Party"), enemyFaction, Banner.CreateRandomBanner()) }; customBattleCombatantArray[0].Side = isPlayerAttacker ? BattleSideEnum.Attacker : BattleSideEnum.Defender; customBattleCombatantArray[0].AddCharacter(playerCharacter, 1); if (playerSideGeneralCharacter != null) { customBattleCombatantArray[0].AddCharacter(playerSideGeneralCharacter, 1); } customBattleCombatantArray[1].Side = customBattleCombatantArray[0].Side.GetOppositeSide(); customBattleCombatantArray[1].AddCharacter(enemyCharacter, 1); for (int index = 0; index < customBattleCombatantArray.Length; ++index) { this.PopulateListsWithDefaults(ref customBattleCombatantArray[index], index == 0 ? playerNumbers : enemyNumbers, index == 0 ? playerTroopSelections : enemyTroopSelections); } return(customBattleCombatantArray); }