001package com.fs.starfarer.api.impl.campaign.rulecmd;
002
003import java.util.List;
004import java.util.Map;
005
006import com.fs.starfarer.api.campaign.InteractionDialogAPI;
007import com.fs.starfarer.api.campaign.RuleBasedDialog;
008import com.fs.starfarer.api.campaign.rules.MemoryAPI;
009import com.fs.starfarer.api.characters.PersonAPI;
010import com.fs.starfarer.api.util.WeightedRandomPicker;
011import com.fs.starfarer.api.util.Misc.Token;
012
013/**
014 * OpenCoreTab <CoreUITabId> <CoreUITradeMode (optional)>
015 */
016public class PickCommsNPC extends BaseCommandPlugin {
017
018        /** 
019         * OpenCoreUI <CoreUITabId>
020         */
021        public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
022                if (!(dialog.getPlugin() instanceof RuleBasedDialog)) return false;
023                if (dialog.getInteractionTarget().getMarket() == null) return false;
024                
025                List<PersonAPI> people = dialog.getInteractionTarget().getMarket().getPeopleCopy();
026                WeightedRandomPicker<PersonAPI> picker = new WeightedRandomPicker<PersonAPI>();
027                for (PersonAPI person : people) { 
028                        if (person.wantsToContactPlayer()) {
029                                picker.add(person, person.getContactWeight());
030                        }
031                }
032                
033                if (picker.isEmpty()) return false;
034                
035                PersonAPI pick = picker.pick();
036                dialog.getInteractionTarget().setActivePerson(pick);
037                ((RuleBasedDialog) dialog.getPlugin()).notifyActivePersonChanged();
038                
039                return true;
040        }
041
042}
043
044
045