001package com.fs.starfarer.api.impl.campaign.missions; 002 003import java.awt.Color; 004import java.util.ArrayList; 005import java.util.List; 006 007import com.fs.starfarer.api.Global; 008import com.fs.starfarer.api.campaign.econ.MarketAPI; 009import com.fs.starfarer.api.characters.PersonAPI; 010import com.fs.starfarer.api.impl.campaign.ids.Factions; 011import com.fs.starfarer.api.impl.campaign.ids.Ranks; 012import com.fs.starfarer.api.impl.campaign.ids.Voices; 013import com.fs.starfarer.api.impl.campaign.missions.academy.GACelestialObject.Variation; 014import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithBarEvent; 015import com.fs.starfarer.api.ui.TooltipMakerAPI; 016import com.fs.starfarer.api.util.Misc; 017 018public class AngryVIPTransport extends HubMissionWithBarEvent { 019 020 public static float MISSION_DAYS = 75f; 021 public static int MIN_VALUE = 24000; 022 public static int MAX_VALUE = 36000; 023 024 public static enum Stage { 025 TRANSPORT, 026 COMPLETED, 027 FAILED, 028 } 029 030 protected MarketAPI sourceMarket; 031 //protected StarSystemAPI destination_system; 032 protected MarketAPI destination_market; 033 protected int quantity; 034 protected String destinationId; 035 protected Variation variation; 036 protected PersonAPI person; 037 038 @Override 039 protected boolean create(MarketAPI createdAt, boolean barEvent) { 040 // if already accepted by the player, abort 041 if (!setGlobalReference("$avipt_ref", "$avipt_inProgress")) { 042 return false; 043 } 044 045 if (createdAt == null) return false; 046 047 if (Factions.PIRATES.equals(createdAt.getFaction().getId())) return false; // I guess? 048 049 sourceMarket = createdAt; 050 051 // whitelist of aristocrat-plausible core worlds. 052 String[] planet_whitelist = new String[] { 053 "eventide", 054 "kazeron", 055 "fikenhild", 056 "culann_starforge", 057 "eochu_bres", 058 "eldfell", 059 "salamanca", 060 "yesod", 061 "olinadu", 062 "station_tse_enterprise", 063 "coatl" }; 064 065 List<String> withoutSource = new ArrayList<String>(); 066 for (String curr : planet_whitelist) withoutSource.add(curr); 067 068 // if the source market isn't one of these, bail out 069 if (!withoutSource.remove(sourceMarket.getId())) { 070 return false; 071 } 072 073 destinationId = pickOne(withoutSource); 074 if (destinationId == null) { 075 System.out.print("AVIPT failed on destinationId"); 076 return false; 077 } 078 079 //sourceMarket.getFaction().createRandomPerson(); 080 //PersonAPI person = sourceMarket.getFaction().createRandomPerson(); 081 setGiverRank(Ranks.CITIZEN); 082 setGiverPost(Ranks.ARISTOCRAT); 083 findOrCreateGiver(createdAt, false, false); 084 085 086 person = getPerson(); 087 if (person == null) { 088 return false; 089 } 090 091 //person.setRankId(Ranks.CITIZEN); 092 person.setVoice(Voices.ARISTO); 093 //person.setPostId(Ranks.POST_ARISTOCRAT); 094 095 //if (person == null) return false; 096 097 //setPersonOverride(person); 098 099 if (!setPersonMissionRef(person, "$avipt_ref")) { 100 return false; 101 } 102 103 setRepFactionChangesNone(); 104 setIconName("campaignMissions", "shuttle_vip"); 105 106 destination_market = Global.getSector().getEconomy().getMarket(destinationId); 107 108 if (!setMarketMissionRef(destination_market, "$avipt_ref")) { 109 return false; 110 } 111 112 makeImportant(destination_market, "$avipt_target", Stage.TRANSPORT); 113 addSuccessStages(Stage.COMPLETED); 114 115 setStartingStage(Stage.TRANSPORT); 116 setSuccessStage(Stage.COMPLETED); 117 setFailureStage(Stage.FAILED); 118 119 setStageOnMemoryFlag(Stage.COMPLETED, destination_market, "$avipt_completed"); 120 setNoAbandon(); 121 setTimeLimit(Stage.FAILED, MISSION_DAYS, null); 122 123 124 setCreditReward(MIN_VALUE, MAX_VALUE); 125 126 return true; 127 } 128 129 protected void updateInteractionDataImpl() { 130 131 set("$avipt_barEvent", isBarEvent()); 132 set("$avipt_reward", Misc.getWithDGS(getCreditsReward())); 133 set("$avipt_timelimit", Misc.getWithDGS(MISSION_DAYS)); 134 set("$avipt_manOrWoman", getPerson().getManOrWoman()); 135 set("$avipt_heOrShe", getPerson().getHeOrShe()); 136 set("$avipt_hisOrHer", getPerson().getHisOrHer()); 137 set("$avipt_himOrHer", getPerson().getHimOrHer()); 138 set("$avipt_HeOrShe", getPerson().getHeOrShe().substring(0, 1).toUpperCase() + getPerson().getHeOrShe().substring(1)); 139 set("$avipt_HisOrHer", getPerson().getHisOrHer().substring(0, 1).toUpperCase() + getPerson().getHisOrHer().substring(1)); 140 set("$avipt_HimOrHer", getPerson().getHimOrHer().substring(0, 1).toUpperCase() + getPerson().getHimOrHer().substring(1)); 141 142 set("$avipt_personName", getPerson().getNameString()); 143 set("$avipt_systemName", destination_market.getStarSystem().getNameWithLowercaseTypeShort()); 144 set("$avipt_marketName", destination_market.getName()); 145 set("$avipt_sourceName", sourceMarket.getName()); 146 147 //if (destination_entity.m) 148 //set("$lpt_marketOnOrAt", destination_entity.getOnOrAt()); 149 150 set("$avipt_dist", getDistanceLY(destination_market)); 151 } 152 153 @Override 154 public void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height) { 155 float opad = 10f; 156 Color h = Misc.getHighlightColor(); 157 if (currentStage == Stage.TRANSPORT) { 158 info.addPara("Transport an angry, yet wealthy, VIP to " + destination_market.getName() + 159 " in the " + destination_market.getStarSystem().getNameWithLowercaseTypeShort() + ".", opad, 160 h, Misc.getWithDGS(quantity)); 161 162 info.addPara("The VIP has made it clear that " + getPerson().getHeOrShe() + " is to arrive within " + MISSION_DAYS + " days.", opad); 163 } 164 } 165 166 @Override 167 public boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad) { 168 Color h = Misc.getHighlightColor(); 169 if (currentStage == Stage.TRANSPORT) { 170 info.addPara("Transport an angry, yet wealthy, VIP to " + destination_market.getName() + 171 " in the " + destination_market.getStarSystem().getNameWithLowercaseTypeShort(), pad, tc, 172 h, Misc.getWithDGS(quantity)); 173 return true; 174 } 175 return false; 176 } 177 178 @Override 179 public String getBaseName() { 180 return "Angry VIP Transport"; 181 } 182 183} 184