sc2ai 0.0.8 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/data/sc2ai/protocol/common.proto +1 -1
  3. data/data/sc2ai/protocol/data.proto +4 -1
  4. data/data/sc2ai/protocol/debug.proto +5 -1
  5. data/data/sc2ai/protocol/error.proto +2 -1
  6. data/data/sc2ai/protocol/query.proto +1 -1
  7. data/data/sc2ai/protocol/raw.proto +9 -7
  8. data/data/sc2ai/protocol/sc2api.proto +21 -7
  9. data/data/sc2ai/protocol/score.proto +2 -1
  10. data/data/sc2ai/protocol/spatial.proto +2 -1
  11. data/data/sc2ai/protocol/ui.proto +5 -2
  12. data/lib/docker_build/Dockerfile.ruby +5 -3
  13. data/lib/sc2ai/api/ability_id.rb +6 -1
  14. data/lib/sc2ai/api/data.rb +15 -0
  15. data/lib/sc2ai/api/tech_tree.rb +1 -1
  16. data/lib/sc2ai/api/tech_tree_data.rb +54 -3
  17. data/lib/sc2ai/cli/cli.rb +1 -1
  18. data/lib/sc2ai/connection.rb +1 -1
  19. data/lib/sc2ai/local_play/client_manager.rb +2 -0
  20. data/lib/sc2ai/local_play/match.rb +0 -11
  21. data/lib/sc2ai/overrides/async/process/child.rb +1 -1
  22. data/lib/sc2ai/paths.rb +1 -1
  23. data/lib/sc2ai/player/debug.rb +36 -2
  24. data/lib/sc2ai/player/{geometry.rb → geo.rb} +41 -5
  25. data/lib/sc2ai/player/units.rb +32 -2
  26. data/lib/sc2ai/player.rb +8 -48
  27. data/lib/sc2ai/ports.rb +0 -1
  28. data/lib/sc2ai/protocol/_meta_documentation.rb +249 -4
  29. data/lib/sc2ai/protocol/common_pb.rb +2 -23
  30. data/lib/sc2ai/protocol/data_pb.rb +2 -23
  31. data/lib/sc2ai/protocol/debug_pb.rb +2 -24
  32. data/lib/sc2ai/protocol/error_pb.rb +2 -23
  33. data/lib/sc2ai/protocol/extensions/color.rb +1 -1
  34. data/lib/sc2ai/protocol/extensions/point_2_d.rb +4 -0
  35. data/lib/sc2ai/protocol/extensions/position.rb +1 -1
  36. data/lib/sc2ai/protocol/extensions/unit.rb +45 -4
  37. data/lib/sc2ai/protocol/extensions/unit_type_data.rb +8 -0
  38. data/lib/sc2ai/protocol/query_pb.rb +2 -24
  39. data/lib/sc2ai/protocol/raw_pb.rb +2 -24
  40. data/lib/sc2ai/protocol/sc2api_pb.rb +2 -31
  41. data/lib/sc2ai/protocol/score_pb.rb +2 -23
  42. data/lib/sc2ai/protocol/spatial_pb.rb +2 -24
  43. data/lib/sc2ai/protocol/ui_pb.rb +2 -23
  44. data/lib/sc2ai/unit_group/action_ext.rb +2 -2
  45. data/lib/sc2ai/unit_group/filter_ext.rb +36 -1
  46. data/lib/sc2ai/version.rb +1 -1
  47. data/lib/sc2ai.rb +0 -7
  48. data/lib/templates/new/.ladderignore +15 -5
  49. data/lib/templates/new/api/raw.proto +1 -1
  50. data/lib/templates/new/api/ui.proto +1 -1
  51. data/lib/templates/new/my_bot.rb.tt +1 -1
  52. data/sig/minaswan.rbs +10323 -0
  53. data/sig/sc2ai.rbs +1170 -980
  54. metadata +52 -25
  55. data/lib/sc2ai/data.rb +0 -101
  56. data/lib/sc2ai/protocol/extensions/unit_type.rb +0 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c1251b565054a0ef77f14f73faf35e150b2e5b08a7228f9c47b505956fbe8007
4
- data.tar.gz: e27ea67a1cbb29d00e421dff8d387ab6fe7dd570e3f3fd5ba755e45ede5e58f8
3
+ metadata.gz: ff26842dae751021cefd5ec41520a100ee4590e38d10fc96e846513a2d112176
4
+ data.tar.gz: eec5d7f966b086a9b1f164097d15917c4d2e14fd0556215c33dda1f7a446ef1d
5
5
  SHA512:
