Starsector API
Loading...
Searching...
No Matches
CBRemnantPlus.java
Go to the documentation of this file.
1package com.fs.starfarer.api.impl.campaign.missions.cb;
2
3import java.util.List;
4
5import com.fs.starfarer.api.Global;
6import com.fs.starfarer.api.campaign.AICoreOfficerPlugin;
7import com.fs.starfarer.api.campaign.CampaignFleetAPI;
8import com.fs.starfarer.api.campaign.StarSystemAPI;
9import com.fs.starfarer.api.campaign.econ.MarketAPI;
10import com.fs.starfarer.api.characters.PersonAPI;
11import com.fs.starfarer.api.fleet.FleetMemberAPI;
12import com.fs.starfarer.api.impl.campaign.ids.Commodities;
13import com.fs.starfarer.api.impl.campaign.ids.Factions;
14import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
15import com.fs.starfarer.api.impl.campaign.ids.Skills;
16import com.fs.starfarer.api.impl.campaign.ids.Tags;
17import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithBarEvent;
18import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetQuality;
19import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetSize;
20import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.OfficerNum;
21import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.OfficerQuality;
22import com.fs.starfarer.api.impl.campaign.missions.hub.ReqMode;
23import com.fs.starfarer.api.loading.VariantSource;
24import com.fs.starfarer.api.util.Misc;
25import com.fs.starfarer.api.util.WeightedRandomPicker;
26
28
29 public static String ACCEPTED_KEY = "$CBRemnantPlus_accepted";
30 public static float PROB_IN_SYSTEM_WITH_BASE = 0.5f;
31
32 @Override
33 public float getBountyDays() {
35 }
36
37 @Override
38 public float getFrequency(HubMissionWithBarEvent mission, int difficulty) {
39 boolean wasEverAccepted = Global.getSector().getMemoryWithoutUpdate().getBoolean(ACCEPTED_KEY);
40 if (wasEverAccepted) return 0f;
41 return super.getFrequency(mission, difficulty) * CBStats.REMNANT_PLUS_FREQ;
42 }
43
44 @Override
45 public void notifyAccepted(MarketAPI createdAt, HubMissionWithBarEvent mission, CustomBountyData data) {
46 //mission.setNoAbandon();
47 Global.getSector().getMemoryWithoutUpdate().set(ACCEPTED_KEY, true);
48 }
49
50 @Override
51 protected boolean isRepeatableGlobally() {
52 return false;
53 }
54
55 public String getBountyNamePostfix(HubMissionWithBarEvent mission, CustomBountyData data) {
56 return " - Unusual Remnant Fleet";
57 }
58
59 @Override
60 public String getIconName() {
61 return Global.getSettings().getSpriteName("campaignMissions", "remnant_bounty");
62 }
63
64 @Override
65 public CustomBountyData createBounty(MarketAPI createdAt, HubMissionWithBarEvent mission, int difficulty, Object bountyStage) {
67 data.difficulty = difficulty;
68
69 //mission.requireSystem(this);
70 mission.requireSystemTags(ReqMode.NOT_ANY, Tags.THEME_CORE);
71 mission.preferSystemTags(ReqMode.ANY, Tags.HAS_CORONAL_TAP);
72 mission.preferSystemUnexplored();
73 mission.preferSystemInteresting();
74// mission.requireSystemTags(ReqMode.ANY, Tags.THEME_RUINS, Tags.THEME_MISC, Tags.THEME_REMNANT,
75// Tags.THEME_DERELICT, Tags.THEME_REMNANT_DESTROYED);
76 mission.requireSystemNotHasPulsar();
77 mission.preferSystemBlackHoleOrNebula();
78 mission.preferSystemOnFringeOfSector();
79
80 StarSystemAPI system = mission.pickSystem();
81 data.system = system;
82
83 FleetSize size = FleetSize.HUGE;
84 FleetQuality quality = FleetQuality.SMOD_3;
85 OfficerQuality oQuality = OfficerQuality.AI_ALPHA;
86 OfficerNum oNum = OfficerNum.ALL_SHIPS;
87 String type = FleetTypes.PATROL_LARGE;
88
89 beginFleet(mission, data);
90 mission.triggerCreateFleet(size, quality, Factions.REMNANTS, type, data.system);
91 mission.triggerSetFleetOfficers(oNum, oQuality);
92 mission.triggerAutoAdjustFleetSize(size, size.next());
93 mission.triggerSetRemnantConfigActive();
94 mission.triggerSetFleetNoCommanderSkills();
95 mission.triggerFleetAddCommanderSkill(Skills.FLUX_REGULATION, 1);
96 mission.triggerFleetAddCommanderSkill(Skills.ELECTRONIC_WARFARE, 1);
97 mission.triggerFleetAddCommanderSkill(Skills.COORDINATED_MANEUVERS, 1);
98 mission.triggerFleetAddCommanderSkill(Skills.NAVIGATION, 1);
99 mission.triggerFleetSetAllWeapons();
100 mission.triggerMakeHostileAndAggressive();
101 mission.triggerFleetAllowLongPursuit();
102 mission.triggerPickLocationAtInSystemJumpPoint(data.system);
103 mission.triggerSpawnFleetAtPickedLocation(null, null);
104 mission.triggerFleetSetPatrolActionText("sending hyperwave signals");
105 mission.triggerOrderFleetPatrol(data.system, true, Tags.JUMP_POINT, Tags.NEUTRINO, Tags.NEUTRINO_HIGH, Tags.STATION,
106 Tags.SALVAGEABLE, Tags.GAS_GIANT);
107
108 data.fleet = createFleet(mission, data);
109 if (data.fleet == null) return null;
110
111 CampaignFleetAPI fleet = Global.getFactory().createEmptyFleet(Factions.OMEGA, "", true);
112 WeightedRandomPicker<String> picker = new WeightedRandomPicker<String>(mission.getGenRandom());
113 picker.add("tesseract_Attack");
114 picker.add("tesseract_Attack2");
115 picker.add("tesseract_Strike");
116 picker.add("tesseract_Disruptor");
117 fleet.getFleetData().addFleetMember(picker.pick());
118 FleetMemberAPI member = fleet.getFlagship();
119
120 AICoreOfficerPlugin plugin = Misc.getAICoreOfficerPlugin(Commodities.OMEGA_CORE);
121 PersonAPI person = plugin.createPerson(Commodities.OMEGA_CORE, Factions.OMEGA, mission.getGenRandom());
122 member.setCaptain(person);
123
124 int i = data.fleet.getFleetData().getMembersListCopy().size() - 1;
125 FleetMemberAPI last = data.fleet.getFleetData().getMembersListCopy().get(i);
126 data.fleet.getFleetData().removeFleetMember(last);
127
128 data.fleet.setCommander(person);
129 data.fleet.getFleetData().addFleetMember(member);
130 data.fleet.getFleetData().sort();
131 List<FleetMemberAPI> members = data.fleet.getFleetData().getMembersListCopy();
132 for (FleetMemberAPI curr : members) {
133 curr.getRepairTracker().setCR(curr.getRepairTracker().getMaxCR());
134 }
135
136 member.setVariant(member.getVariant().clone(), false, false);
137 member.getVariant().setSource(VariantSource.REFIT);
138 member.getVariant().addTag(Tags.SHIP_LIMITED_TOOLTIP);
139 member.getVariant().addTag(Tags.VARIANT_CONSISTENT_WEAPON_DROPS);
140
141 // otherwise, remnant dialog which isn't appropriate with an Omega in charge
142 data.fleet.getMemoryWithoutUpdate().set("$ignorePlayerCommRequests", true);
143
144 setRepChangesBasedOnDifficulty(data, difficulty);
145 data.baseReward = CBStats.getBaseBounty(difficulty, CBStats.REMNANT_PLUS_MULT, mission);
146
147 return data;
148 }
149
150
151 @Override
152 public int getMaxDifficulty() {
153 return super.getMaxDifficulty();
154 }
155
156 @Override
157 public int getMinDifficulty() {
158 return super.getMaxDifficulty();
159 }
160
161}
162
163
164
165
166
167
static SettingsAPI getSettings()
Definition Global.java:51
static FactoryAPI getFactory()
Definition Global.java:35
static SectorAPI getSector()
Definition Global.java:59
void beginFleet(HubMissionWithBarEvent mission, CustomBountyData data)
CampaignFleetAPI createFleet(HubMissionWithBarEvent mission, CustomBountyData data)
float getFrequency(HubMissionWithBarEvent mission, int difficulty)
CustomBountyData createBounty(MarketAPI createdAt, HubMissionWithBarEvent mission, int difficulty, Object bountyStage)
void notifyAccepted(MarketAPI createdAt, HubMissionWithBarEvent mission, CustomBountyData data)
String getBountyNamePostfix(HubMissionWithBarEvent mission, CustomBountyData data)
static int getBaseBounty(int difficulty, float mult, BaseHubMission mission)
Definition CBStats.java:83
CampaignFleetAPI createEmptyFleet(String factionId, String name, boolean aiMode)
String getSpriteName(String category, String id)