001package com.fs.starfarer.api.impl.combat.dweller; 002 003import com.fs.starfarer.api.campaign.CampaignFleetAPI; 004import com.fs.starfarer.api.campaign.CargoAPI; 005import com.fs.starfarer.api.campaign.InteractionDialogAPI; 006import com.fs.starfarer.api.combat.BattleCreationContext; 007import com.fs.starfarer.api.impl.campaign.FleetEncounterContext; 008import com.fs.starfarer.api.impl.campaign.FleetInteractionDialogPluginImpl.BaseFIDDelegate; 009import com.fs.starfarer.api.impl.campaign.FleetInteractionDialogPluginImpl.FIDConfig; 010import com.fs.starfarer.api.impl.campaign.FleetInteractionDialogPluginImpl.FIDConfigGen; 011 012/** 013 * Not actually used - see DwellerCMD; that's used instead. 014 * 015 * @author Alex 016 * 017 */ 018public class DwellerFIDConfig implements FIDConfigGen { 019 public FIDConfig createConfig() { 020 FIDConfig config = new FIDConfig(); 021 022 config.alwaysAttackVsAttack = true; 023 //config.alwaysPursue = true; 024 config.alwaysHarry = true; 025 config.showTransponderStatus = false; 026 //config.showEngageText = false; 027 config.lootCredits = false; 028 029 030 config.delegate = new BaseFIDDelegate() { 031 public void postPlayerSalvageGeneration(InteractionDialogAPI dialog, FleetEncounterContext context, CargoAPI salvage) { 032 if (!(dialog.getInteractionTarget() instanceof CampaignFleetAPI)) return; 033 034// float mult = context.computePlayerContribFraction(); 035// float p = Global.getSettings().getFloat("salvageHullmodProb"); 036// float pItem = Global.getSettings().getFloat("salvageHullmodRequiredItemProb"); 037// 038// CampaignFleetAPI fleet = (CampaignFleetAPI) dialog.getInteractionTarget(); 039// 040// DataForEncounterSide data = context.getDataFor(fleet); 041// List<FleetMemberAPI> losses = new ArrayList<FleetMemberAPI>(); 042// for (FleetMemberData fmd : data.getOwnCasualties()) { 043// losses.add(fmd.getMember()); 044// } 045// 046// Random random = Misc.getRandom(Misc.getSalvageSeed(fleet), 7); 047// //random = new Random(); 048// 049// for (FleetMemberAPI member : losses) { 050// if (member.getHullSpec().hasTag(Tags.THREAT_FABRICATOR)) { 051// int rolls = 0; 052// switch (member.getHullSpec().getHullSize()) { 053// case CAPITAL_SHIP: rolls = 30; break; 054// case CRUISER: rolls = 18; break; 055// case DESTROYER: rolls = 12; break; 056// case FRIGATE: rolls = 6; break; 057// } 058// 059// WeightedRandomPicker<SwarmConstructableVariant> picker = new WeightedRandomPicker<>(random); 060// for (SwarmConstructableVariant curr : ConstructionSwarmSystemScript.CONSTRUCTABLE) { 061// picker.add(curr, curr.dp); 062// } 063// 064// for (int i = 0; i < rolls; i++) { 065// SwarmConstructableVariant pick = picker.pick(); 066// ShipVariantAPI variant = Global.getSettings().getVariant(pick.variantId); 067// 068// for (String id : variant.getHullMods()) { 069// if (!variant.getHullSpec().isBuiltInMod(id)) { 070// if (random.nextFloat() < pItem && random.nextFloat() < mult) { 071// HullModSpecAPI spec = Global.getSettings().getHullModSpec(id); 072// CargoStackAPI item = spec.getEffect().getRequiredItem(); 073// if (item != null) { 074// boolean addToLoot = true; 075// if (item.getSpecialItemSpecIfSpecial() != null && item.getSpecialItemSpecIfSpecial().hasTag(Tags.NO_DROP)) { 076// addToLoot = false; 077// } else if (item.getResourceIfResource() != null && item.getResourceIfResource().hasTag(Tags.NO_DROP)) { 078// addToLoot = false; 079// } else if (item.getFighterWingSpecIfWing() != null && item.getFighterWingSpecIfWing().hasTag(Tags.NO_DROP)) { 080// addToLoot = false; 081// } else if (item.getWeaponSpecIfWeapon() != null && item.getWeaponSpecIfWeapon().hasTag(Tags.NO_DROP)) { 082// addToLoot = false; 083// } 084// if (addToLoot) { 085// salvage.addItems(item.getType(), item.getData(), 1); 086// } 087// } 088// } 089// } 090// 091// //if (random.nextFloat() > mult) continue; 092// if (random.nextFloat() < p && random.nextFloat() < mult) { 093// HullModSpecAPI spec = Global.getSettings().getHullModSpec(id); 094// boolean known = Global.getSector().getPlayerFaction().knowsHullMod(id); 095// if (DebugFlags.ALLOW_KNOWN_HULLMOD_DROPS) known = false; 096// if (known || spec.isHidden() || spec.isHiddenEverywhere()) continue; 097// //if (spec.isAlwaysUnlocked()) continue; 098// if (spec.hasTag(Tags.HULLMOD_NO_DROP)) continue; 099// 100// salvage.addHullmods(id, 1); 101// } 102// } 103// } 104// } 105// } 106 } 107 108 public void battleContextCreated(InteractionDialogAPI dialog, BattleCreationContext bcc) { 109 bcc.aiRetreatAllowed = false; 110 bcc.fightToTheLast = true; 111 bcc.objectivesAllowed = false; 112 bcc.enemyDeployAll = true; 113 } 114 }; 115 return config; 116 } 117} 118 119 120 121 122