1package com.fs.starfarer.api.impl.campaign.events;
4import java.util.ArrayList;
5import java.util.Arrays;
6import java.util.HashMap;
10import com.fs.starfarer.api.Global;
11import com.fs.starfarer.api.campaign.BattleAPI;
12import com.fs.starfarer.api.campaign.CampaignEventListener;
13import com.fs.starfarer.api.campaign.CampaignFleetAPI;
14import com.fs.starfarer.api.campaign.CargoAPI;
15import com.fs.starfarer.api.campaign.FactionAPI;
16import com.fs.starfarer.api.campaign.FleetEncounterContextPlugin;
17import com.fs.starfarer.api.campaign.InteractionDialogAPI;
18import com.fs.starfarer.api.campaign.PlayerMarketTransaction;
19import com.fs.starfarer.api.campaign.RepLevel;
20import com.fs.starfarer.api.campaign.SectorEntityToken;
21import com.fs.starfarer.api.campaign.StarSystemAPI;
22import com.fs.starfarer.api.campaign.JumpPointAPI.JumpDestination;
23import com.fs.starfarer.api.campaign.comm.MessagePriority;
24import com.fs.starfarer.api.campaign.econ.MarketAPI;
25import com.fs.starfarer.api.campaign.events.CampaignEventManagerAPI;
26import com.fs.starfarer.api.campaign.events.CampaignEventPlugin;
27import com.fs.starfarer.api.campaign.events.CampaignEventTarget;
28import com.fs.starfarer.api.campaign.rules.MemoryAPI;
29import com.fs.starfarer.api.characters.AbilityPlugin;
30import com.fs.starfarer.api.characters.PersonAPI;
31import com.fs.starfarer.api.combat.EngagementResultAPI;
32import com.fs.starfarer.api.impl.campaign.ids.Events;
33import com.fs.starfarer.api.impl.campaign.ids.Tags;
34import com.fs.starfarer.api.util.Misc;
35import com.fs.starfarer.api.util.Misc.Token;
37public class BaseEventPlugin implements CampaignEventPlugin, CampaignEventListener {
39 private String
id = Misc.genUID();
84 return "[" +
market.getName() +
"]";
86 return "[" +
eventTarget.getEntity().getName() +
"]";
131 HashMap<String, String> tokens =
new HashMap<String, String>();
134 tokens.put(
"$playerName",
Global.
getSector().getCharacterData().getName());
137 if (playerPerson !=
null) {
138 if (playerPerson.isMale()) {
139 tokens.put(
"$playerHisOrHer",
"his");
140 tokens.put(
"$PlayerHisOrHer",
"His");
141 tokens.put(
"$playerHimOrHer",
"him");
142 tokens.put(
"$PlayerHimOrHer",
"Him");
143 tokens.put(
"$playerHeOrShe",
"he");
144 tokens.put(
"$PlayerHeOrShe",
"He");
146 tokens.put(
"$playerHisOrHer",
"her");
147 tokens.put(
"$PlayerHisOrHer",
"Her");
148 tokens.put(
"$playerHimOrHer",
"her");
149 tokens.put(
"$PlayerHimOrHer",
"Her");
150 tokens.put(
"$playerHeOrShe",
"she");
151 tokens.put(
"$PlayerHeOrShe",
"She");
165 tokens.put(
"$name",
entity.getName());
169 if (
market.getPrimaryEntity().hasTag(Tags.STATION)) {
170 tokens.put(
"$onOrAt",
"at");
172 tokens.put(
"$onOrAt",
"on");
175 tokens.put(
"$market",
market.getName());
176 tokens.put(
"$marketFaction",
market.getFaction().getDisplayName());
177 tokens.put(
"$MarketFaction", Misc.ucFirst(
market.getFaction().getDisplayName()));
178 tokens.put(
"$TheMarketFaction", Misc.ucFirst(
market.getFaction().getDisplayNameWithArticle()));
179 tokens.put(
"$theMarketFaction",
market.getFaction().getDisplayNameWithArticle());
181 if (
eventTarget.getLocation() instanceof StarSystemAPI) {
183 tokens.put(
"$marketSystem", ((StarSystemAPI)
eventTarget.getLocation()).getBaseName());
185 tokens.put(
"$marketSystem",
"hyperspace");
188 RepLevel level = playerFleet.getFaction().getRelationshipLevel(
market.getFaction());
189 tokens.put(
"$factionStanding", level.getDisplayName().toLowerCase());
190 tokens.put(
"$FactionStanding", Misc.ucFirst(level.getDisplayName()));
194 RepLevel level = playerFleet.getFaction().getRelationshipLevel(
faction);
195 tokens.put(
"$factionStanding", level.getDisplayName().toLowerCase());
196 tokens.put(
"$FactionStanding", Misc.ucFirst(level.getDisplayName()));
199 if (playerFleet !=
null) {
200 String fleetOrShip =
"fleet";
201 if (playerFleet.getFleetData().getMembersListCopy().size() == 1) {
202 fleetOrShip =
"ship";
203 if (playerFleet.getFleetData().getMembersListCopy().get(0).isFighterWing()) {
204 fleetOrShip =
"fighter wing";
207 tokens.put(
"$playerShipOrFleet", fleetOrShip);
216 String factionName =
faction.getEntityNamePrefix();
217 if (factionName ==
null || factionName.isEmpty()) {
218 factionName =
faction.getDisplayName();
221 tokens.put(
"$factionIsOrAre",
faction.getDisplayNameIsOrAre());
223 tokens.put(
"$faction", factionName);
224 tokens.put(
"$ownerFaction", factionName);
225 tokens.put(
"$marketFaction", factionName);
226 tokens.put(
"$Faction", Misc.ucFirst(factionName));
227 tokens.put(
"$OwnerFaction", Misc.ucFirst(factionName));
228 tokens.put(
"$MarketFaction", Misc.ucFirst(factionName));
229 tokens.put(
"$theFaction",
faction.getDisplayNameWithArticle());
230 tokens.put(
"$theOwnerFaction",
faction.getDisplayNameWithArticle());
231 tokens.put(
"$theMarketFaction",
faction.getDisplayNameWithArticle());
232 tokens.put(
"$TheFaction", Misc.ucFirst(
faction.getDisplayNameWithArticle()));
233 tokens.put(
"$TheOwnerFaction", Misc.ucFirst(
faction.getDisplayNameWithArticle()));
234 tokens.put(
"$TheMarketFaction", Misc.ucFirst(
faction.getDisplayNameWithArticle()));
236 tokens.put(
"$factionLong",
faction.getDisplayNameLong());
237 tokens.put(
"$FactionLong", Misc.ucFirst(
faction.getDisplayNameLong()));
238 tokens.put(
"$theFactionLong",
faction.getDisplayNameLongWithArticle());
239 tokens.put(
"$TheFactionLong", Misc.ucFirst(
faction.getDisplayNameLongWithArticle()));
248 String factionName =
faction.getEntityNamePrefix();
249 if (factionName ==
null || factionName.isEmpty()) {
250 factionName =
faction.getDisplayName();
252 String prefixUC = Misc.ucFirst(prefix);
253 tokens.put(
"$" + prefix +
"Faction", factionName);
254 tokens.put(
"$" + prefixUC +
"Faction", Misc.ucFirst(factionName));
255 tokens.put(
"$the" + prefixUC +
"Faction",
faction.getDisplayNameWithArticle());
256 tokens.put(
"$The" + prefixUC +
"Faction", Misc.ucFirst(
faction.getDisplayNameWithArticle()));
258 tokens.put(
"$" + prefix +
"FactionLong",
faction.getDisplayNameLong());
259 tokens.put(
"$" + prefixUC +
"FactionLong", Misc.ucFirst(
faction.getDisplayNameLong()));
260 tokens.put(
"$the" + prefixUC +
"FactionLong",
faction.getDisplayNameLongWithArticle());
261 tokens.put(
"$The" + prefixUC +
"FactionLong", Misc.ucFirst(
faction.getDisplayNameLongWithArticle()));
263 tokens.put(
"$" + prefix +
"FactionIsOrAre",
faction.getDisplayNameIsOrAre());
267 public static void addPersonTokens(Map<String, String> tokens, String prefix, PersonAPI person) {
268 if (person !=
null) {
269 tokens.put(
"$" + prefix +
"Name", person.getName().getFullName());
270 tokens.put(
"$" + prefix +
"LastName", person.getName().getLast());
271 tokens.put(
"$" + prefix +
"FirstName", person.getName().getFirst());
274 tokens.put(
"$" + prefix +
"Rank", person.getRank().toLowerCase());
275 tokens.put(
"$" + Misc.ucFirst(prefix) +
"Rank", Misc.ucFirst(person.getRank()));
277 tokens.put(
"$" + prefix +
"Post", person.getPost().toLowerCase());
278 tokens.put(
"$" + Misc.ucFirst(prefix) +
"Post", Misc.ucFirst(person.getPost()));
281 if (person.isMale()) {
282 tokens.put(
"$" + prefix +
"HisOrHer",
"his");
283 tokens.put(
"$" + Misc.ucFirst(prefix) +
"HisOrHer",
"His");
284 tokens.put(
"$" + prefix +
"HimOrHer",
"him");
285 tokens.put(
"$" + Misc.ucFirst(prefix) +
"HimOrHer",
"Him");
286 tokens.put(
"$" + prefix +
"HeOrShe",
"he");
287 tokens.put(
"$" + Misc.ucFirst(prefix) +
"HeOrShe",
"He");
289 tokens.put(
"$" + prefix +
"HisOrHer",
"her");
290 tokens.put(
"$" + Misc.ucFirst(prefix) +
"HisOrHer",
"Her");
291 tokens.put(
"$" + prefix +
"HimOrHer",
"her");
292 tokens.put(
"$" + Misc.ucFirst(prefix) +
"HimOrHer",
"Her");
293 tokens.put(
"$" + prefix +
"HeOrShe",
"she");
294 tokens.put(
"$" + Misc.ucFirst(prefix) +
"HeOrShe",
"She");
322 public static interface MarketFilter {
323 boolean acceptMarket(MarketAPI
market);
327 float minDist = Float.MAX_VALUE;
328 MarketAPI result =
null;
330 if (
market == from)
continue;
331 float dist = Misc.getDistance(
market.getLocationInHyperspace(), from.getLocationInHyperspace());
332 if (dist < minDist && (filter ==
null || filter.acceptMarket(
market))) {
341 List<MarketAPI> result =
new ArrayList<MarketAPI>();
343 if (filter ==
null || filter.acceptMarket(
market)) {
351 if (stabilityChange <= 0)
return;
352 CampaignEventManagerAPI manager =
Global.
getSector().getEventManager();
357 event.increaseStabilityPenalty((
int) stabilityChange);
367 public void reportFleetJumped(CampaignFleetAPI fleet, SectorEntityToken from, JumpDestination to) {
383 if (highlights !=
null) {
385 Color [] colors =
new Color[highlights.length];
386 Arrays.fill(colors, c);
395 for (String key : keys) {
396 if (tokens.containsKey(key)) {
397 list.add(tokens.get(key));
403 return "BaseEventPlugin.getEventName()";
407 return CampaignEventCategory.EVENT;
411 MessagePriority priority = MessagePriority.SECTOR;
412 switch (
market.getSize()) {
416 priority = MessagePriority.SYSTEM;
421 priority = MessagePriority.CLUSTER;
426 priority = MessagePriority.SECTOR;
488 public boolean callEvent(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
527 this.startProbability = p;
static SettingsAPI getSettings()
static SectorAPI getSector()
String[] getHighlights(String stageId)
boolean allowMultipleOngoingForSameTarget()
void startEvent(boolean addListener)
void reportPlayerReputationChange(String faction, float delta)
void reportPlayerEngagement(EngagementResultAPI result)
void setParam(Object param)
static void addFactionNameTokens(Map< String, String > tokens, String prefix, FactionAPI faction)
boolean useEventNameAsId()
static void addPersonTokens(Map< String, String > tokens, String prefix, PersonAPI person)
Color[] getHighlightColors(String stageId)
void reportPlayerClosedMarket(MarketAPI market)
void reportBattleFinished(CampaignFleetAPI primaryWinner, BattleAPI battle)
String getStageIdForLikely()
void reportPlayerDidNotTakeCargo(CargoAPI cargo)
void reportPlayerMarketTransaction(PlayerMarketTransaction transaction)
MessagePriority getWarningWhenLikelyPriority()
void increaseRecentUnrest(float stabilityChange)
static List< MarketAPI > findMatchingMarkets(MarketFilter filter)
CampaignEventCategory getEventCategory()
void reportPlayerActivatedAbility(AbilityPlugin ability, Object param)
void reportEncounterLootGenerated(FleetEncounterContextPlugin plugin, CargoAPI loot)
void reportEconomyTick(int iterIndex)
void init(String eventType, CampaignEventTarget eventTarget, boolean addListener)
void reportPlayerReputationChange(PersonAPI person, float delta)
void reportFleetSpawned(CampaignFleetAPI fleet)
MessagePriority getDefaultPriority()
void init(String eventType, CampaignEventTarget eventTarget)
void advance(float amount)
boolean callEvent(String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
void addTokensToList(List< String > list, String ... keys)
void setProbability(float p)
void reportEconomyMonthEnd()
Map< String, String > getTokenReplacements()
void reportFleetDespawned(CampaignFleetAPI fleet, FleetDespawnReason reason, Object param)
void reportPlayerOpenedMarketAndCargoUpdated(MarketAPI market)
static MarketAPI findNearestMarket(MarketAPI from, MarketFilter filter)
void setTarget(CampaignEventTarget eventTarget)
List< String > getRelatedCommodities()
CampaignEventTarget eventTarget
void reportPlayerDeactivatedAbility(AbilityPlugin ability, Object param)
void reportFleetJumped(CampaignFleetAPI fleet, SectorEntityToken from, JumpDestination to)
List< PriceUpdatePlugin > getPriceUpdates()
void reportPlayerOpenedMarket(MarketAPI market)
String getStageIdForPossible()
String getCurrentMessageIcon()
void reportFleetReachedEntity(CampaignFleetAPI fleet, SectorEntityToken entity)
void reportShownInteractionDialog(InteractionDialogAPI dialog)
CampaignEventTarget getEventTarget()
boolean showAllMessagesIfOngoing()
void reportPlayerDumpedCargo(CargoAPI cargo)
boolean showLatestMessageIfOngoing()
void reportBattleOccurred(CampaignFleetAPI primaryWinner, BattleAPI battle)
MessagePriority getWarningWhenPossiblePriority()
Color getColor(String id)