package data.scripts.world.systems;
import java.util.List;
import com.fs.starfarer.api.Global;
import com.fs.starfarer.api.campaign.CampaignFleetAPI;
import com.fs.starfarer.api.campaign.CargoAPI;
import com.fs.starfarer.api.campaign.FleetAssignment;
import com.fs.starfarer.api.campaign.LocationAPI;
import com.fs.starfarer.api.campaign.SectorAPI;
import com.fs.starfarer.api.campaign.SectorEntityToken;
import com.fs.starfarer.api.campaign.StarSystemAPI;
import com.fs.starfarer.api.fleet.FleetMemberAPI;
import com.fs.starfarer.api.fleet.FleetMemberType;
import data.scripts.world.BaseSpawnPoint;
@SuppressWarnings("unchecked")
public class ZorgConvoySpawn extends BaseSpawnPoint {
private final SectorEntityToken convoyDestination;
public ZorgConvoySpawn (SectorAPI sector, LocationAPI location,
float daysInterval, int maxFleets, SectorEntityToken anchor,
SectorEntityToken convoyDestination) {
super(sector, location, daysInterval, maxFleets, anchor);
this.convoyDestination = convoyDestination;
}
private int convoyNumber = 0;
@Override
protected CampaignFleetAPI spawnFleet() {
String type = null;
float r = (float) Math.random();
if (r > .75f) {
type = "prospectors";
} else if (r > 0.5f) {
type = "salvagers";
} else {
type = "assimilators";
}
StarSystemAPI corvus = Global.getSector().getStarSystem("Corvus");
float angle = (float) ((float) Math.random() * Math.PI * 2f);
float x = (float) (Math.cos(angle) * 12000f) + corvus.getLocation().x;
float y = (float) (Math.sin(angle) * 12000f) + corvus.getLocation().y;
SectorEntityToken spawnPoint = Global.getSector().getHyperspace().createToken(x, y);
CampaignFleetAPI fleet = getSector().createFleet("zorg", type);
spawnPoint.getContainingLocation().spawnFleet(spawnPoint, 0, 0, fleet);
fleet.setPreferredResupplyLocation(convoyDestination);
CargoAPI cargo = fleet.getCargo();
addRandomWeapons(cargo, (int) (Math.random() * 3f) + 2);
addRandomShips(fleet, (int) (Math.random() * 2f) + 0);
fleet.addAssignment(FleetAssignment.DELIVER_RESOURCES, convoyDestination, 1000);
fleet.addAssignment(FleetAssignment.GO_TO_LOCATION_AND_DESPAWN, spawnPoint, 1000);
convoyNumber++;
return fleet;
}
private void addRandomWeapons(CargoAPI cargo, int count) {
List weaponIds = getSector().getAllWeaponIds();
for (int i = 0; i < count; i++) {
String weaponId = (String) weaponIds.get((int) (weaponIds.size() * Math.random()));
int quantity = (int)(Math.random() * 4f + 2f);
cargo.addWeapons(weaponId, quantity);
}
}
private void addRandomShips(CampaignFleetAPI fleet, int count) {
List wings = getSector().getAllFighterWingIds();
List ships = getSector().getAllEmptyVariantIds();
for (int i = 0; i < count; i++) {
if ((float) Math.random() > 0.4f) {
String wing = (String) wings.get((int) (wings.size() * Math.random()));
FleetMemberAPI member = Global.getFactory().createFleetMember(FleetMemberType.FIGHTER_WING, wing);
fleet.getFleetData().addFleetMember(member);
member.getRepairTracker().setMothballed(true);
} else {
String ship = (String) ships.get((int) (ships.size() * Math.random()));
FleetMemberAPI member = Global.getFactory().createFleetMember(FleetMemberType.SHIP, ship);
fleet.getFleetData().addFleetMember(member);
member.getRepairTracker().setMothballed(true);
}
}
}
}
package data.scripts.world.zorg;
import com.fs.starfarer.api.campaign.FactionAPI;
import com.fs.starfarer.api.InteractionDialogImageVisual;
import com.fs.starfarer.api.Global;
import com.fs.starfarer.api.campaign.CargoAPI;
import com.fs.starfarer.api.campaign.CargoAPI.CrewXPLevel;
import com.fs.starfarer.api.campaign.JumpPointAPI;
import com.fs.starfarer.api.campaign.LocationAPI;
import com.fs.starfarer.api.campaign.OrbitAPI;
import com.fs.starfarer.api.campaign.PlanetAPI;
import com.fs.starfarer.api.campaign.SectorAPI;
import com.fs.starfarer.api.campaign.SectorEntityToken;
import com.fs.starfarer.api.campaign.StarSystemAPI;
import com.fs.starfarer.api.fleet.FleetMemberType;
import com.fs.starfarer.api.impl.campaign.CoreCampaignPluginImpl;
import java.awt.Color;
import java.util.List;
@SuppressWarnings("unchecked")
public class ZorgGen {
public void generate(SectorAPI sector) {
StarSystemAPI system = sector.createStarSystem("Zorg Zeta");
LocationAPI hyper = Global.getSector().getHyperspace();
system.setBackgroundTextureFilename("graphics/zorg/backgrounds/backgroundzorg3.png");
// create the star and generate the hyperspace anchor for this system
PlanetAPI star = system.initStar("star_zorg", // id in planets.json
200f, // radius (in pixels at default zoom)
10000, -10000); // location in hyperspace
system.setLightColor(new Color(25, 75, 55)); // light color in entire system, affects all entities
/*
* addPlanet() parameters:
* 1. What the planet orbits (orbit is always circular)
* 2. Name
* 3. Planet type id in planets.json
* 4. Starting angle in orbit, i.e. 0 = to the right of the star
* 5. Planet radius, pixels at default zoom
* 6. Orbit radius, pixels at default zoom
* 7. Days it takes to complete an orbit. 1 day = 10 seconds.
*/
PlanetAPI z1 = system.addPlanet(star, "Zeta I", "rocky_metallic", 0, 100, 5000, 100);
PlanetAPI z2 = system.addPlanet(star, "Zeta II", "rocky_metallic", 90, 150, 10000, 150);
JumpPointAPI jumpPoint = Global.getFactory().createJumpPoint("Inner System Jump");
OrbitAPI orbit = Global.getFactory().createCircularOrbit(z1, 0, 1000, 10);
jumpPoint.setOrbit(orbit);
jumpPoint.setRelatedPlanet(z1);
jumpPoint.setStandardWormholeToHyperspaceVisual();
system.addEntity(jumpPoint);
FactionAPI zorg = sector.getFaction("zorg");
zorg.setRelationship("hegemony", -1);
zorg.setRelationship("tritachyon", -1);
zorg.setRelationship("pirates", -1);
zorg.setRelationship("independent", 0);
zorg.setRelationship("player", 0);
SectorEntityToken station = system.addOrbitalStation(star, 180, 500, 10, "Unimatrix", "zorg");
initStationCargo(station);
station.setCustomInteractionDialogImageVisual(new InteractionDialogImageVisual("illustrations", "cargo_loading", 640, 400));
// example of using custom visuals below
// a1.setCustomInteractionDialogImageVisual(new InteractionDialogImageVisual("illustrations", "hull_breach", 800, 800));
// jumpPoint.setCustomInteractionDialogImageVisual(new InteractionDialogImageVisual("illustrations", "space_wreckage", 1200, 1200));
// station.setCustomInteractionDialogImageVisual(new InteractionDialogImageVisual("illustrations", "cargo_loading", 1200, 1200));
// generates hyperspace destinations for in-system jump points
system.autogenerateHyperspaceJumpPoints(true, true);
ZorgSpawnPoint ZSpawn = new ZorgSpawnPoint(sector, system, 3, 12, station);
system.addSpawnPoint(ZSpawn);
for (int i = 0; i < 3; i++) ZSpawn.spawnFleet();
system.addScript(new ZorgConvoySpawn(sector, hyper, 1, 10, hyper.createToken(-6000, 2000), station));
sector.registerPlugin(new CoreCampaignPluginImpl());
}
private void initStationCargo(SectorEntityToken station) {
CargoAPI cargo = station.getCargo();
addRandomWeapons(cargo, 10);
cargo.addCrew(CrewXPLevel.VETERAN, 20);
cargo.addCrew(CrewXPLevel.REGULAR, 500);
cargo.addCrew(CrewXPLevel.GREEN, 500);
cargo.addMarines(300);
cargo.addSupplies(2000);
cargo.addFuel(1000);
cargo.addWeapons("adaptorray", 3);
cargo.addWeapons("concussionray", 3);
cargo.addWeapons("disruptorray", 3);
cargo.addWeapons("handlerray", 5);
cargo.addWeapons("interdictorray", 5);
cargo.addWeapons("transmitterray", 3);
cargo.getMothballedShips().addFleetMember(Global.getFactory().createFleetMember(FleetMemberType.SHIP, "zorg_allocator_Active"));
cargo.getMothballedShips().addFleetMember(Global.getFactory().createFleetMember(FleetMemberType.SHIP, "zorg_control_matrix_Active"));
cargo.getMothballedShips().addFleetMember(Global.getFactory().createFleetMember(FleetMemberType.SHIP, "zorg_control_matrix_Armoured"));
cargo.getMothballedShips().addFleetMember(Global.getFactory().createFleetMember(FleetMemberType.SHIP, "zorg_drone_ActiveY"));
cargo.getMothballedShips().addFleetMember(Global.getFactory().createFleetMember(FleetMemberType.SHIP, "zorg_drone_ActiveZ"));
cargo.getMothballedShips().addFleetMember(Global.getFactory().createFleetMember(FleetMemberType.SHIP, "zorg_surveyor_ActiveY"));
cargo.getMothballedShips().addFleetMember(Global.getFactory().createFleetMember(FleetMemberType.SHIP, "zorg_surveyor_ActiveZ"));
cargo.getMothballedShips().addFleetMember(Global.getFactory().createFleetMember(FleetMemberType.SHIP, "zorg_tactical_overseer_Active"));
cargo.getMothballedShips().addFleetMember(Global.getFactory().createFleetMember(FleetMemberType.SHIP, "zorg_tactical_probe_Active"));
cargo.getMothballedShips().addFleetMember(Global.getFactory().createFleetMember(FleetMemberType.FIGHTER_WING, "zorg_worker_wing"));
cargo.getMothballedShips().addFleetMember(Global.getFactory().createFleetMember(FleetMemberType.FIGHTER_WING, "zorg_worker_wing"));
cargo.getMothballedShips().addFleetMember(Global.getFactory().createFleetMember(FleetMemberType.FIGHTER_WING, "zorg_disabler_wing"));
cargo.getMothballedShips().addFleetMember(Global.getFactory().createFleetMember(FleetMemberType.FIGHTER_WING, "zorg_disabler_wing"));
cargo.getMothballedShips().addFleetMember(Global.getFactory().createFleetMember(FleetMemberType.FIGHTER_WING, "zorg_probe_wing"));
cargo.getMothballedShips().addFleetMember(Global.getFactory().createFleetMember(FleetMemberType.FIGHTER_WING, "zorg_probe_wing"));
}
private void addRandomWeapons(CargoAPI cargo, int count) {
List weaponIds = Global.getSector().getAllWeaponIds();
for (int i = 0; i < count; i++) {
String weaponId = (String) weaponIds.get((int) (weaponIds.size() * Math.random()));
int quantity = (int)(Math.random() * 4f + 2f);
cargo.addWeapons(weaponId, quantity);
}
}
}