Example #1
0
        private async Task Receiver()
        {
            Response response;
            var      tasks = new List <Task>();

            do
            {
                response = await _connectionService.ReceiveRequestAsync();

                if (response.HasObservation)
                {
                    ResponseObservation = response.Observation;
                    if (MapManager == null)
                    {
                        MapManager = GetMapManager();
                    }
                    await _workerManager.BuildWorkerIfEmptyQueue(ResponseObservation.Observation);

                    await _buildQueue.Act(ResponseObservation.Observation);
                }
                if (response.HasData)
                {
                    ResponseData = response.Data;
                }
                if (response.HasGameInfo)
                {
                    ResponseGameInfo = response.GameInfo;
                }
            } while (response.Status != Status.Ended || response.Status != Status.Quit);
        }
Example #2
0
        public void OnStart(ResponseGameInfo gameInfo, ResponseData data, ResponseObservation observation, uint playerId)
        {
            if (realTime)
            {
                sw = new Stopwatch();
                sw.Start();
            }
            GameInfo          = gameInfo;
            Data              = data;
            Observation       = observation;
            PlayerId          = (int)playerId - 1;
            OppenentsPlayerId = PlayerId == 1 ? 0 : 1;
            Race              = GameInfo.PlayerInfo[PlayerId].RaceActual;
            OpponentsRace     = GameInfo.PlayerInfo[OppenentsPlayerId].RaceActual;
            Units.LoadData();
            StateManager = new StateManager();
            StateManager.OnFrame();

            Map = new MapAnalyser();
            Map.Analyse(this);
            Build = new RoachAllIn();
            if (test)
            {
                Build = new Testzerg();
            }
            Build.OnStart();

            TaskManager = new TaskManager();
        }
Example #3
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 #4
0
        public Map(ResponseGameInfo gameInfo, uint playerID)
        {
            this.name     = gameInfo.MapName;
            this.checksum = GetCheckSum(Path.Combine(GameConnection.starcraftMaps, gameInfo.LocalMapPath));
            this.fn       = Path.Combine(location, name + " on " + DateTime.UtcNow.ToString("yyyy-MM-dd HH.mm.ss.ffff") + ".json").Replace("\\", "/");

            foreach (var playerInfo in gameInfo.PlayerInfo)
            {
                if (playerInfo.PlayerId != playerID)
                {
                    if (playerInfo.RaceRequested == Race.Protoss)
                    {
                        this.enemyRace = "Protoss";
                    }
                    else if (playerInfo.RaceRequested == Race.Terran)
                    {
                        this.enemyRace = "Terran";
                    }
                    else if (playerInfo.RaceRequested == Race.Zerg)
                    {
                        this.enemyRace = "Zerg";
                    }
                    else if (playerInfo.RaceRequested == Race.Random)
                    {
                        this.enemyRace = "Random";
                    }
                    break;
                }
            }
        }
Example #5
0
        public RobotAi(ResponseGameInfo gameInfoResponse, ResponseData data)
        {
            this.gameInfo = gameInfoResponse;
            dataInfo      = data;

            game = new Game(data);
        }
Example #6
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 #7
0
        public void UpdateGame(ResponseGameInfo gameInfo, IReadOnlyCollection <SC2APIProtocol.Unit> sc2Units)
        {
            if (latestGameInfo == null)
            {
                return;
            }

            latestGameInfo = gameInfo;

            Resources.Update(sc2Units);
            Enemy.Update(sc2Units);
            Self.Update(sc2Units);



            foreach (var cc in Self.Buildings.LocateAll <ControlAbleBuilding>())
            {
                cc.Train(Terran.CommandCenter.Units.Scv);
            }



            Self.Units.First().SetupHighOrder(new HighLevelOrder()
            {
                Goal = Goal.Scout, Duration = Duration.AsLongAsPossible, Area = MapArea.EnemyBase
            });
        }
