001package com.fs.starfarer.api.impl.campaign;
002
003import java.util.Random;
004
005import com.fs.starfarer.api.Global;
006import com.fs.starfarer.api.campaign.AICoreOfficerPlugin;
007import com.fs.starfarer.api.campaign.econ.CommoditySpecAPI;
008import com.fs.starfarer.api.characters.FullName;
009import com.fs.starfarer.api.characters.FullName.Gender;
010import com.fs.starfarer.api.characters.PersonAPI;
011import com.fs.starfarer.api.impl.campaign.ids.Commodities;
012import com.fs.starfarer.api.impl.campaign.ids.Personalities;
013import com.fs.starfarer.api.impl.campaign.ids.Ranks;
014import com.fs.starfarer.api.impl.campaign.ids.Skills;
015
016/**
017 * 
018 */
019public class AICoreOfficerPluginImpl extends BaseAICoreOfficerPluginImpl implements AICoreOfficerPlugin {
020        
021        /**
022         * Extra points added to deployment recovery cost for computing the effect of the "Automated Ships" skill.
023         */
024//      public static int OMEGA_POINTS = 140;
025//      public static int ALPHA_POINTS = 70;
026//      public static int BETA_POINTS = 50;
027//      public static int GAMMA_POINTS = 30;
028        public static int OMEGA_POINTS = 0;
029        public static int ALPHA_POINTS = 0;
030        public static int BETA_POINTS = 0;
031        public static int GAMMA_POINTS = 0;
032        
033        /**
034         * Multiplier to deployment recovery cost for computing the effect of the "Automated Ships" skill.
035         */
036        public static float OMEGA_MULT = 5;
037        public static float ALPHA_MULT = 4;
038        public static float BETA_MULT = 3;
039        public static float GAMMA_MULT = 2;
040        
041        static {
042//              if (BaseSkillEffectDescription.USE_RECOVERY_COST) {
043//                      OMEGA_POINTS = 20;
044//                      ALPHA_POINTS = 10;
045//                      BETA_POINTS = 7;
046//                      GAMMA_POINTS = 5;
047//              }
048        }
049        
050        
051        public PersonAPI createPerson(String aiCoreId, String factionId, Random random) {
052                if (random == null) random = new Random();
053                
054                PersonAPI person = Global.getFactory().createPerson();
055                person.setFaction(factionId);
056                person.setAICoreId(aiCoreId);
057                
058                CommoditySpecAPI spec = Global.getSettings().getCommoditySpec(aiCoreId);
059                boolean alpha = Commodities.ALPHA_CORE.equals(aiCoreId);
060                boolean beta = Commodities.BETA_CORE.equals(aiCoreId);
061                boolean gamma = Commodities.GAMMA_CORE.equals(aiCoreId);
062                boolean omega = Commodities.OMEGA_CORE.equals(aiCoreId);
063                
064                person.getStats().setSkipRefresh(true);
065                
066                person.setName(new FullName(spec.getName(), "", Gender.ANY));
067                int points = 0;
068                float mult = 1f;
069                if (omega) { // assume it's not going to be integrated, no reason to do it - same as assuming it's always integrated
070                        person.setPortraitSprite("graphics/portraits/characters/omega.png");
071                        person.getStats().setLevel(9);
072                        person.getStats().setSkillLevel(Skills.HELMSMANSHIP, 2);
073                        person.getStats().setSkillLevel(Skills.TARGET_ANALYSIS, 2);
074                        person.getStats().setSkillLevel(Skills.IMPACT_MITIGATION, 2);
075                        //person.getStats().setSkillLevel(Skills.SHIELD_MODULATION, 2);
076                        person.getStats().setSkillLevel(Skills.FIELD_MODULATION, 2);
077                        //person.getStats().setSkillLevel(Skills.SYSTEMS_EXPERTISE, 2);
078                        person.getStats().setSkillLevel(Skills.GUNNERY_IMPLANTS, 2);
079                        //person.getStats().setSkillLevel(Skills.RELIABILITY_ENGINEERING, 2);
080                        person.getStats().setSkillLevel(Skills.COMBAT_ENDURANCE, 2);
081                        person.getStats().setSkillLevel(Skills.DAMAGE_CONTROL, 2);
082                        person.getStats().setSkillLevel(Skills.POINT_DEFENSE, 2);
083                        person.getStats().setSkillLevel(Skills.ENERGY_WEAPON_MASTERY, 2);
084                        person.getStats().setSkillLevel(Skills.OMEGA_ECM, 2);
085                        points = OMEGA_POINTS;
086                        mult = OMEGA_MULT;
087                } else if (alpha) {
088                        person.setPortraitSprite("graphics/portraits/portrait_ai2b.png");
089                        person.getStats().setLevel(7);
090                        person.getStats().setSkillLevel(Skills.HELMSMANSHIP, 2);
091                        person.getStats().setSkillLevel(Skills.TARGET_ANALYSIS, 2);
092                        person.getStats().setSkillLevel(Skills.IMPACT_MITIGATION, 2);
093                        //person.getStats().setSkillLevel(Skills.SHIELD_MODULATION, 2);
094                        person.getStats().setSkillLevel(Skills.FIELD_MODULATION, 2);
095                        //person.getStats().setSkillLevel(Skills.SYSTEMS_EXPERTISE, 2);
096                        person.getStats().setSkillLevel(Skills.GUNNERY_IMPLANTS, 2);
097                        //person.getStats().setSkillLevel(Skills.RELIABILITY_ENGINEERING, 2);
098                        person.getStats().setSkillLevel(Skills.COMBAT_ENDURANCE, 2);
099                        person.getStats().setSkillLevel(Skills.DAMAGE_CONTROL, 2);
100                        points = ALPHA_POINTS;
101                        mult = ALPHA_MULT;
102                } else if (beta) {
103                        person.setPortraitSprite("graphics/portraits/portrait_ai3b.png");
104                        person.getStats().setLevel(5);
105                        person.getStats().setSkillLevel(Skills.HELMSMANSHIP, 2);
106                        person.getStats().setSkillLevel(Skills.TARGET_ANALYSIS, 2);
107                        person.getStats().setSkillLevel(Skills.IMPACT_MITIGATION, 2);
108                        person.getStats().setSkillLevel(Skills.GUNNERY_IMPLANTS, 2);
109                        //person.getStats().setSkillLevel(Skills.RELIABILITY_ENGINEERING, 2);
110                        person.getStats().setSkillLevel(Skills.COMBAT_ENDURANCE, 2);
111                        points = BETA_POINTS;
112                        mult = BETA_MULT;
113                } else if (gamma) {
114                        person.setPortraitSprite("graphics/portraits/portrait_ai1b.png");
115                        person.getStats().setLevel(3);
116                        person.getStats().setSkillLevel(Skills.HELMSMANSHIP, 2);
117                        person.getStats().setSkillLevel(Skills.IMPACT_MITIGATION, 2);
118                        //person.getStats().setSkillLevel(Skills.RELIABILITY_ENGINEERING, 2);
119                        person.getStats().setSkillLevel(Skills.COMBAT_ENDURANCE, 2);
120                        points = GAMMA_POINTS;
121                        mult = GAMMA_MULT;
122                }
123                
124                if (points != 0) {
125                        person.getMemoryWithoutUpdate().set(AUTOMATED_POINTS_VALUE, points);
126                }
127                person.getMemoryWithoutUpdate().set(AUTOMATED_POINTS_MULT, mult);
128                
129                person.setPersonality(Personalities.RECKLESS);
130                person.setRankId(Ranks.SPACE_CAPTAIN);
131                person.setPostId(null);
132                
133                person.getStats().setSkipRefresh(false);
134                
135                return person;
136        }
137
138}
139
140
141
142