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