1package com.fs.starfarer.api.impl.campaign;
5import com.fs.starfarer.api.EveryFrameScript;
6import com.fs.starfarer.api.Global;
7import com.fs.starfarer.api.campaign.CampaignFleetAPI;
8import com.fs.starfarer.api.campaign.FleetAssignment;
9import com.fs.starfarer.api.campaign.SectorEntityToken.VisibilityLevel;
10import com.fs.starfarer.api.campaign.StarSystemAPI;
11import com.fs.starfarer.api.campaign.ai.ModularFleetAIAPI;
12import com.fs.starfarer.api.impl.campaign.HassleNPCScript.HassleParams;
13import com.fs.starfarer.api.impl.campaign.ids.Factions;
14import com.fs.starfarer.api.impl.campaign.ids.MemFlags;
15import com.fs.starfarer.api.util.IntervalUtil;
16import com.fs.starfarer.api.util.Misc;
17import com.fs.starfarer.api.util.Misc.FleetFilter;
18import com.fs.starfarer.api.util.WeightedRandomPicker;
22 protected CampaignFleetAPI
fleet;
25 protected IntervalUtil
interval =
new IntervalUtil(0.1f, 0.3f);
28 this(
fleet,
new HassleParams(),
null);
48 float days = Misc.getDays(amount);
50 if (!
interval.intervalElapsed())
return;
54 if (
fleet.getMemoryWithoutUpdate().getBoolean(MemFlags.FLEET_SPECIAL_ACTION))
return;
56 if (
fleet.getBattle() !=
null)
return;
57 if (
fleet.getAI() !=
null && (
fleet.getAI().isFleeing() ||
fleet.getAI().isMaintainingContact())) {
60 if (
fleet.getCurrentAssignment() !=
null &&
61 fleet.getCurrentAssignment().getAssignment() == FleetAssignment.ORBIT_PASSIVE) {
66 List<CampaignFleetAPI> targets = Misc.findNearbyFleets(
fleet, 1000f,
new FleetFilter() {
67 public boolean accept(CampaignFleetAPI other) {
72 WeightedRandomPicker<CampaignFleetAPI> picker =
new WeightedRandomPicker<CampaignFleetAPI>();
73 picker.addAll(targets);
74 CampaignFleetAPI target = picker.pick();
77 float globalTimeout = params.minGlobalTimeout +
78 (params.maxGlobalTimeout -
params.minGlobalTimeout) * (
float) Math.random();
80 float targetTimeout = params.minTargetTimeout +
81 (params.maxTargetTimeout -
params.minTargetTimeout) * (
float) Math.random();
82 target.getMemoryWithoutUpdate().set(
params.timeoutKey,
true, targetTimeout);
87 if (target.isPlayerFleet() || target.getAI() ==
null)
return false;
88 if (target.isHostileTo(
fleet))
return false;
89 if (target.isStationMode())
return false;
90 if (target.getBattle() !=
null)
return false;
92 if (target.getFaction() ==
fleet.getFaction())
return false;
93 if (target.getMemoryWithoutUpdate().contains(
params.timeoutKey))
return false;
95 if (target.getAI() instanceof ModularFleetAIAPI) {
96 ModularFleetAIAPI ai = (ModularFleetAIAPI) target.getAI();
97 if (ai.isFleeing() || ai.isMaintainingContact())
return false;
98 if (
fleet.getInteractionTarget() instanceof CampaignFleetAPI)
return false;
103 VisibilityLevel vis = target.getVisibilityLevelTo(
fleet);
104 if (vis == VisibilityLevel.NONE)
return false;
114 if (Misc.isTrader(target))
return true;
115 if (Misc.isPirate(target))
return false;
116 if (Misc.isPatrol(target) && !target.getFaction().isPlayerFaction())
return false;
117 if (Misc.isWarFleet(target))
return false;
118 if (target.getFaction().getCustomBoolean(Factions.CUSTOM_DECENTRALIZED))
return true;
static SectorAPI getSector()
NPCHassler(CampaignFleetAPI fleet, StarSystemAPI restrictTo)
NPCHassler(CampaignFleetAPI fleet)
boolean isTargetAllowed(CampaignFleetAPI target)
boolean isTargetRightTypeOfFleet(CampaignFleetAPI target)
void advance(float amount)
NPCHassler(CampaignFleetAPI fleet, HassleParams params, StarSystemAPI restrictTo)