001package com.fs.starfarer.api.impl.campaign; 002 003import java.util.ArrayList; 004import java.util.Collections; 005import java.util.HashMap; 006import java.util.HashSet; 007import java.util.Iterator; 008import java.util.LinkedHashSet; 009import java.util.List; 010import java.util.Map; 011import java.util.Random; 012import java.util.Set; 013 014import com.fs.starfarer.api.BaseModPlugin; 015import com.fs.starfarer.api.EveryFrameScript; 016import com.fs.starfarer.api.Global; 017import com.fs.starfarer.api.PluginPick; 018import com.fs.starfarer.api.campaign.CampaignFleetAPI; 019import com.fs.starfarer.api.campaign.CampaignPlugin.PickPriority; 020import com.fs.starfarer.api.campaign.CampaignTerrainAPI; 021import com.fs.starfarer.api.campaign.FactionAPI; 022import com.fs.starfarer.api.campaign.GenericPluginManagerAPI; 023import com.fs.starfarer.api.campaign.JumpPointAPI.JumpDestination; 024import com.fs.starfarer.api.campaign.LocationAPI; 025import com.fs.starfarer.api.campaign.PersonImportance; 026import com.fs.starfarer.api.campaign.PlayerMarketTransaction.TransactionLineItem; 027import com.fs.starfarer.api.campaign.SectorAPI; 028import com.fs.starfarer.api.campaign.SectorEntityToken; 029import com.fs.starfarer.api.campaign.SpecialItemData; 030import com.fs.starfarer.api.campaign.StarSystemAPI; 031import com.fs.starfarer.api.campaign.econ.Industry; 032import com.fs.starfarer.api.campaign.econ.MarketAPI; 033import com.fs.starfarer.api.campaign.econ.MarketAPI.SurveyLevel; 034import com.fs.starfarer.api.campaign.econ.MonthlyReport; 035import com.fs.starfarer.api.campaign.econ.MonthlyReport.FDNode; 036import com.fs.starfarer.api.campaign.events.CampaignEventTarget; 037import com.fs.starfarer.api.campaign.listeners.CoreDiscoverEntityPlugin; 038import com.fs.starfarer.api.campaign.listeners.ListenerManagerAPI; 039import com.fs.starfarer.api.campaign.listeners.TestIndustryOptionProvider; 040import com.fs.starfarer.api.characters.AdminData; 041import com.fs.starfarer.api.characters.ImportantPeopleAPI; 042import com.fs.starfarer.api.characters.MutableCharacterStatsAPI; 043import com.fs.starfarer.api.characters.MutableCharacterStatsAPI.SkillLevelAPI; 044import com.fs.starfarer.api.characters.PersonAPI; 045import com.fs.starfarer.api.characters.SkillsChangeOfficerEffect; 046import com.fs.starfarer.api.characters.SkillsChangeRemoveExcessOPEffect; 047import com.fs.starfarer.api.characters.SkillsChangeRemoveSmodsEffect; 048import com.fs.starfarer.api.characters.SkillsChangeRemoveVentsCapsEffect; 049import com.fs.starfarer.api.combat.ShipAIConfig; 050import com.fs.starfarer.api.combat.ShipAIPlugin; 051import com.fs.starfarer.api.combat.ShipAPI; 052import com.fs.starfarer.api.fleet.FleetMemberAPI; 053import com.fs.starfarer.api.impl.PlayerFleetPersonnelTracker; 054import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.MissionCompletionRep; 055import com.fs.starfarer.api.impl.campaign.DerelictShipEntityPlugin.DerelictShipData; 056import com.fs.starfarer.api.impl.campaign.GateEntityPlugin.GateData; 057import com.fs.starfarer.api.impl.campaign.MilitaryResponseScript.MilitaryResponseParams; 058import com.fs.starfarer.api.impl.campaign.TowCable.TowCableBuff; 059import com.fs.starfarer.api.impl.campaign.abilities.BaseAbilityPlugin; 060import com.fs.starfarer.api.impl.campaign.abilities.BaseDurationAbility; 061import com.fs.starfarer.api.impl.campaign.abilities.BaseToggleAbility; 062import com.fs.starfarer.api.impl.campaign.abilities.DistressCallAbility; 063import com.fs.starfarer.api.impl.campaign.abilities.DistressCallAbility.AbilityUseData; 064import com.fs.starfarer.api.impl.campaign.abilities.DistressCallAbility.DistressCallOutcome; 065import com.fs.starfarer.api.impl.campaign.abilities.DistressCallAbility.DistressResponseData; 066import com.fs.starfarer.api.impl.campaign.abilities.DistressCallResponseAssignmentAI; 067import com.fs.starfarer.api.impl.campaign.abilities.DistressCallResponsePirateAssignmentAI; 068import com.fs.starfarer.api.impl.campaign.abilities.EmergencyBurnAbility; 069import com.fs.starfarer.api.impl.campaign.abilities.FractureJumpAbility; 070import com.fs.starfarer.api.impl.campaign.abilities.GoDarkAbility; 071import com.fs.starfarer.api.impl.campaign.abilities.GraviticScanAbility; 072import com.fs.starfarer.api.impl.campaign.abilities.GraviticScanData; 073import com.fs.starfarer.api.impl.campaign.abilities.GraviticScanData.GSPing; 074import com.fs.starfarer.api.impl.campaign.abilities.InterdictionPulseAbility; 075import com.fs.starfarer.api.impl.campaign.abilities.InterdictionPulseAbility.IPReactionScript; 076import com.fs.starfarer.api.impl.campaign.abilities.RemoteSurveyAbility; 077import com.fs.starfarer.api.impl.campaign.abilities.ScavengeAbility; 078import com.fs.starfarer.api.impl.campaign.abilities.SensorBurstAbility; 079import com.fs.starfarer.api.impl.campaign.abilities.SustainedBurnAbility; 080import com.fs.starfarer.api.impl.campaign.abilities.TransponderAbility; 081import com.fs.starfarer.api.impl.campaign.abilities.ai.BaseAbilityAI; 082import com.fs.starfarer.api.impl.campaign.abilities.ai.EmergencyBurnAbilityAI; 083import com.fs.starfarer.api.impl.campaign.abilities.ai.GoDarkAbilityAI; 084import com.fs.starfarer.api.impl.campaign.abilities.ai.InterdictionPulseAbilityAI; 085import com.fs.starfarer.api.impl.campaign.abilities.ai.SensorBurstAbilityAI; 086import com.fs.starfarer.api.impl.campaign.abilities.ai.SustainedBurnAbilityAI; 087import com.fs.starfarer.api.impl.campaign.abilities.ai.TransponderAbilityAI; 088import com.fs.starfarer.api.impl.campaign.command.WarSimScript; 089import com.fs.starfarer.api.impl.campaign.econ.AbandonedStation; 090import com.fs.starfarer.api.impl.campaign.econ.BaseHazardCondition; 091import com.fs.starfarer.api.impl.campaign.econ.BaseMarketConditionPlugin; 092import com.fs.starfarer.api.impl.campaign.econ.CottageIndustry; 093import com.fs.starfarer.api.impl.campaign.econ.Decivilized; 094import com.fs.starfarer.api.impl.campaign.econ.Dissident; 095import com.fs.starfarer.api.impl.campaign.econ.FoodShortage; 096import com.fs.starfarer.api.impl.campaign.econ.FreeMarket; 097import com.fs.starfarer.api.impl.campaign.econ.Frontier; 098import com.fs.starfarer.api.impl.campaign.econ.Headquarters; 099import com.fs.starfarer.api.impl.campaign.econ.Hydroponics; 100import com.fs.starfarer.api.impl.campaign.econ.LargeRefugeePopulation; 101import com.fs.starfarer.api.impl.campaign.econ.LuddicMajority; 102import com.fs.starfarer.api.impl.campaign.econ.OrbitalBurns; 103import com.fs.starfarer.api.impl.campaign.econ.OrganizedCrime; 104import com.fs.starfarer.api.impl.campaign.econ.Outpost; 105import com.fs.starfarer.api.impl.campaign.econ.Population; 106import com.fs.starfarer.api.impl.campaign.econ.RecentUnrest; 107import com.fs.starfarer.api.impl.campaign.econ.RegionalCapital; 108import com.fs.starfarer.api.impl.campaign.econ.ResourceDepositsCondition; 109import com.fs.starfarer.api.impl.campaign.econ.RuralPolity; 110import com.fs.starfarer.api.impl.campaign.econ.ShipbreakingCenter; 111import com.fs.starfarer.api.impl.campaign.econ.ShippingDisruption; 112import com.fs.starfarer.api.impl.campaign.econ.Smuggling; 113import com.fs.starfarer.api.impl.campaign.econ.StealthMinefields; 114import com.fs.starfarer.api.impl.campaign.econ.SystemBounty; 115import com.fs.starfarer.api.impl.campaign.econ.TradeCenter; 116import com.fs.starfarer.api.impl.campaign.econ.TradeDisruption; 117import com.fs.starfarer.api.impl.campaign.econ.UrbanizedPolity; 118import com.fs.starfarer.api.impl.campaign.econ.ViceDemand; 119import com.fs.starfarer.api.impl.campaign.econ.WorldArid; 120import com.fs.starfarer.api.impl.campaign.econ.WorldBarrenMarginal; 121import com.fs.starfarer.api.impl.campaign.econ.WorldDesert; 122import com.fs.starfarer.api.impl.campaign.econ.WorldIce; 123import com.fs.starfarer.api.impl.campaign.econ.WorldJungle; 124import com.fs.starfarer.api.impl.campaign.econ.WorldTerran; 125import com.fs.starfarer.api.impl.campaign.econ.WorldTundra; 126import com.fs.starfarer.api.impl.campaign.econ.WorldTwilight; 127import com.fs.starfarer.api.impl.campaign.econ.WorldUninhabitable; 128import com.fs.starfarer.api.impl.campaign.econ.WorldWater; 129import com.fs.starfarer.api.impl.campaign.econ.impl.BaseIndustry; 130import com.fs.starfarer.api.impl.campaign.econ.impl.Cryorevival; 131import com.fs.starfarer.api.impl.campaign.econ.impl.Cryorevival.CryosleeperFactor; 132import com.fs.starfarer.api.impl.campaign.econ.impl.Cryosanctum; 133import com.fs.starfarer.api.impl.campaign.econ.impl.Farming; 134import com.fs.starfarer.api.impl.campaign.econ.impl.FuelProduction; 135import com.fs.starfarer.api.impl.campaign.econ.impl.GroundDefenses; 136import com.fs.starfarer.api.impl.campaign.econ.impl.HeavyIndustry; 137import com.fs.starfarer.api.impl.campaign.econ.impl.LightIndustry; 138import com.fs.starfarer.api.impl.campaign.econ.impl.LionsGuardHQ; 139import com.fs.starfarer.api.impl.campaign.econ.impl.MilitaryBase; 140import com.fs.starfarer.api.impl.campaign.econ.impl.Mining; 141import com.fs.starfarer.api.impl.campaign.econ.impl.OrbitalStation; 142import com.fs.starfarer.api.impl.campaign.econ.impl.PlanetaryShield; 143import com.fs.starfarer.api.impl.campaign.econ.impl.PopulationAndInfrastructure; 144import com.fs.starfarer.api.impl.campaign.econ.impl.PopulationAndInfrastructure.CoronalTapFactor; 145import com.fs.starfarer.api.impl.campaign.econ.impl.Refining; 146import com.fs.starfarer.api.impl.campaign.econ.impl.ShipQuality; 147import com.fs.starfarer.api.impl.campaign.econ.impl.Spaceport; 148import com.fs.starfarer.api.impl.campaign.econ.impl.TechMining; 149import com.fs.starfarer.api.impl.campaign.econ.impl.Waystation; 150import com.fs.starfarer.api.impl.campaign.enc.EncounterManager; 151import com.fs.starfarer.api.impl.campaign.enc.StrandedGiveTJScript; 152import com.fs.starfarer.api.impl.campaign.events.BaseEventPlugin; 153import com.fs.starfarer.api.impl.campaign.events.CoreEventProbabilityManager; 154import com.fs.starfarer.api.impl.campaign.events.FactionHostilityEvent; 155import com.fs.starfarer.api.impl.campaign.events.FactionHostilityEvent.FactionHostilityPairKey; 156import com.fs.starfarer.api.impl.campaign.events.FoodShortageEvent; 157import com.fs.starfarer.api.impl.campaign.events.InvestigationEventGoodRepWithOther; 158import com.fs.starfarer.api.impl.campaign.events.InvestigationEventSmugglingV2; 159import com.fs.starfarer.api.impl.campaign.events.OfficerManagerEvent; 160import com.fs.starfarer.api.impl.campaign.events.OfficerManagerEvent.AvailableOfficer; 161import com.fs.starfarer.api.impl.campaign.events.PriceUpdate; 162import com.fs.starfarer.api.impl.campaign.events.RecentUnrestEvent; 163import com.fs.starfarer.api.impl.campaign.events.RepTrackerEvent; 164import com.fs.starfarer.api.impl.campaign.events.RepTrackerEvent.FactionTradeRepData; 165import com.fs.starfarer.api.impl.campaign.events.TradeInfoUpdateEvent; 166import com.fs.starfarer.api.impl.campaign.events.nearby.DistressCallNormalAssignmentAI; 167import com.fs.starfarer.api.impl.campaign.events.nearby.DistressCallPirateAmbushAssignmentAI; 168import com.fs.starfarer.api.impl.campaign.events.nearby.DistressCallPirateAmbushTrapAssignmentAI; 169import com.fs.starfarer.api.impl.campaign.events.nearby.NearbyEventsEvent; 170import com.fs.starfarer.api.impl.campaign.events.nearby.NearbyEventsEvent.NESpawnData; 171import com.fs.starfarer.api.impl.campaign.fleets.BaseLimitedFleetManager.ManagedFleetData; 172import com.fs.starfarer.api.impl.campaign.fleets.BaseRouteFleetManager; 173import com.fs.starfarer.api.impl.campaign.fleets.CustomFleets; 174import com.fs.starfarer.api.impl.campaign.fleets.DefaultFleetInflater; 175import com.fs.starfarer.api.impl.campaign.fleets.DefaultFleetInflaterParams; 176import com.fs.starfarer.api.impl.campaign.fleets.DisposableAggroAssignmentAI; 177import com.fs.starfarer.api.impl.campaign.fleets.DisposableFleetManager; 178import com.fs.starfarer.api.impl.campaign.fleets.DisposableLuddicPathFleetManager; 179import com.fs.starfarer.api.impl.campaign.fleets.DisposablePirateFleetManager; 180import com.fs.starfarer.api.impl.campaign.fleets.EconomyFleetAssignmentAI; 181import com.fs.starfarer.api.impl.campaign.fleets.EconomyFleetAssignmentAI.CargoQuantityData; 182import com.fs.starfarer.api.impl.campaign.fleets.EconomyFleetAssignmentAI.EconomyRouteData; 183import com.fs.starfarer.api.impl.campaign.fleets.EconomyFleetRouteManager; 184import com.fs.starfarer.api.impl.campaign.fleets.FleetParamsV3; 185import com.fs.starfarer.api.impl.campaign.fleets.MercAssignmentAIV2; 186import com.fs.starfarer.api.impl.campaign.fleets.MercFleetManagerV2; 187import com.fs.starfarer.api.impl.campaign.fleets.PatrolAssignmentAI; 188import com.fs.starfarer.api.impl.campaign.fleets.PatrolAssignmentAIV4; 189import com.fs.starfarer.api.impl.campaign.fleets.PatrolFleetManager; 190import com.fs.starfarer.api.impl.campaign.fleets.PatrolFleetManager.PatrolFleetData; 191import com.fs.starfarer.api.impl.campaign.fleets.PatrolFleetManagerV2; 192import com.fs.starfarer.api.impl.campaign.fleets.PersonalFleetHoracioCaden; 193import com.fs.starfarer.api.impl.campaign.fleets.PersonalFleetOxanaHyder; 194import com.fs.starfarer.api.impl.campaign.fleets.RouteManager; 195import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.OptionalFleetData; 196import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteData; 197import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteFleetSpawner; 198import com.fs.starfarer.api.impl.campaign.fleets.RouteManager.RouteSegment; 199import com.fs.starfarer.api.impl.campaign.fleets.SDFHegemony; 200import com.fs.starfarer.api.impl.campaign.fleets.SDFLeague; 201import com.fs.starfarer.api.impl.campaign.fleets.SDFLuddicChurch; 202import com.fs.starfarer.api.impl.campaign.fleets.SDFTriTachyon; 203import com.fs.starfarer.api.impl.campaign.fleets.SeededFleetManager; 204import com.fs.starfarer.api.impl.campaign.fleets.SeededFleetManager.SeededFleet; 205import com.fs.starfarer.api.impl.campaign.fleets.SourceBasedFleetManager; 206import com.fs.starfarer.api.impl.campaign.fleets.misc.MiscFleetRouteManager; 207import com.fs.starfarer.api.impl.campaign.ghosts.SensorGhostManager; 208import com.fs.starfarer.api.impl.campaign.graid.StandardGroundRaidObjectivesCreator; 209import com.fs.starfarer.api.impl.campaign.ids.Commodities; 210import com.fs.starfarer.api.impl.campaign.ids.Conditions; 211import com.fs.starfarer.api.impl.campaign.ids.Factions; 212import com.fs.starfarer.api.impl.campaign.ids.Industries; 213import com.fs.starfarer.api.impl.campaign.ids.MemFlags; 214import com.fs.starfarer.api.impl.campaign.ids.Missions; 215import com.fs.starfarer.api.impl.campaign.ids.People; 216import com.fs.starfarer.api.impl.campaign.ids.Personalities; 217import com.fs.starfarer.api.impl.campaign.ids.Ranks; 218import com.fs.starfarer.api.impl.campaign.ids.Skills; 219import com.fs.starfarer.api.impl.campaign.ids.Tags; 220import com.fs.starfarer.api.impl.campaign.intel.AnalyzeEntityIntelCreator; 221import com.fs.starfarer.api.impl.campaign.intel.AnalyzeEntityMissionIntel; 222import com.fs.starfarer.api.impl.campaign.intel.BaseIntelPlugin; 223import com.fs.starfarer.api.impl.campaign.intel.BaseMissionIntel; 224import com.fs.starfarer.api.impl.campaign.intel.BaseMissionIntel.MissionResult; 225import com.fs.starfarer.api.impl.campaign.intel.FactionCommissionIntel; 226import com.fs.starfarer.api.impl.campaign.intel.FactionCommissionIntel.RepChangeData; 227import com.fs.starfarer.api.impl.campaign.intel.FactionHostilityIntel; 228import com.fs.starfarer.api.impl.campaign.intel.FactionHostilityManager; 229import com.fs.starfarer.api.impl.campaign.intel.GenericMissionManager; 230import com.fs.starfarer.api.impl.campaign.intel.PersonBountyIntel; 231import com.fs.starfarer.api.impl.campaign.intel.PersonBountyManager; 232import com.fs.starfarer.api.impl.campaign.intel.ProcurementMissionCreator; 233import com.fs.starfarer.api.impl.campaign.intel.ProcurementMissionIntel; 234import com.fs.starfarer.api.impl.campaign.intel.SurveyPlanetIntelCreator; 235import com.fs.starfarer.api.impl.campaign.intel.SurveyPlanetMissionIntel; 236import com.fs.starfarer.api.impl.campaign.intel.SystemBountyIntel; 237import com.fs.starfarer.api.impl.campaign.intel.SystemBountyManager; 238import com.fs.starfarer.api.impl.campaign.intel.bar.PortsideBarData; 239import com.fs.starfarer.api.impl.campaign.intel.bar.events.BarEventManager; 240import com.fs.starfarer.api.impl.campaign.intel.bar.events.CorruptPLClerkSuppliesBarEvent; 241import com.fs.starfarer.api.impl.campaign.intel.bar.events.CorruptPLClerkSuppliesBarEventCreator; 242import com.fs.starfarer.api.impl.campaign.intel.bar.events.DeliveryBarEvent; 243import com.fs.starfarer.api.impl.campaign.intel.bar.events.DeliveryBarEventCreator; 244import com.fs.starfarer.api.impl.campaign.intel.bar.events.DeliveryFailureConsequences; 245import com.fs.starfarer.api.impl.campaign.intel.bar.events.DeliveryMissionIntel; 246import com.fs.starfarer.api.impl.campaign.intel.bar.events.DiktatLobsterBarEvent; 247import com.fs.starfarer.api.impl.campaign.intel.bar.events.DiktatLobsterBarEventCreator; 248import com.fs.starfarer.api.impl.campaign.intel.bar.events.LuddicCraftBarEvent; 249import com.fs.starfarer.api.impl.campaign.intel.bar.events.LuddicCraftBarEventCreator; 250import com.fs.starfarer.api.impl.campaign.intel.bar.events.LuddicFarmerBarEvent; 251import com.fs.starfarer.api.impl.campaign.intel.bar.events.LuddicFarmerBarEventCreator; 252import com.fs.starfarer.api.impl.campaign.intel.bar.events.LuddicPathBaseBarEvent; 253import com.fs.starfarer.api.impl.campaign.intel.bar.events.MercsOnTheRunBarEvent; 254import com.fs.starfarer.api.impl.campaign.intel.bar.events.MercsOnTheRunBarEventCreator; 255//import com.fs.starfarer.api.impl.campaign.intel.bar.events.MercsOnTheRunBarEventCreator; 256import com.fs.starfarer.api.impl.campaign.intel.bar.events.PirateBaseRumorBarEvent; 257import com.fs.starfarer.api.impl.campaign.intel.bar.events.PlanetaryShieldBarEventCreator; 258import com.fs.starfarer.api.impl.campaign.intel.bar.events.QuartermasterCargoSwapBarEvent; 259import com.fs.starfarer.api.impl.campaign.intel.bar.events.QuartermasterCargoSwapBarEventCreator; 260import com.fs.starfarer.api.impl.campaign.intel.bar.events.ScientistAICoreBarEvent; 261import com.fs.starfarer.api.impl.campaign.intel.bar.events.ScientistAICoreBarEventCreator; 262import com.fs.starfarer.api.impl.campaign.intel.bar.events.ScientistAICoreIntel; 263import com.fs.starfarer.api.impl.campaign.intel.bar.events.SpecBarEventCreator; 264import com.fs.starfarer.api.impl.campaign.intel.bar.events.TriTachLoanBarEvent; 265import com.fs.starfarer.api.impl.campaign.intel.bar.events.TriTachLoanBarEventCreator; 266import com.fs.starfarer.api.impl.campaign.intel.bar.events.TriTachLoanIncentiveScript; 267import com.fs.starfarer.api.impl.campaign.intel.bar.events.TriTachMajorLoanBarEvent; 268import com.fs.starfarer.api.impl.campaign.intel.bar.events.TriTachMajorLoanBarEventCreator; 269import com.fs.starfarer.api.impl.campaign.intel.bar.events.historian.DonationOfferCreator; 270import com.fs.starfarer.api.impl.campaign.intel.bar.events.historian.FighterBlueprintOfferCreator; 271import com.fs.starfarer.api.impl.campaign.intel.bar.events.historian.HistorianBarEvent; 272import com.fs.starfarer.api.impl.campaign.intel.bar.events.historian.HistorianBarEventCreator; 273import com.fs.starfarer.api.impl.campaign.intel.bar.events.historian.HistorianData; 274import com.fs.starfarer.api.impl.campaign.intel.bar.events.historian.ShipBlueprintOfferCreator; 275import com.fs.starfarer.api.impl.campaign.intel.bar.events.historian.SpecialItemOfferCreator; 276import com.fs.starfarer.api.impl.campaign.intel.bar.events.historian.WeaponBlueprintOffer; 277import com.fs.starfarer.api.impl.campaign.intel.bar.events.historian.WeaponBlueprintOfferCreator; 278import com.fs.starfarer.api.impl.campaign.intel.bases.LuddicPathBaseIntel; 279import com.fs.starfarer.api.impl.campaign.intel.bases.LuddicPathBaseManager; 280import com.fs.starfarer.api.impl.campaign.intel.bases.LuddicPathCells; 281import com.fs.starfarer.api.impl.campaign.intel.bases.LuddicPathCellsIntel; 282import com.fs.starfarer.api.impl.campaign.intel.bases.PirateActivity; 283import com.fs.starfarer.api.impl.campaign.intel.bases.PirateActivityIntel; 284import com.fs.starfarer.api.impl.campaign.intel.bases.PirateBaseIntel; 285import com.fs.starfarer.api.impl.campaign.intel.bases.PirateBaseIntel.BaseBountyData; 286import com.fs.starfarer.api.impl.campaign.intel.bases.PirateBaseManager; 287import com.fs.starfarer.api.impl.campaign.intel.bases.PlayerRelatedPirateBaseManager; 288import com.fs.starfarer.api.impl.campaign.intel.contacts.ContactIntel; 289import com.fs.starfarer.api.impl.campaign.intel.deciv.DecivIntel; 290import com.fs.starfarer.api.impl.campaign.intel.deciv.DecivTracker; 291import com.fs.starfarer.api.impl.campaign.intel.deciv.DecivTracker.MarketDecivData; 292import com.fs.starfarer.api.impl.campaign.intel.events.BaseEventIntel; 293import com.fs.starfarer.api.impl.campaign.intel.events.BaseEventIntel.EventStageData; 294import com.fs.starfarer.api.impl.campaign.intel.events.CommerceBountyManager; 295import com.fs.starfarer.api.impl.campaign.intel.events.DisposableHostileActivityFleetManager; 296import com.fs.starfarer.api.impl.campaign.intel.events.HostileActivityEventIntel; 297import com.fs.starfarer.api.impl.campaign.intel.events.HostileActivityManager; 298import com.fs.starfarer.api.impl.campaign.intel.events.ht.HTFactorTracker; 299import com.fs.starfarer.api.impl.campaign.intel.inspection.HegemonyInspectionManager; 300import com.fs.starfarer.api.impl.campaign.intel.misc.BreadcrumbIntel; 301import com.fs.starfarer.api.impl.campaign.intel.misc.BreadcrumbIntelV2; 302import com.fs.starfarer.api.impl.campaign.intel.misc.CargoPodsIntel; 303import com.fs.starfarer.api.impl.campaign.intel.misc.CommSnifferIntel; 304import com.fs.starfarer.api.impl.campaign.intel.misc.CryosleeperIntel; 305import com.fs.starfarer.api.impl.campaign.intel.misc.DistressCallIntel; 306import com.fs.starfarer.api.impl.campaign.intel.misc.GateIntel; 307import com.fs.starfarer.api.impl.campaign.intel.misc.HypershuntIntel; 308import com.fs.starfarer.api.impl.campaign.intel.misc.LuddicShrineIntel; 309import com.fs.starfarer.api.impl.campaign.intel.misc.ProductionReportIntel; 310import com.fs.starfarer.api.impl.campaign.intel.misc.RemnantNexusIntel; 311import com.fs.starfarer.api.impl.campaign.intel.misc.SalvorsTallyIntel; 312import com.fs.starfarer.api.impl.campaign.intel.misc.SimUpdateIntel; 313import com.fs.starfarer.api.impl.campaign.intel.misc.TradeFleetDepartureIntel; 314import com.fs.starfarer.api.impl.campaign.intel.misc.WarningBeaconIntel; 315import com.fs.starfarer.api.impl.campaign.intel.misc.WormholeIntel; 316import com.fs.starfarer.api.impl.campaign.intel.punitive.PunitiveExpeditionManager; 317import com.fs.starfarer.api.impl.campaign.intel.punitive.PunitiveExpeditionManager.PunExData; 318import com.fs.starfarer.api.impl.campaign.intel.raid.RaidIntel; 319import com.fs.starfarer.api.impl.campaign.missions.DelayedFleetEncounter; 320import com.fs.starfarer.api.impl.campaign.missions.academy.GAAtTheGates; 321import com.fs.starfarer.api.impl.campaign.missions.academy.GATransverseJump; 322import com.fs.starfarer.api.impl.campaign.missions.cb.BaseCustomBounty; 323import com.fs.starfarer.api.impl.campaign.missions.cb.BaseCustomBounty.AggregateBountyData; 324import com.fs.starfarer.api.impl.campaign.missions.hub.BaseHubMission; 325import com.fs.starfarer.api.impl.campaign.missions.hub.BaseHubMission.DefeatTriggerAdded; 326import com.fs.starfarer.api.impl.campaign.missions.hub.BaseHubMission.ImportanceData; 327import com.fs.starfarer.api.impl.campaign.missions.hub.BaseHubMission.StageConnection; 328import com.fs.starfarer.api.impl.campaign.missions.hub.BaseHubMission.StageData; 329import com.fs.starfarer.api.impl.campaign.missions.hub.BaseHubMission.VariableSet; 330import com.fs.starfarer.api.impl.campaign.missions.hub.BaseHubMissionCreator; 331import com.fs.starfarer.api.impl.campaign.missions.hub.BaseMissionHub; 332import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionBarEventWrapper; 333import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers; 334import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.MakeNonStoryCriticalAction; 335import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.SetFleetFlagAction; 336import com.fs.starfarer.api.impl.campaign.missions.hub.MissionFleetAutoDespawn; 337import com.fs.starfarer.api.impl.campaign.missions.hub.MissionTrigger; 338import com.fs.starfarer.api.impl.campaign.missions.hub.TriggerFleetAssignmentAI; 339import com.fs.starfarer.api.impl.campaign.plog.OfficerSkillGainRecord; 340import com.fs.starfarer.api.impl.campaign.plog.PLStatCargo; 341import com.fs.starfarer.api.impl.campaign.plog.PLStatColonies; 342import com.fs.starfarer.api.impl.campaign.plog.PLStatCredits; 343import com.fs.starfarer.api.impl.campaign.plog.PLStatCrew; 344import com.fs.starfarer.api.impl.campaign.plog.PLStatFleet; 345import com.fs.starfarer.api.impl.campaign.plog.PLStatFuel; 346import com.fs.starfarer.api.impl.campaign.plog.PLStatLevel; 347import com.fs.starfarer.api.impl.campaign.plog.PLStatMarines; 348import com.fs.starfarer.api.impl.campaign.plog.PLStatSupplies; 349import com.fs.starfarer.api.impl.campaign.plog.PLTextEntry; 350import com.fs.starfarer.api.impl.campaign.plog.PlaythroughLog; 351import com.fs.starfarer.api.impl.campaign.plog.SModRecord; 352import com.fs.starfarer.api.impl.campaign.procgen.DefenderDataOverride; 353import com.fs.starfarer.api.impl.campaign.procgen.ProcgenUsedNames; 354import com.fs.starfarer.api.impl.campaign.procgen.SectorProcGen; 355import com.fs.starfarer.api.impl.campaign.procgen.StarSystemGenerator; 356import com.fs.starfarer.api.impl.campaign.procgen.themes.BaseAssignmentAI; 357import com.fs.starfarer.api.impl.campaign.procgen.themes.OmegaOfficerGeneratorPlugin; 358import com.fs.starfarer.api.impl.campaign.procgen.themes.PKDefenderPluginImpl; 359import com.fs.starfarer.api.impl.campaign.procgen.themes.RemnantAssignmentAI; 360import com.fs.starfarer.api.impl.campaign.procgen.themes.RemnantOfficerGeneratorPlugin; 361import com.fs.starfarer.api.impl.campaign.procgen.themes.RemnantSeededFleetManager; 362import com.fs.starfarer.api.impl.campaign.procgen.themes.RemnantSeededFleetManager.RemnantFleetInteractionConfigGen; 363import com.fs.starfarer.api.impl.campaign.procgen.themes.RemnantStationFleetManager; 364import com.fs.starfarer.api.impl.campaign.procgen.themes.RemnantThemeGenerator.RemnantStationInteractionConfigGen; 365import com.fs.starfarer.api.impl.campaign.procgen.themes.RouteFleetAssignmentAI; 366import com.fs.starfarer.api.impl.campaign.procgen.themes.RuinsFleetRouteManager; 367import com.fs.starfarer.api.impl.campaign.procgen.themes.ScavengerFleetAssignmentAI; 368import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.SalvageGenFromSeed.SalvageDefenderModificationPluginImpl; 369import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.BaseSalvageSpecial.ExtraSalvage; 370import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.BlueprintSpecial.BlueprintSpecialData; 371import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.BreadcrumbSpecial.BreadcrumbSpecialData; 372import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.CargoManifestSpecial.CargoManifestSpecialData; 373import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.DomainSurveyDerelictSpecial; 374import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.DomainSurveyDerelictSpecial.DomainSurveyDerelictSpecialData; 375import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.DomainSurveyDerelictSpecial.SpecialType; 376import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.ShipRecoverySpecial.PerShipData; 377import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.ShipRecoverySpecial.ShipCondition; 378import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.ShipRecoverySpecial.ShipRecoverySpecialData; 379import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.SleeperPodsSpecial.SleeperPodsSpecialData; 380import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.SleeperPodsSpecial.SleeperSpecialType; 381import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.SurveyDataSpecial.SurveyDataSpecialData; 382import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.SurveyDataSpecial.SurveyDataSpecialType; 383import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.TopographicDataSpecial.TopographicDataSpecialData; 384import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.TransmitterTrapSpecial.TransmitterTrapSpecialData; 385import com.fs.starfarer.api.impl.campaign.shared.CommodityStatTracker.CommodityStats; 386import com.fs.starfarer.api.impl.campaign.shared.PlayerTradeDataForSubmarket; 387import com.fs.starfarer.api.impl.campaign.shared.PlayerTradeProfitabilityData; 388import com.fs.starfarer.api.impl.campaign.shared.PlayerTradeProfitabilityData.CommodityData; 389import com.fs.starfarer.api.impl.campaign.shared.ReputationChangeTracker.ReputationChangeData; 390import com.fs.starfarer.api.impl.campaign.shared.SharedData; 391import com.fs.starfarer.api.impl.campaign.skills.FieldRepairsScript; 392import com.fs.starfarer.api.impl.campaign.submarkets.BlackMarketPlugin; 393import com.fs.starfarer.api.impl.campaign.submarkets.LocalResourcesSubmarketPlugin; 394import com.fs.starfarer.api.impl.campaign.submarkets.OpenMarketPlugin; 395import com.fs.starfarer.api.impl.campaign.terrain.AsteroidBeltTerrainPlugin; 396import com.fs.starfarer.api.impl.campaign.terrain.AsteroidBeltTerrainPlugin.AsteroidBeltParams; 397import com.fs.starfarer.api.impl.campaign.terrain.AsteroidFieldTerrainPlugin; 398import com.fs.starfarer.api.impl.campaign.terrain.AsteroidFieldTerrainPlugin.AsteroidFieldParams; 399import com.fs.starfarer.api.impl.campaign.terrain.AsteroidImpact; 400import com.fs.starfarer.api.impl.campaign.terrain.AsteroidSource; 401import com.fs.starfarer.api.impl.campaign.terrain.AuroraRenderer; 402import com.fs.starfarer.api.impl.campaign.terrain.BaseRingTerrain; 403import com.fs.starfarer.api.impl.campaign.terrain.BaseRingTerrain.RingParams; 404import com.fs.starfarer.api.impl.campaign.terrain.BaseTerrain; 405import com.fs.starfarer.api.impl.campaign.terrain.CRLossPerSecondBuff; 406import com.fs.starfarer.api.impl.campaign.terrain.CRRecoveryBuff; 407import com.fs.starfarer.api.impl.campaign.terrain.DebrisFieldTerrainPlugin; 408import com.fs.starfarer.api.impl.campaign.terrain.DebrisFieldTerrainPlugin.DebrisFieldParams; 409import com.fs.starfarer.api.impl.campaign.terrain.EventHorizonPlugin; 410import com.fs.starfarer.api.impl.campaign.terrain.FlareManager; 411import com.fs.starfarer.api.impl.campaign.terrain.FlareManager.Flare; 412import com.fs.starfarer.api.impl.campaign.terrain.HyperStormBoost; 413import com.fs.starfarer.api.impl.campaign.terrain.HyperspaceTerrainPlugin; 414import com.fs.starfarer.api.impl.campaign.terrain.HyperspaceTerrainPlugin.CellStateTracker; 415import com.fs.starfarer.api.impl.campaign.terrain.MagneticFieldTerrainPlugin; 416import com.fs.starfarer.api.impl.campaign.terrain.MagneticFieldTerrainPlugin.MagneticFieldParams; 417import com.fs.starfarer.api.impl.campaign.terrain.MaxBurnBuff; 418import com.fs.starfarer.api.impl.campaign.terrain.NebulaTerrainPlugin; 419import com.fs.starfarer.api.impl.campaign.terrain.PeakPerformanceBuff; 420import com.fs.starfarer.api.impl.campaign.terrain.PulsarBeamTerrainPlugin; 421import com.fs.starfarer.api.impl.campaign.terrain.RadioChatterTerrainPlugin; 422import com.fs.starfarer.api.impl.campaign.terrain.RadioChatterTerrainPlugin.RadioChatterParams; 423import com.fs.starfarer.api.impl.campaign.terrain.RingSystemTerrainPlugin; 424import com.fs.starfarer.api.impl.campaign.terrain.StarCoronaAkaMainyuTerrainPlugin; 425import com.fs.starfarer.api.impl.campaign.terrain.StarCoronaTerrainPlugin; 426import com.fs.starfarer.api.impl.campaign.terrain.StarCoronaTerrainPlugin.CoronaParams; 427import com.fs.starfarer.api.impl.campaign.tutorial.CampaignTutorialScript; 428import com.fs.starfarer.api.impl.campaign.tutorial.CampaignTutorialScript.CampaignTutorialStage; 429import com.fs.starfarer.api.impl.campaign.tutorial.GalatiaMarketScript; 430import com.fs.starfarer.api.impl.campaign.tutorial.GalatianAcademyStipend; 431import com.fs.starfarer.api.impl.campaign.tutorial.RogueMinerMiscFleetManager; 432import com.fs.starfarer.api.impl.campaign.tutorial.SaveNagScript; 433import com.fs.starfarer.api.impl.campaign.tutorial.TutorialLeashAssignmentAI; 434import com.fs.starfarer.api.impl.campaign.tutorial.TutorialMissionEvent.TutorialMissionStage; 435import com.fs.starfarer.api.impl.campaign.tutorial.TutorialMissionIntel; 436import com.fs.starfarer.api.impl.campaign.velfield.BoundingBox; 437import com.fs.starfarer.api.impl.campaign.velfield.SlipstreamManager; 438import com.fs.starfarer.api.impl.campaign.velfield.SlipstreamManager.AddedStream; 439import com.fs.starfarer.api.impl.campaign.velfield.SlipstreamManager.StreamData; 440import com.fs.starfarer.api.impl.campaign.velfield.SlipstreamTerrainPlugin2; 441import com.fs.starfarer.api.impl.campaign.velfield.SlipstreamTerrainPlugin2.SlipstreamParams2; 442import com.fs.starfarer.api.impl.campaign.velfield.SlipstreamTerrainPlugin2.SlipstreamSegment; 443import com.fs.starfarer.api.impl.campaign.velfield.SlipstreamVisibilityManager; 444import com.fs.starfarer.api.impl.campaign.world.GateHaulerLocation; 445import com.fs.starfarer.api.impl.campaign.world.Limbo; 446import com.fs.starfarer.api.impl.campaign.world.NamelessRock; 447import com.fs.starfarer.api.impl.campaign.world.TTBlackSite; 448import com.fs.starfarer.api.impl.campaign.world.TTBlackSite.ZigFIDConfig; 449import com.fs.starfarer.api.impl.campaign.world.ZigLeashAssignmentAI; 450import com.fs.starfarer.api.impl.codex.CodexUnlocker; 451import com.fs.starfarer.api.impl.combat.dweller.ShroudedEjectaAI; 452import com.fs.starfarer.api.impl.combat.dweller.ShroudedVortexAI; 453import com.fs.starfarer.api.impl.combat.threat.DisposableThreatFleetManager; 454import com.fs.starfarer.api.impl.combat.threat.ThreatSwarmAI; 455import com.fs.starfarer.api.loading.CampaignPingSpec; 456import com.fs.starfarer.api.plugins.impl.CoreBuildObjectiveTypePicker; 457import com.fs.starfarer.api.util.DelayedActionScript; 458import com.fs.starfarer.api.util.FaderUtil; 459import com.fs.starfarer.api.util.FlickerUtil; 460import com.fs.starfarer.api.util.IntervalUtil; 461import com.fs.starfarer.api.util.Misc; 462import com.fs.starfarer.api.util.RollingAverageTracker; 463import com.fs.starfarer.api.util.TimeoutTracker; 464import com.fs.starfarer.api.util.TimeoutTracker.ItemData; 465import com.thoughtworks.xstream.XStream; 466 467public class CoreLifecyclePluginImpl extends BaseModPlugin { 468 469 @Override 470 public void onGameLoad(boolean newGame) { 471 econPostSaveRestore(); 472 473// MarketAPI market = Global.getSector().getEconomy().getMarket("eochu_bres"); 474// if (market != null) { 475// PersonAPI person = Global.getFactory().createPerson(); 476// person.setId(People.GLAMOR_ROTANEV); 477// person.setFaction(Factions.TRITACHYON); 478// person.setGender(Gender.FEMALE); 479// person.setRankId(Ranks.SENIOR_EXECUTIVE); 480// person.setPostId(Ranks.POST_INTELLIGENCE_DIRECTOR); 481// person.setImportance(PersonImportance.VERY_HIGH); 482// person.getName().setFirst("Zunya"); 483// person.getName().setLast("Glamor-Rotanev"); 484// person.setPortraitSprite(Global.getSettings().getSpriteName("characters", person.getId())); 485// person.getStats().setSkillLevel(Skills.BULK_TRANSPORT, 1); 486// person.getStats().setSkillLevel(Skills.INDUSTRIAL_PLANNING, 1); 487// person.getStats().setSkillLevel(Skills.OFFICER_MANAGEMENT, 1); 488// person.addTag(Tags.CONTACT_TRADE); 489// person.addTag(Tags.CONTACT_MILITARY); 490// person.setVoice(Voices.BUSINESS); 491// 492// market.getCommDirectory().addPerson(person, 1); // second after Sun 493// market.getCommDirectory().getEntryForPerson(person).setHidden(true); // you'll hear from her people. 494// market.addPerson(person); 495// Global.getSector().getImportantPeople().addPerson(person); 496// } 497 498 499 StarSystemAPI limbo = Global.getSector().getStarSystem("Limbo"); 500 if (limbo == null || !limbo.hasTag(Tags.SYSTEM_ABYSSAL)) { 501 new Limbo().generate(Global.getSector()); 502 new GateHaulerLocation().generate(Global.getSector()); 503 SectorProcGen.clearAbyssalHyperspaceAndSetSystemTags(); 504 } 505 506 if (Global.getSector().getStarSystem("nameless_rock_location") == null) { 507 new NamelessRock().generate(Global.getSector()); 508 } 509 510 // the token replacement generators don't get saved 511 // add them on every game load 512 Global.getSector().getRules().addTokenReplacementGenerator(new CoreRuleTokenReplacementGeneratorImpl()); 513 514 if (!newGame) { 515 addJunk(); 516 regenAsteroids(); 517 } 518 519 addScriptsIfNeeded(); 520 521 verifyFactionData(); 522 523// for (CampaignFleetAPI fleet : Global.getSector().getCurrentLocation().getFleets()) { 524// if (fleet.isPlayerFleet()) continue; 525// VisibilityLevel level = fleet.getVisibilityLevelToPlayerFleet(); 526// if (level == VisibilityLevel.NONE) { 527// fleet.forceSensorFaderBrightness(0f); 528// } 529// } 530 531 convertTo0951aSkillSystemIfNeeded(); 532 533 addMissingPeople(); 534 } 535 536 public static void addMissingPeople() { 537 if (People.getPerson(People.REYNARD_HANNAN) == null) { 538 People.addReynardHannan(); 539 } 540 } 541 542 public static void verifyFactionData() { 543 for (FactionAPI faction : Global.getSector().getAllFactions()) { 544 verifyFactionData(faction); 545 } 546 } 547 548 public static void verifyFactionData(FactionAPI faction) { 549 for (String id : faction.getKnownShips()) { 550 if (Global.getSettings().getHullSpec(id) == null) { 551 throw new RuntimeException("Hull with id [" + id + "] not found for faction [" + faction.getId() + "]"); 552 } 553 } 554 for (String id : faction.getKnownHullMods()) { 555 if (Global.getSettings().getHullModSpec(id) == null) { 556 throw new RuntimeException("Hullmod with id [" + id + "] not found for faction [" + faction.getId() + "]"); 557 } 558 } 559 for (String id : faction.getKnownIndustries()) { 560 if (Global.getSettings().getIndustrySpec(id) == null) { 561 throw new RuntimeException("Industry with id [" + id + "] not found for faction [" + faction.getId() + "]"); 562 } 563 } 564 for (String id : faction.getKnownFighters()) { 565 if (Global.getSettings().getFighterWingSpec(id) == null) { 566 throw new RuntimeException("Fighter wing with id [" + id + "] not found for faction [" + faction.getId() + "]"); 567 } 568 } 569 for (String id : faction.getKnownWeapons()) { 570 if (Global.getSettings().getWeaponSpec(id) == null) { 571 throw new RuntimeException("Weapon with id [" + id + "] not found for faction [" + faction.getId() + "]"); 572 } 573 } 574 575 for (String id : new ArrayList<String>(faction.getDoctrine().getCommanderSkills())) { 576 if (Global.getSettings().getSkillSpec(id) == null) { 577 // making still-useful saves work... 9/15/2020 578 if (id.equals("fighter_doctrine")) { 579 faction.getDoctrine().getCommanderSkills().remove(id); 580 } else { 581 throw new RuntimeException("Commander skill with id [" + id + "] not found for faction [" + faction.getId() + "]"); 582 } 583 } 584 } 585 for (String id : new ArrayList<String>(faction.getDoctrine().getOfficerSkills())) { 586 if (Global.getSettings().getSkillSpec(id) == null) { 587 throw new RuntimeException("Officer skill with id [" + id + "] not found for faction [" + faction.getId() + "]"); 588 } 589 } 590 } 591 592 protected void addScriptsIfNeeded() { 593 ShipQuality.getInstance(); 594 //ConditionManager.getInstance(); 595 596 SectorAPI sector = Global.getSector(); 597 598 599 ListenerManagerAPI listeners = sector.getListenerManager(); 600 601 if (Global.getSettings().isDevMode()) { 602 listeners.addListener(new TestIndustryOptionProvider(), true); 603 } 604 605 if (!listeners.hasListenerOfClass(StandardGroundRaidObjectivesCreator.class)) { 606 listeners.addListener(new StandardGroundRaidObjectivesCreator(), true); 607 } 608// if (!listeners.hasListenerOfClass(FleetLogIntelCreator.class)) { 609// listeners.addListener(new FleetLogIntelCreator(), true); 610// } 611 612 if (!listeners.hasListenerOfClass(CryosleeperFactor.class)) { 613 listeners.addListener(new CryosleeperFactor(), true); 614 } 615 if (!listeners.hasListenerOfClass(CoronalTapFactor.class)) { 616 listeners.addListener(new CoronalTapFactor(), true); 617 } 618 if (!listeners.hasListenerOfClass(SlipstreamVisibilityManager.class)) { 619 listeners.addListener(new SlipstreamVisibilityManager(), true); 620 } 621 if (!listeners.hasListenerOfClass(CodexUnlocker.class)) { 622 listeners.addListener(new CodexUnlocker(), true); 623 } 624 625// if (!sector.hasScript(SlipstreamVisibilityManager.class)) { 626// sector.addScript(new SlipstreamVisibilityManager()); 627// } 628 629 630 GenericPluginManagerAPI plugins = sector.getGenericPlugins(); 631 if (!plugins.hasPlugin(PKDefenderPluginImpl.class)) { 632 plugins.addPlugin(new PKDefenderPluginImpl(), true); 633 } 634 if (!plugins.hasPlugin(SalvageDefenderModificationPluginImpl.class)) { 635 plugins.addPlugin(new SalvageDefenderModificationPluginImpl(), true); 636 } 637 638 CoreDiscoverEntityPlugin discoverPlugin = null; 639 if (!plugins.hasPlugin(CoreDiscoverEntityPlugin.class)) { 640 discoverPlugin = new CoreDiscoverEntityPlugin(); 641 plugins.addPlugin(discoverPlugin, true); 642 } else { 643 discoverPlugin = (CoreDiscoverEntityPlugin) plugins.getPluginsOfClass(CoreDiscoverEntityPlugin.class).get(0); 644 } 645 if (!listeners.hasListenerOfClass(CoreDiscoverEntityPlugin.class)) { 646 listeners.addListener(discoverPlugin, true); 647 } 648 649 650 if (!plugins.hasPlugin(CoreBuildObjectiveTypePicker.class)) { 651 plugins.addPlugin(new CoreBuildObjectiveTypePicker(), true); 652 } 653 if (!plugins.hasPlugin(AbandonMarketPluginImpl.class)) { 654 plugins.addPlugin(new AbandonMarketPluginImpl(), true); 655 } 656 if (!plugins.hasPlugin(StabilizeMarketPluginImpl.class)) { 657 plugins.addPlugin(new StabilizeMarketPluginImpl(), true); 658 } 659 if (!plugins.hasPlugin(RemnantOfficerGeneratorPlugin.class)) { 660 plugins.addPlugin(new RemnantOfficerGeneratorPlugin(), true); 661 } 662 if (!plugins.hasPlugin(OmegaOfficerGeneratorPlugin.class)) { 663 plugins.addPlugin(new OmegaOfficerGeneratorPlugin(), true); 664 } 665// if (!plugins.hasPlugin(PlayerFleetPersonnelTracker.class)) { 666// plugins.addPlugin(new PlayerFleetPersonnelTracker(), false); 667// } 668 669 PlayerFleetPersonnelTracker.getInstance(); 670 HullModItemManager.getInstance(); 671 672 673 if (!sector.hasScript(StrandedGiveTJScript.class)) { 674 sector.addScript(new StrandedGiveTJScript()); 675 } 676 if (!sector.hasScript(PersonalFleetHoracioCaden.class)) { 677 sector.addScript(new PersonalFleetHoracioCaden()); 678 } 679 if (!sector.hasScript(PersonalFleetOxanaHyder.class)) { 680 sector.addScript(new PersonalFleetOxanaHyder()); 681 } 682 if (!sector.hasScript(SDFHegemony.class)) { 683 sector.addScript(new SDFHegemony()); 684 } 685 if (!sector.hasScript(SDFLeague.class)) { 686 sector.addScript(new SDFLeague()); 687 } 688 if (!sector.hasScript(SDFTriTachyon.class)) { 689 sector.addScript(new SDFTriTachyon()); 690 } 691 if (!sector.hasScript(SDFLuddicChurch.class)) { 692 sector.addScript(new SDFLuddicChurch()); 693 } 694// if (!sector.hasScript(PilgrimageFleetRouteManager.class)) { 695// sector.addScript(new PilgrimageFleetRouteManager()); 696// } 697 if (!sector.hasScript(MiscFleetRouteManager.class)) { 698 sector.addScript(new MiscFleetRouteManager()); 699 } 700 if (!sector.hasScript(EncounterManager.class)) { 701 sector.addScript(new EncounterManager()); 702 } 703 if (!sector.hasScript(SlipstreamManager.class)) { 704 sector.addScript(new SlipstreamManager()); 705 } 706 if (!sector.hasScript(SensorGhostManager.class)) { 707 sector.addScript(new SensorGhostManager()); 708 } 709 if (!sector.hasScript(OfficerManagerEvent.class)) { 710 sector.addScript(new OfficerManagerEvent()); 711 } 712 if (!sector.hasScript(FieldRepairsScript.class)) { 713 sector.addScript(new FieldRepairsScript()); 714 } 715 if (!sector.hasScript(WarSimScript.class)) { 716 sector.addScript(new WarSimScript()); 717 } 718 if (!sector.hasScript(PersonBountyManager.class)) { 719 sector.addScript(new PersonBountyManager()); 720 } 721 if (!sector.hasScript(SystemBountyManager.class)) { 722 sector.addScript(new SystemBountyManager()); 723 } 724 725 if (!sector.hasScript(PirateBaseManager.class)) { 726 sector.addScript(new PirateBaseManager()); 727 } 728 if (!sector.hasScript(PlayerRelatedPirateBaseManager.class)) { 729 sector.addScript(new PlayerRelatedPirateBaseManager()); 730 } 731 732 if (!sector.hasScript(LuddicPathBaseManager.class)) { 733 sector.addScript(new LuddicPathBaseManager()); 734 } 735// if (!sector.hasScript(HegemonyInspectionManager.class)) { 736// sector.addScript(new HegemonyInspectionManager()); 737// } 738 if (!sector.hasScript(PunitiveExpeditionManager.class)) { 739 sector.addScript(new PunitiveExpeditionManager()); 740 } 741 if (!sector.hasScript(DecivTracker.class)) { 742 sector.addScript(new DecivTracker()); 743 } 744 745 if (!sector.hasScript(DisposableHostileActivityFleetManager.class)) { 746 sector.addScript(new DisposableHostileActivityFleetManager()); 747 } 748 if (!sector.hasScript(DisposableThreatFleetManager.class)) { 749 sector.addScript(new DisposableThreatFleetManager()); 750 } 751 if (!sector.hasScript(HostileActivityManager.class)) { 752 sector.addScript(new HostileActivityManager()); 753 } 754 if (!sector.hasScript(HTFactorTracker.class)) { 755 sector.addScript(new HTFactorTracker()); 756 } 757 if (!sector.hasScript(CommerceBountyManager.class)) { 758 sector.addScript(new CommerceBountyManager()); 759 } 760 761 if (!sector.hasScript(FactionHostilityManager.class)) { 762 sector.addScript(new FactionHostilityManager()); 763 764 FactionHostilityManager.getInstance().startHostilities(Factions.HEGEMONY, Factions.TRITACHYON); 765 FactionHostilityManager.getInstance().startHostilities(Factions.HEGEMONY, Factions.PERSEAN); 766 FactionHostilityManager.getInstance().startHostilities(Factions.TRITACHYON, Factions.LUDDIC_CHURCH); 767 } 768 769 770 if (!sector.hasScript(GenericMissionManager.class)) { 771 sector.addScript(new GenericMissionManager()); 772 } 773 GenericMissionManager manager = GenericMissionManager.getInstance(); 774// Replaced with bar/contact com.fs.starfarer.api.impl.campaign.missions.ProcurementMission 775// if (!manager.hasMissionCreator(ProcurementMissionCreator.class)) { 776// manager.addMissionCreator(new ProcurementMissionCreator()); 777// } 778 if (!manager.hasMissionCreator(AnalyzeEntityIntelCreator.class)) { 779 manager.addMissionCreator(new AnalyzeEntityIntelCreator()); 780 } 781 if (!manager.hasMissionCreator(SurveyPlanetIntelCreator.class)) { 782 manager.addMissionCreator(new SurveyPlanetIntelCreator()); 783 } 784 785 addBarEvents(); 786 787 if (!sector.hasScript(SmugglingScanScript.class)) { 788 sector.addScript(new SmugglingScanScript()); 789 } 790 if (!sector.hasScript(HasslePlayerScript.class)) { 791 sector.addScript(new HasslePlayerScript()); 792 } 793 794 PlaythroughLog.getInstance(); 795 796 sector.getListenerManager().addListener(new SkillsChangeRemoveExcessOPEffect(), true); 797 sector.getListenerManager().addListener(new SkillsChangeRemoveVentsCapsEffect(), true); 798 sector.getListenerManager().addListener(new SkillsChangeRemoveSmodsEffect(), true); 799 sector.getListenerManager().addListener(new SkillsChangeOfficerEffect(), true); 800 801 } 802 803 protected void addBarEvents() { 804 SectorAPI sector = Global.getSector(); 805 if (!sector.hasScript(PortsideBarData.class)) { 806 sector.addScript(new PortsideBarData()); 807 } 808 if (!sector.hasScript(BarEventManager.class)) { 809 sector.addScript(new BarEventManager()); 810 } 811 812 BarEventManager bar = BarEventManager.getInstance(); 813 if (!bar.hasEventCreator(LuddicFarmerBarEventCreator.class)) { 814 bar.addEventCreator(new LuddicFarmerBarEventCreator()); 815 } 816 if (!bar.hasEventCreator(LuddicCraftBarEventCreator.class)) { 817 bar.addEventCreator(new LuddicCraftBarEventCreator()); 818 } 819 if (!bar.hasEventCreator(DiktatLobsterBarEventCreator.class)) { 820 bar.addEventCreator(new DiktatLobsterBarEventCreator()); 821 } 822 //if (!bar.hasEventCreator(MercsOnTheRunBarEventCreator.class)) { 823 // bar.addEventCreator(new MercsOnTheRunBarEventCreator()); 824 //} 825 if (!bar.hasEventCreator(CorruptPLClerkSuppliesBarEventCreator.class)) { 826 bar.addEventCreator(new CorruptPLClerkSuppliesBarEventCreator()); 827 } 828 if (!bar.hasEventCreator(QuartermasterCargoSwapBarEventCreator.class)) { 829 bar.addEventCreator(new QuartermasterCargoSwapBarEventCreator()); 830 } 831 if (!bar.hasEventCreator(TriTachLoanBarEventCreator.class)) { 832 bar.addEventCreator(new TriTachLoanBarEventCreator()); 833 } 834 if (!bar.hasEventCreator(TriTachMajorLoanBarEventCreator.class)) { 835 bar.addEventCreator(new TriTachMajorLoanBarEventCreator()); 836 } 837 if (!bar.hasEventCreator(ScientistAICoreBarEventCreator.class)) { 838 bar.addEventCreator(new ScientistAICoreBarEventCreator()); 839 } 840 if (!bar.hasEventCreator(DeliveryBarEventCreator.class)) { 841 bar.addEventCreator(new DeliveryBarEventCreator()); 842 } 843 if (!bar.hasEventCreator(PlanetaryShieldBarEventCreator.class)) { 844 bar.addEventCreator(new PlanetaryShieldBarEventCreator()); 845 } 846 if (!bar.hasEventCreator(HistorianBarEventCreator.class)) { 847 bar.addEventCreator(new HistorianBarEventCreator()); 848 } 849 850 } 851 852 @Override 853 public void onNewGame() { 854 junkList.clear(); 855 856 new TTBlackSite().generate(Global.getSector()); 857 new Limbo().generate(Global.getSector()); 858 new GateHaulerLocation().generate(Global.getSector()); 859 // sensor array is added in a procgen system, so have to do it after procgen 860 //new NamelessRock().generate(Global.getSector()); 861 } 862 863 864 @Override 865 public void onNewGameAfterTimePass() { 866 867 // sensor array is added in a procgen system, so have to do it here 868 new NamelessRock().generate(Global.getSector()); 869 870 new CustomFleets().spawn(); 871 872 EveryFrameScript script = new AnalyzeEntityIntelCreator().createMissionIntel(); 873 if (script instanceof BaseIntelPlugin) { 874 ((BaseIntelPlugin)script).setPostingLocation(null); 875 GenericMissionManager.getInstance().addActive(script); 876 } 877 878 script = new SurveyPlanetIntelCreator().createMissionIntel(); 879 if (script instanceof BaseIntelPlugin) { 880 ((BaseIntelPlugin)script).setPostingLocation(null); 881 GenericMissionManager.getInstance().addActive(script); 882 } 883 884 885 886 for (EveryFrameScript s : PersonBountyManager.getInstance().getActive()) { 887 PersonBountyIntel intel = (PersonBountyIntel) s; 888 intel.setElapsedDays(intel.getElapsedDays() * (float) Math.random() * 0.25f); 889 } 890 891 // only leave bounties at ancyra, jangala, and one other market at game start 892 boolean first = true; 893 for (EveryFrameScript s : SystemBountyManager.getInstance().getActive()) { 894 SystemBountyIntel intel = (SystemBountyIntel) s; 895 if (intel.getMarket().getId().equals("ancyra_market") || 896 intel.getMarket().getId().equals("jangala")) { 897 intel.setElapsedDays(intel.getElapsedDays() * (float) Math.random() * 0.25f); 898 continue; 899 } 900 901 if (first) { 902 first = false; 903 intel.setElapsedDays(intel.getElapsedDays() * (float) Math.random() * 0.25f); 904 continue; 905 } 906 907 intel.endImmediately(); 908 } 909 910 911 MarketAPI jangala = Global.getSector().getEconomy().getMarket("jangala"); 912 if (jangala != null) { 913 SystemBountyManager.getInstance().addOrResetBounty(jangala); 914 } 915 916 917// CampaignEventManagerAPI eventManager = Global.getSector().getEventManager(); 918 919 920 921// SectorEntityToken jangalaPlanet = Global.getSector().getEntityById("jangala"); 922// Global.getSector().getMissionBoard().makeAvailableAt(new TestCampaignMission(jangalaPlanet), "jangala"); 923// FactionAPI hegemony = Global.getSector().getFaction(Factions.HEGEMONY); 924// jangalaPlanet.initCommDirectory(); 925// jangalaPlanet.getCommDirectory().addPerson(hegemony.createRandomPerson()); 926// jangalaPlanet.getCommDirectory().addPerson(hegemony.createRandomPerson()); 927// jangalaPlanet.getCommDirectory().addPerson(hegemony.createRandomPerson()); 928// jangalaPlanet.getCommDirectory().addPerson(hegemony.createRandomPerson()); 929 930// WeightedRandomPicker<MarketAPI> picker = new WeightedRandomPicker<MarketAPI>(); 931// for (MarketAPI market : Global.getSector().getEconomy().getMarketsCopy()) { 932// //if (market.getFactionId().equals(Factions.PIRATES)) { 933// if (market.getFaction().getCustom().optBoolean(Factions.CUSTOM_EXEMPT_FOOD_SHORTAGES)) { 934// continue; 935// } 936// EventProbabilityAPI ep = eventManager.getProbability(Events.FOOD_SHORTAGE, market); 937// if (eventManager.isOngoing(ep)) continue; 938// if (ep.getProbability() < 0.05f) continue; 939// 940// picker.add(market, ep.getProbability()); 941// } 942// 943// MarketAPI pick = picker.pick(); 944// if (pick != null) { 945// eventManager.startEvent(new CampaignEventTarget(pick), Events.FOOD_SHORTAGE, null); 946// } 947 948// if (Global.getSettings().getBoolean("runDefaultEasyStartScript") && Misc.isEasy()) { 949// easyStart(); 950// } 951 952// SectorAPI sector = Global.getSector(); 953// if (Global.getSector().isInNewGameAdvance()) return; 954// 955// // teleport player to start on top of the planet 956// SectorEntityToken entity = sector.getEntityById("culann"); 957// CampaignFleetAPI playerFleet = sector.getPlayerFleet(); 958// Vector2f loc = entity.getLocation(); 959// playerFleet.setLocation(loc.x, loc.y); 960 } 961 962// protected void easyStart() { 963// PersonAPI officer = OfficerManagerEvent.createOfficer(Global.getSector().getPlayerFaction(), 1, true); 964// officer.setPersonality(Personalities.CAUTIOUS); 965// CampaignFleetAPI playerFleet = Global.getSector().getPlayerFleet(); 966// playerFleet.getFleetData().addOfficer(officer); 967// for (FleetMemberAPI member : playerFleet.getFleetData().getMembersListCopy()) { 968// if (!member.isFlagship() && member.getCaptain().isDefault()) { 969// member.setCaptain(officer); 970// break; 971// } 972// } 973// } 974 975 @Override 976 public void onNewGameAfterEconomyLoad() { 977 //SharedData.getData().getMarketsWithoutPatrolSpawn().add("jangala"); 978// for (MarketAPI market : Global.getSector().getEconomy().getMarketsCopy()) { 979// SharedData.getData().getMarketsWithoutPatrolSpawn().add(market.getId()); 980// } 981 982 addJunk(); 983 984 // Do not need to regen asteroids - they've already been generated during sector generation 985 // Only need to regenerate on game load, since they're (mostly) not persisted. 986 //regenAsteroids(); 987 988 for (MarketAPI market : Global.getSector().getEconomy().getMarketsCopy()) { 989 //market.getCommDirectory().addMissionBoard(); 990 991 if (market.getContainingLocation() != null && market.getPrimaryEntity() != null) { 992 float radius = 300f + market.getSize() * 200f; 993 market.getContainingLocation().addRadioChatter(market.getPrimaryEntity(), radius); 994 } 995 } 996 997 MarketAPI umbra = Global.getSector().getEconomy().getMarket("umbra"); 998 if (umbra != null && umbra.hasIndustry(Industries.SPACEPORT)) { 999 umbra.getIndustry(Industries.SPACEPORT).setImproved(true); 1000 } 1001 1002 1003 createInitialPeople(); 1004 1005 addScriptsIfNeeded(); 1006 1007 updateKnownPlanets(); 1008 1009 markStoryCriticalMarketsEtc(); 1010 1011 tagLuddicShrines(); 1012 1013// Global.getSector().getStarSystem("hybrasil").getLocation().set(-10000, -10000); 1014// Global.getSector().getHyperspace().updateAllOrbits(); 1015 1016 //addBaseBlueprints(); 1017 } 1018 1019 public void markStoryCriticalMarketsEtc() { 1020 String id = Missions.KALLICHORE; 1021 Misc.makeStoryCritical("eochu_bres", id); 1022 Misc.makeStoryCritical("port_tse", id); 1023 Misc.makeStoryCritical("new_maxios", id); 1024 Misc.makeStoryCritical("coatl", id); 1025 1026 id = Missions.COUREUSE; 1027 Misc.makeStoryCritical("laicaille_habitat", id); 1028 Misc.makeStoryCritical("eochu_bres", id); 1029 Misc.makeStoryCritical("fikenhild", id); 1030 Misc.makeStoryCritical("station_kapteyn", id); 1031 1032 id = Missions.ZIGGURAT; 1033 Misc.makeStoryCritical("culann", id); 1034 Misc.makeStoryCritical("donn", id); 1035 Misc.makeStoryCritical("agreus", id); 1036 Misc.makeStoryCritical("eochu_bres", id); 1037 Misc.makeStoryCritical("port_tse", id); 1038 1039 id = Missions.GATES; 1040 Misc.makeStoryCritical("kazeron", id); 1041 Misc.makeStoryCritical("chicomoztoc", id); 1042 Misc.makeStoryCritical("epiphany", id); 1043 Misc.makeStoryCritical("fikenhild", id); 1044 Misc.makeStoryCritical("kantas_den", id); 1045 1046 id = Missions.THE_USURPERS; 1047 Misc.makeStoryCritical("sindria", id); 1048 Misc.makeStoryCritical("volturn", id); 1049 Misc.makeStoryCritical("umbra", id); 1050 1051 id = Missions.PILGRIMS_PATH; 1052 Misc.makeStoryCritical("jangala", id); 1053 Misc.makeStoryCritical("hesperus", id); 1054 Misc.makeStoryCritical("gilead", id); 1055 Misc.makeStoryCritical("volturn", id); 1056 1057 id = Missions.KNIGHT_ERRANT; 1058 Misc.makeStoryCritical("gilead", id); 1059 Misc.makeStoryCritical("chalcedon", id); 1060 Misc.makeStoryCritical("mazalot", id); 1061 1062 id = Missions.FALSE_IDOLS; 1063 Misc.makeStoryCritical("asher", id); 1064 Misc.makeStoryCritical("chalcedon", id); 1065 Misc.makeStoryCritical("olinadu", id); 1066 Misc.makeStoryCritical("kazeron", id); 1067 Misc.makeStoryCritical("gilead", id); 1068 Misc.makeStoryCritical("hesperus", id); 1069 Misc.makeStoryCritical("tartessus", id); 1070 1071 id = Missions.ABYSSAL_SPACE_ODDITY; 1072 //Misc.makeStoryCritical("galatia_academy", id); // n/a 1073 1074 id = Missions.KANTA_LIBRE; // Like, not a real mission. Yet? Set so Kanta's Den doesn't deciv and break Stuff. -dgb 1075 Misc.makeStoryCritical("kantas_den", id); 1076 } 1077 1078 public void tagLuddicShrines() { 1079 // for LPP missions (and general interest, I'm sure.) 1080 Global.getSector().getEconomy().getMarket("volturn").addTag(Tags.LUDDIC_SHRINE); 1081 Global.getSector().getEconomy().getMarket("hesperus").addTag(Tags.LUDDIC_SHRINE); 1082 Global.getSector().getEconomy().getMarket("gilead").addTag(Tags.LUDDIC_SHRINE); 1083 Global.getSector().getEconomy().getMarket("jangala").addTag(Tags.LUDDIC_SHRINE); 1084 1085 SectorEntityToken beholderStation = Global.getSector().getEntityById("beholder_station"); 1086 if (beholderStation != null) { 1087 beholderStation.addTag(Tags.LUDDIC_SHRINE); 1088 } 1089 1090 SectorEntityToken killa = Global.getSector().getEntityById("killa"); 1091 if (killa != null) { 1092 killa.addTag(Tags.LUDDIC_SHRINE); 1093 } 1094 1095 } 1096 1097// protected void addBaseBlueprints() { 1098// 1099// Set<String> tags = new HashSet<String>(); 1100// tags.add(Items.TAG_BASE_BP); 1101// 1102// List<String> ships = MultiBlueprintItemPlugin.getShipIds(tags); 1103// List<String> weapons = MultiBlueprintItemPlugin.getWeaponIds(tags); 1104// List<String> fighters = MultiBlueprintItemPlugin.getWingIds(tags); 1105// 1106// FactionAPI pf = Global.getSector().getPlayerFaction(); 1107// for (String id : ships) { 1108// pf.addKnownShip(id); 1109// } 1110// for (String id : weapons) { 1111// pf.addKnownWeapon(id); 1112// } 1113// for (String id : fighters) { 1114// pf.addKnownFighter(id); 1115// } 1116// } 1117 1118 protected void updateKnownPlanets() { 1119 //Set<String> seen = new HashSet<String>(); 1120 //Set<SectorEntityToken> gates = new LinkedHashSet<SectorEntityToken>(); 1121 for (MarketAPI market : Global.getSector().getEconomy().getMarketsCopy()) { 1122 if (market.isPlanetConditionMarketOnly()) continue; // shouldn't be in the markets list in this case, but, well. 1123 if (market.getContainingLocation() instanceof StarSystemAPI) { 1124 StarSystemAPI system = (StarSystemAPI) market.getContainingLocation(); 1125 system.setEnteredByPlayer(true); 1126 //String name = system.getName(); 1127 //Misc.setAllPlanetsKnown(system); 1128 Misc.setAllPlanetsSurveyed(system, true); 1129 market.setSurveyLevel(SurveyLevel.FULL); // could also be a station, not a planet 1130 } 1131 1132// for (SectorEntityToken gate : market.getContainingLocation().getEntitiesWithTag(Tags.GATE)) { 1133// gates.add(gate); 1134// } 1135 1136 } 1137 1138 //for (SectorEntityToken gate : gates) { 1139// for (SectorEntityToken gate : Global.getSector().getEntitiesWithTag(Tags.GATE)) { 1140// if (gate.getCustomPlugin() instanceof GateEntityPlugin) { 1141// Global.getSector().getIntelManager().addIntel(new GateIntel(gate), true); 1142// } 1143// } 1144 1145 1146// for (MarketAPI market : Global.getSector().getEconomy().getMarketsCopy()) { 1147// if (market.getContainingLocation() instanceof StarSystemAPI) { 1148// StarSystemAPI system = (StarSystemAPI) market.getContainingLocation(); 1149// CoreScript.markSystemAsEntered(system, false); 1150// } 1151// } 1152 1153 1154 for (StarSystemAPI system : Global.getSector().getStarSystems()) { 1155// if (system.getName().toLowerCase().contains("galatia")) { 1156// System.out.println("wfwefwe234234"); 1157// } 1158 boolean galatia = system.getBaseName().toLowerCase().equals("galatia"); 1159 if (system.getTags().isEmpty() || galatia) { 1160 if (Misc.getMarketsInLocation(system).isEmpty() && !galatia) { 1161 system.addTag(Tags.THEME_CORE_UNPOPULATED); 1162 } else { 1163 system.addTag(Tags.THEME_CORE_POPULATED); 1164 } 1165 system.addTag(Tags.THEME_CORE); 1166 } 1167 } 1168 } 1169 1170 1171 public static void addJunk(MarketAPI market) { 1172 SectorEntityToken entity = market.getPrimaryEntity(); 1173 if (entity == null) return; 1174 LocationAPI location = entity.getContainingLocation(); 1175 if (location == null) return; 1176 1177 int numJunk = 5 + market.getSize() * 5; 1178 if (market.getSize() < 5) { 1179 numJunk = (int) Math.max(1, numJunk * 0.5f); 1180 } 1181 float radius = entity.getRadius() + 100f; 1182 float minOrbitDays = radius / 20; 1183 float maxOrbitDays = minOrbitDays + 10f; 1184 1185 location.addOrbitalJunk(entity, 1186 "orbital_junk", // from custom_entities.json 1187 numJunk, // num of junk 1188 12, 20, // min/max sprite size (assumes square) 1189 radius, // orbit radius 1190 //70, // orbit width 1191 110, // orbit width 1192 minOrbitDays, // min orbit days 1193 maxOrbitDays, // max orbit days 1194 60f, // min spin (degress/day) 1195 360f); // max spin (degrees/day) 1196 } 1197 1198 public static void addRuinsJunk(SectorEntityToken planet) { 1199 boolean r1 = planet.getMarket().hasCondition(Conditions.RUINS_SCATTERED); 1200 boolean r2 = planet.getMarket().hasCondition(Conditions.RUINS_WIDESPREAD); 1201 boolean r3 = planet.getMarket().hasCondition(Conditions.RUINS_EXTENSIVE); 1202 boolean r4 = planet.getMarket().hasCondition(Conditions.RUINS_VAST); 1203 1204 if (!(r1 || r2 || r3 || r4)) return; 1205 1206 int numJunk = 5; 1207 if (r2) numJunk += 5; 1208 if (r3) numJunk += 15; 1209 if (r4) numJunk += 40; 1210 1211 //System.out.println("With ruins: " + planet.getName() + ", " + location.getNameWithLowercaseType()); 1212 1213 float radius = planet.getRadius() + 100f; 1214 float minOrbitDays = radius / 20; 1215 float maxOrbitDays = minOrbitDays + 10f; 1216 1217 planet.getContainingLocation().addOrbitalJunk(planet, 1218 "orbital_junk", // from custom_entities.json 1219 numJunk, // num of junk 1220 12, 20, // min/max sprite size (assumes square) 1221 radius, // orbit radius 1222 //70, // orbit width 1223 110, // orbit width 1224 minOrbitDays, // min orbit days 1225 maxOrbitDays, // max orbit days 1226 60f, // min spin (degress/day) 1227 360f); // max spin (degrees/day) 1228 } 1229 1230 protected void addJunk() { 1231 junkList.clear(); 1232 for (MarketAPI market : Global.getSector().getEconomy().getMarketsCopy()) { 1233 addJunk(market); 1234 } 1235 1236 for (SectorEntityToken planet : Global.getSector().getEntitiesWithTag(Tags.PLANET)) { 1237 LocationAPI location = planet.getContainingLocation(); 1238 if (location == null) continue; 1239 1240 if (planet.getMarket() == null || !planet.getMarket().isPlanetConditionMarketOnly()) continue; 1241 1242 addRuinsJunk(planet); 1243 } 1244 } 1245 1246 protected void regenAsteroids() { 1247 for (LocationAPI loc : Global.getSector().getAllLocations()) { 1248 for (CampaignTerrainAPI terrain : loc.getTerrainCopy()) { 1249 if (terrain.getPlugin() instanceof AsteroidSource) { 1250 AsteroidSource source = (AsteroidSource) terrain.getPlugin(); 1251 source.regenerateAsteroids(); 1252 } 1253 } 1254 } 1255 } 1256 1257 1258 protected Map<SectorEntityToken, LocationAPI> asteroidList = new HashMap<SectorEntityToken, LocationAPI>(); 1259 protected Map<SectorEntityToken, LocationAPI> junkList = new HashMap<SectorEntityToken, LocationAPI>(); 1260 @Override 1261 public void beforeGameSave() { 1262 junkList.clear(); 1263// Set<LocationAPI> seen = new HashSet<LocationAPI>(); 1264// for (MarketAPI market : Global.getSector().getEconomy().getMarketsCopy()) { 1265// LocationAPI loc = market.getContainingLocation(); 1266// if (loc == null || seen.contains(loc)) continue; 1267// seen.add(loc); 1268 for (LocationAPI loc : Global.getSector().getAllLocations()) { 1269 for (SectorEntityToken junk : loc.getEntitiesWithTag(Tags.ORBITAL_JUNK)) { 1270 loc.removeEntity(junk); 1271 junkList.put(junk, loc); 1272 } 1273 } 1274 1275 //int count = 0; 1276 asteroidList.clear(); 1277 for (LocationAPI loc : Global.getSector().getAllLocations()) { 1278 for (SectorEntityToken asteroid : new ArrayList<SectorEntityToken>(loc.getAsteroids())) { 1279 //count++; 1280 AsteroidSource source = Misc.getAsteroidSource(asteroid); 1281 if (source == null || !asteroid.getMemoryWithoutUpdate().isEmpty()) { 1282 if (source != null) { 1283 source.reportAsteroidPersisted(asteroid); 1284 Misc.clearAsteroidSource(asteroid); 1285 } 1286 continue; 1287 } else { 1288 asteroidList.put(asteroid, loc); 1289 loc.removeEntity(asteroid); 1290 } 1291 } 1292 } 1293 //System.out.println("COUNT: " + count); 1294 //Global.getSector().getEntityById(new ArrayList<SectorEntityToken>(asteroidList.keySet()).get(4000).getId()) 1295 econPreSaveCleanup(); 1296 } 1297 1298 1299 protected void econPreSaveCleanup() { 1300 for (MarketAPI market : Global.getSector().getEconomy().getMarketsCopy()) { 1301 for (Industry ind : market.getIndustries()) { 1302 ind.doPreSaveCleanup(); 1303 } 1304 } 1305 } 1306 public static void econPostSaveRestore() { 1307 1308 for (MarketAPI market : Global.getSector().getEconomy().getMarketsCopy()) { 1309 for (Industry ind : market.getIndustries()) { 1310 ind.doPostSaveRestore(); 1311 } 1312 } 1313 1314 for (MarketAPI market : Global.getSector().getEconomy().getMarketsCopy()) { 1315 market.reapplyConditions(); 1316 market.reapplyIndustries(); 1317 } 1318 } 1319 1320 @Override 1321 public void afterGameSave() { 1322 restoreRemovedEntities(); 1323 econPostSaveRestore(); 1324 } 1325 1326 @Override 1327 public void onGameSaveFailed() { 1328 restoreRemovedEntities(); 1329 econPostSaveRestore(); 1330 } 1331 1332 1333 1334 protected void restoreRemovedEntities() { 1335 for (SectorEntityToken junk : junkList.keySet()) { 1336 ((LocationAPI)junkList.get(junk)).addEntity(junk); 1337 } 1338 junkList.clear(); 1339 for (SectorEntityToken asteroid : asteroidList.keySet()) { 1340 ((LocationAPI)asteroidList.get(asteroid)).addEntity(asteroid); 1341 } 1342 asteroidList.clear(); 1343 } 1344 1345 1346 1347 private void initSlipstream() { 1348// for (StarSystemAPI system : Global.getSector().getStarSystems()) { 1349// SectorEntityToken slipstream = system.addTerrain(Terrain.SLIPSTREAM, null); 1350// slipstream.getLocation().set(0, 0); 1351// system.getPersistentData().put(SlipstreamTerrainPlugin.LOCATION_SLIPSTREAM_KEY, slipstream); 1352// } 1353// SectorEntityToken slipstream = Global.getSector().getHyperspace().addTerrain(Terrain.SLIPSTREAM, null); 1354// slipstream.getLocation().set(0, 0); 1355// Global.getSector().getHyperspace().getPersistentData().put(SlipstreamTerrainPlugin.LOCATION_SLIPSTREAM_KEY, slipstream); 1356 } 1357 1358 public static void createInitialPeople(MarketAPI market, Random random) { 1359 ImportantPeopleAPI ip = Global.getSector().getImportantPeople(); 1360 1361 boolean addedPerson = false; 1362 1363 PersonAPI admin = null; 1364 1365 LinkedHashSet<PersonAPI> randomPeople = new LinkedHashSet<PersonAPI>(); 1366 1367 1368 if (market.hasIndustry(Industries.MILITARYBASE) || market.hasIndustry(Industries.HIGHCOMMAND)) { 1369 PersonAPI person = market.getFaction().createRandomPerson(StarSystemGenerator.random); 1370 String rankId = Ranks.GROUND_MAJOR; 1371 if (market.getSize() >= 6) { 1372 rankId = Ranks.GROUND_GENERAL; 1373 } else if (market.getSize() >= 4) { 1374 rankId = Ranks.GROUND_COLONEL; 1375 } 1376 person.setRankId(rankId); 1377 person.setPostId(Ranks.POST_BASE_COMMANDER); 1378 if (market.getSize() >= 8) { 1379 person.setImportanceAndVoice(PersonImportance.VERY_HIGH, StarSystemGenerator.random); 1380 } else if (market.getSize() >= 6) { 1381 person.setImportanceAndVoice(PersonImportance.HIGH, StarSystemGenerator.random); 1382 } else { 1383 person.setImportanceAndVoice(PersonImportance.MEDIUM, StarSystemGenerator.random); 1384 } 1385 person.addTag(Tags.CONTACT_MILITARY); 1386 1387 market.getCommDirectory().addPerson(person); 1388 market.addPerson(person); 1389 ip.addPerson(person); 1390 ip.getData(person).getLocation().setMarket(market); 1391 ip.checkOutPerson(person, "permanent_staff"); 1392 addedPerson = true; 1393 randomPeople.add(person); 1394 } 1395 1396 boolean hasStation = false; 1397 for (Industry curr : market.getIndustries()) { 1398 if (curr.getSpec().hasTag(Industries.TAG_STATION)) { 1399 hasStation = true; 1400 break; 1401 } 1402 } 1403 if (hasStation) { 1404 PersonAPI person = market.getFaction().createRandomPerson(StarSystemGenerator.random); 1405 String rankId = Ranks.SPACE_COMMANDER; 1406 if (market.getSize() >= 6) { 1407 rankId = Ranks.SPACE_ADMIRAL; 1408 } else if (market.getSize() >= 4) { 1409 rankId = Ranks.SPACE_CAPTAIN; 1410 } 1411 person.setRankId(rankId); 1412 person.setPostId(Ranks.POST_STATION_COMMANDER); 1413 1414 if (market.getSize() >= 8) { 1415 person.setImportanceAndVoice(PersonImportance.VERY_HIGH, StarSystemGenerator.random); 1416 } else if (market.getSize() >= 6) { 1417 person.setImportanceAndVoice(PersonImportance.HIGH, StarSystemGenerator.random); 1418 } else { 1419 person.setImportanceAndVoice(PersonImportance.MEDIUM, StarSystemGenerator.random); 1420 } 1421 1422 person.addTag(Tags.CONTACT_MILITARY); 1423 1424 market.getCommDirectory().addPerson(person); 1425 market.addPerson(person); 1426 ip.addPerson(person); 1427 ip.getData(person).getLocation().setMarket(market); 1428 ip.checkOutPerson(person, "permanent_staff"); 1429 addedPerson = true; 1430 randomPeople.add(person); 1431 1432 if (market.getPrimaryEntity().hasTag(Tags.STATION)) { 1433 admin = person; 1434 } 1435 } 1436 1437 if (market.hasSpaceport()) { 1438 PersonAPI person = market.getFaction().createRandomPerson(StarSystemGenerator.random); 1439 //person.setRankId(Ranks.SPACE_CAPTAIN); 1440 person.setPostId(Ranks.POST_PORTMASTER); 1441 1442 if (market.getSize() >= 8) { 1443 person.setImportanceAndVoice(PersonImportance.HIGH, StarSystemGenerator.random); 1444 } else if (market.getSize() >= 6) { 1445 person.setImportanceAndVoice(PersonImportance.MEDIUM, StarSystemGenerator.random); 1446 } else if (market.getSize() >= 4) { 1447 person.setImportanceAndVoice(PersonImportance.LOW, StarSystemGenerator.random); 1448 } else { 1449 person.setImportanceAndVoice(PersonImportance.VERY_LOW, StarSystemGenerator.random); 1450 } 1451 1452 person.addTag(Tags.CONTACT_TRADE); 1453 1454 market.getCommDirectory().addPerson(person); 1455 market.addPerson(person); 1456 ip.addPerson(person); 1457 ip.getData(person).getLocation().setMarket(market); 1458 ip.checkOutPerson(person, "permanent_staff"); 1459 addedPerson = true; 1460 randomPeople.add(person); 1461 } 1462 1463 if (addedPerson) { 1464 PersonAPI person = market.getFaction().createRandomPerson(StarSystemGenerator.random); 1465 person.setRankId(Ranks.SPACE_COMMANDER); 1466 person.setPostId(Ranks.POST_SUPPLY_OFFICER); 1467 1468 if (market.getSize() >= 6) { 1469 person.setImportanceAndVoice(PersonImportance.MEDIUM, StarSystemGenerator.random); 1470 } else if (market.getSize() >= 4) { 1471 person.setImportanceAndVoice(PersonImportance.LOW, StarSystemGenerator.random); 1472 } else { 1473 person.setImportanceAndVoice(PersonImportance.VERY_LOW, StarSystemGenerator.random); 1474 } 1475 1476 person.addTag(Tags.CONTACT_MILITARY); 1477 person.addTag(Tags.CONTACT_TRADE); 1478 if (StarSystemGenerator.random.nextFloat() < 0.2f) { 1479 person.addTag(Tags.CONTACT_UNDERWORLD); 1480 } 1481 1482 market.getCommDirectory().addPerson(person); 1483 market.addPerson(person); 1484 ip.addPerson(person); 1485 ip.getData(person).getLocation().setMarket(market); 1486 ip.checkOutPerson(person, "permanent_staff"); 1487 addedPerson = true; 1488 randomPeople.add(person); 1489 } 1490 1491 if (!addedPerson || admin == null) { 1492 PersonAPI person = market.getFaction().createRandomPerson(StarSystemGenerator.random); 1493 person.setRankId(Ranks.CITIZEN); 1494 person.setPostId(Ranks.POST_ADMINISTRATOR); 1495 1496 if (market.getSize() >= 8) { 1497 person.setImportanceAndVoice(PersonImportance.VERY_HIGH, StarSystemGenerator.random); 1498 } else if (market.getSize() >= 6) { 1499 person.setImportanceAndVoice(PersonImportance.HIGH, StarSystemGenerator.random); 1500 } else { 1501 person.setImportanceAndVoice(PersonImportance.MEDIUM, StarSystemGenerator.random); 1502 } 1503 1504 person.addTag(Tags.CONTACT_TRADE); 1505 1506 market.getCommDirectory().addPerson(person); 1507 market.addPerson(person); 1508 ip.addPerson(person); 1509 ip.getData(person).getLocation().setMarket(market); 1510 ip.checkOutPerson(person, "permanent_staff"); 1511 admin = person; 1512 randomPeople.add(person); 1513 } 1514 1515 if (admin != null) { 1516 addSkillsAndAssignAdmin(market, admin); 1517 } 1518 1519 List<PersonAPI> people = new ArrayList<PersonAPI>(randomPeople); 1520 Iterator<PersonAPI> iter = people.iterator(); 1521 while (iter.hasNext()) { 1522 PersonAPI curr = iter.next(); 1523 if (curr == null || curr.getFaction() == null) { 1524 iter.remove(); 1525 continue; 1526 } 1527 if (curr.isDefault() || curr.isAICore() || curr.isPlayer()) { 1528 iter.remove(); 1529 continue; 1530 } 1531 } 1532 dedupePortraits(people); 1533 } 1534 1535 private void createInitialPeople() { 1536 1537 //List<MarketAPI> withAutoAdmins = new ArrayList<MarketAPI>(); 1538 for (MarketAPI market : Global.getSector().getEconomy().getMarketsCopy()) { 1539 if (market.getMemoryWithoutUpdate().getBoolean(MemFlags.MARKET_DO_NOT_INIT_COMM_LISTINGS)) continue; 1540 createInitialPeople(market, StarSystemGenerator.random); 1541 } 1542 1543 assignCustomAdmins(); 1544 1545 1546// List<PersonAPI> people = new ArrayList<PersonAPI>(randomPeople); 1547// Iterator<PersonAPI> iter = people.iterator(); 1548// while (iter.hasNext()) { 1549// PersonAPI curr = iter.next(); 1550// if (curr == null || curr.getFaction() == null) { 1551// iter.remove(); 1552// continue; 1553// } 1554// if (curr.isDefault() || curr.isAICore() || curr.isPlayer()) { 1555// iter.remove(); 1556// continue; 1557// } 1558// } 1559// 1560// dedupePortraits(people); 1561 1562// List<PersonAPI> admins = new ArrayList<PersonAPI>(); 1563// for (MarketAPI market : withAutoAdmins) { 1564// PersonAPI admin = market.getAdmin(); 1565// if (admin == null || admin.getFaction() == null) continue; 1566// if (admin.isDefault() || admin.isAICore() || admin.isPlayer()) continue; 1567// admins.add(admin); 1568// } 1569// dedupePortraits(admins); 1570 1571 // this assigns faction leaders etc; important that it happen after deduping 1572 // so there's no chance the deduping messes up a custom character's portrait 1573 People.create(); 1574 } 1575 1576 1577 public static void dedupePortraits(List<PersonAPI> people) { 1578 for (int i = 0; i < 10 * people.size(); i++) { 1579 if (hasDuplicatePortraits(people)) { 1580 for (PersonAPI person : people) { 1581// if (person.getNameString().equals("Abasi Ganymede")) { 1582// System.out.println("efwfwef"); 1583// } 1584 if (person.isDefault() || person.isAICore() || person.isPlayer()) continue; 1585 int num = getPortraitCount(people, person); 1586 if (num > 1) { 1587 for (int j = 0; j < 10; j++) { 1588 regenPortrait(person); 1589 num = getPortraitCount(people, person); 1590 if (num <= 1) break; 1591 } 1592 Collections.shuffle(people, StarSystemGenerator.random); 1593 break; 1594 } 1595 } 1596 } 1597 } 1598 } 1599 1600 public static void regenPortrait(PersonAPI person) { 1601 if (person == null || person.getFaction() == null) return; 1602 1603 String curr = person.getPortraitSprite(); 1604 if (curr == null) curr = ""; 1605 for (int i = 0; i < 10; i++) { 1606 String other = person.getFaction().createRandomPerson(person.getGender(), StarSystemGenerator.random).getPortraitSprite(); 1607 if (!curr.equals(other)) { 1608 person.setPortraitSprite(other); 1609 break; 1610 } 1611 } 1612 } 1613 1614 public static int getPortraitCount(List<PersonAPI> people, PersonAPI person) { 1615 String curr = person.getPortraitSprite(); 1616 int count = 0; 1617 for (PersonAPI other : people) { 1618 String str = other.getPortraitSprite(); 1619 if (str == null) continue; 1620 if (curr.equals(str)) count++; 1621 } 1622 return count; 1623 } 1624 1625 public static boolean hasDuplicatePortraits(List<PersonAPI> people) { 1626 Set<String> used = new LinkedHashSet<String>(); 1627 for (PersonAPI person : people) { 1628 String str = person.getPortraitSprite(); 1629 if (used.contains(str)) return true; 1630 used.add(str); 1631 } 1632 return false; 1633 } 1634 1635 protected void assignCustomAdmins() { 1636 ImportantPeopleAPI ip = Global.getSector().getImportantPeople(); 1637 1638 { 1639 MarketAPI market = Global.getSector().getEconomy().getMarket("station_kapteyn"); 1640 if (market != null) { 1641 PersonAPI person = market.getFaction().createRandomPerson(); 1642 person.setRankId(Ranks.CITIZEN); 1643 person.setPostId(Ranks.POST_ADMINISTRATOR); 1644 person.setImportanceAndVoice(PersonImportance.HIGH, StarSystemGenerator.random); 1645 1646 person.getStats().setSkillLevel(Skills.INDUSTRIAL_PLANNING, 1); 1647 //person.getStats().setSkillLevel(Skills.SPACE_OPERATIONS, 1); 1648 1649 for (PersonAPI p : market.getPeopleCopy()) { 1650 if (Ranks.POST_ADMINISTRATOR.equals(p.getPostId())) { 1651 market.removePerson(p); 1652 ip.removePerson(p); 1653 market.getCommDirectory().removePerson(p); 1654 break; 1655 } 1656 } 1657 1658 market.setAdmin(person); 1659 market.getCommDirectory().addPerson(person, 0); 1660 market.addPerson(person); 1661 1662 ip.addPerson(person); 1663 ip.getData(person).getLocation().setMarket(market); 1664 ip.checkOutPerson(person, "permanent_staff"); 1665 } 1666 } 1667 1668 for (MarketAPI market : Global.getSector().getEconomy().getMarketsCopy()) { 1669 if (Factions.TRITACHYON.equals(market.getFactionId()) && 1670 //(market.getId().equals("eochu_bres") || 1671 (market.getId().equals("culann"))) { 1672 PersonAPI person = market.getFaction().createRandomPerson(); 1673 person.setRankId(Ranks.CITIZEN); 1674 person.setPostId(Ranks.POST_ADMINISTRATOR); 1675 1676 // totally not a front for an Alpha Core 1677 person.getStats().setSkillLevel(Skills.INDUSTRIAL_PLANNING, 1); 1678 person.getStats().setSkillLevel(Skills.HYPERCOGNITION, 1); 1679// person.getStats().setSkillLevel(Skills.SPACE_OPERATIONS, 1); 1680// person.getStats().setSkillLevel(Skills.PLANETARY_OPERATIONS, 1); 1681 person.setAICoreId(Commodities.ALPHA_CORE); 1682 person.getMemoryWithoutUpdate().set(MemFlags.SUSPECTED_AI, true); 1683 person.setImportanceAndVoice(PersonImportance.MEDIUM, StarSystemGenerator.random); 1684 1685 for (PersonAPI p : market.getPeopleCopy()) { 1686 if (Ranks.POST_ADMINISTRATOR.equals(p.getPostId())) { 1687 market.removePerson(p); 1688 ip.removePerson(p); 1689 market.getCommDirectory().removePerson(p); 1690 break; 1691 } 1692 } 1693 1694 market.setAdmin(person); 1695 market.getCommDirectory().addPerson(person, 0); 1696 market.addPerson(person); 1697 1698 ip.addPerson(person); 1699 ip.getData(person).getLocation().setMarket(market); 1700 ip.checkOutPerson(person, "permanent_staff"); 1701 } 1702 } 1703 1704 } 1705 1706 public static void addSkillsAndAssignAdmin(MarketAPI market, PersonAPI admin) { 1707 List<String> skills = Global.getSettings().getSortedSkillIds(); 1708// if (!skills.contains(Skills.PLANETARY_OPERATIONS) || 1709// !skills.contains(Skills.SPACE_OPERATIONS) || 1710// !skills.contains(Skills.INDUSTRIAL_PLANNING)) { 1711// return; 1712// } 1713 if (!skills.contains(Skills.INDUSTRIAL_PLANNING)) { 1714 return; 1715 } 1716 1717 int size = market.getSize(); 1718 //if (size <= 4) return; 1719 1720 int industries = 0; 1721 1722 for (Industry curr : market.getIndustries()) { 1723 if (curr.isIndustry()) { 1724 industries++; 1725 } 1726 } 1727 1728 1729 admin.getStats().setSkipRefresh(true); 1730 1731 if (industries >= 2 || size >= 6) { 1732 admin.getStats().setSkillLevel(Skills.INDUSTRIAL_PLANNING, 1); 1733 } 1734 1735 admin.getStats().setSkipRefresh(false); 1736 admin.getStats().refreshCharacterStatsEffects(); 1737 1738 market.setAdmin(admin); 1739 } 1740 1741 1742 1743 1744 1745 @Override 1746 public void configureXStream(XStream x) { 1747 x.alias("AssignmentModulePlugin", com.fs.starfarer.api.campaign.ai.AssignmentModulePlugin.class); 1748 x.alias("ModularFleetAIAPI", com.fs.starfarer.api.campaign.ai.ModularFleetAIAPI.class); 1749 x.alias("NavigationModulePlugin", com.fs.starfarer.api.campaign.ai.NavigationModulePlugin.class); 1750 x.alias("StrategicModulePlugin", com.fs.starfarer.api.campaign.ai.StrategicModulePlugin.class); 1751 x.alias("TacticalModulePlugin", com.fs.starfarer.api.campaign.ai.TacticalModulePlugin.class); 1752 1753 x.alias("NTP", NebulaTerrainPlugin.class); 1754 x.alias("AuroraRenderer", AuroraRenderer.class); 1755 x.alias("CRLPSBuff", CRLossPerSecondBuff.class); 1756 x.aliasAttribute(CRLossPerSecondBuff.class, "id", "id"); 1757 x.aliasAttribute(CRLossPerSecondBuff.class, "mult", "m"); 1758 x.aliasAttribute(CRLossPerSecondBuff.class, "dur", "d"); 1759 1760 x.alias("PPBuff", PeakPerformanceBuff.class); 1761 x.aliasAttribute(PeakPerformanceBuff.class, "id", "id"); 1762 x.aliasAttribute(PeakPerformanceBuff.class, "mult", "m"); 1763 x.aliasAttribute(PeakPerformanceBuff.class, "dur", "d"); 1764 1765 1766// x.alias("FParams", FleetParams.class); 1767// x.aliasAttribute(FleetParams.class, "hyperspaceLocation", "hL"); 1768// x.aliasAttribute(FleetParams.class, "market", "m"); 1769// x.aliasAttribute(FleetParams.class, "factionId", "fId"); 1770// x.aliasAttribute(FleetParams.class, "fleetType", "fT"); 1771// x.aliasAttribute(FleetParams.class, "combatPts", "cP"); 1772// x.aliasAttribute(FleetParams.class, "freighterPts", "fP"); 1773// x.aliasAttribute(FleetParams.class, "tankerPts", "taP"); 1774// x.aliasAttribute(FleetParams.class, "transportPts", "trP"); 1775// x.aliasAttribute(FleetParams.class, "linerPts", "lP"); 1776// x.aliasAttribute(FleetParams.class, "civilianPts", "civP"); 1777// x.aliasAttribute(FleetParams.class, "utilityPts", "uP"); 1778// x.aliasAttribute(FleetParams.class, "qualityBonus", "qB"); 1779// x.aliasAttribute(FleetParams.class, "qualityOverride", "qO"); 1780// x.aliasAttribute(FleetParams.class, "officerNumMult", "oNM"); 1781// x.aliasAttribute(FleetParams.class, "officerLevelBonus", "oLB"); 1782// x.aliasAttribute(FleetParams.class, "levelLimit", "lL"); 1783// x.aliasAttribute(FleetParams.class, "commander", "c"); 1784// x.aliasAttribute(FleetParams.class, "factionIdForShipPicking", "fIDSP"); 1785// x.aliasAttribute(FleetParams.class, "random", "r"); 1786// x.aliasAttribute(FleetParams.class, "withOfficers", "wO"); 1787// x.aliasAttribute(FleetParams.class, "maxShipSize", "mSS"); 1788 1789 x.alias("SlipParams", SlipstreamParams2.class); 1790 x.aliasAttribute(SlipstreamParams2.class, "spriteKey1", "sK1"); 1791 x.aliasAttribute(SlipstreamParams2.class, "spriteKey2", "sK2"); 1792 x.aliasAttribute(SlipstreamParams2.class, "spriteKey3", "sK3"); 1793 x.aliasAttribute(SlipstreamParams2.class, "edgeKey", "eK"); 1794 x.aliasAttribute(SlipstreamParams2.class, "spriteColor", "sC"); 1795 x.aliasAttribute(SlipstreamParams2.class, "windGlowColor", "wGC"); 1796 x.aliasAttribute(SlipstreamParams2.class, "edgeColor", "eC"); 1797 x.aliasAttribute(SlipstreamParams2.class, "baseWidth", "bW"); 1798 x.aliasAttribute(SlipstreamParams2.class, "widthForMaxSpeed", "wFMS"); 1799 x.aliasAttribute(SlipstreamParams2.class, "edgeWidth", "eW"); 1800 x.aliasAttribute(SlipstreamParams2.class, "areaPerParticle", "aPP"); 1801 x.aliasAttribute(SlipstreamParams2.class, "maxParticles", "maxP"); 1802 x.aliasAttribute(SlipstreamParams2.class, "minSpeed", "minS"); 1803 x.aliasAttribute(SlipstreamParams2.class, "maxSpeed", "maxS"); 1804 x.aliasAttribute(SlipstreamParams2.class, "minColor", "minC"); 1805 x.aliasAttribute(SlipstreamParams2.class, "maxColor", "maxC"); 1806 x.aliasAttribute(SlipstreamParams2.class, "mapColor", "mCol"); 1807 x.aliasAttribute(SlipstreamParams2.class, "minDur", "minD"); 1808 x.aliasAttribute(SlipstreamParams2.class, "maxDur", "maxD"); 1809 x.aliasAttribute(SlipstreamParams2.class, "particleFadeInTime", "pFIT"); 1810 x.aliasAttribute(SlipstreamParams2.class, "lineLengthFractionOfSpeed", "lLFOS"); 1811 x.aliasAttribute(SlipstreamParams2.class, "burnLevel", "bL"); 1812 x.aliasAttribute(SlipstreamParams2.class, "maxBurnLevelForTextureScroll", "mBLFTS"); 1813 x.aliasAttribute(SlipstreamParams2.class, "slowDownInWiderSections", "slow"); 1814 x.aliasAttribute(SlipstreamParams2.class, "widthForMaxSpeedMinMult", "wFMSMin"); 1815 x.aliasAttribute(SlipstreamParams2.class, "widthForMaxSpeedMaxMult", "wFMSMax"); 1816 x.aliasAttribute(SlipstreamParams2.class, "name", "name"); 1817 x.aliasAttribute(SlipstreamParams2.class, "texScrollMult0", "tSM0"); 1818 x.aliasAttribute(SlipstreamParams2.class, "texScrollMult1", "tSM1"); 1819 x.aliasAttribute(SlipstreamParams2.class, "texScrollMult2", "tSM2"); 1820 1821 1822 x.alias("SSeg", SlipstreamSegment.class); 1823 x.aliasAttribute(SlipstreamSegment.class, "locB", "B"); 1824 x.aliasAttribute(SlipstreamSegment.class, "loc", "l"); 1825 x.aliasAttribute(SlipstreamSegment.class, "width", "w"); 1826 x.aliasAttribute(SlipstreamSegment.class, "bMult", "m"); 1827 x.aliasAttribute(SlipstreamSegment.class, "discovered", "d"); 1828 x.aliasAttribute(SlipstreamSegment.class, "fader", "f"); 1829 1830 1831 x.alias("SlipTP2", SlipstreamTerrainPlugin2.class); 1832 x.aliasAttribute(SlipstreamTerrainPlugin2.class, "params", "p"); 1833 x.aliasAttribute(SlipstreamTerrainPlugin2.class, "segments", "s"); 1834 x.aliasAttribute(SlipstreamTerrainPlugin2.class, "totalLength", "tL"); 1835 x.aliasAttribute(SlipstreamTerrainPlugin2.class, "needsRecompute", "nR"); 1836 x.aliasAttribute(SlipstreamTerrainPlugin2.class, "bounds", "b"); 1837 x.aliasAttribute(SlipstreamTerrainPlugin2.class, "segmentsPerBox", "sPB"); 1838 x.aliasAttribute(SlipstreamTerrainPlugin2.class, "texProgress0", "tP0"); 1839 x.aliasAttribute(SlipstreamTerrainPlugin2.class, "texProgress1", "tP1"); 1840 x.aliasAttribute(SlipstreamTerrainPlugin2.class, "texProgress2", "tP2"); 1841 x.aliasAttribute(SlipstreamTerrainPlugin2.class, "despawnNoise", "dN"); 1842 x.aliasAttribute(SlipstreamTerrainPlugin2.class, "despawnDelay", "dDe"); 1843 x.aliasAttribute(SlipstreamTerrainPlugin2.class, "despawnDays", "dDa"); 1844 x.aliasAttribute(SlipstreamTerrainPlugin2.class, "despawnElapsed", "dE"); 1845 x.aliasAttribute(SlipstreamTerrainPlugin2.class, "spawnNoise", "sN"); 1846 x.aliasAttribute(SlipstreamTerrainPlugin2.class, "spawnDays", "sD"); 1847 x.aliasAttribute(SlipstreamTerrainPlugin2.class, "spawnElapsed", "sE"); 1848 1849 x.alias("BBox", BoundingBox.class); 1850 x.aliasAttribute(BoundingBox.class, "box", "b"); 1851 x.aliasAttribute(BoundingBox.class, "padding", "p"); 1852 x.aliasAttribute(BoundingBox.class, "rotatedBox", "rB"); 1853 x.aliasAttribute(BoundingBox.class, "angle", "a"); 1854 x.aliasAttribute(BoundingBox.class, "boxComputed", "bC"); 1855 x.aliasAttribute(BoundingBox.class, "center", "c"); 1856 x.aliasAttribute(BoundingBox.class, "radius", "r"); 1857 1858 1859 x.alias("FParams", FleetParamsV3.class); 1860 x.aliasAttribute(FleetParamsV3.class, "source", "srcL"); 1861 x.aliasAttribute(FleetParamsV3.class, "locInHyper", "lIH"); 1862 x.aliasAttribute(FleetParamsV3.class, "quality", "q"); 1863 x.aliasAttribute(FleetParamsV3.class, "qualityMod", "qMod"); 1864 x.aliasAttribute(FleetParamsV3.class, "qualityOverride", "qO"); 1865 x.aliasAttribute(FleetParamsV3.class, "factionId", "fId"); 1866 x.aliasAttribute(FleetParamsV3.class, "fleetType", "fT"); 1867 x.aliasAttribute(FleetParamsV3.class, "combatPts", "cP"); 1868 x.aliasAttribute(FleetParamsV3.class, "freighterPts", "fP"); 1869 x.aliasAttribute(FleetParamsV3.class, "tankerPts", "taP"); 1870 x.aliasAttribute(FleetParamsV3.class, "transportPts", "trP"); 1871 x.aliasAttribute(FleetParamsV3.class, "linerPts", "lP"); 1872 x.aliasAttribute(FleetParamsV3.class, "utilityPts", "uP"); 1873 x.aliasAttribute(FleetParamsV3.class, "withOfficers", "wO"); 1874 x.aliasAttribute(FleetParamsV3.class, "maxShipSize", "mSS"); 1875 x.aliasAttribute(FleetParamsV3.class, "minShipSize", "minSS"); 1876 x.aliasAttribute(FleetParamsV3.class, "averageSMods", "aSM"); 1877 x.aliasAttribute(FleetParamsV3.class, "commander", "c"); 1878 x.aliasAttribute(FleetParamsV3.class, "random", "r"); 1879 x.aliasAttribute(FleetParamsV3.class, "ignoreMarketFleetSizeMult", "iMFSM"); 1880 x.aliasAttribute(FleetParamsV3.class, "onlyApplyFleetSizeToCombatShips", "oAFSTCS"); 1881 x.aliasAttribute(FleetParamsV3.class, "doNotPrune", "dNP"); 1882 x.aliasAttribute(FleetParamsV3.class, "modeOverride", "mO"); 1883 x.aliasAttribute(FleetParamsV3.class, "officerLevelBonus", "oLB"); 1884 x.aliasAttribute(FleetParamsV3.class, "officerNumberBonus", "oNB"); 1885 x.aliasAttribute(FleetParamsV3.class, "officerNumberMult", "oNM"); 1886 x.aliasAttribute(FleetParamsV3.class, "officerLevelLimit", "oLL"); 1887 x.aliasAttribute(FleetParamsV3.class, "commanderLevelLimit", "cLL"); 1888 x.aliasAttribute(FleetParamsV3.class, "forceAllowPhaseShipsEtc", "fAPSE"); 1889 x.aliasAttribute(FleetParamsV3.class, "treatCombatFreighterSettingAsFraction", "tCFSAF"); 1890 x.aliasAttribute(FleetParamsV3.class, "doctrineOverride", "dOv"); 1891 x.aliasAttribute(FleetParamsV3.class, "doctrineOverride", "ts"); 1892 x.aliasAttribute(FleetParamsV3.class, "maxNumShips", "mNS"); 1893 x.aliasAttribute(FleetParamsV3.class, "onlyRetainFlagship", "oRF"); 1894 x.aliasAttribute(FleetParamsV3.class, "flagshipVariantId", "fVI"); 1895 x.aliasAttribute(FleetParamsV3.class, "flagshipVariant", "fV"); 1896 x.aliasAttribute(FleetParamsV3.class, "aiCores", "aiC"); 1897 x.aliasAttribute(FleetParamsV3.class, "doNotIntegrateAICores", "dNIAIC"); 1898 x.aliasAttribute(FleetParamsV3.class, "allWeapons", "aW"); 1899 1900 1901 x.alias("MaxBurnBuff", MaxBurnBuff.class); 1902 x.alias("PeakPerformanceBuff", PeakPerformanceBuff.class); 1903 x.alias("RingSystemTerrainPlugin", RingSystemTerrainPlugin.class); 1904 x.alias("StarCoronaAkaMainyuTerrainPlugin", StarCoronaAkaMainyuTerrainPlugin.class); 1905 x.alias("StarCoronaTerrainPlugin", StarCoronaTerrainPlugin.class); 1906 1907 x.alias("PulsarBeamTerrainPlugin", PulsarBeamTerrainPlugin.class); 1908 x.alias("EventHorizonPlugin", EventHorizonPlugin.class); 1909 1910 x.alias("FlareManager", FlareManager.class); 1911 x.aliasAttribute(FlareManager.class, "flareTracker", "fT"); 1912 x.aliasAttribute(FlareManager.class, "flares", "f"); 1913 x.aliasAttribute(FlareManager.class, "delegate", "d"); 1914 1915 x.alias("Flare", Flare.class); 1916 x.aliasAttribute(Flare.class, "direction", "d"); 1917 x.aliasAttribute(Flare.class, "arc", "a"); 1918 x.aliasAttribute(Flare.class, "extraLengthMult", "eLM"); 1919 x.aliasAttribute(Flare.class, "extraLengthFlat", "eLF"); 1920 x.aliasAttribute(Flare.class, "shortenFlatMod", "sFM"); 1921 x.aliasAttribute(Flare.class, "c", "c"); 1922 x.aliasAttribute(Flare.class, "fader", "f"); 1923 1924 1925 1926 x.alias("MagneticFieldTerrainPlugin", MagneticFieldTerrainPlugin.class); 1927 x.aliasAttribute(MagneticFieldTerrainPlugin.class, "entity", "e"); 1928 //x.aliasAttribute(MagneticFieldTerrainPlugin.class, "params", "p"); 1929 x.aliasAttribute(MagneticFieldTerrainPlugin.class, "renderer", "r"); 1930 x.aliasAttribute(MagneticFieldTerrainPlugin.class, "flareManager", "fM"); 1931 1932 x.alias("MagneticFieldParams", MagneticFieldParams.class); 1933 x.aliasAttribute(MagneticFieldParams.class, "baseColor", "bC"); 1934 x.aliasAttribute(MagneticFieldParams.class, "c", "c"); 1935 x.aliasAttribute(MagneticFieldParams.class, "auroraFrequency", "aF"); 1936 x.aliasAttribute(MagneticFieldParams.class, "innerRadius", "iR"); 1937 x.aliasAttribute(MagneticFieldParams.class, "outerRadius", "oR"); 1938 1939 x.alias("", AuroraRenderer.class); 1940 x.aliasAttribute(AuroraRenderer.class, "phaseAngle", "a"); 1941 x.aliasAttribute(AuroraRenderer.class, "delegate", "d"); 1942 1943 1944 x.alias("FlickerUtil", FlickerUtil.class); 1945 x.aliasAttribute(FlickerUtil.class, "angle", "a"); 1946 x.aliasAttribute(FlickerUtil.class, "brightness", "b"); 1947 x.aliasAttribute(FlickerUtil.class, "currTime", "c"); 1948 x.aliasAttribute(FlickerUtil.class, "currMaxBurstTime", "cMBT"); 1949 x.aliasAttribute(FlickerUtil.class, "currMaxBrightness", "cMB"); 1950 x.aliasAttribute(FlickerUtil.class, "maxBurstTime", "mBT"); 1951 x.aliasAttribute(FlickerUtil.class, "peakTime", "pT"); 1952 x.aliasAttribute(FlickerUtil.class, "peakDur", "pD"); 1953 x.aliasAttribute(FlickerUtil.class, "stop", "s"); 1954 1955// x.alias("FTr", FlickerTracker.class); 1956// 1957// x.aliasAttribute(FlickerTracker.class, "leadTime", "f"); 1958// x.aliasAttribute(FlickerTracker.class, "shiver", "sh"); 1959// x.aliasAttribute(FlickerTracker.class, "highlight", "hi"); 1960// x.aliasAttribute(FlickerTracker.class, "flicker", "f"); 1961// x.aliasAttribute(FlickerTracker.class, "stopped", "s"); 1962// x.aliasAttribute(FlickerTracker.class, "checkedBurst", "cB"); 1963 1964 x.alias("FUtil", FaderUtil.class); 1965 x.aliasAttribute(FaderUtil.class, "currBrightness", "b"); 1966 x.aliasAttribute(FaderUtil.class, "durationIn", "i"); 1967 x.aliasAttribute(FaderUtil.class, "durationOut", "o"); 1968 x.aliasAttribute(FaderUtil.class, "state", "s"); 1969 x.aliasAttribute(FaderUtil.class, "bounceDown", "d"); 1970 x.aliasAttribute(FaderUtil.class, "bounceUp", "u"); 1971 1972 1973 x.alias("IUtil", IntervalUtil.class); 1974 x.aliasAttribute(IntervalUtil.class, "minInterval", "i"); 1975 x.aliasAttribute(IntervalUtil.class, "maxInterval", "a"); 1976 x.aliasAttribute(IntervalUtil.class, "currInterval", "c"); 1977 x.aliasAttribute(IntervalUtil.class, "elapsed", "e"); 1978 x.aliasAttribute(IntervalUtil.class, "intervalElapsed", "ie"); 1979 1980 x.alias("TimeoutTracker", TimeoutTracker.class); 1981 //x.aliasAttribute(TimeoutTracker.class, "items", "itms"); 1982 1983 x.alias("IDt", TimeoutTracker.ItemData.class); 1984 x.aliasAttribute(ItemData.class, "item", "i"); 1985 x.aliasAttribute(ItemData.class, "remaining", "r"); 1986 1987 1988 x.alias("TrA", TransponderAbility.class); 1989 x.alias("TrAI", TransponderAbilityAI.class); 1990 1991 x.alias("EmB", EmergencyBurnAbility.class); 1992 x.alias("EmBAI", EmergencyBurnAbilityAI.class); 1993 1994 x.alias("GoDA", GoDarkAbility.class); 1995 x.alias("GoDAAI", GoDarkAbilityAI.class); 1996 1997 x.alias("SeBA", SensorBurstAbility.class); 1998 x.alias("SeBAAI", SensorBurstAbilityAI.class); 1999 2000 x.alias("SuBA", SustainedBurnAbility.class); 2001 x.alias("SuBAAI", SustainedBurnAbilityAI.class); 2002 2003 x.alias("InPA", InterdictionPulseAbility.class); 2004 x.alias("InPAAI", InterdictionPulseAbilityAI.class); 2005 2006 x.alias("IPReactionScript", IPReactionScript.class); 2007 x.aliasAttribute(IPReactionScript.class, "delay", "e"); 2008 x.aliasAttribute(IPReactionScript.class, "done", "d"); 2009 x.aliasAttribute(IPReactionScript.class, "other", "o"); 2010 x.aliasAttribute(IPReactionScript.class, "fleet", "f"); 2011 x.aliasAttribute(IPReactionScript.class, "activationDays", "aD"); 2012 2013 x.alias("ScA", ScavengeAbility.class); 2014 x.alias("FJA", FractureJumpAbility.class); 2015 x.alias("RSA", RemoteSurveyAbility.class); 2016 2017 x.alias("GScan", GraviticScanAbility.class); 2018 x.alias("GSDat", GraviticScanData.class); 2019 x.alias("GSPing", GSPing.class); 2020 x.aliasAttribute(GSPing.class, "arc", "a"); 2021 x.aliasAttribute(GSPing.class, "angle", "n"); 2022 x.aliasAttribute(GSPing.class, "grav", "g"); 2023 x.aliasAttribute(GSPing.class, "fader", "f"); 2024 x.aliasAttribute(GSPing.class, "withSound", "s"); 2025 2026 2027 x.alias("ProcgenUsedNames", ProcgenUsedNames.class); 2028 x.alias("SmugglingScanScript", SmugglingScanScript.class); 2029 x.alias("HasslePlayerScript", HasslePlayerScript.class); 2030 2031 //x.alias("BaseToggleAbility", BaseToggleAbility.class); 2032 2033 2034 x.aliasAttribute(BaseAbilityPlugin.class, "entity", "e"); 2035 x.aliasAttribute(BaseAbilityPlugin.class, "id", "id"); 2036 x.aliasAttribute(BaseAbilityPlugin.class, "disableFrames", "dF"); 2037 2038 x.aliasAttribute(BaseToggleAbility.class, "turnedOn", "tO"); 2039 x.aliasAttribute(BaseToggleAbility.class, "cooldownLeft", "cL"); 2040 x.aliasAttribute(BaseToggleAbility.class, "isActivateCooldown", "iAC"); 2041 x.aliasAttribute(BaseToggleAbility.class, "level", "l"); 2042 2043 x.aliasAttribute(BaseDurationAbility.class, "turnedOn", "tO"); 2044 x.aliasAttribute(BaseDurationAbility.class, "activeDaysLeft", "aDL"); 2045 x.aliasAttribute(BaseDurationAbility.class, "cooldownLeft", "cL"); 2046 x.aliasAttribute(BaseDurationAbility.class, "level", "l"); 2047 x.aliasAttribute(BaseDurationAbility.class, "loopFadeLeft", "lFF"); 2048 x.aliasAttribute(BaseDurationAbility.class, "fadingOut", "fO"); 2049 2050 x.aliasAttribute(BaseAbilityAI.class, "fleet", "f"); 2051 x.aliasAttribute(BaseAbilityAI.class, "ability", "a"); 2052 2053 x.aliasAttribute(GoDarkAbilityAI.class, "interval", "i"); 2054 x.aliasAttribute(TransponderAbilityAI.class, "interval", "i"); 2055 x.aliasAttribute(EmergencyBurnAbilityAI.class, "interval", "i"); 2056 x.aliasAttribute(SensorBurstAbilityAI.class, "interval", "i"); 2057 2058 2059 x.alias("RAT", RollingAverageTracker.class); 2060 x.aliasAttribute(RollingAverageTracker.class, "timer", "t"); 2061 x.aliasAttribute(RollingAverageTracker.class, "f", "f"); 2062 x.aliasAttribute(RollingAverageTracker.class, "elaspedFractionOverride", "e"); 2063 x.aliasAttribute(RollingAverageTracker.class, "curr", "c"); 2064 x.aliasAttribute(RollingAverageTracker.class, "avg", "a"); 2065 2066 2067// x.alias("SSAT", StarSystemActivityTracker.class); 2068// x.aliasAttribute(StarSystemActivityTracker.class, "econInterval", "eI"); 2069// x.aliasAttribute(StarSystemActivityTracker.class, "timer", "t"); 2070// x.aliasAttribute(StarSystemActivityTracker.class, "seen", "sn"); 2071// x.aliasAttribute(StarSystemActivityTracker.class, "system", "sy"); 2072// x.aliasAttribute(StarSystemActivityTracker.class, "points", "pt"); 2073// x.aliasAttribute(StarSystemActivityTracker.class, "fleets", "fl"); 2074// x.aliasAttribute(StarSystemActivityTracker.class, "ships", "sh"); 2075 2076 x.alias("PTDFS", PlayerTradeDataForSubmarket.class); 2077 x.aliasAttribute(PlayerTradeDataForSubmarket.class, "playerBought", "pB"); 2078 x.aliasAttribute(PlayerTradeDataForSubmarket.class, "playerSold", "pS"); 2079 x.aliasAttribute(PlayerTradeDataForSubmarket.class, "accumulatedPlayerTradeValueForPositive", "accP"); 2080 x.aliasAttribute(PlayerTradeDataForSubmarket.class, "accumulatedPlayerTradeValueForNegative", "accN"); 2081 x.aliasAttribute(PlayerTradeDataForSubmarket.class, "totalPlayerTradeValue", "tPV"); 2082 x.aliasAttribute(PlayerTradeDataForSubmarket.class, "tracker", "t"); 2083 x.aliasAttribute(PlayerTradeDataForSubmarket.class, "playerBoughtShips", "pBS"); 2084 x.aliasAttribute(PlayerTradeDataForSubmarket.class, "playerSoldShips", "pSS"); 2085 x.aliasAttribute(PlayerTradeDataForSubmarket.class, "market", "m"); 2086 x.aliasAttribute(PlayerTradeDataForSubmarket.class, "submarket", "s"); 2087 2088 2089 x.alias("MPFD", com.fs.starfarer.api.impl.campaign.econ.impl.MilitaryBase.PatrolFleetData.class); 2090 x.aliasAttribute( com.fs.starfarer.api.impl.campaign.econ.impl.MilitaryBase.PatrolFleetData.class, "type", "t"); 2091 x.aliasAttribute( com.fs.starfarer.api.impl.campaign.econ.impl.MilitaryBase.PatrolFleetData.class, "spawnFP", "fp"); 2092 2093 x.alias("PatrolFleetData", PatrolFleetData.class); 2094 x.alias("PatrolFleetManager", PatrolFleetManager.class); 2095 x.alias("PatrolFleetManagerV2", PatrolFleetManagerV2.class); 2096 x.alias("PatrolAssignmentAI", PatrolAssignmentAI.class); 2097 x.alias("SharedData", SharedData.class); 2098 x.alias("HyperspaceTerrainPlugin", HyperspaceTerrainPlugin.class); 2099 x.alias("FoodShortageEvent", FoodShortageEvent.class); 2100 x.alias("CoreEventProbabilityManager", CoreEventProbabilityManager.class); 2101 x.alias("BlackMarketPlugin", BlackMarketPlugin.class); 2102 x.alias("PlayerTradeDataForSubmarket", PlayerTradeDataForSubmarket.class); 2103 x.alias("PriceUpdate", PriceUpdate.class); 2104 x.alias("JumpDestination", JumpDestination.class); 2105 x.alias("OpenMarketPlugin", OpenMarketPlugin.class); 2106 x.alias("CampaignEventTarget", CampaignEventTarget.class); 2107 //x.alias("EconomyFleetManager", EconomyFleetManager.class); 2108 //x.alias("StarSystemActivityTracker", StarSystemActivityTracker.class); 2109// x.alias("StoragePlugin", StoragePlugin.class); 2110// x.alias("MilitarySubmarketPlugin", MilitarySubmarketPlugin.class); 2111 x.alias("OfficerManagerEvent", OfficerManagerEvent.class); 2112 x.alias("AvailableOfficer", AvailableOfficer.class); 2113 x.alias("ManagedFleetData", ManagedFleetData.class); 2114 2115 x.alias("TradeDisruption", TradeDisruption.class); 2116 x.alias("CommodityStats", CommodityStats.class); 2117 x.alias("TradeInfoUpdateEvent", TradeInfoUpdateEvent.class); 2118 x.alias("TransactionLineItem", TransactionLineItem.class); 2119 x.alias("Population", Population.class); 2120 //x.alias("MagneticFieldParams", MagneticFieldParams.class); 2121 //x.alias("MercFleetManager", MercFleetManager.class); 2122 x.alias("MercFleetManagerV2", MercFleetManagerV2.class); 2123 x.alias("InvestigationEventGoodRepWithOther", InvestigationEventGoodRepWithOther.class); 2124 //x.alias("SmugglingFactionChangeScript", SmugglingFactionChangeScript.class); 2125 x.alias("RepTrackerEvent", RepTrackerEvent.class); 2126 x.alias("Hydroponics", Hydroponics.class); 2127 x.alias("WorldUninhabitable", WorldUninhabitable.class); 2128 x.alias("ReputationChangeData", ReputationChangeData.class); 2129 x.alias("FactionTradeRepData", FactionTradeRepData.class); 2130 x.alias("RecentUnrest", RecentUnrest.class); 2131 x.alias("Outpost", Outpost.class); 2132 x.alias("CellStateTracker", CellStateTracker.class); 2133 x.alias("CoreScript", CoreScript.class); 2134 2135 x.alias("CoronaParams", CoronaParams.class); 2136 x.aliasAttribute(CoronaParams.class, "windBurnLevel", "wBL"); 2137 x.aliasAttribute(CoronaParams.class, "flareProbability", "fP"); 2138 x.aliasAttribute(CoronaParams.class, "crLossMult", "crLM"); 2139 2140 x.alias("RingParams", RingParams.class); 2141 x.aliasAttribute(RingParams.class, "bandWidthInEngine", "bWIE"); 2142 x.aliasAttribute(RingParams.class, "middleRadius", "mR"); 2143 x.aliasAttribute(RingParams.class, "name", "n"); 2144 x.aliasAttribute(RingParams.class, "relatedEntity", "e"); 2145 2146 x.alias("AsteroidBeltParams", AsteroidBeltParams.class); 2147 x.aliasAttribute(AsteroidBeltParams.class, "numAsteroids", "nA"); 2148 x.aliasAttribute(AsteroidBeltParams.class, "minOrbitDays", "minO"); 2149 x.aliasAttribute(AsteroidBeltParams.class, "maxOrbitDays", "maxO"); 2150 x.aliasAttribute(AsteroidBeltParams.class, "minSize", "minS"); 2151 x.aliasAttribute(AsteroidBeltParams.class, "maxSize", "maxS"); 2152 2153 x.alias("AsteroidFieldParams", AsteroidFieldParams.class); 2154 x.aliasAttribute(AsteroidFieldParams.class, "minRadius", "minR"); 2155 x.aliasAttribute(AsteroidFieldParams.class, "maxRadius", "maxR"); 2156 x.aliasAttribute(AsteroidFieldParams.class, "numAsteroids", "nA"); 2157 x.aliasAttribute(AsteroidFieldParams.class, "minAsteroids", "minA"); 2158 x.aliasAttribute(AsteroidFieldParams.class, "maxAsteroids", "maxA"); 2159 x.aliasAttribute(AsteroidFieldParams.class, "minSize", "minS"); 2160 x.aliasAttribute(AsteroidFieldParams.class, "maxSize", "maxS"); 2161 2162 x.alias("AsteroidBeltTerrainPlugin", AsteroidBeltTerrainPlugin.class); 2163 x.aliasAttribute(AsteroidBeltTerrainPlugin.class, "needToCreateAsteroids", "nTCA"); 2164 2165 x.alias("AsteroidFieldTerrainPlugin", AsteroidFieldTerrainPlugin.class); 2166 2167 2168 x.alias("BaseTerrain", BaseTerrain.class); 2169 x.aliasAttribute(BaseTerrain.class, "terrainId", "tid"); 2170 x.aliasAttribute(BaseTerrain.class, "name", "n"); 2171 2172 x.alias("BaseRingTerrain", BaseRingTerrain.class); 2173 x.alias("AbandonedStation", AbandonedStation.class); 2174 x.alias("WorldTundra", WorldTundra.class); 2175 x.alias("Frontier", Frontier.class); 2176 x.alias("RadioChatterTerrainPlugin", RadioChatterTerrainPlugin.class); 2177 x.alias("RadioChatterParams", RadioChatterParams.class); 2178 x.alias("WorldBarrenMarginal", WorldBarrenMarginal.class); 2179 x.alias("UrbanizedPolity", UrbanizedPolity.class); 2180 x.alias("OrganizedCrime", OrganizedCrime.class); 2181 x.alias("Headquarters", Headquarters.class); 2182 x.alias("ViceDemand", ViceDemand.class); 2183 x.alias("SystemBounty", SystemBounty.class); 2184 x.alias("WorldTwilight", WorldTwilight.class); 2185 x.alias("RuralPolity", RuralPolity.class); 2186 x.alias("FreeMarket", FreeMarket.class); 2187 x.alias("WorldIce", WorldIce.class); 2188 x.alias("Dissident", Dissident.class); 2189 x.alias("TradeCenter", TradeCenter.class); 2190 x.alias("CottageIndustry", CottageIndustry.class); 2191 x.alias("LuddicMajority", LuddicMajority.class); 2192 x.alias("WorldArid", WorldArid.class); 2193 x.alias("Decivilized", Decivilized.class); 2194 x.alias("StealthMinefields", StealthMinefields.class); 2195 x.alias("Smuggling", Smuggling.class); 2196 x.alias("ShipbreakingCenter", ShipbreakingCenter.class); 2197 x.alias("FoodShortage", FoodShortage.class); 2198 x.alias("CRRecoveryBuff", CRRecoveryBuff.class); 2199 x.alias("LargeRefugeePopulation", LargeRefugeePopulation.class); 2200 x.alias("WorldWater", WorldWater.class); 2201 x.alias("RegionalCapital", RegionalCapital.class); 2202 x.alias("OrbitalBurns", OrbitalBurns.class); 2203 x.alias("WorldJungle", WorldJungle.class); 2204 x.alias("WorldDesert", WorldDesert.class); 2205 2206 x.alias("BaseHazardCondition", BaseHazardCondition.class); 2207 x.alias("WorldTerran", WorldTerran.class); 2208 2209 x.alias("DebrisFieldTerrainPlugin", DebrisFieldTerrainPlugin.class); 2210 x.alias("DebrisFieldParams", DebrisFieldParams.class); 2211 x.aliasAttribute(DebrisFieldParams.class, "density", "d"); 2212 x.aliasAttribute(DebrisFieldParams.class, "baseDensity", "bD"); 2213 x.aliasAttribute(DebrisFieldParams.class, "glowsDays", "gD"); 2214 x.aliasAttribute(DebrisFieldParams.class, "lastsDays", "lD"); 2215 x.aliasAttribute(DebrisFieldParams.class, "minSize", "min1"); 2216 x.aliasAttribute(DebrisFieldParams.class, "maxSize", "max1"); 2217 x.aliasAttribute(DebrisFieldParams.class, "glowColor", "gC"); 2218 x.aliasAttribute(DebrisFieldParams.class, "defFaction", "dF"); 2219 x.aliasAttribute(DebrisFieldParams.class, "defenderProb", "dP"); 2220 x.aliasAttribute(DebrisFieldParams.class, "minStr", "min2"); 2221 x.aliasAttribute(DebrisFieldParams.class, "maxStr", "max2"); 2222 x.aliasAttribute(DebrisFieldParams.class, "maxDefenderSize", "mDS"); 2223 x.aliasAttribute(DebrisFieldParams.class, "baseSalvageXP", "xp"); 2224 x.aliasAttribute(DebrisFieldParams.class, "source", "s"); 2225 2226 2227 2228 x.alias("PlayerTradeProfitabilityData", PlayerTradeProfitabilityData.class); 2229 x.alias("CommodityData", CommodityData.class); 2230 x.alias("CoreCampaignPluginImpl", CoreCampaignPluginImpl.class); 2231 x.alias("FactionHostilityEvent", FactionHostilityEvent.class); 2232 x.alias("FactionHostilityPairKey", FactionHostilityPairKey.class); 2233 x.alias("InvestigationEventSmugglingV2", InvestigationEventSmugglingV2.class); 2234 x.alias("RecentUnrestEvent", RecentUnrestEvent.class); 2235 //x.alias("BountyPirateFleetManager", BountyPirateFleetManager.class); 2236 2237 2238 2239 x.alias("AsteroidBeltParams", AsteroidBeltParams.class); 2240 2241 2242 x.alias("DomainSurveyDerelictSpecial", DomainSurveyDerelictSpecial.class); 2243 2244 x.alias("BaseCustomEntityPlugin", BaseCustomEntityPlugin.class); 2245 x.aliasAttribute(BaseCustomEntityPlugin.class, "entity", "e"); 2246 2247 x.alias("DerelictShipEntityPlugin", DerelictShipEntityPlugin.class); 2248 x.aliasAttribute(DerelictShipEntityPlugin.class, "data", "d"); 2249 x.aliasAttribute(DerelictShipEntityPlugin.class, "elapsed", "el"); 2250 x.aliasAttribute(DerelictShipEntityPlugin.class, "angVel", "aV"); 2251 2252 x.alias("DerelictShipData", DerelictShipData.class); 2253 x.aliasAttribute(DerelictShipData.class, "ship", "s"); 2254 x.aliasAttribute(DerelictShipData.class, "durationDays", "d"); 2255 x.aliasAttribute(DerelictShipData.class, "canHaveExtraCargo", "c"); 2256 2257 x.alias("PerShipData", PerShipData.class); 2258 x.aliasAttribute(PerShipData.class, "condition", "c"); 2259 x.aliasAttribute(PerShipData.class, "variantId", "vId"); 2260 x.aliasAttribute(PerShipData.class, "variant", "v"); 2261 x.aliasAttribute(PerShipData.class, "shipName", "sN"); 2262 x.aliasAttribute(PerShipData.class, "addDmods", "d"); 2263 x.aliasAttribute(PerShipData.class, "pruneWeapons", "p"); 2264 x.aliasAttribute(PerShipData.class, "sModProb", "sMP"); 2265 2266 2267 x.alias("ShipCondition", ShipCondition.class); 2268 2269 2270 x.alias("ShipRecoverySpecialData", ShipRecoverySpecialData.class); 2271 x.aliasAttribute(ShipRecoverySpecialData.class, "ships", "s"); 2272 x.aliasAttribute(ShipRecoverySpecialData.class, "desc", "d"); 2273 2274 x.alias("BreadcrumbSpecialData", BreadcrumbSpecialData.class); 2275 x.aliasAttribute(BreadcrumbSpecialData.class, "targetId", "tI"); 2276 x.aliasAttribute(BreadcrumbSpecialData.class, "targetName", "tN"); 2277 2278 x.alias("DerSpecialType", SpecialType.class); 2279 x.alias("DomainSurveyDerelictSpecialData", DomainSurveyDerelictSpecialData.class); 2280 x.aliasAttribute(DomainSurveyDerelictSpecialData.class, "type", "t"); 2281 x.aliasAttribute(DomainSurveyDerelictSpecialData.class, "entityId", "eI"); 2282 x.aliasAttribute(DomainSurveyDerelictSpecialData.class, "secondaryId", "sI"); 2283 2284 2285 x.alias("SleeperSpecialType", SleeperSpecialType.class); 2286 x.alias("SleeperPodsSpecialData", SleeperPodsSpecialData.class); 2287 x.aliasAttribute(SleeperPodsSpecialData.class, "type", "t"); 2288 //x.aliasAttribute(SleeperPodsSpecialData.class, "quantity", "q"); 2289 x.aliasAttribute(SleeperPodsSpecialData.class, "officer", "o"); 2290 2291 2292 x.alias("SDSpecialType", SurveyDataSpecialType.class); 2293 x.alias("SurveyDataSpecialData", SurveyDataSpecialData.class); 2294 x.aliasAttribute(SurveyDataSpecialData.class, "type", "t"); 2295 x.aliasAttribute(SurveyDataSpecialData.class, "entityId", "eI"); 2296 x.aliasAttribute(SurveyDataSpecialData.class, "secondaryId", "sI"); 2297 x.aliasAttribute(SurveyDataSpecialData.class, "includeRuins", "r"); 2298 2299 2300 x.alias("TransmitterTrapSpecialData", TransmitterTrapSpecialData.class); 2301 x.aliasAttribute(TransmitterTrapSpecialData.class, "prob", "c"); 2302 x.aliasAttribute(TransmitterTrapSpecialData.class, "fleetId", "fID"); 2303 x.aliasAttribute(TransmitterTrapSpecialData.class, "nearbyFleetFaction", "nFF"); 2304 x.aliasAttribute(TransmitterTrapSpecialData.class, "useClosestFleetInRange", "uCFIR"); 2305 x.aliasAttribute(TransmitterTrapSpecialData.class, "useAllFleetsInRange", "uAFIR"); 2306 x.aliasAttribute(TransmitterTrapSpecialData.class, "params", "p"); 2307 x.aliasAttribute(TransmitterTrapSpecialData.class, "minRange", "min"); 2308 x.aliasAttribute(TransmitterTrapSpecialData.class, "maxRange", "max"); 2309 2310 2311 x.alias("CargoManifestSpecialData", CargoManifestSpecialData.class); 2312 x.aliasAttribute(CargoManifestSpecialData.class, "commodityId", "c"); 2313 2314 2315 2316 x.alias("DDOv", DefenderDataOverride.class); 2317 x.aliasAttribute(DefenderDataOverride.class, "probDefenders", "p"); 2318 x.aliasAttribute(DefenderDataOverride.class, "minStr", "i"); 2319 x.aliasAttribute(DefenderDataOverride.class, "maxStr", "a"); 2320 x.aliasAttribute(DefenderDataOverride.class, "maxDefenderSize", "d"); 2321 x.aliasAttribute(DefenderDataOverride.class, "minDefenderSize", "m"); 2322 x.aliasAttribute(DefenderDataOverride.class, "probStation", "t"); 2323 x.aliasAttribute(DefenderDataOverride.class, "stationRole", "s"); 2324 x.aliasAttribute(DefenderDataOverride.class, "defFaction", "f"); 2325 2326 2327 x.alias("SeededFleetManager", SeededFleetManager.class); 2328 x.aliasAttribute(SeededFleetManager.class, "fleets", "f"); 2329 x.aliasAttribute(SeededFleetManager.class, "inflateRangeLY", "iRLY"); 2330 x.aliasAttribute(SeededFleetManager.class, "system", "s"); 2331 2332 x.alias("SeededFleet", SeededFleet.class); 2333 x.aliasAttribute(SeededFleet.class, "seed", "s"); 2334 x.aliasAttribute(SeededFleet.class, "points", "p"); 2335 x.aliasAttribute(SeededFleet.class, "fleet", "f"); 2336 2337 x.alias("RemnantSeededFleetManager", RemnantSeededFleetManager.class); 2338 x.aliasAttribute(RemnantSeededFleetManager.class, "minPts", "i"); 2339 x.aliasAttribute(RemnantSeededFleetManager.class, "maxPts", "a"); 2340 x.aliasAttribute(RemnantSeededFleetManager.class, "activeChance", "c"); 2341 2342 x.alias("RFICGen", RemnantFleetInteractionConfigGen.class); 2343 x.alias("RSICGen", RemnantStationInteractionConfigGen.class); 2344 2345 x.alias("SourceBasedFleetManager", SourceBasedFleetManager.class); 2346 x.aliasAttribute(SourceBasedFleetManager.class, "fleets", "f"); 2347 x.aliasAttribute(SourceBasedFleetManager.class, "thresholdLY", "t"); 2348 x.aliasAttribute(SourceBasedFleetManager.class, "source", "s"); 2349 x.aliasAttribute(SourceBasedFleetManager.class, "minFleets", "i"); 2350 x.aliasAttribute(SourceBasedFleetManager.class, "maxFleets", "a"); 2351 x.aliasAttribute(SourceBasedFleetManager.class, "respawnDelay", "r"); 2352 x.aliasAttribute(SourceBasedFleetManager.class, "destroyed", "d"); 2353 x.aliasAttribute(SourceBasedFleetManager.class, "sourceLocation", "sL"); 2354 2355 x.alias("RemnantStationFleetManager", RemnantStationFleetManager.class); 2356 x.aliasAttribute(RemnantStationFleetManager.class, "minPts", "iA"); 2357 x.aliasAttribute(RemnantStationFleetManager.class, "maxPts", "aA"); 2358 x.aliasAttribute(RemnantStationFleetManager.class, "totalLost", "tL"); 2359 2360 x.alias("RemnantAssignmentAI", RemnantAssignmentAI.class); 2361 x.aliasAttribute(RemnantAssignmentAI.class, "homeSystem", "h"); 2362 x.aliasAttribute(RemnantAssignmentAI.class, "fleet", "f"); 2363 x.aliasAttribute(RemnantAssignmentAI.class, "source", "s"); 2364 2365 2366 x.alias("WarningBeaconEntityPlugin", WarningBeaconEntityPlugin.class); 2367 x.aliasAttribute(WarningBeaconEntityPlugin.class, "phase", "p"); 2368 x.aliasAttribute(WarningBeaconEntityPlugin.class, "freqMult", "f"); 2369 x.aliasAttribute(WarningBeaconEntityPlugin.class, "sincePing", "s"); 2370 2371 2372 2373 x.alias("RouteManager", RouteManager.class); 2374 x.aliasAttribute(RouteManager.class, "routes", "r"); 2375 2376 x.alias("RouteData", RouteData.class); 2377 x.aliasAttribute(RouteData.class, "extra", "x"); 2378 x.aliasAttribute(RouteData.class, "delay", "a"); 2379 x.aliasAttribute(RouteData.class, "source", "o"); 2380 x.aliasAttribute(RouteData.class, "market", "m"); 2381 x.aliasAttribute(RouteData.class, "seed", "s"); 2382 x.aliasAttribute(RouteData.class, "timestamp", "t"); 2383 x.aliasAttribute(RouteData.class, "segments", "e"); 2384 x.aliasAttribute(RouteData.class, "activeFleet", "f"); 2385 x.aliasAttribute(RouteData.class, "daysSinceSeenByPlayer", "d"); 2386 x.aliasAttribute(RouteData.class, "custom", "c"); 2387 x.aliasAttribute(RouteData.class, "current", "r"); 2388 x.aliasAttribute(RouteData.class, "spawner", "p"); 2389 2390 x.alias("RouteFleetSpawner", RouteFleetSpawner.class); 2391 2392 x.alias("BaseRouteFleetManager", BaseRouteFleetManager.class); 2393 x.aliasAttribute(BaseRouteFleetManager.class, "interval", "i"); 2394 x.alias("RuinsFleetRouteManager", RuinsFleetRouteManager.class); 2395 x.aliasAttribute(RuinsFleetRouteManager.class, "system", "s"); 2396 //x.aliasAttribute(RuinsFleetRouteManager.class, "interval", "i"); 2397 2398 2399 x.alias("BaseAssignmentAI", BaseAssignmentAI.class); 2400 x.aliasAttribute(BaseAssignmentAI.class, "capTracker", "cT"); 2401 x.aliasAttribute(BaseAssignmentAI.class, "buildTracker", "bT"); 2402 2403 x.alias("RouteFleetAssignmentAI", RouteFleetAssignmentAI.class); 2404 x.aliasAttribute(RouteFleetAssignmentAI.class, "gaveReturnAssignments", "gRA"); 2405 2406 x.alias("ScavengerFleetAssignmentAI", ScavengerFleetAssignmentAI.class); 2407 x.alias("DistressCallNormalAssignmentAI", DistressCallNormalAssignmentAI.class); 2408 x.alias("DistressCallPirateAmbushAssignmentAI", DistressCallPirateAmbushAssignmentAI.class); 2409 x.alias("DistressCallPirateAmbushTrapAssignmentAI", DistressCallPirateAmbushTrapAssignmentAI.class); 2410 x.alias("DistressCallResponsePirateAssignmentAI", DistressCallResponsePirateAssignmentAI.class); 2411 x.alias("DistressCallResponseAssignmentAI", DistressCallResponseAssignmentAI.class); 2412 x.alias("TutorialLeashAssignmentAI", TutorialLeashAssignmentAI.class); 2413 2414 x.alias("DistressResponseData", DistressResponseData.class); 2415 x.alias("NESpawnData", NESpawnData.class); 2416 2417 x.alias("OptionalFleetData", OptionalFleetData.class); 2418 x.aliasAttribute(OptionalFleetData.class, "strength", "s"); 2419 x.aliasAttribute(OptionalFleetData.class, "quality", "q"); 2420 x.aliasAttribute(OptionalFleetData.class, "factionId", "f"); 2421 x.aliasAttribute(OptionalFleetData.class, "fleetType", "t"); 2422 x.aliasAttribute(OptionalFleetData.class, "damage", "d"); 2423 2424 2425 x.aliasAttribute(BaseAssignmentAI.class, "fleet", "f"); 2426 x.aliasAttribute(BaseAssignmentAI.class, "done", "d"); 2427 //x.aliasAttribute(BaseAssignmentAI.class, "giveInitial", "gI"); 2428 x.aliasAttribute(RouteFleetAssignmentAI.class, "route", "r"); 2429 x.aliasAttribute(ScavengerFleetAssignmentAI.class, "pirate", "p"); 2430 x.aliasAttribute(ScavengerFleetAssignmentAI.class, "piracyCheck", "pC"); 2431 2432 x.aliasAttribute(DistressCallNormalAssignmentAI.class, "system", "s"); 2433 x.aliasAttribute(DistressCallNormalAssignmentAI.class, "jumpPoint", "jP"); 2434 x.aliasAttribute(DistressCallNormalAssignmentAI.class, "elapsed", "e"); 2435 x.aliasAttribute(DistressCallNormalAssignmentAI.class, "dur", "dur"); 2436 x.aliasAttribute(DistressCallNormalAssignmentAI.class, "contactedPlayer", "cP"); 2437 2438 x.aliasAttribute(DistressCallPirateAmbushAssignmentAI.class, "system", "s"); 2439 x.aliasAttribute(DistressCallPirateAmbushAssignmentAI.class, "jumpPoint", "jP"); 2440 x.aliasAttribute(DistressCallPirateAmbushAssignmentAI.class, "elapsed", "e"); 2441 x.aliasAttribute(DistressCallPirateAmbushAssignmentAI.class, "dur", "dur"); 2442 2443 x.aliasAttribute(DistressCallPirateAmbushTrapAssignmentAI.class, "system", "s"); 2444 x.aliasAttribute(DistressCallPirateAmbushTrapAssignmentAI.class, "jumpPoint", "jP"); 2445 x.aliasAttribute(DistressCallPirateAmbushTrapAssignmentAI.class, "elapsed", "e"); 2446 x.aliasAttribute(DistressCallPirateAmbushTrapAssignmentAI.class, "dur", "dur"); 2447 2448 x.aliasAttribute(DistressCallResponsePirateAssignmentAI.class, "system", "s"); 2449 x.aliasAttribute(DistressCallResponsePirateAssignmentAI.class, "elapsed", "e"); 2450 x.aliasAttribute(DistressCallResponsePirateAssignmentAI.class, "dur", "dur"); 2451 x.aliasAttribute(DistressCallResponsePirateAssignmentAI.class, "contactedPlayer", "cP"); 2452 x.aliasAttribute(DistressCallResponsePirateAssignmentAI.class, "inner", "i"); 2453 x.aliasAttribute(DistressCallResponsePirateAssignmentAI.class, "outer", "o"); 2454 2455 x.aliasAttribute(DistressCallResponseAssignmentAI.class, "system", "s"); 2456 x.aliasAttribute(DistressCallResponseAssignmentAI.class, "elapsed", "e"); 2457 x.aliasAttribute(DistressCallResponseAssignmentAI.class, "dur", "dur"); 2458 x.aliasAttribute(DistressCallResponseAssignmentAI.class, "contactedPlayer", "cP"); 2459 x.aliasAttribute(DistressCallResponseAssignmentAI.class, "inner", "i"); 2460 x.aliasAttribute(DistressCallResponseAssignmentAI.class, "outer", "o"); 2461 2462 x.aliasAttribute(TutorialLeashAssignmentAI.class, "system", "s"); 2463 x.aliasAttribute(TutorialLeashAssignmentAI.class, "jumpPoint", "jP"); 2464 x.aliasAttribute(TutorialLeashAssignmentAI.class, "elapsed", "e"); 2465 x.aliasAttribute(TutorialLeashAssignmentAI.class, "dur", "dur"); 2466 x.aliasAttribute(TutorialLeashAssignmentAI.class, "toGuard", "tG"); 2467 2468 2469 x.alias("RtSeg", RouteSegment.class); 2470 x.aliasAttribute(RouteSegment.class, "id", "i"); 2471 x.aliasAttribute(RouteSegment.class, "elapsed", "e"); 2472 x.aliasAttribute(RouteSegment.class, "daysMax", "d"); 2473 x.aliasAttribute(RouteSegment.class, "from", "f"); 2474 x.aliasAttribute(RouteSegment.class, "to", "t"); 2475 2476// x.alias("RPt", RoutePoint.class); 2477// x.aliasAttribute(RoutePoint.class, "x", "x"); 2478// x.aliasAttribute(RoutePoint.class, "y", "y"); 2479// x.aliasAttribute(RoutePoint.class, "system", "s"); 2480 2481// x.aliasAttribute(RouteSegment.class, "systemFrom", "sF"); 2482// x.aliasAttribute(RouteSegment.class, "systemTo", "sT"); 2483// x.aliasAttribute(RouteSegment.class, "custom", "c"); 2484// x.aliasAttribute(RouteSegment.class, "entityFrom", "eF"); 2485// x.aliasAttribute(RouteSegment.class, "entityTo", "eT"); 2486 //x.aliasAttribute(RouteSegment.class, "vectorLocation", "vL"); 2487 2488 2489 2490 x.alias("TowCable", TowCable.class); 2491 x.alias("TowCableBuff", TowCableBuff.class); 2492 x.aliasAttribute(TowCableBuff.class, "buffId", "b"); 2493 x.aliasAttribute(TowCableBuff.class, "frames", "f"); 2494 2495 x.alias("TowCable", TowCable.class); 2496 2497 x.alias("BaseEventPlugin", BaseEventPlugin.class); 2498 x.aliasAttribute(BaseEventPlugin.class, "id", "id"); 2499 x.aliasAttribute(BaseEventPlugin.class, "eventType", "eTp"); 2500 x.aliasAttribute(BaseEventPlugin.class, "eventTarget", "eTg"); 2501 x.aliasAttribute(BaseEventPlugin.class, "market", "mk"); 2502 x.aliasAttribute(BaseEventPlugin.class, "entity", "en"); 2503 x.aliasAttribute(BaseEventPlugin.class, "faction", "fa"); 2504 x.aliasAttribute(BaseEventPlugin.class, "statModId", "sMI"); 2505 x.aliasAttribute(BaseEventPlugin.class, "started", "st"); 2506 x.aliasAttribute(BaseEventPlugin.class, "memory", "mem"); 2507 x.aliasAttribute(BaseEventPlugin.class, "startProbability", "sP"); 2508 2509 2510 x.alias("MissionCompletionRep", MissionCompletionRep.class); 2511 x.aliasAttribute(MissionCompletionRep.class, "successDelta", "sD"); 2512 x.aliasAttribute(MissionCompletionRep.class, "successLimit", "sL"); 2513 x.aliasAttribute(MissionCompletionRep.class, "failureDelta", "fD"); 2514 x.aliasAttribute(MissionCompletionRep.class, "failureLimit", "fL"); 2515 2516 x.alias("NearbyEventsEvent", NearbyEventsEvent.class); 2517 x.aliasAttribute(NearbyEventsEvent.class, "derelictShipInterval", "dSI"); 2518 x.aliasAttribute(NearbyEventsEvent.class, "distressCallInterval", "dCI"); 2519 x.aliasAttribute(NearbyEventsEvent.class, "skipForDistressCalls", "sFDC"); 2520 2521 x.alias("CargoPodsEntityPlugin", CargoPodsEntityPlugin.class); 2522 x.aliasAttribute(CargoPodsEntityPlugin.class, "elapsed", "el"); 2523 x.aliasAttribute(CargoPodsEntityPlugin.class, "maxDays", "mD"); 2524 x.aliasAttribute(CargoPodsEntityPlugin.class, "extraDays", "eD"); 2525 x.aliasAttribute(CargoPodsEntityPlugin.class, "neverExpire", "nE"); 2526 2527 2528 x.alias("DistressCallAbility", DistressCallAbility.class); 2529 x.aliasAttribute(DistressCallAbility.class, "performed", "p"); 2530 x.aliasAttribute(DistressCallAbility.class, "numTimesUsed", "nTU"); 2531 x.aliasAttribute(DistressCallAbility.class, "lastUsed", "lU"); 2532 x.aliasAttribute(DistressCallAbility.class, "uses", "u"); 2533 2534 x.alias("AbilityUseData", AbilityUseData.class); 2535 x.aliasAttribute(AbilityUseData.class, "timestamp", "t"); 2536 x.aliasAttribute(AbilityUseData.class, "location", "l"); 2537 2538 x.alias("DistressCallOutcome", DistressCallOutcome.class); 2539 2540 x.alias("DelayedActionScript", DelayedActionScript.class); 2541 x.aliasAttribute(DelayedActionScript.class, "daysLeft", "dL"); 2542 x.aliasAttribute(DelayedActionScript.class, "done", "d"); 2543 2544 2545 x.alias("GalatiaMarketScript", GalatiaMarketScript.class); 2546 x.aliasAttribute(GalatiaMarketScript.class, "market", "m"); 2547 x.aliasAttribute(GalatiaMarketScript.class, "interval", "i"); 2548 2549 2550 x.alias("CampaignTutorialStage", CampaignTutorialStage.class); 2551 2552 x.alias("CampaignTutorialScript", CampaignTutorialScript.class); 2553 x.aliasAttribute(CampaignTutorialScript.class, "askedPlayerToSave", "aPTS"); 2554 x.aliasAttribute(CampaignTutorialScript.class, "playerSaved", "pS"); 2555 x.aliasAttribute(CampaignTutorialScript.class, "elapsed", "e"); 2556 x.aliasAttribute(CampaignTutorialScript.class, "lastCheckDistToAncyra", "lCDTA"); 2557 x.aliasAttribute(CampaignTutorialScript.class, "system", "s"); 2558 x.aliasAttribute(CampaignTutorialScript.class, "ancyra", "a"); 2559 x.aliasAttribute(CampaignTutorialScript.class, "derinkuyu", "d"); 2560 x.aliasAttribute(CampaignTutorialScript.class, "stage", "st"); 2561 x.aliasAttribute(CampaignTutorialScript.class, "orbitalResetDone", "oRD"); 2562 x.aliasAttribute(CampaignTutorialScript.class, "debrisField", "dF"); 2563 x.aliasAttribute(CampaignTutorialScript.class, "pirateFleet", "pF"); 2564 x.aliasAttribute(CampaignTutorialScript.class, "detachment", "det"); 2565 x.aliasAttribute(CampaignTutorialScript.class, "intel", "i"); 2566 2567 2568 x.alias("TutorialMissionIntel", TutorialMissionIntel.class); 2569 x.alias("TutorialMissionStage", TutorialMissionStage.class); 2570 2571 2572 x.alias("RogueMinerMiscFleetManager", RogueMinerMiscFleetManager.class); 2573 x.alias("SaveNagScript", SaveNagScript.class); 2574 2575 2576 x.alias("ExSalv", ExtraSalvage.class); 2577 x.aliasAttribute(ExtraSalvage.class, "cargo", "c"); 2578 2579 x.alias("SpID", SpecialItemData.class); 2580 x.aliasAttribute(SpecialItemData.class, "id", "i"); 2581 x.aliasAttribute(SpecialItemData.class, "data", "d"); 2582 2583 2584 x.alias("BaseGenericPlugin", BaseGenericPlugin.class); 2585 x.alias("SalvageDefenderModificationPluginImpl", SalvageDefenderModificationPluginImpl.class); 2586 x.alias("PKDefenderPluginImpl", PKDefenderPluginImpl.class); 2587 2588 x.alias("CampaignPingSpec", CampaignPingSpec.class); 2589 x.aliasAttribute(CampaignPingSpec.class, "id", "id"); 2590 x.aliasAttribute(CampaignPingSpec.class, "sounds", "s"); 2591 x.aliasAttribute(CampaignPingSpec.class, "color", "c"); 2592 x.aliasAttribute(CampaignPingSpec.class, "minRange", "mR"); 2593 x.aliasAttribute(CampaignPingSpec.class, "range", "r"); 2594 x.aliasAttribute(CampaignPingSpec.class, "duration", "d"); 2595 x.aliasAttribute(CampaignPingSpec.class, "delay", "de"); 2596 x.aliasAttribute(CampaignPingSpec.class, "width", "w"); 2597 x.aliasAttribute(CampaignPingSpec.class, "alphaMult", "aM"); 2598 x.aliasAttribute(CampaignPingSpec.class, "inFraction", "iF"); 2599 x.aliasAttribute(CampaignPingSpec.class, "useFactionColor", "uFC"); 2600 x.aliasAttribute(CampaignPingSpec.class, "invert", "i"); 2601 x.aliasAttribute(CampaignPingSpec.class, "num", "n"); 2602 2603 2604// <c cl="com.fs.starfarer.api.impl.campaign.fleets.EconomyFleetFleetAssignmentAI$EconomyRouteData" z="7570"> 2605// <cargoCap>3220.0</cargoCap> 2606// <fuelCap>1685.0</fuelCap> 2607// <personnelCap>485.0</personnelCap> 2608// <size>6.0</size> 2609// <smuggling>false</smuggling> 2610// <from cl="Market" ref="435"></from> 2611// <to cl="Market" ref="410"></to> 2612// <cargoDeliver z="7571"> 2613// <com.fs.starfarer.api.impl.campaign.fleets.EconomyFleetFleetAssignmentAI_-CargoQuantityData z="7572"> 2614// <cargo>organics</cargo> 2615// <units>5</units> 2616// </com.fs.starfarer.api.impl.campaign.fleets.EconomyFleetFleetAssignmentAI_-CargoQuantityData> 2617 x.alias("ERDat", EconomyRouteData.class); 2618 x.aliasAttribute(EconomyRouteData.class, "cargoCap", "c"); 2619 x.aliasAttribute(EconomyRouteData.class, "fuelCap", "f"); 2620 x.aliasAttribute(EconomyRouteData.class, "personnelCap", "p"); 2621 x.aliasAttribute(EconomyRouteData.class, "size", "s"); 2622 x.aliasAttribute(EconomyRouteData.class, "smuggling", "m"); 2623 x.aliasAttribute(EconomyRouteData.class, "from", "r"); 2624 x.aliasAttribute(EconomyRouteData.class, "to", "t"); 2625 x.aliasAttribute(EconomyRouteData.class, "cargoDeliver", "d"); 2626 x.aliasAttribute(EconomyRouteData.class, "cargoReturn", "u"); 2627 2628 2629 x.alias("CQD", CargoQuantityData.class); 2630 x.aliasAttribute(CargoQuantityData.class, "cargo", "c"); 2631 x.aliasAttribute(CargoQuantityData.class, "units", "u"); 2632 2633 2634 x.alias("CommRelayEP", CommRelayEntityPlugin.class); 2635 x.alias("NavBuoyEP", NavBuoyEntityPlugin.class); 2636 x.alias("SensorArrayEP", SensorArrayEntityPlugin.class); 2637 2638 x.alias("PopulationAndInfrastructure", PopulationAndInfrastructure.class); 2639 x.aliasAttribute(BaseIndustry.class, "supply", "s"); 2640 x.aliasAttribute(BaseIndustry.class, "demand", "d"); 2641 x.aliasAttribute(BaseIndustry.class, "income", "i"); 2642 x.aliasAttribute(BaseIndustry.class, "upkeep", "u"); 2643 x.aliasAttribute(BaseIndustry.class, "market", "m"); 2644 x.aliasAttribute(BaseIndustry.class, "id", "id"); 2645 x.aliasAttribute(BaseIndustry.class, "buildProgress", "bP"); 2646 x.aliasAttribute(BaseIndustry.class, "building", "b"); 2647 x.aliasAttribute(BaseIndustry.class, "upgradeId", "uI"); 2648 x.aliasAttribute(BaseIndustry.class, "aiCoreId", "aCI"); 2649 x.aliasAttribute(BaseIndustry.class, "demandReduction", "dR"); 2650 x.aliasAttribute(BaseIndustry.class, "supplyBonus", "sB"); 2651 x.aliasAttribute(BaseIndustry.class, "wasDisrupted", "wD"); 2652 2653 2654 x.alias("DFInfl", DefaultFleetInflater.class); 2655 x.alias("DFInflP", DefaultFleetInflaterParams.class); 2656 x.aliasAttribute(DefaultFleetInflaterParams.class, "seed", "s"); 2657 x.aliasAttribute(DefaultFleetInflaterParams.class, "timestamp", "t"); 2658 x.aliasAttribute(DefaultFleetInflaterParams.class, "persistent", "p"); 2659 x.aliasAttribute(DefaultFleetInflaterParams.class, "quality", "q"); 2660 x.aliasAttribute(DefaultFleetInflaterParams.class, "mode", "m"); 2661 2662 2663 x.alias("MilRespScr", MilitaryResponseScript.class); 2664 x.aliasAttribute(MilitaryResponseScript.class, "tracker", "t"); 2665 x.aliasAttribute(MilitaryResponseScript.class, "params", "p"); 2666 x.aliasAttribute(MilitaryResponseScript.class, "elapsed", "e"); 2667 2668 2669 x.alias("MilRespP", MilitaryResponseParams.class); 2670 x.aliasAttribute(MilitaryResponseParams.class, "type", "t"); 2671 x.aliasAttribute(MilitaryResponseParams.class, "responseReason", "rR"); 2672 x.aliasAttribute(MilitaryResponseParams.class, "faction", "f"); 2673 x.aliasAttribute(MilitaryResponseParams.class, "actor", "a"); 2674 x.aliasAttribute(MilitaryResponseParams.class, "target", "t"); 2675 x.aliasAttribute(MilitaryResponseParams.class, "responseFraction", "rF"); 2676 x.aliasAttribute(MilitaryResponseParams.class, "responseDuration", "rD"); 2677 x.aliasAttribute(MilitaryResponseParams.class, "travelText", "tT"); 2678 x.aliasAttribute(MilitaryResponseParams.class, "actionText", "aT"); 2679 2680 x.alias("BaseMarketConditionPlugin", BaseMarketConditionPlugin.class); 2681 x.aliasAttribute(BaseMarketConditionPlugin.class, "market", "m"); 2682 x.aliasAttribute(BaseMarketConditionPlugin.class, "condition", "c"); 2683 2684 x.alias("ResourceDepositsMC", ResourceDepositsCondition.class); 2685 2686 2687 2688 x.alias("LuddicPathCells", LuddicPathCells.class); 2689 x.aliasAttribute(LuddicPathCells.class, "intel", "i"); 2690 2691 x.alias("LuddicPathCellsIntel", LuddicPathCellsIntel.class); 2692 x.aliasAttribute(LuddicPathCellsIntel.class, "sleeper", "s"); 2693 x.aliasAttribute(LuddicPathCellsIntel.class, "sleeperTimeout", "sT"); 2694 x.aliasAttribute(LuddicPathCellsIntel.class, "market", "m"); 2695 x.aliasAttribute(LuddicPathCellsIntel.class, "incidentTracker", "iT"); 2696 x.aliasAttribute(LuddicPathCellsIntel.class, "random", "r"); 2697 x.aliasAttribute(LuddicPathCellsIntel.class, "numIncidentAttempts", "nIA"); 2698 x.aliasAttribute(LuddicPathCellsIntel.class, "incidentDelay", "iD"); 2699 x.aliasAttribute(LuddicPathCellsIntel.class, "incidentType", "iTy"); 2700 x.aliasAttribute(LuddicPathCellsIntel.class, "smuggler", "sm"); 2701 x.aliasAttribute(LuddicPathCellsIntel.class, "prevIncident", "pI"); 2702 x.aliasAttribute(LuddicPathCellsIntel.class, "sincePrevIncident", "sPI"); 2703 x.aliasAttribute(LuddicPathCellsIntel.class, "prevIncidentData", "pID"); 2704 x.aliasAttribute(LuddicPathCellsIntel.class, "inertiaTime", "iTi"); 2705 2706 2707 2708 x.alias("Spaceport", Spaceport.class); 2709 x.alias("Mining", Mining.class); 2710 x.alias("GroundDefenses", GroundDefenses.class); 2711 x.alias("Refining", Refining.class); 2712 x.alias("MilitaryBase", MilitaryBase.class); 2713 x.alias("Farming", Farming.class); 2714 x.alias("LightIndustry", LightIndustry.class); 2715 x.alias("FuelProduction", FuelProduction.class); 2716 x.alias("HeavyIndustry", HeavyIndustry.class); 2717 x.alias("PlanetaryShield", PlanetaryShield.class); 2718 x.alias("TechMining", TechMining.class); 2719 x.alias("TradeCenter", TradeCenter.class); 2720 x.alias("LionsGuardHQ", LionsGuardHQ.class); 2721 x.alias("Waystation", Waystation.class); 2722 x.alias("Cryosanctum", Cryosanctum.class); 2723 x.alias("Cryorevival", Cryorevival.class); 2724 x.alias("TradeCenter2", com.fs.starfarer.api.impl.campaign.econ.impl.TradeCenter.class); 2725 2726 x.alias("OrbitalStation", OrbitalStation.class); 2727 x.aliasAttribute(OrbitalStation.class, "stationFleet", "sF"); 2728 x.aliasAttribute(OrbitalStation.class, "usingExistingStation", "uES"); 2729 x.aliasAttribute(OrbitalStation.class, "stationEntity", "sE"); 2730 2731 2732 x.alias("EconomyFleetAssignmentAI", EconomyFleetAssignmentAI.class); 2733 x.aliasAttribute(EconomyFleetAssignmentAI.class, "origFaction", "oF"); 2734 x.aliasAttribute(EconomyFleetAssignmentAI.class, "factionChangeTracker", "fCT"); 2735 2736 x.alias("MercAssignmentAIV2", MercAssignmentAIV2.class); 2737 x.alias("PatrolAssignmentAIV4", PatrolAssignmentAIV4.class); 2738 x.alias("DisposableAggroAssignmentAI", DisposableAggroAssignmentAI.class); 2739 2740 x.alias("DisposableFleetManager", DisposableFleetManager.class); 2741 x.alias("DisposablePirateFleetManager", DisposablePirateFleetManager.class); 2742 x.alias("DisposableLuddicPathFleetManager", DisposableLuddicPathFleetManager.class); 2743 2744 2745 x.alias("PirateBaseIntel", PirateBaseIntel.class); 2746 x.aliasAttribute(PirateBaseIntel.class, "system", "s"); 2747 x.aliasAttribute(PirateBaseIntel.class, "market", "m"); 2748 x.aliasAttribute(PirateBaseIntel.class, "entity", "e"); 2749 x.aliasAttribute(PirateBaseIntel.class, "elapsedDays", "eD"); 2750 x.aliasAttribute(PirateBaseIntel.class, "duration", "d"); 2751 x.aliasAttribute(PirateBaseIntel.class, "bountyData", "bD"); 2752 x.aliasAttribute(PirateBaseIntel.class, "tier", "t"); 2753 x.aliasAttribute(PirateBaseIntel.class, "matchedStationToTier", "mSTT"); 2754 x.aliasAttribute(PirateBaseIntel.class, "monthlyInterval", "mI"); 2755 x.aliasAttribute(PirateBaseIntel.class, "raidTimeoutMonths", "rTM"); 2756 2757 x.alias("BaseBountyData", BaseBountyData.class); 2758 x.aliasAttribute(BaseBountyData.class, "bountyElapsedDays", "bED"); 2759 x.aliasAttribute(BaseBountyData.class, "bountyDuration", "bD"); 2760 x.aliasAttribute(BaseBountyData.class, "baseBounty", "bB"); 2761 x.aliasAttribute(BaseBountyData.class, "repChange", "rC"); 2762 x.aliasAttribute(BaseBountyData.class, "bountyFaction", "bF"); 2763 2764 2765 x.alias("LuddicPathBaseIntel", LuddicPathBaseIntel.class); 2766 x.aliasAttribute(LuddicPathBaseIntel.class, "system", "s"); 2767 x.aliasAttribute(LuddicPathBaseIntel.class, "market", "m"); 2768 x.aliasAttribute(LuddicPathBaseIntel.class, "entity", "e"); 2769 x.aliasAttribute(LuddicPathBaseIntel.class, "elapsedDays", "eD"); 2770 x.aliasAttribute(LuddicPathBaseIntel.class, "duration", "d"); 2771 x.aliasAttribute(LuddicPathBaseIntel.class, "bountyData", "bD"); 2772 x.aliasAttribute(LuddicPathBaseIntel.class, "monthlyInterval", "mI"); 2773 x.aliasAttribute(LuddicPathBaseIntel.class, "monthsNoBounty", "mNB"); 2774 x.aliasAttribute(LuddicPathBaseIntel.class, "large", "l"); 2775 x.aliasAttribute(LuddicPathBaseIntel.class, "random", "r"); 2776 2777 2778 x.alias("PirateActivity", PirateActivity.class); 2779 x.aliasAttribute(PirateActivity.class, "intel", "i"); 2780 2781 x.alias("PirateActivityIntel", PirateActivityIntel.class); 2782 x.aliasAttribute(PirateActivityIntel.class, "system", "sy"); 2783 x.aliasAttribute(PirateActivityIntel.class, "source", "so"); 2784 2785 2786 x.alias("LocalResourcesSubmarketPlugin", LocalResourcesSubmarketPlugin.class); 2787 x.alias("CryosleeperEntityPlugin", CryosleeperEntityPlugin.class); 2788 2789 x.alias("BaseIntelPlugin", BaseIntelPlugin.class); 2790 x.aliasAttribute(BaseIntelPlugin.class, "important", "ii"); 2791 x.aliasAttribute(BaseIntelPlugin.class, "timestamp", "tt"); 2792 x.aliasAttribute(BaseIntelPlugin.class, "neverClicked", "nC"); 2793 x.aliasAttribute(BaseIntelPlugin.class, "ended", "ended"); 2794 x.aliasAttribute(BaseIntelPlugin.class, "ending", "ending"); 2795 x.aliasAttribute(BaseIntelPlugin.class, "endingTimeRemaining", "eTR"); 2796 x.aliasAttribute(BaseIntelPlugin.class, "postingLocation", "pLoc"); 2797 x.aliasAttribute(BaseIntelPlugin.class, "postingRangeLY", "pRange"); 2798 2799 x.alias("BaseMissionIntel", BaseMissionIntel.class); 2800 x.aliasAttribute(BaseMissionIntel.class, "randomCancel", "rC"); 2801 x.aliasAttribute(BaseMissionIntel.class, "randomCancelProb", "rCP"); 2802 x.aliasAttribute(BaseMissionIntel.class, "missionResult", "mR"); 2803 x.aliasAttribute(BaseMissionIntel.class, "missionState", "mS"); 2804 x.aliasAttribute(BaseMissionIntel.class, "duration", "dur"); 2805 x.aliasAttribute(BaseMissionIntel.class, "elapsedDays", "eD"); 2806 2807 x.alias("MissionResult", MissionResult.class); 2808 2809 2810 2811 x.alias("PersonBountyIntel", PersonBountyIntel.class); 2812 x.alias("SystemBountyIntel", SystemBountyIntel.class); 2813 x.alias("TradeFleetDepartureIntel", TradeFleetDepartureIntel.class); 2814 x.alias("FactionHostilityIntel", FactionHostilityIntel.class); 2815 x.alias("ProcurementMissionIntel", ProcurementMissionIntel.class); 2816 x.alias("SurveyPlanetMissionIntel", SurveyPlanetMissionIntel.class); 2817 x.alias("AnalyzeEntityMissionIntel", AnalyzeEntityMissionIntel.class); 2818 x.alias("ProcurementMissionCreator", ProcurementMissionCreator.class); 2819 x.alias("AnalyzeEntityIntelCreator", AnalyzeEntityIntelCreator.class); 2820 x.alias("SurveyPlanetIntelCreator", SurveyPlanetIntelCreator.class); 2821 2822 2823 x.alias("DeliveryMissionIntel", DeliveryMissionIntel.class); 2824 x.alias("CoreDiscoverEntityPlugin", CoreDiscoverEntityPlugin.class); 2825 x.alias("CoreBuildObjectiveTypePicker", CoreBuildObjectiveTypePicker.class); 2826 2827 x.alias("MonthlyReport", MonthlyReport.class); 2828 x.alias("FDNode", FDNode.class); 2829 x.aliasAttribute(FDNode.class, "children", "c"); 2830 x.aliasAttribute(FDNode.class, "parent", "p"); 2831 x.aliasAttribute(FDNode.class, "name", "n"); 2832 x.aliasAttribute(FDNode.class, "icon", "i"); 2833 x.aliasAttribute(FDNode.class, "income", "in"); 2834 x.aliasAttribute(FDNode.class, "upkeep", "up"); 2835 x.aliasAttribute(FDNode.class, "totalIncome", "tI"); 2836 x.aliasAttribute(FDNode.class, "totalUpkeep", "tU"); 2837 x.aliasAttribute(FDNode.class, "custom", "c1"); 2838 x.aliasAttribute(FDNode.class, "custom2", "c2"); 2839 x.aliasAttribute(FDNode.class, "mapEntity", "mE"); 2840 x.aliasAttribute(FDNode.class, "tooltipCreator", "tC"); 2841 x.aliasAttribute(FDNode.class, "tooltipParam", "tP"); 2842 2843 x.alias("MonthlyReportNodeTooltipCreator", MonthlyReportNodeTooltipCreator.class); 2844 x.alias("GalatianAcademyStipend", GalatianAcademyStipend.class); 2845 x.alias("WarSimScript", WarSimScript.class); 2846 x.alias("PersonBountyManager", PersonBountyManager.class); 2847 x.alias("SystemBountyManager", SystemBountyManager.class); 2848 x.alias("PirateBaseManager", PirateBaseManager.class); 2849 x.alias("PlayerRelatedPirateBaseManager", PlayerRelatedPirateBaseManager.class); 2850 x.alias("LuddicPathBaseManager", LuddicPathBaseManager.class); 2851 x.alias("HegemonyInspectionManager", HegemonyInspectionManager.class); 2852 x.alias("DecivTracker", DecivTracker.class); 2853 x.alias("MarketDecivData", MarketDecivData.class); 2854 x.aliasAttribute(MarketDecivData.class, "market", "m"); 2855 x.aliasAttribute(MarketDecivData.class, "stabilityHistory", "sH"); 2856 2857 2858 x.alias("FactionHostilityManager", FactionHostilityManager.class); 2859 x.alias("FactionHostilityIntel", FactionHostilityIntel.class); 2860 x.alias("GenericMissionManager", GenericMissionManager.class); 2861 2862 2863 2864 2865 x.alias("PortsideBarData", PortsideBarData.class); 2866 x.alias("BarEventManager", BarEventManager.class); 2867 2868 x.alias("PirateBaseRumorBarEvent", PirateBaseRumorBarEvent.class); 2869 2870 x.alias("LuddicFarmerBarEvent", LuddicFarmerBarEvent.class); 2871 x.alias("LuddicFarmerBarEventCreator", LuddicFarmerBarEventCreator.class); 2872 2873 x.alias("TriTachLoanBarEvent", TriTachLoanBarEvent.class); 2874 x.alias("TriTachLoanBarEventCreator", TriTachLoanBarEventCreator.class); 2875 2876 x.alias("MercsOnTheRunBarEvent", MercsOnTheRunBarEvent.class); 2877 x.alias("MercsOnTheRunBarEventCreator", MercsOnTheRunBarEventCreator.class); 2878 2879 x.alias("LuddicCraftBarEvent", LuddicCraftBarEvent.class); 2880 x.alias("LuddicCraftBarEventCreator", LuddicCraftBarEventCreator.class); 2881 2882 x.alias("ScientistAICoreBarEvent", ScientistAICoreBarEvent.class); 2883 x.alias("ScientistAICoreBarEventCreator", ScientistAICoreBarEventCreator.class); 2884 2885 x.alias("QuartermasterCargoSwapBarEvent", QuartermasterCargoSwapBarEvent.class); 2886 x.alias("QuartermasterCargoSwapBarEventCreator", QuartermasterCargoSwapBarEventCreator.class); 2887 2888 x.alias("CorruptPLClerkSuppliesBarEvent", CorruptPLClerkSuppliesBarEvent.class); 2889 x.alias("CorruptPLClerkSuppliesBarEventCreator", CorruptPLClerkSuppliesBarEventCreator.class); 2890 2891 x.alias("DiktatLobsterBarEvent", DiktatLobsterBarEvent.class); 2892 x.alias("DiktatLobsterBarEventCreator", DiktatLobsterBarEventCreator.class); 2893 2894 x.alias("DeliveryBarEvent", DeliveryBarEvent.class); 2895 x.alias("DeliveryBarEventCreator", DeliveryBarEventCreator.class); 2896 2897 x.alias("TriTachMajorLoanBarEvent", TriTachMajorLoanBarEvent.class); 2898 x.alias("TriTachMajorLoanBarEventCreator", TriTachMajorLoanBarEventCreator.class); 2899 2900 x.alias("TriTachLoanIncentiveScript", TriTachLoanIncentiveScript.class); 2901 x.alias("DeliveryFailureConsequences", DeliveryFailureConsequences.class); 2902 2903 2904 x.alias("EconomyFleetRouteManager", EconomyFleetRouteManager.class); 2905 x.alias("ShippingDisruption", ShippingDisruption.class); 2906 2907 2908 x.alias("DistressCallIntel", DistressCallIntel.class); 2909 x.alias("HyperStormBoost", HyperStormBoost.class); 2910 x.alias("AsteroidImpact", AsteroidImpact.class); 2911 2912 x.alias("CoronalTapParticleScript", CoronalTapParticleScript.class); 2913 x.alias("CargoPodsResponse", CargoPodsResponse.class); 2914 2915 2916 x.alias("GateData", GateData.class); 2917 x.alias("GateEntityPlugin", GateEntityPlugin.class); 2918 x.aliasAttribute(GateEntityPlugin.class, "beingUsedFader", "bUF"); 2919 x.aliasAttribute(GateEntityPlugin.class, "glowFader", "gF"); 2920 x.aliasAttribute(GateEntityPlugin.class, "madeActive", "mA"); 2921 x.aliasAttribute(GateEntityPlugin.class, "addedIntel", "aI"); 2922 x.aliasAttribute(GateEntityPlugin.class, "showBeingUsedDur", "sBUD"); 2923 x.aliasAttribute(GateEntityPlugin.class, "accumulatedTransitDistLY", "aTDLY"); 2924 x.aliasAttribute(GateEntityPlugin.class, "inUseAngle", "iUA"); 2925 2926 x.alias("BaseMissionHub", BaseMissionHub.class); 2927 x.aliasAttribute(BaseMissionHub.class, "timeout", "to"); 2928 x.aliasAttribute(BaseMissionHub.class, "recentlyAcceptedTimeout", "rAT"); 2929 x.aliasAttribute(BaseMissionHub.class, "creators", "cr"); 2930 x.aliasAttribute(BaseMissionHub.class, "person", "p"); 2931 x.aliasAttribute(BaseMissionHub.class, "seed", "seed"); 2932 x.aliasAttribute(BaseMissionHub.class, "lastUpdated", "lU"); 2933 x.aliasAttribute(BaseMissionHub.class, "lastUpdatedSeeds", "lUS"); 2934 x.aliasAttribute(BaseMissionHub.class, "daysSinceLastUpdate", "dSLU"); 2935 2936 x.alias("BaseHubMissionCreator", BaseHubMissionCreator.class); 2937 x.aliasAttribute(BaseHubMissionCreator.class, "numCompleted", "nC"); 2938 x.aliasAttribute(BaseHubMissionCreator.class, "numFailed", "nF"); 2939 x.aliasAttribute(BaseHubMissionCreator.class, "seed", "seed"); 2940 x.aliasAttribute(BaseHubMissionCreator.class, "specId", "sId"); 2941 x.aliasAttribute(BaseHubMissionCreator.class, "wasAutoAdded", "wA"); 2942 x.aliasAttribute(BaseHubMissionCreator.class, "isActive", "iA"); 2943 2944 x.alias("BlueprintSpecialData", BlueprintSpecialData.class); 2945 x.alias("HubMissionWithTriggers", HubMissionWithTriggers.class); 2946 2947 x.alias("BaseHubMission", BaseHubMission.class); 2948 x.alias("GateIntel", GateIntel.class); 2949 x.alias("BreadcrumbIntel", BreadcrumbIntel.class); 2950 x.alias("BreadcrumbIntelV2", BreadcrumbIntelV2.class); 2951 x.alias("WarningBeaconIntel", WarningBeaconIntel.class); 2952 x.alias("DelayedFleetEncounter", DelayedFleetEncounter.class); 2953 x.alias("MissionTrigger", MissionTrigger.class); 2954 x.alias("PunitiveExpeditionManager", PunitiveExpeditionManager.class); 2955 x.alias("PunExData", PunExData.class); 2956 x.alias("LuddicPathBaseBarEvent", LuddicPathBaseBarEvent.class); 2957 x.alias("HubMissionBarEventWrapper", HubMissionBarEventWrapper.class); 2958 x.alias("HistorianBarEvent", HistorianBarEvent.class); 2959 x.alias("RemnantNexusIntel", RemnantNexusIntel.class); 2960 x.alias("SalvorsTallyIntel", SalvorsTallyIntel.class); 2961 x.alias("CryosleeperIntel", CryosleeperIntel.class); 2962 x.alias("HypershuntIntel", HypershuntIntel.class); 2963 x.alias("SimUpdateIntel", SimUpdateIntel.class); 2964 x.alias("CargoPodsIntel", CargoPodsIntel.class); 2965 x.alias("WormholeIntel", WormholeIntel.class); 2966 2967 x.alias("SpecBarEventCreator", SpecBarEventCreator.class); 2968 x.aliasAttribute(SpecBarEventCreator.class, "specId", "sId"); 2969 x.aliasAttribute(SpecBarEventCreator.class, "wasAutoAdded", "wAA"); 2970 2971 x.alias("PlanetaryShieldBarEventCreator", PlanetaryShieldBarEventCreator.class); 2972 x.alias("HistorianBarEventCreator", HistorianBarEventCreator.class); 2973 2974 x.alias("PLTextEntry", PLTextEntry.class); 2975 x.aliasAttribute(PLTextEntry.class, "text", "text"); 2976 x.aliasAttribute(PLTextEntry.class, "timestamp", "ts"); 2977 2978 x.alias("PLStatLevel", PLStatLevel.class); 2979 x.alias("PLStatCredits", PLStatCredits.class); 2980 x.alias("PLStatFleet", PLStatFleet.class); 2981 x.alias("PLStatSupplies", PLStatSupplies.class); 2982 x.alias("PLStatFuel", PLStatFuel.class); 2983 x.alias("PLStatCargo", PLStatCargo.class); 2984 x.alias("PLStatCrew", PLStatCrew.class); 2985 x.alias("PLStatMarines", PLStatMarines.class); 2986 x.alias("PLStatColonies", PLStatColonies.class); 2987 x.alias("PlaythroughLog", PlaythroughLog.class); 2988 2989 x.alias("BaseCustomBounty", BaseCustomBounty.class); 2990 x.alias("AggregateBountyData", AggregateBountyData.class); 2991 2992 x.alias("HistorianData", HistorianData.class); 2993 x.alias("DonationOfferCreator", DonationOfferCreator.class); 2994 x.alias("ShipBlueprintOfferCreator", ShipBlueprintOfferCreator.class); 2995 x.alias("WeaponBlueprintOfferCreator", WeaponBlueprintOfferCreator.class); 2996 x.alias("FighterBlueprintOfferCreator", FighterBlueprintOfferCreator.class); 2997 x.alias("SpecialItemOfferCreator", SpecialItemOfferCreator.class); 2998 2999 x.alias("StageConnection", StageConnection.class); 3000 x.alias("DecivIntel", DecivIntel.class); 3001 x.alias("PlayerFleetPersonnelTracker", PlayerFleetPersonnelTracker.class); 3002 x.alias("ContactIntel", ContactIntel.class); 3003 x.alias("ProductionReportIntel", ProductionReportIntel.class); 3004 x.alias("AdminData", AdminData.class); 3005 x.alias("FieldRepairsScript", FieldRepairsScript.class); 3006 x.alias("CommSnifferIntel", CommSnifferIntel.class); 3007 3008 3009 3010 x.alias("PersonalFleetHoracioCaden", PersonalFleetHoracioCaden.class); 3011 x.alias("PersonalFleetOxanaHyder", PersonalFleetOxanaHyder.class); 3012 x.alias("MiscFleetRouteManager", MiscFleetRouteManager.class); 3013 x.alias("EncounterManager", EncounterManager.class); 3014 3015 x.alias("AddedStream", AddedStream.class); 3016 x.aliasAttribute(AddedStream.class, "terrain", "tn"); 3017 x.aliasAttribute(AddedStream.class, "plugin", "p"); 3018 x.aliasAttribute(AddedStream.class, "from", "f"); 3019 x.aliasAttribute(AddedStream.class, "to", "t"); 3020 x.aliasAttribute(AddedStream.class, "control", "c"); 3021 x.aliasAttribute(AddedStream.class, "timestamp", "ts"); 3022 3023 3024 x.alias("FactionCommissionIntel", FactionCommissionIntel.class); 3025 x.alias("FCI-RepChangeData", RepChangeData.class); 3026 3027 x.alias("WeaponBlueprintOffer", WeaponBlueprintOffer.class); 3028 x.alias("HostileActivityEventIntel", HostileActivityEventIntel.class); 3029 x.alias("ScientistAICoreIntel", ScientistAICoreIntel.class); 3030 x.alias("GAAtTheGates", GAAtTheGates.class); 3031 x.alias("GATransverseJump", GATransverseJump.class); 3032 x.alias("LuddicShrineIntel", LuddicShrineIntel.class); 3033 x.alias("HyperspaceTopographyEventIntel", LuddicShrineIntel.class); 3034 x.alias("DisposableHostileActivityFleetManager", DisposableHostileActivityFleetManager.class); 3035 3036 x.alias("TopographicDataSpecialData", TopographicDataSpecialData.class); 3037 x.aliasAttribute(TopographicDataSpecialData.class, "points", "p"); 3038 3039 x.alias("ZigLeashAssignmentAI", ZigLeashAssignmentAI.class); 3040 x.alias("ZigFIDConfig", ZigFIDConfig.class); 3041 3042 x.alias("ShipQuality", ShipQuality.class); 3043 3044 x.alias("TriggerFleetAssignmentAI", TriggerFleetAssignmentAI.class); 3045 x.alias("MissionFleetAutoDespawn", MissionFleetAutoDespawn.class); 3046 x.alias("BHM-DefeatTriggerAdded", DefeatTriggerAdded.class); 3047 x.alias("BHM-MakeNonStoryCriticalAction", MakeNonStoryCriticalAction.class); 3048 x.alias("BHM-SetFleetFlagAction", SetFleetFlagAction.class); 3049 x.alias("BHM-StageData", StageData.class); 3050 x.alias("BHM-ImportanceData", ImportanceData.class); 3051 3052 x.alias("BHM-VS", VariableSet.class); 3053 3054 x.alias("BaseEventIntel", BaseEventIntel.class); 3055 3056 x.alias("BEI-EventStageData", EventStageData.class); 3057// x.aliasAttribute(EventStageData.class, "id", ""); 3058// x.aliasAttribute(EventStageData.class, "progress", ""); 3059// x.aliasAttribute(EventStageData.class, "isOneOffEvent", ""); 3060// x.aliasAttribute(EventStageData.class, "wasEverReached", ""); 3061// x.aliasAttribute(EventStageData.class, "isRepeatable", ""); 3062// x.aliasAttribute(EventStageData.class, "sendIntelUpdateOnReaching", ""); 3063// x.aliasAttribute(EventStageData.class, "hideIconWhenPastStageUnlessLastActive", ""); 3064// x.aliasAttribute(EventStageData.class, "keepIconBrightWhenLaterStageReached", ""); 3065// x.aliasAttribute(EventStageData.class, "iconSize", ""); 3066// x.aliasAttribute(EventStageData.class, "randomized", ""); 3067// x.aliasAttribute(EventStageData.class, "randomType", ""); 3068// x.aliasAttribute(EventStageData.class, "progressToResetAt", ""); 3069// x.aliasAttribute(EventStageData.class, "progressToRollAt", ""); 3070// x.aliasAttribute(EventStageData.class, "rollData", ""); 3071 3072 x.alias("OSGRec", OfficerSkillGainRecord.class); 3073 x.aliasAttribute(OfficerSkillGainRecord.class, "personId", "p"); 3074 x.aliasAttribute(OfficerSkillGainRecord.class, "skillId", "s"); 3075 x.aliasAttribute(OfficerSkillGainRecord.class, "elite", "e"); 3076 3077 x.alias("SModRec", SModRecord.class); 3078 x.aliasAttribute(SModRecord.class, "member", "m"); 3079 x.aliasAttribute(SModRecord.class, "smods", "sm"); 3080 x.aliasAttribute(SModRecord.class, "spSpent", "sp"); 3081 x.aliasAttribute(SModRecord.class, "bonusXPFractionGained", "bxp"); 3082 x.aliasAttribute(SModRecord.class, "timestamp", "ts"); 3083 3084 3085 x.alias("RouteFleetAssignmentAI", RouteFleetAssignmentAI.class); 3086 x.alias("RaidIntel", RaidIntel.class); 3087 x.alias("SlipstreamManager-StreamData", StreamData.class); 3088 3089 3090 //x.alias("AddedStream", AddedStream.class); 3091 //x.aliasAttribute(BaseHubMissionCreator.class, "", ""); 3092 3093 } 3094 3095// // problem: adding a new field could break saves 3096// public static void autoAlias(XStream x, Class c, String name, int level) { 3097// x.alias(name, c); 3098// 3099// char curr = 'a'; 3100// for (Field f : c.getFields()) { 3101// if (Modifier.isTransient(f.getModifiers())) continue; 3102// String alias = "" + curr; 3103// if (level > 0) alias += level; 3104// x.alias("", c); 3105// curr++; 3106// } 3107// } 3108 3109 3110 3111 3112 3113 @Override 3114 public PluginPick<ShipAIPlugin> pickShipAI(FleetMemberAPI member, ShipAPI ship) { 3115 if (ship.isFighter()) { 3116 if (ship.getHullSpec().hasTag(Tags.THREAT_SWARM_AI)) { 3117 return new PluginPick<ShipAIPlugin>(new ThreatSwarmAI(ship), PickPriority.CORE_SPECIFIC); 3118 } 3119 if (ship.getHullSpec().hasTag(Tags.DWELLER_VORTEX)) { 3120 return new PluginPick<ShipAIPlugin>(new ShroudedVortexAI(ship), PickPriority.CORE_SPECIFIC); 3121 } 3122 if (ship.getHullSpec().hasTag(Tags.DWELLER_EJECTA)) { 3123 return new PluginPick<ShipAIPlugin>(new ShroudedEjectaAI(ship), PickPriority.CORE_SPECIFIC); 3124 } 3125 return null; 3126 } 3127 3128 3129 if (ship.getHullSpec().hasTag(Tags.THREAT)) { 3130 ShipAIConfig config = new ShipAIConfig(); 3131 3132 //boolean overseer = ship.getHullSpec().getHullId().equals("overseer_unit"); 3133 3134 if (ship.getHullSpec().hasTag(Tags.THREAT_TIMID)) { 3135 config.personalityOverride = Personalities.TIMID; 3136 } else if (ship.getHullSpec().hasTag(Tags.THREAT_CAUTIOUS)) { 3137 config.personalityOverride = Personalities.CAUTIOUS; 3138 } else if (ship.getHullSpec().hasTag(Tags.THREAT_AGGRESSIVE)) { 3139 config.personalityOverride = Personalities.AGGRESSIVE; 3140// config.alwaysStrafeOffensively = true; 3141// config.backingOffWhileNotVentingAllowed = false; 3142// config.turnToFaceWithUndamagedArmor = false; 3143// config.burnDriveIgnoreEnemies = true; 3144 } else if (ship.getHullSpec().hasTag(Tags.THREAT_RECKLESS)) { 3145 config.personalityOverride = Personalities.RECKLESS; 3146 config.alwaysStrafeOffensively = true; 3147 config.backingOffWhileNotVentingAllowed = false; 3148 config.turnToFaceWithUndamagedArmor = false; 3149 config.burnDriveIgnoreEnemies = true; 3150 } else { 3151 config.personalityOverride = Personalities.STEADY; 3152 } 3153 3154 PickPriority priority = PickPriority.CORE_SET; 3155 return new PluginPick<ShipAIPlugin>(Global.getSettings().createDefaultShipAI(ship, config), priority); 3156 } 3157 3158 if (ship.getHullSpec().hasTag(Tags.DWELLER)) { 3159 ShipAIConfig config = new ShipAIConfig(); 3160 3161 if (ship.getHullSpec().hasTag(Tags.DWELLER_TIMID)) { 3162 config.personalityOverride = Personalities.TIMID; 3163 } else if (ship.getHullSpec().hasTag(Tags.DWELLER_CAUTIOUS)) { 3164 config.personalityOverride = Personalities.CAUTIOUS; 3165 } else if (ship.getHullSpec().hasTag(Tags.DWELLER_AGGRESSIVE)) { 3166 config.personalityOverride = Personalities.AGGRESSIVE; 3167 } else if (ship.getHullSpec().hasTag(Tags.DWELLER_RECKLESS)) { 3168 config.personalityOverride = Personalities.RECKLESS; 3169 config.alwaysStrafeOffensively = true; 3170 config.backingOffWhileNotVentingAllowed = false; 3171 config.turnToFaceWithUndamagedArmor = false; 3172 config.burnDriveIgnoreEnemies = true; 3173 } else { 3174 config.personalityOverride = Personalities.STEADY; 3175 } 3176 3177 PickPriority priority = PickPriority.CORE_SET; 3178 return new PluginPick<ShipAIPlugin>(Global.getSettings().createDefaultShipAI(ship, config), priority); 3179 } 3180 3181 3182 3183 Set<String> derelicts = new HashSet<String>(); 3184 derelicts.add("warden"); 3185 derelicts.add("defender"); 3186 derelicts.add("picket"); 3187 derelicts.add("sentry"); 3188 derelicts.add("berserker"); 3189 derelicts.add("bastillion"); 3190 3191 boolean zigguratOnEnemySide = ship.getHullSpec().getHullId().equals("ziggurat") && 3192 (member == null || member.getFleetCommander() == null || !member.getFleetCommander().isPlayer()); 3193 3194 String hullId = ship.getHullSpec().getHullId(); 3195 if (!zigguratOnEnemySide && 3196 !derelicts.contains(hullId) && !Misc.isAutomated(ship.getVariant())) return null; 3197 3198 //HullSize size = ship.getHullSize(); 3199 3200 ShipAIConfig config = new ShipAIConfig(); 3201 config.alwaysStrafeOffensively = true; 3202 config.backingOffWhileNotVentingAllowed = false; 3203 config.turnToFaceWithUndamagedArmor = false; 3204 config.burnDriveIgnoreEnemies = true; 3205 3206 boolean carrier = false; 3207 if (ship != null && ship.getVariant() != null) { 3208 carrier = ship.getVariant().isCarrier() && !ship.getVariant().isCombat(); 3209 } 3210 if (carrier) { 3211 config.personalityOverride = Personalities.AGGRESSIVE; 3212 config.backingOffWhileNotVentingAllowed = true; 3213 } else { 3214 config.personalityOverride = Personalities.RECKLESS; 3215 } 3216 3217 PickPriority priority = PickPriority.CORE_SET; 3218 if (zigguratOnEnemySide) { 3219 priority = PickPriority.CORE_SPECIFIC; 3220 } 3221 return new PluginPick<ShipAIPlugin>(Global.getSettings().createDefaultShipAI(ship, config), priority); 3222 } 3223 3224// public PluginPick<MissileAIPlugin> pickMissileAI(final MissileAPI missile, final ShipAPI launchingShip) { 3225// if (missile.getWeaponSpec() != null && missile.getWeaponSpec().getWeaponId().equals("motelauncher")) { 3226// return new PluginPick<MissileAIPlugin>(new MoteAIScript(missile), PickPriority.MOD_GENERAL); 3227// } 3228// if (missile.getWeaponSpec() != null && missile.getWeaponSpec().getWeaponId().equals("motelauncher_hf")) { 3229// return new PluginPick<MissileAIPlugin>(new MoteAIScript(missile), PickPriority.MOD_GENERAL); 3230// } 3231// return null; 3232// } 3233 3234 public void convertTo0951aSkillSystemIfNeeded() { 3235 if (Global.getSector().getCharacterData().getSavefileVersion() != null) { 3236 return; 3237 } 3238 3239 SectorAPI engine = Global.getSector(); 3240 engine.getCharacterData().setSavefileVersion("0.95.1a"); 3241 3242 for (AdminData admin : engine.getCharacterData().getAdmins()) { 3243 convertPersonSkillsTo0951a(admin.getPerson()); 3244 } 3245 3246 List<LocationAPI> all = new ArrayList<LocationAPI>(); 3247 all.add(engine.getHyperspace()); 3248 all.addAll(engine.getStarSystems()); 3249 for (LocationAPI curr : all) { 3250 for (CampaignFleetAPI fleet : curr.getFleets()) { 3251 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) { 3252 convertPersonSkillsTo0951a(member.getCaptain()); 3253 if (fleet.isPlayerFleet() && member.getCaptain().isAICore()) { 3254 String aiCoreId = member.getCaptain().getAICoreId(); 3255 boolean alpha = Commodities.ALPHA_CORE.equals(aiCoreId); 3256 boolean beta = Commodities.BETA_CORE.equals(aiCoreId); 3257 boolean gamma = Commodities.GAMMA_CORE.equals(aiCoreId); 3258 3259 int points = 0; 3260 float mult = 1f; 3261 if (alpha) { 3262 points = AICoreOfficerPluginImpl.ALPHA_POINTS; 3263 mult = AICoreOfficerPluginImpl.ALPHA_MULT; 3264 } else if (beta) { 3265 points = AICoreOfficerPluginImpl.BETA_POINTS; 3266 mult = AICoreOfficerPluginImpl.BETA_MULT; 3267 } else if (gamma) { 3268 points = AICoreOfficerPluginImpl.GAMMA_POINTS; 3269 mult = AICoreOfficerPluginImpl.GAMMA_MULT; 3270 } 3271 member.getCaptain().getMemoryWithoutUpdate().unset(AICoreOfficerPluginImpl.AUTOMATED_POINTS_VALUE); 3272 member.getCaptain().getMemoryWithoutUpdate().set(AICoreOfficerPluginImpl.AUTOMATED_POINTS_MULT, mult); 3273 } 3274 } 3275 } 3276 } 3277 3278 for (LocationAPI curr : all) { 3279 for (SectorEntityToken entity : curr.getAllEntities()) { 3280 if (entity.getMarket() != null && entity.getMarket().getAdmin() != null) { 3281 convertPersonSkillsTo0951a(entity.getMarket().getAdmin()); 3282 } 3283 if (entity.getMemoryWithoutUpdate() != null && entity.getMemoryWithoutUpdate().contains("$defenderFleet")) { 3284 CampaignFleetAPI fleet = (CampaignFleetAPI) entity.getMemoryWithoutUpdate().get("$defenderFleet"); 3285 if (fleet != null) { 3286 for (FleetMemberAPI member : fleet.getFleetData().getMembersListCopy()) { 3287 convertPersonSkillsTo0951a(member.getCaptain()); 3288 } 3289 } 3290 } 3291 } 3292 } 3293 3294 MutableCharacterStatsAPI stats = engine.getPlayerStats(); 3295 int skillPoints = 0; 3296 int storyPoints = 0; 3297 for (SkillLevelAPI sl : stats.getSkillsCopy()) { 3298 int level = (int) sl.getLevel(); 3299 if (level > 0) skillPoints++; 3300 if (level > 1) storyPoints++; 3301 for (int i = 0; i < level; i++) { 3302 stats.decreaseSkill(sl.getSkill().getId()); 3303 } 3304 } 3305 stats.setPoints(stats.getPoints() + skillPoints); 3306 stats.setStoryPoints(stats.getStoryPoints() + storyPoints); 3307 stats.refreshCharacterStatsEffects(); 3308 stats.refreshAllOutpostsEffectsForPlayerOutposts(); 3309 3310 engine.addTransientScript(new EveryFrameScript() { 3311 int frames = 0; 3312 boolean done = false; 3313 public boolean runWhilePaused() { 3314 return true; 3315 } 3316 public boolean isDone() { 3317 return done; 3318 } 3319 public void advance(float amount) { 3320 frames++; 3321 if (frames > 2 && !Global.getSector().getCampaignUI().isShowingDialog()) { 3322 Global.getSector().getCampaignUI().showConfirmDialog("Your skills have been reset " 3323 + "to accomodate the new skill system. Skill and story points have been refunded.\n\n" 3324 + "Officer, administrator, and AI core skills have been adjusted for the new system.", 3325 "Ok", null, null, null); 3326 done = true; 3327 } 3328 } 3329 }); 3330 } 3331 3332 @SuppressWarnings("deprecation") 3333 public void convertPersonSkillsTo0951a(PersonAPI person) { 3334 if (person == null || person.isPlayer() || person.isDefault()) return; 3335 3336 MutableCharacterStatsAPI stats = person.getStats(); 3337 stats.setSkipRefresh(true); 3338 3339 convertSkill(Skills.SHIELD_MODULATION, Skills.FIELD_MODULATION, person); 3340 convertSkill(Skills.RELIABILITY_ENGINEERING, Skills.COMBAT_ENDURANCE, person); 3341 3342 convertSkill(Skills.STRIKE_COMMANDER, Skills.HELMSMANSHIP, person); 3343 convertSkill(Skills.STRIKE_COMMANDER, Skills.POLARIZED_ARMOR, person); 3344 3345 convertSkill(Skills.RANGED_SPECIALIZATION, Skills.TARGET_ANALYSIS, person); 3346 convertSkill(Skills.RANGED_SPECIALIZATION, Skills.BALLISTIC_MASTERY, person); 3347 3348 convertSkill(Skills.PHASE_MASTERY, Skills.FIELD_MODULATION, person); 3349 convertSkill(Skills.PHASE_MASTERY, Skills.ORDNANCE_EXPERTISE, person); 3350 3351 convertSkill(Skills.WEAPON_DRILLS, Skills.TACTICAL_DRILLS, person); 3352 convertSkill(Skills.SPECIAL_MODIFICATIONS, Skills.BEST_OF_THE_BEST, person); 3353 3354 3355 removeSkill(Skills.COLONY_MANAGEMENT, person); 3356 removeSkill(Skills.SPACE_OPERATIONS, person); 3357 removeSkill(Skills.PLANETARY_OPERATIONS, person); 3358 removeSkill(Skills.AUXILIARY_SUPPORT, person); 3359 3360 if (person.isAICore() && stats.hasSkill(Skills.INDUSTRIAL_PLANNING)) { 3361 stats.setSkillLevel(Skills.HYPERCOGNITION, 1); 3362 } 3363 3364 stats.setSkipRefresh(false); 3365 3366 } 3367 3368 public void removeSkill(String id, PersonAPI person) { 3369 for (int i = 0; i < 10; i++) { 3370 person.getStats().decreaseSkill(id); 3371 } 3372 } 3373 public void convertSkill(String from, String to, PersonAPI person) { 3374 int level = (int) person.getStats().getSkillLevel(from); 3375 if (level > 0) { 3376 for (int i = 0; i < level; i++) { 3377 person.getStats().decreaseSkill(from); 3378 } 3379 person.getStats().setSkillLevel(to, level); 3380 } 3381 } 3382 3383} 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396