6
- metadata.gz: d81392a64774357b5755d5a6298d2b672fdead2f60019aa7a63ee5993974f40e3100178f1ff3f43519bdbe53227340318d22cf58d6f49455cbf7dbf8e6c23eca
7
- data.tar.gz: 17ffe6116796d81b8b301aa45e23546399e9d4e3e09608751e5064ce1ac6eea06cb6f8e8229a174dd03adc37fd08c580b468d5a2b5ff670a79eac366475c7767
6
+ metadata.gz: 989364e2517ea677ff53f9da0764e8e6626b9569dee736ee7b3f69723e08e6f4a2fd3c3f864034f380c758c2c80b557adaeb4cae73e34217e437a9493b7860ed
7
+ data.tar.gz: d6836e0492d8df3f63f849b3b4e3710a292783c8250a5be4fe6bdd88a3507203576f9786e48c9196d2b6daaa1bfe53b9a03812a0ee384369882948222457b2f2
@@ -1,5 +1,5 @@
1
1
 
2
- syntax = "proto2";
2
+ syntax = "proto3";
3
3
 
4
4
  package Api;
5
5
 
@@ -1,5 +1,5 @@
1
1
 
2
- syntax = "proto2";
2
+ syntax = "proto3";
3
3
 
4
4
  package Api;
5
5
 