Example #8
0
        public IEnumerable <SC2APIProtocol.Action> OnFrame(ResponseGameInfo gameInfo, ResponseObservation obs)
        {
            Controller.OpenFrame(gameInfo, obs);

            if (Controller.frame == 0)
            {
                Logger.Info("Initializing AviloBot");
                Logger.Info("--------------------------------------");
                Logger.Info("Map: {0}", gameInfo.MapName);
                Logger.Info("--------------------------------------");

                mapData = new Map(gameInfo, Controller.playerID);
            }


            Chatterer.Act(gameInfo, obs);
            General.Act(gameInfo, obs);

            Commander.Act(gameInfo, obs);


            //hack, because LadderManager doesn't deliver Result
            //if (Controller.After(60 * 5) && (Controller.Each(10)))
            //    OnGameEnded();


            return(Controller.CloseFrame());
        }
Example #9
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 #10
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;
         }
     }
 }
 public void LeaveGame()
 {
     Call(new Request {
         LeaveGame = new RequestLeaveGame()
     }).Wait();
     gameInfo   = null;
     unitTypes  = null;
     abilities  = null;
     translator = null;
 }
Example #12
0
        public void OnStart(ResponseGameInfo gameInfo, ResponseData data, ResponseObservation observation, uint playerId, string opponentID)
        {
            Observation = observation;
            GameInfo    = gameInfo;
            PlayerId    = playerId;
            Data        = data;
            UnitTypes.LoadData(data);

            MyRace    = GameInfo.PlayerInfo[(int)Observation.Observation.PlayerCommon.PlayerId - 1].RaceActual;
            EnemyRace = GameInfo.PlayerInfo[2 - (int)Observation.Observation.PlayerCommon.PlayerId].RaceRequested;
            System.Console.WriteLine("MyRace: " + MyRace);

            if (AllowWritingFiles)
            {
                File.AppendAllLines(Directory.GetCurrentDirectory() + "/Data/Tyr/Tyr.log", new string[] { "Game started on map: " + GameInfo.MapName });
                File.AppendAllLines(Directory.GetCurrentDirectory() + "/Data/Tyr/Tyr.log", new string[] { "Enemy race: " + EnemyRace });
            }

            if (opponentID == null)
            {
                ResultsFile = Directory.GetCurrentDirectory() + "/Data/Tyr/" + EnemyRace + ".txt";
            }
            else
            {
                ResultsFile = Directory.GetCurrentDirectory() + "/Data/Tyr/" + opponentID + ".txt";
            }

            if (AllowWritingFiles && !File.Exists(ResultsFile))
            {
                File.Create(ResultsFile).Close();
            }

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

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

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


            Managers.Add(UnitManager);
            Managers.Add(EnemyManager);
            Managers.Add(BaseManager);
            Managers.Add(TargetManager);
            Managers.Add(TaskManager);
            Managers.Add(EffectManager);

            if (GameInfo.PlayerInfo[(int)Observation.Observation.PlayerCommon.PlayerId - 1].RaceActual == Race.Protoss)
            {
                Managers.Add(NexusAbilityManager);
            }
        }
Example #13
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 #14
0
 public SC2GameState(GameState gameState)
 {
     NewObservation = gameState.NewObservation;
     GameInfo       = gameState.GameInfo;
     LastActions    = gameState.LastActions.ToList();
     if (gameState.LastObservation != null)
     {
         LastObservation = gameState.LastObservation.Value;
     }
     CurrentAction = new SC2APIProtocol.Action();
 }
