001package com.fs.starfarer.api.impl.campaign.missions.cb;
002
003import com.fs.starfarer.api.Global;
004import com.fs.starfarer.api.campaign.StarSystemAPI;
005import com.fs.starfarer.api.campaign.econ.MarketAPI;
006import com.fs.starfarer.api.impl.campaign.ids.Factions;
007import com.fs.starfarer.api.impl.campaign.ids.FleetTypes;
008import com.fs.starfarer.api.impl.campaign.ids.Skills;
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;
015import com.fs.starfarer.api.impl.campaign.missions.hub.ReqMode;
016
017public class CBRemnant extends BaseCustomBountyCreator {
018
019        public static float PROB_IN_SYSTEM_WITH_BASE = 0.5f;
020        public static float PROB_IN_SYSTEM_WITH_TAP = 0.25f;
021        
022        @Override
023        public float getFrequency(HubMissionWithBarEvent mission, int difficulty) {
024                return super.getFrequency(mission, difficulty) * CBStats.REMNANT_FREQ;
025        }
026
027        public String getBountyNamePostfix(HubMissionWithBarEvent mission, CustomBountyData data) {
028                return " - Remnant Fleet";
029        }
030        
031        @Override
032        public String getIconName() {
033                return Global.getSettings().getSpriteName("campaignMissions", "remnant_bounty");
034        }
035        
036        @Override
037        public CustomBountyData createBounty(MarketAPI createdAt, HubMissionWithBarEvent mission, int difficulty, Object bountyStage) {
038                CustomBountyData data = new CustomBountyData();
039                data.difficulty = difficulty;
040                
041                //mission.requireSystem(this);
042                mission.requireSystemTags(ReqMode.NOT_ANY, Tags.THEME_CORE);
043//              mission.requireSystemTags(ReqMode.ANY, Tags.THEME_RUINS, Tags.THEME_MISC, Tags.THEME_REMNANT,
044//                                Tags.THEME_DERELICT, Tags.THEME_REMNANT_DESTROYED);
045                mission.preferSystemInteresting();
046                mission.preferSystemUnexplored();
047                mission.requireSystemNotHasPulsar();            
048                if (difficulty >= 9 && mission.rollProbability(PROB_IN_SYSTEM_WITH_BASE)) {
049                        mission.preferSystemTags(ReqMode.ANY, Tags.THEME_REMNANT_MAIN);
050                        mission.requireSystemTags(ReqMode.NOT_ANY, Tags.THEME_REMNANT_DESTROYED);
051                } else if (mission.rollProbability(PROB_IN_SYSTEM_WITH_TAP)) {
052                        mission.preferSystemTags(ReqMode.ANY, Tags.HAS_CORONAL_TAP);
053                } else {
054                        mission.preferSystemBlackHoleOrNebula();
055                        mission.preferSystemOnFringeOfSector();
056                }
057                
058                StarSystemAPI system = mission.pickSystem();
059                data.system = system;
060        
061                FleetSize size = FleetSize.MEDIUM;
062                FleetQuality quality = FleetQuality.VERY_HIGH;
063                OfficerQuality oQuality = OfficerQuality.AI_MIXED;
064                OfficerNum oNum = OfficerNum.ALL_SHIPS;
065                String type = FleetTypes.PATROL_SMALL;
066                
067                if (difficulty == 7) {
068                        size = FleetSize.LARGE;
069                        type = FleetTypes.PATROL_MEDIUM;
070                        oQuality = OfficerQuality.AI_BETA_OR_GAMMA;
071                } else if (difficulty == 8) {
072                        size = FleetSize.VERY_LARGE;
073                        type = FleetTypes.PATROL_LARGE;
074                        oQuality = OfficerQuality.AI_MIXED;
075                } else if (difficulty == 9) {
076                        size = FleetSize.HUGE;
077                        type = FleetTypes.PATROL_LARGE;
078                        oQuality = OfficerQuality.AI_ALPHA;
079                } else if (difficulty >= 10) {
080                        size = FleetSize.MAXIMUM;
081                        type = FleetTypes.PATROL_LARGE;
082                        oQuality = OfficerQuality.AI_ALPHA;
083                }
084                
085                //setIconName("campaignMissions", "station_bounty");
086                
087                beginFleet(mission, data);
088                if (false) {
089                        mission.triggerCreateFleet(FleetSize.LARGE, FleetQuality.SMOD_2, Factions.MERCENARY, FleetTypes.MERC_BOUNTY_HUNTER, data.system);
090                        mission.triggerSetFleetOfficers(OfficerNum.MORE, OfficerQuality.HIGHER);
091                        mission.triggerSetFleetFaction(Factions.TRITACHYON);
092                        mission.triggerMakeHostileAndAggressive();
093                        mission.triggerMakeLowRepImpact();
094                        mission.triggerSetFleetDoctrineComp(0, 0, 5);
095                        mission.triggerFleetMakeFaster(true, 1, true);
096                } else {
097                        mission.triggerCreateFleet(size, quality, Factions.REMNANTS, type, data.system);
098                        mission.triggerSetFleetDoctrineQuality(5, 3, 5);
099                        mission.triggerSetFleetOfficers(oNum, oQuality);
100                        mission.triggerAutoAdjustFleetSize(size, size.next());
101                        mission.triggerSetRemnantConfigActive();
102                        mission.triggerSetFleetNoCommanderSkills();
103                        mission.triggerFleetAddCommanderSkill(Skills.FLUX_REGULATION, 1);
104                        //mission.triggerFleetAddCommanderSkill(Skills.ELECTRONIC_WARFARE, 1);
105                        mission.triggerFleetAddCommanderSkill(Skills.COORDINATED_MANEUVERS, 1);
106                        
107                        mission.triggerFleetSetAllWeapons();
108                }
109//              if (difficulty >= 9) {
110//                      mission.triggerSetFleetDoctrineOther(5, -1);
111//              }
112                //mission.triggerSetFleetDoctrineRandomize(1f);
113                //mission.triggerSetFleetDoctrineRandomize(0f);
114                
115                mission.triggerPickLocationAtInSystemJumpPoint(data.system);
116                mission.triggerSpawnFleetAtPickedLocation(null, null);
117                //mission.triggerFleetSetPatrolActionText("patrolling");
118                mission.triggerOrderFleetPatrol(data.system, true, Tags.JUMP_POINT, Tags.NEUTRINO, Tags.NEUTRINO_HIGH, Tags.STATION,
119                                                                            Tags.SALVAGEABLE, Tags.GAS_GIANT);
120                
121                data.fleet = createFleet(mission, data);
122                if (data.fleet == null) return null;
123                
124                setRepChangesBasedOnDifficulty(data, difficulty);
125                data.baseReward = CBStats.getBaseBounty(difficulty, CBStats.REMNANT_MULT, mission);
126                
127                return data;
128        }
129        
130
131        @Override
132        public int getMaxDifficulty() {
133                return super.getMaxDifficulty();
134        }
135
136        @Override
137        public int getMinDifficulty() {
138                return 7;
139        }
140
141}
142
143
144