Example #1
0
        public override void OnStart(ResponseGameInfo gameInfo, ResponseData data, ResponsePing pingResponse, ResponseObservation observation, uint playerId, string opponentId)
        {
            GetPlayerInfo(gameInfo, playerId, opponentId);

            if (EnemyPlayerService.Tournament.Enabled)
            {
                foreach (var buildSequence in EnemyPlayerService.Tournament.BuildSequences)
                {
                    BuildChoices[ActualRace].BuildSequences[buildSequence.Key] = buildSequence.Value;
                }
            }

            var buildSequences = BuildChoices[ActualRace].BuildSequences[EnemyRace.ToString()];

            if (!string.IsNullOrWhiteSpace(EnemyPlayer.Name) && BuildChoices[ActualRace].BuildSequences.ContainsKey(EnemyPlayer.Name))
            {
                buildSequences = BuildChoices[ActualRace].BuildSequences[EnemyPlayer.Name];
            }

            MapName       = gameInfo.MapName;
            BuildSequence = BuildDecisionService.GetBestBuild(EnemyPlayer, buildSequences, MapName, EnemyPlayerService.Enemies, EnemyRace);

            BuildHistory = new Dictionary <int, string>();
            SwitchBuild(BuildSequence.First(), 0);
        }
Example #2
0
        public override void OnStart(ResponseGameInfo gameInfo, ResponseData data, ResponsePing pingResponse, ResponseObservation observation, uint playerId, string opponentId)
        {
            var placementGrid = gameInfo.StartRaw.PlacementGrid;
            var heightGrid    = gameInfo.StartRaw.TerrainHeight;
            var pathingGrid   = gameInfo.StartRaw.PathingGrid;

            MapData.MapWidth  = pathingGrid.Size.X;
            MapData.MapHeight = pathingGrid.Size.Y;
            MapData.Map       = new Dictionary <int, Dictionary <int, MapCell> >();
            for (var x = 0; x < pathingGrid.Size.X; x++)
            {
                var row = new Dictionary <int, MapCell>();
                for (var y = 0; y < pathingGrid.Size.Y; y++)
                {
                    var walkable  = GetDataValueBit(pathingGrid, x, y);
                    var height    = GetDataValueByte(heightGrid, x, y);
                    var placeable = GetDataValueBit(placementGrid, x, y);
                    row[y] = new MapCell {
                        X = x, Y = y, Walkable = walkable, TerrainHeight = height, Buildable = placeable, HasCreep = false, CurrentlyBuildable = placeable, EnemyAirDpsInRange = 0, EnemyGroundDpsInRange = 0, InEnemyVision = false, InSelfVision = false, InEnemyDetection = false, Visibility = 0, LastFrameVisibility = 0, NumberOfAllies = 0, NumberOfEnemies = 0, PoweredBySelfPylon = false, SelfAirDpsInRange = 0, SelfGroundDpsInRange = 0, LastFrameAlliesTouched = 0, PathBlocked = false
                    };
                }
                MapData.Map[x] = row;
            }
            MapData.PartialWallData = WallDataService.GetPartialWallData(gameInfo.MapName);
            MapData.BlockWallData   = WallDataService.GetBlockWallData(gameInfo.MapName);
            MapData.MapName         = gameInfo.MapName;
        }
Example #3
0
        public override void OnStart(ResponseGameInfo gameInfo, ResponseData data, ResponsePing pingResponse, ResponseObservation observation, uint playerId, string opponentId)
        {
            foreach (var location in gameInfo.StartRaw.StartLocations)
            {
                TargetingData.AttackPoint        = location;
                TargetingData.EnemyMainBasePoint = location;
            }
            foreach (var unit in observation.Observation.RawData.Units.Where(u => u.Alliance == Alliance.Self && SharkyUnitData.UnitData[(UnitTypes)u.UnitType].Attributes.Contains(SC2APIProtocol.Attribute.Structure)))
            {
                TargetingData.MainDefensePoint = new Point2D {
                    X = unit.Pos.X, Y = unit.Pos.Y
                };

                var chokePoint = ChokePointService.FindDefensiveChokePoint(new Point2D {
                    X = unit.Pos.X + 4, Y = unit.Pos.Y + 4
                }, TargetingData.AttackPoint, 0);
                if (chokePoint != null)
                {
                    TargetingData.ForwardDefensePoint = chokePoint;
                    var chokePoints = ChokePointService.GetEntireChokePoint(chokePoint);
                    if (chokePoints != null)
                    {
                        var wallPoints = ChokePointService.GetWallOffPoints(chokePoints);
                        if (wallPoints != null)
                        {
                            TargetingData.ForwardDefenseWallOffPoints = wallPoints;
                        }
                    }
                }
                else
                {
                    TargetingData.ForwardDefensePoint = new Point2D {
                        X = unit.Pos.X, Y = unit.Pos.Y
                    };
                }

                if (MapData.PartialWallData != null)
                {
                    var wallData = MapData.PartialWallData.FirstOrDefault(b => b.BasePosition.X == unit.Pos.X && b.BasePosition.Y == unit.Pos.Y);
                    if (wallData != null && wallData.Door != null)
                    {
                        TargetingData.ForwardDefensePoint = wallData.Door;
                    }
                }

                TargetingData.SelfMainBasePoint = new Point2D {
                    X = unit.Pos.X, Y = unit.Pos.Y
                };
                var naturalBaseLocation = BaseData.BaseLocations.Skip(1).Take(1).FirstOrDefault();
                if (naturalBaseLocation != null)
                {
                    TargetingData.NaturalBasePoint = naturalBaseLocation.Location;
                }
                return;
            }
        }
