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 * MakeOtherFleetHostile <reason> <true or false> <durDays> 019 * 020 * Copyright 2015 Fractal Softworks, LLC 021 */ 022public class MakeOtherFleetHostile 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 float expire = 0f; 032 if (params.size() >= 2) { 033 reason = params.get(0).getString(memoryMap); 034 value = params.get(1).getBoolean(memoryMap); 035 if (params.size() >= 3) { 036 expire = params.get(2).getFloat(memoryMap); 037 } 038 } else if (params.size() < 1) { 039 value = true; 040 } else { 041 value = params.get(0).getBoolean(memoryMap); 042 } 043 044 MemoryAPI memory = dialog.getInteractionTarget().getMemoryWithoutUpdate(); 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 boolean stillSet = Misc.setFlagWithReason(memory, MemFlags.MEMORY_KEY_MAKE_HOSTILE, reason, value, expire); 053 054 if (!stillSet) { 055 CampaignFleetAPI fleet = (CampaignFleetAPI) dialog.getInteractionTarget(); 056 if (fleet.getAI() instanceof ModularFleetAIAPI) { 057 ModularFleetAIAPI mAI = (ModularFleetAIAPI) fleet.getAI(); 058 mAI.getTacticalModule().forceTargetReEval(); 059 } 060 } 061 062 boolean isHostile = false; 063 if (dialog.getInteractionTarget() instanceof CampaignFleetAPI) { 064 CampaignFleetAPI fleet = (CampaignFleetAPI) dialog.getInteractionTarget(); 065 isHostile = fleet.isHostileTo(Global.getSector().getPlayerFleet()); 066 } 067 068 if (isHostile != wasHostile) { 069 Global.getSoundPlayer().restartCurrentMusic(); 070 } 071 072 return true; 073 } 074 075} 076 077 078 079 080