1package com.fs.starfarer.api.impl.campaign.events;
3import java.util.ArrayList;
7import org.apache.log4j.Logger;
9import com.fs.starfarer.api.Global;
10import com.fs.starfarer.api.campaign.BaseOnMessageDeliveryScript;
11import com.fs.starfarer.api.campaign.CampaignFleetAPI;
12import com.fs.starfarer.api.campaign.CargoAPI;
13import com.fs.starfarer.api.campaign.InteractionDialogAPI;
14import com.fs.starfarer.api.campaign.RepLevel;
15import com.fs.starfarer.api.campaign.comm.CommMessageAPI;
16import com.fs.starfarer.api.campaign.comm.MessagePriority;
17import com.fs.starfarer.api.campaign.events.CampaignEventTarget;
18import com.fs.starfarer.api.campaign.rules.MemoryAPI;
19import com.fs.starfarer.api.characters.PersonAPI;
20import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActionEnvelope;
21import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActions;
22import com.fs.starfarer.api.impl.campaign.ids.Conditions;
23import com.fs.starfarer.api.impl.campaign.ids.Factions;
24import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
25import com.fs.starfarer.api.impl.campaign.ids.Ranks;
26import com.fs.starfarer.api.util.Misc;
27import com.fs.starfarer.api.util.Misc.Token;
38 public static class InvSmugglingParams {
39 public float guiltChance;
40 public int bribeAmount;
42 public InvSmugglingParams() {
48 private float elapsedDays = 0f;
49 private float duration = 0f;
51 private InvSmugglingParams params;
52 private boolean bribed =
false;
53 private PersonAPI investigator;
57 params =
new InvSmugglingParams();
63 if (
market ==
null ||
market.hasCondition(Conditions.DECIVILIZED)) {
67 if (
market.getFaction().isAtBest(Factions.PLAYER, RepLevel.HOSTILE)) {
96 params.bribeAmount = (int) ((10000f + params.guiltChance * 90000f) / 1000f) * 1000;
106 duration = 90f + 30f * (float) Math.random();
109 log.info(String.format(
"Starting smuggling investigation at %s",
market.getName()));
113 market.getCommDirectory().addPerson(investigator);
115 investigator.getMemoryWithoutUpdate().set(
"$ise_eventRef",
this, duration);
116 investigator.getMemoryWithoutUpdate().set(
"$ise_investigator",
true, duration);
117 investigator.getMemoryWithoutUpdate().set(
"$ise_bribeAmount",
"" + params.bribeAmount, duration);
118 investigator.getMemoryWithoutUpdate().set(
"$ise_bribeAmountDGS", Misc.getWithDGS(params.bribeAmount), duration);
119 Misc.setFlagWithReason(investigator.getMemoryWithoutUpdate(),
120 MemFlags.MEMORY_KEY_REQUIRES_DISCRETION,
"ies",
123 Global.
getSector().reportEventStage(
this,
"start_smuggling",
null, MessagePriority.ENSURE_DELIVERY,
null);
133 if (elapsedDays >= duration) {
134 if (!bribed && (
float) Math.random() < params.guiltChance) {
135 Global.
getSector().reportEventStage(
this,
"player_guilty_smuggling",
null, MessagePriority.ENSURE_DELIVERY,
new BaseOnMessageDeliveryScript() {
136 public void beforeDelivery(CommMessageAPI message) {
138 new RepActionEnvelope(RepActions.SMUGGLING_INVESTIGATION_GUILTY,
null,
null,
true),
144 Global.
getSector().reportEventStage(
this,
"clear_smuggling_bribe",
null, MessagePriority.ENSURE_DELIVERY,
null);
146 Global.
getSector().reportEventStage(
this,
"clear_smuggling",
null, MessagePriority.ENSURE_DELIVERY,
null);
156 return "Smuggling investigation - " +
market.getName() +
" (over)";
158 return "Smuggling investigation - " +
market.getName();
164 public boolean callEvent(String ruleId, InteractionDialogAPI dialog,
165 List<Token> params, Map<String, MemoryAPI> memoryMap) {
166 String action = params.get(0).getString(memoryMap);
169 CargoAPI cargo = playerFleet.getCargo();
171 if (action.equals(
"paidBribe")) {
173 }
else if (action.equals(
"setBribePaid")) {
182 Map<String, String> map = super.getTokenReplacements();
184 map.put(
"$InvestigatorPost", Misc.ucFirst(investigator.getPost()));
185 map.put(
"$investigatorName", investigator.getName().getFullName());
186 if (investigator.isMale()) {
187 map.put(
"$invHimOrHer",
"him");
189 map.put(
"$invHimOrHer",
"her");
192 map.put(
"$sender",
"Unknown");
193 map.put(
"$duration", Misc.getAtLeastStringForDays((
int)duration));
199 List<String> result =
new ArrayList<String>();
201 return result.toArray(
new String[0]);
204 private boolean ended =
false;
206 if (investigator !=
null) {
207 investigator.getMemoryWithoutUpdate().unset(
"$ise_eventRef");
208 investigator.getMemoryWithoutUpdate().unset(
"$ise_investigator");
209 investigator.getMemoryWithoutUpdate().unset(
"$ise_bribeAmount");
210 investigator.getMemoryWithoutUpdate().unset(
"$ise_bribeAmountDGS");
211 Misc.setFlagWithReason(investigator.getMemoryWithoutUpdate(),
212 MemFlags.MEMORY_KEY_REQUIRES_DISCRETION,
"ies",
216 if (!
Global.
getSector().getImportantPeople().isCheckedOutForAnything(investigator)) {
217 market.getCommDirectory().removePerson(investigator);
static Logger getLogger(Class c)
static SectorAPI getSector()
void addTokensToList(List< String > list, String ... keys)
CampaignEventTarget eventTarget
void advance(float amount)
boolean callEvent(String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
String[] getHighlights(String stageId)
static final String PERSON_CHECKOUT_REASON
void init(String type, CampaignEventTarget eventTarget)
Map< String, String > getTokenReplacements()