Example #4
0
 public override void OnStart(ResponseGameInfo gameInfo, ResponseData data, ResponsePing pingResponse, ResponseObservation observation, uint playerId, string opponentId)
 {
     foreach (var playerInfo in gameInfo.PlayerInfo)
     {
         if (playerInfo.PlayerId != playerId)
         {
             EnemyData.EnemyRace = playerInfo.RaceRequested;
         }
     }
 }
Example #5
0
        public void OnStart(ResponseGameInfo gameInfo, ResponseData data, ResponsePing pingResponse, ResponseObservation observation, uint playerId, string opponentID)
        {
            Observation = observation;
            GameInfo    = gameInfo;
            PlayerId    = playerId;
            Data        = data;
            UnitTypes.LoadData(data);

            GameVersion = pingResponse.GameVersion;
            OldMapData  = SC2Util.IsVersionBefore("4.9.3");
            DebugUtil.WriteLine("Game version: " + pingResponse.GameVersion);

            OpponentID = opponentID;

            MyRace    = GameInfo.PlayerInfo[(int)Observation.Observation.PlayerCommon.PlayerId - 1].RaceActual;
            EnemyRace = GameInfo.PlayerInfo[2 - (int)Observation.Observation.PlayerCommon.PlayerId].RaceActual;
            DebugUtil.WriteLine("MyRace: " + MyRace);
            DebugUtil.WriteLine("EnemyRace: " + EnemyRace);
            DebugUtil.WriteLine("Game started on map: " + GameInfo.MapName);

            FileUtil.Log("Game started on map: " + GameInfo.MapName);
            FileUtil.Log("Enemy race: " + EnemyRace);

            MapAnalyzer.Analyze(this);
            TargetManager.OnStart(this);
            BaseManager.OnStart(this);

            Build = DetermineBuild();
            Build.InitializeTasks();
            Build.OnStart(this);

            FileUtil.Register("started " + EnemyRace + " " + Build.Name());


            Managers.Add(UnitManager);
            Managers.Add(EnemyManager);
            Managers.Add(BaseManager);
            Managers.Add(TargetManager);
            Managers.Add(TaskManager);
            Managers.Add(EffectManager);
            Managers.Add(EnemyMineManager);
            Managers.Add(EnemyTankManager);
            Managers.Add(EnemyCycloneManager);
            Managers.Add(EnemyBansheesManager);

            if (GameInfo.PlayerInfo[(int)Observation.Observation.PlayerCommon.PlayerId - 1].RaceActual == Race.Protoss)
            {
                Managers.Add(NexusAbilityManager);
            }

            if (GameInfo.PlayerInfo[(int)Observation.Observation.PlayerCommon.PlayerId - 1].RaceActual == Race.Terran)
            {
                Managers.Add(OrbitalAbilityManager);
            }
        }
Example #6
0
 public override void OnStart(ResponseGameInfo gameInfo, ResponseData data, ResponsePing pingResponse, ResponseObservation observation, uint playerId, string opponentId)
 {
     foreach (UnitTypeData unitType in data.Units)
     {
         SharkyUnitData.UnitData.Add((UnitTypes)unitType.UnitId, unitType);
         if (unitType.AbilityId != 0)
         {
             SharkyUnitData.UnitAbilities.Add((Abilities)unitType.AbilityId, (UnitTypes)unitType.UnitId);
         }
     }
 }
