sc2ai 0.0.0.pre → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/data/data.json +1 -0
- data/data/data_readable.json +22842 -0
- data/data/sc2ai/protocol/common.proto +59 -0
- data/data/sc2ai/protocol/data.proto +120 -0
- data/data/sc2ai/protocol/debug.proto +127 -0
- data/data/sc2ai/protocol/error.proto +221 -0
- data/data/sc2ai/protocol/query.proto +55 -0
- data/data/sc2ai/protocol/raw.proto +202 -0
- data/data/sc2ai/protocol/sc2api.proto +718 -0
- data/data/sc2ai/protocol/score.proto +108 -0
- data/data/sc2ai/protocol/spatial.proto +115 -0
- data/data/sc2ai/protocol/ui.proto +145 -0
- data/data/setup/setup.SC2Map +0 -0
- data/data/setup/setup.SC2Replay +0 -0
- data/data/stableid.json +35730 -0
- data/data/versions.json +554 -0
- data/exe/sc2ai +35 -0
- data/lib/docker_build/Dockerfile.ruby +74 -0
- data/lib/docker_build/docker-compose-base-image.yml +10 -0
- data/lib/docker_build/docker-compose-ladderzip.yml +9 -0
- data/lib/sc2ai/api/ability_id.rb +1644 -0
- data/lib/sc2ai/api/buff_id.rb +306 -0
- data/lib/sc2ai/api/data.rb +101 -0
- data/lib/sc2ai/api/effect_id.rb +20 -0
- data/lib/sc2ai/api/tech_tree.rb +83 -0
- data/lib/sc2ai/api/tech_tree_data.rb +2338 -0
- data/lib/sc2ai/api/unit_type_id.rb +2022 -0
- data/lib/sc2ai/api/upgrade_id.rb +310 -0
- data/lib/sc2ai/cli/cli.rb +175 -0
- data/lib/sc2ai/cli/ladderzip.rb +154 -0
- data/lib/sc2ai/cli/new.rb +88 -0
- data/lib/sc2ai/configuration.rb +145 -0
- data/lib/sc2ai/connection/connection_listener.rb +30 -0
- data/lib/sc2ai/connection/requests.rb +417 -0
- data/lib/sc2ai/connection/status_listener.rb +15 -0
- data/lib/sc2ai/connection.rb +146 -0
- data/lib/sc2ai/local_play/client/configurable_options.rb +115 -0
- data/lib/sc2ai/local_play/client.rb +159 -0
- data/lib/sc2ai/local_play/client_manager.rb +70 -0
- data/lib/sc2ai/local_play/map_file.rb +48 -0
- data/lib/sc2ai/local_play/match.rb +184 -0
- data/lib/sc2ai/overrides/array.rb +14 -0
- data/lib/sc2ai/overrides/async/process/child.rb +31 -0
- data/lib/sc2ai/overrides/kernel.rb +33 -0
- data/lib/sc2ai/paths.rb +294 -0
- data/lib/sc2ai/player/actions.rb +386 -0
- data/lib/sc2ai/player/debug.rb +224 -0
- data/lib/sc2ai/player/game_state.rb +131 -0
- data/lib/sc2ai/player/geometry.rb +766 -0
- data/lib/sc2ai/player/previous_state.rb +49 -0
- data/lib/sc2ai/player/units.rb +337 -0
- data/lib/sc2ai/player.rb +661 -0
- data/lib/sc2ai/ports.rb +152 -0
- data/lib/sc2ai/protocol/_meta_documentation.rb +39 -0
- data/lib/sc2ai/protocol/common_pb.rb +43 -0
- data/lib/sc2ai/protocol/data_pb.rb +47 -0
- data/lib/sc2ai/protocol/debug_pb.rb +56 -0
- data/lib/sc2ai/protocol/error_pb.rb +36 -0
- data/lib/sc2ai/protocol/extensions/color.rb +20 -0
- data/lib/sc2ai/protocol/extensions/point.rb +23 -0
- data/lib/sc2ai/protocol/extensions/point_2_d.rb +26 -0
- data/lib/sc2ai/protocol/extensions/position.rb +202 -0
- data/lib/sc2ai/protocol/extensions/power_source.rb +19 -0
- data/lib/sc2ai/protocol/extensions/unit.rb +489 -0
- data/lib/sc2ai/protocol/query_pb.rb +47 -0
- data/lib/sc2ai/protocol/raw_pb.rb +57 -0
- data/lib/sc2ai/protocol/sc2api_pb.rb +130 -0
- data/lib/sc2ai/protocol/score_pb.rb +40 -0
- data/lib/sc2ai/protocol/spatial_pb.rb +48 -0
- data/lib/sc2ai/protocol/ui_pb.rb +56 -0
- data/lib/sc2ai/unit_group/action_ext.rb +74 -0
- data/lib/sc2ai/unit_group/filter_ext.rb +379 -0
- data/lib/sc2ai/unit_group.rb +277 -0
- data/lib/sc2ai/version.rb +2 -1
- data/lib/sc2ai.rb +93 -2
- data/lib/templates/ladderzip/bin/ladder.tt +23 -0
- data/lib/templates/new/.ladderignore +20 -0
- data/lib/templates/new/Gemfile.tt +7 -0
- data/lib/templates/new/api/common.proto +59 -0
- data/lib/templates/new/api/data.proto +120 -0
- data/lib/templates/new/api/debug.proto +127 -0
- data/lib/templates/new/api/error.proto +221 -0
- data/lib/templates/new/api/query.proto +55 -0
- data/lib/templates/new/api/raw.proto +202 -0
- data/lib/templates/new/api/sc2api.proto +718 -0
- data/lib/templates/new/api/score.proto +108 -0
- data/lib/templates/new/api/spatial.proto +115 -0
- data/lib/templates/new/api/ui.proto +145 -0
- data/lib/templates/new/boot.rb.tt +6 -0
- data/lib/templates/new/my_bot.rb.tt +23 -0
- data/lib/templates/new/run_example_match.rb.tt +14 -0
- data/sc2ai.gemspec +80 -0
- metadata +344 -13
@@ -0,0 +1,310 @@
|
|
1
|
+
# Generated from stableid.json, do not edit.
|
2
|
+
|
3
|
+
module Api
|
4
|
+
# Constant reference of Upgrade ids
|
5
|
+
module UpgradeId
|
6
|
+
NULL = 0
|
7
|
+
CARRIERLAUNCHSPEEDUPGRADE = 1
|
8
|
+
GLIALRECONSTITUTION = 2
|
9
|
+
TUNNELINGCLAWS = 3
|
10
|
+
CHITINOUSPLATING = 4
|
11
|
+
HISECAUTOTRACKING = 5
|
12
|
+
TERRANBUILDINGARMOR = 6
|
13
|
+
TERRANINFANTRYWEAPONSLEVEL1 = 7
|
14
|
+
TERRANINFANTRYWEAPONSLEVEL2 = 8
|
15
|
+
TERRANINFANTRYWEAPONSLEVEL3 = 9
|
16
|
+
NEOSTEELFRAME = 10
|
17
|
+
TERRANINFANTRYARMORSLEVEL1 = 11
|
18
|
+
TERRANINFANTRYARMORSLEVEL2 = 12
|
19
|
+
TERRANINFANTRYARMORSLEVEL3 = 13
|
20
|
+
REAPERSPEED = 14
|
21
|
+
STIMPACK = 15
|
22
|
+
SHIELDWALL = 16
|
23
|
+
PUNISHERGRENADES = 17
|
24
|
+
SIEGETECH = 18
|
25
|
+
HIGHCAPACITYBARRELS = 19
|
26
|
+
BANSHEECLOAK = 20
|
27
|
+
MEDIVACCADUCEUSREACTOR = 21
|
28
|
+
RAVENCORVIDREACTOR = 22
|
29
|
+
HUNTERSEEKER = 23
|
30
|
+
DURABLEMATERIALS = 24
|
31
|
+
PERSONALCLOAKING = 25
|
32
|
+
GHOSTMOEBIUSREACTOR = 26
|
33
|
+
TERRANVEHICLEARMORSLEVEL1 = 27
|
34
|
+
TERRANVEHICLEARMORSLEVEL2 = 28
|
35
|
+
TERRANVEHICLEARMORSLEVEL3 = 29
|
36
|
+
TERRANVEHICLEWEAPONSLEVEL1 = 30
|
37
|
+
TERRANVEHICLEWEAPONSLEVEL2 = 31
|
38
|
+
TERRANVEHICLEWEAPONSLEVEL3 = 32
|
39
|
+
TERRANSHIPARMORSLEVEL1 = 33
|
40
|
+
TERRANSHIPARMORSLEVEL2 = 34
|
41
|
+
TERRANSHIPARMORSLEVEL3 = 35
|
42
|
+
TERRANSHIPWEAPONSLEVEL1 = 36
|
43
|
+
TERRANSHIPWEAPONSLEVEL2 = 37
|
44
|
+
TERRANSHIPWEAPONSLEVEL3 = 38
|
45
|
+
PROTOSSGROUNDWEAPONSLEVEL1 = 39
|
46
|
+
PROTOSSGROUNDWEAPONSLEVEL2 = 40
|
47
|
+
PROTOSSGROUNDWEAPONSLEVEL3 = 41
|
48
|
+
PROTOSSGROUNDARMORSLEVEL1 = 42
|
49
|
+
PROTOSSGROUNDARMORSLEVEL2 = 43
|
50
|
+
PROTOSSGROUNDARMORSLEVEL3 = 44
|
51
|
+
PROTOSSSHIELDSLEVEL1 = 45
|
52
|
+
PROTOSSSHIELDSLEVEL2 = 46
|
53
|
+
PROTOSSSHIELDSLEVEL3 = 47
|
54
|
+
OBSERVERGRAVITICBOOSTER = 48
|
55
|
+
GRAVITICDRIVE = 49
|
56
|
+
EXTENDEDTHERMALLANCE = 50
|
57
|
+
HIGHTEMPLARKHAYDARINAMULET = 51
|
58
|
+
PSISTORMTECH = 52
|
59
|
+
ZERGMELEEWEAPONSLEVEL1 = 53
|
60
|
+
ZERGMELEEWEAPONSLEVEL2 = 54
|
61
|
+
ZERGMELEEWEAPONSLEVEL3 = 55
|
62
|
+
ZERGGROUNDARMORSLEVEL1 = 56
|
63
|
+
ZERGGROUNDARMORSLEVEL2 = 57
|
64
|
+
ZERGGROUNDARMORSLEVEL3 = 58
|
65
|
+
ZERGMISSILEWEAPONSLEVEL1 = 59
|
66
|
+
ZERGMISSILEWEAPONSLEVEL2 = 60
|
67
|
+
ZERGMISSILEWEAPONSLEVEL3 = 61
|
68
|
+
OVERLORDSPEED = 62
|
69
|
+
OVERLORDTRANSPORT = 63
|
70
|
+
BURROW = 64
|
71
|
+
ZERGLINGATTACKSPEED = 65
|
72
|
+
ZERGLINGMOVEMENTSPEED = 66
|
73
|
+
HYDRALISKSPEED = 67
|
74
|
+
ZERGFLYERWEAPONSLEVEL1 = 68
|
75
|
+
ZERGFLYERWEAPONSLEVEL2 = 69
|
76
|
+
ZERGFLYERWEAPONSLEVEL3 = 70
|
77
|
+
ZERGFLYERARMORSLEVEL1 = 71
|
78
|
+
ZERGFLYERARMORSLEVEL2 = 72
|
79
|
+
ZERGFLYERARMORSLEVEL3 = 73
|
80
|
+
INFESTORENERGYUPGRADE = 74
|
81
|
+
CENTRIFICALHOOKS = 75
|
82
|
+
BATTLECRUISERENABLESPECIALIZATIONS = 76
|
83
|
+
BATTLECRUISERBEHEMOTHREACTOR = 77
|
84
|
+
PROTOSSAIRWEAPONSLEVEL1 = 78
|
85
|
+
PROTOSSAIRWEAPONSLEVEL2 = 79
|
86
|
+
PROTOSSAIRWEAPONSLEVEL3 = 80
|
87
|
+
PROTOSSAIRARMORSLEVEL1 = 81
|
88
|
+
PROTOSSAIRARMORSLEVEL2 = 82
|
89
|
+
PROTOSSAIRARMORSLEVEL3 = 83
|
90
|
+
WARPGATERESEARCH = 84
|
91
|
+
HALTECH = 85
|
92
|
+
CHARGE = 86
|
93
|
+
BLINKTECH = 87
|
94
|
+
ANABOLICSYNTHESIS = 88
|
95
|
+
OBVERSEINCUBATION = 89
|
96
|
+
VIKINGJOTUNBOOSTERS = 90
|
97
|
+
ORGANICCARAPACE = 91
|
98
|
+
INFESTORPERISTALSIS = 92
|
99
|
+
ABDOMINALFORTITUDE = 93
|
100
|
+
HYDRALISKSPEEDUPGRADE = 94
|
101
|
+
BANELINGBURROWMOVE = 95
|
102
|
+
COMBATDRUGS = 96
|
103
|
+
STRIKECANNONS = 97
|
104
|
+
TRANSFORMATIONSERVOS = 98
|
105
|
+
PHOENIXRANGEUPGRADE = 99
|
106
|
+
TEMPESTRANGEUPGRADE = 100
|
107
|
+
NEURALPARASITE = 101
|
108
|
+
LOCUSTLIFETIMEINCREASE = 102
|
109
|
+
ULTRALISKBURROWCHARGEUPGRADE = 103
|
110
|
+
ORACLEENERGYUPGRADE = 104
|
111
|
+
RESTORESHIELDS = 105
|
112
|
+
PROTOSSHEROSHIPWEAPON = 106
|
113
|
+
PROTOSSHEROSHIPDETECTOR = 107
|
114
|
+
PROTOSSHEROSHIPSPELL = 108
|
115
|
+
REAPERJUMP = 109
|
116
|
+
INCREASEDRANGE = 110
|
117
|
+
ZERGBURROWMOVE = 111
|
118
|
+
ANIONPULSECRYSTALS = 112
|
119
|
+
TERRANVEHICLEANDSHIPWEAPONSLEVEL1 = 113
|
120
|
+
TERRANVEHICLEANDSHIPWEAPONSLEVEL2 = 114
|
121
|
+
TERRANVEHICLEANDSHIPWEAPONSLEVEL3 = 115
|
122
|
+
TERRANVEHICLEANDSHIPARMORSLEVEL1 = 116
|
123
|
+
TERRANVEHICLEANDSHIPARMORSLEVEL2 = 117
|
124
|
+
TERRANVEHICLEANDSHIPARMORSLEVEL3 = 118
|
125
|
+
FLYINGLOCUSTS = 119
|
126
|
+
ROACHSUPPLY = 120
|
127
|
+
IMMORTALREVIVE = 121
|
128
|
+
DRILLCLAWS = 122
|
129
|
+
CYCLONELOCKONRANGEUPGRADE = 123
|
130
|
+
CYCLONEAIRUPGRADE = 124
|
131
|
+
LIBERATORMORPH = 125
|
132
|
+
ADEPTSHIELDUPGRADE = 126
|
133
|
+
LURKERRANGE = 127
|
134
|
+
IMMORTALBARRIER = 128
|
135
|
+
ADEPTKILLBOUNCE = 129
|
136
|
+
ADEPTPIERCINGATTACK = 130
|
137
|
+
CINEMATICMODE = 131
|
138
|
+
CURSORDEBUG = 132
|
139
|
+
MAGFIELDLAUNCHERS = 133
|
140
|
+
EVOLVEGROOVEDSPINES = 134
|
141
|
+
EVOLVEMUSCULARAUGMENTS = 135
|
142
|
+
BANSHEESPEED = 136
|
143
|
+
MEDIVACRAPIDDEPLOYMENT = 137
|
144
|
+
RAVENRECALIBRATEDEXPLOSIVES = 138
|
145
|
+
MEDIVACINCREASESPEEDBOOST = 139
|
146
|
+
LIBERATORAGRANGEUPGRADE = 140
|
147
|
+
DARKTEMPLARBLINKUPGRADE = 141
|
148
|
+
RAVAGERRANGE = 142
|
149
|
+
RAVENDAMAGEUPGRADE = 143
|
150
|
+
CYCLONELOCKONDAMAGEUPGRADE = 144
|
151
|
+
ARESCLASSWEAPONSSYSTEMVIKING = 145
|
152
|
+
AUTOHARVESTER = 146
|
153
|
+
HYBRIDCPLASMAUPGRADEHARD = 147
|
154
|
+
HYBRIDCPLASMAUPGRADEINSANE = 148
|
155
|
+
INTERCEPTORLIMIT4 = 149
|
156
|
+
INTERCEPTORLIMIT6 = 150
|
157
|
+
def self._330MMBARRAGECANNONS = 151
|
158
|
+
NOTPOSSIBLESIEGEMODE = 152
|
159
|
+
NEOSTEELFRAME_2 = 153
|
160
|
+
NEOSTEELANDSHRIKETURRETICONUPGRADE = 154
|
161
|
+
OCULARIMPLANTS = 155
|
162
|
+
CROSSSPECTRUMDAMPENERS = 156
|
163
|
+
ORBITALSTRIKE = 157
|
164
|
+
CLUSTERBOMB = 158
|
165
|
+
SHAPEDHULL = 159
|
166
|
+
SPECTRETOOLTIPUPGRADE = 160
|
167
|
+
ULTRACAPACITORS = 161
|
168
|
+
VANADIUMPLATING = 162
|
169
|
+
COMMANDCENTERREACTOR = 163
|
170
|
+
REGENERATIVEBIOSTEEL = 164
|
171
|
+
CELLULARREACTORS = 165
|
172
|
+
BANSHEECLOAKEDDAMAGE = 166
|
173
|
+
DISTORTIONBLASTERS = 167
|
174
|
+
EMPTOWER = 168
|
175
|
+
SUPPLYDEPOTDROP = 169
|
176
|
+
HIVEMINDEMULATOR = 170
|
177
|
+
FORTIFIEDBUNKERCARAPACE = 171
|
178
|
+
PREDATOR = 172
|
179
|
+
SCIENCEVESSEL = 173
|
180
|
+
DUALFUSIONWELDERS = 174
|
181
|
+
ADVANCEDCONSTRUCTION = 175
|
182
|
+
ADVANCEDMEDICTRAINING = 176
|
183
|
+
PROJECTILEACCELERATORS = 177
|
184
|
+
REINFORCEDSUPERSTRUCTURE = 178
|
185
|
+
MULE = 179
|
186
|
+
ORBITALRELAY = 180
|
187
|
+
RAZORWIRE = 181
|
188
|
+
ADVANCEDHEALINGAI = 182
|
189
|
+
TWINLINKEDFLAMETHROWERS = 183
|
190
|
+
NANOCONSTRUCTOR = 184
|
191
|
+
CERBERUSMINES = 185
|
192
|
+
HYPERFLUXOR = 186
|
193
|
+
TRILITHIUMPOWERCELLS = 187
|
194
|
+
PERMANENTCLOAKGHOST = 188
|
195
|
+
PERMANENTCLOAKSPECTRE = 189
|
196
|
+
ULTRASONICPULSE = 190
|
197
|
+
SURVIVALPODS = 191
|
198
|
+
ENERGYSTORAGE = 192
|
199
|
+
FULLBORECANISTERAMMO = 193
|
200
|
+
CAMPAIGNJOTUNBOOSTERS = 194
|
201
|
+
MICROFILTERING = 195
|
202
|
+
PARTICLECANNONAIR = 196
|
203
|
+
VULTUREAUTOREPAIR = 197
|
204
|
+
PSIDISRUPTOR = 198
|
205
|
+
SCIENCEVESSELENERGYMANIPULATION = 199
|
206
|
+
SCIENCEVESSELPLASMAWEAPONRY = 200
|
207
|
+
SHOWGATLINGGUN = 201
|
208
|
+
TECHREACTOR = 202
|
209
|
+
TECHREACTORAI = 203
|
210
|
+
TERRANDEFENSERANGEBONUS = 204
|
211
|
+
X88TNAPALMUPGRADE = 205
|
212
|
+
HURRICANEMISSILES = 206
|
213
|
+
MECHANICALREBIRTH = 207
|
214
|
+
MARINESTIMPACK = 208
|
215
|
+
DARKTEMPLARTACTICS = 209
|
216
|
+
CLUSTERWARHEADS = 210
|
217
|
+
CLOAKDISTORTIONFIELD = 211
|
218
|
+
DEVASTATORMISSILES = 212
|
219
|
+
DISTORTIONTHRUSTERS = 213
|
220
|
+
DYNAMICPOWERROUTING = 214
|
221
|
+
IMPALERROUNDS = 215
|
222
|
+
KINETICFIELDS = 216
|
223
|
+
BURSTCAPACITORS = 217
|
224
|
+
HAILSTORMMISSILEPODS = 218
|
225
|
+
RAPIDDEPLOYMENT = 219
|
226
|
+
REAPERSTIMPACK = 220
|
227
|
+
REAPERD8CHARGE = 221
|
228
|
+
TYCHUS05BATTLECRUISERPENETRATION = 222
|
229
|
+
VIRALPLASMA = 223
|
230
|
+
FIREBATJUGGERNAUTPLATING = 224
|
231
|
+
MULTILOCKTARGETINGSYSTEMS = 225
|
232
|
+
TURBOCHARGEDENGINES = 226
|
233
|
+
DISTORTIONSENSORS = 227
|
234
|
+
INFERNALPREIGNITERS = 228
|
235
|
+
HELLIONCAMPAIGNINFERNALPREIGNITER = 229
|
236
|
+
NAPALMFUELTANKS = 230
|
237
|
+
AUXILIARYMEDBOTS = 231
|
238
|
+
JUGGERNAUTPLATING = 232
|
239
|
+
MARAUDERLIFEBOOST = 233
|
240
|
+
COMBATSHIELD = 234
|
241
|
+
REAPERU238ROUNDS = 235
|
242
|
+
MAELSTROMROUNDS = 236
|
243
|
+
SIEGETANKSHAPEDBLAST = 237
|
244
|
+
TUNGSTENSPIKES = 238
|
245
|
+
BEARCLAWNOZZLES = 239
|
246
|
+
NANOBOTINJECTORS = 240
|
247
|
+
STABILIZERMEDPACKS = 241
|
248
|
+
HALOROCKETS = 242
|
249
|
+
SCAVENGINGSYSTEMS = 243
|
250
|
+
EXTRAMINES = 244
|
251
|
+
ARESCLASSWEAPONSSYSTEM = 245
|
252
|
+
WHITENAPALM = 246
|
253
|
+
VIRALMUNITIONS = 247
|
254
|
+
JACKHAMMERCONCUSSIONGRENADES = 248
|
255
|
+
FIRESUPPRESSIONSYSTEMS = 249
|
256
|
+
FLARERESEARCH = 250
|
257
|
+
MODULARCONSTRUCTION = 251
|
258
|
+
EXPANDEDHULL = 252
|
259
|
+
SHRIKETURRET = 253
|
260
|
+
MICROFUSIONREACTORS = 254
|
261
|
+
WRAITHCLOAK = 255
|
262
|
+
SINGULARITYCHARGE = 256
|
263
|
+
GRAVITICTHRUSTERS = 257
|
264
|
+
YAMATOCANNON = 258
|
265
|
+
DEFENSIVEMATRIX = 259
|
266
|
+
DARKPROTOSS = 260
|
267
|
+
TERRANINFANTRYWEAPONSULTRACAPACITORSLEVEL1 = 261
|
268
|
+
TERRANINFANTRYWEAPONSULTRACAPACITORSLEVEL2 = 262
|
269
|
+
TERRANINFANTRYWEAPONSULTRACAPACITORSLEVEL3 = 263
|
270
|
+
TERRANINFANTRYARMORSVANADIUMPLATINGLEVEL1 = 264
|
271
|
+
TERRANINFANTRYARMORSVANADIUMPLATINGLEVEL2 = 265
|
272
|
+
TERRANINFANTRYARMORSVANADIUMPLATINGLEVEL3 = 266
|
273
|
+
TERRANVEHICLEWEAPONSULTRACAPACITORSLEVEL1 = 267
|
274
|
+
TERRANVEHICLEWEAPONSULTRACAPACITORSLEVEL2 = 268
|
275
|
+
TERRANVEHICLEWEAPONSULTRACAPACITORSLEVEL3 = 269
|
276
|
+
TERRANVEHICLEARMORSVANADIUMPLATINGLEVEL1 = 270
|
277
|
+
TERRANVEHICLEARMORSVANADIUMPLATINGLEVEL2 = 271
|
278
|
+
TERRANVEHICLEARMORSVANADIUMPLATINGLEVEL3 = 272
|
279
|
+
TERRANSHIPWEAPONSULTRACAPACITORSLEVEL1 = 273
|
280
|
+
TERRANSHIPWEAPONSULTRACAPACITORSLEVEL2 = 274
|
281
|
+
TERRANSHIPWEAPONSULTRACAPACITORSLEVEL3 = 275
|
282
|
+
TERRANSHIPARMORSVANADIUMPLATINGLEVEL1 = 276
|
283
|
+
TERRANSHIPARMORSVANADIUMPLATINGLEVEL2 = 277
|
284
|
+
TERRANSHIPARMORSVANADIUMPLATINGLEVEL3 = 278
|
285
|
+
HIREKELMORIANMINERSPH = 279
|
286
|
+
HIREDEVILDOGSPH = 280
|
287
|
+
HIRESPARTANCOMPANYPH = 281
|
288
|
+
HIREHAMMERSECURITIESPH = 282
|
289
|
+
HIRESIEGEBREAKERSPH = 283
|
290
|
+
HIREHELSANGELSPH = 284
|
291
|
+
HIREDUSKWINGPH = 285
|
292
|
+
HIREDUKESREVENGE = 286
|
293
|
+
TOSHEASYMODE = 287
|
294
|
+
VOIDRAYSPEEDUPGRADE = 288
|
295
|
+
SMARTSERVOS = 289
|
296
|
+
ARMORPIERCINGROCKETS = 290
|
297
|
+
CYCLONERAPIDFIRELAUNCHERS = 291
|
298
|
+
RAVENENHANCEDMUNITIONS = 292
|
299
|
+
DIGGINGCLAWS = 293
|
300
|
+
CARRIERCARRIERCAPACITY = 294
|
301
|
+
CARRIERLEASHRANGEUPGRADE = 295
|
302
|
+
TEMPESTGROUNDATTACKUPGRADE = 296
|
303
|
+
MICROBIALSHROUD = 297
|
304
|
+
SUNDERINGIMPACT = 298
|
305
|
+
AMPLIFIEDSHIELDING = 299
|
306
|
+
PSIONICAMPLIFIERS = 300
|
307
|
+
SECRETEDCOATING = 301
|
308
|
+
ENHANCEDSHOCKWAVES = 302
|
309
|
+
end
|
310
|
+
end
|
@@ -0,0 +1,175 @@
|
|
1
|
+
require "thor"
|
2
|
+
require "sc2ai/cli/new"
|
3
|
+
require "sc2ai/cli/ladderzip"
|
4
|
+
|
5
|
+
module Sc2
|
6
|
+
# Command line utilities
|
7
|
+
# standard:disable Style/GlobalVars
|
8
|
+
class Cli < Thor
|
9
|
+
# Silence!
|
10
|
+
class << self
|
11
|
+
def exit_on_failure?
|
12
|
+
true
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
register(Sc2::Cli::New, "new", "new BOTNAME RACE", "Creates botname folder with bot template")
|
17
|
+
register(Sc2::Cli::Ladderzip, "ladderzip", "ladderzip BOTNAME", "Prepares a zip via docker for supplied aiarena bot name")
|
18
|
+
|
19
|
+
# TODO: Use thor's #ask and other methods helpers of raw $stdin and puts.
|
20
|
+
desc "setup410", "Downloads and install SC2 v4.10"
|
21
|
+
# downloads and install SC2 v4.10
|
22
|
+
def setup410
|
23
|
+
puts " "
|
24
|
+
puts "This script sets up SC2 at version 4.10, which we use competitively."
|
25
|
+
puts "Press any key to continue..."
|
26
|
+
puts " "
|
27
|
+
$stdin.getch
|
28
|
+
|
29
|
+
puts "You must accept the Blizzard® Starcraft® II AI and Machine Learning License at"
|
30
|
+
puts "https://blzdistsc2-a.akamaihd.net/AI_AND_MACHINE_LEARNING_LICENSE.html"
|
31
|
+
puts "It is PERMISSIVE and grants you freedoms over the standard EULA."
|
32
|
+
puts "We do not record this action, but depend on software goverend by that license to continue."
|
33
|
+
puts 'If you accept, type "iagreetotheeula" (without quotes) and press ENTER to continue:'
|
34
|
+
|
35
|
+
while $stdin.gets.chomp != "iagreetotheeula"
|
36
|
+
puts ""
|
37
|
+
puts 'Type "iagreetotheeula" (without quotes) and press ENTER to continue:'
|
38
|
+
end
|
39
|
+
puts ""
|
40
|
+
puts ""
|
41
|
+
puts "Great decision."
|
42
|
+
|
43
|
+
Async do
|
44
|
+
Sc2.logger.level = :fatal
|
45
|
+
puts "SC2 will launch a blank window, be unresponsive, but download about 100mb in the background."
|
46
|
+
puts "Let it finish and close itself."
|
47
|
+
puts "Press ENTER if you understand."
|
48
|
+
$stdin.getch
|
49
|
+
|
50
|
+
puts ""
|
51
|
+
puts ""
|
52
|
+
puts "This will only take a minute..."
|
53
|
+
|
54
|
+
Sc2.config.version = nil
|
55
|
+
client = Sc2::ClientManager.obtain(0)
|
56
|
+
if Gem.win_platform?
|
57
|
+
sleep(10)
|
58
|
+
end
|
59
|
+
observer = Sc2::Player::Observer.new
|
60
|
+
observer.connect(host: client.host, port: client.port)
|
61
|
+
setup_replay = Sc2::Paths.gem_root.join("data", "setup", "setup.SC2Replay")
|
62
|
+
observer.api.replay_info(
|
63
|
+
replay_data: File.binread(setup_replay),
|
64
|
+
download_data: true
|
65
|
+
)
|
66
|
+
|
67
|
+
# Auto-detect executable path and ensure it matched exactly
|
68
|
+
base_build = "75689"
|
69
|
+
path = Sc2::Paths.executable(base_build: base_build)
|
70
|
+
if path.include?(base_build) && Pathname(path).exist?
|
71
|
+
puts " "
|
72
|
+
puts "Success. Downloaded complete."
|
73
|
+
puts " "
|
74
|
+
else
|
75
|
+
puts "Error. Slightly worrying, but no fear."
|
76
|
+
puts "To manually setup, grab the latest ladder maps and add them to your map folder."
|
77
|
+
puts "Grab the latest maps from https://aiarena.net/wiki/maps/"
|
78
|
+
puts "Detected map folder: #{Sc2::Paths.maps_dir}"
|
79
|
+
puts "Then, download any recent replay from https://aiarena.net/ and double click to launch"
|
80
|
+
end
|
81
|
+
|
82
|
+
observer.disconnect
|
83
|
+
puts "Generating sc2ai.yml to always use 4.10..."
|
84
|
+
Sc2.config.config_file.write({"version" => "4.10"}.to_yaml.to_s)
|
85
|
+
puts ""
|
86
|
+
puts "Done. You're good to go."
|
87
|
+
ensure
|
88
|
+
Sc2::ClientManager.stop(0)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
desc "ladderconfig", "Prints out how you're configured for the ladder."
|
93
|
+
def ladderconfig
|
94
|
+
require "sc2ai"
|
95
|
+
unless Pathname("./boot.rb").exist?
|
96
|
+
raise Sc2::Error, "boot.rb not found. Bot started from wrong directory."
|
97
|
+
end
|
98
|
+
|
99
|
+
require "./boot"
|
100
|
+
# Debug
|
101
|
+
Sc2.logger.info "Bot class: #{$bot.class}"
|
102
|
+
Sc2.logger.info "Config:"
|
103
|
+
Sc2.logger.info " in-game name: #{$bot.name}"
|
104
|
+
Sc2.logger.info " race: #{Api::Race.lookup($bot.race)}"
|
105
|
+
Sc2.logger.info " realtime: #{$bot.realtime}"
|
106
|
+
Sc2.logger.info " step_count: #{$bot.step_count}"
|
107
|
+
Sc2.logger.info " enable_feature_layer: #{$bot.enable_feature_layer}"
|
108
|
+
Sc2.logger.info " interface_options: #{$bot.interface_options}"
|
109
|
+
end
|
110
|
+
|
111
|
+
# desc "ladderzip", "Uses docker to cross-compile a compatible binary for the ladder"
|
112
|
+
# def ladderzip
|
113
|
+
# end
|
114
|
+
|
115
|
+
# desc "ladderquickzip", "Ladder zip, if you have no additional gems installed."
|
116
|
+
# long_desc <<-LONGDESC
|
117
|
+
# `sc2ai ladderzip_basic` will download a portable ruby and gems, then copy your bot files into a zip file.
|
118
|
+
#
|
119
|
+
# If you have added any gems which need compiling, this option is not for you.
|
120
|
+
# Any gems built with native extensions will likely not be targeting the linux platform and be nonfunctional.
|
121
|
+
#
|
122
|
+
# For a cross-platform build, use ladderzip instead. This will launch a Docker container to compile a zip for you.
|
123
|
+
# LONGDESC
|
124
|
+
# def ladderquickzip
|
125
|
+
# raise Sc2::Error, "Not yet implemented."
|
126
|
+
# end
|
127
|
+
|
128
|
+
desc "laddermatch", "Joins a ladder match as per aiarena spec"
|
129
|
+
option :GamePort, required: true, desc: "SC2 port. Corresponds to SC2 launch option '-port'"
|
130
|
+
option :LadderServer, required: true, desc: "SC2 server ip or hostname"
|
131
|
+
option :StartPort, required: true, desc: "Match port range calculated starting at this port."
|
132
|
+
option :OpponentId, desc: "Unique identifier"
|
133
|
+
option :RealTime, type: :boolean, default: false, desc: "Forces realtime flag"
|
134
|
+
def laddermatch
|
135
|
+
require "sc2ai"
|
136
|
+
|
137
|
+
unless Sc2.ladder?
|
138
|
+
raise Sc2::Error, "This command is only for competing on aiarena.net"
|
139
|
+
end
|
140
|
+
|
141
|
+
unless Pathname("./boot.rb").exist?
|
142
|
+
raise Sc2::Error, "boot.rb not found. Bot started from wrong directory."
|
143
|
+
end
|
144
|
+
|
145
|
+
Sc2.logger.level = :info
|
146
|
+
|
147
|
+
require "./boot"
|
148
|
+
|
149
|
+
# Ladder specific overrides
|
150
|
+
$bot.realtime = true if options[:RealTime]
|
151
|
+
$bot.opponent_id = options[:OpponentId] if options[:OpponentId]
|
152
|
+
|
153
|
+
Async do
|
154
|
+
$bot.connect(host: options[:LadderServer], port: options[:GamePort])
|
155
|
+
$bot.join_game(
|
156
|
+
server_host: options[:LadderServer],
|
157
|
+
port_config: Sc2::Ports.port_config_basic(start_port: options[:StartPort], num_players: 2)
|
158
|
+
)
|
159
|
+
$bot.add_listener($bot, klass: Sc2::Connection::StatusListener)
|
160
|
+
$bot.play
|
161
|
+
end.wait
|
162
|
+
end
|
163
|
+
|
164
|
+
# desc "install APP_NAME", "install one of the available apps" # [4]
|
165
|
+
# method_options :force => :boolean, :alias => :string # [5]
|
166
|
+
# def install(name)
|
167
|
+
# user_alias = options[:alias]
|
168
|
+
# if options.force?
|
169
|
+
# # do something
|
170
|
+
# end
|
171
|
+
# # other code
|
172
|
+
# end
|
173
|
+
end
|
174
|
+
# standard:enable Style/GlobalVars
|
175
|
+
end
|
@@ -0,0 +1,154 @@
|
|
1
|
+
module Sc2
|
2
|
+
# Command line utilities
|
3
|
+
class Cli < Thor
|
4
|
+
# Populating "./build" with our source...
|
5
|
+
# - Symlink executable ./build/bin/ladder to ./.build/botname for ladder
|
6
|
+
# - copy our source to .build, sans .ladderignore
|
7
|
+
# copy .build to docker
|
8
|
+
# bundle install on docker
|
9
|
+
# zipping up code + ruby + gems
|
10
|
+
# get zip, clean up
|
11
|
+
# stop docker
|
12
|
+
# standard:disable Style/GlobalVars
|
13
|
+
class Ladderzip < Thor::Group
|
14
|
+
include Thor::Actions
|
15
|
+
|
16
|
+
# Define arguments and options
|
17
|
+
argument :botname, desc: "Your bot name as on aiarena.net. Will be used as a filename (alphanumeric, no spaces)."
|
18
|
+
desc "Builds a ladder zip using docker (requires docker)"
|
19
|
+
|
20
|
+
def docker_exists
|
21
|
+
if Kernel.system("docker --version")
|
22
|
+
say_status("docker", "found", :green)
|
23
|
+
else
|
24
|
+
say_status("docker", "not found", :red)
|
25
|
+
say("Please install 'docker' and/or ensure it's in your PATH to continue.")
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def set_compose_file
|
30
|
+
@compose_file = Sc2::Paths.gem_root
|
31
|
+
.join("lib", "docker_build", "docker-compose-ladderzip.yml")
|
32
|
+
.expand_path.to_s
|
33
|
+
end
|
34
|
+
|
35
|
+
def bot_validation
|
36
|
+
if Pathname("./boot.rb").exist?
|
37
|
+
say_status("detected boot.rb", "found", :green)
|
38
|
+
else
|
39
|
+
say_status("detected boot.rb", "not found", :red)
|
40
|
+
raise Sc2::Error, "boot.rb not found. Bot started from wrong directory."
|
41
|
+
end
|
42
|
+
|
43
|
+
require "./boot"
|
44
|
+
|
45
|
+
if $bot.is_a? Sc2::Player
|
46
|
+
say_status("instance $bot", $bot.class, :green)
|
47
|
+
else
|
48
|
+
say_status("instance $bot", $bot.class, :red)
|
49
|
+
raise Sc2::Error, "$bot instance nil or not Sc2::Player. Review boot.rb to ensure it creates $bot."
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.source_paths
|
54
|
+
[Pathname(".").expand_path.to_s]
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.source_root
|
58
|
+
Paths.template_root.to_s
|
59
|
+
end
|
60
|
+
|
61
|
+
def ensure_build_dir
|
62
|
+
empty_directory "./.build"
|
63
|
+
end
|
64
|
+
|
65
|
+
def create_executable
|
66
|
+
template("ladderzip/bin/ladder", "./.build/bin/ladder")
|
67
|
+
create_link(".build/#{botname}", "./bin/ladder")
|
68
|
+
end
|
69
|
+
|
70
|
+
def start_container
|
71
|
+
cmd = "docker compose -f #{@compose_file} up bot -d --force-recreate"
|
72
|
+
Kernel.system(cmd)
|
73
|
+
end
|
74
|
+
|
75
|
+
def populate_build
|
76
|
+
# Manually parse *ignore file. Not doing a docker build on this simply to abuse dockerignore.
|
77
|
+
ignore_pattern = File.open("./.ladderignore").each_line
|
78
|
+
.collect(&:strip)
|
79
|
+
.reject { |pt| pt&.start_with?("#") || pt&.size&.zero? }
|
80
|
+
ignore_pattern << "**.build/*"
|
81
|
+
ignore_pattern << "**.ruby/*"
|
82
|
+
|
83
|
+
include_pattern = ignore_pattern.select { |pt| pt&.start_with?("!") }
|
84
|
+
ignore_pattern -= include_pattern
|
85
|
+
|
86
|
+
include_pattern.collect! { |pt| pt.delete_prefix("!") }
|
87
|
+
|
88
|
+
files = Dir.glob("**/*")
|
89
|
+
ignored_files = files
|
90
|
+
.select { |f| ignore_pattern.any? { |p| File.fnmatch?(p, f) } }
|
91
|
+
.reject! { |f| include_pattern.any? { |p| File.fnmatch?(p, f) } }
|
92
|
+
files -= ignored_files unless ignored_files.nil?
|
93
|
+
|
94
|
+
files.each do |file|
|
95
|
+
next if File.directory?(file)
|
96
|
+
copy_file file, "./.build/#{file}"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def copy_build_to_docker
|
101
|
+
say_status("docker", "copying source...", :cyan)
|
102
|
+
cmd = "docker compose -f #{@compose_file} cp ./.build/. bot:/root/ruby-builder/"
|
103
|
+
Kernel.system(cmd)
|
104
|
+
end
|
105
|
+
|
106
|
+
def install_gems
|
107
|
+
say_status("docker", "bundle install...", :cyan)
|
108
|
+
cmd = "docker compose -f #{@compose_file} exec --workdir /root/ruby-builder bot bundle install"
|
109
|
+
Kernel.system(cmd)
|
110
|
+
end
|
111
|
+
|
112
|
+
def compress
|
113
|
+
say_status("docker", "compress ladder zip...", :cyan)
|
114
|
+
cmd = "docker compose -f #{@compose_file} exec --workdir /root/ruby-builder bot zip -qry9 /root/build.zip ."
|
115
|
+
Kernel.system(cmd)
|
116
|
+
end
|
117
|
+
|
118
|
+
def retreive_zip
|
119
|
+
say_status("docker", "pulling 'build.zip'", :green)
|
120
|
+
cmd = "docker compose -f #{@compose_file} cp bot:/root/build.zip ."
|
121
|
+
Kernel.system(cmd)
|
122
|
+
if File.exist?("./build.zip")
|
123
|
+
say_status("docker", "pulled 'build.zip' ok", :green)
|
124
|
+
else
|
125
|
+
say_status("docker", "error pulling 'build.zip'", :red)
|
126
|
+
exit
|
127
|
+
end
|
128
|
+
cmd = "docker compose -f #{@compose_file} exec bot rm /root/build.zip"
|
129
|
+
Kernel.system(cmd)
|
130
|
+
end
|
131
|
+
|
132
|
+
def clean
|
133
|
+
remove_file "./.build"
|
134
|
+
end
|
135
|
+
|
136
|
+
def stop_container
|
137
|
+
cmd = "docker compose --progress=plain -f #{@compose_file} stop bot"
|
138
|
+
Kernel.system(cmd)
|
139
|
+
end
|
140
|
+
|
141
|
+
def bye
|
142
|
+
say ""
|
143
|
+
say "Your bot is ready to upload. Use the file 'build.zip'."
|
144
|
+
say ""
|
145
|
+
say "A friendly reminder that since you passed \"#{botname}\", "
|
146
|
+
say "aiarena expects your bot to be named exactly that."
|
147
|
+
say "If the names mismatch, simply rerun this command with the correct BOTNAME."
|
148
|
+
say ""
|
149
|
+
say "Good luck."
|
150
|
+
end
|
151
|
+
end
|
152
|
+
# standard:enable Style/GlobalVars
|
153
|
+
end
|
154
|
+
end
|