コード例 #1
0
        public override void OnFrame()
        {
            CheckRequirements();
            if (Active)
            {
                if (VBot.Bot.Observation.Observation.GameLoop - 32 > lastAttackFrame)
                {
                    foreach (var agent in Controller.GetAgents(Units.ArmyUnits).Where(a => !a.Busy))
                    {
                        if (!AssignedAgents.Contains(agent))
                        {
                            AssignedAgents.Add(agent);
                        }
                    }

                    var armyTags = AssignedAgents.Select(a => a.Unit.Tag);
                    targetLocation = VBot.Bot.Map.TargetAttackLocation;
                    var unitCommand = new ActionRawUnitCommand();
                    unitCommand.AbilityId           = (int)Abilities.ATTACK;
                    unitCommand.TargetWorldSpacePos = targetLocation;
                    unitCommand.UnitTags.AddRange(armyTags);
                    lastAttackFrame = VBot.Bot.Observation.Observation.GameLoop;
                    VBot.Bot.AddAction(unitCommand);
                }
            }
        }
コード例 #2
0
ファイル: MainCode.cs プロジェクト: nikwelik/ExampleBot
        public void BuildPylon(ResponseObservation observation, List <Action> actions)
        {
            var probes = observation.Observation.RawData.Units.Where(d => d.UnitType == UnitTypes.PROBE && d.Alliance == Alliance.Self).ToList();

            if (probes.Count() > 16 && observation.Observation.PlayerCommon.FoodCap < observation.Observation.PlayerCommon.FoodUsed + 8 && observation.Observation.PlayerCommon.Minerals >= 100)
            {
                PylonCount++;
                var command = new ActionRawUnitCommand
                {
                    AbilityId           = 881, //pylon
                    TargetWorldSpacePos = new Point2D {
                        X = MainPylon.Pos.X + (PylonCount * 2), Y = MainPylon.Pos.Y
                    },
                    QueueCommand = true
                };

                command.UnitTags.Add(MainBuildingProbe(probes));


                actions.Add(new Action {
                    ActionRaw = new ActionRaw {
                        UnitCommand = command
                    }
                });
            }
        }
コード例 #3
0
ファイル: Bot.cs プロジェクト: nikitinmv1987/ExampleBot
        private void MoveOver(ResponseObservation observation, List <Action> actions)
        {
            var over = observation.Observation.RawData.Units.Where(d => d.UnitType == UnitTypes.OVERLORD && d.Alliance == Alliance.Self && d.Orders.Count() == 0).FirstOrDefault();

            if (over == null)
            {
                return;
            }

            var newBase = Bases.Where(b => !b.Taken && !b.OverSent).OrderBy(b => b.DistanceToMain).FirstOrDefault();

            if (newBase == null)
            {
                return;
            }

            newBase.OverSent = true;

            var command = new ActionRawUnitCommand
            {
                AbilityId           = 1,
                TargetWorldSpacePos = new Point2D {
                    X = newBase.Position.X, Y = newBase.Position.Y
                },
            };

            command.UnitTags.Add(over.Tag);
            command.QueueCommand = true;

            actions.Add(new Action {
                ActionRaw = new ActionRaw {
                    UnitCommand = command
                }
            });
        }
コード例 #4
0
ファイル: MainCode.cs プロジェクト: nikwelik/ExampleBot
        public void AttackProxy(ResponseObservation observation, List <Action> actions)
        {
            var zealots = observation.Observation.RawData.Units.Where(d => d.UnitType == UnitTypes.ZEALOT && d.Alliance == Alliance.Self);

            foreach (var zealot in zealots)
            {
                if (zealot.Orders.Count() != 0)
                {
                    continue;
                }
                var RandomMineral = observation.Observation.RawData.Units.Where(d => d.UnitType == UnitTypes.MINERAL_FIELD).FirstOrDefault();
                var command       = new ActionRawUnitCommand
                {
                    AbilityId           = 23, //attack,
                    TargetWorldSpacePos = new Point2D {
                        X = RandomMineral.Pos.X, Y = RandomMineral.Pos.Y
                    },
                };

                command.UnitTags.Add(zealot.Tag);
                command.QueueCommand = true;

                actions.Add(new Action {
                    ActionRaw = new ActionRaw {
                        UnitCommand = command
                    }
                });
            }
        }
