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.Tags; 008import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithBarEvent; 009import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetQuality; 010import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetSize; 011import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.OfficerNum; 012import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.OfficerQuality; 013 014public class CBPirate extends BaseCustomBountyCreator { 015 016 public static float PROB_IN_SYSTEM_WITH_BASE = 0.5f; 017 018 @Override 019 public float getFrequency(HubMissionWithBarEvent mission, int difficulty) { 020 if (Factions.PIRATES.equals(mission.getPerson().getFaction().getId())) return 0f; 021 return super.getFrequency(mission, difficulty) * CBStats.PIRATE_FREQ; 022 } 023 024 public String getBountyNamePostfix(HubMissionWithBarEvent mission, CustomBountyData data) { 025 return " - Pirate"; 026 } 027 028 @Override 029 public CustomBountyData createBounty(MarketAPI createdAt, HubMissionWithBarEvent mission, int difficulty, Object bountyStage) { 030 CustomBountyData data = new CustomBountyData(); 031 data.difficulty = difficulty; 032 033// if (difficulty >= 4) { 034// mission.requireSystemTags(ReqMode.ANY, Tags.THEME_RUINS, Tags.THEME_MISC, Tags.THEME_REMNANT_SECONDARY, 035// Tags.THEME_DERELICT, Tags.THEME_REMNANT_DESTROYED); 036// } else { 037// mission.requireSystemTags(ReqMode.ANY, Tags.THEME_RUINS, Tags.THEME_MISC, 038// Tags.THEME_DERELICT); 039// } 040 mission.requireSystemInterestingAndNotUnsafeOrCore(); 041 042 mission.requireSystemNotHasPulsar(); 043 if (difficulty >= 4 && mission.rollProbability(PROB_IN_SYSTEM_WITH_BASE)) { 044 mission.preferSystemHasBase(Factions.PIRATES); 045 } 046 StarSystemAPI system = mission.pickSystem(); 047 data.system = system; 048 049 FleetSize size = FleetSize.MEDIUM; 050 FleetQuality quality = FleetQuality.DEFAULT; 051 String type = FleetTypes.PATROL_MEDIUM; 052 OfficerQuality oQuality = OfficerQuality.DEFAULT; 053 OfficerNum oNum = OfficerNum.DEFAULT; 054 055 String factionId = Factions.PIRATES; 056 057 if (difficulty <= 0) { 058 size = FleetSize.TINY; 059 quality = FleetQuality.VERY_LOW; 060 oQuality = OfficerQuality.LOWER; 061 oNum = OfficerNum.FC_ONLY; 062 type = FleetTypes.PATROL_SMALL; 063 } else if (difficulty == 1) { 064 size = FleetSize.VERY_SMALL; 065 quality = FleetQuality.VERY_LOW; 066 oQuality = OfficerQuality.LOWER; 067 oNum = OfficerNum.FC_ONLY; 068 type = FleetTypes.PATROL_SMALL; 069 } else if (difficulty == 2) { 070 size = FleetSize.SMALL; 071 quality = FleetQuality.DEFAULT; 072 oQuality = OfficerQuality.LOWER; 073 oNum = OfficerNum.FEWER; 074 type = FleetTypes.PATROL_SMALL; 075 } else if (difficulty == 3) { 076 size = FleetSize.SMALL; 077 quality = FleetQuality.DEFAULT; 078 oQuality = OfficerQuality.DEFAULT; 079 oNum = OfficerNum.DEFAULT; 080 type = FleetTypes.PATROL_MEDIUM; 081 } else if (difficulty == 4 || difficulty == 5) { 082 size = FleetSize.MEDIUM; 083 quality = FleetQuality.DEFAULT; 084 oQuality = OfficerQuality.DEFAULT; 085 oNum = OfficerNum.DEFAULT; 086 type = FleetTypes.PATROL_MEDIUM; 087 } else if (difficulty == 6) { 088 size = FleetSize.LARGE; 089 quality = FleetQuality.DEFAULT; 090 oQuality = OfficerQuality.DEFAULT; 091 oNum = OfficerNum.DEFAULT; 092 type = FleetTypes.PATROL_LARGE; 093 } else if (difficulty == 7) { 094 size = FleetSize.LARGE; 095 quality = FleetQuality.HIGHER; 096 oQuality = OfficerQuality.DEFAULT; 097 oNum = OfficerNum.MORE; 098 type = FleetTypes.PATROL_LARGE; 099 } else if (difficulty == 8) { 100 size = FleetSize.VERY_LARGE; 101 quality = FleetQuality.HIGHER; 102 oQuality = OfficerQuality.DEFAULT; 103 oNum = OfficerNum.MORE; 104 type = FleetTypes.PATROL_LARGE; 105 } else if (difficulty == 9) { 106 size = FleetSize.HUGE; 107 quality = FleetQuality.HIGHER; 108 oQuality = OfficerQuality.HIGHER; 109 oNum = OfficerNum.MORE; 110 type = FleetTypes.PATROL_LARGE; 111 } else {// if (difficulty == 10) { 112 size = FleetSize.MAXIMUM; 113 quality = FleetQuality.HIGHER; 114 oQuality = OfficerQuality.HIGHER; 115 oNum = OfficerNum.MORE; 116 //oNum = OfficerNum.ALL_SHIPS; 117 type = FleetTypes.PATROL_LARGE; 118 } 119 120 beginFleet(mission, data); 121 mission.triggerCreateFleet(size, quality, factionId, type, data.system); 122 mission.triggerSetFleetOfficers(oNum, oQuality); 123 mission.triggerAutoAdjustFleetSize(size, size.next()); 124 mission.triggerSetStandardAggroPirateFlags(); 125 mission.triggerPickLocationAtInSystemJumpPoint(data.system); 126 mission.triggerSpawnFleetAtPickedLocation(null, null); 127 //mission.triggerOrderFleetPatrol(data.system); 128 mission.triggerOrderFleetPatrol(data.system, true, Tags.JUMP_POINT, Tags.SALVAGEABLE, Tags.PLANET, Tags.STATION); 129 data.fleet = createFleet(mission, data); 130 if (data.fleet == null) return null; 131 132 setRepChangesBasedOnDifficulty(data, difficulty); 133 data.baseReward = CBStats.getBaseBounty(difficulty, CBStats.PIRATE_MULT, mission); 134 135 return data; 136 } 137 138} 139 140 141 142 143 144