Example #15
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 #16
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 #17
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 #18
0
 public void Initialize(ResponseGameInfo info, IIntelManager intelManager)
 {
     PlacementGrid = MapHandler.Instantiate(info.StartRaw.PlacementGrid);
     NonPathable   = MapHandler.Instantiate(info.StartRaw.PathingGrid);
     TerrainHeight = MapHandler.Instantiate(info.StartRaw.TerrainHeight);
     BlockedGrid   = MapHandler.Instantiate(PlacementGrid.Width, PlacementGrid.Height);
     NaturalGrid   = MapHandler.Instantiate(PlacementGrid.Width, PlacementGrid.Height);
     Power         = MapHandler.Instantiate(PlacementGrid.Width, PlacementGrid.Height);
     Creep         = MapHandler.Instantiate(PlacementGrid.Width, PlacementGrid.Height);
     Explored      = MapHandler.Instantiate(PlacementGrid.Width, PlacementGrid.Height);
     intelManager.Handler.RegisterHandler(Case.StructureAddedSelf, u => EventUnitAdded(u));
     intelManager.Handler.RegisterHandler(Case.StructureDestroyed, u => EventUnitDestroyed(u));
 }
Example #19
0
        public GameState(
            ResponseGameInfo gameInfo,
            ResponseObservation observation,
            Map map,
            Dictionary <uint, UnitTypeData> unitTypes,
            Dictionary <uint, AbilityData> abilities,
            Dictionary <uint, BuffData> buffs,
            Translator translator,
            params object[] mapData)
        {
            this.GameInfo   = gameInfo;
            this.Response   = observation;
            this.Map        = map;
            this.UnitTypes  = unitTypes;
            this.Abilities  = abilities;
            this.Translator = translator;
            this.Buffs      = buffs;
            this.mapData    = mapData.ToDictionary(m => m.GetType());

            var unitsByAlliance = this.Response.Observation.RawData.Units.GroupBy(u => u.Alliance);

            foreach (var grouping in unitsByAlliance)
            {
                if (grouping.Key == Alliance.Self)
                {
                    this.Units = grouping.Select(translator.ConvertUnit).ToList();
                }
                else if (grouping.Key == Alliance.Ally)
                {
                    this.AlliedUnits = grouping.Select(translator.ConvertUnit).ToList();
                }
                else if (grouping.Key == Alliance.Enemy)
                {
                    this.EnemyUnits = grouping.Select(translator.ConvertUnit).ToList();
                }
                else if (grouping.Key == Alliance.Neutral)
                {
                    this.NeutralUnits = grouping.Select(translator.ConvertUnit).ToList();
                }
            }

            this.Units        = this.Units ?? new List <Unit>();
            this.AlliedUnits  = this.AlliedUnits ?? new List <Unit>();
            this.EnemyUnits   = this.EnemyUnits ?? new List <Unit>();
            this.NeutralUnits = this.NeutralUnits ?? new List <Unit>();

            this.AllUnits = this.Units.Concat(this.AlliedUnits).Concat(this.EnemyUnits).Concat(this.NeutralUnits).ToList();
        }
