I am trying to make a hullmod that reduces a specific fighter OP cost by a big percentage. Normally the OP cost is absurdly large at 100 OP.
Also any fighter that doesn't have a specific prefix (used by all fighters in this faction) will have its OP cost increased by 10.
Currently for some reason not only is the specific fighter OP cost not decreased, all fighters are increased by 10 (so its sorta working....
)
What dumb did I do?
Spoiler
package data.hullmods;
import com.fs.starfarer.api.combat.BaseHullMod;
import com.fs.starfarer.api.combat.MutableShipStatsAPI;
import com.fs.starfarer.api.combat.ShipAPI;
import com.fs.starfarer.api.combat.ShipAPI.HullSize;
import com.fs.starfarer.api.combat.WeaponAPI;
import com.fs.starfarer.api.combat.WeaponAPI.WeaponSize;
import com.fs.starfarer.api.combat.WeaponAPI.WeaponType;
import com.fs.starfarer.api.combat.listeners.FighterOPCostModifier;
import com.fs.starfarer.api.combat.listeners.WeaponOPCostModifier;
import com.fs.starfarer.api.impl.campaign.ids.Stats;
import com.fs.starfarer.api.loading.FighterWingSpecAPI;
import com.fs.starfarer.api.loading.WeaponSpecAPI;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
public class battlefleets_ork_massive_hangar extends BaseHullMod
{
public static float COST_MODIFIER = 0.2f;
@Override
public void applyEffectsBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id)
{
@Override
stats.addListener(new FighterOPCostModifier()
{
public int getFighterOPCost(MutableShipStatsAPI stats, FighterWingSpecAPI fighter, int currCost)
{
if (fighter.getId().contains("battlefleets_ork_megabommer"))
{
return (int) (currCost * COST_MODIFIER);
}
if (!fighter.getId().contains("battlefleets_ork_"))
{
return (currCost + (int) 10);
}
return currCost;
}
});
}
@Override
public boolean affectsOPCosts() {
return true;
}
public String getDescriptionParam(int index, HullSize hullSize)
{
//if (index == 0) return "" + (int) COST_MODIFIER + "%";
if (index == 0) return "" + (int) Math.round( (1f - COST_MODIFIER) * 100f) + "%";
if (index == 1) return "" + (int) 10;
return null;
}
}
Edit: Turns out my dumb was in the naming of the fighter wings
Is there a limitation with janino and if statements?
'cause:
if (!fighter.getId().contains("battlefleets_ork_"))
{
return (currCost + (int) 10);
}
works but:
if ( (!fighter.getId().contains("battlefleets_ork_1")) || (!fighter.getId().contains("battlefleets_ork_2")) )
{
return (currCost + (int) 10);
}
Causes a crash?