Example #7
0
        public override void OnStart(ResponseGameInfo gameInfo, ResponseData data, ResponsePing pingResponse, ResponseObservation observation, uint playerId, string opponentId)
        {
            foreach (var playerInfo in gameInfo.PlayerInfo)
            {
                if (playerInfo.PlayerId == playerId)
                {
                    MacroData.Race = playerInfo.RaceActual;
                }
            }

            MacroSetup.SetupMacro(MacroData);
        }
Example #8
0
        public void OnStart(ResponseGameInfo gameInfo, ResponseData data, ResponsePing pingResponse, ResponseObservation observation, uint playerId, string opponentID)
        {
            GameTime = Stopwatch.StartNew();
            GameInfo = gameInfo;

            CustomActionList.Add(new BotActin(true, new Action {
                ActionChat = new ActionChat {
                    Message = "good luck have fun and... not enouph minerals"
                }
            }, 5));
            //CustomActionList.Add(new BotActin(true, new Action { ActionRaw = new ActionRaw()
        }
Example #9
0
        // Ping
        private void MessagePing(MessageInfo messageInfo)
        {
            RequestPing requestPing = ProtoTransfer.DeserializeProtoBuf3 <RequestPing>(messageInfo.Buffer);
            User        user        = UserManager.Instance.GetUserByToken(requestPing.Token);

            if (user != null)
            {
                ResponsePing responsePing = new ResponsePing()
                {
                    Uid   = user.Id,
                    Token = user.Token
                };
                MessageBuffer _message = new MessageBuffer((int)MessageID.ScResponsePing, ProtoTransfer.SerializeProtoBuf3(responsePing), user.Id);
                Send(new MessageInfo(_message, messageInfo.Session));
            }
        }
Example #10
0
        public void OnStart(ResponseGameInfo gameInfo, ResponseData data, ResponsePing pingResponse, ResponseObservation observation, uint playerId, string opponentId)
        {
            Console.WriteLine($"Game Version: {pingResponse.GameVersion}");
            var stopwatch = new Stopwatch();

            stopwatch.Start();

            foreach (var manager in Managers)
            {
                manager.OnStart(gameInfo, data, pingResponse, observation, playerId, opponentId);
            }

            stopwatch.Stop();
            Console.WriteLine($"OnStart: {stopwatch.ElapsedMilliseconds} ms");

            TotalFrameTime = 0;
        }
Example #11
0
        public override void OnStart(ResponseGameInfo gameInfo, ResponseData data, ResponsePing pingResponse, ResponseObservation observation, uint playerId, string opponentId)
        {
            ActiveChatData.TimeModulation = 1;
            LastFrameTime    = 0;
            RuntimeFrameRate = SharkyOptions.FramesPerSecond;

            GreetingSent = false;

            ActiveChatData.ChatActions = new List <Action>();

            Self  = gameInfo.PlayerInfo[(int)observation.Observation.PlayerCommon.PlayerId - 1];
            Enemy = gameInfo.PlayerInfo[2 - (int)observation.Observation.PlayerCommon.PlayerId];

            ConversationName = $"starcraft-{Enemy.PlayerId}-{DateTimeOffset.Now.ToUnixTimeMilliseconds()}";

            ActiveChatData.EnemyName = EnemyNameService.GetEnemyNameFromId(opponentId, EnemyPlayerManager.Enemies);

            ChatHistory.EnemyChatHistory = new Dictionary <int, string>();
            ChatHistory.MyChatHistory    = new Dictionary <int, string>();
        }
Example #12
0
 public virtual void OnStart(ResponseGameInfo gameInfo, ResponseData data, ResponsePing pingResponse, ResponseObservation observation, uint playerId, string opponentId)
 {
 }
