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