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