コード例 #5
0
ファイル: MainCode.cs プロジェクト: nikwelik/ExampleBot
        public void BuildGateWay(ResponseObservation observation, List <Action> actions)
        {
            var probes = observation.Observation.RawData.Units.Where(d => d.UnitType == UnitTypes.PROBE && d.Alliance == Alliance.Self).ToList();

            if (probes.Count() <= 15)
            {
                return;
            }

            if (GateWayCount < 4 && observation.Observation.PlayerCommon.Minerals >= 150)
            {
                var command = new ActionRawUnitCommand
                {
                    AbilityId           = 883, //gateway
                    TargetWorldSpacePos = new Point2D {
                        X = MainPylon.Pos.X - 6 + (GateWayCount * 3), Y = MainPylon.Pos.Y - 3
                    },
                    QueueCommand = true
                };

                command.UnitTags.Add(MainBuildingProbe(probes));


                actions.Add(new Action {
                    ActionRaw = new ActionRaw {
                        UnitCommand = command
                    }
                });
                GateWayCount++;
            }
        }
コード例 #6
0
ファイル: MainCode.cs プロジェクト: nikwelik/ExampleBot
        public void BuildZealots(ResponseObservation observation, List <Action> actions)
        {
            var gateways = observation.Observation.RawData.Units.Where(d => d.UnitType == UnitTypes.GATEWAY && d.Alliance == Alliance.Self).ToList();

            if (gateways.Count() == 0)
            {
                return;
            }
            foreach (var gateway in gateways)
            {
                if (observation.Observation.PlayerCommon.Minerals >= 100 && gateway.Orders.Count() < 1)
                {
                    var command = new ActionRawUnitCommand
                    {
                        AbilityId = 916 // zealot
                    };
                    command.UnitTags.Add(gateway.Tag);
                    command.QueueCommand = true;

                    actions.Add(new Action {
                        ActionRaw = new ActionRaw {
                            UnitCommand = command
                        }
                    });
                }
            }
        }
コード例 #7
0
ファイル: Bot.cs プロジェクト: nikitinmv1987/ExampleBot
        private void BuildZerlings(ResponseObservation observation, List <Action> actions)
        {
            var pool = observation.Observation.RawData.Units.Where(d => d.UnitType == UnitTypes.SPAWNING_POOL && d.Alliance == Alliance.Self).FirstOrDefault();

            if (pool == null)
            {
                return;
            }

            foreach (var l in observation.Observation.RawData.Units.Where(d => d.UnitType == UnitTypes.LARVA && d.Alliance == Alliance.Self))
            {
                var command = new ActionRawUnitCommand
                {
                    AbilityId = 1343
                };

                command.UnitTags.Add(l.Tag);
                command.QueueCommand = true;

                actions.Add(new Action {
                    ActionRaw = new ActionRaw {
                        UnitCommand = command
                    }
                });
            }
        }
コード例 #8
0
ファイル: Bot.cs プロジェクト: nikitinmv1987/ExampleBot
        private void BuildQueen(ResponseObservation observation, List <Action> actions)
        {
            if (observation.Observation.PlayerCommon.Minerals < 200)
            {
                return;
            }

            if (AbilityInProgress(observation, UnitTypes.HATA_ABILITY_BUILD_QUEEN))
            {
                return;
            }

            var hata = observation.Observation.RawData.Units.Where(d => d.UnitType == UnitTypes.HATCHERY && d.Alliance == Alliance.Self).FirstOrDefault();

            if (hata == null)
            {
                return;
            }

            var command = new ActionRawUnitCommand
            {
                AbilityId    = UnitTypes.HATA_ABILITY_BUILD_QUEEN,
                QueueCommand = true
            };

            command.UnitTags.Add(hata.Tag);

            actions.Add(new Action {
                ActionRaw = new ActionRaw {
                    UnitCommand = command
                }
            });
        }
