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.RepLevel;
009import com.fs.starfarer.api.campaign.ReputationActionResponsePlugin.ReputationAdjustmentResult;
010import com.fs.starfarer.api.campaign.SectorEntityToken;
011import com.fs.starfarer.api.campaign.rules.MemoryAPI;
012import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.CustomRepImpact;
013import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActionEnvelope;
014import com.fs.starfarer.api.impl.campaign.CoreReputationPlugin.RepActions;
015import com.fs.starfarer.api.util.Misc.Token;
016
017/**
018 * AdjustRepActivePerson <RepActions action>
019 */
020public class AdjustRepActivePerson extends BaseCommandPlugin {
021        
022        public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
023                //String factionId = params.get(0).getString(memoryMap);
024                SectorEntityToken entity = dialog.getInteractionTarget();
025                if (entity.getActivePerson() == null) return false;
026                
027                try {
028                        RepActions action = RepActions.valueOf(params.get(0).getString(memoryMap));
029                        RepActionEnvelope envelope = new RepActionEnvelope(action, null, dialog.getTextPanel());
030                        ReputationAdjustmentResult result = Global.getSector().adjustPlayerReputation(envelope, entity.getActivePerson());
031                        return result.delta != 0;
032                } catch (Throwable t) {
033                        CustomRepImpact impact = new CustomRepImpact();
034                        if (params.size() >= 2) {
035                                impact.limit = RepLevel.valueOf(params.get(0).getString(memoryMap));
036                                impact.delta = params.get(1).getFloat(memoryMap) * 0.01f;
037                        } else {
038                                impact.delta = params.get(0).getFloat(memoryMap) * 0.01f;
039                        }
040                        ReputationAdjustmentResult result = Global.getSector().adjustPlayerReputation(
041                                        new RepActionEnvelope(RepActions.CUSTOM, impact,
042                                                                                  null, dialog.getTextPanel(), true), entity.getActivePerson());
043                        return result.delta != 0;
044                }
045        }
046}