Example #20
0
        public static void Act(ResponseGameInfo gameInfo, ResponseObservation obs)
        {
            if (Controller.frame == 0)
            {
                Chat("hello", chatHello);
            }

            if ((Controller.ownUnits.structures.Count == 1) && (Controller.ownUnits.structures[0].integrity < 0.35f))
            {
                Chat("gg", chatGG);
            }

            if (Controller.At(10 * 60))
            {
                if (Controller.score > 10000)
                {
                    Chat("winning1", winning1);
                }
                else
                {
                    Chat("losing1", losing1);
                }
            }

            if (Controller.At(15 * 60))
            {
                if (Controller.score > 15000)
                {
                    Chat("winning2", winning2);
                }
                else
                {
                    Chat("losing1", losing1);
                }
            }

            if (Controller.At(20 * 60))
            {
                if (Controller.score > 25000)
                {
                    Chat("winning2", winning3);
                }
                else
                {
                    Chat("losing1", losing1);
                }
            }
        }
        public GameState GetGameState()
        {
            gameInfo = gameInfo ?? Call(new Request {
                GameInfo = new RequestGameInfo()
            }, r => r?.GameInfo != null).Result.GameInfo;
            unitTypes = unitTypes ?? Call(new Request {
                Data = new RequestData {
                    UnitTypeId = true
                }
            }, r => (r?.Data?.Units).NotNullOrEmpty()).Result.Data.Units.ToDictionary(unitType => unitType.UnitId);
            abilities = abilities ?? Call(new Request {
                Data = new RequestData {
                    AbilityId = true
                }
            }, r => (r?.Data?.Abilities).NotNullOrEmpty()).Result.Data.Abilities.ToDictionary(ability => ability.AbilityId);
            buffs = buffs ?? Call(new Request {
                Data = new RequestData {
                    BuffId = true
                }
            }, r => (r?.Data?.Buffs).NotNullOrEmpty()).Result.Data.Buffs.ToDictionary(b => b.BuffId);

            translator = translator ?? new Translator(abilities, unitTypes, buffs);

            map = map ?? new Map(gameInfo.StartRaw);

            var response = Call(new Request {
                Observation = new RequestObservation()
            }, r => r?.Observation != null);

            var observation = response.Result.Observation;

            var units = observation.Observation.RawData.Units.Select(u => translator.ConvertUnit(u)).ToList();

            map = new Map(map, units, translator, unitTypes, observation.Observation.RawData.MapState.Creep);

            foreach (var mapDataType in mapAnalyzers.Keys)
            {
                var method = typeof(SynchronousApiClient).GetMethod("InvokeAnalyzer", BindingFlags.NonPublic | BindingFlags.Instance).MakeGenericMethod(mapDataType);
                method.Invoke(this, new object[] { map });
            }

            var mapDataArray = mapData.Values.ToArray();

            lastGameState = new GameState(gameInfo, response.Result.Observation, map, unitTypes, abilities, buffs, translator, mapDataArray);
            return(lastGameState);
        }
Example #22
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 #23
0
        public void OpenFrame(ResponseGameInfo gameInfo, ResponseObservation obs)
        {
            this.obs      = obs;
            this.gameInfo = gameInfo;
            this.actions  = new List <SC2APIProtocol.Action>();

            if (obs == null)
            {
                Logger.Info("ResponseObservation is null! The application will terminate.");
                Pause();
                Environment.Exit(0);
            }

            foreach (var chat in obs.Chat)
            {
                this.chatLog.Add(chat.Message);
            }

            this.frame         = obs.Observation.GameLoop;
            this.currentSupply = obs.Observation.PlayerCommon.FoodUsed;
            this.maxSupply     = obs.Observation.PlayerCommon.FoodCap;
            this.minerals      = obs.Observation.PlayerCommon.Minerals;
            this.vespene       = obs.Observation.PlayerCommon.Vespene;

            PopulateInventory();

            if (frame == 0)
            {
                var rcPosition = GetPosition(units.resourceCenters[0]);
                foreach (var startLocation in gameInfo.StartRaw.StartLocations)
                {
                    var enemyLocation = new Vector3(startLocation.X, startLocation.Y, 0);
                    var distance      = GetDistance(enemyLocation, rcPosition);
                    if (distance > 30)
                    {
                        enemyLocations.Add(enemyLocation);
                    }
                }
            }

            if (frameDelay > 0)
            {
                System.Threading.Thread.Sleep(frameDelay);
            }
        }
