1package com.fs.starfarer.api.impl.campaign.intel.bar.events;
6import java.util.Random;
9import org.lwjgl.util.vector.Vector2f;
11import com.fs.starfarer.api.Global;
12import com.fs.starfarer.api.campaign.CampaignFleetAPI;
13import com.fs.starfarer.api.campaign.CargoAPI;
14import com.fs.starfarer.api.campaign.CoreInteractionListener;
15import com.fs.starfarer.api.campaign.FactionAPI;
16import com.fs.starfarer.api.campaign.FleetAssignment;
17import com.fs.starfarer.api.campaign.InteractionDialogAPI;
18import com.fs.starfarer.api.campaign.OptionPanelAPI;
19import com.fs.starfarer.api.campaign.SectorEntityToken;
20import com.fs.starfarer.api.campaign.StarSystemAPI;
21import com.fs.starfarer.api.campaign.TextPanelAPI;
22import com.fs.starfarer.api.campaign.econ.CommoditySpecAPI;
23import com.fs.starfarer.api.campaign.listeners.ListenerUtil;
24import com.fs.starfarer.api.campaign.rules.MemoryAPI;
25import com.fs.starfarer.api.impl.campaign.fleets.AutoDespawnScript;
26import com.fs.starfarer.api.impl.campaign.fleets.FleetFactory.PatrolType;
27import com.fs.starfarer.api.impl.campaign.fleets.FleetFactoryV3;
28import com.fs.starfarer.api.impl.campaign.fleets.FleetParamsV3;
29import com.fs.starfarer.api.impl.campaign.ids.Commodities;
30import com.fs.starfarer.api.impl.campaign.ids.Factions;
31import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
32import com.fs.starfarer.api.impl.campaign.ids.Tags;
33import com.fs.starfarer.api.impl.campaign.intel.BaseIntelPlugin;
34import com.fs.starfarer.api.impl.campaign.intel.raid.AssembleStage;
35import com.fs.starfarer.api.impl.campaign.procgen.SalvageEntityGenDataSpec.DropData;
36import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.SalvageEntity;
37import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.BaseSalvageSpecial;
38import com.fs.starfarer.api.impl.campaign.rulecmd.salvage.special.TransmitterTrapSpecial;
39import com.fs.starfarer.api.ui.SectorMapAPI;
40import com.fs.starfarer.api.ui.TooltipMakerAPI;
41import com.fs.starfarer.api.util.Misc;
42import com.fs.starfarer.api.util.Misc.Token;
46 protected SectorEntityToken
cache;
55 Misc.makeImportant(
cache,
"saci");
57 cache.getMemoryWithoutUpdate().set(
"$saic_eventRef",
this);
61 public boolean callEvent(String ruleId, InteractionDialogAPI dialog,
62 List<Token> params, Map<String, MemoryAPI> memoryMap) {
63 String action = params.get(0).getString(memoryMap);
66 CargoAPI cargo = playerFleet.getCargo();
67 MemoryAPI memory =
cache.getMemoryWithoutUpdate();
69 if (action.equals(
"putValuesInMemory")) {
73 }
else if (action.equals(
"genLootWithCore")) {
74 genLoot(dialog, memoryMap,
true);
75 }
else if (action.equals(
"genLootNoCore")) {
76 genLoot(dialog, memoryMap,
false);
91 protected void genLoot(
final InteractionDialogAPI dialog, Map<String, MemoryAPI> memoryMap,
boolean withCore) {
92 OptionPanelAPI options = dialog.getOptionPanel();
93 TextPanelAPI text = dialog.getTextPanel();
95 MemoryAPI memory =
cache.getMemoryWithoutUpdate();
96 long seed = memory.getLong(MemFlags.SALVAGE_SEED);
97 Random random = Misc.getRandom(seed, 100);
99 DropData d =
new DropData();
101 d.group =
"blueprints";
102 cache.addDropRandom(d);
106 d.group =
"rare_tech";
107 cache.addDropRandom(d);
109 CargoAPI salvage = SalvageEntity.generateSalvage(random,
110 1f, 1f, 1f, 1f,
cache.getDropValue(),
cache.getDropRandom());
111 CargoAPI extra = BaseSalvageSpecial.getCombinedExtraSalvage(memoryMap);
112 salvage.addAll(extra);
113 BaseSalvageSpecial.clearExtraSalvage(memoryMap);
114 if (!extra.isEmpty()) {
115 ListenerUtil.reportExtraSalvageShown(
cache);
119 salvage.addCommodity(Commodities.ALPHA_CORE, 1);
126 dialog.getVisualPanel().showLoot(
"Salvaged", salvage,
false,
true,
true,
new CoreInteractionListener() {
127 public void coreUIDismissed() {
129 dialog.hideTextPanel();
130 dialog.hideVisualPanel();
131 Misc.fadeAndExpire(
cache);
138 options.clearOptions();
139 dialog.setPromptText(
"");
142 if (random.nextFloat() > 0.5f) {
143 SectorEntityToken loc =
cache.getContainingLocation().createToken(
cache.getLocation());
145 if (random.nextFloat() > 0.5f) {
155 Color h = Misc.getHighlightColor();
156 Color g = Misc.getGrayColor();
161 if (mode == ListInfoMode.IN_DESC) initPad = opad;
177 info.addPara(
getName(), c, 0f);
184 Color h = Misc.getHighlightColor();
185 Color g = Misc.getGrayColor();
186 Color tc = Misc.getTextColor();
193 info.addImage(spec.getIconName(), width, 80, opad);
203 info.addPara(
"You've found and looted the cache of pre-Collapse technology in the " +
204 cacheSystem.getNameWithLowercaseType() +
".", opad);
206 info.addPara(
"You've kept your promise to the scientist and placed the AI core in a secure " +
207 "container, to be shipped to " +
event.
getHimOrHer() +
" as soon as you're back " +
208 "in civilized space.", opad);
210 info.addPara(
"You've taken the AI core promised to the scientist for yourself. " +
214 info.addPara(
"You've learned that there is a cache of pre-Collapse technology to be found in the " +
215 cacheSystem.getNameWithLowercaseType() +
".", opad);
217 info.addPara(
"The scientist that informed you of this wants the Alpha Core from this " +
227 return spec.getIconName();
232 Set<String> tags = super.getIntelTags(map);
233 tags.add(Tags.INTEL_MISSIONS);
234 tags.add(Tags.INTEL_ACCEPTED);
235 tags.add(Tags.INTEL_EXPLORATION);
240 return "Technology Cache";
245 return "Technology Cache - Looted";
247 return "Technology Cache";
252 return super.getFactionForUIColors();
266 return super.shouldRemoveIntel();
272 return "ui_discovered_entity";
280 if (fp < AssembleStage.FP_SMALL * 1.5f) {
281 type = PatrolType.FAST;
282 }
else if (fp < AssembleStage.FP_MEDIUM * 1.5f) {
283 type = PatrolType.COMBAT;
285 type = PatrolType.HEAVY;
288 FleetParamsV3 params =
new FleetParamsV3(
303 CampaignFleetAPI fleet = FleetFactoryV3.createFleet(params);
304 if (fleet.isEmpty()) fleet =
null;
307 fleet.addScript(
new AutoDespawnScript(fleet));
309 fleet.setTransponderOn(
false);
310 fleet.getMemoryWithoutUpdate().set(MemFlags.MEMORY_KEY_PIRATE,
true);
312 float range = 2000f + (float) Math.random() * 2000f;
313 Vector2f loc = Misc.getPointAtRadius(locToken.getLocation(), range);
315 locToken.getContainingLocation().addEntity(fleet);
316 fleet.setLocation(loc.x, loc.y);
318 TransmitterTrapSpecial.makeFleetInterceptPlayer(fleet,
false,
true, 30f);
320 fleet.addAssignment(FleetAssignment.PATROL_SYSTEM, locToken, 1000f);
static SettingsAPI getSettings()
static SectorAPI getSector()
void unindent(TooltipMakerAPI info)
Object getListInfoParam()
Color getBulletColorForMode(ListInfoMode mode)
void bullet(TooltipMakerAPI info)
Color getTitleColor(ListInfoMode mode)
ScientistAICoreIntel(SectorEntityToken cache, ScientistAICoreBarEvent event)
ScientistAICoreBarEvent event
static void spawnPiratesToInvestigate(SectorEntityToken locToken, float fp)
void genLoot(final InteractionDialogAPI dialog, Map< String, MemoryAPI > memoryMap, boolean withCore)
boolean shouldRemoveIntel()
SectorEntityToken getMapLocation(SectorMapAPI map)
void addBulletPoints(TooltipMakerAPI info, ListInfoMode mode)
boolean callEvent(String ruleId, InteractionDialogAPI dialog, List< Token > params, Map< String, MemoryAPI > memoryMap)
void createIntelInfo(TooltipMakerAPI info, ListInfoMode mode)
void createSmallDescription(TooltipMakerAPI info, float width, float height)
StarSystemAPI cacheSystem
FactionAPI getFactionForUIColors()
String getSmallDescriptionTitle()
String getCommMessageSound()
Set< String > getIntelTags(SectorMapAPI map)
CommoditySpecAPI getCommoditySpec(String commodityId)