001package com.fs.starfarer.api.impl.campaign.fleets; 002 003import com.fs.starfarer.api.Global; 004import com.fs.starfarer.api.campaign.econ.MarketAPI; 005import com.fs.starfarer.api.characters.PersonAPI; 006import com.fs.starfarer.api.combat.ShipVariantAPI; 007import com.fs.starfarer.api.impl.campaign.events.OfficerManagerEvent; 008import com.fs.starfarer.api.impl.campaign.events.OfficerManagerEvent.SkillPickPreference; 009import com.fs.starfarer.api.impl.campaign.ids.Conditions; 010import com.fs.starfarer.api.impl.campaign.ids.Industries; 011import com.fs.starfarer.api.impl.campaign.ids.Personalities; 012import com.fs.starfarer.api.impl.campaign.ids.Ranks; 013 014public abstract class SDFBase extends PersonalFleetScript { 015 016 // list of all relevant fleet commander skills, for reference 017// m.triggerFleetAddCommanderSkill(Skills.COORDINATED_MANEUVERS, 1); 018// m.triggerFleetAddCommanderSkill(Skills.TACTICAL_DRILLS, 1); 019// m.triggerFleetAddCommanderSkill(Skills.CREW_TRAINING, 1); 020// m.triggerFleetAddCommanderSkill(Skills.CARRIER_GROUP, 1); 021// m.triggerFleetAddCommanderSkill(Skills.FIGHTER_UPLINK, 1); 022// m.triggerFleetAddCommanderSkill(Skills.WOLFPACK_TACTICS, 1); 023// m.triggerFleetAddCommanderSkill(Skills.OFFICER_TRAINING, 1); 024// m.triggerFleetAddCommanderSkill(Skills.SUPPORT_DOCTRINE, 1); 025// m.triggerFleetAddCommanderSkill(Skills.FLUX_REGULATION, 1); 026// m.triggerFleetAddCommanderSkill(Skills.PHASE_CORPS, 1); 027// m.triggerFleetAddCommanderSkill(Skills.ELECTRONIC_WARFARE, 1); 028// m.triggerFleetAddCommanderSkill(Skills.CYBERNETIC_AUGMENTATION, 1); 029// m.triggerFleetAddCommanderSkill(Skills.DERELICT_CONTINGENT, 1); 030 031 protected PersonAPI person; 032 033 public SDFBase() { 034 super(null); // when/if there's a specific person, comment out anything using "person" here 035 setMinRespawnDelayDays(10f); 036 setMaxRespawnDelayDays(20f); 037 038 person = createOrGetPerson(); 039 setDefeatTrigger(getDefeatTriggerToUse()); 040 } 041 042 protected abstract String getFactionId(); 043 044 protected String getDefeatTriggerToUse() { 045 return null; 046 } 047 048 protected SkillPickPreference getCommanderShipSkillPreference() { 049 return SkillPickPreference.ANY; 050 } 051 052 protected PersonAPI createOrGetPerson() { 053 int commanderLevel = 7; 054 SkillPickPreference pref = getCommanderShipSkillPreference(); 055 PersonAPI commander = OfficerManagerEvent.createOfficer(Global.getSector().getFaction(getFactionId()), 056 commanderLevel, pref, false, null, true, true, -1, random); 057 if (commander.getPersonalityAPI().getId().equals(Personalities.TIMID)) { 058 commander.setPersonality(Personalities.CAUTIOUS); 059 } 060 commander.setRankId(Ranks.SPACE_ADMIRAL); 061 commander.setPostId(Ranks.POST_FLEET_COMMANDER); 062 return commander; 063 } 064 065 @Override 066 public PersonAPI getPerson() { 067 return person; 068 } 069 070 public ShipVariantAPI getVariant(String id) { 071 return Global.getSettings().getVariant(id); 072 } 073 074 @Override 075 public boolean canSpawnFleetNow() { 076 MarketAPI source = getSourceMarket(); 077 if (source == null || source.hasCondition(Conditions.DECIVILIZED)) return false; 078 if (!source.hasIndustry(Industries.MILITARYBASE) && 079 !source.hasIndustry(Industries.HIGHCOMMAND)) return false; 080 if (!source.getFactionId().equals(getFactionId())) return false; 081 return true; 082 } 083 084 @Override 085 public boolean shouldScriptBeRemoved() { 086 return false; 087 } 088 089} 090 091 092 093