Example #24
0
        public IEnumerable <Action> GetActions(ResponseObservation observation, ResponseGameInfo giResponseGameInfo)
        {
            var actions = new List <Action>();



            if (observation?.Observation?.RawData == null)
            {
                return(actions);
            }


            game.UpdateGame(giResponseGameInfo, observation.Observation.RawData.Units);
            actions.AddRange(game.CollectOrders());



            return(actions);
        }
        public void Setup()
        {
            // From AcropolisLE.SC2Map
            var mapSize = new Size2DI {
                X = 176, Y = 184
            };

            _gameInfo = new ResponseGameInfo
            {
                StartRaw = new StartRaw
                {
                    MapSize     = mapSize,
                    PathingGrid = new ImageData
                    {
                        BitsPerPixel = 1,
                        Size         = mapSize,
                        Data         = ByteString.FromBase64(PathingGridBitmap)
                    },
                    PlacementGrid = new ImageData
                    {
                        BitsPerPixel = 1,
                        Size         = mapSize,
                        Data         = ByteString.FromBase64(PlacementGridBitmap)
                    },
                    PlayableArea = new RectangleI
                    {
                        P0 = new PointI {
                            X = 18, Y = 18
                        },
                        P1 = new PointI {
                            X = 156, Y = 153
                        }
                    }
                }
            };

            // Test grid setup
            GridConverter.GetDataValueBit(_gameInfo.StartRaw.PathingGrid, 22, 131).Should().Be(1);
            GridConverter.GetDataValueBit(_gameInfo.StartRaw.PlacementGrid, 22, 131).Should().Be(1);
            GridConverter.GetDataValueBit(_gameInfo.StartRaw.PathingGrid, 40, 124).Should().Be(1);
            GridConverter.GetDataValueBit(_gameInfo.StartRaw.PlacementGrid, 40, 123).Should().Be(0);
        }
Example #26
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 #27
0
        public void LoadFrom(Stream s)
        {
            BinaryReader bw = new BinaryReader(s);

            NewObservation = new ResponseObservation();
            NewObservation.Load(bw);
            GameInfo = new ResponseGameInfo();
            GameInfo.Load(bw);
            LastObservation = new ResponseObservation();
            LastObservation.Load(bw);
            int num = bw.ReadInt32();

            LastActions = new List <SC2APIProtocol.Action>();
            for (int i = 0; i < num; i++)
            {
                SC2APIProtocol.Action a = new SC2APIProtocol.Action();
                a.Load(bw);
                LastActions.Add(a);
            }
            CurrentAction = new SC2APIProtocol.Action();
            CurrentAction.Load(bw);
            AIActions.Load(bw);
        }
Example #28
0
        protected void GetPlayerInfo(ResponseGameInfo gameInfo, uint playerId, string opponentId)
        {
            string enemyName = string.Empty;

            foreach (var playerInfo in gameInfo.PlayerInfo)
            {
                if (playerInfo.PlayerId == playerId)
                {
                    ActualRace   = playerInfo.RaceActual;
                    SelectedRace = playerInfo.RaceRequested;
                }
                else
                {
                    if (playerInfo.PlayerName != null)
                    {
                        enemyName = playerInfo.PlayerName;
                    }
                    EnemyRace         = playerInfo.RaceRequested;
                    EnemySelectedRace = playerInfo.RaceRequested;
                }
            }

            EnemyPlayer = EnemyPlayerService.Enemies.FirstOrDefault(e => e.Id == opponentId);
            if (opponentId == "test" && EnemyPlayer == null)
            {
                EnemyPlayer = new EnemyPlayer.EnemyPlayer {
                    ChatMatches = new List <string>(), Games = new List <Game>(), Id = opponentId, Name = "test"
                };
            }
            if (EnemyPlayer == null)
            {
                EnemyPlayer = new EnemyPlayer.EnemyPlayer {
                    ChatMatches = new List <string>(), Games = new List <Game>(), Id = opponentId, Name = enemyName
                };
            }
        }
Example #29
0
        public IEnumerable <SC2APIProtocol.Action> onFrame(ResponseGameInfo gameInfo, ResponseObservation observation, uint playerId)
        {
            List <SC2APIProtocol.Action> actions = new List <SC2APIProtocol.Action>();

            return(actions);
        }
Example #30
0
 public virtual void OnStart(ResponseGameInfo gameInfo, ResponseData data, ResponsePing pingResponse, ResponseObservation observation, uint playerId, string opponentId)
 {
 }