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