Example #13
0
File: Bot.cs Project: evilz/TyrSc2
        public void OnStart(ResponseGameInfo gameInfo, ResponseData data, ResponsePing pingResponse, ResponseObservation observation, uint playerId, string opponentID)
        {
            ArchonMode = Settings.ArchonMode();

            Observation = observation;
            GameInfo    = gameInfo;


            foreach (MapEnum map in System.Enum.GetValues(typeof(MapEnum)))
            {
                if (MapNameMatches(map))
                {
                    System.Console.WriteLine("Setting map name to: " + map.ToString());
                    GameInfo.MapName = map.ToString();
                    Map = map;
                    break;
                }
            }

            PlayerId = playerId;
            Data     = data;

            if (!Settings.MapAllowed(GameInfo.MapName))
            {
                DebugUtil.WriteLine("Tyr does not support the map " + GameInfo.MapName + ". If Tyr should accept this map as well, you can add the line 'map " + GameInfo.MapName + "' to the settings.txt file.");
                FileUtil.Log("Tyr does not support the map " + GameInfo.MapName + ". If Tyr should accept this map as well, you can add the line 'map " + GameInfo.MapName + "' to the settings.txt file.");
                System.Console.ReadLine();
                throw new System.Exception("Tyr does not support the map " + GameInfo.MapName + ". If Tyr should accept this map as well, you can add the line 'map " + GameInfo.MapName + "' to the settings.txt file.");
            }

            GameVersion = pingResponse.GameVersion;
            OldMapData  = SC2Util.IsVersionBefore("4.9.3");
            DebugUtil.WriteLine("Game version: " + pingResponse.GameVersion);
            UnitTypes.LoadData(data);

            OpponentID = opponentID;

            MyRace = GameInfo.PlayerInfo[(int)Observation.Observation.PlayerCommon.PlayerId - 1].RaceActual;
            if (GameInfo.PlayerInfo[2 - (int)Observation.Observation.PlayerCommon.PlayerId].RaceActual == Race.NoRace)
            {
                EnemyRace = GameInfo.PlayerInfo[2 - (int)Observation.Observation.PlayerCommon.PlayerId].RaceRequested;
            }
            else
            {
                EnemyRace = GameInfo.PlayerInfo[2 - (int)Observation.Observation.PlayerCommon.PlayerId].RaceActual;
            }
            DebugUtil.WriteLine("MyRace: " + MyRace);
            DebugUtil.WriteLine("EnemyRace: " + EnemyRace);
            DebugUtil.WriteLine("Game started on map: " + GameInfo.MapName);

            FileUtil.Log("Game started on map: " + GameInfo.MapName);
            FileUtil.Log("Enemy race: " + EnemyRace);

            MapAnalyzer.Analyze(this);
            TargetManager.OnStart(this);
            BaseManager.OnStart(this);

            foreach (Plugin plugin in Plugins)
            {
                plugin.OnStart();
            }

            Build = DetermineBuild();
            Build.InitializeTasks();
            Build.OnStart(this);

            FileUtil.Register("started " + EnemyRace + " " + Build.Name());

            Managers.Add(UnitManager);
            Managers.Add(EnemyManager);
            Managers.Add(BaseManager);
            Managers.Add(TargetManager);
            Managers.Add(TaskManager);
            Managers.Add(EffectManager);
            Managers.Add(EnemyMineManager);
            Managers.Add(EnemyTankManager);
            Managers.Add(EnemyCycloneManager);
            Managers.Add(EnemyBansheesManager);

            if (GameInfo.PlayerInfo[(int)Observation.Observation.PlayerCommon.PlayerId - 1].RaceActual == Race.Protoss)
            {
                Managers.Add(NexusAbilityManager);
            }

            if (GameInfo.PlayerInfo[(int)Observation.Observation.PlayerCommon.PlayerId - 1].RaceActual == Race.Terran)
            {
                Managers.Add(OrbitalAbilityManager);
            }
        }
Example #14
0
 public override void OnStart(ResponseGameInfo gameInfo, ResponseData data, ResponsePing pingResponse, ResponseObservation observation, uint playerId, string opponentId)
 {
     AttackData.CustomAttackFunction = true;
     AttackData.Attacking            = false;
 }
Example #15
0
 public void OnStart(ResponseGameInfo gameInfo, ResponseData data, ResponsePing pingResponse, ResponseObservation observation, uint playerId, string opponentID)
 {
     GameTime = Stopwatch.StartNew();
 }
Example #16
0
        public async Task Run(Bot bot, uint playerId, string opponentID)
        {
            Request gameInfoReq = new Request();

            gameInfoReq.GameInfo = new RequestGameInfo();

            Response gameInfoResponse = await proxy.SendRequest(gameInfoReq);

            Request gameDataRequest = new Request();

            gameDataRequest.Data            = new RequestData();
            gameDataRequest.Data.UnitTypeId = true;
            gameDataRequest.Data.AbilityId  = true;
            gameDataRequest.Data.BuffId     = true;
            gameDataRequest.Data.EffectId   = true;
            gameDataRequest.Data.UpgradeId  = true;

            Response dataResponse = await proxy.SendRequest(gameDataRequest);

            ResponsePing pingResponse = await Ping();

            bool start = true;

            while (true)
            {
                Request observationRequest = new Request();
                observationRequest.Observation = new RequestObservation();
                Response response = await proxy.SendRequest(observationRequest);

                ResponseObservation observation = response.Observation;

                if (observation == null)
                {
                    bot.OnEnd(observation, Result.Unset);
                    break;
                }
                if (response.Status == Status.Ended || response.Status == Status.Quit)
                {
                    bot.OnEnd(observation, observation.PlayerResult[(int)playerId - 1].Result);
                    break;
                }

                if (start)
                {
                    start = false;
                    bot.OnStart(gameInfoResponse.GameInfo, dataResponse.Data, pingResponse, observation, playerId, opponentID);
                }

                IEnumerable <SC2APIProtocol.Action> actions = bot.OnFrame(observation);

                Request actionRequest = new Request();
                actionRequest.Action = new RequestAction();
                actionRequest.Action.Actions.AddRange(actions);
                if (actionRequest.Action.Actions.Count > 0)
                {
                    await proxy.SendRequest(actionRequest);
                }

                Request stepRequest = new Request();
                stepRequest.Step       = new RequestStep();
                stepRequest.Step.Count = 1;
                await proxy.SendRequest(stepRequest);
            }
        }
