001package com.fs.starfarer.api.impl.campaign.missions.cb; 002 003import java.awt.Color; 004 005import com.fs.starfarer.api.campaign.CampaignFleetAPI; 006import com.fs.starfarer.api.campaign.StarSystemAPI; 007import com.fs.starfarer.api.campaign.econ.MarketAPI; 008import com.fs.starfarer.api.impl.campaign.ids.Factions; 009import com.fs.starfarer.api.impl.campaign.ids.FleetTypes; 010import com.fs.starfarer.api.impl.campaign.ids.Tags; 011import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithBarEvent; 012import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetQuality; 013import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.FleetSize; 014import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.OfficerNum; 015import com.fs.starfarer.api.impl.campaign.missions.hub.HubMissionWithTriggers.OfficerQuality; 016import com.fs.starfarer.api.impl.campaign.missions.hub.ReqMode; 017import com.fs.starfarer.api.ui.TooltipMakerAPI; 018import com.fs.starfarer.api.util.Misc; 019 020public class CBPatrol extends BaseCustomBountyCreator { 021 022 @Override 023 public float getFrequency(HubMissionWithBarEvent mission, int difficulty) { 024 return super.getFrequency(mission, difficulty) * CBStats.PATROL_FREQ; 025 } 026 027 public String getBountyNamePostfix(HubMissionWithBarEvent mission, CustomBountyData data) { 028 return " - Patrol"; 029 } 030 031 public void addTargetLocationAndDescriptionBulletPoint(TooltipMakerAPI info, 032 Color tc, float pad, HubMissionWithBarEvent mission, 033 CustomBountyData data) { 034 if (data.system != null) { 035 //info.addPara("Target is in the " + data.system.getNameWithLowercaseTypeShort() + "", tc, pad); 036 info.addPara("Target is a %s patrol located in the " + 037 data.system.getNameWithLowercaseType() + ".", pad, 038 tc, data.fleet.getFaction().getBaseUIColor(), data.fleet.getFaction().getPersonNamePrefix()); 039 } 040 } 041 042 public void addTargetLocationAndDescription(TooltipMakerAPI info, float width, float height, HubMissionWithBarEvent mission, CustomBountyData data) { 043 float opad = 10f; 044 float pad = 3f; 045 Color h = Misc.getHighlightColor(); 046 if (data.system != null && data.fleet != null && data.market != null) { 047 info.addPara("The target is a %s patrol and is located in the " + data.system.getNameWithLowercaseType() + ".", opad, 048 data.fleet.getFaction().getBaseUIColor(), data.fleet.getFaction().getPersonNamePrefix()); 049 info.addPara("It will most likely be found either in orbit around " + 050 data.market.getName() + ", or patrolling one of the system's objectives " 051 + "(such as a comm relay) or jump-points.", opad); 052 } 053 } 054 055 @Override 056 public CustomBountyData createBounty(MarketAPI createdAt, HubMissionWithBarEvent mission, int difficulty, Object bountyStage) { 057 CustomBountyData data = new CustomBountyData(); 058 data.difficulty = difficulty; 059 060 mission.requireMarketSizeAtLeast(4); 061 mission.requireMarketNotHidden(); 062 mission.requireMarketHasSpaceport(); 063 mission.requireMarketNotInHyperspace(); 064 mission.requireMarketFactionCustom(ReqMode.NOT_ANY, Factions.CUSTOM_DECENTRALIZED); 065 mission.requireMarketFactionNot(Factions.PIRATES); // redundant, given the above 066 mission.requireMarketFactionNotPlayer(); 067 mission.requireMarketLocationNot(createdAt.getContainingLocation()); 068 MarketAPI target = mission.pickMarket(); 069 070 if (target == null || target.getStarSystem() == null) return null; 071 072 073 StarSystemAPI system = target.getStarSystem(); 074 data.system = system; 075 data.market = target; 076 077 int num = 1; 078 if (difficulty > 6) num = 2; 079 if (difficulty > 8) num = 3; 080 float protectorDiff = difficulty - 3; 081 082 FleetSize size = FleetSize.MEDIUM; 083 FleetQuality quality = FleetQuality.DEFAULT; 084 String type = FleetTypes.PATROL_MEDIUM; 085 OfficerQuality oQuality = OfficerQuality.DEFAULT; 086 OfficerNum oNum = OfficerNum.DEFAULT; 087 088 for (int i = 0; i < num; i++) { 089 float diff = difficulty; 090 if (i > 0) diff = protectorDiff; 091 092 if (diff <= 2) { 093 size = FleetSize.TINY; 094 type = FleetTypes.PATROL_SMALL; 095 } else if (diff <= 3) { 096 size = FleetSize.VERY_SMALL; 097 type = FleetTypes.PATROL_SMALL; 098 } else if (diff <= 4) { 099 size = FleetSize.SMALL; 100 type = FleetTypes.PATROL_SMALL; 101 } else if (difficulty <= 5) { 102 size = FleetSize.MEDIUM; 103 type = FleetTypes.PATROL_MEDIUM; 104 } else { 105 size = FleetSize.LARGE; 106 type = FleetTypes.PATROL_LARGE; 107 } 108 109 beginFleet(mission, data); 110 mission.triggerCreateFleet(size, quality, target.getFactionId(), type, data.system); 111 mission.triggerSetFleetOfficers(oNum, oQuality); 112 mission.triggerAutoAdjustFleetSize(size, size.next()); 113 mission.triggerFleetAllowLongPursuit(); 114 mission.triggerFleetSetAllWeapons(); 115 116 mission.triggerSetPatrol(); 117 118 if (i == 0) { 119 mission.triggerSpawnFleetNear(target.getPrimaryEntity(), null, null); 120 mission.triggerFleetSetPatrolActionText("patrolling"); 121 mission.triggerOrderFleetPatrol(data.system, true, Tags.JUMP_POINT, Tags.OBJECTIVE); 122 mission.triggerOrderExtraPatrolPoints(target.getPrimaryEntity()); 123 } else { 124 mission.triggerSpawnFleetNear(data.fleet, null, null); 125 mission.triggerFleetSetPatrolActionText("guarding " + data.fleet.getName().toLowerCase()); 126 mission.triggerFleetSetPatrolLeashRange(100f); 127 mission.triggerOrderFleetPatrol(data.system, true, data.fleet); 128 } 129 130 CampaignFleetAPI fleet = createFleet(mission, data); 131 if (i == 0) { 132 data.fleet = fleet; 133 } 134 } 135 136 if (data.fleet == null) return null; 137 138 setRepChangesBasedOnDifficulty(data, difficulty); 139 data.baseReward = CBStats.getBaseBounty(difficulty, CBStats.PATROL_MULT, mission); 140 141 return data; 142 } 143 144 @Override 145 public void updateInteractionData(HubMissionWithBarEvent mission, CustomBountyData data) { 146 String id = mission.getMissionId(); 147 String faction = data.fleet.getFaction().getPersonNamePrefix(); 148 Color factionColor = data.fleet.getFaction().getBaseUIColor(); 149 mission.set("$" + id + "_patrolFaction", faction); 150 mission.set("$bcb_patrolFaction", faction); 151 mission.set("$" + id + "_patrolFactionColor", factionColor); 152 mission.set("$bcb_patrolFactionColor", factionColor); 153 } 154 155 156 @Override 157 public int getMaxDifficulty() { 158 return super.getMaxDifficulty(); 159 } 160 161 @Override 162 public int getMinDifficulty() { 163 return 0; 164 } 165 166} 167 168 169 170 171 172