001package com.fs.starfarer.api.impl.campaign.rulecmd.academy;
002
003import java.util.List;
004import java.util.Map;
005
006import com.fs.starfarer.api.Global;
007import com.fs.starfarer.api.campaign.InteractionDialogAPI;
008import com.fs.starfarer.api.campaign.rules.MemoryAPI;
009import com.fs.starfarer.api.characters.ImportantPeopleAPI.PersonDataAPI;
010import com.fs.starfarer.api.characters.PersonAPI;
011import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.CustomRepImpact;
012import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActionEnvelope;
013import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActions;
014import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepRewards;
015import com.fs.starfarer.api.impl.campaign.ids.Ranks;
016import com.fs.starfarer.api.impl.campaign.rulecmd.BaseCommandPlugin;
017import com.fs.starfarer.api.util.Misc;
018import com.fs.starfarer.api.util.Misc.Token;
019import com.fs.starfarer.api.util.WeightedRandomPicker;
020
021/**
022 * Does not start an actual conversation, but does set them as the active person (so $heOrShe etc tokens work)
023 */
024public class GAReduceRandomRep extends BaseCommandPlugin {
025
026        public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
027                if (dialog == null) return false;
028                
029                WeightedRandomPicker<PersonAPI> picker = new WeightedRandomPicker<PersonAPI>();
030                for (PersonDataAPI pd : Global.getSector().getImportantPeople().getPeopleCopy()) {
031                        PersonAPI person = pd.getPerson();
032                        if (Ranks.POST_ADMINISTRATOR.equals(person.getPostId()) ||
033                                        Ranks.POST_BASE_COMMANDER.equals(person.getPostId()) ||
034                                        Ranks.POST_BASE_COMMANDER.equals(person.getPostId()) ||
035                                        Ranks.POST_STATION_COMMANDER.equals(person.getPostId())) {
036                                picker.add(person);
037                        }
038                }
039                
040                int num = Misc.random.nextInt(2) + 1;
041                for (int i = 0; i < num && !picker.isEmpty(); i++) {
042                        PersonAPI person = picker.pick();
043                        CustomRepImpact custom = new CustomRepImpact();
044                        custom.delta = -RepRewards.TINY;
045                        Global.getSector().adjustPlayerReputation(
046                                        new RepActionEnvelope(RepActions.CUSTOM, custom,
047                                                                                  null, dialog.getTextPanel(), true, true), 
048                                                                                  person);
049                }
050                
051                return true;
052        }
053}
054
055
056
057
058
059
060
061
062
063