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