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.rules.MemoryAPI;
011import com.fs.starfarer.api.characters.PersonAPI;
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;
016import com.fs.starfarer.api.util.Misc.VarAndMemory;
017
018/**
019 * AdjustRepActivePerson <RepActions action>
020 */
021public class AdjustRepPerson extends BaseCommandPlugin {
022        
023        public boolean execute(String ruleId, InteractionDialogAPI dialog, List<Token> params, Map<String, MemoryAPI> memoryMap) {
024                
025                VarAndMemory var = params.get(0).getVarNameAndMemory(memoryMap);
026                PersonAPI person = null;
027                
028                if (var.memory.get(var.name) instanceof PersonAPI) {
029                        person = (PersonAPI) var.memory.get(var.name);
030                } else {
031                        String id = params.get(0).getString(memoryMap);
032                        person = Global.getSector().getImportantPeople().getPerson(id);
033                }
034                
035//              PersonAPI person = (PersonAPI) var.memory.get(var.name);
036//              
037//              if (person == null) {
038//                      // well, let's try this another way, then. This is probably sloppy, eh? -dgb
039//                      String id = params.get(0).getString(memoryMap);
040//                      person = Global.getSector().getImportantPeople().getPerson(id);
041//              }
042                
043                try {
044                        RepActions action = RepActions.valueOf(params.get(1).getString(memoryMap));
045                        RepActionEnvelope envelope = new RepActionEnvelope(action, null, dialog.getTextPanel());
046                        ReputationAdjustmentResult result = Global.getSector().adjustPlayerReputation(envelope, person);
047                        return result.delta != 0;
048                } catch (Throwable t) {
049                        CustomRepImpact impact = new CustomRepImpact();
050                        impact.limit = RepLevel.valueOf(params.get(1).getString(memoryMap));
051                        impact.delta = params.get(2).getFloat(memoryMap) * 0.01f;
052                        ReputationAdjustmentResult result = Global.getSector().adjustPlayerReputation(
053                                        new RepActionEnvelope(RepActions.CUSTOM, impact,
054                                                                                  null, dialog.getTextPanel(), true), person);
055                        return result.delta != 0;
056                }
057        }
058}