コード例 #9
0
ファイル: Bot.cs プロジェクト: nikitinmv1987/ExampleBot
        private void BuildDrones(ResponseObservation observation, List <Action> actions)
        {
            var drones = observation.Observation.RawData.Units.Where(d => d.UnitType == UnitTypes.DRONE && d.Alliance == Alliance.Self);

            var pool = observation.Observation.RawData.Units.Where(d => d.UnitType == UnitTypes.SPAWNING_POOL && d.Alliance == Alliance.Self).FirstOrDefault();


            if (pool != null && observation.Observation.PlayerCommon.FoodArmy < observation.Observation.PlayerCommon.FoodWorkers + 10)
            {
                return;
            }

            foreach (var l in observation.Observation.RawData.Units.Where(d => d.UnitType == UnitTypes.LARVA && d.Alliance == Alliance.Self))
            {
                var command = new ActionRawUnitCommand
                {
                    AbilityId = 1342
                };

                command.UnitTags.Add(l.Tag);
                command.QueueCommand = true;

                actions.Add(new Action {
                    ActionRaw = new ActionRaw {
                        UnitCommand = command
                    }
                });
            }
        }
コード例 #10
0
ファイル: Bot.cs プロジェクト: nikitinmv1987/ExampleBot
        private void AttackZerglings(ResponseObservation observation, List <Action> actions)
        {
            var hata = observation.Observation.RawData.Units.Where(d => d.UnitType == UnitTypes.HATCHERY && d.Alliance == Alliance.Self).FirstOrDefault();

            var zerglings = observation.Observation.RawData.Units.Where(d => d.UnitType == UnitTypes.ZERGLING && d.Alliance == Alliance.Self);

            if (zerglings.Count() < 40)
            {
                return;
            }

            foreach (var zergling in zerglings)
            {
                var command = new ActionRawUnitCommand
                {
                    AbilityId           = 23, //1155 - pool,
                    TargetWorldSpacePos = EnemyStartPosition,
                };

                command.UnitTags.Add(zergling.Tag);
                command.QueueCommand = true;

                actions.Add(new Action {
                    ActionRaw = new ActionRaw {
                        UnitCommand = command
                    }
                });
            }
        }
コード例 #11
0
ファイル: Bot.cs プロジェクト: nikitinmv1987/ExampleBot
        private void BuildHata(ResponseObservation observation, List <Action> actions)
        {
            if (observation.Observation.PlayerCommon.Minerals < 300)
            {
                return;
            }

            if (Bases.Where(b => b.Taken).Count() > 2)
            {
                return;
            }


            var newBase = GetBaseForPool();

            var command = new ActionRawUnitCommand
            {
                AbilityId           = 1152,
                TargetWorldSpacePos = new Point2D {
                    X = newBase.Position.X, Y = newBase.Position.Y
                },
                QueueCommand = true
            };

            command.UnitTags.Add(GetBuldingDrone(observation).Tag);

            actions.Add(new Action {
                ActionRaw = new ActionRaw {
                    UnitCommand = command
                }
            });
        }
コード例 #12
0
ファイル: Agent.cs プロジェクト: vbergaaa/vBergaaaBot
        public void Order(uint abilityId, Point2D position)
        {
            // ignore similar orders
            if (Unit.Orders.Count > 0)
            {
                if (Unit.Orders[0].AbilityId == abilityId)
                {
                    return;
                }
            }

            // update resources if macro task
            if (Abilities.CreatesUnit.ContainsKey(abilityId))
            {
                var unitInfo = VBot.Bot.Data.Units[(int)Abilities.CreatesUnit[abilityId]];
                VBot.Bot.ReservedMinerals += (int)unitInfo.MineralCost;
                VBot.Bot.ReservedGas      += (int)unitInfo.VespeneCost;
                VBot.Bot.ReservedSupply   += (int)unitInfo.FoodRequired - (int)unitInfo.FoodProvided;
            }

            Command = new ActionRawUnitCommand
            {
                AbilityId           = (int)abilityId,
                TargetWorldSpacePos = position
            };
            Command.UnitTags.Add(Unit.Tag);
            VBot.Bot.AddAction(Command);
            LastCommandFrame = VBot.Bot.Observation.Observation.GameLoop;
        }
コード例 #13
0
        public void Order(int ability, Point2D target)
        {
            // Make sure blink doesn't get cancelled.
            if (LastAbility == Abilities.BLINK && Tyr.Bot.Frame - LastOrderFrame <= 20)
            {
                return;
            }
            // Short delay between orders to prevent order spam.
            if (LastAbility == ability && Tyr.Bot.Frame - LastOrderFrame <= 5)
            {
                return;
            }

            LastAbility = ability;

            // Ignore orders that are the same or similar to existing orders.
            if (target != null &&
                Unit.Orders.Count != 0 &&
                Unit.Orders[0].TargetWorldSpacePos != null &&
                SC2Util.DistanceGrid(Unit.Orders[0].TargetWorldSpacePos, target) <= 3 &&
                Unit.Orders[0].AbilityId == ability)
            {
                return;
            }

            LastOrderFrame              = Tyr.Bot.Frame;
            Command                     = new ActionRawUnitCommand();
            Command.AbilityId           = ability;
            Command.TargetWorldSpacePos = target;
            Command.UnitTags.Add(Unit.Tag);
        }
コード例 #14
0
        public void AddAction(ActionRawUnitCommand action)
        {
            var a = new Action();

            a.ActionRaw             = new ActionRaw();
            a.ActionRaw.UnitCommand = action;
            AddAction(a);
        }
コード例 #15
0
        public override IEnumerable <SC2APIProtocol.Action> PerformActions(int frame)
        {
            var actions = new List <SC2APIProtocol.Action>();

            if (WallPoints != null)
            {
                var buildings = ActiveUnitData.Commanders.Where(u => u.Value.UnitCalculation.Attributes.Contains(Attribute.Structure) && WallPoints.Any(point => Vector2.DistanceSquared(new Vector2(point.X, point.Y), u.Value.UnitCalculation.Position) < 1)).Select(b => b.Value);

                if (buildings.Count() == 0)
                {
                    Ended = true;
                    Disable();
                }

                var attacked = false;

                foreach (var building in buildings)
                {
                    if (building != null)
                    {
                        if (building.UnitCalculation.Unit.BuildProgress < 1)
                        {
                            var action = building.Order(frame, Abilities.CANCEL);
                            if (action != null)
                            {
                                actions.AddRange(action);
                            }
                        }
                        else
                        {
                            if (!attacked)
                            {
                                var command = new ActionRawUnitCommand();
                                foreach (var commander in UnitCommanders)
                                {
                                    command.UnitTags.Add(commander.UnitCalculation.Unit.Tag);
                                }
                                command.AbilityId     = (int)Abilities.ATTACK;
                                command.TargetUnitTag = building.UnitCalculation.Unit.Tag;

                                var action = new SC2APIProtocol.Action
                                {
                                    ActionRaw = new ActionRaw
                                    {
                                        UnitCommand = command
                                    }
                                };
                                actions.Add(action);
                                attacked = true;
                            }
                        }
                    }
                }
            }

            return(actions);
        }
コード例 #16
0
ファイル: Bot.cs プロジェクト: nikitinmv1987/ExampleBot
        public void MineralOptimizationByNikita(ResponseObservation observation, List <Action> actions)
        {
            var hatas = observation.Observation.RawData.Units.Where(d => d.UnitType == UnitTypes.HATCHERY && d.Alliance == Alliance.Self).ToList();

            if (hatas.Count() < 2)
            {
                return;
            }

            foreach (var h in hatas)
            {
                if (h.AssignedHarvesters <= h.IdealHarvesters)
                {
                    continue;
                }

                var boringHata = observation.Observation.RawData.Units.Where(d => d.UnitType == UnitTypes.HATCHERY && d.Alliance == Alliance.Self && d.IdealHarvesters > d.AssignedHarvesters).FirstOrDefault();

                if (boringHata == null)
                {
                    return;
                }

                var drones = observation.Observation.RawData.Units.Where(d => d.UnitType == UnitTypes.DRONE && d.Alliance == Alliance.Self);

                foreach (var d in drones)
                {
                    if (IsNeightbors(d, h) && d.Orders.Where(a => a.AbilityId == 1183).Any())
                    {
                        var bse = Bases.Where(b => b.BaseId == boringHata.Tag).FirstOrDefault();

                        Unit mineralSent = GetClosestMineral(observation, boringHata.Pos);

                        var command = new ActionRawUnitCommand
                        {
                            AbilityId           = 1183,
                            TargetWorldSpacePos = new Point2D {
                                X = mineralSent.Pos.X, Y = mineralSent.Pos.Y
                            },
                            QueueCommand  = true,
                            TargetUnitTag = mineralSent.Tag
                        };

                        command.UnitTags.Add(d.Tag);

                        actions.Add(new Action {
                            ActionRaw = new ActionRaw {
                                UnitCommand = command
                            }
                        });
                        return;
                    }
                }
            }
        }
