Advertisement
LJLim

Module cleanup script

Jul 27th, 2019
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.70 KB | None | 0 0
  1. package data.scripts.everyframe;
  2.  
  3. import com.fs.starfarer.api.Global;
  4. import com.fs.starfarer.api.combat.BaseEveryFrameCombatPlugin;
  5. import com.fs.starfarer.api.combat.CombatEngineAPI;
  6. import com.fs.starfarer.api.input.InputEventAPI;
  7. import com.fs.starfarer.api.mission.FleetSide;
  8. import com.fs.starfarer.api.util.IntervalUtil;
  9. import com.fs.starfarer.combat.CombatEngine;
  10. import com.fs.starfarer.combat.CombatFleetManager;
  11. import com.fs.starfarer.combat.CombatFleetManager.O0;
  12. import java.util.List;
  13. import java.util.Set;
  14. import org.lazywizard.console.Console;
  15.  
  16. // Works around battle not ending if ship with modules retreats
  17. public class SWP_ModuleRetreatCleaner extends BaseEveryFrameCombatPlugin  {
  18.    
  19.     public static final String CUSTOM_DATA_KEY = "shared_module_retreat_cleaner_plugin";
  20.    
  21.     protected IntervalUtil interval = new IntervalUtil(0.5f, 0.5f);
  22.     protected CombatEngineAPI engine;
  23.     protected boolean running = true;   // turn off if another such plugin is running
  24.    
  25.     @Override
  26.     public void advance(float amount, List<InputEventAPI> events) {
  27.         if (!running) return;
  28.         interval.advance(amount);
  29.         if (interval.intervalElapsed()) {
  30.             validateDeployedShips(FleetSide.PLAYER);
  31.             validateDeployedShips(FleetSide.ENEMY);
  32.         }
  33.     }
  34.    
  35.     @Override
  36.     public void init(CombatEngineAPI engine) {
  37.         this.engine = engine;
  38.         if (engine.getCustomData().containsKey(CUSTOM_DATA_KEY)) {
  39.             Global.getLogger(this.getClass()).info("Another module retreat cleaner already running, suspending plugin");
  40.             running = false;
  41.         }
  42.         else {
  43.             engine.getCustomData().put(CUSTOM_DATA_KEY, this);
  44.         }
  45.     }
  46.    
  47.     public void validateDeployedShips(FleetSide side) {
  48.         if (engine == null) return;
  49.        
  50.         CombatFleetManager man = (CombatFleetManager)engine.getFleetManager(side);
  51.         boolean anyNonModule = false;
  52.        
  53.         if (man.getDeployed().isEmpty())
  54.             return;
  55.        
  56.         for (O0 deployed : man.getDeployed()) {
  57.             if (!deployed.isStationModule()) {
  58.                 anyNonModule = true;
  59.                 break;
  60.             }
  61.         }
  62.         if (!anyNonModule) {
  63.             Global.getLogger(this.getClass()).info("Clearing orphaned modules from "
  64.                     + "deployed list for side " + side.toString() + ": " + man.getDeployed().size());
  65.             man.getDeployed().clear();
  66.         }
  67.     }
  68.    
  69.     /* Debugging methods */
  70.    
  71.     // runcode data.scripts.everyframe.SWP_ModuleRetreatCleaner.queryBattleState()
  72.     public static void queryBattleState() {
  73.         CombatEngine engine = (CombatEngine)Global.getCombatEngine();
  74.        
  75.         Console.showMessage("Player fleet deployed ships:");
  76.         CombatFleetManager man = engine.getPlayerFleetManager();
  77.         printShips(man.getDeployed());
  78.         Console.showMessage("Enemy fleet deployed ships:");
  79.         man = engine.getEnemyFleetManager();
  80.         printShips(man.getDeployed());
  81.     }
  82.    
  83.     public static void printShips(Set<O0> ships) {
  84.         for (O0 ship : ships) {
  85.             String name = ship.getMember().getShipName();
  86.             String name2 = ship.getShip().getName();
  87.             String hullId = ship.getMember().getHullId();
  88.            
  89.             Console.showMessage("  Ship " + name + " (hull " + hullId + "): " + ship.isStationModule());
  90.         }
  91.     }
  92.    
  93.     // runcode data.scripts.everyframe.SWP_ModuleRetreatCleaner.purge()
  94.     public static void purge() {
  95.         CombatEngine engine = (CombatEngine)Global.getCombatEngine();
  96.        
  97.         //engine.getPlayerFleetManager().getDeployed().clear();
  98.         engine.getEnemyFleetManager().getDeployed().clear();
  99.     }
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement