001package com.fs.starfarer.api.impl.campaign.rulecmd;
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.PersonAPI;
010import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.CustomRepImpact;
011import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActionEnvelope;
012import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActions;
013import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepRewards;
014import com.fs.starfarer.api.util.Misc;
015import com.fs.starfarer.api.util.Misc.Token;
016import com.fs.starfarer.api.util.WeightedRandomPicker;
017
018/**
019 * Does not start an actual conversation, but does set them as the active person (so $heOrShe etc tokens work)
020 */
021public class MarketReduceRandomRep extends BaseCommandPlugin {
022
023        public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
024
025                if (dialog == null) return false;
026
027                WeightedRandomPicker<PersonAPI> picker = new WeightedRandomPicker<PersonAPI>();
028                
029                //CommDirectoryEntryAPI
030                //for (CommDirectoryAPI comms : dialog.getInteractionTarget().getMarket().getCommDirectory()) {
031                for (PersonAPI person : dialog.getInteractionTarget().getMarket().getPeopleCopy()) {
032                        if (person == null) continue;
033                        if (person.getMarket() == null) continue;
034                        if (person.getMarket().getCommDirectory() == null) continue;
035                        if (person.getMarket().getCommDirectory().getEntryForPerson(person.getId()) == null) continue;
036                        
037                        if (!person.getMarket().getCommDirectory().getEntryForPerson(person.getId()).isHidden()) {
038                                        
039                                        //Ranks.POST_ADMINISTRATOR.equals(person.getPostId()) ||
040                                        //Ranks.POST_BASE_COMMANDER.equals(person.getPostId()) ||
041                                        //Ranks.POST_BASE_COMMANDER.equals(person.getPostId()) ||
042                                        //Ranks.POST_STATION_COMMANDER.equals(person.getPostId())) {
043                                picker.add(person);
044                                
045                        }
046                }
047                
048                int num = Misc.random.nextInt(2) + 2;
049                for (int i = 0; i < num && !picker.isEmpty(); i++) {
050                        PersonAPI person = picker.pickAndRemove();
051                        CustomRepImpact custom = new CustomRepImpact();
052                        custom.delta = -RepRewards.TINY;
053                        Global.getSector().adjustPlayerReputation(
054                                        new RepActionEnvelope(RepActions.CUSTOM, custom,
055                                                                                  null, dialog.getTextPanel(), true, true), 
056                                                                                  person);
057                }
058                
059                return true;
060        }
061}
062
063
064
065
066
067
068
069
070
071