Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2021
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.88 KB | None | 0 0
  1. import java.util.*;
  2. import java.io.*;
  3.  
  4. public class Read_OpenXCOM_Experience {
  5.    
  6.     private static final String fileName = "D:\\Games\\Open X-COM 2021 FMP 2.8e\\user\\xcom1\\TACTICAL-0.sav";
  7.     private static FileReader fileReader;
  8.     private static BufferedReader bufferedReader;
  9.     private static ArrayList <SoldierClass> soldiers, soldiersOnMission;
  10.    
  11.     public static void main (String [] args) throws IOException {
  12.         int id, counter;
  13.         boolean flag;
  14.         String line, baseName;
  15.         SoldierClass soldier;
  16.        
  17.         fileReader = new FileReader (fileName);
  18.         bufferedReader = new BufferedReader (fileReader);
  19.        
  20.         line = bufferedReader .readLine ();
  21.         System .out .print ("Internal name: ");
  22.         System .out .println (line .substring (6));
  23.         System .out .println ();
  24.         System .out .println ("Bases:");
  25.        
  26.         flag = waitForKeyWord ("bases:");
  27.        
  28.         baseName = "";
  29.         soldiers = new ArrayList <> ();
  30.         soldiersOnMission = new ArrayList <> ();
  31.        
  32.         while (flag) {
  33.             line = bufferedReader .readLine ();
  34.             if (line == null) {
  35.                 System .out .println ("Unexpected end of file.");
  36.                 flag = false;
  37.                 break;
  38.             }
  39.             if (line .equals ("alienMissions:")) {
  40.                 System .out .println ();
  41.                 System .out .println ("All bases has been scanned.");
  42.                 //System .out .println (soldiers .size () + " soldier(s) found:");
  43.                 //soldiers .forEach (p -> {p .display ();});
  44.                 //System .out .println ("End of list.");
  45.                 //System .out .println ();
  46.                 break;
  47.             }
  48.             if (line .startsWith ("    name: ")) {
  49.                 baseName = line .substring (10);
  50.                 System .out .println (baseName);
  51.             }
  52.             if (line .equals ("      - type: STR_SOLDIER")) {
  53.                 soldier = readSoldierIdName ();
  54.                 soldier .base = baseName;
  55.                 soldiers .add (soldier);
  56.                 //soldier .display ();
  57.             }
  58.         }
  59.        
  60.         if (flag) {
  61.             flag = waitForKeyWord ("battleGame:");
  62.         }
  63.        
  64.         if (flag) {
  65.             flag = waitForKeyWord ("  units:");
  66.         }
  67.        
  68.         soldier = null;
  69.         counter = 0;
  70.        
  71.         while (flag) {
  72.            
  73.             line = bufferedReader .readLine ();
  74.             if (line == null) {
  75.                 System .out .println ("Unexpected end of file.");
  76.                 flag = false;
  77.                 break;
  78.             }
  79.             if (line .equals ("  items:")) {
  80.                 break;
  81.             }
  82.            
  83.             if (line .startsWith ("    - id: ")) {
  84.                 id = Integer .parseUnsignedInt (line .substring (10));
  85.                 if (1000000 <= id) {
  86.                     break;
  87.                 }
  88.                 soldier = findSoldierById (id);
  89.                 if (null == soldier) {
  90.                     System .out .println ("Unidentified soldier found.");
  91.                     flag = false;
  92.                     break;
  93.                 }
  94.                 soldiersOnMission .add (soldier);
  95.                 counter = 0;
  96.             }
  97.            
  98.             if (line .startsWith ("      expBravery: ")) {
  99.                 soldier .expBravery = Integer .parseUnsignedInt (line .substring (18));
  100.                 ++counter;
  101.             }
  102.            
  103.             if (line .startsWith ("      expReactions: ")) {
  104.                 soldier .expReactions = Integer .parseUnsignedInt (line .substring (20));
  105.                 ++counter;
  106.             }
  107.            
  108.             if (line .startsWith ("      expFiring: ")) {
  109.                 soldier .expFiring = Integer .parseUnsignedInt (line .substring (17));
  110.                 ++counter;
  111.             }
  112.            
  113.             if (line .startsWith ("      expThrowing: ")) {
  114.                 soldier .expThrowing = Integer .parseUnsignedInt (line .substring (19));
  115.                 ++counter;
  116.             }
  117.            
  118.             if (line .startsWith ("      expPsiSkill: ")) {
  119.                 soldier .expPsiSkill = Integer .parseUnsignedInt (line .substring (19));
  120.                 ++counter;
  121.             }
  122.            
  123.             if (line .startsWith ("      expPsiStrength: ")) {
  124.                 soldier .expPsiStrength = Integer .parseUnsignedInt (line .substring (22));
  125.                 ++counter;
  126.             }
  127.            
  128.             if (line .startsWith ("      expMelee: ")) {
  129.                 soldier .expMelee = Integer .parseUnsignedInt (line .substring (16));
  130.                 ++counter;
  131.             }
  132.            
  133.             if (7 == counter) {
  134.                 soldier .flag = true;
  135.             }
  136.         }
  137.        
  138.         if (flag) {
  139.             System .out .println ();
  140.             System .out .println (soldiersOnMission .size () + " soldier(s) on mission found:");
  141.             System .out .println ("    ID   Name                         BRV REA FIR THR PSK PST MLE   Base");
  142.             soldiersOnMission .forEach (p -> {p .display ();});
  143.             System .out .println ("End of list.");
  144.             System .out .println ();
  145.         }
  146.        
  147.         bufferedReader .close ();
  148.         fileReader .close ();
  149.     }
  150.    
  151.     private static boolean waitForKeyWord (String keyWord) throws IOException {
  152.         String line;
  153.         while (true) {
  154.             line = bufferedReader .readLine ();
  155.             if (line == null) {
  156.                 System .out .println ("Key word not found.");
  157.                 return false;
  158.             }
  159.             if (line .equals (keyWord)) {
  160.                 return true;
  161.             }
  162.         }
  163.     }
  164.    
  165.     private static SoldierClass readSoldierIdName () throws IOException {
  166.         int id;
  167.         String line, name;
  168.        
  169.         line = bufferedReader .readLine ();
  170.         if (!line .startsWith ("        id: ")) {
  171.             System .out .println ("Unexpected identifier.");
  172.             return null;
  173.         }
  174.        
  175.         id = Integer .parseUnsignedInt (line .substring (12));
  176.        
  177.         line = bufferedReader .readLine ();
  178.         if (!line .startsWith ("        name: ")) {
  179.             System .out .println ("Unexpected identifier.");
  180.             return null;
  181.         }
  182.        
  183.         name = line .substring (14);
  184.        
  185.         return new SoldierClass (id, name);
  186.     }
  187.    
  188.     private static SoldierClass findSoldierById (int id) {
  189.         SoldierClass soldier;
  190.         Iterator <SoldierClass> iterator = soldiers .iterator ();
  191.         while (iterator .hasNext ()) {
  192.             soldier = iterator .next ();
  193.             if (id == soldier .id) {
  194.                 return soldier;
  195.             }
  196.         }
  197.         return null;
  198.     }
  199.    
  200.     private static class SoldierClass implements Comparable <SoldierClass> {
  201.        
  202.         boolean flag;
  203.         int expBravery;
  204.         int expReactions;
  205.         int expFiring;
  206.         int expThrowing;
  207.         int expPsiSkill;
  208.         int expPsiStrength;
  209.         int expMelee;
  210.         int id;
  211.         String base, name;
  212.        
  213.         public SoldierClass (int id, String name) {
  214.             flag = false;
  215.             this .id   = id;
  216.             this .name = name;
  217.         }
  218.        
  219.         public void display () {
  220.             if (flag) {
  221.                 System .out .println (String .format ("%6d   %-28s %3d %3d %3d %3d %3d %3d %3d   %s",
  222.                         id, name, expBravery, expReactions, expFiring, expThrowing, expPsiSkill, expPsiStrength, expMelee, base));
  223.             } else {
  224.                 System .out .println (String .format ("%6d   %-28s %s", id, name, base));
  225.             }
  226.         }
  227.  
  228.         @Override
  229.         public int compareTo (SoldierClass arg) {
  230.             return id - arg .id;
  231.         }
  232.     }
  233. }
  234.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement