sc2ai 0.0.0.pre → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/data/data.json +1 -0
- data/data/data_readable.json +22946 -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 +37900 -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 +1951 -0
- data/lib/sc2ai/api/buff_id.rb +316 -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 +82 -0
- data/lib/sc2ai/api/tech_tree_data.rb +2342 -0
- data/lib/sc2ai/api/unit_type_id.rb +2074 -0
- data/lib/sc2ai/api/upgrade_id.rb +312 -0
- data/lib/sc2ai/cli/cli.rb +177 -0
- data/lib/sc2ai/cli/ladderzip.rb +173 -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
- metadata +353 -9
@@ -0,0 +1,312 @@
|
|
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
|
+
HURRICANETHRUSTERS = 303
|
310
|
+
INTERFERENCEMATRIX = 304
|
311
|
+
end
|
312
|
+
end
|
@@ -0,0 +1,177 @@
|
|
1
|
+
require "thor"
|
2
|
+
|
3
|
+
require "sc2ai/cli/new"
|
4
|
+
require "sc2ai/cli/ladderzip"
|
5
|
+
|
6
|
+
module Sc2
|
7
|
+
# Command line utilities
|
8
|
+
# standard:disable Style/GlobalVars
|
9
|
+
class Cli < Thor
|
10
|
+
# Silence!
|
11
|
+
class << self
|
12
|
+
def exit_on_failure?
|
13
|
+
true
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
register(Sc2::Cli::New, "new", "new BOTNAME RACE", "Creates botname folder with bot template")
|
18
|
+
register(Sc2::Cli::Ladderzip, "ladderzip", "ladderzip BOTNAME", "Prepares a zip via docker for supplied aiarena bot name")
|
19
|
+
|
20
|
+
# TODO: Use thor's #ask and other methods helpers of raw $stdin and puts.
|
21
|
+
desc "setup410", "Downloads and install SC2 v4.10"
|
22
|
+
# downloads and install SC2 v4.10
|
23
|
+
def setup410
|
24
|
+
say " "
|
25
|
+
say "This script sets up SC2 at version 4.10, which we use competitively."
|
26
|
+
say "Press any key to continue..."
|
27
|
+
ask ""
|
28
|
+
|
29
|
+
say "You must accept the Blizzard® Starcraft® II AI and Machine Learning License at"
|
30
|
+
say "https://blzdistsc2-a.akamaihd.net/AI_AND_MACHINE_LEARNING_LICENSE.html"
|
31
|
+
say "It is PERMISSIVE and grants you freedoms over the standard EULA."
|
32
|
+
say "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
|
+
say ""
|
37
|
+
puts 'Type "iagreetotheeula" (without quotes) and press ENTER to continue:'
|
38
|
+
end
|
39
|
+
say ""
|
40
|
+
say ""
|
41
|
+
say "Great decision."
|
42
|
+
|
43
|
+
require "sc2ai"
|
44
|
+
Async do
|
45
|
+
Sc2.logger.level = :fatal
|
46
|
+
say "SC2 will launch a blank window, be unresponsive, but download about 100mb in the background."
|
47
|
+
say "Let it finish and close itself."
|
48
|
+
say "Press ENTER if you understand."
|
49
|
+
ask ""
|
50
|
+
|
51
|
+
say ""
|
52
|
+
say ""
|
53
|
+
say "This will only take a minute..."
|
54
|
+
|
55
|
+
Sc2.config.version = nil
|
56
|
+
client = Sc2::ClientManager.obtain(0)
|
57
|
+
if Gem.win_platform?
|
58
|
+
sleep(10)
|
59
|
+
end
|
60
|
+
observer = Sc2::Player::Observer.new
|
61
|
+
observer.connect(host: client.host, port: client.port)
|
62
|
+
setup_replay = Sc2::Paths.gem_root.join("data", "setup", "setup.SC2Replay")
|
63
|
+
observer.api.replay_info(
|
64
|
+
replay_data: File.binread(setup_replay),
|
65
|
+
download_data: true
|
66
|
+
)
|
67
|
+
|
68
|
+
# Auto-detect executable path and ensure it matched exactly
|
69
|
+
base_build = "75689"
|
70
|
+
path = Sc2::Paths.executable(base_build: base_build)
|
71
|
+
if path.include?(base_build) && Pathname(path).exist?
|
72
|
+
say " "
|
73
|
+
say "Success. Download complete.", :green
|
74
|
+
say " "
|
75
|
+
else
|
76
|
+
say "Error. Slightly worrying, but no fear.", :red
|
77
|
+
say "To manually setup, grab the latest ladder maps and add them to your map folder."
|
78
|
+
say "Grab the latest maps from https://aiarena.net/wiki/maps/"
|
79
|
+
say "Detected map folder: #{Sc2::Paths.maps_dir}"
|
80
|
+
say "Then, download any recent replay from https://aiarena.net/ and double click to launch"
|
81
|
+
end
|
82
|
+
|
83
|
+
observer.api.quit
|
84
|
+
observer.disconnect
|
85
|
+
say "Generating sc2ai.yml to always use 4.10..."
|
86
|
+
Sc2.config.config_file.write({"version" => "4.10"}.to_yaml.to_s)
|
87
|
+
say ""
|
88
|
+
say "Done. You're good to go.", :green
|
89
|
+
ensure
|
90
|
+
Sc2::ClientManager.stop(0)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
desc "ladderconfig", "Prints out how you're configured for the ladder."
|
95
|
+
def ladderconfig
|
96
|
+
require "sc2ai"
|
97
|
+
unless Pathname("./boot.rb").exist?
|
98
|
+
raise Sc2::Error, "boot.rb not found. Bot started from wrong directory."
|
99
|
+
end
|
100
|
+
|
101
|
+
require "./boot"
|
102
|
+
# Debug
|
103
|
+
Sc2.logger.info "Bot class: #{$bot.class}"
|
104
|
+
Sc2.logger.info "Config:"
|
105
|
+
Sc2.logger.info " in-game name: #{$bot.name}"
|
106
|
+
Sc2.logger.info " race: #{Api::Race.lookup($bot.race)}"
|
107
|
+
Sc2.logger.info " realtime: #{$bot.realtime}"
|
108
|
+
Sc2.logger.info " step_count: #{$bot.step_count}"
|
109
|
+
Sc2.logger.info " enable_feature_layer: #{$bot.enable_feature_layer}"
|
110
|
+
Sc2.logger.info " interface_options: #{$bot.interface_options}"
|
111
|
+
end
|
112
|
+
|
113
|
+
# desc "ladderzip", "Uses docker to cross-compile a compatible binary for the ladder"
|
114
|
+
# def ladderzip
|
115
|
+
# end
|
116
|
+
|
117
|
+
# desc "ladderquickzip", "Ladder zip, if you have no additional gems installed."
|
118
|
+
# long_desc <<-LONGDESC
|
119
|
+
# `sc2ai ladderzip_basic` will download a portable ruby and gems, then copy your bot files into a zip file.
|
120
|
+
#
|
121
|
+
# If you have added any gems which need compiling, this option is not for you.
|
122
|
+
# Any gems built with native extensions will likely not be targeting the linux platform and be nonfunctional.
|
123
|
+
#
|
124
|
+
# For a cross-platform build, use ladderzip instead. This will launch a Docker container to compile a zip for you.
|
125
|
+
# LONGDESC
|
126
|
+
# def ladderquickzip
|
127
|
+
# raise Sc2::Error, "Not yet implemented."
|
128
|
+
# end
|
129
|
+
|
130
|
+
desc "laddermatch", "Joins a ladder match as per aiarena spec"
|
131
|
+
option :GamePort, required: true, desc: "SC2 port. Corresponds to SC2 launch option '-port'"
|
132
|
+
option :LadderServer, required: true, desc: "SC2 server ip or hostname"
|
133
|
+
option :StartPort, required: true, desc: "Match port range calculated starting at this port."
|
134
|
+
option :OpponentId, desc: "Unique identifier"
|
135
|
+
option :RealTime, type: :boolean, default: false, desc: "Forces realtime flag"
|
136
|
+
def laddermatch
|
137
|
+
require "sc2ai"
|
138
|
+
|
139
|
+
unless Sc2.ladder?
|
140
|
+
raise Sc2::Error, "This command is only for competing on aiarena.net"
|
141
|
+
end
|
142
|
+
|
143
|
+
unless Pathname("./boot.rb").exist?
|
144
|
+
raise Sc2::Error, "boot.rb not found. Bot started from wrong directory."
|
145
|
+
end
|
146
|
+
|
147
|
+
Sc2.logger.level = :info
|
148
|
+
|
149
|
+
require "./boot"
|
150
|
+
|
151
|
+
# Ladder specific overrides
|
152
|
+
$bot.realtime = true if options[:RealTime]
|
153
|
+
$bot.opponent_id = options[:OpponentId] if options[:OpponentId]
|
154
|
+
|
155
|
+
Async do
|
156
|
+
$bot.connect(host: options[:LadderServer], port: options[:GamePort])
|
157
|
+
$bot.join_game(
|
158
|
+
server_host: options[:LadderServer],
|
159
|
+
port_config: Sc2::Ports.port_config_basic(start_port: options[:StartPort], num_players: 2)
|
160
|
+
)
|
161
|
+
$bot.add_listener($bot, klass: Sc2::Connection::StatusListener)
|
162
|
+
$bot.play
|
163
|
+
end.wait
|
164
|
+
end
|
165
|
+
|
166
|
+
# desc "install APP_NAME", "install one of the available apps" # [4]
|
167
|
+
# method_options :force => :boolean, :alias => :string # [5]
|
168
|
+
# def install(name)
|
169
|
+
# user_alias = options[:alias]
|
170
|
+
# if options.force?
|
171
|
+
# # do something
|
172
|
+
# end
|
173
|
+
# # other code
|
174
|
+
# end
|
175
|
+
end
|
176
|
+
# standard:enable Style/GlobalVars
|
177
|
+
end
|
@@ -0,0 +1,173 @@
|
|
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", out: File::NULL, err: File::NULL)
|
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
|
+
raise SystemExit
|
27
|
+
end
|
28
|
+
|
29
|
+
if Kernel.system("docker info", out: File::NULL, err: File::NULL)
|
30
|
+
say_status("docker engine", "found", :green)
|
31
|
+
else
|
32
|
+
say(" ")
|
33
|
+
say_status("docker engine", "offline", :red)
|
34
|
+
say("Please start docker engine. If you have Docker Desktop installed, open it before retrying.")
|
35
|
+
raise SystemExit
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def set_compose_file
|
40
|
+
@compose_file = Sc2::Paths.gem_root
|
41
|
+
.join("lib", "docker_build", "docker-compose-ladderzip.yml")
|
42
|
+
.expand_path.to_s
|
43
|
+
end
|
44
|
+
|
45
|
+
def bot_validation
|
46
|
+
if Pathname("./boot.rb").exist?
|
47
|
+
say_status("detected boot.rb", "found", :green)
|
48
|
+
else
|
49
|
+
say_status("detected boot.rb", "not found", :red)
|
50
|
+
raise Sc2::Error, "boot.rb not found. Bot started from wrong directory."
|
51
|
+
end
|
52
|
+
|
53
|
+
require "./boot"
|
54
|
+
|
55
|
+
if $bot.is_a? Sc2::Player
|
56
|
+
say_status("instance $bot", $bot.class, :green)
|
57
|
+
else
|
58
|
+
say_status("instance $bot", $bot.class, :red)
|
59
|
+
raise Sc2::Error, "$bot instance nil or not Sc2::Player. Review boot.rb to ensure it creates $bot."
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.source_paths
|
64
|
+
[Pathname(".").expand_path.to_s]
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.source_root
|
68
|
+
Paths.template_root.to_s
|
69
|
+
end
|
70
|
+
|
71
|
+
def ensure_build_dir
|
72
|
+
empty_directory "./.build"
|
73
|
+
end
|
74
|
+
|
75
|
+
def create_executable
|
76
|
+
template("ladderzip/bin/ladder", "./.build/bin/ladder")
|
77
|
+
# This fails on Windows. creating by hand in #link_ladder function below.
|
78
|
+
# create_link("./.build/#{botname}", "./bin/ladder")
|
79
|
+
end
|
80
|
+
|
81
|
+
def start_container
|
82
|
+
cmd = "docker compose -f #{@compose_file} up bot -d --force-recreate"
|
83
|
+
Kernel.system(cmd)
|
84
|
+
end
|
85
|
+
|
86
|
+
def populate_build
|
87
|
+
# Manually parse *ignore file. Not doing a docker build on this simply to abuse dockerignore.
|
88
|
+
ignore_pattern = File.open("./.ladderignore").each_line
|
89
|
+
.collect(&:strip)
|
90
|
+
.reject { |pt| pt&.start_with?("#") || pt&.size&.zero? }
|
91
|
+
ignore_pattern << "**.build/*"
|
92
|
+
ignore_pattern << "**.ruby/*"
|
93
|
+
|
94
|
+
include_pattern = ignore_pattern.select { |pt| pt&.start_with?("!") }
|
95
|
+
ignore_pattern -= include_pattern
|
96
|
+
|
97
|
+
include_pattern.collect! { |pt| pt.delete_prefix("!") }
|
98
|
+
|
99
|
+
files = Dir.glob("**/*")
|
100
|
+
|
101
|
+
ignored_files = files
|
102
|
+
.select { |f| ignore_pattern.any? { |p| File.fnmatch?(p, f) } }
|
103
|
+
.reject { |f| include_pattern.any? { |p| File.fnmatch?(p, f) } }
|
104
|
+
|
105
|
+
files -= ignored_files unless ignored_files.nil?
|
106
|
+
|
107
|
+
files.each do |file|
|
108
|
+
next if File.directory?(file)
|
109
|
+
copy_file file, "./.build/#{file}"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def copy_build_to_docker
|
114
|
+
say_status("docker", "copying source...", :cyan)
|
115
|
+
cmd = "docker compose -f #{@compose_file} cp ./.build/. bot:/root/ruby-builder/"
|
116
|
+
Kernel.system(cmd)
|
117
|
+
end
|
118
|
+
|
119
|
+
def link_ladder
|
120
|
+
say_status("docker", "linking executable...", :cyan)
|
121
|
+
cmd = "docker compose -f #{@compose_file} exec --workdir /root/ruby-builder bot ln -s ./bin/ladder ./#{botname}"
|
122
|
+
Kernel.system(cmd)
|
123
|
+
end
|
124
|
+
|
125
|
+
def install_gems
|
126
|
+
say_status("docker", "bundle install...", :cyan)
|
127
|
+
cmd = "docker compose -f #{@compose_file} exec --workdir /root/ruby-builder bot bundle install"
|
128
|
+
Kernel.system(cmd)
|
129
|
+
end
|
130
|
+
|
131
|
+
def compress
|
132
|
+
say_status("docker", "compress ladder zip...", :cyan)
|
133
|
+
cmd = "docker compose -f #{@compose_file} exec --workdir /root/ruby-builder bot zip -qry9 /root/build.zip ."
|
134
|
+
Kernel.system(cmd)
|
135
|
+
end
|
136
|
+
|
137
|
+
def retreive_zip
|
138
|
+
say_status("docker", "pulling 'build.zip'", :green)
|
139
|
+
cmd = "docker compose -f #{@compose_file} cp bot:/root/build.zip ."
|
140
|
+
Kernel.system(cmd)
|
141
|
+
if File.exist?("./build.zip")
|
142
|
+
say_status("docker", "pulled 'build.zip' ok", :green)
|
143
|
+
else
|
144
|
+
say_status("docker", "error pulling 'build.zip'", :red)
|
145
|
+
exit
|
146
|
+
end
|
147
|
+
cmd = "docker compose -f #{@compose_file} exec bot rm /root/build.zip"
|
148
|
+
Kernel.system(cmd)
|
149
|
+
end
|
150
|
+
|
151
|
+
def clean
|
152
|
+
remove_file "./.build"
|
153
|
+
end
|
154
|
+
|
155
|
+
def stop_container
|
156
|
+
cmd = "docker compose --progress=plain -f #{@compose_file} stop bot"
|
157
|
+
Kernel.system(cmd)
|
158
|
+
end
|
159
|
+
|
160
|
+
def bye
|
161
|
+
say ""
|
162
|
+
say "Your bot is ready to upload. Use the file 'build.zip'."
|
163
|
+
say ""
|
164
|
+
say "A friendly reminder that since you passed \"#{botname}\", "
|
165
|
+
say "aiarena expects your bot to be named exactly that."
|
166
|
+
say "If the names mismatch, simply rerun this command with the correct BOTNAME."
|
167
|
+
say ""
|
168
|
+
say "Good luck."
|
169
|
+
end
|
170
|
+
end
|
171
|
+
# standard:enable Style/GlobalVars
|
172
|
+
end
|
173
|
+
end
|