001package com.fs.starfarer.api.impl.campaign.missions; 002 003import java.awt.Color; 004 005import com.fs.starfarer.api.Global; 006import com.fs.starfarer.api.campaign.PersonImportance; 007import com.fs.starfarer.api.campaign.SectorEntityToken; 008import com.fs.starfarer.api.campaign.StarSystemAPI; 009import com.fs.starfarer.api.campaign.econ.CommodityOnMarketAPI; 010import com.fs.starfarer.api.campaign.econ.MarketAPI; 011import com.fs.starfarer.api.characters.PersonAPI; 012import com.fs.starfarer.api.impl.campaign.ids.Factions; 013import com.fs.starfarer.api.impl.campaign.ids.Ranks; 014import com.fs.starfarer.api.impl.campaign.ids.Tags; 015import com.fs.starfarer.api.impl.campaign.missions.academy.GACelestialObject.Variation; 016import com.fs.starfarer.api.impl.campaign.missions.askonia.TheUsurpers.Stage; 017import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithBarEvent; 018import com.fs.starfarer.api.impl.campaign.missions.hub.ReqMode; 019import com.fs.starfarer.api.ui.TooltipMakerAPI; 020import com.fs.starfarer.api.util.Misc; 021 022public class LuddicPilgrimTransport extends HubMissionWithBarEvent { 023 024 //graphics/icons/missions/luddic_pilgrim_transport.png 025 public static float MISSION_DAYS = 60f; 026 public static float MIN_VALUE = 10000f; 027 public static float MAX_VALUE = 20000f; 028 public static float PROB_RICH = 0.5f; 029 030 public static enum Stage { 031 TRANSPORT, 032 COMPLETED, 033 FAILED, 034 } 035 036 public static enum Variation { 037 RICH, 038 POOR, 039 } 040 041 042 protected MarketAPI source_market; 043 protected StarSystemAPI destination_system; 044 protected SectorEntityToken destination_entity; 045 protected int quantity; 046 protected String destination_shrine; 047 protected Variation variation; 048 049 @Override 050 protected boolean create(MarketAPI createdAt, boolean barEvent) { 051 // if already accepted by the player, abort 052 if (!setGlobalReference("$lpt_ref", "$lpt_inProgress")) { 053 return false; 054 } 055 056 //genRandom = Misc.random; 057 058 //if (Factions.PIRATES.equals(createdAt.getFaction().getId())) return false; 059 060 source_market = createdAt; 061 062 // let's just whitelist core worlds. Should be based on places that plausibly have a significant/interesting Luddic population 063 if ( !( source_market.getId().equals("chicomoztoc") || 064 source_market.getId().equals("mazalot") || 065 source_market.getId().equals("ilm") || 066 source_market.getId().equals("volturn") || 067 source_market.getId().equals("jangala") || 068 source_market.getId().equals("epiphany") || 069 source_market.getId().equals("cibola") || 070 source_market.getId().equals("madeira") || 071 source_market.getId().equals("chalcedon") || 072 source_market.getId().equals("tartessus") || 073 source_market.getId().equals("hesperus") || 074 source_market.getId().equals("fikenhild") || 075 source_market.getId().equals("athulf") || 076 source_market.getId().equals("suddene")) ) { 077 return false; 078 } 079 080 if (rollProbability(PROB_RICH)) { 081 variation = Variation.RICH; 082 float value = MIN_VALUE + getQuality() * (MAX_VALUE - MIN_VALUE); 083 value *= 0.9f + genRandom.nextFloat() * 0.2f; 084 setCreditReward((int)(value * 0.5f), (int)(value * 0.7f)); 085 } else { 086 variation = Variation.POOR; 087 } 088 089 if (barEvent) { 090 setGiverRank(Ranks.CITIZEN); 091 setGiverPost(Ranks.POST_PILGRIM); 092 //setGiverImportance(pickImportance()); 093 setGiverImportance(PersonImportance.VERY_LOW); // irrelevant anyway. 094 setGiverFaction(Factions.LUDDIC_CHURCH); 095 findOrCreateGiver(createdAt, false, false); 096 } 097 098 PersonAPI person = getPerson(); 099 if (person == null) return false; 100 101 102 if (!setPersonMissionRef(person, "$lpt_ref")) { 103 return false; 104 } 105 106 setRepFactionChangesNone(); 107 setIconName("campaignMissions", "luddic_pilgrim_transport"); 108 109 // Maybe handle non-"public" shrines later. 110 destination_shrine = pickOne("gilead", "beholder_station"); 111 112 if (destination_shrine.equals("gilead")) 113 { 114 destination_system = Global.getSector().getStarSystem("canaan"); 115 destination_entity = Global.getSector().getEconomy().getMarket("gilead").getPlanetEntity(); 116 if (destination_entity == null) return false; 117 if (!destination_entity.getMarket().getFactionId().equals(Factions.LUDDIC_CHURCH)) return false; 118 } 119 else if (destination_shrine.equals("beholder_station")) 120 { 121 destination_system = Global.getSector().getStarSystem("kumari kandam"); 122 for (SectorEntityToken beholder_station : destination_system.getEntitiesWithTag(Tags.LUDDIC_SHRINE)) { 123 destination_entity = beholder_station; 124 break; 125 } 126 } 127 128 if (!setEntityMissionRef(destination_entity, "$lpt_ref")) { 129 return false; 130 } 131 132 makeImportant(destination_entity, "$lpt_target", Stage.TRANSPORT); 133 134 setStartingStage(Stage.TRANSPORT); 135 setSuccessStage(Stage.COMPLETED); 136 setFailureStage(Stage.FAILED); 137 138 setStageOnMemoryFlag(Stage.COMPLETED, destination_entity, "$lpt_completed"); 139 // setStageOnGlobalFlag(Stage.COMPLETED, "lpt_completed"); 140 setNoAbandon(); 141 setTimeLimit(Stage.FAILED, MISSION_DAYS, null); 142 143 144 145 //setCreditRewardWithBonus(CreditReward.VERY_LOW, (int) (value * 0.5f)); 146 147 return true; 148 } 149 150 protected void updateInteractionDataImpl() { 151 //set("$lpt_destinationShrine", destination_shrine); 152 set("$lpt_barEvent", isBarEvent()); 153 set("$lpt_reward", Misc.getWithDGS(getCreditsReward())); 154 155 set("$lpt_manOrWoman", getPerson().getManOrWoman()); 156 set("$lpt_heOrShe", getPerson().getHeOrShe()); 157 set("$lpt_hisOrHer", getPerson().getHisOrHer()); 158 set("$lpt_himOrHer", getPerson().getHimOrHer()); 159 set("$lpt_HeOrShe", getPerson().getHeOrShe().substring(0, 1).toUpperCase() + getPerson().getHeOrShe().substring(1)); 160 set("$lpt_HisOrHer", getPerson().getHisOrHer().substring(0, 1).toUpperCase() + getPerson().getHisOrHer().substring(1)); 161 set("$lpt_HimOrHer", getPerson().getHimOrHer().substring(0, 1).toUpperCase() + getPerson().getHimOrHer().substring(1)); 162 163 if( variation == variation.POOR) 164 set("$lpt_wealth", "poor"); 165 else set("$lpt_wealth", "rich"); 166 167 set("$lpt_personName", getPerson().getNameString()); 168 set("$lpt_systemName", destination_system.getNameWithLowercaseTypeShort()); 169 set("$lpt_entityName", destination_entity.getName()); 170 set("$lpt_sourceName", source_market.getName()); 171 172 //if (destination_entity.m) 173 //set("$lpt_marketOnOrAt", destination_entity.getOnOrAt()); 174 175 set("$lpt_dist", getDistanceLY(destination_entity)); 176 } 177 178 @Override 179 public void addDescriptionForNonEndStage(TooltipMakerAPI info, float width, float height) { 180 float opad = 10f; 181 Color h = Misc.getHighlightColor(); 182 if (currentStage == Stage.TRANSPORT) { 183 info.addPara("Transport a small party of Luddic pilgrims to " + destination_entity.getName() + 184 " in the " + destination_system.getNameWithLowercaseTypeShort() + ".", opad, 185 h, Misc.getWithDGS(quantity)); 186 187 info.addPara("The pilgrims will expect to arrive at the shrine within " + MISSION_DAYS + " days.", opad); 188 } 189 } 190 191 @Override 192 public boolean addNextStepText(TooltipMakerAPI info, Color tc, float pad) { 193 Color h = Misc.getHighlightColor(); 194 if (currentStage == Stage.TRANSPORT) { 195 info.addPara("Transport a small party of Luddic pilgrims to " + destination_entity.getName() + 196 " in the " + destination_system.getNameWithLowercaseTypeShort(), pad, tc, 197 h, Misc.getWithDGS(quantity)); 198 return true; 199 } 200 return false; 201 } 202 203 @Override 204 public String getBaseName() { 205 return "Luddic Pilgrim Transport"; 206 } 207 208} 209