コード例 #17
0
ファイル: CombatManager.cs プロジェクト: schmidtgit/Abathur
        /// <inheritdoc />
        public void UseTargetlessAbility(int abilityId, ulong unit, bool queue = false)
        {
            var command = new ActionRawUnitCommand {
                AbilityId    = abilityId,
                QueueCommand = queue,
                UnitTags     = { unit }
            };

            rawManager.QueueActions(new Action {
                ActionRaw = new ActionRaw {
                    UnitCommand = command
                }
            });
        }
コード例 #18
0
ファイル: MainCode.cs プロジェクト: nikwelik/ExampleBot
        public void AttackZealots(ResponseObservation observation, List <Action> actions)
        {
            if (MainIsKilled)
            {
                AttackProxy(observation, actions);
                return;
            }
            var nexus = observation.Observation.RawData.Units.Where(d => d.UnitType == UnitTypes.NEXUS && d.Alliance == Alliance.Self).FirstOrDefault();

            var zealots = observation.Observation.RawData.Units.Where(d => d.UnitType == UnitTypes.ZEALOT && d.Alliance == Alliance.Self);

            if (zealots.Count() > 20)
            {
                MainIsKilled = true;
            }

            var EnemyPositionX = 160.5f;
            var EnemyPositionY = 46.5f;

            if (nexus.Pos.X == 160.5 && nexus.Pos.Y == 46.5)
            {
                EnemyPositionX = 55.5f;
                EnemyPositionY = 157.5f;
            }
            if (zealots.Count() < 5)
            {
                return;
            }

            foreach (var zealot in zealots)
            {
                var command = new ActionRawUnitCommand
                {
                    AbilityId           = 23, //attack,
                    TargetWorldSpacePos = new Point2D {
                        X = EnemyPositionX, Y = EnemyPositionY
                    },
                };

                command.UnitTags.Add(zealot.Tag);
                command.QueueCommand = true;

                actions.Add(new Action {
                    ActionRaw = new ActionRaw {
                        UnitCommand = command
                    }
                });
            }
        }
コード例 #19
0
ファイル: Bot.cs プロジェクト: nikitinmv1987/ExampleBot
        private void BuildPool(ResponseObservation observation, List <Action> actions)
        {
            var hatas = observation.Observation.RawData.Units.Where(d => d.UnitType == UnitTypes.HATCHERY && d.Alliance == Alliance.Self).ToList();

            if (hatas.Count() < 2)
            {
                return;
            }

            int buildPoolAbilityId = 1155; //pool

            var pool = observation.Observation.RawData.Units.Where(d => d.UnitType == UnitTypes.SPAWNING_POOL && d.Alliance == Alliance.Self).FirstOrDefault();

            if (pool != null)
            {
                return;
            }

            if (observation.Observation.PlayerCommon.Minerals < 200)
            {
                return;
            }

            var b2 = GetBaseForPool();

            if (b2 == null)
            {
                return;
            }

            //var hata = observation.Observation.RawData.Units.Where(d => d.UnitType == UnitTypes.HATCHERY && d.Alliance == Alliance.Self).FirstOrDefault();

            var command = new ActionRawUnitCommand
            {
                AbilityId           = buildPoolAbilityId,
                TargetWorldSpacePos = new Point2D {
                    X = b2.Position.X + 4, Y = b2.Position.Y + 1
                },
                QueueCommand = true
            };

            command.UnitTags.Add(GetBuldingDrone(observation).Tag);

            actions.Add(new Action {
                ActionRaw = new ActionRaw {
                    UnitCommand = command
                }
            });
        }