@@ -19,6 +19,7 @@ message AbilityData {
19
19
  optional uint32 remaps_to_ability_id = 7; // This ability id may be represented by the given more generic id.
20
20
 
21
21
  enum Target {
22
+ EnumTargetUnset = 0; // Proto3 compat
22
23
  None = 1; // Does not require a target.
23
24
  Point = 2; // Requires a target position.
24
25
  Unit = 3; // Requires a unit to target. Given by position using feature layers.
@@ -37,6 +38,7 @@ message AbilityData {
37
38
  }
38
39
 
39
40
  enum Attribute {
41
+ EnumAttributeUnset = 0; // Proto3 compat
40
42
  Light = 1;
41
43
  Armored = 2;
42
44
  Biological = 3;
@@ -57,6 +59,7 @@ message DamageBonus {
57
59
 
58
60
  message Weapon {
59
61
  enum TargetType {
62
+ EnumTargetTypeUnset = 0; // Proto3 compat
60
63
  Ground = 1;
61
64
  Air = 2;
62
65
  Any = 3;
@@ -1,5 +1,5 @@
1
1
 
2
- syntax = "proto2";
2
+ syntax = "proto3";
3
3
 
4
4
  package Api;
5
5
 
@@ -67,6 +67,7 @@ message DebugSphere {
67
67
  }
68
68
 
69
69
  enum DebugGameState {
70
+ EnumDebugGameStateUnset = 0; // Proto3 compat
70
71
  show_map = 1;
71
72
  control_enemy = 2;
72
73
  food = 3;
@@ -94,6 +95,7 @@ message DebugKillUnit {
94
95
 
95
96
  message DebugTestProcess {
96
97
  enum Test {
98
+ EnumTestUnset = 0; // Proto3 compat
97
99
  hang = 1;
98
100
  crash = 2;
99
101
  exit = 3;
@@ -108,6 +110,7 @@ message DebugSetScore {
108
110
 
109
111
  message DebugEndGame {
110
112
  enum EndResult {
113
+ EnumEndResultUnset = 0; // Proto3 compat
111
114
  Surrender = 1; // Default if nothing is set. The current player admits defeat.
112
115
  DeclareVictory = 2;
113
116
  }
@@ -116,6 +119,7 @@ message DebugEndGame {
116
119
 
117
120
  message DebugSetUnitValue {
118
121
  enum UnitValue {
122
+ EnumUnitValueUnset = 0; // Proto3 compat
119
123
  Energy = 1;
120
124
  Life = 2;
121
125
  Shields = 3;
@@ -1,9 +1,10 @@
1
1
 
2
- syntax = "proto2";
2
+ syntax = "proto3";
3
3
 
4
4
  package Api;
5
5
 
6
6
  enum ActionResult {
7
+ EnumActionResultUnset = 0; // Proto3 compat
7
8
  Success = 1;
8
9
  NotSupported = 2;
9
10
  Error = 3;
@@ -1,5 +1,5 @@
1
1
 
2
- syntax = "proto2";
2
+ syntax = "proto3";
3
3
 
4
4
  package Api;
5
5
 
@@ -1,5 +1,5 @@
1
1
 
2
- syntax = "proto2";
2
+ syntax = "proto3";
3
3
 
4
4
  package Api;
5
5
 
@@ -10,12 +10,12 @@ import "sc2ai/protocol/common.proto";
10
10
  //
11
11
 
12
12
  message StartRaw {
13
- optional Size2DI map_size = 1; // Width and height of the map.
13
+ optional Size2DI map_size = 1 [unverified_lazy=true]; // Width and height of the map.
14
14
  optional ImageData pathing_grid = 2; // 1 bit bitmap of the pathing grid.
15
- optional ImageData terrain_height = 3; // 1 byte bitmap of the terrain height.
16
- optional ImageData placement_grid = 4; // 1 bit bitmap of the building placement grid.
17
- optional RectangleI playable_area = 5; // The playable cells.
18
- repeated Point2D start_locations = 6; // Possible start locations for players.
15
+ optional ImageData terrain_height = 3 [unverified_lazy=true]; // 1 byte bitmap of the terrain height.
16
+ optional ImageData placement_grid = 4 [unverified_lazy=true]; // 1 bit bitmap of the building placement grid.
17
+ optional RectangleI playable_area = 5 [unverified_lazy=true]; // The playable cells.
18
+ repeated Point2D start_locations = 6 [unverified_lazy=true]; // Possible start locations for players.
19
19
  }
20
20
 
21
21
 
@@ -46,7 +46,7 @@ message PowerSource {
46
46
  message PlayerRaw {
47
47
  repeated PowerSource power_sources = 1;
48
48
  optional Point camera = 2;
49
- repeated uint32 upgrade_ids = 3; // TODO: Add to UI observation?
49
+ repeated uint32 upgrade_ids = 3;
50
50
  }
51
51
 
52
52
  message UnitOrder {
@@ -59,6 +59,7 @@ message UnitOrder {
59
59
  }
60
60
 
61
61
  enum DisplayType {
62
+ EnumDisplayTypeUnset = 0; // Proto3 compat
62
63
  Visible = 1; // Fully visible
63
64
  Snapshot = 2; // Dimmed version of unit left behind after entering fog of war
64
65
  Hidden = 3; // Fully hidden
@@ -66,6 +67,7 @@ enum DisplayType {
66
67
  }
67
68
 
68
69
  enum Alliance {
70
+ EnumAllianceUnset = 0; // Proto3 compat
69
71
  Self = 1;
70
72
  Ally = 2;
71
73
  Neutral = 3;
@@ -1,5 +1,5 @@
1
1
 
2
- syntax = "proto2";
2
+ syntax = "proto3";
3
3
 
4
4
  package Api;
5
5
 
@@ -155,6 +155,7 @@ message Response {
155
155
  }
156
156
 
157
157
  enum Status {
158
+ EnumStatusUnset = 0; // Proto3 compat
158
159
  launched = 1; // Game has been launch and is not yet doing anything.
159
160
  init_game = 2; // Create game has been called, and the host is awaiting players.
160
161
  in_game = 3; // In a single or multiplayer game.
@@ -191,6 +192,7 @@ message LocalMap {
191
192
 
192
193
  message ResponseCreateGame {
193
194
  enum Error {
195
+ EnumResponseCreateGameErrorUnset = 0; // Proto3 compat
194
196
  MissingMap = 1;
195
197
  InvalidMapPath = 2;
196
198
  InvalidMapData = 3;
@@ -231,6 +233,7 @@ message ResponseJoinGame {
231
233
  optional uint32 player_id = 1;
232
234
 
233
235
  enum Error {
236
+ EnumResponseJoinGameErrorUnset = 0; // Proto3 compat
234
237
  MissingParticipation = 1;
235
238
  InvalidObservedPlayerId = 2;
236
239
  MissingOptions = 3;
@@ -258,6 +261,7 @@ message RequestRestartGame {
258
261
  // The defaultRestartGameLoops is specified to be (1<<18) by default
259
262
  message ResponseRestartGame {
260
263
  enum Error {
264
+ EnumResponseRestartGameErrorUnset = 0; // Proto3 compat
261
265
  LaunchError = 1;
262
266
  }
263
267
  optional Error error = 1;
@@ -282,6 +286,7 @@ message RequestStartReplay {
282
286
 
283
287
  message ResponseStartReplay {
284
288
  enum Error {
289
+ EnumResponseStartReplayErrorUnset = 0; // Proto3 compat
285
290
  MissingReplay = 1;
286
291
  InvalidReplayPath = 2;
287
292
  InvalidReplayData = 3;
@@ -301,6 +306,7 @@ message RequestMapCommand {
301
306
 
302
307
  message ResponseMapCommand {
303
308
  enum Error {
309
+ EnumResponseMapCommandErrorUnset = 0; // Proto3 compat
304
310
  NoTriggerError = 1;
305
311
  }
306
312
  optional Error error = 1;
@@ -343,11 +349,11 @@ message RequestGameInfo {
343
349
 
344
350
  message ResponseGameInfo {
345
351
  optional string map_name = 1;
346
- repeated string mod_names = 6;
347
352
  optional string local_map_path = 2;
348
- repeated PlayerInfo player_info = 3;
353
+ repeated PlayerInfo player_info = 3 [unverified_lazy=true];
349
354
  optional StartRaw start_raw = 4; // Populated if Raw interface is enabled.
350
- optional InterfaceOptions options = 5;
355
+ optional InterfaceOptions options = 5 [unverified_lazy=true];
356
+ repeated string mod_names = 6;
351
357
  }
352
358
 
353
359
  //-----------------------------------------------------------------------------
@@ -360,7 +366,7 @@ message ResponseObservation {
360
366
  repeated Action actions = 1; // Actions this player did since the last Observation.
361
367
  repeated ActionError action_errors = 2; // Equivalent of UI "red text" errors.
362
368
  optional Observation observation = 3;
363
- repeated PlayerResult player_result = 4; // Only populated if the game ended during this step.
369
+ repeated PlayerResult player_result = 4 [unverified_lazy=true]; // Only populated if the game ended during this step.
364
370
  repeated ChatReceived chat = 5;
365
371
  }
366
372
 
@@ -453,6 +459,7 @@ message ResponseReplayInfo {
453
459
  optional uint32 base_build = 8;
454
460
 
455
461
  enum Error {
462
+ EnumResponseReplayInfoErrorUnset = 0; // Proto3 compat
456
463
  MissingReplay = 1;
457
464
  InvalidReplayPath = 2;
458
465
  InvalidReplayData = 3;
@@ -484,6 +491,7 @@ message RequestSaveMap {
484
491
 
485
492
  message ResponseSaveMap {
486
493
  enum Error {
494
+ EnumResponseSaveMapErrorUnset = 0; // Proto3 compat
487
495
  InvalidMapData = 1;
488
496
  }
489
497
  optional Error error = 1;
@@ -514,6 +522,7 @@ message ResponseDebug {
514
522
  //
515
523
 
516
524
  enum Difficulty {
525
+ EnumDifficultyUnset = 0; // Proto3 compat
517
526
  VeryEasy = 1;
518
527
  Easy = 2;
519
528
  Medium = 3;
@@ -527,12 +536,14 @@ enum Difficulty {
527
536
  }
528
537
 
529
538
  enum PlayerType {
539
+ EnumPlayerTypeUnset = 0; // Proto3 compat
530
540
  Participant = 1;
531
541
  Computer = 2;
532
542
  Observer = 3;
533
543
  }
534
544
 
535
545
  enum AIBuild {
546
+ EnumAIBuildUnset = 0; // Proto3 compat
536
547
  RandomBuild = 1;
537
548
  Rush = 2;
538
549
  Timing = 3;
@@ -619,11 +630,11 @@ message Observation {
619
630
  optional PlayerCommon player_common = 1;
620
631
  repeated Alert alerts = 10;
621
632
  repeated AvailableAbility abilities = 3; // Abilities available in the selection. Enabled if in this list, disabled otherwise.
622
- optional Score score = 4;
633
+ optional Score score = 4 [unverified_lazy=true];
623
634
 
624
635
  optional ObservationRaw raw_data = 5; // Populated if Raw interface is enabled.
625
636
  optional ObservationFeatureLayer feature_layer_data = 6; // Populated if Feature Layer interface is enabled.
626
- optional ObservationRender render_data = 7; // Populated if Render interface is enabled.
637
+ optional ObservationRender render_data = 7 [unverified_lazy=true]; // Populated if Render interface is enabled.
627
638
  optional ObservationUI ui_data = 8; // Populated if Feature Layer or Render interface is enabled.
628
639
  }
629
640
 
@@ -638,6 +649,7 @@ message Action {
638
649
 
639
650
  message ActionChat {
640
651
  enum Channel {
652
+ EnumChannelUnset = 0; // Proto3 compat
641
653
  Broadcast = 1;
642
654
  Team = 2;
643
655
  }
@@ -681,6 +693,7 @@ message ActionObserverCameraFollowUnits {
681
693
  }
682
694
 
683
695
  enum Alert {
696
+ EnumAlertUnset = 0; // Proto3 compat
684
697
  AlertError = 3;
685
698
  AddOnComplete = 4;
686
699
  BuildingComplete = 5;
@@ -706,6 +719,7 @@ enum Alert {
706
719
  }
707
720
 
708
721
  enum Result {
722
+ EnumResultUnset = 0; // Proto3 compat
709
723
  Victory = 1;
710
724
  Defeat = 2;
711
725
  Tie = 3;
@@ -1,10 +1,11 @@
1
1
 
2
- syntax = "proto2";
2
+ syntax = "proto3";
3
3
 
4
4
  package Api;
5
5
 
6
6
  message Score {
7
7
  enum ScoreType {
8
+ EnumScoreTypeUnset = 0; // Proto3 compat
8
9
  Curriculum = 1; // map generated score (from curriculum maps with special scoring)
9
10
  Melee = 2; // summation of in-progress and current units/buildings value + minerals + vespene
10
11
  }
@@ -1,5 +1,5 @@
1
1
 
2
- syntax = "proto2";
2
+ syntax = "proto3";
3
3
 
4
4
  package Api;
5
5
 
@@ -101,6 +101,7 @@ message ActionSpatialCameraMove {
101
101
  message ActionSpatialUnitSelectionPoint {
102
102
  optional PointI selection_screen_coord = 1;
103
103
  enum Type {
104
+ EnumActionSpatialUnitSelectionPointTypeUnset = 0; // Proto3 compat
104
105
  Select = 1; // Equivalent to normal click. Changes selection to unit.
105
106
  Toggle = 2; // Equivalent to shift+click. Toggle selection of unit.
106
107
  AllType = 3; // Equivalent to control+click. Selects all units of a given type.
@@ -1,5 +1,5 @@
1
1
 
2
- syntax = "proto2";
2
+ syntax = "proto3";
3
3
 
4
4
  package Api;
5
5
 
@@ -52,7 +52,7 @@ message MultiPanel {
52
52
  message CargoPanel {
53
53
  optional UnitInfo unit = 1;
54
54
  repeated UnitInfo passengers = 2;
55
- optional int32 slots_available = 3; // TODO: Change to cargo size
55
+ optional int32 slots_available = 3;
56
56
  }
57
57
 
58
58
  message BuildItem {
@@ -90,6 +90,7 @@ message ActionUI {
90
90
 
91
91
  message ActionControlGroup {
92
92
  enum ControlGroupAction {
93
+ EnumControlGroupActionUnset = 0; // Proto3 compat
93
94
  Recall = 1; // Equivalent to number hotkey. Replaces current selection with control group.
94
95
  Set = 2; // Equivalent to Control + number hotkey. Sets control group to current selection.
95
96
  Append = 3; // Equivalent to Shift + number hotkey. Adds current selection into control group.
@@ -113,6 +114,7 @@ message ActionSelectLarva {
113
114
 
114
115
  message ActionSelectIdleWorker {
115
116
  enum Type {
117
+ EnumActionSelectIdleWorkerTypeUnset = 0; // Proto3 compat
116
118
  Set = 1; // Equivalent to click with no modifiers. Replaces selection with single idle worker.
117
119
  Add = 2; // Equivalent to shift+click. Adds single idle worker to current selection.
118
120
  All = 3; // Equivalent to control+click. Selects all idle workers.
@@ -123,6 +125,7 @@ message ActionSelectIdleWorker {
123
125
 
124
126
  message ActionMultiPanel {
125
127
  enum Type {
128
+ EnumActionMultiPanelTypeUnset = 0; // Proto3 compat
126
129
  SingleSelect = 1; // Click on icon
127
130
  DeselectUnit = 2; // Shift Click on icon
128
131
  SelectAllOfType = 3; // Control Click on icon.
@@ -4,7 +4,7 @@ LABEL service="bot-ruby-local"
4
4
  USER root
5
5
  WORKDIR /root/ruby-builder
6
6
 
7
- ARG RUBY_VERSION=3.3.4
7
+ ARG RUBY_VERSION=3.3.5
8
8
  ARG DEBIAN_DISABLE_RUBYGEMS_INTEGRATION=true
9
9
 
10
10
  # Deps - Ruby build
@@ -29,7 +29,7 @@ WORKDIR /root/ruby-builder
29
29
  RUN rm ruby-$RUBY_VERSION.tar.gz
30
30
  RUN rm -rf ./ruby-$RUBY_VERSION
31
31
  RUN rm yaml-0.2.5.tar.gz
32
- RUN rm -rf ./yaml-0.2.5
32
+ #RUN rm -rf ./yaml-0.2.5
33
33
 
34
34
  # Package config
35
35
  # numo-linalg needs openblas, copy to ruby-prefix/lib/ dir.
@@ -57,9 +57,11 @@ RUN gem install 'sc2ai'
57
57
 
58
58
  FROM debian:12-slim
59
59
  COPY --from=build /root/ruby-builder /root/ruby-builder
60
-
60
+ ENV AIARENA "true"
61
61
  RUN /root/ruby-builder/.ruby/bin/ruby --yjit -v
62
62
 
63
+ RUN /root/ruby-builder/.ruby/bin/bundle config set --global without test development
64
+
63
65
  RUN apt-get update
64
66
  RUN apt-get purge $(aptitude search '~i!~M!~prequired!~pimportant!~R~prequired!~R~R~prequired!~R~pimportant!~R~R~pimportant!busybox!grub!initramfs-tools' | awk '{print $2}') --assume-yes
65
67
  RUN apt-get purge aptitude --assume-yes
@@ -1305,7 +1305,12 @@ module Api
1305
1305
  # @param ability_id [Integer]
1306
1306
  # @return [Integer] either the current id if no remap or the remapped id
1307
1307
  def generic_id(ability_id)
1308
- remap_ids[ability_id] || ability_id
1308
+ @_non_remap_ids ||= {}
1309
+ if @_non_remap_ids[ability_id]
1310
+ @_non_remap_ids[ability_id]
1311
+ else
1312
+ remap_ids[ability_id] || (@_non_remap_ids[ability_id] = ability_id)
1313
+ end
1309
1314
  end
1310
1315
 
1311
1316
  private
@@ -107,6 +107,7 @@ module Sc2
107
107
  def override_unit_data
108
108
  correct_unit_type_costs
109
109
  correct_unit_type_sum
110
+ decorate_unit_type_placement_length
110
111
  end
111
112
 
112
113
  # @private
@@ -254,5 +255,19 @@ module Sc2
254
255
  unit_data
255
256
  end
256
257
  end
258
+
259
+ # @private
260
+ # Adds placement_length to units if applicable
261
+ private def decorate_unit_type_placement_length
262
+ @units.each_value do |unit_type_data|
263
+ unit_type_data.placement_length = 0
264
+ next unless unit_type_data.ability_id
265
+ next unless @abilities[unit_type_data.ability_id]
266
+ footprint_radius = @abilities[unit_type_data.ability_id].footprint_radius
267
+ if footprint_radius
268
+ unit_type_data.placement_length = (footprint_radius * 2.0).to_i
269
+ end
270
+ end
271
+ end
257
272
  end
258
273
  end
@@ -68,7 +68,7 @@ module Api
68
68
  # @param unit_type_id [Integer] the unit which you want to check
69
69
  # @return [Array<Integer>] returns an array of unit type ids as per Api:UnitTypeId
70
70
  def unit_created_from(unit_type_id:)
71
- unit_created_from_data[unit_type_id]
71
+ unit_created_from_data[unit_type_id] || []
72
72
  end
73
73
 
74
74
  # Returns what the unit type an upgrade is researched from
@@ -13,7 +13,13 @@ module Api
13
13
  {ability: Api::AbilityId::UPGRADETOORBITAL_ORBITALCOMMAND,
14
14
  required_building: Api::UnitTypeId::BARRACKS}},
15
15
  Api::UnitTypeId::BARRACKS =>
16
- {Api::UnitTypeId::MARINE =>
16
+ {Api::UnitTypeId::BARRACKSTECHLAB =>
17
+ {ability: Api::AbilityId::BUILD_TECHLAB_BARRACKS,
18
+ requires_placement_position: true},
19
+ Api::UnitTypeId::BARRACKSREACTOR =>
20
+ {ability: Api::AbilityId::BUILD_REACTOR_BARRACKS,
21
+ requires_placement_position: true},
22
+ Api::UnitTypeId::MARINE =>
17
23
  {ability: Api::AbilityId::BARRACKSTRAIN_MARINE},
18
24
  Api::UnitTypeId::REAPER =>
19
25
  {ability: Api::AbilityId::BARRACKSTRAIN_REAPER},
@@ -25,7 +31,13 @@ module Api
25
31
  {ability: Api::AbilityId::BARRACKSTRAIN_MARAUDER,
26
32
  requires_techlab: true}},
27
33
  Api::UnitTypeId::FACTORY =>
28
- {Api::UnitTypeId::HELLION =>
34
+ {Api::UnitTypeId::FACTORYTECHLAB =>
35
+ {ability: Api::AbilityId::BUILD_TECHLAB_FACTORY,
36
+ requires_placement_position: true},
37
+ Api::UnitTypeId::FACTORYREACTOR =>
38
+ {ability: Api::AbilityId::BUILD_REACTOR_FACTORY,
39
+ requires_placement_position: true},
40
+ Api::UnitTypeId::HELLION =>
29
41
  {ability: Api::AbilityId::FACTORYTRAIN_HELLION},
30
42
  Api::UnitTypeId::CYCLONE => {ability: Api::AbilityId::TRAIN_CYCLONE},
31
43
  Api::UnitTypeId::WIDOWMINE =>
@@ -41,7 +53,13 @@ module Api
41
53
  {ability: Api::AbilityId::TRAIN_HELLBAT,
42
54
  required_building: Api::UnitTypeId::ARMORY}},
43
55
  Api::UnitTypeId::STARPORT =>
44
- {Api::UnitTypeId::MEDIVAC =>
56
+ {Api::UnitTypeId::STARPORTTECHLAB =>
57
+ {ability: Api::AbilityId::BUILD_TECHLAB_STARPORT,
58
+ requires_placement_position: true},
59
+ Api::UnitTypeId::STARPORTREACTOR =>
60
+ {ability: Api::AbilityId::BUILD_REACTOR_STARPORT,
61
+ requires_placement_position: true},
62
+ Api::UnitTypeId::MEDIVAC =>
45
63
  {ability: Api::AbilityId::STARPORTTRAIN_MEDIVAC},
46
64
  Api::UnitTypeId::VIKINGFIGHTER =>
47
65
  {ability: Api::AbilityId::STARPORTTRAIN_VIKINGFIGHTER},
@@ -56,6 +74,20 @@ module Api
56
74
  {ability: Api::AbilityId::STARPORTTRAIN_BATTLECRUISER,
57
75
  requires_techlab: true,
58
76
  required_building: Api::UnitTypeId::FUSIONCORE}},
77
+ Api::UnitTypeId::FACTORYFLYING =>
78
+ {Api::UnitTypeId::FACTORYTECHLAB =>
79
+ {ability: Api::AbilityId::BUILD_TECHLAB_FACTORY,
80
+ requires_placement_position: true},
81
+ Api::UnitTypeId::FACTORYREACTOR =>
82
+ {ability: Api::AbilityId::BUILD_REACTOR_FACTORY,
83
+ requires_placement_position: true}},
84
+ Api::UnitTypeId::STARPORTFLYING =>
85
+ {Api::UnitTypeId::STARPORTTECHLAB =>
86
+ {ability: Api::AbilityId::BUILD_TECHLAB_STARPORT,
87
+ requires_placement_position: true},
88
+ Api::UnitTypeId::STARPORTREACTOR =>
89
+ {ability: Api::AbilityId::BUILD_REACTOR_STARPORT,
90
+ requires_placement_position: true}},
59
91
  Api::UnitTypeId::SCV =>
60
92
  {Api::UnitTypeId::COMMANDCENTER =>
61
93
  {ability: Api::AbilityId::TERRANBUILD_COMMANDCENTER,
@@ -104,6 +136,13 @@ module Api
104
136
  Api::UnitTypeId::FUSIONCORE =>
105
137
  {ability: Api::AbilityId::TERRANBUILD_FUSIONCORE,
106
138
  required_building: Api::UnitTypeId::STARPORT,
139
+ requires_placement_position: true}},
140
+ Api::UnitTypeId::BARRACKSFLYING =>
141
+ {Api::UnitTypeId::BARRACKSTECHLAB =>
142
+ {ability: Api::AbilityId::BUILD_TECHLAB_BARRACKS,
143
+ requires_placement_position: true},
144
+ Api::UnitTypeId::BARRACKSREACTOR =>
145
+ {ability: Api::AbilityId::BUILD_REACTOR_BARRACKS,
107
146
  requires_placement_position: true}},
108
147
  Api::UnitTypeId::RAVEN =>
109
148
  {Api::UnitTypeId::AUTOTURRET =>
@@ -780,16 +819,28 @@ module Api
780
819
  Api::UnitTypeId::ORBITALCOMMAND],
781
820
  Api::UnitTypeId::PLANETARYFORTRESS => [Api::UnitTypeId::COMMANDCENTER],
782
821
  Api::UnitTypeId::ORBITALCOMMAND => [Api::UnitTypeId::COMMANDCENTER],
822
+ Api::UnitTypeId::BARRACKSTECHLAB =>
823
+ [Api::UnitTypeId::BARRACKS, Api::UnitTypeId::BARRACKSFLYING],
824
+ Api::UnitTypeId::BARRACKSREACTOR =>
825
+ [Api::UnitTypeId::BARRACKS, Api::UnitTypeId::BARRACKSFLYING],
783
826
  Api::UnitTypeId::MARINE => [Api::UnitTypeId::BARRACKS],
784
827
  Api::UnitTypeId::REAPER => [Api::UnitTypeId::BARRACKS],
785
828
  Api::UnitTypeId::GHOST => [Api::UnitTypeId::BARRACKS],
786
829
  Api::UnitTypeId::MARAUDER => [Api::UnitTypeId::BARRACKS],
830
+ Api::UnitTypeId::FACTORYTECHLAB =>
831
+ [Api::UnitTypeId::FACTORY, Api::UnitTypeId::FACTORYFLYING],
832
+ Api::UnitTypeId::FACTORYREACTOR =>
833
+ [Api::UnitTypeId::FACTORY, Api::UnitTypeId::FACTORYFLYING],
787
834
  Api::UnitTypeId::HELLION => [Api::UnitTypeId::FACTORY],
788
835
  Api::UnitTypeId::CYCLONE => [Api::UnitTypeId::FACTORY],
789
836
  Api::UnitTypeId::WIDOWMINE => [Api::UnitTypeId::FACTORY],
790
837
  Api::UnitTypeId::SIEGETANK => [Api::UnitTypeId::FACTORY],
791
838
  Api::UnitTypeId::THOR => [Api::UnitTypeId::FACTORY],
792
839
  Api::UnitTypeId::HELLIONTANK => [Api::UnitTypeId::FACTORY],
840
+ Api::UnitTypeId::STARPORTTECHLAB =>
841
+ [Api::UnitTypeId::STARPORT, Api::UnitTypeId::STARPORTFLYING],
842
+ Api::UnitTypeId::STARPORTREACTOR =>
843
+ [Api::UnitTypeId::STARPORT, Api::UnitTypeId::STARPORTFLYING],
793
844
  Api::UnitTypeId::MEDIVAC => [Api::UnitTypeId::STARPORT],
794
845
  Api::UnitTypeId::VIKINGFIGHTER => [Api::UnitTypeId::STARPORT],
795
846
  Api::UnitTypeId::LIBERATOR => [Api::UnitTypeId::STARPORT],
data/lib/sc2ai/cli/cli.rb CHANGED
@@ -26,7 +26,7 @@ module Sc2
26
26
  say "Press any key to continue..."
27
27
  ask ""
28
28
 
29
- say "You must accept the Blizzard® Starcraft® II AI and Machine Learning License at"
29
+ say "You must accept the Blizzard® StarCraft® II AI and Machine Learning License at"
30
30
  say "https://blzdistsc2-a.akamaihd.net/AI_AND_MACHINE_LEARNING_LICENSE.html"
31
31
  say "It is PERMISSIVE and grants you freedoms over the standard EULA."
32
32
  say "We do not record this action, but depend on software goverend by that license to continue."
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "async"
4
- require "async/io/stream"
5
4
  require "async/http/endpoint"
6
5
  require "async/websocket"
7
6
  require_relative "connection/requests"
@@ -78,6 +77,7 @@ module Sc2
78
77
  # Add a listener of specific callback type
79
78
  # @param listener [Object]
80
79
  # @param klass [Module<Sc2::Connection::ConnectionListener>,Module<Sc2::Connection::StatusListener>]
80
+ # @return [void]
81
81
  def add_listener(listener, klass:)
82
82
  @listeners[klass.to_s] ||= []
83
83
  @listeners[klass.to_s].push(listener)
@@ -53,6 +53,8 @@ module Sc2
53
53
  @clients[player_index] = nil
54
54
  end
55
55
 
56
+ # Stops all clients
57
+ # @return [void]
56
58
  def stop_all
57
59
  @clients.compact.each do |client|
58
60
  client.stop
@@ -10,17 +10,6 @@ module Sc2
10
10
  # Callback when game status changes
11
11
  def on_status_change(status)
12
12
  Sc2.logger.debug { "Status from Match: #{status}" }
13
-
14
- # if status == :ended
15
- # # Go through each player, looking for result if we don't have one.
16
- # api_players.each do |player|
17
- # Sc2.logger.debug { "TODO: Get results for players" }
18
- # # result = player.result
19
- # Sc2.logger.debug { "Leaving Game and Disconnecting players" }
20
- # player.leave_game
21
- # player.disconnect
22
- # end
23
- # end
24
13
  end
25
14
 
26
15
  # @!attribute players Sets the Player(s) for the match
@@ -8,7 +8,7 @@ module Async
8
8
  def initialize(*args, **options)
9
9
  # Setup a cross-thread notification pipe - nio4r can't monitor pids unfortunately:
10
10
  pipe = ::IO.pipe
11
- @input = Async::IO::Generic.new(pipe.first)
11
+ @input = pipe.first
12
12
  @output = pipe.last
13
13
 
14
14
  @exit_status = nil
data/lib/sc2ai/paths.rb CHANGED
@@ -7,7 +7,7 @@ module Sc2
7
7
  # Helps determine common paths to sc2 install dir, executable and maps.
8
8
  # It maintains some semblance of compatibility with python-sc2 config
9
9
  #
10
- # ENV['SC2PATH'] can be set manually to Starcraft 2 base directory for Linux
10
+ # ENV['SC2PATH'] can be set manually to StarCraft 2 base directory for Linux
11
11
  # ENV['SC2PF'] can and should be manually set to "WineLinux" when running Wine
12
12
  # Credit to Hannes, Sean and Burny for setting the standard
13
13
  class Paths