Example #17
0
        public override void OnStart(ResponseGameInfo gameInfo, ResponseData data, ResponsePing pingResponse, ResponseObservation observation, uint playerId, string opponentId)
        {
            PlacementGrid = gameInfo.StartRaw.PlacementGrid;

            var mineralFields = new List <Unit>();

            foreach (var unit in observation.Observation.RawData.Units)
            {
                if (SharkyUnitData.MineralFieldTypes.Contains((UnitTypes)unit.UnitType))
                {
                    mineralFields.Add(unit);
                }
            }
            mineralFields = mineralFields.OrderBy(m => m.Pos.X).ThenBy(m => m.Pos.Y).ToList();

            var mineralGroups = new Dictionary <ulong, int>();
            int currentSet    = 0;

            foreach (var mineralField in mineralFields)
            {
                if (!mineralGroups.ContainsKey(mineralField.Tag))
                {
                    var baseLocation = new BaseLocation();
                    BaseData.BaseLocations.Add(baseLocation);
                    mineralGroups.Add(mineralField.Tag, currentSet);
                    baseLocation.MineralFields.Add(mineralField);

                    for (int i = 0; i < baseLocation.MineralFields.Count; i++)
                    {
                        var mineralFieldA = baseLocation.MineralFields[i];
                        foreach (var closeMineralField in mineralFields)
                        {
                            if (mineralGroups.ContainsKey(closeMineralField.Tag))
                            {
                                continue;
                            }

                            if (Vector2.DistanceSquared(new Vector2(mineralFieldA.Pos.X, mineralFieldA.Pos.Y), new Vector2(closeMineralField.Pos.X, closeMineralField.Pos.Y)) <= 16)
                            {
                                mineralGroups.Add(closeMineralField.Tag, currentSet);
                                baseLocation.MineralFields.Add(closeMineralField);
                            }
                        }
                    }
                    currentSet++;
                }
            }

            var gasses = new List <Unit>();

            foreach (var unit in observation.Observation.RawData.Units)
            {
                if (SharkyUnitData.GasGeyserTypes.Contains((UnitTypes)unit.UnitType))
                {
                    gasses.Add(unit);
                }
            }
            gasses = gasses.OrderBy(g => g.Pos.X).ThenBy(g => g.Pos.Y).ToList();

            foreach (var location in BaseData.BaseLocations)
            {
                DetermineFinalLocation(location, gasses);
                SetMineralLineLocation(location);
            }

            var startingUnit = observation.Observation.RawData.Units.FirstOrDefault(u => u.Alliance == Alliance.Self && SharkyUnitData.ResourceCenterTypes.Contains((UnitTypes)u.UnitType));

            BaseData.BaseLocations           = BaseData.BaseLocations.OrderBy(b => PathFinder.GetGroundPath(startingUnit.Pos.X + 4, startingUnit.Pos.Y + 4, b.Location.X, b.Location.Y, 0).Count()).ToList();
            BaseData.MainBase                = BaseData.BaseLocations.FirstOrDefault();
            BaseData.MainBase.ResourceCenter = startingUnit;
            BaseData.SelfBases               = new List <BaseLocation> {
                BaseData.MainBase
            };
            SetupMiningInfo();

            var enemystartingLocation = gameInfo.StartRaw.StartLocations.Last();

            BaseData.EnemyBaseLocations = BaseData.BaseLocations.OrderBy(b => PathFinder.GetGroundPath(enemystartingLocation.X + 4, enemystartingLocation.Y + 4, b.Location.X, b.Location.Y, 0).Count()).ToList();
            BaseData.EnemyBases         = new List <BaseLocation> {
                BaseData.EnemyBaseLocations.FirstOrDefault()
            };
        }