コード例 #20
0
ファイル: CombatManager.cs プロジェクト: schmidtgit/Abathur
        /// <inheritdoc />
        public void Attack(ulong sourceUnit, ulong targetUnit, bool queue = false)
        {
            var command = new ActionRawUnitCommand {
                AbilityId     = BlizzardConstants.Ability.GeneralAttack,
                QueueCommand  = queue,
                TargetUnitTag = targetUnit,
                UnitTags      = { sourceUnit }
            };

            rawManager.QueueActions(new Action {
                ActionRaw = new ActionRaw {
                    UnitCommand = command
                }
            });
        }
コード例 #21
0
ファイル: CombatManager.cs プロジェクト: schmidtgit/Abathur
        /// <inheritdoc />
        public void UseTargetedAbility(int abilityId, ulong sourceUnit, ulong targetUnit, bool queue = false)
        {
            var command = new ActionRawUnitCommand {
                AbilityId     = abilityId,
                QueueCommand  = queue,
                TargetUnitTag = targetUnit,
                UnitTags      = { sourceUnit }
            };

            rawManager.QueueActions(new Action {
                ActionRaw = new ActionRaw {
                    UnitCommand = command
                }
            });
        }
コード例 #22
0
ファイル: CombatManager.cs プロジェクト: schmidtgit/Abathur
        /// <inheritdoc />
        public void UsePointCenteredAbility(int abilityId, ulong unit, Point2D point, bool queue = false)
        {
            var command = new ActionRawUnitCommand {
                AbilityId           = abilityId,
                QueueCommand        = queue,
                TargetWorldSpacePos = point,
                UnitTags            = { unit }
            };

            rawManager.QueueActions(new Action {
                ActionRaw = new ActionRaw {
                    UnitCommand = command
                }
            });
        }
コード例 #23
0
ファイル: CombatManager.cs プロジェクト: schmidtgit/Abathur
        /// <inheritdoc />
        public void AttackMove(ulong unit, Point2D point, bool queue = false)
        {
            var command = new ActionRawUnitCommand {
                AbilityId           = BlizzardConstants.Ability.GeneralAttack,
                QueueCommand        = queue,
                TargetWorldSpacePos = point,
                UnitTags            = { unit }
            };

            rawManager.QueueActions(new Action {
                ActionRaw = new ActionRaw {
                    UnitCommand = command
                }
            });
        }
コード例 #24
0
        private void MoveUnit(IUnit unit, Point2D point)
        {
            var command = new ActionRawUnitCommand {
                AbilityId           = BlizzardConstants.Ability.Move,
                QueueCommand        = true,
                TargetWorldSpacePos = point,
                UnitTags            = { unit.Tag }
            };

            rawManager.QueueActions(new Action {
                ActionRaw = new ActionRaw {
                    UnitCommand = command
                }
            });
        }
コード例 #25
0
        internal void ArchonMerge(Agent agent)
        {
            // Short delay between orders to prevent order spam.
            if (Tyr.Bot.Frame - LastOrderFrame <= 5)
            {
                return;
            }

            agent.Command = null;

            LastOrderFrame    = Tyr.Bot.Frame;
            Command           = new ActionRawUnitCommand();
            Command.AbilityId = 1766;
            Command.UnitTags.Add(Unit.Tag);
            Command.UnitTags.Add(agent.Unit.Tag);
        }
コード例 #26
0
ファイル: Agent.cs プロジェクト: Geertien/BoreasSc2
        internal void ArchonMerge(Agent agent)
        {
            // Short delay between orders to prevent order spam.
            if (Tyr.Bot.Frame - lastOrderFrame <= 5)
            {
                return;
            }

            agent.Command = null;

            lastOrderFrame = Tyr.Bot.Frame;
            System.Console.WriteLine("Merging archon.");
            Command           = new ActionRawUnitCommand();
            Command.AbilityId = 1766;
            Command.UnitTags.Add(Unit.Tag);
            Command.UnitTags.Add(agent.Unit.Tag);
        }
