├── LuaCommands.txt ├── README.md ├── aircraft.csv ├── bases.csv ├── cmddata.py ├── commandLua.py ├── forces.csv ├── forces_dbids.csv └── sides.csv /LuaCommands.txt: -------------------------------------------------------------------------------- 1 | ScenEdit_AddUnit({side='Blue', type='facility', name="AA Airbase 1", dbid=1996, latitude='23.500000', longitude='70.220000'}) 2 | ScenEdit_AddUnit({side='Blue', type='facility', name="AA Airbase 2", dbid=1714, latitude='29.140000', longitude='76.580000'}) 3 | ScenEdit_AddUnit({side='Blue', type='facility', name="AA Airbase 3", dbid=1714, latitude='24.600000', longitude='73.470000'}) 4 | ScenEdit_AddUnit({side='Blue', type='facility', name="AA Port 1", dbid=210, latitude='22.100000', longitude='69.160000'}) 5 | ScenEdit_AddUnit({side='Blue', type='facility', name="AA Army Base 1", dbid=2419, latitude='23.600000', longitude='71.110000'}) 6 | ScenEdit_AddUnit({side='Blue', type='facility', name="AA Army Base 2", dbid=2419, latitude='22.860000', longitude='72.000000'}) 7 | ScenEdit_AddUnit({side='Blue', type='facility', name="AA Army Base 3", dbid=2419, latitude='26.150000', longitude='73.000000'}) 8 | ScenEdit_AddUnit({side='Blue', type='facility', name="AA Army Base 4", dbid=2419, latitude='27.500000', longitude='74.300000'}) 9 | ScenEdit_AddUnit({side='Blue', type='facility', name="AA Army Base 5", dbid=2419, latitude='27.390000', longitude='75.770000'}) 10 | ScenEdit_AddUnit({side='Red', type='facility', name="XX Airbase 1", dbid=1996, latitude='26.550000', longitude='68.440000'}) 11 | ScenEdit_AddUnit({side='Red', type='facility', name="XX Airbase 2", dbid=1714, latitude='26.280000', longitude='67.710000'}) 12 | ScenEdit_AddUnit({side='Red', type='facility', name="XX Airbase 3", dbid=1714, latitude='28.000000', longitude='69.000000'}) 13 | ScenEdit_AddUnit({side='Red', type='facility', name="XX Port 1", dbid=210, latitude='24.870000', longitude='66.880000'}) 14 | ScenEdit_AddUnit({side='Red', type='facility', name="XX Army Base 1", dbid=2419, latitude='27.230000', longitude='69.100000'}) 15 | ScenEdit_AddUnit({side='Red', type='facility', name="XX Army Base 2", dbid=2419, latitude='24.030000', longitude='68.380000'}) 16 | ScenEdit_AddUnit({side='Blue', type='Ship', name="AA Carrier", dbid=681, latitude='19.120000', longitude='68.000000'}) 17 | ScenEdit_AddUnit({side='Blue', type='Ship', name="AA Frigate 1", dbid=2777, latitude='22.000000', longitude='65.000000'}) 18 | ScenEdit_AddUnit({side='Blue', type='Ship', name="AA Frigate 2", dbid=2777, latitude='22.050000', longitude='64.850000'}) 19 | ScenEdit_AddUnit({side='Blue', type='Ship', name="AA Frigate 3", dbid=2777, latitude='21.800000', longitude='68.100000'}) 20 | ScenEdit_AddUnit({side='Blue', type='Ship', name="AA Destroyer 1", dbid=2009, latitude='22.030000', longitude='64.930000'}) 21 | ScenEdit_AddUnit({side='Blue', type='Ship', name="AA Destroyer 2", dbid=2009, latitude='21.820000', longitude='68.130000'}) 22 | ScenEdit_AddUnit({side='Blue', type='Ship', name="AA Destroyer 3", dbid=2778, latitude='21.780000', longitude='68.010000'}) 23 | ScenEdit_AddUnit({side='Blue', type='Submarine', name="AA Submarine 1", dbid=166, latitude='24.000000', longitude='64.000000'}) 24 | ScenEdit_AddUnit({side='Blue', type='Submarine', name="AA Submarine 2", dbid=571, latitude='23.500000', longitude='63.200000'}) 25 | ScenEdit_AddUnit({side='Blue', type='Submarine', name="AA Submarine 3", dbid=108, latitude='23.100000', longitude='63.000000'}) 26 | ScenEdit_AddUnit({side='Blue', type='Ship', name="BB Frigate 1", dbid=1290, latitude='23.000000', longitude='65.000000'}) 27 | ScenEdit_AddUnit({side='Blue', type='Ship', name="BB Frigate 2", dbid=2267, latitude='23.000000', longitude='65.300000'}) 28 | ScenEdit_AddUnit({side='Blue', type='Ship', name="BB Frigate 3", dbid=323, latitude='24.000000', longitude='65.900000'}) 29 | ScenEdit_AddUnit({side='Red', type='Ship', name="XX Frigate 1", dbid=2105, latitude='23.000000', longitude='64.300000'}) 30 | ScenEdit_AddUnit({side='Red', type='Ship', name="XX Frigate 2", dbid=3088, latitude='23.000000', longitude='64.500000'}) 31 | ScenEdit_AddUnit({side='Red', type='Ship', name="XX Frigate 3", dbid=1256, latitude='24.000000', longitude='65.000000'}) 32 | ScenEdit_AddUnit({side='Red', type='Ship', name="XX Frigate 4", dbid=1256, latitude='23.400000', longitude='65.300000'}) 33 | ScenEdit_AddUnit({side='Red', type='Ship', name="XX Frigate 5", dbid=1256, latitude='24.600000', longitude='65.900000'}) 34 | ScenEdit_AddUnit({side='Red', type='Submarine', name="XX Submarine 1", dbid=646, latitude='22.000000', longitude='64.300000'}) 35 | ScenEdit_AddUnit({side='Red', type='Ship', name="YY Frigate 1", dbid=2695, latitude='23.000000', longitude='64.850000'}) 36 | ScenEdit_AddUnit({side='Red', type='Submarine', name="YY Submarine", dbid=643, latitude='22.000000', longitude='68.100000'}) 37 | ScenEdit_AddUnit({side='Red', type='Ship', name="YY Frigate 2", dbid=2689, latitude='24.000000', longitude='64.930000'}) 38 | ScenEdit_AddUnit({side='Neutral', type='Ship', name="Neutral Ship 1", dbid=2030, latitude='21.000000', longitude='68.130000'}) 39 | ScenEdit_AddUnit({side='Neutral', type='Ship', name="Neutral Ship 2", dbid=1154, latitude='20.000000', longitude='67.200000'}) 40 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 1 #1", dbid=920, loadoutid=3085, base="AA Carrier"}) 41 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 1 #2", dbid=920, loadoutid=3085, base="AA Carrier"}) 42 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 1 #3", dbid=920, loadoutid=3085, base="AA Carrier"}) 43 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 1 #4", dbid=920, loadoutid=3085, base="AA Carrier"}) 44 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 1 #5", dbid=920, loadoutid=3085, base="AA Carrier"}) 45 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 1 #6", dbid=920, loadoutid=3085, base="AA Carrier"}) 46 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 1 #7", dbid=920, loadoutid=3085, base="AA Carrier"}) 47 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 1 #8", dbid=920, loadoutid=3085, base="AA Carrier"}) 48 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 1 #9", dbid=920, loadoutid=3085, base="AA Carrier"}) 49 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 1 #10", dbid=920, loadoutid=3085, base="AA Carrier"}) 50 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 1 #11", dbid=920, loadoutid=3085, base="AA Carrier"}) 51 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 1 #12", dbid=920, loadoutid=3085, base="AA Carrier"}) 52 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 1 #13", dbid=920, loadoutid=3085, base="AA Carrier"}) 53 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 1 #14", dbid=920, loadoutid=3085, base="AA Carrier"}) 54 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 1 #15", dbid=920, loadoutid=3085, base="AA Carrier"}) 55 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 1 #16", dbid=920, loadoutid=3085, base="AA Carrier"}) 56 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 1 #17", dbid=920, loadoutid=3085, base="AA Carrier"}) 57 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 1 #18", dbid=920, loadoutid=3085, base="AA Carrier"}) 58 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 1 #19", dbid=920, loadoutid=3085, base="AA Carrier"}) 59 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 1 #20", dbid=920, loadoutid=3085, base="AA Carrier"}) 60 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 2 #1", dbid=608, loadoutid=8033, base="AA Carrier"}) 61 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 2 #2", dbid=608, loadoutid=8033, base="AA Carrier"}) 62 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 2 #3", dbid=608, loadoutid=8033, base="AA Carrier"}) 63 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 2 #4", dbid=608, loadoutid=8033, base="AA Carrier"}) 64 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 2 #5", dbid=608, loadoutid=8033, base="AA Carrier"}) 65 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 2 #6", dbid=608, loadoutid=8033, base="AA Carrier"}) 66 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 2 #7", dbid=608, loadoutid=8033, base="AA Carrier"}) 67 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 2 #8", dbid=608, loadoutid=8033, base="AA Carrier"}) 68 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 3 #1", dbid=248, loadoutid=15393, base="AA Carrier"}) 69 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 3 #2", dbid=248, loadoutid=15393, base="AA Carrier"}) 70 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 3 #3", dbid=248, loadoutid=15393, base="AA Carrier"}) 71 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 3 #4", dbid=248, loadoutid=15393, base="AA Carrier"}) 72 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 3 #5", dbid=248, loadoutid=15393, base="AA Carrier"}) 73 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Carrier Squadron 3 #6", dbid=248, loadoutid=15393, base="AA Carrier"}) 74 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 1 #1", dbid=856, loadoutid=5270, base="AA Airbase 1"}) 75 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 1 #2", dbid=856, loadoutid=5270, base="AA Airbase 1"}) 76 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 1 #3", dbid=856, loadoutid=5270, base="AA Airbase 1"}) 77 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 1 #4", dbid=856, loadoutid=5270, base="AA Airbase 1"}) 78 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 1 #5", dbid=856, loadoutid=5270, base="AA Airbase 1"}) 79 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 1 #6", dbid=856, loadoutid=5270, base="AA Airbase 1"}) 80 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 1 #7", dbid=856, loadoutid=5270, base="AA Airbase 1"}) 81 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 1 #8", dbid=856, loadoutid=5270, base="AA Airbase 1"}) 82 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 1 #9", dbid=856, loadoutid=5270, base="AA Airbase 1"}) 83 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 1 #10", dbid=856, loadoutid=5270, base="AA Airbase 1"}) 84 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 1 #11", dbid=856, loadoutid=5270, base="AA Airbase 1"}) 85 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 1 #12", dbid=856, loadoutid=5270, base="AA Airbase 1"}) 86 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 1 #13", dbid=856, loadoutid=5270, base="AA Airbase 1"}) 87 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 1 #14", dbid=856, loadoutid=5270, base="AA Airbase 1"}) 88 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 1 #15", dbid=856, loadoutid=5270, base="AA Airbase 1"}) 89 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 1 #16", dbid=856, loadoutid=5270, base="AA Airbase 1"}) 90 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 1 #17", dbid=856, loadoutid=5270, base="AA Airbase 1"}) 91 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 1 #18", dbid=856, loadoutid=5270, base="AA Airbase 1"}) 92 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 1 #19", dbid=856, loadoutid=5270, base="AA Airbase 1"}) 93 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 1 #20", dbid=856, loadoutid=5270, base="AA Airbase 1"}) 94 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 1 #21", dbid=856, loadoutid=5270, base="AA Airbase 1"}) 95 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 1 #22", dbid=856, loadoutid=5270, base="AA Airbase 1"}) 96 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 1 #23", dbid=856, loadoutid=5270, base="AA Airbase 1"}) 97 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 1 #24", dbid=856, loadoutid=5270, base="AA Airbase 1"}) 98 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 2 #1", dbid=3798, loadoutid=19107, base="AA Airbase 2"}) 99 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 2 #2", dbid=3798, loadoutid=19107, base="AA Airbase 2"}) 100 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 2 #3", dbid=3798, loadoutid=19107, base="AA Airbase 2"}) 101 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 2 #4", dbid=3798, loadoutid=19107, base="AA Airbase 2"}) 102 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 2 #5", dbid=3798, loadoutid=19107, base="AA Airbase 2"}) 103 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 2 #6", dbid=3798, loadoutid=19107, base="AA Airbase 2"}) 104 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 2 #7", dbid=3798, loadoutid=19107, base="AA Airbase 2"}) 105 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 2 #8", dbid=3798, loadoutid=19107, base="AA Airbase 2"}) 106 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 2 #9", dbid=3798, loadoutid=19107, base="AA Airbase 2"}) 107 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 2 #10", dbid=3798, loadoutid=19107, base="AA Airbase 2"}) 108 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 2 #11", dbid=3798, loadoutid=19107, base="AA Airbase 2"}) 109 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 2 #12", dbid=3798, loadoutid=19107, base="AA Airbase 2"}) 110 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 2 #13", dbid=3798, loadoutid=19107, base="AA Airbase 2"}) 111 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 2 #14", dbid=3798, loadoutid=19107, base="AA Airbase 2"}) 112 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 2 #15", dbid=3798, loadoutid=19107, base="AA Airbase 2"}) 113 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 2 #16", dbid=3798, loadoutid=19107, base="AA Airbase 2"}) 114 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 2 #17", dbid=3798, loadoutid=19107, base="AA Airbase 2"}) 115 | ScenEdit_AddUnit({side='Blue', type='aircraft', name="AA Fighter Squadron 2 #18", dbid=3798, loadoutid=19107, base="AA Airbase 2"}) 116 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 1 #1", dbid=2915, loadoutid=16866, base="XX Airbase 1"}) 117 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 1 #2", dbid=2915, loadoutid=16866, base="XX Airbase 1"}) 118 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 1 #3", dbid=2915, loadoutid=16866, base="XX Airbase 1"}) 119 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 1 #4", dbid=2915, loadoutid=16866, base="XX Airbase 1"}) 120 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 1 #5", dbid=2915, loadoutid=16866, base="XX Airbase 1"}) 121 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 1 #6", dbid=2915, loadoutid=16866, base="XX Airbase 1"}) 122 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 1 #7", dbid=2915, loadoutid=16866, base="XX Airbase 1"}) 123 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 1 #8", dbid=2915, loadoutid=16866, base="XX Airbase 1"}) 124 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 1 #9", dbid=2915, loadoutid=16866, base="XX Airbase 1"}) 125 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 1 #10", dbid=2915, loadoutid=16866, base="XX Airbase 1"}) 126 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 1 #11", dbid=2915, loadoutid=16866, base="XX Airbase 1"}) 127 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 1 #12", dbid=2915, loadoutid=16866, base="XX Airbase 1"}) 128 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 1 #13", dbid=2915, loadoutid=16866, base="XX Airbase 1"}) 129 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 1 #14", dbid=2915, loadoutid=16866, base="XX Airbase 1"}) 130 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 1 #15", dbid=2915, loadoutid=16866, base="XX Airbase 1"}) 131 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 1 #16", dbid=2915, loadoutid=16866, base="XX Airbase 1"}) 132 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 1 #17", dbid=2915, loadoutid=16866, base="XX Airbase 1"}) 133 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 1 #18", dbid=2915, loadoutid=16866, base="XX Airbase 1"}) 134 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 1 #19", dbid=2915, loadoutid=16866, base="XX Airbase 1"}) 135 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 1 #20", dbid=2915, loadoutid=16866, base="XX Airbase 1"}) 136 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 1 #21", dbid=2915, loadoutid=16866, base="XX Airbase 1"}) 137 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 1 #22", dbid=2915, loadoutid=16866, base="XX Airbase 1"}) 138 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 1 #23", dbid=2915, loadoutid=16866, base="XX Airbase 1"}) 139 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 1 #24", dbid=2915, loadoutid=16866, base="XX Airbase 1"}) 140 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 3 #1", dbid=2915, loadoutid=16866, base="XX Airbase 2"}) 141 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 3 #2", dbid=2915, loadoutid=16866, base="XX Airbase 2"}) 142 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 3 #3", dbid=2915, loadoutid=16866, base="XX Airbase 2"}) 143 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 3 #4", dbid=2915, loadoutid=16866, base="XX Airbase 2"}) 144 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 3 #5", dbid=2915, loadoutid=16866, base="XX Airbase 2"}) 145 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 3 #6", dbid=2915, loadoutid=16866, base="XX Airbase 2"}) 146 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 3 #7", dbid=2915, loadoutid=16866, base="XX Airbase 2"}) 147 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 3 #8", dbid=2915, loadoutid=16866, base="XX Airbase 2"}) 148 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 3 #9", dbid=2915, loadoutid=16866, base="XX Airbase 2"}) 149 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 3 #10", dbid=2915, loadoutid=16866, base="XX Airbase 2"}) 150 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 3 #11", dbid=2915, loadoutid=16866, base="XX Airbase 2"}) 151 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 3 #12", dbid=2915, loadoutid=16866, base="XX Airbase 2"}) 152 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 3 #13", dbid=2915, loadoutid=16866, base="XX Airbase 2"}) 153 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 3 #14", dbid=2915, loadoutid=16866, base="XX Airbase 2"}) 154 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 3 #15", dbid=2915, loadoutid=16866, base="XX Airbase 2"}) 155 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 3 #16", dbid=2915, loadoutid=16866, base="XX Airbase 2"}) 156 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 3 #17", dbid=2915, loadoutid=16866, base="XX Airbase 2"}) 157 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 3 #18", dbid=2915, loadoutid=16866, base="XX Airbase 2"}) 158 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 3 #19", dbid=2915, loadoutid=16866, base="XX Airbase 2"}) 159 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 3 #20", dbid=2915, loadoutid=16866, base="XX Airbase 2"}) 160 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 3 #21", dbid=2915, loadoutid=16866, base="XX Airbase 2"}) 161 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 3 #22", dbid=2915, loadoutid=16866, base="XX Airbase 2"}) 162 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 3 #23", dbid=2915, loadoutid=16866, base="XX Airbase 2"}) 163 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 3 #24", dbid=2915, loadoutid=16866, base="XX Airbase 2"}) 164 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 2 #1", dbid=3298, loadoutid=1348, base="XX Airbase 2"}) 165 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 2 #2", dbid=3298, loadoutid=1348, base="XX Airbase 2"}) 166 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 2 #3", dbid=3298, loadoutid=1348, base="XX Airbase 2"}) 167 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 2 #4", dbid=3298, loadoutid=1348, base="XX Airbase 2"}) 168 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 2 #5", dbid=3298, loadoutid=1348, base="XX Airbase 2"}) 169 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 2 #6", dbid=3298, loadoutid=1348, base="XX Airbase 2"}) 170 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 2 #7", dbid=3298, loadoutid=1348, base="XX Airbase 2"}) 171 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 2 #8", dbid=3298, loadoutid=1348, base="XX Airbase 2"}) 172 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 2 #9", dbid=3298, loadoutid=1348, base="XX Airbase 2"}) 173 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 2 #10", dbid=3298, loadoutid=1348, base="XX Airbase 2"}) 174 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 2 #11", dbid=3298, loadoutid=1348, base="XX Airbase 2"}) 175 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 2 #12", dbid=3298, loadoutid=1348, base="XX Airbase 2"}) 176 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 4 #1", dbid=3298, loadoutid=1348, base="XX Airbase 3"}) 177 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 4 #2", dbid=3298, loadoutid=1348, base="XX Airbase 3"}) 178 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 4 #3", dbid=3298, loadoutid=1348, base="XX Airbase 3"}) 179 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 4 #4", dbid=3298, loadoutid=1348, base="XX Airbase 3"}) 180 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 4 #5", dbid=3298, loadoutid=1348, base="XX Airbase 3"}) 181 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 4 #6", dbid=3298, loadoutid=1348, base="XX Airbase 3"}) 182 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 4 #7", dbid=3298, loadoutid=1348, base="XX Airbase 3"}) 183 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 4 #8", dbid=3298, loadoutid=1348, base="XX Airbase 3"}) 184 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 4 #9", dbid=3298, loadoutid=1348, base="XX Airbase 3"}) 185 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 4 #10", dbid=3298, loadoutid=1348, base="XX Airbase 3"}) 186 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 4 #11", dbid=3298, loadoutid=1348, base="XX Airbase 3"}) 187 | ScenEdit_AddUnit({side='Red', type='aircraft', name="XX Fighter Squadron 4 #12", dbid=3298, loadoutid=1348, base="XX Airbase 3"}) 188 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Command: Modern Air/Naval Operations (CMANO) Data Transformation Tool 2 | This Python tool allows scenario designers to use table-based data to create new scenarios. Normally, designers can build a scenario manually within the game or use Lua commands to build game entities and behavior. Often, a scenario designer already has a database containing units belonging to each combatant. That data can be exported in table format, but it needs additional information and formatting before it can be inserted into the game. 3 | 4 | The main class is CmdData, and the commandLua.py file shows a typical loading and transformation sequence. 5 | There are several required sample files that are included here. The format and existence of these files are required. 6 | 7 | To see further explanation, visit https://www.mbondpro.com/2018/11/python-and-lua-scripts-for-building.html 8 | 9 | To learn more about CMANO, see here: http://www.warfaresims.com/ 10 | To learn about Lua commands in CMANO, see here: https://commandlua.github.io/ 11 | 12 | -------------------------------------------------------------------------------- /aircraft.csv: -------------------------------------------------------------------------------- 1 | Squadron,Number,Equipment,CC,Service,Base 2 | AA Fighter Squadron 1,24,Mig-29 Fulcrum A,AA,AF,AA Airbase 1 3 | AA Fighter Squadron 2,18,Mirage 2000H-5,AA,AF,AA Airbase 2 4 | AA Fighter Squadron 3,12,Mirage 2000H-6,AA,AF,AA Airbase 1 5 | XX Fighter Squadron 1,24,F-16CJ Blk 52+,XX,AF,XX Airbase 1 6 | XX Fighter Squadron 2,12,JF-17 Thunder Blk 2,XX,AF,XX Airbase 2 7 | XX Fighter Squadron 3,24,F-16CJ Blk 52+,XX,AF,XX Airbase 2 8 | XX Fighter Squadron 4,12,JF-17 Thunder Blk 2,XX,AF,XX Airbase 3 9 | AA Carrier Squadron 1,20,Mig-29K,AA,Navy,AA Carrier 10 | AA Carrier Squadron 2,8,Ka-31,AA,Navy,AA Carrier 11 | AA Carrier Squadron 3,6,Sea King Mk42B,AA,Navy,AA Carrier 12 | -------------------------------------------------------------------------------- /bases.csv: -------------------------------------------------------------------------------- 1 | Lat,Lon,LocationSide,Location,dbid,db_name,qty 2 | 23.5,70.22,AA,AA Airbase 1,1996,Single-Unit Airfield (2x 4000m+ Runways),1 3 | 29.14,76.58,AA,AA Airbase 2,1714,Single-Unit Airfield (2x 2601-3200m Runways),1 4 | 24.6,73.47,AA,AA Airbase 3,1714,Single-Unit Airfield (2x 2601-3200m Runways),1 5 | 22.1,69.16,AA,AA Port 1,210,Structure (Naval Dock),1 6 | 23.6,71.11,AA,AA Army Base 1,2419,Structure (Military Base),1 7 | 22.86,72,AA,AA Army Base 2,2419,Structure (Military Base),1 8 | 26.15,73,AA,AA Army Base 3,2419,Structure (Military Base),1 9 | 27.5,74.3,AA,AA Army Base 4,2419,Structure (Military Base),1 10 | 27.39,75.77,AA,AA Army Base 5,2419,Structure (Military Base),1 11 | 26.55,68.44,XX,XX Airbase 1,1996,Single-Unit Airfield (2x 4000m+ Runways),1 12 | 26.28,67.71,XX,XX Airbase 2,1714,Single-Unit Airfield (2x 2601-3200m Runways),1 13 | 28,69,XX,XX Airbase 3,1714,Single-Unit Airfield (2x 2601-3200m Runways),1 14 | 24.87,66.88,XX,XX Port 1,210,Structure (Naval Dock),1 15 | 27.23,69.1,XX,XX Army Base 1,2419,Structure (Military Base),1 16 | 24.03,68.38,XX,XX Army Base 2,2419,Structure (Military Base),1 17 | -------------------------------------------------------------------------------- /cmddata.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | CommandPE Data Converter 4 | 5 | Author: Mike Bond, 2018 6 | 7 | """ 8 | import os 9 | import pandas as pd 10 | 11 | # Provides functions to accept exported data from a wargaming or analytical database 12 | # and convert the originating bases and units into Lua commands, which can then 13 | # be impported into Command: Modern Air/Naval Operations (CMANO) or CommandPE (Pro Edit.) 14 | # 15 | # Allows scenarios to be built rapidly by compiling data in tabular form instead of 16 | # hand-crafting Lua commands 17 | class CmdData: 18 | 19 | # Constructor sets up paths and buffers. Reads in initial input files. 20 | def __init__(self, inpath, outpath=None, outfile=None): #, skip_loads=False): 21 | self.buffer = [] 22 | self.forces = [] 23 | self.forcescopy = [] 24 | self.forces_dbids = [] 25 | self.bases = [] 26 | self.aircraft = [] 27 | self.sides = [] 28 | self.inpath = inpath 29 | self.outpath = outpath or self.inpath 30 | self.outfile = outfile 31 | 32 | # Perform all the necessary merges (table joins) to assign sides and game database IDs 33 | def do_merges(self): 34 | try: 35 | # Map the side from the CC (country code) or 'LocationSide', for facilities 36 | self.aircraft = self.aircraft.merge(self.sides, how='inner', left_on='CC', right_on='DBSide') 37 | self.bases = self.bases.merge(self.sides, how='inner', left_on='LocationSide', right_on='DBSide') 38 | 39 | # Add database ID to each row based on lookup table 40 | self.forces = self.forces.merge(self.forces_dbids, how='inner', on='UnitName') 41 | 42 | # Map the side from the CC (country code) 43 | self.forces = self.forces.merge(self.sides, how='inner', left_on='CC', right_on='DBSide') 44 | 45 | print("All table merges completed.\n") 46 | except Exception as err: 47 | print("*** There was a problem completing the merges.") 48 | 49 | # Clears the write buffer of Lua commands 50 | def clear(self): 51 | self.buffer = [] 52 | 53 | # Load a data table from a file. 54 | # Infers data contents by matching the filename, so self.bases[] should come from bases.csv 55 | # Arg: file name 56 | def read(self, fname): 57 | try: 58 | data = pd.read_csv(os.path.join(self.inpath, fname)) # Data 59 | table_name = fname.split('.')[0] # Grab data type from filename 60 | setattr(self,table_name,data) # Save it in the guessed attribute 61 | print("%s was imported successfully." % (fname)) 62 | except Exception as err: 63 | print("*** There was a problem reading in a data table: %s." % (fname) ) 64 | print("*** Make sure the filename matches the data type.") 65 | 66 | self.forcescopy = self.forces # Copy original, to allow reverting later 67 | 68 | # Subsets the forces dataframe according to the column and keywords 69 | # Args: applicable column, keyword to search e.g., ("Service", "Navy") 70 | # Returns length of subsetting dataframe 71 | def subset(self, column, keyword): 72 | self.forces = self.forces[self.forces[column].str.contains(keyword, case=False)] 73 | return len(self.forces) 74 | 75 | # Restore the copy to the main position 76 | # Returns the length of the restored dataframe 77 | def revert(self): 78 | self.forces = self.forcescopy 79 | return len(self.forces) 80 | 81 | # Adds a single unit, like base or ship, that takes a lat/longitude 82 | # Adds the line to the write buffer and also returns it 83 | # {side='LuaSideA', type='Ship', name='My Ship', dbid=383, latitude='61.490', longitude='-17.242'} 84 | def addUnit(self, name, unittype, lat, lng, side, dbid=1996): 85 | line = "ScenEdit_AddUnit({side='%s', type='%s', name=\"%s\", dbid=%u, latitude='%f', longitude='%f'})\n" % (side, unittype, name, dbid, lat, lng) 86 | self.buffer.append(line) 87 | return line 88 | 89 | # Adds Lua commands appropriate to assign aircraft to bases 90 | # Builds Lua commands from forces_dbids and aircraft dataframes and adds them to the write buffer 91 | # Returns the total number of aircraft added 92 | def addAircraft(self): 93 | self.check_clear() 94 | 95 | ac_list = self.forces_dbids.merge(self.aircraft, how='inner', left_on='UnitName', right_on='Equipment') 96 | 97 | total = 0 # Sum of all aircraft added to buffer 98 | for index, row in ac_list.iterrows(): 99 | squadron_count = 0 # Inner loop counter to assign numbers to aircraft name 100 | for x in range(row['Number']): # Quantity of aircraft of this type listed on the row 101 | total += 1 102 | squadron_count += 1 103 | ac_name = row['Squadron'] + " #" + str(squadron_count) # Unique name 104 | line = "ScenEdit_AddUnit({side='%s', type='%s', name=\"%s\", dbid=%u, loadoutid=%u, base=\"%s\"})\n" % (row['CmdSide'], 'aircraft', ac_name, row['dbid'], row['loadoutid'], row['Base']) 105 | self.buffer.append(line) 106 | print("%d aircraft added to command list." % (total)) 107 | return total 108 | 109 | # Adds Lua commands appropriate to facilities like airfields and buildings 110 | # Builds Lua commands from self.facilities dataframe and adds them to the write buffer 111 | # Returns the number of facilities added 112 | def addFacilities(self): 113 | self.check_clear() 114 | 115 | count = 0 116 | for index, row in self.bases.iterrows(): 117 | self.addUnit(row['Location'], 'facility', row['Lat'], row['Lon'], row['CmdSide'], row['dbid']) 118 | count += 1 119 | print("%d facilities added to command list." % (count)) 120 | return count 121 | 122 | # Adds Lua commands appropriate to combat forces (except aircraft) 123 | # Builds Lua commands from self.forces dataframe and adds them to the write buffer 124 | # Returns the no. of forces added 125 | def addForces(self): 126 | self.check_clear() 127 | 128 | count = 0 129 | for index, row in self.forces.iterrows(): 130 | self.addUnit(row['UnitName'], row['type'], row['Lat'], row['Lon'], row['CmdSide'], row['dbid']) 131 | count += 1 132 | print("%d forces added to command list." % (count)) 133 | return count 134 | 135 | # Check if the user wants to clear the buffer and overwrite it. 136 | # If not, then the calling function will append new commands to the buffer 137 | def check_clear(self): 138 | if len(self.buffer) > 0: 139 | response = input("Clear existing list of units from the buffer? If not, new items will be appended. (Y or N): ") 140 | if response.lower() == "y": 141 | self.clear() 142 | 143 | # Write the buffer to file 144 | # Arg: optional filename, else uses saved filename 145 | def write(self, fname=None): 146 | self.outfile = fname or self.outfile 147 | try: 148 | f = open(os.path.join(self.outpath, self.outfile), 'w') 149 | f.writelines(self.buffer) 150 | print("\nBuffer was successfully written to %s" % (self.outfile)) 151 | except Exception as err: 152 | print("Error; cannot continue. Description: " + format(err) ) 153 | finally: 154 | f.close() 155 | 156 | -------------------------------------------------------------------------------- /commandLua.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | CommandPE conversion demo 4 | 5 | Author: Mike Bond 6 | """ 7 | 8 | from cmddata import CmdData 9 | 10 | path = "." 11 | 12 | cmd = CmdData(inpath=path, outpath=path, outfile='LuaCommands.txt') 13 | 14 | # Read in all data 15 | cmd.read('forces.csv') # The main forces 16 | cmd.read('forces_dbids.csv') # CommandPE database IDs that map to newly imported forces 17 | cmd.read('sides.csv') # Defines the sides in a conflict, mapping a database side to a CommandPE game side 18 | cmd.read('bases.csv') # A list of bases and other facilities from each side 19 | cmd.read('aircraft.csv') # A list of aircraft to assign to bases 20 | 21 | cmd.do_merges() # Perform all table joins from the loaded data 22 | 23 | # Build Lua commands for all entities. Aircraft must come last, since they need facilities 24 | cmd.addFacilities() 25 | cmd.addForces() 26 | cmd.addAircraft() 27 | 28 | # Write the buffer to a file, then copy the resulting Lua commands to the game console 29 | cmd.write() 30 | -------------------------------------------------------------------------------- /forces.csv: -------------------------------------------------------------------------------- 1 | UnitName,Number,Equipment,CC,Service,Lat,Lon,MappableAssetId,LocationCC 2 | AA Carrier,,,AA,Navy,19.12,68,mapID123, 3 | AA Frigate 1,,,AA,Navy,22,65,mapID124, 4 | AA Frigate 2,,,AA,Navy,22.05,64.85,mapID125, 5 | AA Frigate 3,,,AA,Navy,21.8,68.1,mapID126, 6 | AA Destroyer 1,,,AA,Navy,22.03,64.93,mapID127, 7 | AA Destroyer 2,,,AA,Navy,21.82,68.13,mapID128, 8 | AA Destroyer 3,,,AA,Navy,21.78,68.01,mapID129, 9 | AA Submarine 1,,,AA,Navy,24,64,mapID129, 10 | AA Submarine 2,,,AA,Navy,23.5,63.2,mapID145, 11 | AA Submarine 3,,,AA,Navy,23.1,63,mapID146, 12 | BB Frigate 1,,,BB,Navy,23,65,mapID130, 13 | BB Frigate 2,,,BB,Navy,23,65.3,mapID131, 14 | BB Frigate 3,,,BB,Navy,24,65.9,mapID132, 15 | XX Frigate 1,,,XX,Navy,23,64.3,mapID134, 16 | XX Frigate 2,,,XX,Navy,23,64.5,mapID135, 17 | XX Frigate 3,,,XX,Navy,24,65,mapID136, 18 | XX Frigate 4,,,XX,Navy,23.4,65.3,mapID137, 19 | XX Frigate 5,,,XX,Navy,24.6,65.9,mapID138, 20 | XX Submarine 1,,,XX,Navy,22,64.3,mapID139, 21 | YY Frigate 1,,,YY,Navy,23,64.85,mapID140, 22 | YY Submarine,,,YY,Navy,22,68.1,mapID141, 23 | YY Frigate 2,,,YY,Navy,24,64.93,mapID142, 24 | Neutral Ship 1,,,Civ,Civ,21,68.13,mapID143, 25 | Neutral Ship 2,,,Civ,Civ,20,67.2,mapID144, 26 | -------------------------------------------------------------------------------- /forces_dbids.csv: -------------------------------------------------------------------------------- 1 | UnitName,dbid,type,dbnotes,loadoutid 2 | AA Carrier,681,Ship,R 33 Carrier. Carries 20+28 aircraft, 3 | Mig-29K,920,Aircraft,AA Navy,3085 4 | Ka-31,608,Aircraft,AA Navy,8033 5 | Sea King Mk42B,248,Aircraft,AA Navy,15393 6 | AA Frigate 1,2777,Ship,F 45 Teg, 7 | AA Frigate 2,2777,Ship,F 45 Teg, 8 | AA Frigate 3,2777,Ship,F 45 Teg, 9 | AA Destroyer 1,2009,Ship,D 51 Rajput, 10 | AA Destroyer 2,2009,Ship,D 51 Rajput, 11 | AA Destroyer 3,2778,Ship,D 61 Delhi, 12 | AA Submarine 1,166,Submarine,S 55, 13 | AA Submarine 2,571,Submarine,S 71, 14 | AA Submarine 3,108,Submarine,S 50, 15 | BB Frigate 1,1290,Ship,812 Al Riyadh, 16 | BB Frigate 2,2267,Ship,702 Al Madinah, 17 | BB Frigate 3,323,Ship,Badr, 18 | XX Frigate 1,2105,Ship,F 251 Zulfiquar, 19 | XX Frigate 2,3088,Ship,F 260 Alamgir, 20 | XX Frigate 3,1256,Ship,F 182 Babur, 21 | XX Frigate 4,1256,Ship,F 182 Babur, 22 | XX Frigate 5,1256,Ship,F 182 Babur, 23 | XX Submarine 1,646,Submarine,S 139 Improved Khalid, 24 | YY Frigate 1,2695,Ship,F 25 Bangabandhu, 25 | YY Submarine,643,Submarine,Nabajatra [Type 035G Ming], 26 | YY Frigate 2,2689,Ship,F 18 Osman, 27 | Neutral Ship 1,2030,Ship,Commercial Container Vessel, 28 | Neutral Ship 2,1154,Ship,F 71 Alvand, 29 | Mig-29 Fulcrum A,856,Aircraft,AA,5270 30 | Mirage 2000H-5,3798,Aircraft,AA,19107 31 | F-16CJ Blk 52+,2915,Aircraft,XX,16866 32 | JF-17 Thunder Blk 2,3298,Aircraft,XX,1348 33 | -------------------------------------------------------------------------------- /sides.csv: -------------------------------------------------------------------------------- 1 | DBSide,CmdSide 2 | AA,Blue 3 | BB,Blue 4 | XX,Red 5 | YY,Red 6 | Civ,Neutral 7 | --------------------------------------------------------------------------------