001package com.fs.starfarer.api.impl.campaign.missions.cb; 002 003import com.fs.starfarer.api.campaign.StarSystemAPI; 004import com.fs.starfarer.api.campaign.econ.MarketAPI; 005import com.fs.starfarer.api.impl.campaign.ids.Factions; 006import com.fs.starfarer.api.impl.campaign.ids.FleetTypes; 007import com.fs.starfarer.api.impl.campaign.ids.Skills; 008import com.fs.starfarer.api.impl.campaign.ids.Tags; 009import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithBarEvent; 010import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetQuality; 011import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetSize; 012import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.OfficerNum; 013import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.OfficerQuality; 014 015public class CBMerc extends BaseCustomBountyCreator { 016 017 public static float PROB_SMALL_FLEET = 0.5f; 018 public static float PROB_SOME_PHASE_IN_SMALL_FLEET = 0.5f; 019 public static float PROB_CARRIER_BASED_LARGE_FLEET = 0.33f; 020 public static float PROB_SOME_PHASE_IN_LARGE_FLEET = 0.5f; 021 022 @Override 023 public float getFrequency(HubMissionWithBarEvent mission, int difficulty) { 024 return super.getFrequency(mission, difficulty) * CBStats.MERC_FREQ; 025 } 026 027 public String getBountyNamePostfix(HubMissionWithBarEvent mission, CustomBountyData data) { 028 return " - Elite Mercenary"; 029 } 030 031 protected StarSystemAPI findSystem(MarketAPI createdAt, HubMissionWithBarEvent mission, int difficulty, Object bountyStage) { 032// mission.requireSystemTags(ReqMode.ANY, Tags.THEME_RUINS, Tags.THEME_MISC, Tags.THEME_REMNANT_SECONDARY, 033// Tags.THEME_DERELICT, Tags.THEME_REMNANT_DESTROYED); 034 mission.requireSystemInterestingAndNotUnsafeOrCore(); 035 mission.requireSystemNotHasPulsar(); 036 037 StarSystemAPI system = mission.pickSystem(); 038 return system; 039 } 040 041 protected boolean isAggro() { 042 return true; 043 } 044 045 @Override 046 public CustomBountyData createBounty(MarketAPI createdAt, HubMissionWithBarEvent mission, int difficulty, Object bountyStage) { 047 CustomBountyData data = new CustomBountyData(); 048 data.difficulty = difficulty; 049 050 data.system = findSystem(createdAt, mission, difficulty, bountyStage); 051 if (data.system == null) return null; 052 053// FleetSize size = FleetSize.MEDIUM; 054// FleetSize sizeWolfpack = FleetSize.MEDIUM; 055// FleetQuality quality = FleetQuality.VERY_HIGH; 056// FleetQuality qualityWolfpack = FleetQuality.SMOD_3; 057 058 boolean smallFleet = mission.rollProbability(PROB_SMALL_FLEET); 059 boolean smallUsePhase = mission.rollProbability(PROB_SOME_PHASE_IN_SMALL_FLEET); 060 boolean largeUsePhase = mission.rollProbability(PROB_SOME_PHASE_IN_LARGE_FLEET); 061 boolean largeUseCarriers = mission.rollProbability(PROB_CARRIER_BASED_LARGE_FLEET); 062 063// smallFleet = true; 064// largeUseCarriers = false; 065// largeUsePhase = true; 066// smallUsePhase = true; 067 068 beginFleet(mission, data); 069 if (smallFleet) { 070 data.custom1 = true; 071 if (difficulty <= 6) { 072 mission.triggerCreateFleet(FleetSize.SMALL, FleetQuality.SMOD_3, 073 Factions.MERCENARY, FleetTypes.MERC_BOUNTY_HUNTER, data.system); 074 mission.triggerSetFleetMaxShipSize(1); 075 mission.triggerSetFleetDoctrineOther(1, 4); 076 } else if (difficulty <= 7) { 077 mission.triggerCreateFleet(FleetSize.MEDIUM, FleetQuality.SMOD_3, 078 Factions.MERCENARY, FleetTypes.MERC_BOUNTY_HUNTER, data.system); 079 mission.triggerSetFleetMaxShipSize(2); 080 mission.triggerSetFleetDoctrineOther(2, 4); 081 } else if (difficulty <= 8) { 082 mission.triggerCreateFleet(FleetSize.MEDIUM, FleetQuality.SMOD_3, 083 Factions.MERCENARY, FleetTypes.MERC_BOUNTY_HUNTER, data.system); 084 mission.triggerSetFleetMaxShipSize(3); 085 mission.triggerSetFleetDoctrineOther(3, 4); 086 } else if (difficulty <= 9) { 087 mission.triggerCreateFleet(FleetSize.LARGE, FleetQuality.SMOD_3, 088 Factions.MERCENARY, FleetTypes.MERC_BOUNTY_HUNTER, data.system); 089 mission.triggerSetFleetDoctrineOther(4, 4); 090 } else if (difficulty <= 10) { 091 mission.triggerCreateFleet(FleetSize.LARGE, FleetQuality.SMOD_3, 092 Factions.MERCENARY, FleetTypes.MERC_BOUNTY_HUNTER, data.system); 093 mission.triggerSetFleetDoctrineOther(5, 4); 094 } 095 096 mission.triggerSetFleetMaxNumShips(12); 097 098 if (smallUsePhase) { 099 if (difficulty <= 8) { 100 mission.triggerSetFleetDoctrineComp(0, 0, 5); 101 } else { 102 mission.triggerSetFleetDoctrineComp(4, 0, 3); 103 } 104 } else { 105 mission.triggerSetFleetDoctrineComp(5, 0, 0); 106 } 107 108 mission.triggerFleetAddCommanderSkill(Skills.COORDINATED_MANEUVERS, 1); 109 mission.triggerFleetAddCommanderSkill(Skills.WOLFPACK_TACTICS, 1); 110 mission.triggerFleetAddCommanderSkill(Skills.ELECTRONIC_WARFARE, 1); 111 mission.triggerFleetAddCommanderSkill(Skills.FLUX_REGULATION, 1); 112 mission.triggerFleetAddCommanderSkill(Skills.TACTICAL_DRILLS, 1); 113 mission.triggerSetFleetOfficers(OfficerNum.MORE, OfficerQuality.UNUSUALLY_HIGH); 114 } else { 115 if (difficulty <= 6) { 116 mission.triggerCreateFleet(FleetSize.MEDIUM, FleetQuality.VERY_HIGH, 117 Factions.MERCENARY, FleetTypes.MERC_BOUNTY_HUNTER, data.system); 118 } else if (difficulty <= 7) { 119 mission.triggerCreateFleet(FleetSize.LARGE, FleetQuality.VERY_HIGH, 120 Factions.MERCENARY, FleetTypes.MERC_PRIVATEER, data.system); 121 } else if (difficulty <= 8) { 122 mission.triggerCreateFleet(FleetSize.VERY_LARGE, FleetQuality.VERY_HIGH, 123 Factions.MERCENARY, FleetTypes.MERC_ARMADA, data.system); 124 } else if (difficulty <= 9) { 125 mission.triggerCreateFleet(FleetSize.VERY_LARGE, FleetQuality.SMOD_1, 126 Factions.MERCENARY, FleetTypes.MERC_ARMADA, data.system); 127 } else if (difficulty <= 10) { 128 mission.triggerCreateFleet(FleetSize.HUGE, FleetQuality.SMOD_2, 129 Factions.MERCENARY, FleetTypes.MERC_ARMADA, data.system); 130 } 131 132 if (largeUseCarriers) { 133 mission.triggerSetFleetDoctrineComp(3, 4, 0); 134 mission.triggerFleetAddCommanderSkill(Skills.CARRIER_GROUP, 1); 135 mission.triggerFleetAddCommanderSkill(Skills.FIGHTER_UPLINK, 1); 136 } else { 137 if (largeUsePhase) { 138 mission.triggerSetFleetDoctrineComp(3, 0, 2); 139 mission.triggerFleetAddCommanderSkill(Skills.PHASE_CORPS, 1); 140 mission.triggerFleetAddCommanderSkill(Skills.FLUX_REGULATION, 1); 141 } else { 142 mission.triggerSetFleetDoctrineComp(5, 0, 0); 143 mission.triggerFleetAddCommanderSkill(Skills.COORDINATED_MANEUVERS, 1); 144 mission.triggerFleetAddCommanderSkill(Skills.ELECTRONIC_WARFARE, 1); 145 } 146 } 147 148 mission.triggerSetFleetDoctrineOther(3, 3); 149 mission.triggerSetFleetOfficers(OfficerNum.MORE, OfficerQuality.HIGHER); 150 } 151 152 153 mission.triggerSetFleetNoCommanderSkills(); 154 mission.triggerFleetAddCommanderSkill(Skills.CREW_TRAINING, 1); 155 mission.triggerSetFleetFaction(Factions.INDEPENDENT); 156 if (isAggro()) { 157 mission.triggerMakeHostileAndAggressive(); 158 mission.triggerMakeNoRepImpact(); 159 } 160 mission.triggerFleetAllowLongPursuit(); 161 mission.triggerDoNotShowFleetDesc(); 162 mission.triggerFleetSetAllWeapons(); 163 164 mission.triggerPickLocationAtInSystemJumpPoint(data.system); 165 mission.triggerSpawnFleetAtPickedLocation(null, null); 166 //mission.triggerFleetSetPatrolActionText("patrolling"); 167 mission.triggerOrderFleetPatrol(data.system, true, Tags.JUMP_POINT, Tags.SALVAGEABLE, Tags.PLANET, Tags.OBJECTIVE); 168 169 data.fleet = createFleet(mission, data); 170 if (data.fleet == null) return null; 171 172 setRepChangesBasedOnDifficulty(data, difficulty); 173 data.baseReward = CBStats.getBaseBounty(difficulty, CBStats.MERC_MULT, mission); 174 175 return data; 176 } 177 178 @Override 179 public void updateInteractionData(HubMissionWithBarEvent mission, CustomBountyData data) { 180 String id = mission.getMissionId(); 181 if (data.custom1 != null) { 182 mission.set("$" + id + "_smallMerc", data.difficulty); 183 mission.set("$bcb_smallMerc", data.difficulty); 184 } else { 185 mission.unset("$" + id + "_smallMerc"); 186 mission.unset("$bcb_smallMerc"); 187 } 188 } 189 190 @Override 191 public int getMaxDifficulty() { 192 return super.getMaxDifficulty(); 193 } 194 195 @Override 196 public int getMinDifficulty() { 197 return 6; 198 } 199 200} 201 202 203 204 205 206