コード例 #27
0
ファイル: UnitCommander.cs プロジェクト: sharknice/Sharky
        public List <SC2APIProtocol.Action> UnloadSpecificUnit(int frame, Abilities ability, ulong targetTag, bool allowSpam = false)
        {
            if (!allowSpam && ability == LastAbility && targetTag == LastTargetTag && AbilityOrderTimes[ability] > frame - SpamFrames)
            {
                return(null); // if new action is exactly the same, don't do anything to prevent apm spam
            }

            var passenger = UnitCalculation.Unit.Passengers.Where(p => p.Tag == targetTag).FirstOrDefault();

            if (passenger == null)
            {
                return(null);
            }

            var selectionCommand = new ActionRawUnitCommand();

            selectionCommand.UnitTags.Add(UnitCalculation.Unit.Tag);
            selectionCommand.AbilityId = 0;
            var selectAction = new SC2APIProtocol.Action
            {
                ActionRaw = new ActionRaw
                {
                    UnitCommand = selectionCommand
                },
            };

            var unloadAction = new SC2APIProtocol.Action
            {
                ActionUi = new ActionUI
                {
                    CargoPanel = new ActionCargoPanelUnload {
                        UnitIndex = UnitCalculation.Unit.Passengers.IndexOf(passenger)
                    }
                },
            };

            LastAbility                = ability;
            LastTargetLocation         = null;
            LastTargetTag              = targetTag;
            AbilityOrderTimes[ability] = frame;
            LastOrderFrame             = frame;

            return(new List <SC2APIProtocol.Action> {
                selectAction, unloadAction
            });
        }
コード例 #28
0
ファイル: MainCode.cs プロジェクト: nikwelik/ExampleBot
        public void MoveToProxyLocation(ResponseObservation observation, List <Action> actions)
        {
            var nexus = observation.Observation.RawData.Units.Where(d => d.UnitType == UnitTypes.NEXUS && d.Alliance == Alliance.Self).FirstOrDefault();

            var probes = observation.Observation.RawData.Units.Where(d => d.UnitType == UnitTypes.PROBE && d.Alliance == Alliance.Self).ToList();

            if (nexus.Pos.X == 160.5 && nexus.Pos.Y == 46.5)
            {
                var command = new ActionRawUnitCommand
                {
                    AbilityId           = 1, //move,
                    TargetWorldSpacePos = new Point2D {
                        X = 115, Y = 155
                    },
                };

                command.UnitTags.Add(MainBuildingProbe(probes));
                command.QueueCommand = true;

                actions.Add(new Action {
                    ActionRaw = new ActionRaw {
                        UnitCommand = command
                    }
                });
            }
            else
            {
                var command = new ActionRawUnitCommand
                {
                    AbilityId           = 1, //move,
                    TargetWorldSpacePos = new Point2D {
                        X = 100, Y = 50
                    },
                };

                command.UnitTags.Add(MainBuildingProbe(probes));
                command.QueueCommand = true;

                actions.Add(new Action {
                    ActionRaw = new ActionRaw {
                        UnitCommand = command
                    }
                });
            }
        }
コード例 #29
0
ファイル: UnitCommander.cs プロジェクト: sharknice/Sharky
        public SC2APIProtocol.Action Merge(ulong targetTag)
        {
            var command = new ActionRawUnitCommand();

            command.AbilityId = (int)Abilities.MORPH_ARCHON;
            command.UnitTags.Add(UnitCalculation.Unit.Tag);
            command.UnitTags.Add(targetTag);

            var action = new SC2APIProtocol.Action
            {
                ActionRaw = new ActionRaw
                {
                    UnitCommand = command
                }
            };

            return(action);
        }
コード例 #30
0
        public void Order(int ability, ulong targetTag)
        {
            // Make sure blink doesn't get cancelled.
            if (LastAbility == Abilities.BLINK && Tyr.Bot.Frame - LastOrderFrame <= 20)
            {
                return;
            }
            // Ignore orders that are the same or similar to existing orders.
            if (Unit.Orders.Count != 0 && Unit.Orders[0].TargetUnitTag == targetTag && Unit.Orders[0].AbilityId == ability)
            {
                return;
            }

            LastAbility = ability;

            Command               = new ActionRawUnitCommand();
            Command.AbilityId     = ability;
            Command.TargetUnitTag = targetTag;
            Command.UnitTags.Add(Unit.Tag);
        }