001package com.fs.starfarer.api.impl.campaign.rulecmd.academy; 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.ImportantPeopleAPI.PersonDataAPI; 010import com.fs.starfarer.api.characters.PersonAPI; 011import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.CustomRepImpact; 012import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActionEnvelope; 013import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActions; 014import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepRewards; 015import com.fs.starfarer.api.impl.campaign.ids.Ranks; 016import com.fs.starfarer.api.impl.campaign.rulecmd.BaseCommandPlugin; 017import com.fs.starfarer.api.util.Misc; 018import com.fs.starfarer.api.util.Misc.Token; 019import com.fs.starfarer.api.util.WeightedRandomPicker; 020 021/** 022 * Does not start an actual conversation, but does set them as the active person (so $heOrShe etc tokens work) 023 */ 024public class GAReduceRandomRep extends BaseCommandPlugin { 025 026 public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) { 027 if (dialog == null) return false; 028 029 WeightedRandomPicker<PersonAPI> picker = new WeightedRandomPicker<PersonAPI>(); 030 for (PersonDataAPI pd : Global.getSector().getImportantPeople().getPeopleCopy()) { 031 PersonAPI person = pd.getPerson(); 032 if (Ranks.POST_ADMINISTRATOR.equals(person.getPostId()) || 033 Ranks.POST_BASE_COMMANDER.equals(person.getPostId()) || 034 Ranks.POST_BASE_COMMANDER.equals(person.getPostId()) || 035 Ranks.POST_STATION_COMMANDER.equals(person.getPostId())) { 036 picker.add(person); 037 } 038 } 039 040 int num = Misc.random.nextInt(2) + 1; 041 for (int i = 0; i < num && !picker.isEmpty(); i++) { 042 PersonAPI person = picker.pick(); 043 CustomRepImpact custom = new CustomRepImpact(); 044 custom.delta = -RepRewards.TINY; 045 Global.getSector().adjustPlayerReputation( 046 new RepActionEnvelope(RepActions.CUSTOM, custom, 047 null, dialog.getTextPanel(), true, true), 048 person); 049 } 050 051 return true; 052 } 053} 054 055 056 057 058 059 060 061 062 063