Fractal Softworks Forum

Please login or register.

Login with username, password and session length
Advanced search  

News:

Starsector 0.97a is out! (02/02/24); New blog post: Simulator Enhancements (03/13/24)

Author Topic: Custom Fleets and officers  (Read 4963 times)

TrashMan

  • Admiral
  • *****
  • Posts: 1325
    • View Profile
Custom Fleets and officers
« on: April 25, 2017, 07:44:36 AM »

Given all the changes, what exactly are the steps necessary to have a custom fleet with custom officer spawn in a specified sector? ???

The more detailed the explanation the better.
Bonus points for actual code example
Logged

adimetro00

  • Commander
  • ***
  • Posts: 127
    • View Profile
Re: Custom Fleets and officers
« Reply #1 on: April 25, 2017, 08:39:12 AM »

You mean preset fleets with preset officers, not randomly generated ones?
Logged

TrashMan

  • Admiral
  • *****
  • Posts: 1325
    • View Profile
Re: Custom Fleets and officers
« Reply #2 on: April 26, 2017, 12:39:36 AM »

You mean preset fleets with preset officers, not randomly generated ones?

Yes.
Say I want to make the 1St Fleet with fixed, named ships and a fixed, named officer to always patrols my factions homeworld.
Logged

adimetro00

  • Commander
  • ***
  • Posts: 127
    • View Profile
Re: Custom Fleets and officers
« Reply #3 on: April 26, 2017, 06:35:34 AM »

You mean preset fleets with preset officers, not randomly generated ones?

Yes.
Say I want to make the 1St Fleet with fixed, named ships and a fixed, named officer to always patrols my factions homeworld.
I don't know anything about that, but you should check some of the faction files in the game to get an idea.
Logged

TrashMan

  • Admiral
  • *****
  • Posts: 1325
    • View Profile
Re: Custom Fleets and officers
« Reply #4 on: April 26, 2017, 10:28:03 AM »

Factions get randomly generated fleets - there are presets, but they are just composition ratios, not fixed.

Can't set specific ships, can't name them, can't create officers.

Now, I used to put this in Fleet Spawner in the odler version and with soem mods:
Code
	public static void vnsmain_spawner()
    {
        int vns_mainfleet = getSector().getEntitiesWithTag("vns_mainfleet").size();
        if (vns_mainfleet < 1)
        {
 
            String dest_name = "vaynar";
            String home_name = "avalon";
            SectorEntityToken home = getSector().getEntityById(home_name);
            SectorEntityToken dest = getSector().getEntityById(dest_name);

            home = getSector().getEntityById("avalon");
            log.info("Spawning VNS main fleet in Vaynar.");


            CampaignFleetAPI vns_firstfleet = FleetFactory.createGenericFleet("VNS", "1st Fleet", 1, 200);
                vns_firstfleet.addTag("vns_mainfleet");

            getSector().getFaction("VNS").pickShipAndAddToFleet(ShipRoles.FREIGHTER_MEDIUM, 1, vns_firstfleet);
            getSector().getFaction("VNS").pickShipAndAddToFleet(ShipRoles.TANKER_MEDIUM, 1, vns_firstfleet);


            FleetMemberAPI member = Global.getFactory().createFleetMember(FleetMemberType.SHIP, "vns_archangel_standard");
member.setShipName("VNS Archangel");
member.setFlagship(true);
vns_firstfleet.getFleetData().addFleetMember(member);

            FleetMemberAPI member2 = Global.getFactory().createFleetMember(FleetMemberType.SHIP, "vns_cobra2_assault2");
member2.setShipName("VNS Venom");
vns_firstfleet.getFleetData().addFleetMember(member2);    
            FleetMemberAPI member3 = Global.getFactory().createFleetMember(FleetMemberType.SHIP, "vns_cobrax_advanced");
member3.setShipName("VNS Deimos");
vns_firstfleet.getFleetData().addFleetMember(member3);
            FleetMemberAPI member4 = Global.getFactory().createFleetMember(FleetMemberType.SHIP, "vns_cobrax_advanced");
member4.setShipName("VNS Phobos");
vns_firstfleet.getFleetData().addFleetMember(member4);
            FleetMemberAPI member5 = Global.getFactory().createFleetMember(FleetMemberType.SHIP, "vns_dedalus_elite");
member5.setShipName("VNS Dedalus");
vns_firstfleet.getFleetData().addFleetMember(member5);
            FleetMemberAPI member6 = Global.getFactory().createFleetMember(FleetMemberType.SHIP, "vns_prometheus_elite");
member6.setShipName("VNS Caldabolg");
vns_firstfleet.getFleetData().addFleetMember(member6);
            FleetMemberAPI member7 = Global.getFactory().createFleetMember(FleetMemberType.SHIP, "vns_avenger_mk1_elite");
member7.setShipName("VNS Gae bolg");
vns_firstfleet.getFleetData().addFleetMember(member7);
            FleetMemberAPI member8 = Global.getFactory().createFleetMember(FleetMemberType.SHIP, "vns_paladin_elite");
member8.setShipName("VNS Ascension");
vns_firstfleet.getFleetData().addFleetMember(member8);
            FleetMemberAPI member9 = Global.getFactory().createFleetMember(FleetMemberType.SHIP, "vns_paladin_elite");
member9.setShipName("VNS Tempestus Irae");
vns_firstfleet.getFleetData().addFleetMember(member9);

            FleetMemberAPI member10 = Global.getFactory().createFleetMember(FleetMemberType.SHIP, "vns_perserverance_elite");
member10.setShipName("VNS Eternity");
vns_firstfleet.getFleetData().addFleetMember(member10);
            FleetMemberAPI member11 = Global.getFactory().createFleetMember(FleetMemberType.SHIP, "vns_avenger_mk2_elite");
member11.setShipName("VNS Radiance");
vns_firstfleet.getFleetData().addFleetMember(member11);



            FleetMemberAPI member12 = Global.getFactory().createFleetMember(FleetMemberType.FIGHTER_WING, "ASF14_wing");
vns_firstfleet.getFleetData().addFleetMember(member12);
            FleetMemberAPI member13 = Global.getFactory().createFleetMember(FleetMemberType.FIGHTER_WING, "PhnI_Spec_wing");
vns_firstfleet.getFleetData().addFleetMember(member13);
            FleetMemberAPI member14 = Global.getFactory().createFleetMember(FleetMemberType.FIGHTER_WING, "Armageddon_T_wing");
vns_firstfleet.getFleetData().addFleetMember(member14);
            FleetMemberAPI member15 = Global.getFactory().createFleetMember(FleetMemberType.FIGHTER_WING, "ASF14E_wing");
vns_firstfleet.getFleetData().addFleetMember(member15);


            vns_firstfleet.getCargo().addCrew(CargoAPI.CrewXPLevel.ELITE, (int)(vns_firstfleet.getCargo().getMaxPersonnel()));
            vns_firstfleet.getCargo().addSupplies(vns_firstfleet.getCargo().getMaxCapacity()/3);
            vns_firstfleet.getCargo().addFuel(vns_firstfleet.getCargo().getMaxFuel());

            vns_firstfleet.getFleetData().sort();
            FleetFactory.finishAndSync(vns_firstfleet);


            home.getContainingLocation().addEntity(vns_firstfleet);
            vns_firstfleet.setLocation(home.getLocation().x + 0, home.getLocation().y + 0);
            vns_firstfleet.addAssignment(FleetAssignment.ORBIT_PASSIVE, home, 3, "preparing for duty");
            vns_firstfleet.addAssignment(FleetAssignment.DEFEND_LOCATION, home, 21, "patrolling around "+home.getName());
            vns_firstfleet.addAssignment(FleetAssignment.ORBIT_AGGRESSIVE, home, 3, "standing down from duty");
            vns_firstfleet.addAssignment(FleetAssignment.GO_TO_LOCATION_AND_DESPAWN, home, 1000, "returning to "+home.getName());
            vns_firstfleet.setPreferredResupplyLocation(home);


            log.info("Spawned VNS main fleet in Vaynar");
        }
    }



