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.Commodities;
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.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;
013import com.fs.starfarer.api.impl.campaign.missions.hub.ReqMode;
014
015public class CBTrader extends BaseCustomBountyCreator {
016
017        public static float PROB_IN_SYSTEM_WITH_BASE = 0.5f;
018        
019        @Override
020        public float getFrequency(HubMissionWithBarEvent mission, int difficulty) {
021                return super.getFrequency(mission, difficulty) * CBStats.TRADER_FREQ;
022        }
023
024        public String getBountyNamePostfix(HubMissionWithBarEvent mission, CustomBountyData data) {
025                return " - Trade Fleet";
026        }
027        
028        @Override
029        public float getBountyDays() {
030                return 30f;
031        }
032
033        @Override
034        public CustomBountyData createBounty(MarketAPI createdAt, HubMissionWithBarEvent mission, int difficulty, Object bountyStage) {
035                CustomBountyData data = new CustomBountyData();
036                data.difficulty = difficulty;
037                data.stage = bountyStage;
038                
039                //mission.requireSystem(this);
040                mission.requireMarketSizeAtLeast(4);
041                mission.requireMarketNotHidden();
042                mission.requireMarketHasSpaceport();
043                mission.requireMarketNotInHyperspace();
044                mission.requireMarketFactionCustom(ReqMode.NOT_ANY, Factions.CUSTOM_DECENTRALIZED);
045                mission.requireMarketFactionNot(Factions.PIRATES); // redundant, given the above
046                mission.requireMarketFactionNotPlayer();
047                mission.requireMarketLocationNot(createdAt.getContainingLocation());
048                MarketAPI target = mission.pickMarket();
049                
050                if (target == null || target.getStarSystem() == null) return null;
051
052                
053                StarSystemAPI system = target.getStarSystem();
054                data.system = system;
055                data.market = target;
056        
057                FleetSize size = FleetSize.SMALL;
058                FleetQuality quality = FleetQuality.DEFAULT;
059                OfficerQuality oQuality = OfficerQuality.LOWER;
060                OfficerNum oNum = OfficerNum.FEWER;
061                String type = FleetTypes.TRADE;
062                
063                if (difficulty <= 3) {
064                        size = FleetSize.TINY;
065                        type = FleetTypes.TRADE_SMALL;
066                }
067                
068                
069                beginFleet(mission, data);
070                mission.triggerCreateFleet(size, quality, Factions.INDEPENDENT, type, data.system);
071                mission.triggerSetFleetOfficers(oNum, oQuality);
072                mission.triggerSetFleetNoCommanderSkills();
073                mission.triggerSetFleetComposition(1f, 0.2f, 0f, 0f, 0f);
074                mission.triggerSetFleetProbabilityCombatFreighters(0f);
075                mission.triggerPickLocationAtInSystemJumpPoint(data.system);
076                mission.triggerSpawnFleetAtPickedLocation(null, null);
077                
078                String expensive = mission.pickOne(Commodities.LUXURY_GOODS, 
079                                                        Commodities.RARE_METALS, Commodities.VOLATILES, Commodities.LOBSTER);
080                String cheap = mission.pickOne(Commodities.DOMESTIC_GOODS, Commodities.FOOD, Commodities.ORGANICS);
081                
082                mission.triggerAddCommodityFractionDrop(expensive, 0.25f); 
083                mission.triggerAddCommodityFractionDrop(cheap, 0.25f); 
084                mission.triggerFleetSetPatrolActionText("waiting for customs inspection");
085                mission.triggerOrderFleetPatrol(data.system, true, target.getPrimaryEntity());
086                mission.triggerFleetSetPatrolLeashRange(800f);
087                
088                data.fleet = createFleet(mission, data);
089                if (data.fleet == null) return null;
090                
091                data.custom1 = target;
092                
093                setRepChangesBasedOnDifficulty(data, difficulty);
094                data.baseReward = CBStats.getBaseBounty(difficulty, CBStats.TRADER_MULT, mission);
095                
096                return data;
097        }
098        
099        @Override
100        public void notifyAccepted(MarketAPI createdAt, HubMissionWithBarEvent mission, CustomBountyData data) {
101                
102                FleetSize size = FleetSize.SMALL;
103                FleetQuality quality = FleetQuality.DEFAULT;
104                OfficerQuality oQuality = OfficerQuality.DEFAULT;
105                OfficerNum oNum = OfficerNum.DEFAULT;
106                String type = FleetTypes.PATROL_MEDIUM;
107                
108                int difficulty = data.difficulty;
109                int num = 1;
110                if (difficulty > 6) num = 2;
111                
112                for (int i = 0; i < num; i++) {
113                        if (difficulty <= 2) {
114                                size = FleetSize.TINY;
115                                type = FleetTypes.PATROL_SMALL;
116                        } else if (difficulty <= 3) {
117                                size = FleetSize.VERY_SMALL;
118                                type = FleetTypes.PATROL_SMALL;
119                        } else if (difficulty <= 4) {
120                                size = FleetSize.SMALL;
121                                type = FleetTypes.PATROL_SMALL;
122                        } else if (difficulty <= 5) {
123                                size = FleetSize.MEDIUM;
124                                type = FleetTypes.PATROL_MEDIUM;
125                        } else {
126                                size = FleetSize.LARGE;
127                                type = FleetTypes.PATROL_LARGE;
128                        }
129                        
130                        MarketAPI market = (MarketAPI) data.custom1;
131                        mission.beginWithinHyperspaceRangeTrigger(market, 1f, false, data.stage);
132                        mission.triggerCreateFleet(size, quality, market.getFactionId(), type, market.getPrimaryEntity());
133                        mission.triggerSetFleetOfficers(oNum, oQuality);
134                        mission.triggerSetPatrol();
135                        mission.triggerSpawnFleetNear(data.fleet, null, null);
136                        mission.triggerFleetSetPatrolActionText("guarding " + data.fleet.getName().toLowerCase());
137                        mission.triggerFleetSetPatrolLeashRange(100f);
138                        mission.triggerOrderFleetPatrol(data.system, true, data.fleet);
139                        mission.endTrigger();
140                        
141                        difficulty -= 4;
142                }
143                
144        }
145
146        
147        @Override
148        public int getMaxDifficulty() {
149                return MAX_DIFFICULTY;
150        }
151
152        @Override
153        public int getMinDifficulty() {
154                return 0;
155        }
156
157}
158
159
160
161
162
163