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.CampaignFleetAPI; 008import com.fs.starfarer.api.campaign.InteractionDialogAPI; 009import com.fs.starfarer.api.campaign.ai.ModularFleetAIAPI; 010import com.fs.starfarer.api.campaign.rules.MemoryAPI; 011import com.fs.starfarer.api.impl.campaign.ids.MemFlags; 012import com.fs.starfarer.api.util.Misc; 013import com.fs.starfarer.api.util.Misc.Token; 014 015/** 016 * @author Alex Mosolov 017 * 018 * MakeOtherFleetNonHostile <reason> <true or false> <expire> 019 * 020 * Copyright 2015 Fractal Softworks, LLC 021 */ 022public class MakeOtherFleetNonHostile 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 if (!(dialog.getInteractionTarget() instanceof CampaignFleetAPI)) return false; 028 029 String reason = "generic"; 030 boolean value; 031 boolean generic = false; 032 float expire = -1f; 033 if (params.size() >= 2) { 034 reason = params.get(0).getString(memoryMap); 035 value = params.get(1).getBoolean(memoryMap); 036 if (params.size() >= 3) { 037 expire = params.get(2).getFloat(memoryMap); 038 } 039 } else if (params.size() < 1) { 040 value = true; 041 } else { 042 generic = true; 043 value = params.get(0).getBoolean(memoryMap); 044 } 045 046 boolean wasHostile = false; 047 if (dialog.getInteractionTarget() instanceof CampaignFleetAPI) { 048 CampaignFleetAPI fleet = (CampaignFleetAPI) dialog.getInteractionTarget(); 049 wasHostile = fleet.isHostileTo(Global.getSector().getPlayerFleet()); 050 } 051 052 053 MemoryAPI memory = dialog.getInteractionTarget().getMemoryWithoutUpdate(); 054 055 if (value) { 056 if (generic) { 057 Misc.clearFlag(memory, MemFlags.MEMORY_KEY_MAKE_HOSTILE); 058 Misc.clearFlag(memory, MemFlags.MEMORY_KEY_MAKE_HOSTILE_WHILE_TOFF); 059 memory.unset(MemFlags.MEMORY_KEY_MAKE_HOSTILE); 060 memory.unset(MemFlags.MEMORY_KEY_MAKE_HOSTILE_WHILE_TOFF); 061 } else { 062 Misc.setFlagWithReason(memory, MemFlags.MEMORY_KEY_MAKE_HOSTILE, reason, false, expire); 063 Misc.setFlagWithReason(memory, MemFlags.MEMORY_KEY_MAKE_HOSTILE_WHILE_TOFF, reason, false, expire); 064 } 065 } 066 067 boolean stillSet = Misc.setFlagWithReason(memory, MemFlags.MEMORY_KEY_MAKE_NON_HOSTILE, reason, value, expire); 068 069 if (stillSet) { 070 CampaignFleetAPI fleet = (CampaignFleetAPI) dialog.getInteractionTarget(); 071 if (fleet.getAI() instanceof ModularFleetAIAPI) { 072 ModularFleetAIAPI mAI = (ModularFleetAIAPI) fleet.getAI(); 073 mAI.getTacticalModule().forceTargetReEval(); 074 } 075 } 076 077 boolean isHostile = false; 078 if (dialog.getInteractionTarget() instanceof CampaignFleetAPI) { 079 CampaignFleetAPI fleet = (CampaignFleetAPI) dialog.getInteractionTarget(); 080 isHostile = fleet.isHostileTo(Global.getSector().getPlayerFleet()); 081 } 082 083 if (isHostile != wasHostile) { 084 Global.getSoundPlayer().restartCurrentMusic(); 085 } 086 087 return true; 088 } 089 090} 091 092 093 094 095