That would get the fleet created, but not the officer. I understand that we should now be able to create officers.
Also, due to changes I don't think the above code is still valid.
Logged

TrashMan

  • Admiral
  • *****
  • Posts: 1325
    • View Profile
Re: Custom Fleets and officers
« Reply #5 on: April 28, 2017, 12:35:29 AM »

*BUMP*

Still waiting for an answer.
Someone told me it's very doable now.
Logged

Histidine

  • Admiral
  • *****
  • Posts: 4661
    • View Profile
    • GitHub profile
Re: Custom Fleets and officers
« Reply #6 on: April 28, 2017, 02:07:05 AM »

For officers, try this and this.
Logged

TrashMan

  • Admiral
  • *****
  • Posts: 1325
    • View Profile
Re: Custom Fleets and officers
« Reply #7 on: April 28, 2017, 06:01:55 AM »

HM...this seems from a bigger mod or TC
Seems to use custom scrips and functions.

Fishing out just what I need and making it work (if I ever get that far) is going to take time.
Logged

Histidine

  • Admiral
  • *****
  • Posts: 4661
    • View Profile
    • GitHub profile
Re: Custom Fleets and officers
« Reply #8 on: April 28, 2017, 07:46:23 AM »

The important functions (OfficerManagerEvent.createOfficer, CampaignFleetAPI.getFleetData().addOfficer, CampaignFleetAPI.setCommander and CampaignFleetAPI.getFlagship().setCaptain) are all vanilla.
Logged

Armithaig

  • Lieutenant
  • **
  • Posts: 54
    • View Profile
    • Amaranth
Re: Custom Fleets and officers
« Reply #9 on: April 28, 2017, 08:01:31 AM »

Alternative bein' someone else graciously spending their time for you.

Take a look at com.fs.starfarer.api.impl.campaign.fleets.FleetFactoryV2.
Everything you want is used there. addCommanderAndOfficers specifically.

Invest some time into getting a decent file searching tool for plaintext. Invaluable.
Logged

TrashMan

  • Admiral
  • *****
  • Posts: 1325
    • View Profile
Re: Custom Fleets and officers
« Reply #10 on: April 29, 2017, 04:16:16 PM »

is FleetFactory and it's functions still usable or do I have to switch to FleetFactoryV2?
Logged