001package com.fs.starfarer.api.impl.campaign.missions.cb;
002
003import com.fs.starfarer.api.campaign.FactionAPI;
004import com.fs.starfarer.api.campaign.FactionAPI.ShipPickMode;
005import com.fs.starfarer.api.campaign.StarSystemAPI;
006import com.fs.starfarer.api.campaign.econ.MarketAPI;
007import com.fs.starfarer.api.impl.campaign.ids.Factions;
008import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
009import com.fs.starfarer.api.impl.campaign.ids.Tags;
010import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithBarEvent;
011import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetQuality;
012import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetSize;
013import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.OfficerNum;
014import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.OfficerQuality;
015
016public class CBDeserter extends BaseCustomBountyCreator {
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.DESERTER_FREQ;
022        }
023        
024        public String getBountyNamePostfix(HubMissionWithBarEvent mission, CustomBountyData data) {
025                return " - Deserter";
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//              mission.requireSystemTags(ReqMode.ANY, Tags.THEME_RUINS, Tags.THEME_MISC, Tags.THEME_REMNANT_SECONDARY,
034//                                                                Tags.THEME_DERELICT, Tags.THEME_REMNANT_DESTROYED);
035                mission.requireSystemInterestingAndNotUnsafeOrCore();
036                mission.requireSystemNotHasPulsar();
037                StarSystemAPI system = mission.pickSystem();
038                data.system = system;
039        
040                FleetSize size = FleetSize.MEDIUM;
041                FleetQuality quality = FleetQuality.DEFAULT;
042                String type = FleetTypes.PATROL_MEDIUM;
043                OfficerQuality oQuality = OfficerQuality.DEFAULT;
044                OfficerNum oNum = OfficerNum.DEFAULT;
045                
046                FactionAPI faction = mission.getPerson().getFaction();
047                
048                if (difficulty <= 4) {
049                        size = FleetSize.SMALL;
050                        quality = FleetQuality.DEFAULT;
051                        oQuality = OfficerQuality.DEFAULT;
052                        oNum = OfficerNum.DEFAULT;
053                        type = FleetTypes.PATROL_SMALL;
054                } else if (difficulty <= 5) {
055                        size = FleetSize.MEDIUM;
056                        quality = FleetQuality.DEFAULT;
057                        oQuality = OfficerQuality.DEFAULT;
058                        oNum = OfficerNum.DEFAULT;
059                        type = FleetTypes.PATROL_MEDIUM;
060                } else if (difficulty == 6) {
061                        size = FleetSize.LARGE;
062                        quality = FleetQuality.DEFAULT;
063                        oQuality = OfficerQuality.DEFAULT;
064                        oNum = OfficerNum.DEFAULT;
065                        type = FleetTypes.PATROL_LARGE;
066                } else if (difficulty == 7) {
067                        size = FleetSize.LARGE;
068                        quality = FleetQuality.HIGHER;
069                        oQuality = OfficerQuality.DEFAULT;
070                        oNum = OfficerNum.MORE;
071                        type = FleetTypes.PATROL_LARGE;
072                } else if (difficulty == 8) {
073                        size = FleetSize.VERY_LARGE;
074                        quality = FleetQuality.HIGHER;
075                        oQuality = OfficerQuality.DEFAULT;
076                        oNum = OfficerNum.MORE;
077                        type = FleetTypes.PATROL_LARGE;
078                } else if (difficulty == 9) {
079                        size = FleetSize.HUGE;
080                        quality = FleetQuality.HIGHER;
081                        oQuality = OfficerQuality.HIGHER;
082                        oNum = OfficerNum.MORE;
083                        type = FleetTypes.PATROL_LARGE;
084                } else {
085                        size = FleetSize.MAXIMUM;
086                        quality = FleetQuality.HIGHER;
087                        oQuality = OfficerQuality.HIGHER;
088                        oNum = OfficerNum.MORE;
089                        type = FleetTypes.PATROL_LARGE;
090                }
091                
092                beginFleet(mission, data);
093                mission.triggerCreateFleet(size, quality, faction.getId(), type, data.system);
094                mission.triggerSetFleetOfficers(oNum, oQuality);
095                mission.triggerAutoAdjustFleetSize(size, size.next());
096                mission.triggerSetFleetFaction(Factions.PIRATES);
097                mission.triggerFleetSetShipPickMode(ShipPickMode.PRIORITY_THEN_ALL);
098                
099                mission.triggerFleetSetNoFactionInName();
100                if (faction.getEntityNamePrefix() == null || faction.getEntityNamePrefix().isEmpty()) {
101                        mission.triggerFleetSetName("Deserter");
102                } else {
103                        mission.triggerFleetSetName(faction.getEntityNamePrefix() + " Deserter");
104                }
105                
106                mission.triggerSetStandardAggroPirateFlags();
107                mission.triggerPickLocationAtInSystemJumpPoint(data.system);
108                mission.triggerSpawnFleetAtPickedLocation(null, null);
109                //mission.triggerOrderFleetPatrol(data.system);
110                mission.triggerOrderFleetPatrol(data.system, true, Tags.JUMP_POINT, Tags.SALVAGEABLE, Tags.PLANET);
111                data.fleet = createFleet(mission, data);
112                if (data.fleet == null) return null;
113                
114                setRepChangesBasedOnDifficulty(data, difficulty);
115                data.baseReward = CBStats.getBaseBounty(difficulty, CBStats.DESERTER_MULT, mission);
116                
117                return data;
118        }
119        
120
121        @Override
122        public int getMaxDifficulty() {
123                return super.getMaxDifficulty();
124        }
125
126        @Override
127        public int getMinDifficulty() {
128                return 4;
129        }
130
131}
132
133
134
135
136
137