001package com.fs.starfarer.api.impl.campaign.missions.academy; 002 003import java.awt.Color; 004 005import com.fs.starfarer.api.campaign.PlanetAPI; 006import com.fs.starfarer.api.campaign.StarSystemAPI; 007import com.fs.starfarer.api.campaign.econ.MarketAPI; 008import com.fs.starfarer.api.impl.campaign.ids.Conditions; 009import com.fs.starfarer.api.impl.campaign.ids.Factions; 010import com.fs.starfarer.api.impl.campaign.ids.FleetTypes; 011import com.fs.starfarer.api.impl.campaign.ids.Tags; 012import com.fs.starfarer.api.impl.campaign.missions.hub.ReqMode; 013import com.fs.starfarer.api.ui.TooltipMakerAPI; 014import com.fs.starfarer.api.util.Misc; 015 016public class GADataFromRuins extends GABaseMission { 017 018// public static class GADataFromRuinsCreator extends BaseHubMissionCreator { 019// @Override 020// public HubMission createHubMission(MissionHub hub) { 021// return new GADataFromRuins(); 022// } 023// } 024 025 public static float PIRATE_PROB = 0.5f; 026 public static float MISSION_DAYS = 120f; 027 public static int RAID_DIFFICULTY = 100; 028 public static int MARINES_REQUIRED = RAID_DIFFICULTY / 2; 029 030 031 public static enum Stage { 032 GO_TO_RUINS, 033 GET_IN_COMMS_RANGE, 034 COMPLETED, 035 FAILED, 036 } 037 038 public static enum Variation { 039 BASIC, 040 REMNANTS, 041 PULSAR, 042 DECIV, 043 } 044 045 protected PlanetAPI planet; 046 protected String targetWithArticle; 047 protected String target; 048 protected Variation variation; 049 protected int piratePayment; 050 051 @Override 052 protected boolean create(MarketAPI createdAt, boolean barEvent) { 053 // if this mission type was already accepted by the player, abort 054 if (!setGlobalReference("$gaData_ref")) { 055 return false; 056 } 057 058 pickDepartment(GADepartments.INDUSTRIAL, GADepartments.SOCIAL); 059 targetWithArticle = pickOne("a library", "a datavault", "an archive", "a laboratory"); 060 target = targetWithArticle.substring(targetWithArticle.indexOf(" ") + 1); 061 062 resetSearch(); 063 requireSystemTags(ReqMode.ANY, Tags.THEME_REMNANT_RESURGENT, Tags.THEME_REMNANT_SUPPRESSED, 064 Tags.THEME_DERELICT, Tags.THEME_MISC, Tags.THEME_RUINS); 065 requireSystemTags(ReqMode.NOT_ANY, Tags.THEME_REMNANT_SECONDARY); // remove not-very-dangerous remnant systems 066 //requireSystemInInnerSector(); 067 //requireSystemHasPulsar(); 068 //requireSystemIsDense(); 069 //requirePlanetIsGasGiant(); 070 //requirePlanetConditions(ReqMode.ALL, Conditions.DECIVILIZED); 071 requirePlanetUnpopulated(); 072 requirePlanetWithRuins(); 073 preferPlanetNotFullySurveyed(); 074 preferPlanetUnexploredRuins(); 075 preferPlanetInDirectionOfOtherMissions(); 076 planet = pickPlanet(); 077 078// spawnEntity(Entities.INACTIVE_GATE, "$gaData_test", EntityLocationType.ORBITING_PARAM, 079// planet, planet.getStarSystem(), false); 080// spawnMissionNode("$gaData_test", EntityLocationType.ORBITING_PARAM, planet, planet.getStarSystem()); 081 082 if (planet == null) { 083 return false; 084 } 085 086 setStartingStage(Stage.GO_TO_RUINS); 087 addSuccessStages(Stage.COMPLETED); 088 addFailureStages(Stage.FAILED); 089 090 makeImportant(planet, "$gaData_targetPlanet", Stage.GO_TO_RUINS); 091 092 connectWithGlobalFlag(Stage.GO_TO_RUINS, Stage.GET_IN_COMMS_RANGE, "$gaData_gotData"); 093 connectWithInRangeOfCommRelay(Stage.GET_IN_COMMS_RANGE, Stage.COMPLETED); 094 095 setStageOnGlobalFlag(Stage.FAILED, "$gaData_gaveCoordsToPirates"); 096 if (WITH_TIME_LIMIT) { 097 setTimeLimit(Stage.FAILED, MISSION_DAYS, planet.getStarSystem(), Stage.GET_IN_COMMS_RANGE); 098 } 099 //setCreditReward(30000, 40000); 100 setCreditReward(CreditReward.AVERAGE); 101 setDefaultGARepRewards(); 102 103// spawnEntity(Entities.FUSION_LAMP, "$gaData_test", EntityLocationType.ORBITING_PARAM, 104// planet, planet.getStarSystem(), false); 105 106// beginStageTrigger(Stage.GET_IN_COMMS_RANGE); 107// triggerSpawnEntity(Entities.INACTIVE_GATE, "$gaData_test", EntityLocationType.ORBITING_PARAM, 108// planet, planet.getStarSystem(), false); 109// triggerEntityMakeImportant(); 110// endTrigger(); 111 112 StarSystemAPI system = planet.getStarSystem(); 113 if (system.hasTag(Tags.THEME_REMNANT)) { 114 variation = Variation.REMNANTS; 115 //setCreditReward(50000, 60000); 116 setCreditReward(CreditReward.HIGH); 117 } else if (Misc.hasPulsar(system)) { 118 variation = Variation.PULSAR; 119 } else if (planet.hasCondition(Conditions.DECIVILIZED)) { 120 variation = Variation.DECIV; 121 } else { 122 variation = Variation.BASIC; 123 } 124 125 //PIRATE_PROB = 1f; 126 if ((variation == Variation.BASIC || variation == Variation.DECIV) && rollProbability(PIRATE_PROB)) { 127 beginWithinHyperspaceRangeTrigger(planet, 1f, false, Stage.GO_TO_RUINS); 128 triggerCreateFleet(FleetSize.MEDIUM, FleetQuality.DEFAULT, Factions.PIRATES, FleetTypes.PATROL_MEDIUM, planet); 129 triggerAutoAdjustFleetStrengthMajor(); 130 triggerSetStandardAggroPirateFlags(); 131 //triggerFleetAllowLongPursuit(); 132 //triggerPickLocationAroundEntity(planet, 3000f); 133 triggerPickLocationAtInSystemJumpPoint(planet.getStarSystem()); 134 triggerSpawnFleetAtPickedLocation("$gaData_pirate", null); 135 triggerOrderFleetPatrol(planet); 136 triggerFleetMakeImportant(null, Stage.GO_TO_RUINS); 137 endTrigger(); 138 139 piratePayment = genRoundNumber(5000, 15000); 140 } 141 142 return true; 143 } 144 145 protected void updateInteractionDataImpl() { 146 set("$gaData_department", department); 147 set("$gaData_target", target); 148 set("$gaData_planetId", planet.getId()); 149 set("$gaData_planetName", planet.getName()); 150 set("$gaData_systemName", planet.getStarSystem().getNameWithNoType()); 151 set("$gaData_dist", getDistanceLY(planet)); 152 set("$gaData_reward", Misc.getWithDGS(getCreditsReward())); 153 set("$gaData_piratePayment", Misc.getWithDGS(piratePayment)); 154 //variation = Variation.BASIC; 155 set("$gaData_variation", variation); 156 if (variation == Variation.DECIV) { 157 set("$gaData_marinesReq", MARINES_REQUIRED); 158 set("$gaData_raidDifficulty", RAID_DIFFICULTY); 159 } else if (variation == Variation.PULSAR) { 160 PlanetAPI pulsar = Misc.getPulsarInSystem(planet.getStarSystem()); 161 if (pulsar != null) { 162 set("$gaData_pulsarName", planet.getStarSystem().getNameWithNoType()); 163 } 164 } 165 } 166 167 @Override 168 public void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height) { 169 float opad = 10f; 170 Color h = Misc.getHighlightColor(); 171 if (currentStage == Stage.GO_TO_RUINS) { 172 if (variation == Variation.DECIV) { 173 info.addPara(getGoToPlanetTextPre(planet) + 174 ", and retrieve the data from " + targetWithArticle + " found in the ruins there. Around %s " + 175 "marines will be needed to perform the recovery.", opad, h, Misc.getWithDGS(MARINES_REQUIRED)); 176 } else { 177 String extra = ""; 178 if (variation == Variation.REMNANTS) extra = " 'Autonomous weapon systems' may pose a danger."; 179 if (variation == Variation.PULSAR) extra = " Rapidly spinning jets of high energy charged particles are a once-in-a-lifetime sight."; 180 info.addPara(getGoToPlanetTextPre(planet) + 181 ", and retrieve the data from " + targetWithArticle + " found in the ruins there." + extra, opad); 182 } 183 } else if (currentStage == Stage.GET_IN_COMMS_RANGE) { 184 info.addPara(getGetWithinCommsRangeText(), opad); 185 } 186// else { 187// super.addDescriptionForCurrentStage(info, width, height); // shows the completed/failed/abandoned text, if needed 188// } 189 } 190 191 @Override 192 public boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad) { 193 Color h = Misc.getHighlightColor(); 194 if (currentStage == Stage.GO_TO_RUINS) { 195 //info.addPara("Go to " + planet.getName() + " in the " + planet.getStarSystem().getNameWithLowercaseTypeShort(), tc, pad); 196 info.addPara(getGoToPlanetTextShort(planet), tc, pad); 197 return true; 198 } else if (currentStage == Stage.GET_IN_COMMS_RANGE) { 199 info.addPara(getGetWithinCommsRangeTextShort(), tc, pad); 200 return true; 201 } 202 return false; 203 } 204 205 @Override 206 public String getBaseName() { 207 return "Ruins Data Recovery"; 208 } 209 210 @Override 211 public String getBlurbText() { 212 return null; // moved this to rules.csv 213 } 214 215} 216 217